]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
ucode-mod-bpf: add support for passing classid for tc attached programs
authorFelix Fietkau <nbd@nbd.name>
Thu, 31 Jul 2025 15:31:13 +0000 (17:31 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 31 Jul 2025 15:34:24 +0000 (17:34 +0200)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
package/utils/ucode-mod-bpf/src/bpf.c

index deb2e6ac2a6109598d005b7ac8aa15fdda854e0c..33641ddfb2c4aafe2cea7a0f74df6a288c6c9cbf 100644 (file)
@@ -620,7 +620,7 @@ uc_bpf_map_pin(uc_vm_t *vm, size_t nargs)
 
 static uc_value_t *
 uc_bpf_set_tc_hook(uc_value_t *ifname, uc_value_t *type, uc_value_t *prio,
-                  int fd)
+                  uc_value_t *classid, int fd)
 {
        DECLARE_LIBBPF_OPTS(bpf_tc_hook, hook);
        DECLARE_LIBBPF_OPTS(bpf_tc_opts, attach_tc,
@@ -657,6 +657,7 @@ uc_bpf_set_tc_hook(uc_value_t *ifname, uc_value_t *type, uc_value_t *prio,
                goto out;
 
        attach_tc.prog_fd = fd;
+       attach_tc.classid = ucv_int64_get(classid);
        if (bpf_tc_attach(&hook, &attach_tc) < 0)
                goto error;
 
@@ -676,11 +677,12 @@ uc_bpf_program_tc_attach(uc_vm_t *vm, size_t nargs)
        uc_value_t *ifname = uc_fn_arg(0);
        uc_value_t *type = uc_fn_arg(1);
        uc_value_t *prio = uc_fn_arg(2);
+       uc_value_t *classid = uc_fn_arg(3);
 
        if (!f)
                err_return(EINVAL, NULL);
 
-       return uc_bpf_set_tc_hook(ifname, type, prio, f->fd);
+       return uc_bpf_set_tc_hook(ifname, type, prio, classid, f->fd);
 }
 
 static uc_value_t *
@@ -690,7 +692,7 @@ uc_bpf_tc_detach(uc_vm_t *vm, size_t nargs)
        uc_value_t *type = uc_fn_arg(1);
        uc_value_t *prio = uc_fn_arg(2);
 
-       return uc_bpf_set_tc_hook(ifname, type, prio, -1);
+       return uc_bpf_set_tc_hook(ifname, type, prio, NULL, -1);
 }
 
 static int