]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
tc: full JSON support for 'bpf' filter
authorDavide Caratti <dcaratti@redhat.com>
Thu, 30 Apr 2020 18:03:30 +0000 (20:03 +0200)
committerDavid Ahern <dsahern@gmail.com>
Tue, 5 May 2020 16:19:06 +0000 (16:19 +0000)
example using eBPF:

 # tc filter add dev dummy0 ingress bpf \
 > direct-action obj ./bpf/filter.o sec tc-ingress
 # tc  -j filter show dev dummy0 ingress | jq
 [
   {
     "protocol": "all",
     "pref": 49152,
     "kind": "bpf",
     "chain": 0
   },
   {
     "protocol": "all",
     "pref": 49152,
     "kind": "bpf",
     "chain": 0,
     "options": {
       "handle": "0x1",
       "bpf_name": "filter.o:[tc-ingress]",
       "direct-action": true,
       "not_in_hw": true,
       "prog": {
         "id": 101,
         "tag": "a04f5eef06a7f555",
         "jited": 1
       }
     }
   }
 ]

v2:
 - use print_nl(), thanks to Andrea Claudi
 - use print_0xhex() for filter handle, thanks to Stephen Hemminger

Signed-off-by: Davide Caratti <dcaratti@redhat.com>
Acked-by: Andrea Claudi <aclaudi@redhat.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
tc/f_bpf.c

index 135271aa16978c34d41e19b6e8ea3b261f9b07d2..fa3552aefffdca88553b479432b3b9d638582640 100644 (file)
@@ -203,22 +203,24 @@ static int bpf_print_opt(struct filter_util *qu, FILE *f,
        parse_rtattr_nested(tb, TCA_BPF_MAX, opt);
 
        if (handle)
-               fprintf(f, "handle 0x%x ", handle);
+               print_0xhex(PRINT_ANY, "handle", "handle %#llx ", handle);
 
        if (tb[TCA_BPF_CLASSID]) {
                SPRINT_BUF(b1);
-               fprintf(f, "flowid %s ",
+               print_string(PRINT_ANY, "flowid", "flowid %s ",
                        sprint_tc_classid(rta_getattr_u32(tb[TCA_BPF_CLASSID]), b1));
        }
 
        if (tb[TCA_BPF_NAME])
-               fprintf(f, "%s ", rta_getattr_str(tb[TCA_BPF_NAME]));
+               print_string(PRINT_ANY, "bpf_name", "%s ",
+                            rta_getattr_str(tb[TCA_BPF_NAME]));
 
        if (tb[TCA_BPF_FLAGS]) {
                unsigned int flags = rta_getattr_u32(tb[TCA_BPF_FLAGS]);
 
                if (flags & TCA_BPF_FLAG_ACT_DIRECT)
-                       fprintf(f, "direct-action ");
+                       print_bool(PRINT_ANY,
+                                  "direct-action", "direct-action ", true);
        }
 
        if (tb[TCA_BPF_FLAGS_GEN]) {
@@ -226,14 +228,14 @@ static int bpf_print_opt(struct filter_util *qu, FILE *f,
                        rta_getattr_u32(tb[TCA_BPF_FLAGS_GEN]);
 
                if (flags & TCA_CLS_FLAGS_SKIP_HW)
-                       fprintf(f, "skip_hw ");
+                       print_bool(PRINT_ANY, "skip_hw", "skip_hw ", true);
                if (flags & TCA_CLS_FLAGS_SKIP_SW)
-                       fprintf(f, "skip_sw ");
-
+                       print_bool(PRINT_ANY, "skip_sw", "skip_sw ", true);
                if (flags & TCA_CLS_FLAGS_IN_HW)
-                       fprintf(f, "in_hw ");
+                       print_bool(PRINT_ANY, "in_hw", "in_hw ", true);
                else if (flags & TCA_CLS_FLAGS_NOT_IN_HW)
-                       fprintf(f, "not_in_hw ");
+                       print_bool(PRINT_ANY,
+                                  "not_in_hw", "not_in_hw ", true);
        }
 
        if (tb[TCA_BPF_OPS] && tb[TCA_BPF_OPS_LEN])
@@ -245,14 +247,13 @@ static int bpf_print_opt(struct filter_util *qu, FILE *f,
        if (!dump_ok && tb[TCA_BPF_TAG]) {
                SPRINT_BUF(b);
 
-               fprintf(f, "tag %s ",
-                       hexstring_n2a(RTA_DATA(tb[TCA_BPF_TAG]),
-                                     RTA_PAYLOAD(tb[TCA_BPF_TAG]),
-                                     b, sizeof(b)));
+               print_string(PRINT_ANY, "tag", "tag %s ",
+                            hexstring_n2a(RTA_DATA(tb[TCA_BPF_TAG]),
+                            RTA_PAYLOAD(tb[TCA_BPF_TAG]), b, sizeof(b)));
        }
 
        if (tb[TCA_BPF_POLICE]) {
-               fprintf(f, "\n");
+               print_nl();
                tc_print_police(f, tb[TCA_BPF_POLICE]);
        }