DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] net/mana: add support to update MTU
@ 2023-07-25 21:16 longli
  2023-07-25 21:16 ` [PATCH] net/mana: use %m for fscanf to read mac address longli
  2023-09-28 19:14 ` [PATCH] net/mana: add support to update MTU Ferruh Yigit
  0 siblings, 2 replies; 4+ messages in thread
From: longli @ 2023-07-25 21:16 UTC (permalink / raw)
  To: Ferruh Yigit, Andrew Rybchenko; +Cc: dev, Ajay Sharma, Long Li

From: Long Li <longli@microsoft.com>

Add support for updating MTU for MANA. MTU is updated in kernel through
socket interface.

Signed-off-by: Long Li <longli@microsoft.com>
---
 doc/guides/nics/features/mana.ini |  1 +
 drivers/net/mana/mana.c           | 96 ++++++++++++++++++++++++++++++-
 drivers/net/mana/mana.h           |  2 +-
 3 files changed, 96 insertions(+), 3 deletions(-)

diff --git a/doc/guides/nics/features/mana.ini b/doc/guides/nics/features/mana.ini
index e69bf4af15..42fd3327d2 100644
--- a/doc/guides/nics/features/mana.ini
+++ b/doc/guides/nics/features/mana.ini
@@ -13,6 +13,7 @@ RSS hash             = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 Basic stats          = Y
+MTU update           = Y
 Multiprocess aware   = Y
 Linux                = Y
 x86-64               = Y
diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
index 7630118d4f..f1fdcf426a 100644
--- a/drivers/net/mana/mana.c
+++ b/drivers/net/mana/mana.c
@@ -6,6 +6,8 @@
 #include <dirent.h>
 #include <fcntl.h>
 #include <sys/mman.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 
 #include <ethdev_driver.h>
 #include <ethdev_pci.h>
@@ -286,11 +288,12 @@ mana_dev_info_get(struct rte_eth_dev *dev,
 {
 	struct mana_priv *priv = dev->data->dev_private;
 
-	dev_info->max_mtu = RTE_ETHER_MTU;
+	dev_info->min_mtu = RTE_ETHER_MIN_MTU;
+	dev_info->max_mtu = MANA_MAX_MTU;
 
 	/* RX params */
 	dev_info->min_rx_bufsize = MIN_RX_BUF_SIZE;
-	dev_info->max_rx_pktlen = MAX_FRAME_SIZE;
+	dev_info->max_rx_pktlen = MANA_MAX_MTU + RTE_ETHER_HDR_LEN;
 
 	dev_info->max_rx_queues = priv->max_rx_queues;
 	dev_info->max_tx_queues = priv->max_tx_queues;
@@ -700,6 +703,94 @@ mana_dev_stats_reset(struct rte_eth_dev *dev __rte_unused)
 	return 0;
 }
 
+static int
+mana_get_ifname(const struct mana_priv *priv, char (*ifname)[IF_NAMESIZE])
+{
+	int ret;
+	DIR *dir;
+	struct dirent *dent;
+
+	MANA_MKSTR(dirpath, "%s/device/net", priv->ib_ctx->device->ibdev_path);
+
+	dir = opendir(dirpath);
+	if (dir == NULL)
+		return -ENODEV;
+
+	while ((dent = readdir(dir)) != NULL) {
+		char *name = dent->d_name;
+		FILE *file;
+		struct rte_ether_addr addr;
+		char *mac = NULL;
+
+		if ((name[0] == '.') &&
+		    ((name[1] == '\0') ||
+		     ((name[1] == '.') && (name[2] == '\0'))))
+			continue;
+
+		MANA_MKSTR(path, "%s/%s/address", dirpath, name);
+
+		file = fopen(path, "r");
+		if (!file) {
+			ret = -ENODEV;
+			break;
+		}
+
+		ret = fscanf(file, "%ms", &mac);
+		fclose(file);
+
+		if (ret <= 0) {
+			ret = -EINVAL;
+			break;
+		}
+
+		ret = rte_ether_unformat_addr(mac, &addr);
+		free(mac);
+		if (ret)
+			break;
+
+		if (rte_is_same_ether_addr(&addr, priv->dev_data->mac_addrs)) {
+			strlcpy(*ifname, name, sizeof(*ifname));
+			ret = 0;
+			break;
+		}
+	}
+
+	closedir(dir);
+	return ret;
+}
+
+static int
+mana_ifreq(const struct mana_priv *priv, int req, struct ifreq *ifr)
+{
+	int sock, ret;
+
+	sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
+	if (sock == -1)
+		return -errno;
+
+	ret = mana_get_ifname(priv, &ifr->ifr_name);
+	if (ret) {
+		close(sock);
+		return ret;
+	}
+
+	if (ioctl(sock, req, ifr) == -1)
+		ret = -errno;
+
+	close(sock);
+
+	return ret;
+}
+
+static int
+mana_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+{
+	struct mana_priv *priv = dev->data->dev_private;
+	struct ifreq request = { .ifr_mtu = mtu, };
+
+	return mana_ifreq(priv, SIOCSIFMTU, &request);
+}
+
 static const struct eth_dev_ops mana_dev_ops = {
 	.dev_configure		= mana_dev_configure,
 	.dev_start		= mana_dev_start,
@@ -720,6 +811,7 @@ static const struct eth_dev_ops mana_dev_ops = {
 	.link_update		= mana_dev_link_update,
 	.stats_get		= mana_dev_stats_get,
 	.stats_reset		= mana_dev_stats_reset,
+	.mtu_set		= mana_mtu_set,
 };
 
 static const struct eth_dev_ops mana_dev_secondary_ops = {
diff --git a/drivers/net/mana/mana.h b/drivers/net/mana/mana.h
index 5801491d75..ee8ea4aee3 100644
--- a/drivers/net/mana/mana.h
+++ b/drivers/net/mana/mana.h
@@ -16,8 +16,8 @@ struct mana_shared_data {
 	unsigned int secondary_cnt;
 };
 
+#define MANA_MAX_MTU	9000
 #define MIN_RX_BUF_SIZE	1024
-#define MAX_FRAME_SIZE	RTE_ETHER_MAX_LEN
 #define MANA_MAX_MAC_ADDR 1
 
 #define MANA_DEV_RX_OFFLOAD_SUPPORT ( \
-- 
2.34.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] net/mana: use %m for fscanf to read mac address
  2023-07-25 21:16 [PATCH] net/mana: add support to update MTU longli
@ 2023-07-25 21:16 ` longli
  2023-09-28 18:46   ` Ferruh Yigit
  2023-09-28 19:14 ` [PATCH] net/mana: add support to update MTU Ferruh Yigit
  1 sibling, 1 reply; 4+ messages in thread
From: longli @ 2023-07-25 21:16 UTC (permalink / raw)
  To: Ferruh Yigit, Andrew Rybchenko; +Cc: dev, Ajay Sharma, Long Li

From: Long Li <longli@microsoft.com>

Use %m through fscanf to allocate mac dynamically is safer than using
mac[20], this guarantees there is no overflow on mac[].

Signed-off-by: Long Li <longli@microsoft.com>
---
 drivers/net/mana/mana.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/mana/mana.c b/drivers/net/mana/mana.c
index f1fdcf426a..28d8f5b23e 100644
--- a/drivers/net/mana/mana.c
+++ b/drivers/net/mana/mana.c
@@ -914,7 +914,6 @@ get_port_mac(struct ibv_device *device, unsigned int port,
 	DIR *dir;
 	struct dirent *dent;
 	unsigned int dev_port;
-	char mac[20];
 
 	MANA_MKSTR(path, "%s/device/net", device->ibdev_path);
 
@@ -924,6 +923,7 @@ get_port_mac(struct ibv_device *device, unsigned int port,
 
 	while ((dent = readdir(dir))) {
 		char *name = dent->d_name;
+		char *mac = NULL;
 
 		MANA_MKSTR(port_path, "%s/%s/dev_port", path, name);
 
@@ -951,7 +951,7 @@ get_port_mac(struct ibv_device *device, unsigned int port,
 			if (!file)
 				continue;
 
-			ret = fscanf(file, "%s", mac);
+			ret = fscanf(file, "%ms", &mac);
 			fclose(file);
 
 			if (ret < 0)
@@ -960,6 +960,8 @@ get_port_mac(struct ibv_device *device, unsigned int port,
 			ret = rte_ether_unformat_addr(mac, addr);
 			if (ret)
 				DRV_LOG(ERR, "unrecognized mac addr %s", mac);
+
+			free(mac);
 			break;
 		}
 	}
-- 
2.34.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] net/mana: use %m for fscanf to read mac address
  2023-07-25 21:16 ` [PATCH] net/mana: use %m for fscanf to read mac address longli
@ 2023-09-28 18:46   ` Ferruh Yigit
  0 siblings, 0 replies; 4+ messages in thread
From: Ferruh Yigit @ 2023-09-28 18:46 UTC (permalink / raw)
  To: longli, Andrew Rybchenko; +Cc: dev, Ajay Sharma, Long Li

On 7/25/2023 10:16 PM, longli@linuxonhyperv.com wrote:
> From: Long Li <longli@microsoft.com>
> 
> Use %m through fscanf to allocate mac dynamically is safer than using
> mac[20], this guarantees there is no overflow on mac[].
> 
> Signed-off-by: Long Li <longli@microsoft.com>
> 

Acked-by: Ferruh Yigit <ferruh.yigit@amd.com>

Applied to dpdk-next-net/main, thanks.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] net/mana: add support to update MTU
  2023-07-25 21:16 [PATCH] net/mana: add support to update MTU longli
  2023-07-25 21:16 ` [PATCH] net/mana: use %m for fscanf to read mac address longli
@ 2023-09-28 19:14 ` Ferruh Yigit
  1 sibling, 0 replies; 4+ messages in thread
From: Ferruh Yigit @ 2023-09-28 19:14 UTC (permalink / raw)
  To: longli, Andrew Rybchenko; +Cc: dev, Ajay Sharma, Long Li

On 7/25/2023 10:16 PM, longli@linuxonhyperv.com wrote:
> From: Long Li <longli@microsoft.com>
> 
> Add support for updating MTU for MANA. MTU is updated in kernel through
> socket interface.
> 
> Signed-off-by: Long Li <longli@microsoft.com>
> 

Applied to dpdk-next-net/main, thanks.


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-09-28 19:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-25 21:16 [PATCH] net/mana: add support to update MTU longli
2023-07-25 21:16 ` [PATCH] net/mana: use %m for fscanf to read mac address longli
2023-09-28 18:46   ` Ferruh Yigit
2023-09-28 19:14 ` [PATCH] net/mana: add support to update MTU Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).