kni: calculate MTU from mbuf size
- mbuf_size and mtu are now being calculated according to the given mb-pool. - max_mtu is now being set according to the given mtu the above two changes provide the ability to work with jumbo frames Signed-off-by: Liron Himi <lironh@marvell.com> Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
parent
23d5455517
commit
ff1e35fb5f
@ -55,7 +55,8 @@ configuration:
|
||||
|
||||
Interface name: kni#
|
||||
force bind kernel thread to a core : NO
|
||||
mbuf size: MAX_PACKET_SZ
|
||||
mbuf size: (rte_pktmbuf_data_room_size(pktmbuf_pool) - RTE_PKTMBUF_HEADROOM)
|
||||
mtu: (conf.mbuf_size - ETHER_HDR_LEN)
|
||||
|
||||
KNI control path is not supported with the PMD, since there is no physical
|
||||
backend device by default.
|
||||
|
@ -187,6 +187,8 @@ The ``struct rte_kni_conf`` structure contains fields which allow the
|
||||
user to specify the interface name, set the MTU size, set an explicit or
|
||||
random MAC address and control the affinity of the kernel Rx thread(s)
|
||||
(both single and multi-threaded modes).
|
||||
By default the KNI sample example gets the MTU from the matching device,
|
||||
and in case of KNI PMD it is derived from mbuf buffer length.
|
||||
|
||||
The ``struct rte_kni_ops`` structure contains pointers to functions to
|
||||
handle requests from the ``rte_kni`` kernel module. These functions
|
||||
|
@ -54,6 +54,15 @@ New Features
|
||||
Also, make sure to start the actual text at the margin.
|
||||
=========================================================
|
||||
|
||||
* **Updated KNI module and PMD.**
|
||||
|
||||
Updated the KNI kernel module to set the max_mtu according to the given
|
||||
initial MTU size. Without it, the maximum MTU was 1500.
|
||||
|
||||
Updated the KNI PMD driver to set the mbuf_size and MTU based on
|
||||
the given mb-pool. This provide the ability to pass jumbo frames
|
||||
if the mb-pool contains suitable buffers' size.
|
||||
|
||||
* **Updated Solarflare network PMD.**
|
||||
|
||||
Updated the sfc_efx driver including the following changes:
|
||||
|
@ -16,9 +16,11 @@
|
||||
/* Only single queue supported */
|
||||
#define KNI_MAX_QUEUE_PER_PORT 1
|
||||
|
||||
#define MAX_PACKET_SZ 2048
|
||||
#define MAX_KNI_PORTS 8
|
||||
|
||||
#define KNI_ETHER_MTU(mbuf_size) \
|
||||
((mbuf_size) - ETHER_HDR_LEN) /**< Ethernet MTU. */
|
||||
|
||||
#define ETH_KNI_NO_REQUEST_THREAD_ARG "no_request_thread"
|
||||
static const char * const valid_arguments[] = {
|
||||
ETH_KNI_NO_REQUEST_THREAD_ARG,
|
||||
@ -123,11 +125,13 @@ eth_kni_start(struct rte_eth_dev *dev)
|
||||
struct rte_kni_conf conf;
|
||||
const char *name = dev->device->name + 4; /* remove net_ */
|
||||
|
||||
mb_pool = internals->rx_queues[0].mb_pool;
|
||||
snprintf(conf.name, RTE_KNI_NAMESIZE, "%s", name);
|
||||
conf.force_bind = 0;
|
||||
conf.group_id = port_id;
|
||||
conf.mbuf_size = MAX_PACKET_SZ;
|
||||
mb_pool = internals->rx_queues[0].mb_pool;
|
||||
conf.mbuf_size =
|
||||
rte_pktmbuf_data_room_size(mb_pool) - RTE_PKTMBUF_HEADROOM;
|
||||
conf.mtu = KNI_ETHER_MTU(conf.mbuf_size);
|
||||
|
||||
internals->kni = rte_kni_alloc(mb_pool, &conf, NULL);
|
||||
if (internals->kni == NULL) {
|
||||
|
@ -114,6 +114,10 @@
|
||||
#define ndo_change_mtu ndo_change_mtu_rh74
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
|
||||
#define HAVE_MAX_MTU_PARAM
|
||||
#endif
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
|
||||
#define HAVE_SIGNAL_FUNCTIONS_OWN_HEADER
|
||||
#endif
|
||||
|
@ -459,6 +459,9 @@ kni_ioctl_create(struct net *net, uint32_t ioctl_num,
|
||||
|
||||
if (dev_info.mtu)
|
||||
net_dev->mtu = dev_info.mtu;
|
||||
#ifdef HAVE_MAX_MTU_PARAM
|
||||
net_dev->max_mtu = net_dev->mtu;
|
||||
#endif
|
||||
|
||||
ret = register_netdev(net_dev);
|
||||
if (ret) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user