diff options
Diffstat (limited to 'net/ipv6/fib6_rules.c')
| -rw-r--r-- | net/ipv6/fib6_rules.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c index b7aa7c64cc4a..5e463c43fcc2 100644 --- a/net/ipv6/fib6_rules.c +++ b/net/ipv6/fib6_rules.c | |||
| @@ -84,18 +84,11 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp, | |||
| 84 | if ((rule->flags & FIB_RULE_FIND_SADDR) && | 84 | if ((rule->flags & FIB_RULE_FIND_SADDR) && |
| 85 | r->src.plen && !(flags & RT6_LOOKUP_F_HAS_SADDR)) { | 85 | r->src.plen && !(flags & RT6_LOOKUP_F_HAS_SADDR)) { |
| 86 | struct in6_addr saddr; | 86 | struct in6_addr saddr; |
| 87 | unsigned int srcprefs = 0; | ||
| 88 | |||
| 89 | if (flags & RT6_LOOKUP_F_SRCPREF_TMP) | ||
| 90 | srcprefs |= IPV6_PREFER_SRC_TMP; | ||
| 91 | if (flags & RT6_LOOKUP_F_SRCPREF_PUBLIC) | ||
| 92 | srcprefs |= IPV6_PREFER_SRC_PUBLIC; | ||
| 93 | if (flags & RT6_LOOKUP_F_SRCPREF_COA) | ||
| 94 | srcprefs |= IPV6_PREFER_SRC_COA; | ||
| 95 | 87 | ||
| 96 | if (ipv6_dev_get_saddr(net, | 88 | if (ipv6_dev_get_saddr(net, |
| 97 | ip6_dst_idev(&rt->u.dst)->dev, | 89 | ip6_dst_idev(&rt->u.dst)->dev, |
| 98 | &flp->fl6_dst, srcprefs, | 90 | &flp->fl6_dst, |
| 91 | rt6_flags2srcprefs(flags), | ||
| 99 | &saddr)) | 92 | &saddr)) |
| 100 | goto again; | 93 | goto again; |
| 101 | if (!ipv6_prefix_equal(&saddr, &r->src.addr, | 94 | if (!ipv6_prefix_equal(&saddr, &r->src.addr, |
| @@ -262,7 +255,7 @@ static struct fib_rules_ops fib6_rules_ops_template = { | |||
| 262 | .fro_net = &init_net, | 255 | .fro_net = &init_net, |
| 263 | }; | 256 | }; |
| 264 | 257 | ||
| 265 | static int fib6_rules_net_init(struct net *net) | 258 | static int __net_init fib6_rules_net_init(struct net *net) |
| 266 | { | 259 | { |
| 267 | struct fib_rules_ops *ops; | 260 | struct fib_rules_ops *ops; |
| 268 | int err = -ENOMEM; | 261 | int err = -ENOMEM; |
| @@ -291,7 +284,7 @@ out_fib6_rules_ops: | |||
| 291 | goto out; | 284 | goto out; |
| 292 | } | 285 | } |
| 293 | 286 | ||
| 294 | static void fib6_rules_net_exit(struct net *net) | 287 | static void __net_exit fib6_rules_net_exit(struct net *net) |
| 295 | { | 288 | { |
| 296 | fib_rules_unregister(net->ipv6.fib6_rules_ops); | 289 | fib_rules_unregister(net->ipv6.fib6_rules_ops); |
| 297 | } | 290 | } |
