Hi David, Thanks for the quick response. I appreciate it. A couple of quick follow up questions: 1. Do you have any performance data that would indicate how much of a performance drop adding an extra 4 or 8 bytes to the structure would cause? 2. If I patch locally the structure in libc and the kernel by adding an extra _u32 mark member is there anything that such a modification would break? Regards, Rumen Telbizov On Tue, Jun 8, 2021 at 6:21 PM David Ahern <dsahern@xxxxxxxxx> wrote: > > On 6/8/21 4:59 PM, Rumen Telbizov wrote: > > Dear BPF list, > > > > I am new to eBPF so go easy on me. > > It seems to me that currently eBPF has no support for route table > > lookups including firewall marks. The bpf_fib_lookup structure itself > > has no mark field as per > > https://elixir.bootlin.com/linux/v5.10.28/source/include/uapi/linux/bpf.h#L4864 > > > > Additionally bpf_fib_lookup() function does not incorporate the > > firewall mark in its route lookup. It explicitly sets it to 0 as per > > https://elixir.bootlin.com/linux/v5.10.28/source/net/core/filter.c#L5329 > > along with other fields which are used during the regular routing > > policy database lookup. > > > > Thus lookups from within eBPF and outside of it result in different > > outcomes if there are rules directing traffic based on fwmark. > > Can you please advise what the rationale for this is or if there > > anything that I might be missing. > > > > Let me know if I can provide any further information. > > > > The API (struct bpf_fib_lookup) is constrained to 64B for performance. > It is not possible to support all of the policy routing options that > Linux has in 64B. Choices had to be made.