]> err.no Git - linux-2.6/commitdiff
[IPV6]: Fix routing by fwmark
authorPatrick McHardy <kaber@trash.net>
Sat, 26 Aug 2006 23:50:20 +0000 (16:50 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Fri, 22 Sep 2006 22:18:14 +0000 (15:18 -0700)
Fix mark comparison, also dump the mask to userspace when the mask is
zero, but the mark is not (in which case the mark is dumped, so the
mask is needed to make sense of it).

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/fib6_rules.c

index ee4aa43ad9735cdb2c2dce1b21d8a9ebefc21d49..2fbc71d90187470fddeeb1fdcf864d85eb574d24 100644 (file)
@@ -129,7 +129,7 @@ static int fib6_rule_match(struct fib_rule *rule, struct flowi *fl, int flags)
                return 0;
 
 #ifdef CONFIG_IPV6_ROUTE_FWMARK
-       if ((r->fwmark ^ fl->fl6_fwmark) / r->fwmask)
+       if ((r->fwmark ^ fl->fl6_fwmark) & r->fwmask)
                return 0;
 #endif
 
@@ -256,7 +256,7 @@ static int fib6_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
        if (rule6->fwmark)
                NLA_PUT_U32(skb, FRA_FWMARK, rule6->fwmark);
 
-       if (rule6->fwmask)
+       if (rule6->fwmask || rule6->fwmark)
                NLA_PUT_U32(skb, FRA_FWMASK, rule6->fwmask);
 #endif