From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6D78CA04B8; Mon, 11 Nov 2019 12:40:24 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 95470DE3; Mon, 11 Nov 2019 12:40:23 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-eopbgr150087.outbound.protection.outlook.com [40.107.15.87]) by dpdk.org (Postfix) with ESMTP id 73556B62 for ; Mon, 11 Nov 2019 12:40:21 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=N44uEvT8SUDEqm7ItQgYqlI0Vku/BjSUeOyBT3xE8+A7j/yRHpbP5ftr892zVEFiiz4RBO385dWqek4h6f1YOZv9JDE4yMZhfs+xojgUn2I83G8sAM8Di7DPyv/cgR0rCa3uCX6tjPHh4BsXKhwA0AJcFXJxKsvWxIvbJHsJfATktoPNgUVQjVHCgIXUP4Qt7s1Aq7koll7w65ZQYGfX6h29oy/eluI13U9UZkb9dX0fRJH6RJXcmByRiz5UIMrk+JyjKiIIfo7gchWdCeT09wtActMrY6ae0pVEYqCDPIHnnBpDoGkiLjsNJhUq7x2frIoC2gdDKcSY+mSnuL0O6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ikj5h761CEFOWeI11lbzrNCm1KxIVUSoBporQkwvPDs=; b=KmrhVaXX2dJlcODPXBIRe30IpEEOBA+8+vQKJ8/wzb4Ls4jxLvBVISfgr7EGKIpwPybCC3BFEUguOAKYIWo5fNCInrUtiXjRB2FOdJptUL7ir843CqkLWaBBo3SI6q5csyZfGVF9/DwJR3SvHqesn94rfBlEzyCCH96ozmEAjrU1rYEu0CLou8KL71/SqTUNYNKCUgs4LsWSuHEiOS9sEFXOO3nS0VM5PBFYVVxK6+Lxo5RNU3K739mpdui9afHoDFTRUd/ze91/c8N1hVuM10LdIbnUyVG1R92pqGWIUdRiTd4vqPRgHStKn1BBK7WHDS+RJqOEpH/ygW5tN4+OGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ikj5h761CEFOWeI11lbzrNCm1KxIVUSoBporQkwvPDs=; b=oopLG1FAVVyFPsAtPd77w9K9b8u4qLKlnsKrD4s6yq4h/OH98LEA04p4+b7t5pCxh24usx8gnipzrVWX24Bzh6rRvFjKmFiNN4MGGwccDe4CN4mdyo+N3TKrQBBqm3gXHX0opfk5VuBR/1TucnlxVaozQgLEUG9qgXH+z/+IQiE= Received: from DB3PR0502MB3964.eurprd05.prod.outlook.com (52.134.65.161) by DB3PR0502MB4028.eurprd05.prod.outlook.com (52.134.68.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2430.24; Mon, 11 Nov 2019 11:40:20 +0000 Received: from DB3PR0502MB3964.eurprd05.prod.outlook.com ([fe80::a850:bac9:c90f:f2f5]) by DB3PR0502MB3964.eurprd05.prod.outlook.com ([fe80::a850:bac9:c90f:f2f5%6]) with mapi id 15.20.2430.027; Mon, 11 Nov 2019 11:40:20 +0000 From: Raslan Darawsheh To: Slava Ovsiienko CC: Thomas Monjalon , "dev@dpdk.org" Thread-Topic: [PATCH v2] net/mlx5: set VF MAC address from host Thread-Index: AQHVmITLNHw5WLV98EOQSg2cxj2JUg== Date: Mon, 11 Nov 2019 11:40:20 +0000 Message-ID: <1573472413-6966-1-git-send-email-rasland@mellanox.com> References: <1573142599-10735-1-git-send-email-rasland@mellanox.com> In-Reply-To: <1573142599-10735-1-git-send-email-rasland@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.7.4 x-clientproxiedby: LNXP123CA0007.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:d2::19) To DB3PR0502MB3964.eurprd05.prod.outlook.com (2603:10a6:8:3::33) authentication-results: spf=none (sender IP is ) smtp.mailfrom=rasland@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [37.142.13.130] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 3cb59828-a503-450e-8878-08d7669bee3f x-ms-traffictypediagnostic: DB3PR0502MB4028:|DB3PR0502MB4028: x-ms-exchange-purlcount: 2 x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-forefront-prvs: 0218A015FA x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(396003)(136003)(366004)(376002)(39860400002)(346002)(189003)(199004)(6306002)(36756003)(305945005)(446003)(11346002)(6512007)(6486002)(6436002)(186003)(386003)(6506007)(66066001)(52116002)(71190400001)(5660300002)(76176011)(486006)(37006003)(54906003)(71200400001)(2616005)(476003)(99286004)(316002)(102836004)(26005)(4326008)(2906002)(3846002)(6116002)(81166006)(81156014)(14454004)(6636002)(25786009)(966005)(478600001)(7736002)(6862004)(86362001)(66476007)(14444005)(66556008)(66446008)(8936002)(66946007)(8676002)(64756008)(256004)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4028; H:DB3PR0502MB3964.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: NLf1jyjaKUE/OwH6+kPC3XYJj96uS9UMmEW0fn7jomcMeiXwWYpCPMITWGgbEqKzPtrjfHnm08I1bVDXE7B65WEFx35gxZVuYeixpWTOzdLxuqefwys51hHCZgocsO6iqZS4f2XxkeXbEm996A2/SE9Mz1zh6mezED8HVdS1gFVX0PpT9Phu/3Tyj8cuz612rxw2Zl7DyaG13aKn40P1KshrFpPzZ1WYnhM9G5DoJm2DAEaIXE4gdAHDCXNnk0kpUCPLqbMgfKSIxlLYenqpq+uL2fcGigl4k6FZbYXFYMl+PhublBYbE6blQK1801QCo1VSUQhL9EG58wRORKVRs3LAcL0DDjBTry64FGkAoBr6K0d+mg27waepPh/UYVuHFCvhWKvp2FARWdX12PLXRGx//urUU8Gf7k9o3XgwqHwO9a7CWkI2NKPMsCHakgQzB4QArXIeGB//+rmg3Co3dcPFnbc4GeI/ZZzT6UahVmY= Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cb59828-a503-450e-8878-08d7669bee3f X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Nov 2019 11:40:20.2697 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8wqe6d+bPPQOfMnQ5J6e5BtmvdYy3Dsruqn22zkiCc81TxUMaXZLorQxR5aFUKXqzmIGf84XM1BFzz6c49USgw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4028 Subject: [dpdk-dev] [PATCH v2] net/mlx5: set VF MAC address from host X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Allow to configure the default MAC address of a VF via its representor port in the host. An API was proposed to specify explicitly the VF as a target: https://patches.dpdk.org/patch/62176/ It has been rejected by the technical board in order to keep compatibility with behavior in Intel PMDs. http://mails.dpdk.org/archives/dev/2019-November/150588.html Signed-off-by: Thomas Monjalon Signed-off-by: Raslan Darawsheh --- v2: use RTE_PTR_DIFF, and change the use of representor id to representor b= it --- drivers/net/mlx5/mlx5.h | 2 + drivers/net/mlx5/mlx5_mac.c | 20 +++++++++ drivers/net/mlx5/mlx5_nl.c | 98 +++++++++++++++++++++++++++++++++++++++++= +++- 3 files changed, 119 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index 3296f10..969bfd7 100644 --- a/drivers/net/mlx5/mlx5.h +++ b/drivers/net/mlx5/mlx5.h @@ -997,6 +997,8 @@ int mlx5_nl_promisc(struct rte_eth_dev *dev, int enable= ); int mlx5_nl_allmulti(struct rte_eth_dev *dev, int enable); unsigned int mlx5_nl_portnum(int nl, const char *name); unsigned int mlx5_nl_ifindex(int nl, const char *name, uint32_t pindex); +int mlx5_nl_vf_mac_addr_modify(struct rte_eth_dev *dev, + struct rte_ether_addr *mac, int vf_index); int mlx5_nl_switch_info(int nl, unsigned int ifindex, struct mlx5_switch_info *info); =20 diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c index 0ffef5c..7bdaa2a 100644 --- a/drivers/net/mlx5/mlx5_mac.c +++ b/drivers/net/mlx5/mlx5_mac.c @@ -197,6 +197,26 @@ mlx5_mac_addr_add(struct rte_eth_dev *dev, struct rte_= ether_addr *mac, int mlx5_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr= ) { + uint16_t port_id; + struct mlx5_priv *priv =3D dev->data->dev_private; + + /* Configuring the VF instead of its representor. */ + if (priv->representor) { + DRV_LOG(DEBUG, "VF represented by port %u setting primary MAC address", + dev->data->port_id); + RTE_ETH_FOREACH_DEV_SIBLING(port_id, dev->data->port_id) { + priv =3D rte_eth_devices[port_id].data->dev_private; + if (priv->master =3D=3D 1) { + priv =3D dev->data->dev_private; + return mlx5_nl_vf_mac_addr_modify + (&rte_eth_devices[port_id], + mac_addr, priv->representor_id); + } + } + rte_errno =3D -ENOTSUP; + return rte_errno; + } + DRV_LOG(DEBUG, "port %u setting primary MAC address", dev->data->port_id); return mlx5_mac_addr_add(dev, mac_addr, 0, 0); diff --git a/drivers/net/mlx5/mlx5_nl.c b/drivers/net/mlx5/mlx5_nl.c index 3e073c6..e7ba034 100644 --- a/drivers/net/mlx5/mlx5_nl.c +++ b/drivers/net/mlx5/mlx5_nl.c @@ -42,7 +42,15 @@ #define MLX5_NDA_RTA(r) \ ((struct rtattr *)(((char *)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg)))) #endif - +/* + * Define NLMSG_TAIL as defined in iproute2 sources. + * + * see in iproute2 sources file include/libnetlink.h + */ +#ifndef NLMSG_TAIL +#define NLMSG_TAIL(nmsg) \ + ((struct rtattr *)(((char *)(nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) +#endif /* * The following definitions are normally found in rdma/rdma_netlink.h, * however they are so recent that most systems do not expose them yet. @@ -494,6 +502,94 @@ mlx5_nl_mac_addr_modify(struct rte_eth_dev *dev, struc= t rte_ether_addr *mac, } =20 /** + * Modify the VF MAC address neighbour table with Netlink. + * + * @param dev + * Pointer to Ethernet device. + * @param mac + * MAC address to consider. + * @param vf_index + * VF index. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +int +mlx5_nl_vf_mac_addr_modify(struct rte_eth_dev *dev, + struct rte_ether_addr *mac, int vf_index) +{ + int fd, ret; + struct mlx5_priv *priv =3D dev->data->dev_private; + unsigned int iface_idx =3D mlx5_ifindex(dev); + struct { + struct nlmsghdr hdr; + struct ifinfomsg ifm; + struct rtattr vf_list_rta; + struct rtattr vf_info_rta; + struct rtattr vf_mac_rta; + struct ifla_vf_mac ivm; + } req =3D { + .hdr =3D { + .nlmsg_len =3D NLMSG_LENGTH(sizeof(struct ifinfomsg)), + .nlmsg_flags =3D NLM_F_REQUEST | NLM_F_ACK, + .nlmsg_type =3D RTM_BASE, + }, + .ifm =3D { + .ifi_index =3D iface_idx, + }, + .vf_list_rta =3D { + .rta_type =3D IFLA_VFINFO_LIST, + .rta_len =3D RTA_ALIGN(RTA_LENGTH(0)), + }, + .vf_info_rta =3D { + .rta_type =3D IFLA_VF_INFO, + .rta_len =3D RTA_ALIGN(RTA_LENGTH(0)), + }, + .vf_mac_rta =3D { + .rta_type =3D IFLA_VF_MAC, + }, + }; + uint32_t sn =3D priv->nl_sn++; + struct ifla_vf_mac ivm =3D { + .vf =3D vf_index, + }; + + memcpy(&ivm.mac, mac, RTE_ETHER_ADDR_LEN); + memcpy(RTA_DATA(&req.vf_mac_rta), &ivm, sizeof(ivm)); + + req.vf_mac_rta.rta_len =3D RTA_LENGTH(sizeof(ivm)); + req.hdr.nlmsg_len =3D NLMSG_ALIGN(req.hdr.nlmsg_len) + + RTA_ALIGN(req.vf_list_rta.rta_len) + + RTA_ALIGN(req.vf_info_rta.rta_len) + + RTA_ALIGN(req.vf_mac_rta.rta_len); + req.vf_list_rta.rta_len =3D RTE_PTR_DIFF(NLMSG_TAIL(&req.hdr), + &req.vf_list_rta); + req.vf_info_rta.rta_len =3D RTE_PTR_DIFF(NLMSG_TAIL(&req.hdr), + &req.vf_info_rta); + + fd =3D priv->nl_socket_route; + if (fd < 0) + return -1; + ret =3D mlx5_nl_send(fd, &req.hdr, sn); + if (ret < 0) + goto error; + ret =3D mlx5_nl_recv(fd, sn, NULL, NULL); + if (ret < 0) + goto error; + return 0; +error: + DRV_LOG(ERR, + "representor %u cannot set VF MAC address " + "%02X:%02X:%02X:%02X:%02X:%02X : %s", + vf_index, + mac->addr_bytes[0], mac->addr_bytes[1], + mac->addr_bytes[2], mac->addr_bytes[3], + mac->addr_bytes[4], mac->addr_bytes[5], + strerror(rte_errno)); + return -rte_errno; +} + +/** * Add a MAC address. * * @param dev --=20 2.7.4