summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2025-07-22 12:31:45 +0000
committerFelix Fietkau2025-07-22 12:31:46 +0000
commitf207d37a1055e2a5a453ed7dc119680cb017227b (patch)
tree5d724870ba87b43e93cd93b3d78b06a75e7e1083
parentc297f04e18528dacb3b539bb8c1394da93559c1e (diff)
downloadudebug-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.c16
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);