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 <dan...@iogearbox.net>
---
 [ In future work, we need to consolidate some bigger sections.
   Patch is on top of http://patchwork.ozlabs.org/patch/522713/ ]

 tc/m_bpf.c | 47 +++++++++++++++++++++++------------------------
 1 file changed, 23 insertions(+), 24 deletions(-)

diff --git a/tc/m_bpf.c b/tc/m_bpf.c
index e1bb6a4..fb4c3c7 100644
--- a/tc/m_bpf.c
+++ b/tc/m_bpf.c
@@ -111,25 +111,28 @@ opt_bpf:
                        if (ebpf) {
                                bpf_uds_name = getenv(BPF_ENV_UDS);
                                bpf_obj = *argv;
-                               NEXT_ARG();
 
-                               if (strcmp(*argv, "section") == 0 ||
-                                   strcmp(*argv, "sec") == 0) {
+                               NEXT_ARG_FWD();
+
+                               if (argc > 0 &&
+                                   (strcmp(*argv, "section") == 0 ||
+                                    strcmp(*argv, "sec") == 0)) {
                                        NEXT_ARG();
                                        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, "exp") == 0)) {
                                        NEXT_ARG();
                                        bpf_uds_name = *argv;
-                                       NEXT_ARG();
+                                       NEXT_ARG_FWD();
                                }
-                               if (strcmp(*argv, "verbose") == 0 ||
-                                   strcmp(*argv, "verb") == 0) {
+                               if (argc > 0 &&
+                                   (strcmp(*argv, "verbose") == 0 ||
+                                    strcmp(*argv, "verb") == 0)) {
                                        bpf_verbose = true;
-                                       NEXT_ARG();
+                                       NEXT_ARG_FWD();
                                }
 
                                PREV_ARG();
@@ -166,33 +169,29 @@ opt_bpf:
                                goto opt_bpf;
                        break;
                }
-               argc--;
-               argv++;
+
+               NEXT_ARG_FWD();
        }
 
        parm.action = TC_ACT_PIPE;
        if (argc) {
                if (matches(*argv, "reclassify") == 0) {
                        parm.action = TC_ACT_RECLASSIFY;
-                       argc--;
-                       argv++;
+                       NEXT_ARG_FWD();
                } else if (matches(*argv, "pipe") == 0) {
                        parm.action = TC_ACT_PIPE;
-                       argc--;
-                       argv++;
+                       NEXT_ARG_FWD();
                } else if (matches(*argv, "drop") == 0 ||
                           matches(*argv, "shot") == 0) {
                        parm.action = TC_ACT_SHOT;
-                       argc--;
-                       argv++;
+                       NEXT_ARG_FWD();
                } else if (matches(*argv, "continue") == 0) {
                        parm.action = TC_ACT_UNSPEC;
-                       argc--;
-                       argv++;
-               } else if (matches(*argv, "pass") == 0) {
+                       NEXT_ARG_FWD();
+               } else if (matches(*argv, "pass") == 0 ||
+                          matches(*argv, "ok") == 0) {
                        parm.action = TC_ACT_OK;
-                       argc--;
-                       argv++;
+                       NEXT_ARG_FWD();
                }
        }
 
@@ -203,8 +202,8 @@ opt_bpf:
                                fprintf(stderr, "bpf: Illegal \"index\"\n");
                                return -1;
                        }
-                       argc--;
-                       argv++;
+
+                       NEXT_ARG_FWD();
                }
        }
 
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to