diff options
Diffstat (limited to 'net/core/fib_rules.c')
| -rw-r--r-- | net/core/fib_rules.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 5040a61bf28a..2e654138433c 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
| @@ -33,6 +33,9 @@ int fib_default_rule_add(struct fib_rules_ops *ops, | |||
| 33 | r->flags = flags; | 33 | r->flags = flags; |
| 34 | r->fr_net = hold_net(ops->fro_net); | 34 | r->fr_net = hold_net(ops->fro_net); |
| 35 | 35 | ||
| 36 | r->suppress_prefixlen = -1; | ||
| 37 | r->suppress_ifgroup = -1; | ||
| 38 | |||
| 36 | /* The lock is not required here, the list in unreacheable | 39 | /* The lock is not required here, the list in unreacheable |
| 37 | * at the moment this function is called */ | 40 | * at the moment this function is called */ |
| 38 | list_add_tail(&r->list, &ops->rules_list); | 41 | list_add_tail(&r->list, &ops->rules_list); |
| @@ -340,11 +343,15 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh) | |||
| 340 | rule->action = frh->action; | 343 | rule->action = frh->action; |
| 341 | rule->flags = frh->flags; | 344 | rule->flags = frh->flags; |
| 342 | rule->table = frh_get_table(frh, tb); | 345 | rule->table = frh_get_table(frh, tb); |
| 343 | if (tb[FRA_TABLE_PREFIXLEN_MIN]) | 346 | if (tb[FRA_SUPPRESS_PREFIXLEN]) |
| 344 | rule->table_prefixlen_min = nla_get_u8(tb[FRA_TABLE_PREFIXLEN_MIN]); | 347 | rule->suppress_prefixlen = nla_get_u32(tb[FRA_SUPPRESS_PREFIXLEN]); |
| 348 | else | ||
| 349 | rule->suppress_prefixlen = -1; | ||
| 345 | 350 | ||
| 346 | if (tb[FRA_SUPPRESS_IFGROUP]) | 351 | if (tb[FRA_SUPPRESS_IFGROUP]) |
| 347 | rule->suppress_ifgroup = nla_get_u32(tb[FRA_SUPPRESS_IFGROUP]); | 352 | rule->suppress_ifgroup = nla_get_u32(tb[FRA_SUPPRESS_IFGROUP]); |
| 353 | else | ||
| 354 | rule->suppress_ifgroup = -1; | ||
| 348 | 355 | ||
| 349 | if (!tb[FRA_PRIORITY] && ops->default_pref) | 356 | if (!tb[FRA_PRIORITY] && ops->default_pref) |
| 350 | rule->pref = ops->default_pref(ops); | 357 | rule->pref = ops->default_pref(ops); |
| @@ -531,7 +538,7 @@ static inline size_t fib_rule_nlmsg_size(struct fib_rules_ops *ops, | |||
| 531 | + nla_total_size(IFNAMSIZ) /* FRA_OIFNAME */ | 538 | + nla_total_size(IFNAMSIZ) /* FRA_OIFNAME */ |
| 532 | + nla_total_size(4) /* FRA_PRIORITY */ | 539 | + nla_total_size(4) /* FRA_PRIORITY */ |
| 533 | + nla_total_size(4) /* FRA_TABLE */ | 540 | + nla_total_size(4) /* FRA_TABLE */ |
| 534 | + nla_total_size(1) /* FRA_TABLE_PREFIXLEN_MIN */ | 541 | + nla_total_size(4) /* FRA_SUPPRESS_PREFIXLEN */ |
| 535 | + nla_total_size(4) /* FRA_SUPPRESS_IFGROUP */ | 542 | + nla_total_size(4) /* FRA_SUPPRESS_IFGROUP */ |
| 536 | + nla_total_size(4) /* FRA_FWMARK */ | 543 | + nla_total_size(4) /* FRA_FWMARK */ |
| 537 | + nla_total_size(4); /* FRA_FWMASK */ | 544 | + nla_total_size(4); /* FRA_FWMASK */ |
| @@ -558,7 +565,7 @@ static int fib_nl_fill_rule(struct sk_buff *skb, struct fib_rule *rule, | |||
| 558 | frh->table = rule->table; | 565 | frh->table = rule->table; |
| 559 | if (nla_put_u32(skb, FRA_TABLE, rule->table)) | 566 | if (nla_put_u32(skb, FRA_TABLE, rule->table)) |
| 560 | goto nla_put_failure; | 567 | goto nla_put_failure; |
| 561 | if (nla_put_u8(skb, FRA_TABLE_PREFIXLEN_MIN, rule->table_prefixlen_min)) | 568 | if (nla_put_u32(skb, FRA_SUPPRESS_PREFIXLEN, rule->suppress_prefixlen)) |
| 562 | goto nla_put_failure; | 569 | goto nla_put_failure; |
| 563 | frh->res1 = 0; | 570 | frh->res1 = 0; |
| 564 | frh->res2 = 0; | 571 | frh->res2 = 0; |
