Currently, openvswitch tries to disable LRO from the user space. This does not work correctly when the device added is a vlan interface, though. Instead of dealing with possibly complex stacked cross name space relations in the user space, do the same as bridging does and call dev_disable_lro in the kernel.
As there are use cases of openvswitch setup that can keep LRO enabled and there's a planned feature to optimize such use cases (and stop disabling LRO unconditionally from the user space daemon), allow the user space to override this when adding the interface. Signed-off-by: Jiri Benc <jb...@redhat.com> --- include/uapi/linux/openvswitch.h | 9 +++++++++ net/openvswitch/vport-netdev.c | 3 +++ 2 files changed, 12 insertions(+) diff --git a/include/uapi/linux/openvswitch.h b/include/uapi/linux/openvswitch.h index bbd49a0c46c7..3832953a4f27 100644 --- a/include/uapi/linux/openvswitch.h +++ b/include/uapi/linux/openvswitch.h @@ -252,6 +252,15 @@ enum ovs_vport_attr { #define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1) +/* OVS_VPORT_ATTR_OPTIONS attributes for netdev vports. + */ +enum { + OVS_NETDEV_ATTR_KEEP_LRO, /* flag */ + __OVS_NETDEV_ATTR_MAX +}; + +#define OVS_NETDEV_ATTR_MAX (__OVS_NETDEV_ATTR_MAX - 1) + enum { OVS_VXLAN_EXT_UNSPEC, OVS_VXLAN_EXT_GBP, /* Flag or __u32 */ diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index 4776282c6417..04391b6cfb9a 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c @@ -125,6 +125,9 @@ static struct vport *netdev_create(const struct vport_parms *parms) if (err) goto error_master_upper_dev_unlink; + if (!parms->options || + !nla_find_nested(parms->options, OVS_NETDEV_ATTR_KEEP_LRO)) + dev_disable_lro(netdev_vport->dev); dev_set_promiscuity(netdev_vport->dev, 1); netdev_vport->dev->priv_flags |= IFF_OVS_DATAPATH; rtnl_unlock(); -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html