[dpdk-dev,3/3] kni: set initial value for MTU

Message ID 1512042367-6361-3-git-send-email-hemant.agrawal@nxp.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Hemant Agrawal Nov. 30, 2017, 11:46 a.m. UTC
  Configure initial application provided  mtu on the KNI interface.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
---
 examples/kni/main.c                                           | 2 ++
 lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h | 1 +
 lib/librte_eal/linuxapp/kni/kni_misc.c                        | 3 +++
 lib/librte_kni/rte_kni.c                                      | 1 +
 lib/librte_kni/rte_kni.h                                      | 1 +
 5 files changed, 8 insertions(+)
  

Comments

Ferruh Yigit Dec. 22, 2017, 10:01 p.m. UTC | #1
On 11/30/2017 3:46 AM, Hemant Agrawal wrote:
> Configure initial application provided  mtu on the KNI interface.
> 
> Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>

<...>

> @@ -95,6 +95,7 @@ struct rte_kni_conf {
>  	struct rte_pci_addr addr;
>  	struct rte_pci_id id;
>  	char mac_addr[ETHER_ADDR_LEN]; /* MAC address assigned to KNI */
> +	uint16_t mtu;

Same issue here, adding a new field into middle of the public struct.
I think it would be OK to add to the end, but to be sure would you please run
ABI check script (validate-abi.sh) after adding to the end?

Thanks,
ferruh

>  
>  	__extension__
>  	uint8_t force_bind : 1; /* Flag to bind kernel thread */
>
  

Patch

diff --git a/examples/kni/main.c b/examples/kni/main.c
index 1c251c2..d9c9fa5 100644
--- a/examples/kni/main.c
+++ b/examples/kni/main.c
@@ -845,6 +845,8 @@  kni_alloc(uint16_t port_id)
 			rte_eth_macaddr_get(port_id,
 					(struct ether_addr *)&conf.mac_addr);
 
+			rte_eth_dev_get_mtu(port_id, &conf.mtu);
+
 			memset(&ops, 0, sizeof(ops));
 			ops.port_id = port_id;
 			ops.change_mtu = kni_change_mtu;
diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
index f2ef48e..9fdaed9 100644
--- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
@@ -172,6 +172,7 @@  struct rte_kni_device_info {
 
 	/* mbuf size */
 	unsigned mbuf_size;
+	unsigned int mtu;
 	char mac_addr[6];
 };
 
diff --git a/lib/librte_eal/linuxapp/kni/kni_misc.c b/lib/librte_eal/linuxapp/kni/kni_misc.c
index b524d30..0ccd227 100644
--- a/lib/librte_eal/linuxapp/kni/kni_misc.c
+++ b/lib/librte_eal/linuxapp/kni/kni_misc.c
@@ -470,6 +470,9 @@  kni_ioctl_create(struct net *net, uint32_t ioctl_num,
 			random_ether_addr(net_dev->dev_addr);
 	}
 
+	if (dev_info.mtu)
+		net_dev->mtu = dev_info.mtu;
+
 	ret = register_netdev(net_dev);
 	if (ret) {
 		pr_err("error %i registering device \"%s\"\n",
diff --git a/lib/librte_kni/rte_kni.c b/lib/librte_kni/rte_kni.c
index e8cd297..8b31747 100644
--- a/lib/librte_kni/rte_kni.c
+++ b/lib/librte_kni/rte_kni.c
@@ -367,6 +367,7 @@  rte_kni_alloc(struct rte_mempool *pktmbuf_pool,
 	dev_info.force_bind = conf->force_bind;
 	dev_info.group_id = conf->group_id;
 	dev_info.mbuf_size = conf->mbuf_size;
+	dev_info.mtu = conf->mtu;
 
 	memcpy(dev_info.mac_addr, conf->mac_addr, ETHER_ADDR_LEN);
 
diff --git a/lib/librte_kni/rte_kni.h b/lib/librte_kni/rte_kni.h
index bc5ead7..37dded6 100644
--- a/lib/librte_kni/rte_kni.h
+++ b/lib/librte_kni/rte_kni.h
@@ -95,6 +95,7 @@  struct rte_kni_conf {
 	struct rte_pci_addr addr;
 	struct rte_pci_id id;
 	char mac_addr[ETHER_ADDR_LEN]; /* MAC address assigned to KNI */
+	uint16_t mtu;
 
 	__extension__
 	uint8_t force_bind : 1; /* Flag to bind kernel thread */