公网和vrf下存在相同的四元组的tcp,收到报文如何找到对应的tcp?
sk->sk_bound_dev_if能确认隶属于某个VRF域,但公网下sk->sk_bound_dev_if是0
__inet_lookup_established通过四元组找到hash冲突链,再进行遍历match
#define INET_MATCH(__sk, __net, __cookie, __saddr, __daddr, __ports, __dif) \
(((__sk)->sk_portpair == (__ports)) && \
((__sk)->sk_addrpair == (__cookie)) && \
(!(__sk)->sk_bound_dev_if || \ 如果公网tcp在链表前面,那么vrf内收到的报文会优先匹配公网tcp
((__sk)->sk_bound_dev_if == (__dif))) && \
net_eq(sock_net(__sk), (__net)))
请问,有什么办法能解决这个问题?