• Daniel Borkmann's avatar
    bpf: support for access to tunnel options · 14ca0751
    Daniel Borkmann authored
    After eBPF being able to programmatically access/manage tunnel key meta
    data via commit d3aa45ce ("bpf: add helpers to access tunnel metadata")
    and more recently also for IPv6 through c6c33454 ("bpf: support ipv6
    for bpf_skb_{set,get}_tunnel_key"), this work adds two complementary
    helpers to generically access their auxiliary tunnel options.
    
    Geneve and vxlan support this facility. For geneve, TLVs can be pushed,
    and for the vxlan case its GBP extension. I.e. setting tunnel key for geneve
    case only makes sense, if we can also read/write TLVs into it. In the GBP
    case, it provides the flexibility to easily map the group policy ID in
    combination with other helpers or maps.
    
    I chose to model this as two separate helpers, bpf_skb_{set,get}_tunnel_opt(),
    for a couple of reasons. bpf_skb_{set,get}_tunnel_key() is already rather
    complex by itself, and there may be cases for tunnel key backends where
    tunnel options are not always needed. If we would have integrated this
    into bpf_skb_{set,get}_tunnel_key() nevertheless, we are very limited with
    remaining helper arguments, so keeping compatibility on structs in case of
    passing in a flat buffer gets more cumbersome. Separating both also allows
    for more flexibility and future extensibility, f.e. options could be fed
    directly from a map, etc.
    
    Moreover, change geneve's xmit path to test only for info->options_len
    instead of TUNNEL_GENEVE_OPT flag. This makes it more consistent with vxlan's
    xmit path and allows for avoiding to specify a protocol flag in the API on
    xmit, so it can be protocol agnostic. Having info->options_len is enough
    information that is needed. Tested with vxlan and geneve.
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    14ca0751
Name
Last commit
Last update
Documentation Loading commit data...
arch Loading commit data...
block Loading commit data...
certs Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
firmware Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
samples Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
tools Loading commit data...
usr Loading commit data...
virt Loading commit data...
.get_maintainer.ignore Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...
REPORTING-BUGS Loading commit data...