From 49e7e2dee3f05bb3ba2e14cea5318915a3b47f59 Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Fri, 25 Oct 2019 19:30:58 +0100 Subject: [PATCH] kni: add ability to set min/max MTU Starting with kernel version 4.10, there are new min/max MTU values in net_device structure, which are set to ETH_MIN_MTU and ETH_DATA_LEN by default. We should be able to change these values to allow MTU more than 1500 to be set on KNI. Signed-off-by: Igor Ryzhov Acked-by: Ferruh Yigit --- examples/kni/main.c | 3 +++ kernel/linux/kni/kni_misc.c | 6 ++++++ lib/librte_eal/linux/eal/include/rte_kni_common.h | 2 ++ lib/librte_kni/rte_kni.c | 2 ++ lib/librte_kni/rte_kni.h | 2 ++ 5 files changed, 15 insertions(+) diff --git a/examples/kni/main.c b/examples/kni/main.c index c576fc767e..5f713e6b22 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -949,6 +949,9 @@ kni_alloc(uint16_t port_id) rte_eth_dev_get_mtu(port_id, &conf.mtu); + conf.min_mtu = dev_info.min_mtu; + conf.max_mtu = dev_info.max_mtu; + memset(&ops, 0, sizeof(ops)); ops.port_id = port_id; ops.change_mtu = kni_change_mtu; diff --git a/kernel/linux/kni/kni_misc.c b/kernel/linux/kni/kni_misc.c index 2b75502a8b..84ef03b5f8 100644 --- a/kernel/linux/kni/kni_misc.c +++ b/kernel/linux/kni/kni_misc.c @@ -388,6 +388,12 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num, net_dev->mtu = dev_info.mtu; #ifdef HAVE_MAX_MTU_PARAM net_dev->max_mtu = net_dev->mtu; + + if (dev_info.min_mtu) + net_dev->min_mtu = dev_info.min_mtu; + + if (dev_info.max_mtu) + net_dev->max_mtu = dev_info.max_mtu; #endif ret = register_netdev(net_dev); diff --git a/lib/librte_eal/linux/eal/include/rte_kni_common.h b/lib/librte_eal/linux/eal/include/rte_kni_common.h index b51fe27bd7..46f75a7103 100644 --- a/lib/librte_eal/linux/eal/include/rte_kni_common.h +++ b/lib/librte_eal/linux/eal/include/rte_kni_common.h @@ -122,6 +122,8 @@ struct rte_kni_device_info { /* mbuf size */ unsigned mbuf_size; unsigned int mtu; + unsigned int min_mtu; + unsigned int max_mtu; uint8_t mac_addr[6]; }; diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c index 0f36485089..7fbcf22010 100644 --- a/lib/librte_kni/rte_kni.c +++ b/lib/librte_kni/rte_kni.c @@ -252,6 +252,8 @@ rte_kni_alloc(struct rte_mempool *pktmbuf_pool, dev_info.group_id = conf->group_id; dev_info.mbuf_size = conf->mbuf_size; dev_info.mtu = conf->mtu; + dev_info.min_mtu = conf->min_mtu; + dev_info.max_mtu = conf->max_mtu; memcpy(dev_info.mac_addr, conf->mac_addr, RTE_ETHER_ADDR_LEN); diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h index f6b66c33de..f1bb782c68 100644 --- a/lib/librte_kni/rte_kni.h +++ b/lib/librte_kni/rte_kni.h @@ -73,6 +73,8 @@ struct rte_kni_conf { uint8_t force_bind : 1; /* Flag to bind kernel thread */ uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; /* MAC address assigned to KNI */ uint16_t mtu; + uint16_t min_mtu; + uint16_t max_mtu; }; /** -- 2.20.1