Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/64974/?format=api
http://patches.dpdk.org/api/patches/64974/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/patch/1579539790-3882-36-git-send-email-matan@mellanox.com/", "project": { "id": 1, "url": "http://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1579539790-3882-36-git-send-email-matan@mellanox.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1579539790-3882-36-git-send-email-matan@mellanox.com", "date": "2020-01-20T17:03:07", "name": "[v1,35/38] net/mlx5: reduce Netlink commands dependencies", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "d45ab71fbe46a86b4604b53c8bc788cf876df631", "submitter": { "id": 796, "url": "http://patches.dpdk.org/api/people/796/?format=api", "name": "Matan Azrad", "email": "matan@mellanox.com" }, "delegate": { "id": 2642, "url": "http://patches.dpdk.org/api/users/2642/?format=api", "username": "mcoquelin", "first_name": "Maxime", "last_name": "Coquelin", "email": "maxime.coquelin@redhat.com" }, "mbox": "http://patches.dpdk.org/project/dpdk/patch/1579539790-3882-36-git-send-email-matan@mellanox.com/mbox/", "series": [ { "id": 8223, "url": "http://patches.dpdk.org/api/series/8223/?format=api", "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8223", "date": "2020-01-20T17:02:37", "name": "Introduce mlx5 vDPA driver", "version": 1, "mbox": "http://patches.dpdk.org/series/8223/mbox/" } ], "comments": "http://patches.dpdk.org/api/patches/64974/comments/", "check": "success", "checks": "http://patches.dpdk.org/api/patches/64974/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 37E82A0526;\n\tMon, 20 Jan 2020 18:10:23 +0100 (CET)", "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id C35851C112;\n\tMon, 20 Jan 2020 18:04:18 +0100 (CET)", "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id E08511BFB4\n for <dev@dpdk.org>; Mon, 20 Jan 2020 18:03:14 +0100 (CET)", "from Internal Mail-Server by MTLPINE1 (envelope-from\n asafp@mellanox.com)\n with ESMTPS (AES256-SHA encrypted); 20 Jan 2020 19:03:14 +0200", "from pegasus07.mtr.labs.mlnx (pegasus07.mtr.labs.mlnx\n [10.210.16.112])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 00KH3BGs024424;\n Mon, 20 Jan 2020 19:03:14 +0200" ], "From": "Matan Azrad <matan@mellanox.com>", "To": "dev@dpdk.org", "Cc": "Maxime Coquelin <maxime.coquelin@redhat.com>,\n Thomas Monjalon <thomas@monjalon.net>", "Date": "Mon, 20 Jan 2020 17:03:07 +0000", "Message-Id": "<1579539790-3882-36-git-send-email-matan@mellanox.com>", "X-Mailer": "git-send-email 1.8.3.1", "In-Reply-To": "<1579539790-3882-1-git-send-email-matan@mellanox.com>", "References": "<1579539790-3882-1-git-send-email-matan@mellanox.com>", "Subject": "[dpdk-dev] [PATCH v1 35/38] net/mlx5: reduce Netlink commands\n\tdependencies", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "As an arrangment for Netlink command moving to the common library,\nreduce the net/mlx5 dependecies.\n\nReplace ethdev class command parameters.\n\nImprove Netlink sequence number mechanism to be controlled by the\nmlx5 Netlink mechanism.\n\nMove mlx5_nl_check_switch_info to mlx5_nl.c since it is the only one\nwhich uses it.\n\nSigned-off-by: Matan Azrad <matan@mellanox.com>\n---\n drivers/net/mlx5/mlx5.c | 10 +-\n drivers/net/mlx5/mlx5.h | 3 -\n drivers/net/mlx5/mlx5_ethdev.c | 49 ------\n drivers/net/mlx5/mlx5_mac.c | 14 +-\n drivers/net/mlx5/mlx5_nl.c | 329 +++++++++++++++++++++++++----------------\n drivers/net/mlx5/mlx5_nl.h | 23 +--\n drivers/net/mlx5/mlx5_rxmode.c | 12 +-\n drivers/net/mlx5/mlx5_vlan.c | 1 -\n 8 files changed, 236 insertions(+), 205 deletions(-)", "diff": "diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c\nindex 27cea8b..67daa43 100644\n--- a/drivers/net/mlx5/mlx5.c\n+++ b/drivers/net/mlx5/mlx5.c\n@@ -1266,7 +1266,9 @@ struct mlx5_flow_id_pool *\n \tif (priv->reta_idx != NULL)\n \t\trte_free(priv->reta_idx);\n \tif (priv->config.vf)\n-\t\tmlx5_nl_mac_addr_flush(dev);\n+\t\tmlx5_nl_mac_addr_flush(priv->nl_socket_route, mlx5_ifindex(dev),\n+\t\t\t\t dev->data->mac_addrs,\n+\t\t\t\t MLX5_MAX_MAC_ADDRESSES, priv->mac_own);\n \tif (priv->nl_socket_route >= 0)\n \t\tclose(priv->nl_socket_route);\n \tif (priv->nl_socket_rdma >= 0)\n@@ -2323,7 +2325,6 @@ struct mlx5_flow_id_pool *\n \t/* Some internal functions rely on Netlink sockets, open them now. */\n \tpriv->nl_socket_rdma = mlx5_nl_init(NETLINK_RDMA);\n \tpriv->nl_socket_route =\tmlx5_nl_init(NETLINK_ROUTE);\n-\tpriv->nl_sn = 0;\n \tpriv->representor = !!switch_info->representor;\n \tpriv->master = !!switch_info->master;\n \tpriv->domain_id = RTE_ETH_DEV_SWITCH_DOMAIN_ID_INVALID;\n@@ -2641,7 +2642,10 @@ struct mlx5_flow_id_pool *\n \t/* Register MAC address. */\n \tclaim_zero(mlx5_mac_addr_add(eth_dev, &mac, 0, 0));\n \tif (config.vf && config.vf_nl_en)\n-\t\tmlx5_nl_mac_addr_sync(eth_dev);\n+\t\tmlx5_nl_mac_addr_sync(priv->nl_socket_route,\n+\t\t\t\t mlx5_ifindex(eth_dev),\n+\t\t\t\t eth_dev->data->mac_addrs,\n+\t\t\t\t MLX5_MAX_MAC_ADDRESSES);\n \tTAILQ_INIT(&priv->flows);\n \tTAILQ_INIT(&priv->ctrl_flows);\n \tTAILQ_INIT(&priv->flow_meters);\ndiff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h\nindex 5cfcf99..5d25d8b 100644\n--- a/drivers/net/mlx5/mlx5.h\n+++ b/drivers/net/mlx5/mlx5.h\n@@ -537,7 +537,6 @@ struct mlx5_priv {\n \t/* Context for Verbs allocator. */\n \tint nl_socket_rdma; /* Netlink socket (NETLINK_RDMA). */\n \tint nl_socket_route; /* Netlink socket (NETLINK_ROUTE). */\n-\tuint32_t nl_sn; /* Netlink message sequence number. */\n \tLIST_HEAD(dbrpage, mlx5_devx_dbr_page) dbrpgs; /* Door-bell pages. */\n \tstruct mlx5_nl_vlan_vmwa_context *vmwa_context; /* VLAN WA context. */\n \tstruct mlx5_flow_id_pool *qrss_id_pool;\n@@ -615,8 +614,6 @@ int mlx5_sysfs_switch_info(unsigned int ifindex,\n \t\t\t struct mlx5_switch_info *info);\n void mlx5_sysfs_check_switch_info(bool device_dir,\n \t\t\t\t struct mlx5_switch_info *switch_info);\n-void mlx5_nl_check_switch_info(bool nun_vf_set,\n-\t\t\t struct mlx5_switch_info *switch_info);\n void mlx5_translate_port_name(const char *port_name_in,\n \t\t\t struct mlx5_switch_info *port_info_out);\n void mlx5_intr_callback_unregister(const struct rte_intr_handle *handle,\ndiff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c\nindex 2628e64..5484104 100644\n--- a/drivers/net/mlx5/mlx5_ethdev.c\n+++ b/drivers/net/mlx5/mlx5_ethdev.c\n@@ -1891,55 +1891,6 @@ struct mlx5_priv *\n }\n \n /**\n- * Analyze gathered port parameters via Netlink to recognize master\n- * and representor devices for E-Switch configuration.\n- *\n- * @param[in] num_vf_set\n- * flag of presence of number of VFs port attribute.\n- * @param[inout] switch_info\n- * Port information, including port name as a number and port name\n- * type if recognized\n- *\n- * @return\n- * master and representor flags are set in switch_info according to\n- * recognized parameters (if any).\n- */\n-void\n-mlx5_nl_check_switch_info(bool num_vf_set,\n-\t\t\t struct mlx5_switch_info *switch_info)\n-{\n-\tswitch (switch_info->name_type) {\n-\tcase MLX5_PHYS_PORT_NAME_TYPE_UNKNOWN:\n-\t\t/*\n-\t\t * Name is not recognized, assume the master,\n-\t\t * check the number of VFs key presence.\n-\t\t */\n-\t\tswitch_info->master = num_vf_set;\n-\t\tbreak;\n-\tcase MLX5_PHYS_PORT_NAME_TYPE_NOTSET:\n-\t\t/*\n-\t\t * Name is not set, this assumes the legacy naming\n-\t\t * schema for master, just check if there is a\n-\t\t * number of VFs key.\n-\t\t */\n-\t\tswitch_info->master = num_vf_set;\n-\t\tbreak;\n-\tcase MLX5_PHYS_PORT_NAME_TYPE_UPLINK:\n-\t\t/* New uplink naming schema recognized. */\n-\t\tswitch_info->master = 1;\n-\t\tbreak;\n-\tcase MLX5_PHYS_PORT_NAME_TYPE_LEGACY:\n-\t\t/* Legacy representors naming schema. */\n-\t\tswitch_info->representor = !num_vf_set;\n-\t\tbreak;\n-\tcase MLX5_PHYS_PORT_NAME_TYPE_PFVF:\n-\t\t/* New representors naming schema. */\n-\t\tswitch_info->representor = 1;\n-\t\tbreak;\n-\t}\n-}\n-\n-/**\n * Analyze gathered port parameters via sysfs to recognize master\n * and representor devices for E-Switch configuration.\n *\ndiff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c\nindex a646b90..0ab2a0e 100644\n--- a/drivers/net/mlx5/mlx5_mac.c\n+++ b/drivers/net/mlx5/mlx5_mac.c\n@@ -74,8 +74,9 @@\n \tif (rte_is_zero_ether_addr(&dev->data->mac_addrs[index]))\n \t\treturn;\n \tif (vf)\n-\t\tmlx5_nl_mac_addr_remove(dev, &dev->data->mac_addrs[index],\n-\t\t\t\t\tindex);\n+\t\tmlx5_nl_mac_addr_remove(priv->nl_socket_route,\n+\t\t\t\t\tmlx5_ifindex(dev), priv->mac_own,\n+\t\t\t\t\t&dev->data->mac_addrs[index], index);\n \tmemset(&dev->data->mac_addrs[index], 0, sizeof(struct rte_ether_addr));\n }\n \n@@ -117,7 +118,9 @@\n \t\treturn -rte_errno;\n \t}\n \tif (vf) {\n-\t\tint ret = mlx5_nl_mac_addr_add(dev, mac, index);\n+\t\tint ret = mlx5_nl_mac_addr_add(priv->nl_socket_route,\n+\t\t\t\t\t mlx5_ifindex(dev), priv->mac_own,\n+\t\t\t\t\t mac, index);\n \n \t\tif (ret)\n \t\t\treturn ret;\n@@ -209,8 +212,9 @@\n \t\t\tif (priv->master == 1) {\n \t\t\t\tpriv = dev->data->dev_private;\n \t\t\t\treturn mlx5_nl_vf_mac_addr_modify\n-\t\t\t\t\t(&rte_eth_devices[port_id],\n-\t\t\t\t\t mac_addr, priv->representor_id);\n+\t\t\t\t (priv->nl_socket_route,\n+\t\t\t\t\tmlx5_ifindex(&rte_eth_devices[port_id]),\n+\t\t\t\t\tmac_addr, priv->representor_id);\n \t\t\t}\n \t\t}\n \t\trte_errno = -ENOTSUP;\ndiff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c\nindex 3fe4b6f..6b8ca00 100644\n--- a/drivers/net/mlx5/mlx5_nl.c\n+++ b/drivers/net/mlx5/mlx5_nl.c\n@@ -17,8 +17,11 @@\n #include <unistd.h>\n \n #include <rte_errno.h>\n+#include <rte_atomic.h>\n+#include <rte_ether.h>\n \n #include \"mlx5.h\"\n+#include \"mlx5_nl.h\"\n #include \"mlx5_utils.h\"\n \n /* Size of the buffer to receive kernel messages */\n@@ -109,6 +112,11 @@ struct mlx5_nl_ifindex_data {\n \tuint32_t portnum; /**< IB device max port number (out). */\n };\n \n+rte_atomic32_t atomic_sn = RTE_ATOMIC32_INIT(0);\n+\n+/* Generate Netlink sequence number. */\n+#define MLX5_NL_SN_GENERATE ((uint32_t)rte_atomic32_add_return(&atomic_sn, 1))\n+\n /**\n * Opens a Netlink socket.\n *\n@@ -369,8 +377,10 @@ struct mlx5_nl_ifindex_data {\n /**\n * Get bridge MAC addresses.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param mac[out]\n * Pointer to the array table of MAC addresses to fill.\n * Its size should be of MLX5_MAX_MAC_ADDRESSES.\n@@ -381,11 +391,9 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_nl_mac_addr_list(struct rte_eth_dev *dev, struct rte_ether_addr (*mac)[],\n-\t\t int *mac_n)\n+mlx5_nl_mac_addr_list(int nlsk_fd, unsigned int iface_idx,\n+\t\t struct rte_ether_addr (*mac)[], int *mac_n)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tunsigned int iface_idx = mlx5_ifindex(dev);\n \tstruct {\n \t\tstruct nlmsghdr\thdr;\n \t\tstruct ifinfomsg ifm;\n@@ -404,33 +412,33 @@ struct mlx5_nl_ifindex_data {\n \t\t.mac = mac,\n \t\t.mac_n = 0,\n \t};\n-\tint fd;\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n-\tuint32_t sn = priv->nl_sn++;\n \n-\tif (priv->nl_socket_route == -1)\n+\tif (nlsk_fd == -1)\n \t\treturn 0;\n-\tfd = priv->nl_socket_route;\n-\tret = mlx5_nl_request(fd, &req.hdr, sn, &req.ifm,\n+\tret = mlx5_nl_request(nlsk_fd, &req.hdr, sn, &req.ifm,\n \t\t\t sizeof(struct ifinfomsg));\n \tif (ret < 0)\n \t\tgoto error;\n-\tret = mlx5_nl_recv(fd, sn, mlx5_nl_mac_addr_cb, &data);\n+\tret = mlx5_nl_recv(nlsk_fd, sn, mlx5_nl_mac_addr_cb, &data);\n \tif (ret < 0)\n \t\tgoto error;\n \t*mac_n = data.mac_n;\n \treturn 0;\n error:\n-\tDRV_LOG(DEBUG, \"port %u cannot retrieve MAC address list %s\",\n-\t\tdev->data->port_id, strerror(rte_errno));\n+\tDRV_LOG(DEBUG, \"Interface %u cannot retrieve MAC address list %s\",\n+\t\tiface_idx, strerror(rte_errno));\n \treturn -rte_errno;\n }\n \n /**\n * Modify the MAC address neighbour table with Netlink.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param mac\n * MAC address to consider.\n * @param add\n@@ -440,11 +448,9 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_nl_mac_addr_modify(struct rte_eth_dev *dev, struct rte_ether_addr *mac,\n-\t\t\tint add)\n+mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,\n+\t\t\tstruct rte_ether_addr *mac, int add)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tunsigned int iface_idx = mlx5_ifindex(dev);\n \tstruct {\n \t\tstruct nlmsghdr hdr;\n \t\tstruct ndmsg ndm;\n@@ -468,28 +474,26 @@ struct mlx5_nl_ifindex_data {\n \t\t\t.rta_len = RTA_LENGTH(RTE_ETHER_ADDR_LEN),\n \t\t},\n \t};\n-\tint fd;\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n-\tuint32_t sn = priv->nl_sn++;\n \n-\tif (priv->nl_socket_route == -1)\n+\tif (nlsk_fd == -1)\n \t\treturn 0;\n-\tfd = priv->nl_socket_route;\n \tmemcpy(RTA_DATA(&req.rta), mac, RTE_ETHER_ADDR_LEN);\n \treq.hdr.nlmsg_len = NLMSG_ALIGN(req.hdr.nlmsg_len) +\n \t\tRTA_ALIGN(req.rta.rta_len);\n-\tret = mlx5_nl_send(fd, &req.hdr, sn);\n+\tret = mlx5_nl_send(nlsk_fd, &req.hdr, sn);\n \tif (ret < 0)\n \t\tgoto error;\n-\tret = mlx5_nl_recv(fd, sn, NULL, NULL);\n+\tret = mlx5_nl_recv(nlsk_fd, sn, NULL, NULL);\n \tif (ret < 0)\n \t\tgoto error;\n \treturn 0;\n error:\n \tDRV_LOG(DEBUG,\n-\t\t\"port %u cannot %s MAC address %02X:%02X:%02X:%02X:%02X:%02X\"\n-\t\t\" %s\",\n-\t\tdev->data->port_id,\n+\t\t\"Interface %u cannot %s MAC address\"\n+\t\t\" %02X:%02X:%02X:%02X:%02X:%02X %s\",\n+\t\tiface_idx,\n \t\tadd ? \"add\" : \"remove\",\n \t\tmac->addr_bytes[0], mac->addr_bytes[1],\n \t\tmac->addr_bytes[2], mac->addr_bytes[3],\n@@ -501,8 +505,10 @@ struct mlx5_nl_ifindex_data {\n /**\n * Modify the VF MAC address neighbour table with Netlink.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param mac\n * MAC address to consider.\n * @param vf_index\n@@ -512,12 +518,10 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n int\n-mlx5_nl_vf_mac_addr_modify(struct rte_eth_dev *dev,\n+mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,\n \t\t\t struct rte_ether_addr *mac, int vf_index)\n {\n-\tint fd, ret;\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tunsigned int iface_idx = mlx5_ifindex(dev);\n+\tint ret;\n \tstruct {\n \t\tstruct nlmsghdr hdr;\n \t\tstruct ifinfomsg ifm;\n@@ -546,10 +550,10 @@ struct mlx5_nl_ifindex_data {\n \t\t\t.rta_type = IFLA_VF_MAC,\n \t\t},\n \t};\n-\tuint32_t sn = priv->nl_sn++;\n \tstruct ifla_vf_mac ivm = {\n \t\t.vf = vf_index,\n \t};\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \n \tmemcpy(&ivm.mac, mac, RTE_ETHER_ADDR_LEN);\n \tmemcpy(RTA_DATA(&req.vf_mac_rta), &ivm, sizeof(ivm));\n@@ -564,13 +568,12 @@ struct mlx5_nl_ifindex_data {\n \treq.vf_info_rta.rta_len = RTE_PTR_DIFF(NLMSG_TAIL(&req.hdr),\n \t\t\t\t\t &req.vf_info_rta);\n \n-\tfd = priv->nl_socket_route;\n-\tif (fd < 0)\n+\tif (nlsk_fd < 0)\n \t\treturn -1;\n-\tret = mlx5_nl_send(fd, &req.hdr, sn);\n+\tret = mlx5_nl_send(nlsk_fd, &req.hdr, sn);\n \tif (ret < 0)\n \t\tgoto error;\n-\tret = mlx5_nl_recv(fd, sn, NULL, NULL);\n+\tret = mlx5_nl_recv(nlsk_fd, sn, NULL, NULL);\n \tif (ret < 0)\n \t\tgoto error;\n \treturn 0;\n@@ -589,8 +592,12 @@ struct mlx5_nl_ifindex_data {\n /**\n * Add a MAC address.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n+ * @param mac_own\n+ * BITFIELD_DECLARE array to store the mac.\n * @param mac\n * MAC address to register.\n * @param index\n@@ -600,15 +607,15 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n int\n-mlx5_nl_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac,\n+mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx,\n+\t\t uint64_t *mac_own, struct rte_ether_addr *mac,\n \t\t uint32_t index)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n \tint ret;\n \n-\tret = mlx5_nl_mac_addr_modify(dev, mac, 1);\n+\tret = mlx5_nl_mac_addr_modify(nlsk_fd, iface_idx, mac, 1);\n \tif (!ret)\n-\t\tBITFIELD_SET(priv->mac_own, index);\n+\t\tBITFIELD_SET(mac_own, index);\n \tif (ret == -EEXIST)\n \t\treturn 0;\n \treturn ret;\n@@ -617,8 +624,12 @@ struct mlx5_nl_ifindex_data {\n /**\n * Remove a MAC address.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n+ * @param mac_own\n+ * BITFIELD_DECLARE array to store the mac.\n * @param mac\n * MAC address to remove.\n * @param index\n@@ -628,46 +639,50 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n int\n-mlx5_nl_mac_addr_remove(struct rte_eth_dev *dev, struct rte_ether_addr *mac,\n-\t\t\tuint32_t index)\n+mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,\n+\t\t\tstruct rte_ether_addr *mac, uint32_t index)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\n-\tBITFIELD_RESET(priv->mac_own, index);\n-\treturn mlx5_nl_mac_addr_modify(dev, mac, 0);\n+\tBITFIELD_RESET(mac_own, index);\n+\treturn mlx5_nl_mac_addr_modify(nlsk_fd, iface_idx, mac, 0);\n }\n \n /**\n * Synchronize Netlink bridge table to the internal table.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n+ * @param mac_addrs\n+ * Mac addresses array to sync.\n+ * @param n\n+ * @p mac_addrs array size.\n */\n void\n-mlx5_nl_mac_addr_sync(struct rte_eth_dev *dev)\n+mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,\n+\t\t struct rte_ether_addr *mac_addrs, int n)\n {\n-\tstruct rte_ether_addr macs[MLX5_MAX_MAC_ADDRESSES];\n+\tstruct rte_ether_addr macs[n];\n \tint macs_n = 0;\n \tint i;\n \tint ret;\n \n-\tret = mlx5_nl_mac_addr_list(dev, &macs, &macs_n);\n+\tret = mlx5_nl_mac_addr_list(nlsk_fd, iface_idx, &macs, &macs_n);\n \tif (ret)\n \t\treturn;\n \tfor (i = 0; i != macs_n; ++i) {\n \t\tint j;\n \n \t\t/* Verify the address is not in the array yet. */\n-\t\tfor (j = 0; j != MLX5_MAX_MAC_ADDRESSES; ++j)\n-\t\t\tif (rte_is_same_ether_addr(&macs[i],\n-\t\t\t\t\t &dev->data->mac_addrs[j]))\n+\t\tfor (j = 0; j != n; ++j)\n+\t\t\tif (rte_is_same_ether_addr(&macs[i], &mac_addrs[j]))\n \t\t\t\tbreak;\n-\t\tif (j != MLX5_MAX_MAC_ADDRESSES)\n+\t\tif (j != n)\n \t\t\tcontinue;\n \t\t/* Find the first entry available. */\n-\t\tfor (j = 0; j != MLX5_MAX_MAC_ADDRESSES; ++j) {\n-\t\t\tif (rte_is_zero_ether_addr(&dev->data->mac_addrs[j])) {\n-\t\t\t\tdev->data->mac_addrs[j] = macs[i];\n+\t\tfor (j = 0; j != n; ++j) {\n+\t\t\tif (rte_is_zero_ether_addr(&mac_addrs[j])) {\n+\t\t\t\tmac_addrs[j] = macs[i];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n@@ -677,28 +692,40 @@ struct mlx5_nl_ifindex_data {\n /**\n * Flush all added MAC addresses.\n *\n- * @param dev\n- * Pointer to Ethernet device.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n+ * @param[in] mac_addrs\n+ * Mac addresses array to flush.\n+ * @param n\n+ * @p mac_addrs array size.\n+ * @param mac_own\n+ * BITFIELD_DECLARE array to store the mac.\n */\n void\n-mlx5_nl_mac_addr_flush(struct rte_eth_dev *dev)\n+mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,\n+\t\t struct rte_ether_addr *mac_addrs, int n,\n+\t\t uint64_t *mac_own)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n \tint i;\n \n-\tfor (i = MLX5_MAX_MAC_ADDRESSES - 1; i >= 0; --i) {\n-\t\tstruct rte_ether_addr *m = &dev->data->mac_addrs[i];\n+\tfor (i = n - 1; i >= 0; --i) {\n+\t\tstruct rte_ether_addr *m = &mac_addrs[i];\n \n-\t\tif (BITFIELD_ISSET(priv->mac_own, i))\n-\t\t\tmlx5_nl_mac_addr_remove(dev, m, i);\n+\t\tif (BITFIELD_ISSET(mac_own, i))\n+\t\t\tmlx5_nl_mac_addr_remove(nlsk_fd, iface_idx, mac_own, m,\n+\t\t\t\t\t\ti);\n \t}\n }\n \n /**\n * Enable promiscuous / all multicast mode through Netlink.\n *\n- * @param dev\n- * Pointer to Ethernet device structure.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param flags\n * IFF_PROMISC for promiscuous, IFF_ALLMULTI for allmulti.\n * @param enable\n@@ -708,10 +735,9 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n static int\n-mlx5_nl_device_flags(struct rte_eth_dev *dev, uint32_t flags, int enable)\n+mlx5_nl_device_flags(int nlsk_fd, unsigned int iface_idx, uint32_t flags,\n+\t\t int enable)\n {\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tunsigned int iface_idx = mlx5_ifindex(dev);\n \tstruct {\n \t\tstruct nlmsghdr hdr;\n \t\tstruct ifinfomsg ifi;\n@@ -727,14 +753,13 @@ struct mlx5_nl_ifindex_data {\n \t\t\t.ifi_index = iface_idx,\n \t\t},\n \t};\n-\tint fd;\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \n \tassert(!(flags & ~(IFF_PROMISC | IFF_ALLMULTI)));\n-\tif (priv->nl_socket_route < 0)\n+\tif (nlsk_fd < 0)\n \t\treturn 0;\n-\tfd = priv->nl_socket_route;\n-\tret = mlx5_nl_send(fd, &req.hdr, priv->nl_sn++);\n+\tret = mlx5_nl_send(nlsk_fd, &req.hdr, sn);\n \tif (ret < 0)\n \t\treturn ret;\n \treturn 0;\n@@ -743,8 +768,10 @@ struct mlx5_nl_ifindex_data {\n /**\n * Enable promiscuous mode through Netlink.\n *\n- * @param dev\n- * Pointer to Ethernet device structure.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param enable\n * Nonzero to enable, disable otherwise.\n *\n@@ -752,14 +779,14 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n int\n-mlx5_nl_promisc(struct rte_eth_dev *dev, int enable)\n+mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable)\n {\n-\tint ret = mlx5_nl_device_flags(dev, IFF_PROMISC, enable);\n+\tint ret = mlx5_nl_device_flags(nlsk_fd, iface_idx, IFF_PROMISC, enable);\n \n \tif (ret)\n \t\tDRV_LOG(DEBUG,\n-\t\t\t\"port %u cannot %s promisc mode: Netlink error %s\",\n-\t\t\tdev->data->port_id, enable ? \"enable\" : \"disable\",\n+\t\t\t\"Interface %u cannot %s promisc mode: Netlink error %s\",\n+\t\t\tiface_idx, enable ? \"enable\" : \"disable\",\n \t\t\tstrerror(rte_errno));\n \treturn ret;\n }\n@@ -767,8 +794,10 @@ struct mlx5_nl_ifindex_data {\n /**\n * Enable all multicast mode through Netlink.\n *\n- * @param dev\n- * Pointer to Ethernet device structure.\n+ * @param[in] nlsk_fd\n+ * Netlink socket file descriptor.\n+ * @param[in] iface_idx\n+ * Net device interface index.\n * @param enable\n * Nonzero to enable, disable otherwise.\n *\n@@ -776,14 +805,15 @@ struct mlx5_nl_ifindex_data {\n * 0 on success, a negative errno value otherwise and rte_errno is set.\n */\n int\n-mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable)\n+mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable)\n {\n-\tint ret = mlx5_nl_device_flags(dev, IFF_ALLMULTI, enable);\n+\tint ret = mlx5_nl_device_flags(nlsk_fd, iface_idx, IFF_ALLMULTI,\n+\t\t\t\t enable);\n \n \tif (ret)\n \t\tDRV_LOG(DEBUG,\n-\t\t\t\"port %u cannot %s allmulti mode: Netlink error %s\",\n-\t\t\tdev->data->port_id, enable ? \"enable\" : \"disable\",\n+\t\t\t\"Interface %u cannot %s allmulti : Netlink error %s\",\n+\t\t\tiface_idx, enable ? \"enable\" : \"disable\",\n \t\t\tstrerror(rte_errno));\n \treturn ret;\n }\n@@ -879,7 +909,6 @@ struct mlx5_nl_ifindex_data {\n unsigned int\n mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex)\n {\n-\tuint32_t seq = random();\n \tstruct mlx5_nl_ifindex_data data = {\n \t\t.name = name,\n \t\t.flags = 0,\n@@ -900,19 +929,20 @@ struct mlx5_nl_ifindex_data {\n \t\t},\n \t};\n \tstruct nlattr *na;\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \n-\tret = mlx5_nl_send(nl, &req.nh, seq);\n+\tret = mlx5_nl_send(nl, &req.nh, sn);\n \tif (ret < 0)\n \t\treturn 0;\n-\tret = mlx5_nl_recv(nl, seq, mlx5_nl_cmdget_cb, &data);\n+\tret = mlx5_nl_recv(nl, sn, mlx5_nl_cmdget_cb, &data);\n \tif (ret < 0)\n \t\treturn 0;\n \tif (!(data.flags & MLX5_NL_CMD_GET_IB_NAME) ||\n \t !(data.flags & MLX5_NL_CMD_GET_IB_INDEX))\n \t\tgoto error;\n \tdata.flags = 0;\n-\t++seq;\n+\tsn = MLX5_NL_SN_GENERATE;\n \treq.nh.nlmsg_type = RDMA_NL_GET_TYPE(RDMA_NL_NLDEV,\n \t\t\t\t\t RDMA_NLDEV_CMD_PORT_GET);\n \treq.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;\n@@ -927,10 +957,10 @@ struct mlx5_nl_ifindex_data {\n \tna->nla_type = RDMA_NLDEV_ATTR_PORT_INDEX;\n \tmemcpy((void *)((uintptr_t)na + NLA_HDRLEN),\n \t &pindex, sizeof(pindex));\n-\tret = mlx5_nl_send(nl, &req.nh, seq);\n+\tret = mlx5_nl_send(nl, &req.nh, sn);\n \tif (ret < 0)\n \t\treturn 0;\n-\tret = mlx5_nl_recv(nl, seq, mlx5_nl_cmdget_cb, &data);\n+\tret = mlx5_nl_recv(nl, sn, mlx5_nl_cmdget_cb, &data);\n \tif (ret < 0)\n \t\treturn 0;\n \tif (!(data.flags & MLX5_NL_CMD_GET_IB_NAME) ||\n@@ -959,7 +989,6 @@ struct mlx5_nl_ifindex_data {\n unsigned int\n mlx5_nl_portnum(int nl, const char *name)\n {\n-\tuint32_t seq = random();\n \tstruct mlx5_nl_ifindex_data data = {\n \t\t.flags = 0,\n \t\t.name = name,\n@@ -972,12 +1001,13 @@ struct mlx5_nl_ifindex_data {\n \t\t\t\t\t RDMA_NLDEV_CMD_GET),\n \t\t.nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | NLM_F_DUMP,\n \t};\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \n-\tret = mlx5_nl_send(nl, &req, seq);\n+\tret = mlx5_nl_send(nl, &req, sn);\n \tif (ret < 0)\n \t\treturn 0;\n-\tret = mlx5_nl_recv(nl, seq, mlx5_nl_cmdget_cb, &data);\n+\tret = mlx5_nl_recv(nl, sn, mlx5_nl_cmdget_cb, &data);\n \tif (ret < 0)\n \t\treturn 0;\n \tif (!(data.flags & MLX5_NL_CMD_GET_IB_NAME) ||\n@@ -992,6 +1022,55 @@ struct mlx5_nl_ifindex_data {\n }\n \n /**\n+ * Analyze gathered port parameters via Netlink to recognize master\n+ * and representor devices for E-Switch configuration.\n+ *\n+ * @param[in] num_vf_set\n+ * flag of presence of number of VFs port attribute.\n+ * @param[inout] switch_info\n+ * Port information, including port name as a number and port name\n+ * type if recognized\n+ *\n+ * @return\n+ * master and representor flags are set in switch_info according to\n+ * recognized parameters (if any).\n+ */\n+static void\n+mlx5_nl_check_switch_info(bool num_vf_set,\n+\t\t\t struct mlx5_switch_info *switch_info)\n+{\n+\tswitch (switch_info->name_type) {\n+\tcase MLX5_PHYS_PORT_NAME_TYPE_UNKNOWN:\n+\t\t/*\n+\t\t * Name is not recognized, assume the master,\n+\t\t * check the number of VFs key presence.\n+\t\t */\n+\t\tswitch_info->master = num_vf_set;\n+\t\tbreak;\n+\tcase MLX5_PHYS_PORT_NAME_TYPE_NOTSET:\n+\t\t/*\n+\t\t * Name is not set, this assumes the legacy naming\n+\t\t * schema for master, just check if there is a\n+\t\t * number of VFs key.\n+\t\t */\n+\t\tswitch_info->master = num_vf_set;\n+\t\tbreak;\n+\tcase MLX5_PHYS_PORT_NAME_TYPE_UPLINK:\n+\t\t/* New uplink naming schema recognized. */\n+\t\tswitch_info->master = 1;\n+\t\tbreak;\n+\tcase MLX5_PHYS_PORT_NAME_TYPE_LEGACY:\n+\t\t/* Legacy representors naming schema. */\n+\t\tswitch_info->representor = !num_vf_set;\n+\t\tbreak;\n+\tcase MLX5_PHYS_PORT_NAME_TYPE_PFVF:\n+\t\t/* New representors naming schema. */\n+\t\tswitch_info->representor = 1;\n+\t\tbreak;\n+\t}\n+}\n+\n+/**\n * Process switch information from Netlink message.\n *\n * @param nh\n@@ -1072,7 +1151,6 @@ struct mlx5_nl_ifindex_data {\n mlx5_nl_switch_info(int nl, unsigned int ifindex,\n \t\t struct mlx5_switch_info *info)\n {\n-\tuint32_t seq = random();\n \tstruct {\n \t\tstruct nlmsghdr nh;\n \t\tstruct ifinfomsg info;\n@@ -1096,11 +1174,12 @@ struct mlx5_nl_ifindex_data {\n \t\t},\n \t\t.extmask = RTE_LE32(1),\n \t};\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \n-\tret = mlx5_nl_send(nl, &req.nh, seq);\n+\tret = mlx5_nl_send(nl, &req.nh, sn);\n \tif (ret >= 0)\n-\t\tret = mlx5_nl_recv(nl, seq, mlx5_nl_switch_info_cb, info);\n+\t\tret = mlx5_nl_recv(nl, sn, mlx5_nl_switch_info_cb, info);\n \tif (info->master && info->representor) {\n \t\tDRV_LOG(ERR, \"ifindex %u device is recognized as master\"\n \t\t\t \" and as representor\", ifindex);\n@@ -1122,6 +1201,7 @@ struct mlx5_nl_ifindex_data {\n mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,\n \t\t uint32_t ifindex)\n {\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \tstruct {\n \t\tstruct nlmsghdr nh;\n@@ -1139,18 +1219,12 @@ struct mlx5_nl_ifindex_data {\n \t};\n \n \tif (ifindex) {\n-\t\t++vmwa->nl_sn;\n-\t\tif (!vmwa->nl_sn)\n-\t\t\t++vmwa->nl_sn;\n-\t\tret = mlx5_nl_send(vmwa->nl_socket, &req.nh, vmwa->nl_sn);\n+\t\tret = mlx5_nl_send(vmwa->nl_socket, &req.nh, sn);\n \t\tif (ret >= 0)\n-\t\t\tret = mlx5_nl_recv(vmwa->nl_socket,\n-\t\t\t\t\t vmwa->nl_sn,\n-\t\t\t\t\t NULL, NULL);\n+\t\t\tret = mlx5_nl_recv(vmwa->nl_socket, sn, NULL, NULL);\n \t\tif (ret < 0)\n-\t\t\tDRV_LOG(WARNING, \"netlink: error deleting\"\n-\t\t\t\t\t \" VLAN WA ifindex %u, %d\",\n-\t\t\t\t\t ifindex, ret);\n+\t\t\tDRV_LOG(WARNING, \"netlink: error deleting VLAN WA\"\n+\t\t\t\t\" ifindex %u, %d\", ifindex, ret);\n \t}\n }\n \n@@ -1202,8 +1276,7 @@ struct mlx5_nl_ifindex_data {\n */\n uint32_t\n mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,\n-\t\t uint32_t ifindex,\n-\t\t uint16_t tag)\n+\t\t\t uint32_t ifindex, uint16_t tag)\n {\n \tstruct nlmsghdr *nlh;\n \tstruct ifinfomsg *ifm;\n@@ -1220,12 +1293,10 @@ struct mlx5_nl_ifindex_data {\n \t\t NLMSG_ALIGN(sizeof(uint16_t)) + 16];\n \tstruct nlattr *na_info;\n \tstruct nlattr *na_vlan;\n+\tuint32_t sn = MLX5_NL_SN_GENERATE;\n \tint ret;\n \n \tmemset(buf, 0, sizeof(buf));\n-\t++vmwa->nl_sn;\n-\tif (!vmwa->nl_sn)\n-\t\t++vmwa->nl_sn;\n \tnlh = (struct nlmsghdr *)buf;\n \tnlh->nlmsg_len = sizeof(struct nlmsghdr);\n \tnlh->nlmsg_type = RTM_NEWLINK;\n@@ -1249,20 +1320,18 @@ struct mlx5_nl_ifindex_data {\n \tnl_attr_nest_end(nlh, na_vlan);\n \tnl_attr_nest_end(nlh, na_info);\n \tassert(sizeof(buf) >= nlh->nlmsg_len);\n-\tret = mlx5_nl_send(vmwa->nl_socket, nlh, vmwa->nl_sn);\n+\tret = mlx5_nl_send(vmwa->nl_socket, nlh, sn);\n \tif (ret >= 0)\n-\t\tret = mlx5_nl_recv(vmwa->nl_socket, vmwa->nl_sn, NULL, NULL);\n+\t\tret = mlx5_nl_recv(vmwa->nl_socket, sn, NULL, NULL);\n \tif (ret < 0) {\n-\t\tDRV_LOG(WARNING,\n-\t\t\t\"netlink: VLAN %s create failure (%d)\",\n-\t\t\tname, ret);\n+\t\tDRV_LOG(WARNING, \"netlink: VLAN %s create failure (%d)\", name,\n+\t\t\tret);\n \t}\n \t// Try to get ifindex of created or pre-existing device.\n \tret = if_nametoindex(name);\n \tif (!ret) {\n-\t\tDRV_LOG(WARNING,\n-\t\t\t\"VLAN %s failed to get index (%d)\",\n-\t\t\tname, errno);\n+\t\tDRV_LOG(WARNING, \"VLAN %s failed to get index (%d)\", name,\n+\t\t\terrno);\n \t\treturn 0;\n \t}\n \treturn ret;\ndiff --git a/drivers/net/mlx5/mlx5_nl.h b/drivers/net/mlx5/mlx5_nl.h\nindex 7903673..9be87c0 100644\n--- a/drivers/net/mlx5/mlx5_nl.h\n+++ b/drivers/net/mlx5/mlx5_nl.h\n@@ -39,30 +39,33 @@ struct mlx5_nl_vlan_dev {\n */\n struct mlx5_nl_vlan_vmwa_context {\n \tint nl_socket;\n-\tuint32_t nl_sn;\n \tuint32_t vf_ifindex;\n \tstruct mlx5_nl_vlan_dev vlan_dev[4096];\n };\n \n \n int mlx5_nl_init(int protocol);\n-int mlx5_nl_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac,\n-\t\t\t uint32_t index);\n-int mlx5_nl_mac_addr_remove(struct rte_eth_dev *dev, struct rte_ether_addr *mac,\n+int mlx5_nl_mac_addr_add(int nlsk_fd, unsigned int iface_idx, uint64_t *mac_own,\n+\t\t\t struct rte_ether_addr *mac, uint32_t index);\n+int mlx5_nl_mac_addr_remove(int nlsk_fd, unsigned int iface_idx,\n+\t\t\t uint64_t *mac_own, struct rte_ether_addr *mac,\n \t\t\t uint32_t index);\n-void mlx5_nl_mac_addr_sync(struct rte_eth_dev *dev);\n-void mlx5_nl_mac_addr_flush(struct rte_eth_dev *dev);\n-int mlx5_nl_promisc(struct rte_eth_dev *dev, int enable);\n-int mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable);\n+void mlx5_nl_mac_addr_sync(int nlsk_fd, unsigned int iface_idx,\n+\t\t\t struct rte_ether_addr *mac_addrs, int n);\n+void mlx5_nl_mac_addr_flush(int nlsk_fd, unsigned int iface_idx,\n+\t\t\t struct rte_ether_addr *mac_addrs, int n,\n+\t\t\t uint64_t *mac_own);\n+int mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable);\n+int mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable);\n unsigned int mlx5_nl_portnum(int nl, const char *name);\n unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex);\n-int mlx5_nl_vf_mac_addr_modify(struct rte_eth_dev *dev,\n+int mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx,\n \t\t\t struct rte_ether_addr *mac, int vf_index);\n int mlx5_nl_switch_info(int nl, unsigned int ifindex,\n \t\t\tstruct mlx5_switch_info *info);\n \n void mlx5_nl_vlan_vmwa_delete(struct mlx5_nl_vlan_vmwa_context *vmwa,\n-\t\t\t uint32_t ifindex);\n+\t\t\t uint32_t ifindex);\n uint32_t mlx5_nl_vlan_vmwa_create(struct mlx5_nl_vlan_vmwa_context *vmwa,\n \t\t\t\t uint32_t ifindex, uint16_t tag);\n \ndiff --git a/drivers/net/mlx5/mlx5_rxmode.c b/drivers/net/mlx5/mlx5_rxmode.c\nindex 760cc2f..84c8b05 100644\n--- a/drivers/net/mlx5/mlx5_rxmode.c\n+++ b/drivers/net/mlx5/mlx5_rxmode.c\n@@ -47,7 +47,8 @@\n \t\treturn 0;\n \t}\n \tif (priv->config.vf) {\n-\t\tret = mlx5_nl_promisc(dev, 1);\n+\t\tret = mlx5_nl_promisc(priv->nl_socket_route, mlx5_ifindex(dev),\n+\t\t\t\t 1);\n \t\tif (ret)\n \t\t\treturn ret;\n \t}\n@@ -80,7 +81,8 @@\n \n \tdev->data->promiscuous = 0;\n \tif (priv->config.vf) {\n-\t\tret = mlx5_nl_promisc(dev, 0);\n+\t\tret = mlx5_nl_promisc(priv->nl_socket_route, mlx5_ifindex(dev),\n+\t\t\t\t 0);\n \t\tif (ret)\n \t\t\treturn ret;\n \t}\n@@ -120,7 +122,8 @@\n \t\treturn 0;\n \t}\n \tif (priv->config.vf) {\n-\t\tret = mlx5_nl_allmulti(dev, 1);\n+\t\tret = mlx5_nl_allmulti(priv->nl_socket_route, mlx5_ifindex(dev),\n+\t\t\t\t 1);\n \t\tif (ret)\n \t\t\tgoto error;\n \t}\n@@ -153,7 +156,8 @@\n \n \tdev->data->all_multicast = 0;\n \tif (priv->config.vf) {\n-\t\tret = mlx5_nl_allmulti(dev, 0);\n+\t\tret = mlx5_nl_allmulti(priv->nl_socket_route, mlx5_ifindex(dev),\n+\t\t\t\t 0);\n \t\tif (ret)\n \t\t\tgoto error;\n \t}\ndiff --git a/drivers/net/mlx5/mlx5_vlan.c b/drivers/net/mlx5/mlx5_vlan.c\nindex fb52d8f..fc1a91c 100644\n--- a/drivers/net/mlx5/mlx5_vlan.c\n+++ b/drivers/net/mlx5/mlx5_vlan.c\n@@ -304,7 +304,6 @@ struct mlx5_nl_vlan_vmwa_context *\n \t\trte_free(vmwa);\n \t\treturn NULL;\n \t}\n-\tvmwa->nl_sn = random();\n \tvmwa->vf_ifindex = ifindex;\n \t/* Cleanup for existing VLAN devices. */\n \treturn vmwa;\n", "prefixes": [ "v1", "35/38" ] }{ "id": 64974, "url": "