Re: MSS clamping with XDP/eBPF
Valentín Gutierrez <[email protected]> Tue, 7 Nov 2023 12:02:28 +0100
| Newsgroups | org.kernel.vger.xdp-newbies |
|---|---|
| Message-ID | <CALQkE9YthMqAL_M11d3+aOmcEw-dEe40h--aiCACu_nU8zWGDQ@mail.gmail.com> |
Answering my own question, parse_tcp_ts()[0] can be easily adapted to find any TCP option and return a pointer to its position so it can be updated using bpf_skb_store_bytes(). Cheers, Valentín Gutiérrez [0] https://github.com/xdp-project/bpf-examples/blob/63cd4007b16b49b44241f17a38f26aea926f8afc/pping/pping_kern.c#L424 On Mon, Nov 6, 2023 at 10:57 AM Valentín Gutierrez <[email protected]> wrote: > > Hi, > > I'm trying to perform some basic TCP MSS clamping with eBPF and it's > being harder than expected: > > * Parsing TCP options can be challenging for the eBPF verifier as it's > been shown in [1] by Christian Deacon. > * bpf_store_hdr_opt() introduced in [2] doesn't seem to be useful here > cause it refuses to overwrite an existing TCP option and MSS is > already set when BPF_SOCK_OPS_WRITE_HDR_OPT_CB is triggered. > * bpf_setsockopt() isn't able to set TCP_MAXSEG per [3]. > > Am I missing something? > > Thanks, > Valentin Gutierrez > > [1] https://github.com/gamemann/XDP-TCP-Header-Options/ > [2] https://lore.kernel.org/bpf/[email protected]/T/ > [3] https://github.com/torvalds/linux/blob/d2f51b3516dade79269ff45eae2a7668ae711b25/net/core/filter.c#L5151