On Thu, Mar 24, 2016 at 6:55 PM, Daniel Borkmann wrote: > On 03/24/2016 06:26 PM, Tom Herbert wrote: >> >> On Thu, Mar 24, 2016 at 10:01 AM, Eric Dumazet wrote: >>> >>> Really, when BPF can be the solution, we wont allow adding new stuff in >>> the kernel in the old way. >> >> I completely agree with this, but I wonder if we now need a repository >> of useful BPF modules. So in the case of implementing functionality >> like in SO_REUSEPORT_LISTEN_OFF that might just become a common BPF >> program we could direct people to use. > > Good point. There's tools/testing/selftests/net/ containing already > reuseport > BPF example, maybe it could be extended.
FWIW, I find: const struct bpf_insn prog[] = { /* BPF_MOV64_REG(BPF_REG_6, BPF_REG_1) */ { BPF_ALU64 | BPF_MOV | BPF_X, BPF_REG_6, BPF_REG_1, 0, 0 }, /* BPF_LD_ABS(BPF_W, 0) R0 = (uint32_t)skb[0] */ { BPF_LD | BPF_ABS | BPF_W, 0, 0, 0, 0 }, /* BPF_ALU64_IMM(BPF_MOD, BPF_REG_0, mod) */ { BPF_ALU64 | BPF_MOD | BPF_K, BPF_REG_0, 0, 0, mod }, /* BPF_EXIT_INSN() */ { BPF_JMP | BPF_EXIT, 0, 0, 0, 0 } }; (and all the way to make it run) something quite unintuitive from a web server developper perspective, simply to make SO_REUSEPORT work with forked TCP listeners (probably as it should out of the box)... Regards, Yann.