net: get rid of multiple bond-related netdevice->priv_flags
[linux-2.6.git] / drivers / net / bonding / bond_main.c
index b047d75..00e9710 100644 (file)
@@ -1458,20 +1458,20 @@ static void bond_setup_by_slave(struct net_device *bond_dev,
  * ARP on active-backup slaves with arp_validate enabled.
  */
 static bool bond_should_deliver_exact_match(struct sk_buff *skb,
-                                           struct net_device *slave_dev,
-                                           struct net_device *bond_dev)
+                                           struct slave *slave,
+                                           struct bonding *bond)
 {
-       if (slave_dev->priv_flags & IFF_SLAVE_INACTIVE) {
-               if (slave_dev->priv_flags & IFF_SLAVE_NEEDARP &&
+       if (slave->dev->priv_flags & IFF_SLAVE_INACTIVE) {
+               if (slave_do_arp_validate(bond, slave) &&
                    skb->protocol == __cpu_to_be16(ETH_P_ARP))
                        return false;
 
-               if (bond_dev->priv_flags & IFF_MASTER_ALB &&
+               if (bond->params.mode == BOND_MODE_ALB &&
                    skb->pkt_type != PACKET_BROADCAST &&
                    skb->pkt_type != PACKET_MULTICAST)
                                return false;
 
-               if (bond_dev->priv_flags & IFF_MASTER_8023AD &&
+               if (bond->params.mode == BOND_MODE_8023AD &&
                    skb->protocol == __cpu_to_be16(ETH_P_SLOW))
                        return false;
 
@@ -1484,6 +1484,7 @@ static struct sk_buff *bond_handle_frame(struct sk_buff *skb)
 {
        struct slave *slave;
        struct net_device *bond_dev;
+       struct bonding *bond;
 
        skb = skb_share_check(skb, GFP_ATOMIC);
        if (unlikely(!skb))
@@ -1494,17 +1495,19 @@ static struct sk_buff *bond_handle_frame(struct sk_buff *skb)
        if (unlikely(!bond_dev))
                return skb;
 
-       if (bond_dev->priv_flags & IFF_MASTER_ARPMON)
+       bond = netdev_priv(bond_dev);
+
+       if (bond->params.arp_interval)
                slave->dev->last_rx = jiffies;
 
-       if (bond_should_deliver_exact_match(skb, slave->dev, bond_dev)) {
+       if (bond_should_deliver_exact_match(skb, slave, bond)) {
                skb->deliver_no_wcard = 1;
                return skb;
        }
 
        skb->dev = bond_dev;
 
-       if (bond_dev->priv_flags & IFF_MASTER_ALB &&
+       if (bond->params.mode == BOND_MODE_ALB &&
            bond_dev->priv_flags & IFF_BRIDGE_PORT &&
            skb->pkt_type == PACKET_HOST) {
 
@@ -2119,9 +2122,7 @@ int bond_release(struct net_device *bond_dev, struct net_device *slave_dev)
 
        dev_set_mtu(slave_dev, slave->original_mtu);
 
-       slave_dev->priv_flags &= ~(IFF_MASTER_8023AD | IFF_MASTER_ALB |
-                                  IFF_SLAVE_INACTIVE | IFF_BONDING |
-                                  IFF_SLAVE_NEEDARP);
+       slave_dev->priv_flags &= ~(IFF_SLAVE_INACTIVE | IFF_BONDING);
 
        kfree(slave);
 
@@ -2232,8 +2233,7 @@ static int bond_release_all(struct net_device *bond_dev)
                        dev_set_mac_address(slave_dev, &addr);
                }
 
-               slave_dev->priv_flags &= ~(IFF_MASTER_8023AD | IFF_MASTER_ALB |
-                                          IFF_SLAVE_INACTIVE);
+               slave_dev->priv_flags &= ~IFF_SLAVE_INACTIVE;
 
                kfree(slave);
 
@@ -4419,11 +4419,9 @@ void bond_set_mode_ops(struct bonding *bond, int mode)
        case BOND_MODE_BROADCAST:
                break;
        case BOND_MODE_8023AD:
-               bond_set_master_3ad_flags(bond);
                bond_set_xmit_hash_policy(bond);
                break;
        case BOND_MODE_ALB:
-               bond_set_master_alb_flags(bond);
                /* FALLTHRU */
        case BOND_MODE_TLB:
                break;
@@ -4514,9 +4512,6 @@ static void bond_setup(struct net_device *bond_dev)
        bond_dev->priv_flags |= IFF_BONDING;
        bond_dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
 
-       if (bond->params.arp_interval)
-               bond_dev->priv_flags |= IFF_MASTER_ARPMON;
-
        /* At first, we block adding VLANs. That's the only way to
         * prevent problems that occur when adding VLANs over an
         * empty bond. The block will be removed once non-challenged