fib_rules: add route suppression based on ifgroup
This change adds the ability to suppress a routing decision based upon the interface group the selected interface belongs to. This allows it to exclude specific devices from a routing decision. Signed-off-by: Stefan Tomanek <stefan.tomanek@wertarbyte.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
d1c53c8e87
commit
6ef94cfafb
@@ -103,16 +103,27 @@ errout:
|
||||
|
||||
static bool fib4_rule_suppress(struct fib_rule *rule, struct fib_lookup_arg *arg)
|
||||
{
|
||||
struct fib_result *result = (struct fib_result *) arg->result;
|
||||
struct net_device *dev = result->fi->fib_dev;
|
||||
|
||||
/* do not accept result if the route does
|
||||
* not meet the required prefix length
|
||||
*/
|
||||
struct fib_result *result = (struct fib_result *) arg->result;
|
||||
if (result->prefixlen < rule->table_prefixlen_min) {
|
||||
if (!(arg->flags & FIB_LOOKUP_NOREF))
|
||||
fib_info_put(result->fi);
|
||||
return true;
|
||||
}
|
||||
if (result->prefixlen < rule->table_prefixlen_min)
|
||||
goto suppress_route;
|
||||
|
||||
/* do not accept result if the route uses a device
|
||||
* belonging to a forbidden interface group
|
||||
*/
|
||||
if (rule->suppress_ifgroup != -1 && dev && dev->group == rule->suppress_ifgroup)
|
||||
goto suppress_route;
|
||||
|
||||
return false;
|
||||
|
||||
suppress_route:
|
||||
if (!(arg->flags & FIB_LOOKUP_NOREF))
|
||||
fib_info_put(result->fi);
|
||||
return true;
|
||||
}
|
||||
|
||||
static int fib4_rule_match(struct fib_rule *rule, struct flowi *fl, int flags)
|
||||
|
Reference in New Issue
Block a user