Large Receive Offload (LRO) is only appropriate for packets that are
destined for the host, and should be disabled if received packets may
be forwarded.
Further, macvtap_skb_to_vnet_hdr() will BUG() on a packet received
with LRO (but not GRO).
Signed-off-by: Ben Hutchings <redacted>
---
I'm not really familiar with macvlan so I'm not certain that this should
be applied to all modes.
Ben.
drivers/net/macvlan.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 9ea9921..c64e26c 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -168,6 +168,11 @@ static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
unsigned int len = 0;
int ret = NET_RX_DROP;
+ if (skb_warn_if_lro(skb)) {
+ kfree_skb(skb);
+ return RX_HANDLER_CONSUMED;
+ }
+
port = macvlan_port_get_rcu(skb->dev);
if (is_multicast_ether_addr(eth->h_dest)) {
skb = ip_check_defrag(skb, IP_DEFRAG_MACVLAN);@@ -717,6 +722,8 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
memcpy(dev->dev_addr, lowerdev->dev_addr, ETH_ALEN);
}
+ dev_disable_lro(lowerdev);
+
port->count += 1;
err = register_netdevice(dev);
if (err < 0)
--
1.7.7.6
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.