From 92ade3227473bd7755b0443f3d1e99a1b44c4065 Mon Sep 17 00:00:00 2001
From: Jakob Olsson <jakob.olsson@iopsys.eu>
Date: Tue, 24 Aug 2021 17:23:49 +0200
Subject: [PATCH] map-controller: introduce enabled vendor extension to
 ap-autoconfig

---
 src/core/cntlr_tlv_generator.c | 2 ++
 src/core/config.c              | 9 ++++++++-
 src/core/config.h              | 1 +
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c
index e2b6117c..6dde5cc5 100644
--- a/src/core/cntlr_tlv_generator.c
+++ b/src/core/cntlr_tlv_generator.c
@@ -230,6 +230,7 @@ int cntlr_gen_wsc(struct controller *c, struct cmdu_buff *frm,
 	uint8_t oui[3] = {IOP_VENDOR_ID_1, IOP_VENDOR_ID_2, IOP_VENDOR_ID_3};
 	uint8_t out[256] = {0};
 	size_t olen = 256;
+#define ATTR_ENABLED (0x4C) /* IOPSYS m2 vendor extension */
 
 	t = cmdu_reserve_tlv(frm, 1000);
 	if (!t)
@@ -259,6 +260,7 @@ int cntlr_gen_wsc(struct controller *c, struct cmdu_buff *frm,
 		ATTR_PROTO, strlen(iface_cred->br->proto), iface_cred->br->proto,
 		ATTR_BR_IP, 4, &iface_cred->br->ipaddr.addr.ip4.s_addr,
 		ATTR_VID, 2, &(iface_cred->br->id),
+		ATTR_ENABLED, 1, &(iface_cred->enabled),
 		-1);
 
 	ret = wsc_build_m2(msg, msglen, &cred, out, olen, &m2, &m2_size);
diff --git a/src/core/config.c b/src/core/config.c
index 0eb9012f..d50598e9 100644
--- a/src/core/config.c
+++ b/src/core/config.c
@@ -431,6 +431,7 @@ static int cntlr_config_get_credentials(struct controller_config *c,
 		CRED_VLAN,
 		CRED_MAP,
 		CRED_D_BSTA,
+		CRED_ENABLED,
 		NUM_CREDS,
 	};
 	const struct uci_parse_option opts[] = {
@@ -440,7 +441,8 @@ static int cntlr_config_get_credentials(struct controller_config *c,
 		[CRED_KEY] = { .name = "key", .type = UCI_TYPE_STRING },
 		[CRED_VLAN] = { .name = "vlan", .type = UCI_TYPE_STRING },
 		[CRED_MAP] = { .name = "multi_ap", .type = UCI_TYPE_STRING },
-		[CRED_D_BSTA] = { .name = "disallow_bsta", .type = UCI_TYPE_STRING }
+		[CRED_D_BSTA] = { .name = "disallow_bsta", .type = UCI_TYPE_STRING },
+		[CRED_ENABLED] = { .name = "enabled", .type = UCI_TYPE_STRING }
 	};
 	struct uci_option *tb[NUM_CREDS];
 	struct iface_credential *cred;
@@ -471,6 +473,8 @@ static int cntlr_config_get_credentials(struct controller_config *c,
 		iface_list = &c->bklist;
 	}
 
+	cred->enabled = true;
+
 	uci_parse_section(s, opts, NUM_CREDS, tb);
 
 	if (tb[CRED_BAND]) {
@@ -532,6 +536,9 @@ static int cntlr_config_get_credentials(struct controller_config *c,
 	if (tb[CRED_D_BSTA])
 		cred->disallow_bsta = atoi(tb[CRED_D_BSTA]->v.string);
 
+	if (tb[CRED_ENABLED])
+		cred->enabled = atoi(tb[CRED_ENABLED]->v.string);
+
 	(*num)++;
 	list_add_tail(&cred->list, iface_list);
 	return 0;
diff --git a/src/core/config.h b/src/core/config.h
index 7c1672e4..ac07c538 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -47,6 +47,7 @@ struct iface_credential {
 	uint8_t multi_ap;
 	enum aptype mode;
 	uint8_t disallow_bsta;
+	bool enabled;
 	struct netif_vlan *br;
 	struct list_head list;
 };
-- 
GitLab