Daniel Borkmann
ced585c83b
act_bpf: allow non-default TC_ACT opcodes as BPF exec outcome
...
Revisiting commit d23b8ad8ab ("tc: add BPF based action") with regards
to eBPF support, I was thinking that it might be better to improve
return semantics from a BPF program invoked through BPF_PROG_RUN().
Currently, in case filter_res is 0, we overwrite the default action
opcode with TC_ACT_SHOT. A default action opcode configured through tc's
m_bpf can be: TC_ACT_RECLASSIFY, TC_ACT_PIPE, TC_ACT_SHOT, TC_ACT_UNSPEC,
TC_ACT_OK.
In cls_bpf, we have the possibility to overwrite the default class
associated with the classifier in case filter_res is _not_ 0xffffffff
(-1).
That allows us to fold multiple [e]BPF programs into a single one, where
they would otherwise need to be defined as a separate classifier with
its own classid, needlessly redoing parsing work, etc.
Similarly, we could do better in act_bpf: Since above TC_ACT* opcodes
are exported to UAPI anyway, we reuse them for return-code-to-tc-opcode
mapping, where we would allow above possibilities. Thus, like in cls_bpf,
a filter_res of 0xffffffff (-1) means that the configured _default_ action
is used. Any unkown return code from the BPF program would fail in
tcf_bpf() with TC_ACT_UNSPEC.
Should we one day want to make use of TC_ACT_STOLEN or TC_ACT_QUEUED,
which both have the same semantics, we have the option to either use
that as a default action (filter_res of 0xffffffff) or non-default BPF
return code.
All that will allow us to transparently use tcf_bpf() for both BPF
flavours.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Jiri Pirko <jiri@resnulli.us>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Acked-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-03-17 22:15:06 -04:00
..
act_api.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
act_bpf.c
act_bpf: allow non-default TC_ACT opcodes as BPF exec outcome
2015-03-17 22:15:06 -04:00
act_connmark.c
net: sched: Introduce connmark action
2015-01-19 16:02:06 -05:00
act_csum.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00
act_gact.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_ipt.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_mirred.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_nat.c
net_sched: act: move tcf_hashinfo_init() into tcf_register_action()
2014-02-12 19:23:32 -05:00
act_pedit.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_police.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_simple.c
sched: fix act file names in header comment
2014-11-06 15:04:41 -05:00
act_skbedit.c
net_sched: act: move tcf_hashinfo_init() into tcf_register_action()
2014-02-12 19:23:32 -05:00
act_vlan.c
sched: introduce vlan action
2014-11-21 14:20:18 -05:00
cls_api.c
cls_api.c: Fix dumping of non-existing actions' stats.
2015-02-04 20:26:12 -08:00
cls_basic.c
net: cls_basic: return from walking on match in basic_get
2015-01-26 16:08:55 -08:00
cls_bpf.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-01-27 16:59:56 -08:00
cls_cgroup.c
net: sched: cls: use nla_nest_cancel instead of nlmsg_trim
2014-12-09 21:49:58 -05:00
cls_flow.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00
cls_fw.c
net: sched: cls: use nla_nest_cancel instead of nlmsg_trim
2014-12-09 21:49:58 -05:00
cls_route.c
net: sched: cls: use nla_nest_cancel instead of nlmsg_trim
2014-12-09 21:49:58 -05:00
cls_rsvp.c
cls_rsvp.h
net: sched: cls: use nla_nest_cancel instead of nlmsg_trim
2014-12-09 21:49:58 -05:00
cls_rsvp6.c
cls_tcindex.c
net: sched: cls: use nla_nest_cancel instead of nlmsg_trim
2014-12-09 21:49:58 -05:00
cls_u32.c
net_sched: fix struct tc_u_hnode layout in u32
2015-03-09 23:44:31 -04:00
em_canid.c
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
em_cmp.c
em_ipset.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00
em_meta.c
net: rename vlan_tx_* helpers since "tx" is misleading there
2015-01-13 17:51:08 -05:00
em_nbyte.c
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
em_text.c
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
em_u32.c
ematch.c
ematch: Fix auto-loading of ematch modules.
2015-02-20 15:30:56 -05:00
Kconfig
Merge branch 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild
2015-02-19 10:36:45 -08:00
Makefile
net: sched: Introduce connmark action
2015-01-19 16:02:06 -05:00
sch_api.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00
sch_atm.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_blackhole.c
sch_cbq.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_choke.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_codel.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_drr.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_dsmark.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00
sch_fifo.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_fq.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-02-05 14:33:28 -08:00
sch_fq_codel.c
net: fix suspicious rcu_dereference_check in net/sched/sch_fq_codel.c
2014-12-09 21:49:09 -05:00
sch_generic.c
net_sched: restore qdisc quota fairness limits after bulk dequeue
2014-10-09 19:12:26 -04:00
sch_gred.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_hfsc.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_hhf.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_htb.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_ingress.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_mq.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_mqprio.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_multiq.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_netem.c
net: add rbnode to struct sk_buff
2014-11-03 16:13:03 -05:00
sch_pie.c
sch_pie: schedule the timer after all init succeed
2014-10-29 14:28:01 -04:00
sch_plug.c
sch_prio.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_qfq.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_red.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_sfb.c
net: sched: implement qstat helper routines
2014-09-30 01:02:26 -04:00
sch_sfq.c
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
sch_tbf.c
net: sched: avoid costly atomic operation in fq_dequeue()
2014-10-06 00:55:10 -04:00
sch_teql.c
net: sched: fix skb->protocol use in case of accelerated vlan path
2015-01-13 17:51:08 -05:00