From: Igor Ryzhov Date: Fri, 25 Oct 2019 18:30:58 +0000 (+0100) Subject: kni: add ability to set min/max MTU X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=49e7e2dee3f05bb3ba2e14cea5318915a3b47f59;p=dpdk.git 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 --- 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; }; /**