[NET]: Rethink mark field in struct flowi
Now that all protocols have been made aware of the mark field it can be moved out of the union thus simplyfing its usage. The config options in the IPv4/IPv6/DECnet subsystems to enable respectively disable mark based routing only obfuscate the code with ifdefs, the cost for the additional comparison in the flow key is insignificant, and most distributions have all these options enabled by default anyway. Therefore it makes sense to remove the config options and enable mark based routing by default. Signed-off-by: Thomas Graf <tgraf@suug.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
82e91ffef6
commit
47dcf0cb10
@@ -25,10 +25,8 @@ struct fib6_rule
|
||||
struct fib_rule common;
|
||||
struct rt6key src;
|
||||
struct rt6key dst;
|
||||
#ifdef CONFIG_IPV6_ROUTE_FWMARK
|
||||
u32 fwmark;
|
||||
u32 fwmask;
|
||||
#endif
|
||||
u8 tclass;
|
||||
};
|
||||
|
||||
@@ -130,10 +128,8 @@ static int fib6_rule_match(struct fib_rule *rule, struct flowi *fl, int flags)
|
||||
if (r->tclass && r->tclass != ((ntohl(fl->fl6_flowlabel) >> 20) & 0xff))
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTE_FWMARK
|
||||
if ((r->fwmark ^ fl->fl6_fwmark) & r->fwmask)
|
||||
if ((r->fwmark ^ fl->mark) & r->fwmask)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -177,7 +173,6 @@ static int fib6_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
|
||||
nla_memcpy(&rule6->dst.addr, tb[FRA_DST],
|
||||
sizeof(struct in6_addr));
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTE_FWMARK
|
||||
if (tb[FRA_FWMARK]) {
|
||||
rule6->fwmark = nla_get_u32(tb[FRA_FWMARK]);
|
||||
if (rule6->fwmark) {
|
||||
@@ -192,7 +187,6 @@ static int fib6_rule_configure(struct fib_rule *rule, struct sk_buff *skb,
|
||||
|
||||
if (tb[FRA_FWMASK])
|
||||
rule6->fwmask = nla_get_u32(tb[FRA_FWMASK]);
|
||||
#endif
|
||||
|
||||
rule6->src.plen = frh->src_len;
|
||||
rule6->dst.plen = frh->dst_len;
|
||||
@@ -225,13 +219,11 @@ static int fib6_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh,
|
||||
nla_memcmp(tb[FRA_DST], &rule6->dst.addr, sizeof(struct in6_addr)))
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTE_FWMARK
|
||||
if (tb[FRA_FWMARK] && (rule6->fwmark != nla_get_u32(tb[FRA_FWMARK])))
|
||||
return 0;
|
||||
|
||||
if (tb[FRA_FWMASK] && (rule6->fwmask != nla_get_u32(tb[FRA_FWMASK])))
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -254,13 +246,11 @@ static int fib6_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
|
||||
NLA_PUT(skb, FRA_SRC, sizeof(struct in6_addr),
|
||||
&rule6->src.addr);
|
||||
|
||||
#ifdef CONFIG_IPV6_ROUTE_FWMARK
|
||||
if (rule6->fwmark)
|
||||
NLA_PUT_U32(skb, FRA_FWMARK, rule6->fwmark);
|
||||
|
||||
if (rule6->fwmask || rule6->fwmark)
|
||||
NLA_PUT_U32(skb, FRA_FWMASK, rule6->fwmask);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
|
Reference in New Issue
Block a user