Skip to content

Commit

Permalink
net: Add FIB table id to rtable
Browse files Browse the repository at this point in the history
Add the FIB table id to rtable to make the information available for
IPv4 as it is for IPv6.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David Ahern authored and David S. Miller committed Sep 15, 2015
1 parent d08c4f3 commit b7503e0
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/net/vrf.c
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ static void vrf_rtable_destroy(struct net_vrf *vrf)

static struct rtable *vrf_rtable_create(struct net_device *dev)
{
struct net_vrf *vrf = netdev_priv(dev);
struct rtable *rth;

rth = dst_alloc(&vrf_dst_ops, dev, 2,
Expand All @@ -335,6 +336,7 @@ static struct rtable *vrf_rtable_create(struct net_device *dev)
rth->rt_pmtu = 0;
rth->rt_gateway = 0;
rth->rt_uses_gateway = 0;
rth->rt_table_id = vrf->tb_id;
INIT_LIST_HEAD(&rth->rt_uncached);
rth->rt_uncached_list = NULL;
}
Expand Down
2 changes: 2 additions & 0 deletions include/net/route.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ struct rtable {
/* Miscellaneous cached information */
u32 rt_pmtu;

u32 rt_table_id;

struct list_head rt_uncached;
struct uncached_list *rt_uncached_list;
};
Expand Down
8 changes: 8 additions & 0 deletions net/ipv4/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -1457,6 +1457,7 @@ static struct rtable *rt_dst_alloc(struct net_device *dev,
rt->rt_pmtu = 0;
rt->rt_gateway = 0;
rt->rt_uses_gateway = 0;
rt->rt_table_id = 0;
INIT_LIST_HEAD(&rt->rt_uncached);

rt->dst.output = ip_output;
Expand Down Expand Up @@ -1629,6 +1630,8 @@ static int __mkroute_input(struct sk_buff *skb,
}

rth->rt_is_input = 1;
if (res->table)
rth->rt_table_id = res->table->tb_id;
RT_CACHE_STAT_INC(in_slow_tot);

rth->dst.input = ip_forward;
Expand Down Expand Up @@ -1808,6 +1811,8 @@ out: return err;
rth->dst.tclassid = itag;
#endif
rth->rt_is_input = 1;
if (res.table)
rth->rt_table_id = res.table->tb_id;

RT_CACHE_STAT_INC(in_slow_tot);
if (res.type == RTN_UNREACHABLE) {
Expand Down Expand Up @@ -1988,6 +1993,9 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
return ERR_PTR(-ENOBUFS);

rth->rt_iif = orig_oif ? : 0;
if (res->table)
rth->rt_table_id = res->table->tb_id;

RT_CACHE_STAT_INC(out_slow_tot);

if (flags & (RTCF_BROADCAST | RTCF_MULTICAST)) {
Expand Down
1 change: 1 addition & 0 deletions net/ipv4/xfrm4_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev,
xdst->u.rt.rt_gateway = rt->rt_gateway;
xdst->u.rt.rt_uses_gateway = rt->rt_uses_gateway;
xdst->u.rt.rt_pmtu = rt->rt_pmtu;
xdst->u.rt.rt_table_id = rt->rt_table_id;
INIT_LIST_HEAD(&xdst->u.rt.rt_uncached);

return 0;
Expand Down

0 comments on commit b7503e0

Please sign in to comment.