From 9c466723f235c4fbd818b9edc9c57d02983cca9a Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 12:52:08 +0100 Subject: [PATCH 1/7] udebug: update to Git HEAD (2023-11-30) d49aadabb7a1 lib: fix dealing with udebugd restarts 9ec5fbb6aaad ubus: report ring size and data size via ubus api 86b4396baa44 ring: add debug messages for ring alloc errors e02306af7c50 lib: add helper function for applying ring config b613879cb049 client: send confirmation messages for ring add/remove Signed-off-by: Felix Fietkau --- package/libs/udebug/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/libs/udebug/Makefile b/package/libs/udebug/Makefile index 2c25eb72fd..2bc4d37f55 100644 --- a/package/libs/udebug/Makefile +++ b/package/libs/udebug/Makefile @@ -11,9 +11,9 @@ PKG_NAME:=udebug CMAKE_INSTALL:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/udebug.git -PKG_MIRROR_HASH:=c0d3701516dcbe0fe2badbeda50076e4f07ec054c4a80621c7aaf4e83ea75d0c -PKG_SOURCE_DATE:=2023-11-27 -PKG_SOURCE_VERSION:=d4b99820afd03a726ea50687d4393007da0fd0df +PKG_MIRROR_HASH:=3f7d32cdfbcbc7a854deefb916a1ee5c5bf59fa154c36fb1e5ff491dae874b8e +PKG_SOURCE_DATE:=2023-11-30 +PKG_SOURCE_VERSION:=b613879cb049123dd9dc68d5e6aef60141ebe483 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) PKG_LICENSE:=GPL-2.0 From 65c50a2545d87a9f9ca1357f9752ae7b20583430 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 12:53:29 +0100 Subject: [PATCH 2/7] libubox: update to Git HEAD (2023-11-30) 325fea5c57cf udebug: add functions for manipulating entry length e84c000c4756 udebug: add inline helper function to test if a buffer is allocated 40acbe34632b udebug: wait for response after buffer add/remove Signed-off-by: Felix Fietkau --- package/libs/libubox/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/libs/libubox/Makefile b/package/libs/libubox/Makefile index 076cb37e53..ae44ebcdfc 100644 --- a/package/libs/libubox/Makefile +++ b/package/libs/libubox/Makefile @@ -5,9 +5,9 @@ PKG_RELEASE=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/libubox.git -PKG_MIRROR_HASH:=ec4487b5edc071a127b21a63666c20ac1ad516cd48629ee600a679040c709faf -PKG_SOURCE_DATE:=2023-11-28 -PKG_SOURCE_VERSION:=e80dc00ee90c29ef56ae28f414b0e5bb361206e7 +PKG_MIRROR_HASH:=7b87783f968eeafd7ae79e5bb04e6c32b2aaaf0e6aca5be6e94b5393fc20807f +PKG_SOURCE_DATE:=2023-11-30 +PKG_SOURCE_VERSION:=40acbe34632b8e4e860fe41bb14ab5d7d5c9cfe9 PKG_ABI_VERSION:=$(call abi_version_str,$(PKG_SOURCE_DATE)) CMAKE_INSTALL:=1 From 4cb0677600c7a3e1772119332e9c649ec419e0c3 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 13:42:50 +0100 Subject: [PATCH 3/7] ubox: update to Git HEAD (2023-11-30) cc34fb7b922f logd: add support for subscribing to the log object c08709cceb55 logd: add udebug support Signed-off-by: Felix Fietkau --- package/system/ubox/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package/system/ubox/Makefile b/package/system/ubox/Makefile index 17bade25e4..ed55617cfa 100644 --- a/package/system/ubox/Makefile +++ b/package/system/ubox/Makefile @@ -1,13 +1,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ubox -PKG_RELEASE:=2 +PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/ubox.git -PKG_SOURCE_DATE:=2022-08-13 -PKG_SOURCE_VERSION:=4c7b720b9c63b826fb9404e454ae54f2ef5649d5 -PKG_MIRROR_HASH:=35178148034dfef36c5fda2bc8217617920bc1a3b86f72efbe87e85048a6a2a8 +PKG_SOURCE_DATE:=2023-11-30 +PKG_SOURCE_VERSION:=c08709cceb554cba02c935d1442f6a042fe6b2a8 +PKG_MIRROR_HASH:=719ae701546df7c5972352d778a980cbc9f48623dda86443398698837124818b CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 @@ -44,7 +44,7 @@ endef define Package/logd SECTION:=base CATEGORY:=Base system - DEPENDS:=+libubox +libubus +libblobmsg-json + DEPENDS:=+libubox +libubus +libblobmsg-json +libudebug TITLE:=OpenWrt system log implementation USERID:=logd=514:logd=514 endef From 38eeefd060f70d917a68e82e0dede078446d6d64 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 19:19:01 +0100 Subject: [PATCH 4/7] procd: update to Git HEAD (2023-11-28) d852f877920b service: Fix retriggering of init.d-scripts. 7e6c6efd6fbc udebug: add support for logging via udebug Signed-off-by: Felix Fietkau --- package/system/procd/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile index 7c829260d5..0af90c7d4a 100644 --- a/package/system/procd/Makefile +++ b/package/system/procd/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_RELEASE:=3 +PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/procd.git -PKG_MIRROR_HASH:=a7e42525ae65eb1342e593a714e88bc59e46467cbb5a7fd7d7aca4a9815b7c0d -PKG_SOURCE_DATE:=2023-06-25 -PKG_SOURCE_VERSION:=2db836553e8fc318143b38dbc6e12b8625cf5c33 +PKG_MIRROR_HASH:=48e5d555b5beb15cf936e1d2433b8e614de64a4eaf25293f0211eeb9ac79d534 +PKG_SOURCE_DATE:=2023-11-28 +PKG_SOURCE_VERSION:=7e6c6efd6fbcc7955801c5e2ac915a90697e1fd9 CMAKE_INSTALL:=1 PKG_LICENSE:=GPL-2.0 @@ -40,7 +40,7 @@ CMAKE_OPTIONS += -DEARLY_PATH="$(TARGET_INIT_PATH)" define Package/procd/Default SECTION:=base CATEGORY:=Base system - DEPENDS:=+ubusd +ubus +libjson-script +ubox +libubox \ + DEPENDS:=+ubusd +ubus +libjson-script +ubox +libubox +libudebug \ +libubus +libblobmsg-json +libjson-c +jshn TITLE:=OpenWrt system process manager USERID:=:dialout=20 :audio=29 From fc5267f7309fa86e69406bdb02d68c57ce59f7dd Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 28 Nov 2023 15:10:57 +0100 Subject: [PATCH 5/7] udebug: add more entries for the default config Signed-off-by: Felix Fietkau --- package/libs/udebug/files/udebug.config | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/package/libs/udebug/files/udebug.config b/package/libs/udebug/files/udebug.config index 36b653e306..23d4281b52 100644 --- a/package/libs/udebug/files/udebug.config +++ b/package/libs/udebug/files/udebug.config @@ -1,3 +1,12 @@ +config service procd + option enabled 0 + +config service log + option enabled 0 + option debug 0 + option kernel 1 + option syslog 1 + config service hostapd option enabled 0 @@ -6,3 +15,6 @@ config service wpa_supplicant config service netifd option enabled 0 + +config service umdns + option enabled 0 From fdb92d2d6f2e9cca732817441896b7f601609949 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 19:13:35 +0100 Subject: [PATCH 6/7] ucode: update to Git HEAD (2023-11-30) 96f74b5be829 ubus: make ubus_context first in uc_ubus_connection_t Signed-off-by: Felix Fietkau --- package/utils/ucode/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package/utils/ucode/Makefile b/package/utils/ucode/Makefile index 067e56e02d..670b934376 100644 --- a/package/utils/ucode/Makefile +++ b/package/utils/ucode/Makefile @@ -12,9 +12,9 @@ PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=https://github.com/jow-/ucode.git -PKG_SOURCE_DATE:=2023-11-07 -PKG_SOURCE_VERSION:=a6e75e02528e36f3610a7f0073453018336def2e -PKG_MIRROR_HASH:=e1a0f98ba865ed5911d5db3bfca55a2f1b825992bf5f7c7e324928d9412d7ae2 +PKG_SOURCE_DATE:=2023-11-30 +PKG_SOURCE_VERSION:=6e89b89e95bbb140bbff5ab72b8c9632727bf6a6 +PKG_MIRROR_HASH:=20ba99f8c2591b581cdf0245dd40301e517659193cddaa3a3888125fcc85b2aa PKG_MAINTAINER:=Jo-Philipp Wich PKG_LICENSE:=ISC From f909059b7473992e84d5701fa5021faa5bd76e67 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 30 Nov 2023 20:08:21 +0100 Subject: [PATCH 7/7] hostapd: use new udebug ubus api to make debug rings configurable Signed-off-by: Felix Fietkau --- package/libs/udebug/files/udebug.config | 8 + .../network/services/hostapd/files/hostapd.uc | 27 +--- .../services/hostapd/files/wpa_supplicant.uc | 25 +-- .../services/hostapd/src/src/utils/ucode.c | 148 ++++++++++++------ 4 files changed, 110 insertions(+), 98 deletions(-) diff --git a/package/libs/udebug/files/udebug.config b/package/libs/udebug/files/udebug.config index 23d4281b52..21d1ecb18f 100644 --- a/package/libs/udebug/files/udebug.config +++ b/package/libs/udebug/files/udebug.config @@ -9,9 +9,17 @@ config service log config service hostapd option enabled 0 + option wpa_log 1 + option wpa_nl_rx 0 + option wpa_nl_tx 0 + option wpa_nl_ctrl 0 config service wpa_supplicant option enabled 0 + option wpa_log 1 + option wpa_nl_rx 0 + option wpa_nl_tx 0 + option wpa_nl_ctrl 0 config service netifd option enabled 0 diff --git a/package/network/services/hostapd/files/hostapd.uc b/package/network/services/hostapd/files/hostapd.uc index 84138f29a5..b85f523b35 100644 --- a/package/network/services/hostapd/files/hostapd.uc +++ b/package/network/services/hostapd/files/hostapd.uc @@ -782,33 +782,9 @@ let main_obj = { }, }; -function handle_debug_config(cfg) { - hostapd.printf(`handle_debug_config: ${cfg}\n`); - if (!cfg) - return; - - let data = cfg.service; - if (!data) - return; - - data = data.hostapd; - if (!data) - return; - - hostapd.udebug_set(!!+data.enabled); -} - hostapd.data.ubus = ubus; hostapd.data.obj = ubus.publish("hostapd", main_obj); -hostapd.data.debug_sub = ubus.subscriber((req) => { - if (req.type != "config") - return; - - handle_debug_config(req.data); -}); - -hostapd.data.debug_sub.subscribe("udebug"); -handle_debug_config(ubus.call("udebug", "get_config", {})); +hostapd.udebug_set("hostapd", hostapd.data.ubus); function bss_event(type, name, data) { let ubus = hostapd.data.ubus; @@ -823,6 +799,7 @@ return { shutdown: function() { for (let phy in hostapd.data.config) iface_set_config(phy, null); + hostapd.udebug_set(null); hostapd.ubus.disconnect(); }, bss_add: function(name, obj) { diff --git a/package/network/services/hostapd/files/wpa_supplicant.uc b/package/network/services/hostapd/files/wpa_supplicant.uc index aac144b339..1709bb019e 100644 --- a/package/network/services/hostapd/files/wpa_supplicant.uc +++ b/package/network/services/hostapd/files/wpa_supplicant.uc @@ -244,32 +244,9 @@ let main_obj = { }, }; -function handle_debug_config(cfg) { - if (!cfg) - return; - - let data = cfg.service; - if (!data) - return; - - data = data.wpa_supplicant; - if (!data) - return; - - wpas.udebug_set(!!+data.enabled); -} - wpas.data.ubus = ubus; wpas.data.obj = ubus.publish("wpa_supplicant", main_obj); -wpas.data.debug_sub = ubus.subscriber((req) => { - if (req.type != "config") - return; - - handle_debug_config(req.data); -}); - -wpas.data.debug_sub.subscribe("udebug"); -handle_debug_config(ubus.call("udebug", "get_config", {})); +wpas.udebug_set("wpa_supplicant", wpas.data.ubus); function iface_event(type, name, data) { let ubus = wpas.data.ubus; diff --git a/package/network/services/hostapd/src/src/utils/ucode.c b/package/network/services/hostapd/src/src/utils/ucode.c index 14fd6bc5ec..29c753c326 100644 --- a/package/network/services/hostapd/src/src/utils/ucode.c +++ b/package/network/services/hostapd/src/src/utils/ucode.c @@ -16,8 +16,59 @@ static uc_vm_t vm; static struct uloop_timeout gc_timer; static struct udebug ud; static struct udebug_buf ud_log, ud_nl[3]; - +static const struct udebug_buf_meta meta_log = { + .name = "wpa_log", + .format = UDEBUG_FORMAT_STRING, +}; +static const struct udebug_buf_meta meta_nl_ll = { + .name = "wpa_nl_ctrl", + .format = UDEBUG_FORMAT_PACKET, + .sub_format = UDEBUG_DLT_NETLINK, +}; +static const struct udebug_buf_meta meta_nl_tx = { + .name = "wpa_nl_tx", + .format = UDEBUG_FORMAT_PACKET, + .sub_format = UDEBUG_DLT_NETLINK, +}; #define UDEBUG_FLAG_RX_FRAME (1ULL << 0) +static const struct udebug_buf_flag rx_flags[] = { + { "rx_frame", UDEBUG_FLAG_RX_FRAME }, +}; +static const struct udebug_buf_meta meta_nl_rx = { + .name = "wpa_nl_rx", + .format = UDEBUG_FORMAT_PACKET, + .sub_format = UDEBUG_DLT_NETLINK, + .flags = rx_flags, + .n_flags = ARRAY_SIZE(rx_flags), +}; +static struct udebug_ubus_ring udebug_rings[] = { + { + .buf = &ud_log, + .meta = &meta_log, + .default_entries = 1024, + .default_size = 64 * 1024 + }, + { + .buf = &ud_nl[0], + .meta = &meta_nl_rx, + .default_entries = 1024, + .default_size = 256 * 1024, + }, + { + .buf = &ud_nl[1], + .meta = &meta_nl_tx, + .default_entries = 1024, + .default_size = 64 * 1024, + }, + { + .buf = &ud_nl[2], + .meta = &meta_nl_ll, + .default_entries = 1024, + .default_size = 32 * 1024, + } +}; +char *udebug_service; +struct udebug_ubus ud_ubus; static void uc_gc_timer(struct uloop_timeout *timeout) { @@ -301,68 +352,67 @@ static void udebug_netlink_hook(int tx, const void *data, size_t len) !(udebug_buf_flags(buf) & UDEBUG_FLAG_RX_FRAME)) return; + if (!udebug_buf_valid(buf)) + return; + udebug_entry_init(buf); udebug_entry_append(buf, &hdr, sizeof(hdr)); udebug_entry_append(buf, data, len); udebug_entry_add(buf); } -uc_value_t *uc_wpa_udebug_set(uc_vm_t *vm, size_t nargs) +static void +wpa_udebug_config(struct udebug_ubus *ctx, struct blob_attr *data, + bool enabled) { - static const struct udebug_buf_meta meta_log = { - .name = "wpa_log", - .format = UDEBUG_FORMAT_STRING, - }; - static const struct udebug_buf_meta meta_nl_ll = { - .name = "wpa_nl_ctrl", - .format = UDEBUG_FORMAT_PACKET, - .sub_format = UDEBUG_DLT_NETLINK, - }; - static const struct udebug_buf_meta meta_nl_tx = { - .name = "wpa_nl_tx", - .format = UDEBUG_FORMAT_PACKET, - .sub_format = UDEBUG_DLT_NETLINK, - }; - static const struct udebug_buf_flag rx_flags[] = { - { "rx_frame", UDEBUG_FLAG_RX_FRAME }, - }; - static const struct udebug_buf_meta meta_nl_rx = { - .name = "wpa_nl_rx", - .format = UDEBUG_FORMAT_PACKET, - .sub_format = UDEBUG_DLT_NETLINK, - .flags = rx_flags, - .n_flags = ARRAY_SIZE(rx_flags), - }; - bool val = ucv_is_truish(uc_fn_arg(0)); - static bool enabled = false; - - if (enabled == val) - return ucv_boolean_new(true); - - enabled = val; - if (val) { - udebug_init(&ud); - udebug_auto_connect(&ud, NULL); - udebug_buf_init(&ud_log, 1024, 64 * 1024); - udebug_buf_add(&ud, &ud_log, &meta_log); - udebug_buf_init(&ud_nl[0], 1024, 256 * 1024); - udebug_buf_add(&ud, &ud_nl[0], &meta_nl_rx); - udebug_buf_init(&ud_nl[1], 1024, 64 * 1024); - udebug_buf_add(&ud, &ud_nl[1], &meta_nl_tx); - udebug_buf_init(&ud_nl[2], 256, 32 * 1024); - udebug_buf_add(&ud, &ud_nl[2], &meta_nl_ll); + udebug_ubus_apply_config(&ud, udebug_rings, ARRAY_SIZE(udebug_rings), + data, enabled); + if (udebug_buf_valid(&ud_log)) { wpa_printf_hook = udebug_printf_hook; wpa_hexdump_hook = udebug_hexdump_hook; - wpa_netlink_hook = udebug_netlink_hook; } else { - for (size_t i = 0; i < ARRAY_SIZE(ud_nl); i++) - udebug_buf_free(&ud_nl[i]); - udebug_buf_free(&ud_log); - udebug_free(&ud); wpa_printf_hook = NULL; wpa_hexdump_hook = NULL; + } + + if (udebug_buf_valid(&ud_nl[0]) || + udebug_buf_valid(&ud_nl[1]) || + udebug_buf_valid(&ud_nl[2])) + wpa_netlink_hook = udebug_netlink_hook; + else wpa_netlink_hook = NULL; +} + +uc_value_t *uc_wpa_udebug_set(uc_vm_t *vm, size_t nargs) +{ + uc_value_t *name = uc_fn_arg(0); + uc_value_t *ubus = uc_fn_arg(1); + static bool enabled = false; + struct ubus_context *ctx; + bool cur_en; + + cur_en = ucv_type(name) == UC_STRING; + ctx = ucv_resource_data(ubus, "ubus.connection"); + if (!ctx) + cur_en = false; + + if (enabled == cur_en) + return ucv_boolean_new(true); + + enabled = cur_en; + if (enabled) { + udebug_service = strdup(ucv_string_get(name)); + udebug_init(&ud); + udebug_auto_connect(&ud, NULL); + udebug_ubus_init(&ud_ubus, ctx, udebug_service, wpa_udebug_config); + } else { + udebug_ubus_free(&ud_ubus); + for (size_t i = 0; i < ARRAY_SIZE(udebug_rings); i++) + if (udebug_buf_valid(udebug_rings[i].buf)) + udebug_buf_free(udebug_rings[i].buf); + udebug_free(&ud); + free(udebug_service); } return ucv_boolean_new(true);