Currently, even if the entire path supports jumbo frames, the LISP netdev limits the path MTU to 1500 bytes, and cannot be configured otherwise. Relax the constraints on modifying the device MTU, and set it to the maximum by default.
Signed-off-by: Joe Stringer <j...@ovn.org> --- datapath/linux/compat/lisp.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/datapath/linux/compat/lisp.c b/datapath/linux/compat/lisp.c index e5a6a7fe00a4..0c81dd52ecab 100644 --- a/datapath/linux/compat/lisp.c +++ b/datapath/linux/compat/lisp.c @@ -114,6 +114,7 @@ struct lisphdr { }; #define LISP_HLEN (sizeof(struct udphdr) + sizeof(struct lisphdr)) +#define LISP_MAX_MTU (LISP_HLEN + sizeof(struct iphdr) + sizeof(struct ethhdr)) static inline struct lisphdr *lisp_hdr(const struct sk_buff *skb) { @@ -447,6 +448,15 @@ static netdev_tx_t lisp_dev_xmit(struct sk_buff *skb, struct net_device *dev) #endif } +static int lisp_change_mtu(struct net_device *dev, int new_mtu) +{ + if (new_mtu < 68 || new_mtu > LISP_MAX_MTU) + return -EINVAL; + + dev->mtu = new_mtu; + return 0; +} + static const struct net_device_ops lisp_netdev_ops = { #ifdef HAVE_DEV_TSTATS .ndo_init = lisp_init, @@ -456,7 +466,7 @@ static const struct net_device_ops lisp_netdev_ops = { .ndo_open = lisp_open, .ndo_stop = lisp_stop, .ndo_start_xmit = lisp_dev_xmit, - .ndo_change_mtu = eth_change_mtu, + .ndo_change_mtu = lisp_change_mtu, .ndo_validate_addr = eth_validate_addr, .ndo_set_mac_address = eth_mac_addr, }; @@ -553,6 +563,10 @@ static int lisp_configure(struct net *net, struct net_device *dev, if (err) return err; + err = lisp_change_mtu(dev, LISP_MAX_MTU); + if (err) + return err; + list_add(&lisp->next, &ln->lisp_list); return 0; } -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev