fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / net / bridge / netfilter / ebt_arpreply.c
index 87ba30d..0aa7b99 100644 (file)
@@ -20,30 +20,38 @@ static int ebt_target_reply(struct sk_buff **pskb, unsigned int hooknr,
    const void *data, unsigned int datalen)
 {
        struct ebt_arpreply_info *info = (struct ebt_arpreply_info *)data;
-       u32 sip, dip;
-       struct arphdr ah;
-       unsigned char sha[ETH_ALEN];
+       __be32 _sip, *siptr, _dip, *diptr;
+       struct arphdr _ah, *ap;
+       unsigned char _sha[ETH_ALEN], *shp;
        struct sk_buff *skb = *pskb;
 
-       if (skb_copy_bits(skb, 0, &ah, sizeof(ah)))
+       ap = skb_header_pointer(skb, 0, sizeof(_ah), &_ah);
+       if (ap == NULL)
                return EBT_DROP;
 
-       if (ah.ar_op != __constant_htons(ARPOP_REQUEST) || ah.ar_hln != ETH_ALEN
-           || ah.ar_pro != __constant_htons(ETH_P_IP) || ah.ar_pln != 4)
+       if (ap->ar_op != htons(ARPOP_REQUEST) ||
+           ap->ar_hln != ETH_ALEN ||
+           ap->ar_pro != htons(ETH_P_IP) ||
+           ap->ar_pln != 4)
                return EBT_CONTINUE;
 
-       if (skb_copy_bits(skb, sizeof(ah), &sha, ETH_ALEN))
+       shp = skb_header_pointer(skb, sizeof(_ah), ETH_ALEN, &_sha);
+       if (shp == NULL)
                return EBT_DROP;
 
-       if (skb_copy_bits(skb, sizeof(ah) + ETH_ALEN, &sip, sizeof(sip)))
+       siptr = skb_header_pointer(skb, sizeof(_ah) + ETH_ALEN,
+                                  sizeof(_sip), &_sip);
+       if (siptr == NULL)
                return EBT_DROP;
 
-       if (skb_copy_bits(skb, sizeof(ah) + 2 * ETH_ALEN + sizeof(sip),
-           &dip, sizeof(dip)))
+       diptr = skb_header_pointer(skb,
+                                  sizeof(_ah) + 2 * ETH_ALEN + sizeof(_sip),
+                                  sizeof(_dip), &_dip);
+       if (diptr == NULL)
                return EBT_DROP;
 
-       arp_send(ARPOP_REPLY, ETH_P_ARP, sip, (struct net_device *)in,
-                dip, sha, info->mac, sha);
+       arp_send(ARPOP_REPLY, ETH_P_ARP, *siptr, (struct net_device *)in,
+                *diptr, shp, info->mac, shp);
 
        return info->target;
 }
@@ -57,7 +65,7 @@ static int ebt_target_reply_check(const char *tablename, unsigned int hookmask,
                return -EINVAL;
        if (BASE_CHAIN && info->target == EBT_RETURN)
                return -EINVAL;
-       if (e->ethproto != __constant_htons(ETH_P_ARP) ||
+       if (e->ethproto != htons(ETH_P_ARP) ||
            e->invflags & EBT_IPROTO)
                return -EINVAL;
        CLEAR_BASE_CHAIN_BIT;
@@ -74,16 +82,16 @@ static struct ebt_target reply_target =
        .me             = THIS_MODULE,
 };
 
-static int __init init(void)
+static int __init ebt_arpreply_init(void)
 {
        return ebt_register_target(&reply_target);
 }
 
-static void __exit fini(void)
+static void __exit ebt_arpreply_fini(void)
 {
        ebt_unregister_target(&reply_target);
 }
 
-module_init(init);
-module_exit(fini);
+module_init(ebt_arpreply_init);
+module_exit(ebt_arpreply_fini);
 MODULE_LICENSE("GPL");