From aa365710b227ba82b1c43f9cdf497261edb21852 Mon Sep 17 00:00:00 2001
From: Amin Ben Romdhane <amin.benromdhane@iopsys.eu>
Date: Mon, 3 Jun 2024 15:46:03 +0200
Subject: [PATCH] Align Hosts Objects to use dm_data

---
 src/bbf_plugin/hosts.c | 141 ++++++++++++++++++++++-------------------
 1 file changed, 77 insertions(+), 64 deletions(-)

diff --git a/src/bbf_plugin/hosts.c b/src/bbf_plugin/hosts.c
index 9ad4467..1305e18 100644
--- a/src/bbf_plugin/hosts.c
+++ b/src/bbf_plugin/hosts.c
@@ -28,6 +28,7 @@ DM_MAP_OBJ tDynamicObj[] = {
 static int browseHostsHostInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
 {
 	json_object *res = NULL, *host_obj = NULL, *arrobj = NULL;
+	struct dm_data curr_data = {0};
 	int idx = 0, i = 0;
 	char *inst = NULL;
 
@@ -35,9 +36,11 @@ static int browseHostsHostInst(struct dmctx *dmctx, DMNODE *parent_node, void *p
 
 	dmjson_foreach_obj_in_array(res, arrobj, host_obj, idx, 1, "hosts") {
 
+		curr_data.json_object = host_obj;
+
 		inst = handle_instance_without_section(dmctx, parent_node, ++i);
 
-		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)host_obj, inst) == DM_STOP)
+		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_data, inst) == DM_STOP)
 			break;
 	}
 	return 0;
@@ -46,13 +49,18 @@ static int browseHostsHostInst(struct dmctx *dmctx, DMNODE *parent_node, void *p
 /*#Device.Hosts.Host.{i}.IPv4Address.{i}.!UBUS:hosts/show//hosts[@i-1].ipv4addr*/
 static int browseHostsHostIPv4AddressInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
 {
-	json_object *ip_arr = NULL, *host_obj = (json_object *)prev_data;
+	json_object *ip_arr = NULL, *host_obj = ((struct dm_data *)prev_data)->json_object;
+	struct dm_data curr_data = {0};
 	char *inst = NULL, *ipv4addr = NULL;
 	int id = 0, i = 0;
 
 	dmjson_foreach_value_in_array(host_obj, ip_arr, ipv4addr, i, 1, "ipv4addr") {
+
+		curr_data.additional_data = (void *)ipv4addr;
+
 		inst = handle_instance_without_section(dmctx, parent_node, ++id);
-		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)ipv4addr, inst) == DM_STOP)
+
+		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_data, inst) == DM_STOP)
 			break;
 	}
 	return 0;
@@ -61,13 +69,18 @@ static int browseHostsHostIPv4AddressInst(struct dmctx *dmctx, DMNODE *parent_no
 /*#Device.Hosts.Host.{i}.IPv6Address.{i}.!UBUS:hosts/show//hosts[@i-1].ipv6addr*/
 static int browseHostsHostIPv6AddressInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
 {
-	json_object *ip_arr = NULL, *host_obj = (json_object *)prev_data;
+	json_object *ip_arr = NULL, *host_obj = ((struct dm_data *)prev_data)->json_object;
+	struct dm_data curr_data = {0};
 	char *inst = NULL, *ipv6addr = NULL;
 	int id = 0, i = 0;
 
 	dmjson_foreach_value_in_array(host_obj, ip_arr, ipv6addr, i, 1, "ipv6addr") {
+
+		curr_data.additional_data = (void *)ipv6addr;
+
 		inst = handle_instance_without_section(dmctx, parent_node, ++id);
-		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)ipv6addr, inst) == DM_STOP)
+
+		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_data, inst) == DM_STOP)
 			break;
 	}
 	return 0;
@@ -75,16 +88,16 @@ static int browseHostsHostIPv6AddressInst(struct dmctx *dmctx, DMNODE *parent_no
 
 static int browseHostsAccessControlInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
 {
-	struct dmmap_dup *p = NULL;
+	struct dm_data *curr_data = NULL;
 	LIST_HEAD(dup_list);
 	char *inst = NULL;
 
 	synchronize_specific_config_sections_with_dmmap("hosts", "access_control", "dmmap_hosts", &dup_list);
-	list_for_each_entry(p, &dup_list, list) {
+	list_for_each_entry(curr_data, &dup_list, list) {
 
-		inst = handle_instance(dmctx, parent_node, p->dmmap_section, "access_control_instance", "access_control_alias");
+		inst = handle_instance(dmctx, parent_node, curr_data->dmmap_section, "access_control_instance", "access_control_alias");
 
-		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP)
+		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)curr_data, inst) == DM_STOP)
 			break;
 	}
 	free_dmmap_config_dup_list(&dup_list);
@@ -94,17 +107,17 @@ static int browseHostsAccessControlInst(struct dmctx *dmctx, DMNODE *parent_node
 
 static int browseHostsAccessControlScheduleInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance)
 {
-	struct uci_section *ac_s = ((struct dmmap_dup *)prev_data)->config_section;
-	struct dmmap_dup *p = NULL;
+	struct uci_section *ac_s = ((struct dm_data *)prev_data)->config_section;
+	struct dm_data *curr_data = NULL;
 	LIST_HEAD(dup_list);
 	char *inst = NULL;
 
 	synchronize_specific_config_sections_with_dmmap_eq("hosts", "ac_schedule", "dmmap_hosts", "dm_parent", section_name(ac_s), &dup_list);
-	list_for_each_entry(p, &dup_list, list) {
+	list_for_each_entry(curr_data, &dup_list, list) {
 
-		inst = handle_instance(dmctx, parent_node, p->dmmap_section, "schedule_instance", "schedule_alias");
+		inst = handle_instance(dmctx, parent_node, curr_data->dmmap_section, "schedule_instance", "schedule_alias");
 
-		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP)
+		if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)curr_data, inst) == DM_STOP)
 			break;
 	}
 	free_dmmap_config_dup_list(&dup_list);
@@ -140,7 +153,7 @@ static int delObjHostsAccessControl(char *refparam, struct dmctx *ctx, void *dat
 	switch (del_action) {
 		case DEL_INST:
 			// AccessControl Schedule section
-			uci_foreach_option_eq_safe("hosts", "ac_schedule", "dm_parent", section_name(((struct dmmap_dup *)data)->config_section), stmp, s) {
+			uci_foreach_option_eq_safe("hosts", "ac_schedule", "dm_parent", section_name(((struct dm_data *)data)->config_section), stmp, s) {
 
 				// dmmap AccessControl Schedule section
 				get_dmmap_section_of_config_section("dmmap_hosts", "ac_schedule", section_name(s), &dmmap_section);
@@ -150,10 +163,10 @@ static int delObjHostsAccessControl(char *refparam, struct dmctx *ctx, void *dat
 			}
 
 			// AccessControl section
-			dmuci_delete_by_section(((struct dmmap_dup *)data)->config_section, NULL, NULL);
+			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
 
 			// Dmmap AccessControl section
-			dmuci_delete_by_section(((struct dmmap_dup *)data)->dmmap_section, NULL, NULL);
+			dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 
 			break;
 		case DEL_ALL:
@@ -184,7 +197,7 @@ static int delObjHostsAccessControl(char *refparam, struct dmctx *ctx, void *dat
 
 static int addObjHostsAccessControlSchedule(char *refparam, struct dmctx *ctx, void *data, char **instance)
 {
-	struct uci_section *ac_s = ((struct dmmap_dup *)data)->config_section;
+	struct uci_section *ac_s = ((struct dm_data *)data)->config_section;
 	struct uci_section *ac_schedule_s = NULL, *dmmap_s = NULL;
 	char ac_schedule_name[32] = {0};
 
@@ -208,11 +221,11 @@ static int delObjHostsAccessControlSchedule(char *refparam, struct dmctx *ctx, v
 
 	switch (del_action) {
 		case DEL_INST:
-			dmuci_delete_by_section(((struct dmmap_dup *)data)->config_section, NULL, NULL);
-			dmuci_delete_by_section(((struct dmmap_dup *)data)->dmmap_section, NULL, NULL);
+			dmuci_delete_by_section(((struct dm_data *)data)->config_section, NULL, NULL);
+			dmuci_delete_by_section(((struct dm_data *)data)->dmmap_section, NULL, NULL);
 			break;
 		case DEL_ALL:
-			ac_s = ((struct dmmap_dup *)data)->config_section;
+			ac_s = ((struct dm_data *)data)->config_section;
 
 			// AccessControl Schedule section
 			uci_foreach_option_eq_safe("hosts", "ac_schedule", "dm_parent", section_name(ac_s), stmp, s) {
@@ -250,23 +263,23 @@ static int get_Hosts_AccessControlNumberOfEntries(char *refparam, struct dmctx *
 /*#Device.Hosts.Host.{i}.PhysAddress!UBUS:hosts/show//hosts[@i-1].macaddr*/
 static int get_HostsHost_PhysAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "macaddr");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "macaddr");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.IPAddress!UBUS:hosts/show//hosts[@i-1].ipaddr*/
 static int get_HostsHost_IPAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "ipaddr");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "ipaddr");
 	return 0;
 }
 
 static int get_HostsHost_DHCPClient(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	char *address_source = dmjson_get_value((json_object *)data, 1, "address_source");
+	char *address_source = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "address_source");
 
 	if (DM_STRCMP(address_source, "DHCP") == 0) {
-		char *linker = dmjson_get_value((json_object *)data, 1, "macaddr");
+		char *linker = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "macaddr");
 
 		return _bbfdm_get_references(ctx, "Device.DHCPv4.Server.Pool.*.Client.", "Chaddr", linker, value);
 	} else {
@@ -279,9 +292,9 @@ static int get_HostsHost_AssociatedDevice(char *refparam, struct dmctx *ctx, voi
 {
 	char buf[4096] = {0};
 
-	bool is1905 = dmuci_string_to_boolean(dmjson_get_value((json_object *)data, 1, "is1905"));
+	bool is1905 = dmuci_string_to_boolean(dmjson_get_value(((struct dm_data *)data)->json_object, 1, "is1905"));
 
-	char *linker = dmjson_get_value((json_object *)data, 1, is1905 ? "link_macaddr" : "macaddr");
+	char *linker = dmjson_get_value(((struct dm_data *)data)->json_object, 1, is1905 ? "link_macaddr" : "macaddr");
 
 	bbfdm_get_references(ctx, MATCH_FIRST, "Device.WiFi.AccessPoint.*.AssociatedDevice.", "MACAddress", linker, buf, sizeof(buf));
 	bbfdm_get_references(ctx, MATCH_FIRST, "Device.WiFi.DataElements.Network.Device.*.Radio.*.BSS.*.STA.", "MACAddress", linker, buf, sizeof(buf));
@@ -292,24 +305,24 @@ static int get_HostsHost_AssociatedDevice(char *refparam, struct dmctx *ctx, voi
 
 static int get_HostsHost_Layer1Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	bool is_local = dmuci_string_to_boolean(dmjson_get_value((json_object *)data, 1, "local"));
+	bool is_local = dmuci_string_to_boolean(dmjson_get_value(((struct dm_data *)data)->json_object, 1, "local"));
 
 	if (is_local) {
 		char buf[4096] = {0};
 		char *linker = NULL;
 
-		char *type = dmjson_get_value((json_object *)data, 1, "interface_type");
+		char *type = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "interface_type");
 
 		if (DM_LSTRCMP(type, "Wi-Fi") == 0) {
-			bool is1905 = dmuci_string_to_boolean(dmjson_get_value((json_object *)data, 1, "is1905"));
-			linker = dmjson_get_value((json_object *)data, 1, is1905 ? "parent_device" : "device");
+			bool is1905 = dmuci_string_to_boolean(dmjson_get_value(((struct dm_data *)data)->json_object, 1, "is1905"));
+			linker = dmjson_get_value(((struct dm_data *)data)->json_object, 1, is1905 ? "parent_device" : "device");
 
 			struct uci_section *iface_s = get_dup_section_in_config_opt("wireless", "wifi-iface", "ifname", linker);
 			dmuci_get_value_by_section_string(iface_s, "device", &linker);
 
 			bbfdm_get_references(ctx, MATCH_FIRST, "Device.WiFi.Radio.", "Name", linker, buf, sizeof(buf));
 		} else {
-			linker = dmjson_get_value((json_object *)data, 1, "device");
+			linker = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "device");
 			struct uci_section *device_s = get_dup_section_in_config_opt("network", "device", "name", linker);
 			dmuci_get_value_by_section_string(device_s, "ifname", &linker);
 
@@ -326,7 +339,7 @@ static int get_HostsHost_Layer1Interface(char *refparam, struct dmctx *ctx, void
 
 static int get_HostsHost_Layer3Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	char *linker = dmjson_get_value((json_object *)data, 1, "network");
+	char *linker = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "network");
 
 	return _bbfdm_get_references(ctx, "Device.IP.Interface.", "Name", linker, value);
 }
@@ -334,14 +347,14 @@ static int get_HostsHost_Layer3Interface(char *refparam, struct dmctx *ctx, void
 /*#Device.Hosts.Host.{i}.InterfaceType!UBUS:hosts/show//hosts[@i-1].interface_type*/
 static int get_HostsHost_InterfaceType(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "interface_type");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "interface_type");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.HostName!UBUS:hosts/show//hosts[@i-1].hostname*/
 static int get_HostsHost_HostName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "hostname");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "hostname");
 
 	if (DM_STRCMP(*value, "*") == 0)
 		*value = "";
@@ -352,14 +365,14 @@ static int get_HostsHost_HostName(char *refparam, struct dmctx *ctx, void *data,
 /*#Device.Hosts.Host.{i}.Active!UBUS:hosts/show//hosts[@i-1].active*/
 static int get_HostsHost_Active(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "active");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "active");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.ActiveLastChange!UBUS:hosts/show//hosts[@i-1].active_last_change*/
 static int get_HostsHost_ActiveLastChange(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 1, "active_last_change");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 1, "active_last_change");
 	return 0;
 }
 
@@ -382,58 +395,58 @@ static int get_HostsHost_IPv6AddressNumberOfEntries(char *refparam, struct dmctx
 /*#Device.Hosts.Host.{i}.IPv4Address.{i}.IPAddress!UBUS:hosts/show//hosts[@i-1].ipv4addr[@i-1]*/
 static int get_HostsHostIPv4Address_IPAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = (char *)data;
+	*value = (char *)((struct dm_data *)data)->additional_data;
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.IPv6Address.{i}.IPAddress!UBUS:hosts/show//hosts[@i-1].ipv6addr[@i-1]*/
 static int get_HostsHostIPv6Address_IPAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = (char *)data;
+	*value = (char *)((struct dm_data *)data)->additional_data;
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.WANStats.BytesSent!UBUS:hosts/show//hosts[@i-1].stats.tx_bytes*/
 static int get_HostsHostWANStats_BytesSent(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 2, "stats", "tx_bytes");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 2, "stats", "tx_bytes");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.WANStats.BytesReceived!UBUS:hosts/show//hosts[@i-1].stats.rx_bytes*/
 static int get_HostsHostWANStats_BytesReceived(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 2, "stats", "rx_bytes");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 2, "stats", "rx_bytes");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.WANStats.PacketsSent!UBUS:hosts/show//hosts[@i-1].stats.tx_packets*/
 static int get_HostsHostWANStats_PacketsSent(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 2, "stats", "tx_packets");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 2, "stats", "tx_packets");
 	return 0;
 }
 
 /*#Device.Hosts.Host.{i}.WANStats.PacketsReceived!UBUS:hosts/show//hosts[@i-1].stats.rx_packets*/
 static int get_HostsHostWANStats_PacketsReceived(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmjson_get_value((json_object *)data, 2, "stats", "rx_packets");
+	*value = dmjson_get_value(((struct dm_data *)data)->json_object, 2, "stats", "rx_packets");
 	return 0;
 }
 
 static int get_HostsAccessControl_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	return bbf_get_alias(ctx, ((struct dmmap_dup *)data)->dmmap_section, "access_control_alias", instance, value);
+	return bbf_get_alias(ctx, ((struct dm_data *)data)->dmmap_section, "access_control_alias", instance, value);
 }
 
 static int set_HostsAccessControl_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
 {
-	return bbf_set_alias(ctx, ((struct dmmap_dup *)data)->dmmap_section, "access_control_alias", instance, value);
+	return bbf_set_alias(ctx, ((struct dm_data *)data)->dmmap_section, "access_control_alias", instance, value);
 }
 
 static int get_HostsAccessControl_PhysAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "macaddr", value);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "macaddr", value);
 	return 0;
 }
 
@@ -445,7 +458,7 @@ static int set_HostsAccessControl_PhysAddress(char *refparam, struct dmctx *ctx,
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "macaddr", value);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "macaddr", value);
 			break;
 	}
 	return 0;
@@ -453,7 +466,7 @@ static int set_HostsAccessControl_PhysAddress(char *refparam, struct dmctx *ctx,
 
 static int get_HostsAccessControl_HostName(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "host", value);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "host", value);
 	return 0;
 }
 
@@ -465,7 +478,7 @@ static int set_HostsAccessControl_HostName(char *refparam, struct dmctx *ctx, vo
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "host", value);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "host", value);
 			break;
 	}
 	return 0;
@@ -473,7 +486,7 @@ static int set_HostsAccessControl_HostName(char *refparam, struct dmctx *ctx, vo
 
 static int get_HostsAccessControl_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmuci_get_value_by_section_fallback_def(((struct dmmap_dup *)data)->config_section, "enable", "0");
+	*value = dmuci_get_value_by_section_fallback_def(((struct dm_data *)data)->config_section, "enable", "0");
 	return 0;
 }
 
@@ -488,7 +501,7 @@ static int set_HostsAccessControl_Enable(char *refparam, struct dmctx *ctx, void
 			break;
 		case VALUESET:
 			string_to_bool(value, &b);
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "enable", b ? "1" : "0");
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "enable", b ? "1" : "0");
 			break;
 	}
 	return 0;
@@ -496,7 +509,7 @@ static int set_HostsAccessControl_Enable(char *refparam, struct dmctx *ctx, void
 
 static int get_HostsAccessControl_AccessPolicy(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "access_policy", value);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "access_policy", value);
 	return 0;
 }
 
@@ -508,7 +521,7 @@ static int set_HostsAccessControl_AccessPolicy(char *refparam, struct dmctx *ctx
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "access_policy", value);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "access_policy", value);
 			break;
 	}
 	return 0;
@@ -523,17 +536,17 @@ static int get_HostsAccessControl_ScheduleNumberOfEntries(char *refparam, struct
 
 static int get_HostsAccessControlSchedule_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	return bbf_get_alias(ctx, ((struct dmmap_dup *)data)->dmmap_section, "schedule_alias", instance, value);
+	return bbf_get_alias(ctx, ((struct dm_data *)data)->dmmap_section, "schedule_alias", instance, value);
 }
 
 static int set_HostsAccessControlSchedule_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action)
 {
-	return bbf_set_alias(ctx, ((struct dmmap_dup *)data)->dmmap_section, "schedule_alias", instance, value);
+	return bbf_set_alias(ctx, ((struct dm_data *)data)->dmmap_section, "schedule_alias", instance, value);
 }
 
 static int get_HostsAccessControlSchedule_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	*value = dmuci_get_value_by_section_fallback_def(((struct dmmap_dup *)data)->config_section, "enable", "0");
+	*value = dmuci_get_value_by_section_fallback_def(((struct dm_data *)data)->config_section, "enable", "0");
 	return 0;
 }
 
@@ -548,7 +561,7 @@ static int set_HostsAccessControlSchedule_Enable(char *refparam, struct dmctx *c
 			break;
 		case VALUESET:
 			string_to_bool(value, &b);
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "enable", b ? "1" : "0");
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "enable", b ? "1" : "0");
 			break;
 	}
 	return 0;
@@ -559,7 +572,7 @@ static int get_HostsAccessControlSchedule_Day(char *refparam, struct dmctx *ctx,
 	struct uci_list *days_list = NULL;
 	char buf[64] = {0};
 
-	dmuci_get_value_by_section_list(((struct dmmap_dup *)data)->config_section, "day", &days_list);
+	dmuci_get_value_by_section_list(((struct dm_data *)data)->config_section, "day", &days_list);
 
 	if (days_list != NULL) {
 		struct uci_element *e = NULL;
@@ -595,9 +608,9 @@ static int set_HostsAccessControlSchedule_Day(char *refparam, struct dmctx *ctx,
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "day", "");
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "day", "");
 			for (pch = strtok_r(value_buf, ",", &spch); pch != NULL; pch = strtok_r(NULL, ",", &spch))
-				dmuci_add_list_value_by_section(((struct dmmap_dup *)data)->config_section, "day", pch);
+				dmuci_add_list_value_by_section(((struct dm_data *)data)->config_section, "day", pch);
 			break;
 	}
 	return 0;
@@ -605,7 +618,7 @@ static int set_HostsAccessControlSchedule_Day(char *refparam, struct dmctx *ctx,
 
 static int get_HostsAccessControlSchedule_StartTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "start_time", value);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "start_time", value);
 	return 0;
 }
 
@@ -617,7 +630,7 @@ static int set_HostsAccessControlSchedule_StartTime(char *refparam, struct dmctx
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "start_time", value);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "start_time", value);
 			break;
 	}
 	return 0;
@@ -625,7 +638,7 @@ static int set_HostsAccessControlSchedule_StartTime(char *refparam, struct dmctx
 
 static int get_HostsAccessControlSchedule_Duration(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value)
 {
-	dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "duration", value);
+	dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "duration", value);
 	return 0;
 }
 
@@ -637,7 +650,7 @@ static int set_HostsAccessControlSchedule_Duration(char *refparam, struct dmctx
 				return FAULT_9007;
 			break;
 		case VALUESET:
-			dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "duration", value);
+			dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "duration", value);
 			break;
 	}
 	return 0;
-- 
GitLab