diff options
Diffstat (limited to 'net/ipv4/fib_rules.c')
-rw-r--r-- | net/ipv4/fib_rules.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 7981a24f5c7b..a53bb1b5b118 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -41,19 +41,19 @@ struct fib4_rule { | |||
41 | __be32 srcmask; | 41 | __be32 srcmask; |
42 | __be32 dst; | 42 | __be32 dst; |
43 | __be32 dstmask; | 43 | __be32 dstmask; |
44 | #ifdef CONFIG_NET_CLS_ROUTE | 44 | #ifdef CONFIG_IP_ROUTE_CLASSID |
45 | u32 tclassid; | 45 | u32 tclassid; |
46 | #endif | 46 | #endif |
47 | }; | 47 | }; |
48 | 48 | ||
49 | #ifdef CONFIG_NET_CLS_ROUTE | 49 | #ifdef CONFIG_IP_ROUTE_CLASSID |
50 | u32 fib_rules_tclass(struct fib_result *res) | 50 | u32 fib_rules_tclass(const struct fib_result *res) |
51 | { | 51 | { |
52 | return res->r ? ((struct fib4_rule *) res->r)->tclassid : 0; | 52 | return res->r ? ((struct fib4_rule *) res->r)->tclassid : 0; |
53 | } | 53 | } |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | int fib_lookup(struct net *net, struct flowi *flp, struct fib_result *res) | 56 | int fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res) |
57 | { | 57 | { |
58 | struct fib_lookup_arg arg = { | 58 | struct fib_lookup_arg arg = { |
59 | .result = res, | 59 | .result = res, |
@@ -61,7 +61,7 @@ int fib_lookup(struct net *net, struct flowi *flp, struct fib_result *res) | |||
61 | }; | 61 | }; |
62 | int err; | 62 | int err; |
63 | 63 | ||
64 | err = fib_rules_lookup(net->ipv4.rules_ops, flp, 0, &arg); | 64 | err = fib_rules_lookup(net->ipv4.rules_ops, flowi4_to_flowi(flp), 0, &arg); |
65 | res->r = arg.rule; | 65 | res->r = arg.rule; |
66 | 66 | ||
67 | return err; | 67 | return err; |
@@ -95,7 +95,7 @@ static int fib4_rule_action(struct fib_rule *rule, struct flowi *flp, | |||
95 | if (!tbl) | 95 | if (!tbl) |
96 | goto errout; | 96 | goto errout; |
97 | 97 | ||
98 | err = fib_table_lookup(tbl, flp, (struct fib_result *) arg->result, arg->flags); | 98 | err = fib_table_lookup(tbl, &flp->u.ip4, (struct fib_result *) arg->result, arg->flags); |
99 | if (err > 0) | 99 | if (err > 0) |
100 | err = -EAGAIN; | 100 | err = -EAGAIN; |
101 | errout: | 101 | errout: |
@@ -106,14 +106,15 @@ errout: | |||
106 | static int fib4_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) | 106 | static int fib4_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) |
107 | { | 107 | { |
108 | struct fib4_rule *r = (struct fib4_rule *) rule; | 108 | struct fib4_rule *r = (struct fib4_rule *) rule; |
109 | __be32 daddr = fl->fl4_dst; | 109 | struct flowi4 *fl4 = &fl->u.ip4; |
110 | __be32 saddr = fl->fl4_src; | 110 | __be32 daddr = fl4->daddr; |
111 | __be32 saddr = fl4->saddr; | ||
111 | 112 | ||
112 | if (((saddr ^ r->src) & r->srcmask) || | 113 | if (((saddr ^ r->src) & r->srcmask) || |
113 | ((daddr ^ r->dst) & r->dstmask)) | 114 | ((daddr ^ r->dst) & r->dstmask)) |
114 | return 0; | 115 | return 0; |
115 | 116 | ||
116 | if (r->tos && (r->tos != fl->fl4_tos)) | 117 | if (r->tos && (r->tos != fl4->flowi4_tos)) |
117 | return 0; | 118 | return 0; |
118 | 119 | ||
119 | return 1; | 120 | return 1; |
@@ -165,7 +166,7 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb, | |||
165 | if (frh->dst_len) | 166 | if (frh->dst_len) |
166 | rule4->dst = nla_get_be32(tb[FRA_DST]); | 167 | rule4->dst = nla_get_be32(tb[FRA_DST]); |
167 | 168 | ||
168 | #ifdef CONFIG_NET_CLS_ROUTE | 169 | #ifdef CONFIG_IP_ROUTE_CLASSID |
169 | if (tb[FRA_FLOW]) | 170 | if (tb[FRA_FLOW]) |
170 | rule4->tclassid = nla_get_u32(tb[FRA_FLOW]); | 171 | rule4->tclassid = nla_get_u32(tb[FRA_FLOW]); |
171 | #endif | 172 | #endif |
@@ -195,7 +196,7 @@ static int fib4_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh, | |||
195 | if (frh->tos && (rule4->tos != frh->tos)) | 196 | if (frh->tos && (rule4->tos != frh->tos)) |
196 | return 0; | 197 | return 0; |
197 | 198 | ||
198 | #ifdef CONFIG_NET_CLS_ROUTE | 199 | #ifdef CONFIG_IP_ROUTE_CLASSID |
199 | if (tb[FRA_FLOW] && (rule4->tclassid != nla_get_u32(tb[FRA_FLOW]))) | 200 | if (tb[FRA_FLOW] && (rule4->tclassid != nla_get_u32(tb[FRA_FLOW]))) |
200 | return 0; | 201 | return 0; |
201 | #endif | 202 | #endif |
@@ -224,7 +225,7 @@ static int fib4_rule_fill(struct fib_rule *rule, struct sk_buff *skb, | |||
224 | if (rule4->src_len) | 225 | if (rule4->src_len) |
225 | NLA_PUT_BE32(skb, FRA_SRC, rule4->src); | 226 | NLA_PUT_BE32(skb, FRA_SRC, rule4->src); |
226 | 227 | ||
227 | #ifdef CONFIG_NET_CLS_ROUTE | 228 | #ifdef CONFIG_IP_ROUTE_CLASSID |
228 | if (rule4->tclassid) | 229 | if (rule4->tclassid) |
229 | NLA_PUT_U32(skb, FRA_FLOW, rule4->tclassid); | 230 | NLA_PUT_U32(skb, FRA_FLOW, rule4->tclassid); |
230 | #endif | 231 | #endif |