ipv6: Optmize translation between IPV6_PREFER_SRC_xxx and RT6_LOOKUP_F_xxx.
IPV6_PREFER_SRC_xxx definitions: | #define IPV6_PREFER_SRC_TMP 0x0001 | #define IPV6_PREFER_SRC_PUBLIC 0x0002 | #define IPV6_PREFER_SRC_COA 0x0004 RT6_LOOKUP_F_xxx definitions: | #define RT6_LOOKUP_F_SRCPREF_TMP 0x00000008 | #define RT6_LOOKUP_F_SRCPREF_PUBLIC 0x00000010 | #define RT6_LOOKUP_F_SRCPREF_COA 0x00000020 So, we can translate between these two groups by shift operation instead of multiple 'if's. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
25dc27d17d
commit
0c9a2ac1f8
@ -84,18 +84,11 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
|
||||
if ((rule->flags & FIB_RULE_FIND_SADDR) &&
|
||||
r->src.plen && !(flags & RT6_LOOKUP_F_HAS_SADDR)) {
|
||||
struct in6_addr saddr;
|
||||
unsigned int srcprefs = 0;
|
||||
|
||||
if (flags & RT6_LOOKUP_F_SRCPREF_TMP)
|
||||
srcprefs |= IPV6_PREFER_SRC_TMP;
|
||||
if (flags & RT6_LOOKUP_F_SRCPREF_PUBLIC)
|
||||
srcprefs |= IPV6_PREFER_SRC_PUBLIC;
|
||||
if (flags & RT6_LOOKUP_F_SRCPREF_COA)
|
||||
srcprefs |= IPV6_PREFER_SRC_COA;
|
||||
|
||||
if (ipv6_dev_get_saddr(net,
|
||||
ip6_dst_idev(&rt->u.dst)->dev,
|
||||
&flp->fl6_dst, srcprefs,
|
||||
&flp->fl6_dst,
|
||||
rt6_flags2srcprefs(flags),
|
||||
&saddr))
|
||||
goto again;
|
||||
if (!ipv6_prefix_equal(&saddr, &r->src.addr,
|
||||
|
Reference in New Issue
Block a user