get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/64974/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 64974,
    "url": "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"
    ]
}