From 7952197a89e1d891ba4472a7f7b92366ff0b7e58 Mon Sep 17 00:00:00 2001 From: Krishna T Date: Wed, 11 Jan 2023 16:49:18 +0530 Subject: [PATCH] net: shell: Add MAC address validation Validate MAC address before setting, add new helper APIs to cover all cases. Signed-off-by: Krishna T --- include/zephyr/net/ethernet.h | 10 ++++++++++ subsys/net/ip/net_shell.c | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/zephyr/net/ethernet.h b/include/zephyr/net/ethernet.h index 54eb029ea02..0807c2be33e 100644 --- a/include/zephyr/net/ethernet.h +++ b/include/zephyr/net/ethernet.h @@ -670,6 +670,16 @@ static inline bool net_eth_is_addr_multicast(struct net_eth_addr *addr) 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) { #if defined(CONFIG_NET_GPTP) || defined(CONFIG_NET_LLDP) diff --git a/subsys/net/ip/net_shell.c b/subsys/net/ip/net_shell.c index fc4bf2aec90..3fbb566cd63 100644 --- a/subsys/net/ip/net_shell.c +++ b/subsys/net/ip/net_shell.c @@ -3598,8 +3598,9 @@ static int cmd_net_set_mac(const struct shell *sh, size_t argc, char *argv[]) goto err; } - if (net_bytes_from_str(mac_addr.addr, sizeof(mac_addr), argv[2]) < 0) { - PR_WARNING("Invalid MAC address\n"); + if ((net_bytes_from_str(mac_addr.addr, sizeof(mac_addr), argv[2]) < 0) || + !net_eth_is_addr_valid(&mac_addr)) { + PR_WARNING("Invalid MAC address: %s\n", argv[2]); goto err; } @@ -3613,6 +3614,10 @@ static int cmd_net_set_mac(const struct shell *sh, size_t argc, char *argv[]) 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; err: return -ENOEXEC;