mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
ipv4: support for fib route lwtunnel encap attributes
This patch adds support in ipv4 fib functions to parse user provided encap attributes and attach encap state data to fib_nh and rtable. Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
499a242568
commit
571e722676
5 changed files with 122 additions and 4 deletions
|
@ -102,6 +102,7 @@
|
|||
#include <net/tcp.h>
|
||||
#include <net/icmp.h>
|
||||
#include <net/xfrm.h>
|
||||
#include <net/lwtunnel.h>
|
||||
#include <net/netevent.h>
|
||||
#include <net/rtnetlink.h>
|
||||
#ifdef CONFIG_SYSCTL
|
||||
|
@ -1355,6 +1356,7 @@ static void ipv4_dst_destroy(struct dst_entry *dst)
|
|||
list_del(&rt->rt_uncached);
|
||||
spin_unlock_bh(&ul->lock);
|
||||
}
|
||||
lwtunnel_state_put(rt->rt_lwtstate);
|
||||
}
|
||||
|
||||
void rt_flush_dev(struct net_device *dev)
|
||||
|
@ -1403,6 +1405,12 @@ static void rt_set_nexthop(struct rtable *rt, __be32 daddr,
|
|||
#ifdef CONFIG_IP_ROUTE_CLASSID
|
||||
rt->dst.tclassid = nh->nh_tclassid;
|
||||
#endif
|
||||
if (nh->nh_lwtstate) {
|
||||
lwtunnel_state_get(nh->nh_lwtstate);
|
||||
rt->rt_lwtstate = nh->nh_lwtstate;
|
||||
} else {
|
||||
rt->rt_lwtstate = NULL;
|
||||
}
|
||||
if (unlikely(fnhe))
|
||||
cached = rt_bind_exception(rt, fnhe, daddr);
|
||||
else if (!(rt->dst.flags & DST_NOCACHE))
|
||||
|
@ -1488,6 +1496,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
|
|||
rth->rt_gateway = 0;
|
||||
rth->rt_uses_gateway = 0;
|
||||
INIT_LIST_HEAD(&rth->rt_uncached);
|
||||
rth->rt_lwtstate = NULL;
|
||||
if (our) {
|
||||
rth->dst.input= ip_local_deliver;
|
||||
rth->rt_flags |= RTCF_LOCAL;
|
||||
|
@ -1617,6 +1626,7 @@ static int __mkroute_input(struct sk_buff *skb,
|
|||
rth->rt_gateway = 0;
|
||||
rth->rt_uses_gateway = 0;
|
||||
INIT_LIST_HEAD(&rth->rt_uncached);
|
||||
rth->rt_lwtstate = NULL;
|
||||
RT_CACHE_STAT_INC(in_slow_tot);
|
||||
|
||||
rth->dst.input = ip_forward;
|
||||
|
@ -1791,6 +1801,8 @@ local_input:
|
|||
rth->rt_gateway = 0;
|
||||
rth->rt_uses_gateway = 0;
|
||||
INIT_LIST_HEAD(&rth->rt_uncached);
|
||||
rth->rt_lwtstate = NULL;
|
||||
|
||||
RT_CACHE_STAT_INC(in_slow_tot);
|
||||
if (res.type == RTN_UNREACHABLE) {
|
||||
rth->dst.input= ip_error;
|
||||
|
@ -1980,7 +1992,7 @@ add:
|
|||
rth->rt_gateway = 0;
|
||||
rth->rt_uses_gateway = 0;
|
||||
INIT_LIST_HEAD(&rth->rt_uncached);
|
||||
|
||||
rth->rt_lwtstate = NULL;
|
||||
RT_CACHE_STAT_INC(out_slow_tot);
|
||||
|
||||
if (flags & RTCF_LOCAL)
|
||||
|
@ -2260,7 +2272,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or
|
|||
rt->rt_uses_gateway = ort->rt_uses_gateway;
|
||||
|
||||
INIT_LIST_HEAD(&rt->rt_uncached);
|
||||
|
||||
rt->rt_lwtstate = NULL;
|
||||
dst_free(new);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue