diff --git a/src/agent.h b/src/agent.h index 1d7b6933b61d0eaa9ba57342a433fa49034b3add..e44fc068ce318956bf78249c34885c5d6be6d617 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 6216d19a6ccdec4e2d97a3de9bc7e0411169c220..8931fc824f4fb8b2b2859fb19b9908b858d6f2c9 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 df0997f3f68154e697849cc1ec3c37156e8a094d..5230858e4852e08ced1ef2512e74838bb98d3441 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;