• Daniel Borkmann's avatar
    act_bpf: allow non-default TC_ACT opcodes as BPF exec outcome · ced585c8
    Daniel Borkmann authored
    Revisiting commit d23b8ad8 ("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: default avatarDaniel 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: default avatarJiri Pirko <jiri@resnulli.us>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ced585c8
act_bpf.c 5.21 KB