diff options
Diffstat (limited to 'net/ipv4/fib_rules.c')
-rw-r--r-- | net/ipv4/fib_rules.c | 12 |
1 files changed, 1 insertions, 11 deletions
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 0852b9cd065a..de8d5dd7099b 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -44,10 +44,8 @@ struct fib4_rule | |||
44 | __be32 srcmask; | 44 | __be32 srcmask; |
45 | __be32 dst; | 45 | __be32 dst; |
46 | __be32 dstmask; | 46 | __be32 dstmask; |
47 | #ifdef CONFIG_IP_ROUTE_FWMARK | ||
48 | u32 fwmark; | 47 | u32 fwmark; |
49 | u32 fwmask; | 48 | u32 fwmask; |
50 | #endif | ||
51 | #ifdef CONFIG_NET_CLS_ROUTE | 49 | #ifdef CONFIG_NET_CLS_ROUTE |
52 | u32 tclassid; | 50 | u32 tclassid; |
53 | #endif | 51 | #endif |
@@ -160,10 +158,8 @@ static int fib4_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) | |||
160 | if (r->tos && (r->tos != fl->fl4_tos)) | 158 | if (r->tos && (r->tos != fl->fl4_tos)) |
161 | return 0; | 159 | return 0; |
162 | 160 | ||
163 | #ifdef CONFIG_IP_ROUTE_FWMARK | 161 | if ((r->fwmark ^ fl->mark) & r->fwmask) |
164 | if ((r->fwmark ^ fl->fl4_fwmark) & r->fwmask) | ||
165 | return 0; | 162 | return 0; |
166 | #endif | ||
167 | 163 | ||
168 | return 1; | 164 | return 1; |
169 | } | 165 | } |
@@ -220,7 +216,6 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb, | |||
220 | if (tb[FRA_DST]) | 216 | if (tb[FRA_DST]) |
221 | rule4->dst = nla_get_be32(tb[FRA_DST]); | 217 | rule4->dst = nla_get_be32(tb[FRA_DST]); |
222 | 218 | ||
223 | #ifdef CONFIG_IP_ROUTE_FWMARK | ||
224 | if (tb[FRA_FWMARK]) { | 219 | if (tb[FRA_FWMARK]) { |
225 | rule4->fwmark = nla_get_u32(tb[FRA_FWMARK]); | 220 | rule4->fwmark = nla_get_u32(tb[FRA_FWMARK]); |
226 | if (rule4->fwmark) | 221 | if (rule4->fwmark) |
@@ -232,7 +227,6 @@ static int fib4_rule_configure(struct fib_rule *rule, struct sk_buff *skb, | |||
232 | 227 | ||
233 | if (tb[FRA_FWMASK]) | 228 | if (tb[FRA_FWMASK]) |
234 | rule4->fwmask = nla_get_u32(tb[FRA_FWMASK]); | 229 | rule4->fwmask = nla_get_u32(tb[FRA_FWMASK]); |
235 | #endif | ||
236 | 230 | ||
237 | #ifdef CONFIG_NET_CLS_ROUTE | 231 | #ifdef CONFIG_NET_CLS_ROUTE |
238 | if (tb[FRA_FLOW]) | 232 | if (tb[FRA_FLOW]) |
@@ -264,13 +258,11 @@ static int fib4_rule_compare(struct fib_rule *rule, struct fib_rule_hdr *frh, | |||
264 | if (frh->tos && (rule4->tos != frh->tos)) | 258 | if (frh->tos && (rule4->tos != frh->tos)) |
265 | return 0; | 259 | return 0; |
266 | 260 | ||
267 | #ifdef CONFIG_IP_ROUTE_FWMARK | ||
268 | if (tb[FRA_FWMARK] && (rule4->fwmark != nla_get_u32(tb[FRA_FWMARK]))) | 261 | if (tb[FRA_FWMARK] && (rule4->fwmark != nla_get_u32(tb[FRA_FWMARK]))) |
269 | return 0; | 262 | return 0; |
270 | 263 | ||
271 | if (tb[FRA_FWMASK] && (rule4->fwmask != nla_get_u32(tb[FRA_FWMASK]))) | 264 | if (tb[FRA_FWMASK] && (rule4->fwmask != nla_get_u32(tb[FRA_FWMASK]))) |
272 | return 0; | 265 | return 0; |
273 | #endif | ||
274 | 266 | ||
275 | #ifdef CONFIG_NET_CLS_ROUTE | 267 | #ifdef CONFIG_NET_CLS_ROUTE |
276 | if (tb[FRA_FLOW] && (rule4->tclassid != nla_get_u32(tb[FRA_FLOW]))) | 268 | if (tb[FRA_FLOW] && (rule4->tclassid != nla_get_u32(tb[FRA_FLOW]))) |
@@ -296,13 +288,11 @@ static int fib4_rule_fill(struct fib_rule *rule, struct sk_buff *skb, | |||
296 | frh->src_len = rule4->src_len; | 288 | frh->src_len = rule4->src_len; |
297 | frh->tos = rule4->tos; | 289 | frh->tos = rule4->tos; |
298 | 290 | ||
299 | #ifdef CONFIG_IP_ROUTE_FWMARK | ||
300 | if (rule4->fwmark) | 291 | if (rule4->fwmark) |
301 | NLA_PUT_U32(skb, FRA_FWMARK, rule4->fwmark); | 292 | NLA_PUT_U32(skb, FRA_FWMARK, rule4->fwmark); |
302 | 293 | ||
303 | if (rule4->fwmask || rule4->fwmark) | 294 | if (rule4->fwmask || rule4->fwmark) |
304 | NLA_PUT_U32(skb, FRA_FWMASK, rule4->fwmask); | 295 | NLA_PUT_U32(skb, FRA_FWMASK, rule4->fwmask); |
305 | #endif | ||
306 | 296 | ||
307 | if (rule4->dst_len) | 297 | if (rule4->dst_len) |
308 | NLA_PUT_BE32(skb, FRA_DST, rule4->dst); | 298 | NLA_PUT_BE32(skb, FRA_DST, rule4->dst); |