]> Pileus Git - ~andy/linux/blobdiff - drivers/net/macvlan.c
macvlan: Set IFF_UNICAST_FLT flag to prevent unnecessary promisc mode.
[~andy/linux] / drivers / net / macvlan.c
index defcd8a85744cf11aeea39aff124e59d64ecaa5c..73abbc1655d5c7b793601f93027dad37d2923150 100644 (file)
@@ -55,9 +55,8 @@ static struct macvlan_dev *macvlan_hash_lookup(const struct macvlan_port *port,
                                               const unsigned char *addr)
 {
        struct macvlan_dev *vlan;
-       struct hlist_node *n;
 
-       hlist_for_each_entry_rcu(vlan, n, &port->vlan_hash[addr[5]], hlist) {
+       hlist_for_each_entry_rcu(vlan, &port->vlan_hash[addr[5]], hlist) {
                if (ether_addr_equal_64bits(vlan->dev->dev_addr, addr))
                        return vlan;
        }
@@ -149,7 +148,6 @@ static void macvlan_broadcast(struct sk_buff *skb,
 {
        const struct ethhdr *eth = eth_hdr(skb);
        const struct macvlan_dev *vlan;
-       struct hlist_node *n;
        struct sk_buff *nskb;
        unsigned int i;
        int err;
@@ -159,7 +157,7 @@ static void macvlan_broadcast(struct sk_buff *skb,
                return;
 
        for (i = 0; i < MACVLAN_HASH_SIZE; i++) {
-               hlist_for_each_entry_rcu(vlan, n, &port->vlan_hash[i], hlist) {
+               hlist_for_each_entry_rcu(vlan, &port->vlan_hash[i], hlist) {
                        if (vlan->dev == src || !(vlan->mode & mode))
                                continue;
 
@@ -662,6 +660,7 @@ void macvlan_common_setup(struct net_device *dev)
        ether_setup(dev);
 
        dev->priv_flags        &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
+       dev->priv_flags        |= IFF_UNICAST_FLT;
        dev->netdev_ops         = &macvlan_netdev_ops;
        dev->destructor         = free_netdev;
        dev->header_ops         = &macvlan_hard_header_ops,