diff options
author | Thomas Graf <tgraf@suug.ch> | 2015-07-21 10:44:01 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-07-21 19:39:06 +0200 |
commit | e7030878fc8448492b6e5cecd574043f63271298 (patch) | |
tree | 93a7e8a5ab3b5a0633c71d2684186114ab40b7e2 /include/net | |
parent | route: Per route IP tunnel metadata via lightweight tunnel (diff) | |
download | linux-e7030878fc8448492b6e5cecd574043f63271298.tar.xz linux-e7030878fc8448492b6e5cecd574043f63271298.zip |
fib: Add fib rule match on tunnel id
This add the ability to select a routing table based on the tunnel
id which allows to maintain separate routing tables for each virtual
tunnel network.
ip rule add from all tunnel-id 100 lookup 100
ip rule add from all tunnel-id 200 lookup 200
A new static key controls the collection of metadata at tunnel level
upon demand.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/fib_rules.h | 1 | ||||
-rw-r--r-- | include/net/ip_tunnels.h | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h index 903a55efbffe..4e8f804f4589 100644 --- a/include/net/fib_rules.h +++ b/include/net/fib_rules.h @@ -19,6 +19,7 @@ struct fib_rule { u8 action; /* 3 bytes hole, try to use */ u32 target; + __be64 tun_id; struct fib_rule __rcu *ctarget; struct net *fr_net; diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index 0b7e18cfa0b4..0a5a7763eec2 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h @@ -303,6 +303,17 @@ static inline struct ip_tunnel_info *lwt_tun_info(struct lwtunnel_state *lwtstat return (struct ip_tunnel_info *)lwtstate->data; } +extern struct static_key ip_tunnel_metadata_cnt; + +/* Returns > 0 if metadata should be collected */ +static inline int ip_tunnel_collect_metadata(void) +{ + return static_key_false(&ip_tunnel_metadata_cnt); +} + +void ip_tunnel_need_metadata(void); +void ip_tunnel_unneed_metadata(void); + #endif /* CONFIG_INET */ #endif /* __NET_IP_TUNNELS_H */ |