Hello, On Wed, 14 Dec 2016, YueHaibing wrote:
> On 2016/11/26 4:40, Julian Anastasov wrote: > > > > So, the idea is to move TCP and other similar > > users to the new dst_confirm_sk() method. If other > > dst_confirm() users are left, they should be checked > > if dsts with rt_gateway = 0 can be wrongly used. > > Sorry for so late. In fact, I'm late too because I almost finished my changes, the only remaining part is the cxgb files... > Based on your ideas, I make a patch and test it for a while. The problem is that it is valid only for TCP. Also, this flag should be reset sometimes, eg. when sk dst changes... > It works for me. > > @@ -847,7 +847,7 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr > *msg, size_t len) > return err; > > do_confirm: > - dst_confirm(&rt->dst); > + dst_confirm_sk(sk); MSG_CONFIRM from sendmsg needs special treatment. The problem is that UDP sending does not lock the socket, so I also added a skb flag to handle this situation in ip*_append_data. We do not want threaded application firing at different destinations to confirm the wrong neighbour. MSG_PROBE is another issue, the XFRM dst chaining, etc... I hope, I'll be ready this weekend with few patches that change all dst_confirm users... There I'll explain everything in detail. Regards -- Julian Anastasov <j...@ssi.bg>