diff options
| author | Felix Fietkau | 2025-07-22 12:31:45 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2025-07-22 12:31:46 +0000 |
| commit | f207d37a1055e2a5a453ed7dc119680cb017227b (patch) | |
| tree | 5d724870ba87b43e93cd93b3d78b06a75e7e1083 | |
| parent | c297f04e18528dacb3b539bb8c1394da93559c1e (diff) | |
| download | udebug-f207d37a1055e2a5a453ed7dc119680cb017227b.tar.gz | |
ucode: add support for specifying ring format
Support passing packet data from ucode
Signed-off-by: Felix Fietkau <nbd@nbd.name>
| -rw-r--r-- | lib-ucode.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/lib-ucode.c b/lib-ucode.c index 37554f8..9199f99 100644 --- a/lib-ucode.c +++ b/lib-ucode.c @@ -484,7 +484,7 @@ uc_udebug_foreach_packet(uc_vm_t *vm, size_t nargs) static uc_value_t * uc_udebug_create_ring(uc_vm_t *vm, size_t nargs) { - uc_value_t *name, *flags_arr, *size, *entries; + uc_value_t *name, *flags_arr, *size, *entries, *format; uc_value_t *meta_obj = uc_fn_arg(0); struct udebug_buf_flag *flags; struct udebug_buf_meta *meta; @@ -524,6 +524,12 @@ uc_udebug_create_ring(uc_vm_t *vm, size_t nargs) meta->format = UDEBUG_FORMAT_STRING; meta->flags = flags; + format = ucv_object_get(meta_obj, "format", NULL); + if (ucv_type(format) == UC_INTEGER) { + meta->format = UDEBUG_FORMAT_PACKET; + meta->sub_format = ucv_int64_get(format); + } + for (size_t i = 0; i < flags_len; i++) { uc_value_t *f = ucv_array_get(flags_arr, i); const char *str = ucv_string_get(f); @@ -646,6 +652,14 @@ void uc_module_init(uc_vm_t *vm, uc_value_t *scope) { uc_function_list_register(scope, global_fns); +#define ADD_CONST(name) \ + ucv_object_add(scope, #name, ucv_int64_new(UDEBUG_##name)) + ADD_CONST(DLT_ETHERNET); + ADD_CONST(DLT_PPP); + ADD_CONST(DLT_IEEE_802_11); + ADD_CONST(DLT_IEEE_802_11_RADIOTAP); + ADD_CONST(DLT_NETLINK); + uc_type_declare(vm, "udebug.wbuf", wbuf_fns, wbuf_free); uc_type_declare(vm, "udebug.rbuf", rbuf_fns, rbuf_free); uc_type_declare(vm, "udebug.snapshot", snapshot_fns, free); |