Re: Is bug 200755 in anyone's queue??
From: Eric Dumazet <hidden>
Date: 2019-08-30 08:54:44
Possibly related (same subject, not in this thread)
- 2019-08-23 · RE: Is bug 200755 in anyone's queue?? · Steve Zabele <hidden>
From: Eric Dumazet <hidden>
Date: 2019-08-30 08:54:44
On 8/29/19 9:26 PM, Willem de Bruijn wrote:
SO_REUSEPORT was not intended to be used in this way. Opening
multiple connected sockets with the same local port.
But since the interface allowed connect after joining a group, and
that is being used, I guess that point is moot. Still, I'm a bit
surprised that it ever worked as described.
Also note that the default distribution algorithm is not round robin
assignment, but hash based. So multiple consecutive datagrams arriving
at the same socket is not unexpected.
I suspect that this quick hack might "work". It seemed to on the
supplied .c file:
score = compute_score(sk, net, saddr, sport,
daddr, hnum, dif, sdif);
if (score > badness) {
- if (sk->sk_reuseport) {
+ if (sk->sk_reuseport && !sk->sk_state !=
TCP_ESTABLISHED) {
But a more robust approach, that also works on existing kernels, is to
swap the default distribution algorithm with a custom BPF based one (
SO_ATTACH_REUSEPORT_EBPF).Yes, I suspect that reuseport could still be used by to load-balance incoming packets targetting the same 4-tuple. So all sockets would have the same score, and we would select the first socket in the list (if not applying reuseport hashing)