]> Pileus Git - ~andy/linux/commitdiff
sit: always notify change when params are updated
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Wed, 14 Nov 2012 05:14:04 +0000 (05:14 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 15 Nov 2012 03:02:38 +0000 (22:02 -0500)
netdev_state_change() was called only when end points or link was updated. Now
that all parameters are advertised via netlink, we must advertise any change.

This patch also prepares the support of sit tunnels management via rtnl. The
code which update tunnels will be put in a new function.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/sit.c

index 5bce2f6980444e0d1bd69254dc3c6ebfb8f4b6aa..cd6a2b2d766a2e275265eb9dcd48751fb365d87f 100644 (file)
@@ -978,28 +978,26 @@ ipip6_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd)
                                        break;
                                }
                                t = netdev_priv(dev);
-                               ipip6_tunnel_unlink(sitn, t);
-                               synchronize_net();
-                               t->parms.iph.saddr = p.iph.saddr;
-                               t->parms.iph.daddr = p.iph.daddr;
-                               memcpy(dev->dev_addr, &p.iph.saddr, 4);
-                               memcpy(dev->broadcast, &p.iph.daddr, 4);
-                               ipip6_tunnel_link(sitn, t);
-                               netdev_state_change(dev);
                        }
+
+                       ipip6_tunnel_unlink(sitn, t);
+                       synchronize_net();
+                       t->parms.iph.saddr = p.iph.saddr;
+                       t->parms.iph.daddr = p.iph.daddr;
+                       memcpy(dev->dev_addr, &p.iph.saddr, 4);
+                       memcpy(dev->broadcast, &p.iph.daddr, 4);
+                       ipip6_tunnel_link(sitn, t);
+                       t->parms.iph.ttl = p.iph.ttl;
+                       t->parms.iph.tos = p.iph.tos;
+                       if (t->parms.link != p.link) {
+                               t->parms.link = p.link;
+                               ipip6_tunnel_bind_dev(dev);
+                       }
+                       netdev_state_change(dev);
                }
 
                if (t) {
                        err = 0;
-                       if (cmd == SIOCCHGTUNNEL) {
-                               t->parms.iph.ttl = p.iph.ttl;
-                               t->parms.iph.tos = p.iph.tos;
-                               if (t->parms.link != p.link) {
-                                       t->parms.link = p.link;
-                                       ipip6_tunnel_bind_dev(dev);
-                                       netdev_state_change(dev);
-                               }
-                       }
                        if (copy_to_user(ifr->ifr_ifru.ifru_data, &t->parms, sizeof(p)))
                                err = -EFAULT;
                } else