Re: [PATCH] geneve: fix max_mtu setting

2 messages, 2 authors, 2016-06-27 · open the first message on its own page

Re: [PATCH] geneve: fix max_mtu setting

From: 严海双 <hidden>
Date: 2016-06-27 01:14:11

On Jun 26, 2016, at 8:35 PM, zhuyj [off-list ref] wrote:

+       if (geneve->remote.sa.sa_family == AF_INET)
+               max_mtu -= sizeof(struct iphdr);
+       else
+               max_mtu -= sizeof(struct ipv6hdr);

Sorry, if sa_family is not AF_NET, it is AF_INET6?

There is a lot of macros in include/linux/socket.h.

Zhu Yanjun
There are only two enumerations AF_INET and AF_INET6 have been assigned in geneve_newlink:

        if (data[IFLA_GENEVE_REMOTE] && data[IFLA_GENEVE_REMOTE6])
                return -EINVAL;

        if (data[IFLA_GENEVE_REMOTE]) {
                remote.sa.sa_family = AF_INET;
                remote.sin.sin_addr.s_addr =
                        nla_get_in_addr(data[IFLA_GENEVE_REMOTE]);
        }

        if (data[IFLA_GENEVE_REMOTE6]) {
                if (!IS_ENABLED(CONFIG_IPV6))
                        return -EPFNOSUPPORT;

                remote.sa.sa_family = AF_INET6;
                remote.sin6.sin6_addr =
                        nla_get_in6_addr(data[IFLA_GENEVE_REMOTE6]);

                if (ipv6_addr_type(&remote.sin6.sin6_addr) &
                    IPV6_ADDR_LINKLOCAL) {
                        netdev_dbg(dev, "link-local remote is unsupported\n");
                        return -EINVAL;
                }
        }

So I think the else case is for AF_INET6 only.

Re: [PATCH] geneve: fix max_mtu setting

From: Jesse Gross <jesse@kernel.org>
Date: 2016-06-27 16:11:17

On Sun, Jun 26, 2016 at 6:13 PM, 严海双 [off-list ref] wrote:
quoted
On Jun 26, 2016, at 8:35 PM, zhuyj [off-list ref] wrote:

+       if (geneve->remote.sa.sa_family == AF_INET)
+               max_mtu -= sizeof(struct iphdr);
+       else
+               max_mtu -= sizeof(struct ipv6hdr);

Sorry, if sa_family is not AF_NET, it is AF_INET6?

There is a lot of macros in include/linux/socket.h.

Zhu Yanjun
There are only two enumerations AF_INET and AF_INET6 have been assigned in geneve_newlink:
There's actually a third possibility: AF_UNSPEC, which is the default
if neither remote type is specified. This is used by lightweight
tunnels and should be able to work with either IPv4/v6. For the
purposes of the MTU calculation this means that the IPv4 header size
should be used to avoid disallowing potentially valid configurations.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help