net: replace uses of __constant_{endian}
[deliverable/linux.git] / drivers / net / bonding / bond_alb.c
index 87437c788476ab8a05df31a0f7fd1887ffeef497..409b140742754cb61e0d60f649d6355a254979d5 100644 (file)
@@ -20,8 +20,6 @@
  *
  */
 
-//#define BONDING_DEBUG 1
-
 #include <linux/skbuff.h>
 #include <linux/netdevice.h>
 #include <linux/etherdevice.h>
@@ -346,30 +344,37 @@ static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp)
 
 static int rlb_arp_recv(struct sk_buff *skb, struct net_device *bond_dev, struct packet_type *ptype, struct net_device *orig_dev)
 {
-       struct bonding *bond = bond_dev->priv;
+       struct bonding *bond;
        struct arp_pkt *arp = (struct arp_pkt *)skb->data;
        int res = NET_RX_DROP;
 
        if (dev_net(bond_dev) != &init_net)
                goto out;
 
-       if (!(bond_dev->flags & IFF_MASTER))
+       while (bond_dev->priv_flags & IFF_802_1Q_VLAN)
+               bond_dev = vlan_dev_real_dev(bond_dev);
+
+       if (!(bond_dev->priv_flags & IFF_BONDING) ||
+           !(bond_dev->flags & IFF_MASTER))
                goto out;
 
        if (!arp) {
-               dprintk("Packet has no ARP data\n");
+               pr_debug("Packet has no ARP data\n");
                goto out;
        }
 
        if (skb->len < sizeof(struct arp_pkt)) {
-               dprintk("Packet is too small to be an ARP\n");
+               pr_debug("Packet is too small to be an ARP\n");
                goto out;
        }
 
        if (arp->op_code == htons(ARPOP_REPLY)) {
                /* update rx hash table for this ARP */
+               printk("rar: update orig %s bond_dev %s\n", orig_dev->name,
+                      bond_dev->name);
+               bond = netdev_priv(bond_dev);
                rlb_update_entry_from_arp(bond, arp);
-               dprintk("Server received an ARP Reply from client\n");
+               pr_debug("Server received an ARP Reply from client\n");
        }
 
        res = NET_RX_SUCCESS;
@@ -723,7 +728,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
                if (tx_slave) {
                        memcpy(arp->mac_src,tx_slave->dev->dev_addr, ETH_ALEN);
                }
-               dprintk("Server sent ARP Reply packet\n");
+               pr_debug("Server sent ARP Reply packet\n");
        } else if (arp->op_code == htons(ARPOP_REQUEST)) {
                /* Create an entry in the rx_hashtbl for this client as a
                 * place holder.
@@ -743,7 +748,7 @@ static struct slave *rlb_arp_xmit(struct sk_buff *skb, struct bonding *bond)
                 * updated with their assigned mac.
                 */
                rlb_req_update_subnet_clients(bond, arp->ip_src);
-               dprintk("Server sent ARP Request packet\n");
+               pr_debug("Server sent ARP Request packet\n");
        }
 
        return tx_slave;
@@ -817,8 +822,8 @@ static int rlb_initialize(struct bonding *bond)
        _unlock_rx_hashtbl(bond);
 
        /*initialize packet type*/
-       pk_type->type = __constant_htons(ETH_P_ARP);
-       pk_type->dev = bond->dev;
+       pk_type->type = cpu_to_be16(ETH_P_ARP);
+       pk_type->dev = NULL;
        pk_type->func = rlb_arp_recv;
 
        /* register to receive ARPs */
@@ -887,7 +892,7 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
        memset(&pkt, 0, size);
        memcpy(pkt.mac_dst, mac_addr, ETH_ALEN);
        memcpy(pkt.mac_src, mac_addr, ETH_ALEN);
-       pkt.type = __constant_htons(ETH_P_LOOP);
+       pkt.type = cpu_to_be16(ETH_P_LOOP);
 
        for (i = 0; i < MAX_LP_BURST; i++) {
                struct sk_buff *skb;
@@ -1211,11 +1216,6 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
        }
 
        bond_for_each_slave(bond, slave, i) {
-               if (slave->dev->set_mac_address == NULL) {
-                       res = -EOPNOTSUPP;
-                       goto unwind;
-               }
-
                /* save net_device's current hw address */
                memcpy(tmp_addr, slave->dev->dev_addr, ETH_ALEN);
 
@@ -1224,9 +1224,8 @@ static int alb_set_mac_address(struct bonding *bond, void *addr)
                /* restore net_device's hw address */
                memcpy(slave->dev->dev_addr, tmp_addr, ETH_ALEN);
 
-               if (res) {
+               if (res)
                        goto unwind;
-               }
        }
 
        return 0;
@@ -1285,7 +1284,7 @@ void bond_alb_deinitialize(struct bonding *bond)
 
 int bond_alb_xmit(struct sk_buff *skb, struct net_device *bond_dev)
 {
-       struct bonding *bond = bond_dev->priv;
+       struct bonding *bond = netdev_priv(bond_dev);
        struct ethhdr *eth_data;
        struct alb_bond_info *bond_info = &(BOND_ALB_INFO(bond));
        struct slave *tx_slave = NULL;
@@ -1706,7 +1705,7 @@ void bond_alb_handle_active_change(struct bonding *bond, struct slave *new_slave
  */
 int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
 {
-       struct bonding *bond = bond_dev->priv;
+       struct bonding *bond = netdev_priv(bond_dev);
        struct sockaddr *sa = addr;
        struct slave *slave, *swap_slave;
        int res;
This page took 0.069006 seconds and 5 git commands to generate.