diff options
Diffstat (limited to 'net/ipv4/ipip.c')
-rw-r--r-- | net/ipv4/ipip.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index 099fc1c428b4..4be88cc98957 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
@@ -680,29 +680,27 @@ ipip_tunnel_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) | |||
680 | break; | 680 | break; |
681 | } | 681 | } |
682 | t = netdev_priv(dev); | 682 | t = netdev_priv(dev); |
683 | ipip_tunnel_unlink(ipn, t); | ||
684 | synchronize_net(); | ||
685 | t->parms.iph.saddr = p.iph.saddr; | ||
686 | t->parms.iph.daddr = p.iph.daddr; | ||
687 | memcpy(dev->dev_addr, &p.iph.saddr, 4); | ||
688 | memcpy(dev->broadcast, &p.iph.daddr, 4); | ||
689 | ipip_tunnel_link(ipn, t); | ||
690 | netdev_state_change(dev); | ||
691 | } | 683 | } |
684 | |||
685 | ipip_tunnel_unlink(ipn, t); | ||
686 | synchronize_net(); | ||
687 | t->parms.iph.saddr = p.iph.saddr; | ||
688 | t->parms.iph.daddr = p.iph.daddr; | ||
689 | memcpy(dev->dev_addr, &p.iph.saddr, 4); | ||
690 | memcpy(dev->broadcast, &p.iph.daddr, 4); | ||
691 | ipip_tunnel_link(ipn, t); | ||
692 | t->parms.iph.ttl = p.iph.ttl; | ||
693 | t->parms.iph.tos = p.iph.tos; | ||
694 | t->parms.iph.frag_off = p.iph.frag_off; | ||
695 | if (t->parms.link != p.link) { | ||
696 | t->parms.link = p.link; | ||
697 | ipip_tunnel_bind_dev(dev); | ||
698 | } | ||
699 | netdev_state_change(dev); | ||
692 | } | 700 | } |
693 | 701 | ||
694 | if (t) { | 702 | if (t) { |
695 | err = 0; | 703 | err = 0; |
696 | if (cmd == SIOCCHGTUNNEL) { | ||
697 | t->parms.iph.ttl = p.iph.ttl; | ||
698 | t->parms.iph.tos = p.iph.tos; | ||
699 | t->parms.iph.frag_off = p.iph.frag_off; | ||
700 | if (t->parms.link != p.link) { | ||
701 | t->parms.link = p.link; | ||
702 | ipip_tunnel_bind_dev(dev); | ||
703 | netdev_state_change(dev); | ||
704 | } | ||
705 | } | ||
706 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &t->parms, sizeof(p))) | 704 | if (copy_to_user(ifr->ifr_ifru.ifru_data, &t->parms, sizeof(p))) |
707 | err = -EFAULT; | 705 | err = -EFAULT; |
708 | } else | 706 | } else |