netdev
[Top] [All Lists]

Re: ipt_physdev.c alignment problems on parisc64

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: ipt_physdev.c alignment problems on parisc64
From: Bart De Schuymer <bdschuym@xxxxxxxxxx>
Date: Sat, 20 Sep 2003 13:32:12 +0200
Cc: laforge@xxxxxxxxxxxxx, hno@xxxxxxxxxxxxxxx, acme@xxxxxxxxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
In-reply-to: <20030918194802.6726d53c.davem@xxxxxxxxxx>
References: <200309022116.41697.bdschuym@xxxxxxxxxx> <200309172317.38348.bdschuym@xxxxxxxxxx> <20030918194802.6726d53c.davem@xxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: KMail/1.5
On Friday 19 September 2003 04:48, David S. Miller wrote:
> Don't use an alignment attribute, just put the member of
> the struct at the very beginning and use "unsigned int"
> at a time op+comparisons.
>
> How about that?

Fine with me.

cheers,
Bart


--- linux-2.6.0-test5/include/linux/netfilter_ipv4/ipt_physdev.h.old    
2003-09-20 13:28:26.000000000 +0200
+++ linux-2.6.0-test5/include/linux/netfilter_ipv4/ipt_physdev.h        
2003-09-20 13:29:06.000000000 +0200
@@ -13,12 +13,12 @@
 #define IPT_PHYSDEV_OP_MASK            (0x20 - 1)
 
 struct ipt_physdev_info {
-       u_int8_t invert;
-       u_int8_t bitmask;
        char physindev[IFNAMSIZ];
        char in_mask[IFNAMSIZ];
        char physoutdev[IFNAMSIZ];
        char out_mask[IFNAMSIZ];
+       u_int8_t invert;
+       u_int8_t bitmask;
 };
 
 #endif /*_IPT_PHYSDEV_H*/
--- linux-2.6.0-test5/net/ipv4/netfilter/ipt_physdev.c.old      2003-09-20 
13:28:44.000000000 +0200
+++ linux-2.6.0-test5/net/ipv4/netfilter/ipt_physdev.c  2003-09-20 
13:29:06.000000000 +0200
@@ -23,7 +23,7 @@ match(const struct sk_buff *skb,
        int i;
        static const char nulldevname[IFNAMSIZ];
        const struct ipt_physdev_info *info = matchinfo;
-       unsigned long ret;
+       unsigned int ret;
        const char *indev, *outdev;
        struct nf_bridge_info *nf_bridge;
 
@@ -65,10 +65,10 @@ match(const struct sk_buff *skb,
        if (!(info->bitmask & IPT_PHYSDEV_OP_IN))
                goto match_outdev;
        indev = nf_bridge->physindev ? nf_bridge->physindev->name : nulldevname;
-       for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned long); i++) {
-               ret |= (((const unsigned long *)indev)[i]
-                       ^ ((const unsigned long *)info->physindev)[i])
-                       & ((const unsigned long *)info->in_mask)[i];
+       for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned int); i++) {
+               ret |= (((const unsigned int *)indev)[i]
+                       ^ ((const unsigned int *)info->physindev)[i])
+                       & ((const unsigned int *)info->in_mask)[i];
        }
 
        if ((ret == 0) ^ !(info->invert & IPT_PHYSDEV_OP_IN))
@@ -79,10 +79,10 @@ match_outdev:
                return MATCH;
        outdev = nf_bridge->physoutdev ?
                 nf_bridge->physoutdev->name : nulldevname;
-       for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned long); i++) {
-               ret |= (((const unsigned long *)outdev)[i]
-                       ^ ((const unsigned long *)info->physoutdev)[i])
-                       & ((const unsigned long *)info->out_mask)[i];
+       for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned int); i++) {
+               ret |= (((const unsigned int *)outdev)[i]
+                       ^ ((const unsigned int *)info->physoutdev)[i])
+                       & ((const unsigned int *)info->out_mask)[i];
        }
 
        return (ret != 0) ^ !(info->invert & IPT_PHYSDEV_OP_OUT);


<Prev in Thread] Current Thread [Next in Thread>