From 8cd07fa6fecfcf76dfdef7c4da0c37d5de555570 Mon Sep 17 00:00:00 2001 From: liqinhui Date: Fri, 6 Jun 2025 10:07:25 +0800 Subject: [PATCH] netutils/netinit: Support the NETINIT_MACADDR Support getting MAC address from boardctl(BOARDIOC_MACADDR) via NETINIT_MACADDR. Signed-off-by: liqinhui --- netutils/netinit/Kconfig | 7 +++++++ netutils/netinit/netinit.c | 13 +++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/netutils/netinit/Kconfig b/netutils/netinit/Kconfig index 2031c7bae5c..8d91b0b5057 100644 --- a/netutils/netinit/Kconfig +++ b/netutils/netinit/Kconfig @@ -488,6 +488,13 @@ config NETINIT_SWMAC With this choice, you can assign a fixed MAC address determined by a NuttX configuration option. +config NETINIT_MACADDR + bool "Device MAC address" + depends on BOARDCTL_MACADDR + ---help--- + With this choice, you can assign a fixed MAC address in the file + device.info (DEVICE_INFO_PATH) defined by user. + endchoice # MAC address selection config NETINIT_MACADDR_1 diff --git a/netutils/netinit/netinit.c b/netutils/netinit/netinit.c index 4433eb4a564..c0a459725f4 100644 --- a/netutils/netinit/netinit.c +++ b/netutils/netinit/netinit.c @@ -286,7 +286,9 @@ static const uint16_t g_ipv6_netmask[8] = defined(HAVE_MAC) static void netinit_set_macaddr(void) { -#if defined(CONFIG_NETINIT_UIDMAC) +#if defined(CONFIG_NETINIT_MACADDR) + struct boardioc_macaddr_s req; +#elif defined(CONFIG_NETINIT_UIDMAC) uint8_t uid[CONFIG_BOARDCTL_UNIQUEID_SIZE]; #elif defined(CONFIG_NET_ETHERNET) uint8_t mac[IFHWADDRLEN]; @@ -296,7 +298,14 @@ static void netinit_set_macaddr(void) /* Many embedded network interfaces must have a software assigned MAC */ -#if defined(CONFIG_NETINIT_UIDMAC) +#if defined(CONFIG_NETINIT_MACADDR) + strlcpy(req.ifname, NET_DEVNAME, IFNAMSIZ); + if (boardctl(BOARDIOC_MACADDR, (uintptr_t)&req) == 0) + { + netlib_setmacaddr(NET_DEVNAME, req.macaddr); + } + +#elif defined(CONFIG_NETINIT_UIDMAC) boardctl(BOARDIOC_UNIQUEID, (uintptr_t)&uid); uid[0] = (uid[0] & 0b11110000) | 2; /* Locally Administered MAC */ netlib_setmacaddr(NET_DEVNAME, uid);