diff options
author | Daniel Borkmann <daniel@iogearbox.net> | 2015-09-30 01:41:51 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-10-03 05:02:41 -0700 |
commit | c46646d0484f5d08e2bede9b45034ba5b8b489cc (patch) | |
tree | b15b5132baba1198decf5966819dea7cdb7d2cfc /kernel/bpf | |
parent | a91263d520246b63c63e75ddfb072ee6a853fe15 (diff) | |
download | linux-c46646d0484f5d08e2bede9b45034ba5b8b489cc.tar.gz linux-c46646d0484f5d08e2bede9b45034ba5b8b489cc.tar.bz2 linux-c46646d0484f5d08e2bede9b45034ba5b8b489cc.zip |
sched, bpf: add helper for retrieving routing realms
Using routing realms as part of the classifier is quite useful, it
can be viewed as a tag for one or multiple routing entries (think of
an analogy to net_cls cgroup for processes), set by user space routing
daemons or via iproute2 as an indicator for traffic classifiers and
later on processed in the eBPF program.
Unlike actions, the classifier can inspect device flags and enable
netif_keep_dst() if necessary. tc actions don't have that possibility,
but in case people know what they are doing, it can be used from there
as well (e.g. via devs that must keep dsts by design anyway).
If a realm is set, the handler returns the non-zero realm. User space
can set the full 32bit realm for the dst.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel/bpf')
-rw-r--r-- | kernel/bpf/syscall.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 2190ab14b763..5f35f420c12f 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -402,6 +402,8 @@ static void fixup_bpf_calls(struct bpf_prog *prog) */ BUG_ON(!prog->aux->ops->get_func_proto); + if (insn->imm == BPF_FUNC_get_route_realm) + prog->dst_needed = 1; if (insn->imm == BPF_FUNC_tail_call) { /* mark bpf_tail_call as different opcode * to avoid conditional branch in |