mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
net: split rt_genid for ipv4 and ipv6
Current net name space has only one genid for both IPv4 and IPv6, it has below drawbacks: - Add/delete an IPv4 address will invalidate all IPv6 routing table entries. - Insert/remove XFRM policy will also invalidate both IPv4/IPv6 routing table entries even when the policy is only applied for one address family. Thus, this patch attempt to split one genid for two to cater for IPv4 and IPv6 separately in a fine granularity. Signed-off-by: Fan Du <fan.du@windriver.com> Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ba361cb3d4
commit
ca4c3fc24e
8 changed files with 58 additions and 17 deletions
|
@ -283,7 +283,7 @@ static inline struct rt6_info *ip6_dst_alloc(struct net *net,
|
|||
|
||||
memset(dst + 1, 0, sizeof(*rt) - sizeof(*dst));
|
||||
rt6_init_peer(rt, table ? &table->tb6_peers : net->ipv6.peers);
|
||||
rt->rt6i_genid = rt_genid(net);
|
||||
rt->rt6i_genid = rt_genid_ipv6(net);
|
||||
INIT_LIST_HEAD(&rt->rt6i_siblings);
|
||||
}
|
||||
return rt;
|
||||
|
@ -1061,7 +1061,7 @@ static struct dst_entry *ip6_dst_check(struct dst_entry *dst, u32 cookie)
|
|||
* DST_OBSOLETE_FORCE_CHK which forces validation calls down
|
||||
* into this function always.
|
||||
*/
|
||||
if (rt->rt6i_genid != rt_genid(dev_net(rt->dst.dev)))
|
||||
if (rt->rt6i_genid != rt_genid_ipv6(dev_net(rt->dst.dev)))
|
||||
return NULL;
|
||||
|
||||
if (rt->rt6i_node && (rt->rt6i_node->fn_sernum == cookie))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue