net: shell: Add MAC address validation

Validate MAC address before setting, add new helper APIs to cover all
cases.

Signed-off-by: Krishna T <krishna.t@nordicsemi.no>
This commit is contained in:
Krishna T 2023-01-11 16:49:18 +05:30 committed by Carles Cufí
commit 7952197a89
2 changed files with 17 additions and 2 deletions

View file

@ -670,6 +670,16 @@ static inline bool net_eth_is_addr_multicast(struct net_eth_addr *addr)
return false; return false;
} }
static inline bool net_eth_is_addr_group(struct net_eth_addr *addr)
{
return addr->addr[0] & 0x01;
}
static inline bool net_eth_is_addr_valid(struct net_eth_addr *addr)
{
return !net_eth_is_addr_unspecified(addr) && !net_eth_is_addr_group(addr);
}
static inline bool net_eth_is_addr_lldp_multicast(struct net_eth_addr *addr) static inline bool net_eth_is_addr_lldp_multicast(struct net_eth_addr *addr)
{ {
#if defined(CONFIG_NET_GPTP) || defined(CONFIG_NET_LLDP) #if defined(CONFIG_NET_GPTP) || defined(CONFIG_NET_LLDP)

View file

@ -3598,8 +3598,9 @@ static int cmd_net_set_mac(const struct shell *sh, size_t argc, char *argv[])
goto err; goto err;
} }
if (net_bytes_from_str(mac_addr.addr, sizeof(mac_addr), argv[2]) < 0) { if ((net_bytes_from_str(mac_addr.addr, sizeof(mac_addr), argv[2]) < 0) ||
PR_WARNING("Invalid MAC address\n"); !net_eth_is_addr_valid(&mac_addr)) {
PR_WARNING("Invalid MAC address: %s\n", argv[2]);
goto err; goto err;
} }
@ -3613,6 +3614,10 @@ static int cmd_net_set_mac(const struct shell *sh, size_t argc, char *argv[])
goto err; goto err;
} }
PR_INFO("MAC address set to %s\n",
net_sprint_ll_addr(net_if_get_link_addr(iface)->addr,
net_if_get_link_addr(iface)->len));
return 0; return 0;
err: err:
return -ENOEXEC; return -ENOEXEC;