diff options
author | David Ahern <dsa@cumulusnetworks.com> | 2015-08-13 20:59:05 (GMT) |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-08-14 05:43:21 (GMT) |
commit | 30bbaa19500559d7625c65632195413f639b3b97 (patch) | |
tree | f5514050b984975047c683c6a3972c09ff251b97 /include | |
parent | 15be405eb2ea943ac5fa2aab7d0ba282e9ef1301 (diff) | |
download | linux-30bbaa19500559d7625c65632195413f639b3b97.tar.xz |
net: Fix up inet_addr_type checks
Currently inet_addr_type and inet_dev_addr_type expect local addresses
to be in the local table. With the VRF device local routes for devices
associated with a VRF will be in the table associated with the VRF.
Provide an alternate inet_addr lookup to use a specific table rather
than defaulting to the local table.
inet_addr_type_dev_table keeps the same semantics as inet_addr_type but
if the passed in device is enslaved to a VRF then the table for that VRF
is used for the lookup.
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/route.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/net/route.h b/include/net/route.h index 6ba681f..6dda2c1 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -192,6 +192,9 @@ unsigned int inet_addr_type(struct net *net, __be32 addr); unsigned int inet_addr_type_table(struct net *net, __be32 addr, int tb_id); unsigned int inet_dev_addr_type(struct net *net, const struct net_device *dev, __be32 addr); +unsigned int inet_addr_type_dev_table(struct net *net, + const struct net_device *dev, + __be32 addr); void ip_rt_multicast_event(struct in_device *); int ip_rt_ioctl(struct net *, unsigned int cmd, void __user *arg); void ip_rt_get_source(u8 *src, struct sk_buff *skb, struct rtable *rt); |