|
@@ -40,18 +40,6 @@
|
|
|
|
|
|
static int numdummies = 1;
|
|
|
|
|
|
-static int dummy_set_address(struct net_device *dev, void *p)
|
|
|
-{
|
|
|
- struct sockaddr *sa = p;
|
|
|
-
|
|
|
- if (!is_valid_ether_addr(sa->sa_data))
|
|
|
- return -EADDRNOTAVAIL;
|
|
|
-
|
|
|
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
|
|
|
- memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/* fake multicast ability */
|
|
|
static void set_multicast_list(struct net_device *dev)
|
|
|
{
|
|
@@ -118,7 +106,7 @@ static const struct net_device_ops dummy_netdev_ops = {
|
|
|
.ndo_start_xmit = dummy_xmit,
|
|
|
.ndo_validate_addr = eth_validate_addr,
|
|
|
.ndo_set_rx_mode = set_multicast_list,
|
|
|
- .ndo_set_mac_address = dummy_set_address,
|
|
|
+ .ndo_set_mac_address = eth_mac_addr,
|
|
|
.ndo_get_stats64 = dummy_get_stats64,
|
|
|
};
|
|
|
|
|
@@ -134,6 +122,7 @@ static void dummy_setup(struct net_device *dev)
|
|
|
dev->tx_queue_len = 0;
|
|
|
dev->flags |= IFF_NOARP;
|
|
|
dev->flags &= ~IFF_MULTICAST;
|
|
|
+ dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
|
|
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
|
|
|
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
|
|
|
eth_hw_addr_random(dev);
|