]> git.baikalelectronics.ru Git - kernel.git/commit
bpf: add helpers to access tunnel metadata
authorAlexei Starovoitov <ast@plumgrid.com>
Thu, 30 Jul 2015 22:36:57 +0000 (15:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 31 Jul 2015 22:20:22 +0000 (15:20 -0700)
commit1d4f135e28933f9e1b76cf9b9681259eaf7c2e90
tree3fe9040afbee66c0943a9c6375874a1ab4243f1b
parent1b266e200e31afe8536ee93d8fdf154a3ab45b2c
bpf: add helpers to access tunnel metadata

Introduce helpers to let eBPF programs attached to TC manipulate tunnel metadata:
bpf_skb_[gs]et_tunnel_key(skb, key, size, flags)
skb: pointer to skb
key: pointer to 'struct bpf_tunnel_key'
size: size of 'struct bpf_tunnel_key'
flags: room for future extensions

First eBPF program that uses these helpers will allocate per_cpu
metadata_dst structures that will be used on TX.
On RX metadata_dst is allocated by tunnel driver.

Typical usage for TX:
struct bpf_tunnel_key tkey;
... populate tkey ...
bpf_skb_set_tunnel_key(skb, &tkey, sizeof(tkey), 0);
bpf_clone_redirect(skb, vxlan_dev_ifindex, 0);

RX:
struct bpf_tunnel_key tkey = {};
bpf_skb_get_tunnel_key(skb, &tkey, sizeof(tkey), 0);
... lookup or redirect based on tkey ...

'struct bpf_tunnel_key' will be extended in the future by adding
elements to the end and the 'size' argument will indicate which fields
are populated, thereby keeping backwards compatibility.
The 'flags' argument may be used as well when the 'size' is not enough or
to indicate completely different layout of bpf_tunnel_key.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Acked-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dst_metadata.h
include/uapi/linux/bpf.h
net/core/dst.c
net/core/filter.c