datapath: Consider tunnels to have no MTU, fixing jumbo frame support.
authorBen Pfaff <blp@nicira.com>
Tue, 1 Feb 2011 19:32:06 +0000 (11:32 -0800)
committerBen Pfaff <blp@nicira.com>
Fri, 4 Feb 2011 17:46:26 +0000 (09:46 -0800)
commitf915f1a8ca180828983ef22cf2fd21b8f010b972
treecd34e78f86df1bdadc7430da75beb75403c27619
parentbfa68a2b1fc49a8755748548836e92a5bae7bcb3
datapath: Consider tunnels to have no MTU, fixing jumbo frame support.

Until now, tunnel vports have had a specific MTU, in the same way that
ordinary network devices have an MTU, but treating them this way does not
always make sense.  For example, consider a datapath that has three ports:
the local port, a GRE tunnel to another host, and a physical port.  If
the physical port is configured with a jumbo MTU, it should be possible to
send jumbo packets across the tunnel: the tunnel can do fragmentation or
the physical port traversed by the tunnel might have a jumbo MTU.

However, until now, tunnels always had a 1500-byte MTU by default.  It
could be adjusted using ODP_VPORT_MTU_SET, but nothing actually did this.
One alternative would be to make ovs-vswitchd able to set the vport's MTU.
This commit, however, takes a different approach, of dropping the concept
of MTU entirely for tunnel vports.  This also solves the problem described
above, without making any additional work for anyone.

I tested that, without this change, I could not send 1600-byte "pings"
between two machines whose NICs had 2000-byte MTUs that were connected to
vswitches that were in turn connected over GRE tunnels with the default
1500-byte MTU.  With this change, it worked OK, regardless of the MTU of
the network traversed by the GRE tunnel.

This patch also makes "patch" ports MTU-less.

It might make sense to remove vport_set_mtu() and the associated callback
now, since ordinary network devices are the only vports that support it
now.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Suggested-by: Jesse Gross <jesse@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
Bug #3728.
17 files changed:
datapath/datapath.c
datapath/tunnel.c
datapath/tunnel.h
datapath/vport-capwap.c
datapath/vport-gre.c
datapath/vport-patch.c
datapath/vport.c
datapath/vport.h
include/openvswitch/datapath-protocol.h
lib/dhcp-client.c
lib/dpif-linux.c
lib/dpif-netdev.c
lib/netdev-linux.c
lib/netdev-provider.h
lib/netdev.c
vswitchd/bridge.c
vswitchd/vswitch.xml