diff --git a/src/net/netdev_settings.c b/src/net/netdev_settings.c index 8f66c553..028a62ca 100644 --- a/src/net/netdev_settings.c +++ b/src/net/netdev_settings.c @@ -61,10 +61,18 @@ struct setting chip_setting __setting ( SETTING_NETDEV ) = { */ static int netdev_store_mac ( struct net_device *netdev, const void *data, size_t len ) { + struct ll_protocol *ll_protocol = netdev->ll_protocol; + + /* Record new MAC address */ + if ( data ) { + if ( len != netdev->ll_protocol->ll_addr_len ) + return -EINVAL; + memcpy ( netdev->ll_addr, data, len ); + } else { + /* Reset MAC address if clearing setting */ + ll_protocol->init_addr ( netdev->hw_addr, netdev->ll_addr ); + } - if ( len != netdev->ll_protocol->ll_addr_len ) - return -EINVAL; - memcpy ( netdev->ll_addr, data, len ); return 0; }