aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ipv6/ip6_vti.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
index fa3ae1cb50d3..2ceef41cc097 100644
--- a/net/ipv6/ip6_vti.c
+++ b/net/ipv6/ip6_vti.c
@@ -627,6 +627,7 @@ static void vti6_link_config(struct ip6_tnl *t)
627 struct net_device *dev = t->dev; 627 struct net_device *dev = t->dev;
628 struct __ip6_tnl_parm *p = &t->parms; 628 struct __ip6_tnl_parm *p = &t->parms;
629 struct net_device *tdev = NULL; 629 struct net_device *tdev = NULL;
630 int mtu;
630 631
631 memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr)); 632 memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr));
632 memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr)); 633 memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr));
@@ -656,8 +657,11 @@ static void vti6_link_config(struct ip6_tnl *t)
656 tdev = __dev_get_by_index(t->net, p->link); 657 tdev = __dev_get_by_index(t->net, p->link);
657 658
658 if (tdev) 659 if (tdev)
659 dev->mtu = max_t(int, tdev->mtu - dev->hard_header_len, 660 mtu = tdev->mtu - sizeof(struct ipv6hdr);
660 IPV6_MIN_MTU); 661 else
662 mtu = ETH_DATA_LEN - LL_MAX_HEADER - sizeof(struct ipv6hdr);
663
664 dev->mtu = max_t(int, mtu, IPV6_MIN_MTU);
661} 665}
662 666
663/** 667/**
@@ -866,8 +870,6 @@ static void vti6_dev_setup(struct net_device *dev)
866 dev->priv_destructor = vti6_dev_free; 870 dev->priv_destructor = vti6_dev_free;
867 871
868 dev->type = ARPHRD_TUNNEL6; 872 dev->type = ARPHRD_TUNNEL6;
869 dev->hard_header_len = LL_MAX_HEADER + sizeof(struct ipv6hdr);
870 dev->mtu = ETH_DATA_LEN;
871 dev->min_mtu = IPV6_MIN_MTU; 873 dev->min_mtu = IPV6_MIN_MTU;
872 dev->max_mtu = IP_MAX_MTU; 874 dev->max_mtu = IP_MAX_MTU;
873 dev->flags |= IFF_NOARP; 875 dev->flags |= IFF_NOARP;