lan78xx: Resolve issue with changing MAC address
authorJason Martinsen <jasonmartinsen@msn.com>
Tue, 18 Dec 2018 05:38:22 +0000 (05:38 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Dec 2018 05:40:59 +0000 (21:40 -0800)
Current state for the lan78xx driver does not allow for changing the
MAC address of the interface, without either removing the module (if
you compiled it that way) or rebooting the machine.  If you attempt to
change the MAC address, ifconfig will show the new address, however,
the system/interface will not respond to any traffic using that
configuration.  A few short-term options to work around this are to
unload the module and reload it with the new MAC address, change the
interface to "promisc", or reboot with the correct configuration to
change the MAC.

This patch enables the ability to change the MAC address via fairly normal means...
ifdown <interface>
modify entry in /etc/network/interfaces OR a similar method
ifup <interface>
Then test via any network communication, such as ICMP requests to gateway.

My only test platform for this patch has been a raspberry pi model 3b+.

Signed-off-by: Jason Martinsen <jasonmartinsen@msn.com>
-----

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/lan78xx.c

index be1917be28f2d457c561a117ea92dd49c7f62d50..77d3c85febf18f801a1dc234bf5c1063c264f472 100644 (file)
@@ -2320,6 +2320,10 @@ static int lan78xx_set_mac_addr(struct net_device *netdev, void *p)
        ret = lan78xx_write_reg(dev, RX_ADDRL, addr_lo);
        ret = lan78xx_write_reg(dev, RX_ADDRH, addr_hi);
 
+       /* Added to support MAC address changes */
+       ret = lan78xx_write_reg(dev, MAF_LO(0), addr_lo);
+       ret = lan78xx_write_reg(dev, MAF_HI(0), addr_hi | MAF_HI_VALID_);
+
        return 0;
 }