Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55e5bfb5 authored by David Wragg's avatar David Wragg Committed by David S. Miller
Browse files

geneve: Relax MTU constraints



Allow the MTU of geneve devices to be set to large values, in order to
exploit underlying networks with larger frame sizes.

GENEVE does not have a fixed encapsulation overhead (an openvswitch
rule can add variable length options), so there is no relevant maximum
MTU to enforce.  A maximum of IP_MAX_MTU is used instead.
Encapsulated packets that are too big for the underlying network will
get dropped on the floor.

Signed-off-by: default avatarDavid Wragg <david@weave.works>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 72564b59
Loading
Loading
Loading
Loading
+12 −1
Original line number Original line Diff line number Diff line
@@ -1039,6 +1039,17 @@ static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev)
	return geneve_xmit_skb(skb, dev, info);
	return geneve_xmit_skb(skb, dev, info);
}
}


static int geneve_change_mtu(struct net_device *dev, int new_mtu)
{
	/* GENEVE overhead is not fixed, so we can't enforce a more
	 * precise max MTU.
	 */
	if (new_mtu < 68 || new_mtu > IP_MAX_MTU)
		return -EINVAL;
	dev->mtu = new_mtu;
	return 0;
}

static int geneve_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
static int geneve_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb)
{
{
	struct ip_tunnel_info *info = skb_tunnel_info(skb);
	struct ip_tunnel_info *info = skb_tunnel_info(skb);
@@ -1083,7 +1094,7 @@ static const struct net_device_ops geneve_netdev_ops = {
	.ndo_stop		= geneve_stop,
	.ndo_stop		= geneve_stop,
	.ndo_start_xmit		= geneve_xmit,
	.ndo_start_xmit		= geneve_xmit,
	.ndo_get_stats64	= ip_tunnel_get_stats64,
	.ndo_get_stats64	= ip_tunnel_get_stats64,
	.ndo_change_mtu		= eth_change_mtu,
	.ndo_change_mtu		= geneve_change_mtu,
	.ndo_validate_addr	= eth_validate_addr,
	.ndo_validate_addr	= eth_validate_addr,
	.ndo_set_mac_address	= eth_mac_addr,
	.ndo_set_mac_address	= eth_mac_addr,
	.ndo_fill_metadata_dst	= geneve_fill_metadata_dst,
	.ndo_fill_metadata_dst	= geneve_fill_metadata_dst,