Hi! This series allows us to pass ifindex automatically when we set up TC cls_bpf or XDP offload. There is a fair bit of refactoring to separate the parse and load stages of lib/bpf.c. In case of TC the skip_sw flag may come after the program arguments (e.g. "bpf obj prog.o da skip_sw"), so we can't just load the program as we parse the arguments. Note that this impacts only loading of the program, all other supported methods of finding a program (pinned, bytecode, bytefile-file) are handled as previously, the load call will do nothing for them.
To simplify the implementation f_bpf and m_bpf will no longer allow specifying programs multiple times. Device ifindex is also resolved before running filter-specific code. Jakub Kicinski (11): bpf: pass program type in struct bpf_cfg_in bpf: keep parsed program mode in struct bpf_cfg_in bpf: allocate opcode table in struct bpf_cfg_in bpf: split parse from program loading bpf: rename bpf_parse_common() to bpf_parse_and_load_common() bpf: expose bpf_parse_common() and bpf_load_common() bpf: allow loading programs for a specific ifindex {f,m}_bpf: don't allow specifying multiple bpf programs tc_filter: resolve device name before parsing filter f_bpf: communicate ifindex for eBPF offload iplink: communicate ifindex for xdp offload include/bpf_util.h | 25 +++++++- ip/iplink.c | 4 +- ip/iplink_xdp.c | 13 ++++- ip/iproute_lwtunnel.c | 3 +- ip/xdp.h | 4 +- lib/bpf.c | 155 ++++++++++++++++++++++++++++++-------------------- tc/f_bpf.c | 18 +++++- tc/m_bpf.c | 6 +- tc/tc_filter.c | 50 ++++++++-------- 9 files changed, 178 insertions(+), 100 deletions(-) -- 2.14.1