From 4bb640ca06c08ef60f729d0603b4c8df8f580772 Mon Sep 17 00:00:00 2001 From: Jakob Olsson <jakob.olsson@iopsys.eu> Date: Mon, 7 Apr 2025 17:01:27 +0200 Subject: [PATCH] vendor ext: parse any custom bridge passed with WSC M2 AP --- src/agent.h | 3 +++ src/agent_map.c | 18 ++++++++++++++++-- src/config.c | 5 ++++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/agent.h b/src/agent.h index 1d7b6933b..e44fc068c 100644 --- a/src/agent.h +++ b/src/agent.h @@ -596,7 +596,10 @@ struct wifi_backhaul_element { }; struct wsc_ext { +#if VENDOR_EXTENSION bool enabled; + char bridge[16]; +#endif #define VEN_IES_MAX 16 uint8_t num_ven_ies; struct wsc_vendor_ie ven_ies[VEN_IES_MAX]; diff --git a/src/agent_map.c b/src/agent_map.c index 6216d19a6..8931fc824 100644 --- a/src/agent_map.c +++ b/src/agent_map.c @@ -1928,7 +1928,8 @@ int wsc_get_exts(uint8_t *msg, uint16_t msglen, struct wsc_ext *exts) uint8_t *p; uint8_t *msg_end; #ifdef EASYMESH_VENDOR_EXT -#define ATTR_ENABLED (0x4C) /* IOPSYS m2 vendor extension */ +#define ATTR_ENABLED (0x4C) /* provisioning of disabled APs */ +#define ATTR_BRIDGE (0x4D) /* provisioning of custom bridge */ const uint8_t vendor_oui[4] = {0}; uint32_t oui = 0; @@ -1983,8 +1984,17 @@ int wsc_get_exts(uint8_t *msg, uint16_t msglen, struct wsc_ext *exts) p += 1; attr_len -= 1; - if (subelem == ATTR_ENABLED) + switch (subelem) { + case ATTR_ENABLED: memcpy(&exts->enabled, p, len); + break; + case ATTR_BRIDGE: + memcpy(exts->bridge, p, len); + break; + default: + trace("%s: unknown subelem:%u\n", __func__, subelem); + break; + } p += len; attr_len -= len; @@ -1997,6 +2007,10 @@ int wsc_get_exts(uint8_t *msg, uint16_t msglen, struct wsc_ext *exts) p += attr_len; } +#ifdef EASYMESH_VENDOR_EXT +#undef ATTR_ENABLED +#undef ATTR_BRIDGE +#endif return 0; } diff --git a/src/config.c b/src/config.c index df0997f3f..5230858e4 100644 --- a/src/config.c +++ b/src/config.c @@ -889,7 +889,10 @@ struct netif_apcfg *uci_apply_wps_credentials(struct agent_config *cfg, char *if int mfp = 0; bridge = cfg->al_bridge; - +#ifdef VENDOR_EXTENSION + if (strlen(exts->bridge)) + bridge = exts->bridge; +#endif /* step past br- prefix if present*/ if (!strncmp("br-", bridge, 3)) bridge += 3; -- GitLab