[NET]: Introduce RTA_TABLE/FRA_TABLE attributes
Introduce RTA_TABLE route attribute and FRA_TABLE routing rule attribute to hold 32 bit routing table IDs. Usespace compatibility is provided by continuing to accept and send the rtm_table field, but because of its limited size it can only carry the low 8 bits of the table ID. This implies that if larger IDs are used, _all_ userspace programs using them need to use RTA_TABLE. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
2dfe55b47e
commit
9e762a4a89
@@ -1859,7 +1859,8 @@ int inet6_rtm_delroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
|
||||
|
||||
if (inet6_rtm_to_rtmsg(r, arg, &rtmsg))
|
||||
return -EINVAL;
|
||||
return ip6_route_del(&rtmsg, nlh, arg, &NETLINK_CB(skb), r->rtm_table);
|
||||
return ip6_route_del(&rtmsg, nlh, arg, &NETLINK_CB(skb),
|
||||
rtm_get_table(arg, r->rtm_table));
|
||||
}
|
||||
|
||||
int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
|
||||
@@ -1869,7 +1870,8 @@ int inet6_rtm_newroute(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
|
||||
|
||||
if (inet6_rtm_to_rtmsg(r, arg, &rtmsg))
|
||||
return -EINVAL;
|
||||
return ip6_route_add(&rtmsg, nlh, arg, &NETLINK_CB(skb), r->rtm_table);
|
||||
return ip6_route_add(&rtmsg, nlh, arg, &NETLINK_CB(skb),
|
||||
rtm_get_table(arg, r->rtm_table));
|
||||
}
|
||||
|
||||
struct rt6_rtnl_dump_arg
|
||||
@@ -1887,6 +1889,7 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
|
||||
struct nlmsghdr *nlh;
|
||||
unsigned char *b = skb->tail;
|
||||
struct rta_cacheinfo ci;
|
||||
u32 table;
|
||||
|
||||
if (prefix) { /* user wants prefix routes only */
|
||||
if (!(rt->rt6i_flags & RTF_PREFIX_RT)) {
|
||||
@@ -1902,9 +1905,11 @@ static int rt6_fill_node(struct sk_buff *skb, struct rt6_info *rt,
|
||||
rtm->rtm_src_len = rt->rt6i_src.plen;
|
||||
rtm->rtm_tos = 0;
|
||||
if (rt->rt6i_table)
|
||||
rtm->rtm_table = rt->rt6i_table->tb6_id;
|
||||
table = rt->rt6i_table->tb6_id;
|
||||
else
|
||||
rtm->rtm_table = RT6_TABLE_UNSPEC;
|
||||
table = RT6_TABLE_UNSPEC;
|
||||
rtm->rtm_table = table;
|
||||
RTA_PUT_U32(skb, RTA_TABLE, table);
|
||||
if (rt->rt6i_flags&RTF_REJECT)
|
||||
rtm->rtm_type = RTN_UNREACHABLE;
|
||||
else if (rt->rt6i_dev && (rt->rt6i_dev->flags&IFF_LOOPBACK))
|
||||
|
Reference in New Issue
Block a user