Skip to content

Commit 0f711f9

Browse files
Dimon-Zhaoshemminger
authored andcommitted
net/nbl: use hardware MAC address instead of random one
The previous implementation used random MAC address for rte_eth_dev. This change retrieves and uses the actual hardware MAC address from the network device. Fixes: bf64905 ("net/nbl: support init and uninit") Signed-off-by: Dimon Zhao <[email protected]>
1 parent a1e4361 commit 0f711f9

File tree

6 files changed

+63
-2
lines changed

6 files changed

+63
-2
lines changed

drivers/net/nbl/nbl_common/nbl_userdev.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,3 +760,43 @@ void nbl_pci_unmap_device(struct nbl_adapter *adapter)
760760

761761
nbl_mdev_unmap_device(adapter);
762762
}
763+
764+
static int nbl_userdev_ifreq(int ifindex, int req, struct ifreq *ifr)
765+
{
766+
int sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
767+
int ret = 0;
768+
769+
if (sock == -1) {
770+
rte_errno = errno;
771+
return -rte_errno;
772+
}
773+
774+
if (!if_indextoname(ifindex, &ifr->ifr_name[0]))
775+
goto error;
776+
777+
ret = ioctl(sock, req, ifr);
778+
if (ret == -1) {
779+
rte_errno = errno;
780+
goto error;
781+
}
782+
close(sock);
783+
return 0;
784+
error:
785+
close(sock);
786+
return -rte_errno;
787+
}
788+
789+
int nbl_userdev_get_mac_addr(struct nbl_common_info *common, u8 *mac)
790+
{
791+
struct ifreq request;
792+
int ret;
793+
794+
ret = nbl_userdev_ifreq(common->ifindex, SIOCGIFHWADDR, &request);
795+
if (ret) {
796+
NBL_LOG(ERR, "userdev get mac failed: %d", ret);
797+
return ret;
798+
}
799+
800+
memcpy(mac, request.ifr_hwaddr.sa_data, RTE_ETHER_ADDR_LEN);
801+
return 0;
802+
}

drivers/net/nbl/nbl_dev/nbl_dev.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,8 @@ static int nbl_dev_setup_net_dev(struct nbl_dev_mgt *dev_mgt,
886886

887887
common->vsi_id = net_dev->vsi_id;
888888
common->eth_id = net_dev->eth_id;
889+
rte_ether_addr_copy((struct rte_ether_addr *)register_result.mac,
890+
(struct rte_ether_addr *)common->mac);
889891

890892
disp_ops->clear_queues(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), net_dev->vsi_id);
891893
disp_ops->register_vsi2q(NBL_DEV_MGT_TO_DISP_PRIV(dev_mgt), NBL_VSI_DATA, net_dev->vsi_id,

drivers/net/nbl/nbl_dispatch.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,22 @@ static int nbl_disp_get_mac_addr(void *priv __rte_unused, u8 *mac)
296296
return 0;
297297
}
298298

299-
static int nbl_disp_get_mac_addr_req(void *priv __rte_unused, u8 *mac)
299+
static int nbl_disp_get_mac_addr_req(void *priv, u8 *mac)
300300
{
301-
rte_eth_random_addr(mac);
301+
struct nbl_dispatch_mgt *disp_mgt = (struct nbl_dispatch_mgt *)priv;
302+
struct nbl_common_info *common = NBL_DISP_MGT_TO_COMMON(disp_mgt);
303+
int ret = -1;
304+
305+
if (common->nl_socket_route >= 0 && common->ifindex >= 0)
306+
ret = nbl_userdev_get_mac_addr(common, mac);
307+
308+
if (ret) {
309+
if (rte_is_zero_ether_addr((struct rte_ether_addr *)common->mac))
310+
rte_eth_random_addr(mac);
311+
else
312+
rte_ether_addr_copy((struct rte_ether_addr *)common->mac,
313+
(struct rte_ether_addr *)mac);
314+
}
302315

303316
return 0;
304317
}

drivers/net/nbl/nbl_include/nbl_def_channel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ struct nbl_chan_param_register_net_info {
322322
u16 offset;
323323
u16 stride;
324324
u64 pf_bar_start;
325+
u16 is_vdpa;
325326
};
326327

327328
struct nbl_chan_param_get_vsi_id {

drivers/net/nbl/nbl_include/nbl_def_common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,5 +116,6 @@ int nbl_userdev_port_config(struct nbl_adapter *adapter, int start);
116116
int nbl_userdev_port_isolate(struct nbl_adapter *adapter, int set, struct rte_flow_error *error);
117117
int nbl_pci_map_device(struct nbl_adapter *adapter);
118118
void nbl_pci_unmap_device(struct nbl_adapter *adapter);
119+
int nbl_userdev_get_mac_addr(struct nbl_common_info *common, u8 *mac);
119120

120121
#endif

drivers/net/nbl/nbl_include/nbl_include.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include <sys/ioctl.h>
2424
#include <sys/types.h>
2525
#include <unistd.h>
26+
#include <net/if.h>
2627

2728
#include <rte_ethdev.h>
2829
#include <ethdev_driver.h>
@@ -146,6 +147,7 @@ struct nbl_common_info {
146147
u8 dma_set_msb:1;
147148
u8 rsv:2;
148149
struct nbl_board_port_info board_info;
150+
u8 mac[RTE_ETHER_ADDR_LEN];
149151
};
150152

151153
struct nbl_register_net_param {
@@ -172,6 +174,8 @@ struct nbl_register_net_result {
172174
u16 vlan_tci;
173175
u32 rate;
174176
bool trusted;
177+
u64 vlan_features;
178+
u64 hw_enc_features;
175179
};
176180

177181
struct nbl_eth_link_info {

0 commit comments

Comments
 (0)