[systemd-devel] [PATCH 05/11] sd-icmp6-nd: Add helper function to get the IPv6 link MTU
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Tue Jan 13 16:15:17 PST 2015
On Tue, Jan 13, 2015 at 02:02:15PM +0200, Patrik Flykt wrote:
> Update MTU according to the latest value received.
> ---
> src/libsystemd-network/sd-icmp6-nd.c | 30 ++++++++++++++++++++++++++++++
> src/systemd/sd-icmp6-nd.h | 2 ++
> 2 files changed, 32 insertions(+)
>
> diff --git a/src/libsystemd-network/sd-icmp6-nd.c b/src/libsystemd-network/sd-icmp6-nd.c
> index 35d5f5f..3501055 100644
> --- a/src/libsystemd-network/sd-icmp6-nd.c
> +++ b/src/libsystemd-network/sd-icmp6-nd.c
> @@ -271,10 +271,24 @@ int sd_icmp6_nd_new(sd_icmp6_nd **ret) {
> return 0;
> }
>
> +int sd_icmp6_ra_get_mtu(sd_icmp6_nd *nd, uint32_t *mtu) {
> + assert_return(nd, -EINVAL);
> + assert_return(mtu, -EINVAL);
> +
> + if (!nd->link || !nd->link->mtu)
> + return -ENOMSG;
> +
> + *mtu = nd->link->mtu;
> +
> + return 0;
> +}
> +
> static int icmp6_ra_parse(sd_icmp6_nd *nd, struct nd_router_advert *ra,
> ssize_t len) {
> void *opt;
> struct nd_opt_hdr *opt_hdr;
> + struct nd_opt_mtu *opt_mtu;
> + uint32_t mtu;
>
> assert_return(nd, -EINVAL);
> assert_return(nd->link, -EINVAL);
> @@ -293,6 +307,22 @@ static int icmp6_ra_parse(sd_icmp6_nd *nd, struct nd_router_advert *ra,
> return -ENOMSG;
>
> switch (opt_hdr->nd_opt_type) {
> + case ND_OPT_MTU:
Would be nicer to define
struct nd_opt_mtu *opt_mtu;
here.
> + opt_mtu = opt;
> +
> + mtu = be32toh(opt_mtu->nd_opt_mtu_mtu);
> +
> + if (!nd->link->mtu || mtu < nd->link->mtu) {
> + if (mtu < IP6_MIN_MTU)
> + nd->link->mtu = IP6_MIN_MTU;
> + else
> + nd->link->mtu = mtu;
nd->link->mtu = MAX(mtu, IP6_MIN_MTU)?
> +
> + log_icmp6_nd(nd, "Link MTU %d advertised %d",
> + nd->link->mtu, mtu);
There's strange indentation and the debug message is pretty cryptic.
> + }
> +
> + break;
>
> }
>
> diff --git a/src/systemd/sd-icmp6-nd.h b/src/systemd/sd-icmp6-nd.h
> index 73f91aa..73ebccf 100644
> --- a/src/systemd/sd-icmp6-nd.h
> +++ b/src/systemd/sd-icmp6-nd.h
> @@ -51,6 +51,8 @@ sd_icmp6_nd *sd_icmp6_nd_ref(sd_icmp6_nd *nd);
> sd_icmp6_nd *sd_icmp6_nd_unref(sd_icmp6_nd *nd);
> int sd_icmp6_nd_new(sd_icmp6_nd **ret);
>
> +int sd_icmp6_ra_get_mtu(sd_icmp6_nd *nd, uint32_t *mtu);
> +
> int sd_icmp6_nd_stop(sd_icmp6_nd *nd);
> int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd);
>
More information about the systemd-devel
mailing list