m_bpf: don't require default opcode on ebpf actions
After the patch, the most minimal command to load an eBPF action for late binding with auto index selection through tc is: tc actions add action bpf obj prog.o We already set TC_ACT_PIPE in tc as default opcode, so if nothing further has been specified, just use it. Also, allow "ok" next to "pass" for matching cmdline on TC_ACT_OK. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
b8c753245b
commit
343dc90854
47
tc/m_bpf.c
47
tc/m_bpf.c
|
|
@ -111,25 +111,28 @@ opt_bpf:
|
||||||
if (ebpf) {
|
if (ebpf) {
|
||||||
bpf_uds_name = getenv(BPF_ENV_UDS);
|
bpf_uds_name = getenv(BPF_ENV_UDS);
|
||||||
bpf_obj = *argv;
|
bpf_obj = *argv;
|
||||||
NEXT_ARG();
|
|
||||||
|
|
||||||
if (strcmp(*argv, "section") == 0 ||
|
NEXT_ARG_FWD();
|
||||||
strcmp(*argv, "sec") == 0) {
|
|
||||||
|
if (argc > 0 &&
|
||||||
|
(strcmp(*argv, "section") == 0 ||
|
||||||
|
strcmp(*argv, "sec") == 0)) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
bpf_sec_name = *argv;
|
bpf_sec_name = *argv;
|
||||||
NEXT_ARG();
|
NEXT_ARG_FWD();
|
||||||
}
|
}
|
||||||
if (!bpf_uds_name &&
|
if (argc > 0 && !bpf_uds_name &&
|
||||||
(strcmp(*argv, "export") == 0 ||
|
(strcmp(*argv, "export") == 0 ||
|
||||||
strcmp(*argv, "exp") == 0)) {
|
strcmp(*argv, "exp") == 0)) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
bpf_uds_name = *argv;
|
bpf_uds_name = *argv;
|
||||||
NEXT_ARG();
|
NEXT_ARG_FWD();
|
||||||
}
|
}
|
||||||
if (strcmp(*argv, "verbose") == 0 ||
|
if (argc > 0 &&
|
||||||
strcmp(*argv, "verb") == 0) {
|
(strcmp(*argv, "verbose") == 0 ||
|
||||||
|
strcmp(*argv, "verb") == 0)) {
|
||||||
bpf_verbose = true;
|
bpf_verbose = true;
|
||||||
NEXT_ARG();
|
NEXT_ARG_FWD();
|
||||||
}
|
}
|
||||||
|
|
||||||
PREV_ARG();
|
PREV_ARG();
|
||||||
|
|
@ -166,33 +169,29 @@ opt_bpf:
|
||||||
goto opt_bpf;
|
goto opt_bpf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
argc--;
|
|
||||||
argv++;
|
NEXT_ARG_FWD();
|
||||||
}
|
}
|
||||||
|
|
||||||
parm.action = TC_ACT_PIPE;
|
parm.action = TC_ACT_PIPE;
|
||||||
if (argc) {
|
if (argc) {
|
||||||
if (matches(*argv, "reclassify") == 0) {
|
if (matches(*argv, "reclassify") == 0) {
|
||||||
parm.action = TC_ACT_RECLASSIFY;
|
parm.action = TC_ACT_RECLASSIFY;
|
||||||
argc--;
|
NEXT_ARG_FWD();
|
||||||
argv++;
|
|
||||||
} else if (matches(*argv, "pipe") == 0) {
|
} else if (matches(*argv, "pipe") == 0) {
|
||||||
parm.action = TC_ACT_PIPE;
|
parm.action = TC_ACT_PIPE;
|
||||||
argc--;
|
NEXT_ARG_FWD();
|
||||||
argv++;
|
|
||||||
} else if (matches(*argv, "drop") == 0 ||
|
} else if (matches(*argv, "drop") == 0 ||
|
||||||
matches(*argv, "shot") == 0) {
|
matches(*argv, "shot") == 0) {
|
||||||
parm.action = TC_ACT_SHOT;
|
parm.action = TC_ACT_SHOT;
|
||||||
argc--;
|
NEXT_ARG_FWD();
|
||||||
argv++;
|
|
||||||
} else if (matches(*argv, "continue") == 0) {
|
} else if (matches(*argv, "continue") == 0) {
|
||||||
parm.action = TC_ACT_UNSPEC;
|
parm.action = TC_ACT_UNSPEC;
|
||||||
argc--;
|
NEXT_ARG_FWD();
|
||||||
argv++;
|
} else if (matches(*argv, "pass") == 0 ||
|
||||||
} else if (matches(*argv, "pass") == 0) {
|
matches(*argv, "ok") == 0) {
|
||||||
parm.action = TC_ACT_OK;
|
parm.action = TC_ACT_OK;
|
||||||
argc--;
|
NEXT_ARG_FWD();
|
||||||
argv++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -203,8 +202,8 @@ opt_bpf:
|
||||||
fprintf(stderr, "bpf: Illegal \"index\"\n");
|
fprintf(stderr, "bpf: Illegal \"index\"\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
argc--;
|
|
||||||
argv++;
|
NEXT_ARG_FWD();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue