New: Cannot set larger mtu on vlan then on underlying untagged device
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]/
(switched to email. Please respond via emailed reply-to-all, not via the bugzilla web interface).
Quoted 81 lines · On Sat, 6 Jun 2009 17:43:46 GMT [email protected] wrote:
http://bugzilla.kernel.org/show_bug.cgi?id=13467
Summary: Cannot set larger mtu on vlan then on underlying untagged device Product: Networking Version: 2.5 Kernel Version: 2.6.27.24-170.2.68.fc10.i686 Platform: All OS/Version: Linux Tree: Fedora Status: NEW Severity: normal Priority: P1 Component: Other AssignedTo: [email protected] ReportedBy: [email protected] Regression: NoI want to create vlan interface which uses jumbo frames while underlying network device is still using standerd 1500 bytes frames. So I tried:
tkepczyx-mobl1:~# ip link show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100 link/ether 00:0d:60:79:e0:9d brd ff:ff:ff:ff:ff:ff tkepczyx-mobl1:~# vconfig add eth0 12 Added VLAN with VID == 12 to IF -:eth0:- tkepczyx-mobl1:~# ip link set dev eth0.12 mtu 9000 RTNETLINK answers: Numerical result out of rangeSo I made sure that eth0 supports 9000 bytes mtu:
tkepczyx-mobl1:~# ip link set dev eth0 mtu 9000 tkepczyx-mobl1:~# ip link show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UP qlen 100 link/ether 00:0d:60:79:e0:9d brd ff:ff:ff:ff:ff:ffIt apparently does. So I gave it another try:
tkepczyx-mobl1:~# ip link set dev eth0.12 mtu 9000 tkepczyx-mobl1:~# ip link show dev eth0.12 4: eth0.12@eth0: <BROADCAST,MULTICAST> mtu 9000 qdisc noop state DOWN link/ether 00:0d:60:79:e0:9d brd ff:ff:ff:ff:ff:ffNow it worked. So lets decrease mtu on eth0:
tkepczyx-mobl1:~# ip link set dev eth0 mtu 1500 tkepczyx-mobl1:~# ip link show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100 link/ether 00:0d:60:79:e0:9d brd ff:ff:ff:ff:ff:ff tkepczyx-mobl1:~# ip link show dev eth0.12 4: eth0.12@eth0: <BROADCAST,MULTICAST> mtu 9000 qdisc noop state DOWN link/ether 00:0d:60:79:e0:9d brd ff:ff:ff:ff:ff:ffIt also worked.
Now - if there is a reason which prevents me to increase mtu on vlan over mtu on underlyng device, the very same reason should have prevented me from decreasing mtu on underlying eth0 below mtu on eth0.12 vlan. This is a fault.I started digging a bit in sources and there is one thing which rings a bell:
vlan_dev_change_mtufunction innet/8021q/vlan_dev.c:static int
vlan_dev_change_mtu(struct net_device *dev, int new_mtu){ /* TODO: gotta make sure the underlying layer can handle it, * maybe an IFF_VLAN_CAPABLE flag for devices? */ if (vlan_dev_info(dev)->real_dev->mtu < new_mtu) return -ERANGE; dev->mtu = new_mtu; return 0; }My guess is that check in
if()statement above is against currently configured mtu while it probably should check what physically device can transmit.
Quoted 3 lines · Andrew Morton
Quoted 3 lines
Summary: Cannot set larger mtu on vlan then on underlying
untagged device
Please try this patch.
vlan: Propagate physical MTU changes
When the physical MTU changes we want to ensure that all existing VLAN device MTUs do not exceed the new underlying MTU. This patch adds that propagation.
net/8021q/vlan.c +13 -0
@@ -468,6 +468,19 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, }break ; +case NETDEV_CHANGEMTU : +for (i =0 ; i <VLAN_GROUP_ARRAY_LEN ; i++) { + vlandev =vlan_group_get_device (grp, i); +if (!vlandev) +continue ; + +if (vlandev->mtu <= dev->mtu) +continue ; + +dev_set_mtu (vlandev, dev->mtu); + } +break ; +case NETDEV_FEAT_CHANGE :/* Propagate device features to underlying device */ for (i =0 ; i <VLAN_GROUP_ARRAY_LEN ; i++) {
Cheers,
Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txtDavid Miller
maintainerFrom: Herbert Xu <[email protected]>
Date: Mon, 6 Jul 2009 18:19:50 +0800
Quoted 7 lines
Quoted 3 lines · Andrew Morton
Quoted 3 lines
Summary: Cannot set larger mtu on vlan then on underlying
untagged devicePlease try this patch.
Quoted 7 lines
vlan: Propagate physical MTU changes
When the physical MTU changes we want to ensure that all existing VLAN device MTUs do not exceed the new underlying MTU. This patch adds that propagation.
Signed-off-by Herbert Xu <[email protected]>
Please can we have some test results for this patch? It's been more than a week since this patch and request for testing was posted.
Thanks.
From: Herbert Xu <[email protected]>
Date: Mon, 6 Jul 2009 18:19:50 +0800
Quoted 7 lines
vlan: Propagate physical MTU changes
When the physical MTU changes we want to ensure that all existing VLAN device MTUs do not exceed the new underlying MTU. This patch adds that propagation.
Signed-off-by Herbert Xu <[email protected]>
Applied to net-next-2.6, thanks.