Discussion:
[net-next 1/2] ip6_tunnel: put ip6tnl0 FB device into 'any' mode
Alexey Andriyanov
2014-10-21 08:11:27 UTC
Permalink
The fallback device is in ipv6 mode by default.
The mode can not be changed in runtime, so there
is no way to decapsulate ip4in6 packets coming from
various sources without creating the specific tunnel
ifaces for each peer.

Cc: David Miller <***@davemloft.net>
Cc: Eric Dumazet <***@google.com>
Signed-off-by: Alexey Andriyanov <***@al-an.info>
---
net/ipv6/ip6_tunnel.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 9409887..a48f212 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1551,7 +1551,8 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
if (err)
return err;

- t->parms.proto = IPPROTO_IPV6;
+ /* allow any registered unrelying proto for the FB device */
+ t->parms.proto = 0;
dev_hold(dev);

ip6_tnl_link_config(t);
--
1.9.1
Alexey Andriyanov
2014-10-21 08:19:55 UTC
Permalink
The fallback device is in ipv6 mode by default.
The mode can not be changed in runtime, so there
is no way to decapsulate ip4in6 packets coming from
various sources without creating the specific tunnel
ifaces for each peer.

Cc: David Miller <***@davemloft.net>
Cc: Eric Dumazet <***@google.com>
Signed-off-by: Alexey Andriyanov <***@al-an.info>
---
net/ipv6/ip6_tunnel.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 9409887..a48f212 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1551,7 +1551,8 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev)
if (err)
return err;

- t->parms.proto = IPPROTO_IPV6;
+ /* allow any registered unrelying proto for the FB device */
+ t->parms.proto = 0;
dev_hold(dev);

ip6_tnl_link_config(t);
--
1.9.1
Alexey Andriyanov
2014-10-21 08:11:28 UTC
Permalink
The fallback device is in ipv6 mode by default.
The mode can not be changed in runtime, so there
is no way to decapsulate ip4in6 packets coming from
various sources without creating the specific tunnel
ifaces for each peer.

This allows to update the fallback tunnel device, but only
the mode could be changed.

Cc: David Miller <***@davemloft.net>
Cc: Eric Dumazet <***@google.com>
Signed-off-by: Alexey Andriyanov <***@al-an.info>
---
net/ipv6/ip6_tunnel.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index a48f212..0e45ec9 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1285,6 +1285,14 @@ static int ip6_tnl_update(struct ip6_tnl *t, struct __ip6_tnl_parm *p)
return err;
}

+static int ip6_tnl0_update(struct ip6_tnl *t, struct __ip6_tnl_parm *p)
+{
+ /* for default tnl0 device allow to change only the proto */
+ t->parms.proto = p->proto;
+ netdev_state_change(t->dev);
+ return 0;
+}
+
static void
ip6_tnl_parm_from_user(struct __ip6_tnl_parm *p, const struct ip6_tnl_parm *u)
{
@@ -1384,7 +1392,7 @@ ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
break;
ip6_tnl_parm_from_user(&p1, &p);
t = ip6_tnl_locate(net, &p1, cmd == SIOCADDTUNNEL);
- if (dev != ip6n->fb_tnl_dev && cmd == SIOCCHGTUNNEL) {
+ if (cmd == SIOCCHGTUNNEL) {
if (t != NULL) {
if (t->dev != dev) {
err = -EEXIST;
@@ -1392,8 +1400,10 @@ ip6_tnl_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
}
} else
t = netdev_priv(dev);
-
- err = ip6_tnl_update(t, &p1);
+ if (dev == ip6n->fb_tnl_dev)
+ err = ip6_tnl0_update(t, &p1);
+ else
+ err = ip6_tnl_update(t, &p1);
}
if (t) {
err = 0;
--
1.9.1
Nicolas Dichtel
2014-10-21 15:13:16 UTC
Permalink
Post by Alexey Andriyanov
The fallback device is in ipv6 mode by default.
After patch 1/2, this is not true. Am I missing something?
Alexey Andrianov
2014-10-21 15:46:16 UTC
Permalink
No, you're right. My fault is I missed the cover letter explaining that=
=20
both patches together are overkill. One should be enough. It could be=20
the 1st, but it may cause some compatibility issues. So the maintainer=20
could choose either the second or both.

And I'm really sorry for duplicate messages.
Post by Nicolas Dichtel
Post by Alexey Andriyanov
The fallback device is in ipv6 mode by default.
After patch 1/2, this is not true. Am I missing something?
--=20
Best regards,
Alexey
David Miller
2014-10-22 16:47:59 UTC
Permalink
From: "Alexey Andriyanov" <***@al-an.info>
Date: Tue, 21 Oct 2014 12:11:27 +0400
Post by Alexey Andriyanov
The fallback device is in ipv6 mode by default.
The mode can not be changed in runtime, so there
is no way to decapsulate ip4in6 packets coming from
various sources without creating the specific tunnel
ifaces for each peer.
I don't think you can legitimately change this after all
these years. You'll break someone's setup somehow.

You're going to have to find a way to achieve what you
want whilst keeping the default unchanged.

Sorry.

Loading...