From 008baff08e4485b9ba2c661eabddcec878d0180f Mon Sep 17 00:00:00 2001 From: Amin Ben Romdhane Date: Wed, 8 Feb 2023 07:30:35 +0000 Subject: [PATCH] T#9712: Update Wifi handling with mapcontroller --- dmtree/tr181/wifi.c | 240 +++++++++++++++++----------- docs/guide/wireless_easymesh.md | 11 ++ gitlab-ci/setup.sh | 1 + test/cmocka/functional_test_bbfd.c | 2 +- test/files/etc/config/mapcontroller | 25 +-- test/files/etc/config/wireless | 22 ++- 6 files changed, 181 insertions(+), 120 deletions(-) create mode 100644 docs/guide/wireless_easymesh.md diff --git a/dmtree/tr181/wifi.c b/dmtree/tr181/wifi.c index 7f9f5ba6..14d5be97 100644 --- a/dmtree/tr181/wifi.c +++ b/dmtree/tr181/wifi.c @@ -271,10 +271,9 @@ static char *get_default_wpa_key() return wpakey; } -struct uci_section *find_mapcontroller_ssid_section(struct uci_section *wireless_ssid_s) +struct uci_section *find_mapcontroller_section(struct uci_section *wireless_s) { struct uci_section *s = NULL; - char *multi_ap = NULL; char *device = NULL; char *ssid = NULL; char *band = NULL; @@ -282,15 +281,11 @@ struct uci_section *find_mapcontroller_ssid_section(struct uci_section *wireless if (!file_exists("/etc/config/mapcontroller")) return NULL; - dmuci_get_value_by_section_string(wireless_ssid_s, "multi_ap", &multi_ap); - if (DM_LSTRCMP(multi_ap, "2") != 0) - return NULL; - - dmuci_get_value_by_section_string(wireless_ssid_s, "ssid", &ssid); - dmuci_get_value_by_section_string(wireless_ssid_s, "device", &device); + dmuci_get_value_by_section_string(wireless_s, "ssid", &ssid); + dmuci_get_value_by_section_string(wireless_s, "device", &device); band = get_radio_option_nocache(device, "band"); - uci_foreach_option_eq("mapcontroller", "ap", "type", "fronthaul", s) { + uci_foreach_sections("mapcontroller", "ap", s) { char *curr_ssid = NULL; char *curr_band = NULL; @@ -1108,21 +1103,31 @@ static int get_wifi_enable(char *refparam, struct dmctx *ctx, void *data, char * static int set_wifi_enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *map_ssid_s = NULL; + struct uci_section *map_s = NULL; + char *multi_ap = NULL; bool b; + map_s = find_mapcontroller_section((((struct wifi_ssid_args *)data)->sections)->config_section); + switch (action) { case VALUECHECK: if (dm_validate_boolean(value)) return FAULT_9007; + + dmuci_get_value_by_section_string((((struct wifi_ssid_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: string_to_bool(value, &b); + + // wireless config: Update disabled option dmuci_set_value_by_section((((struct wifi_ssid_args *)data)->sections)->config_section, "disabled", b ? "0" : "1"); - // mapcontroller config: Update the corresponding fronthaul ssid section if exist - map_ssid_s = find_mapcontroller_ssid_section((((struct wifi_ssid_args *)data)->sections)->config_section); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "enabled", b ? "1" : "0"); + // mapcontroller config: Update the corresponding ap section if exists + if (map_s) + dmuci_set_value_by_section(map_s, "enabled", b ? "1" : "0"); return 0; } @@ -1146,21 +1151,29 @@ static int get_wlan_ssid(char *refparam, struct dmctx *ctx, void *data, char *in static int set_wlan_ssid(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *map_ssid_s = NULL; + struct uci_section *map_s = NULL; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_ssid_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 32, NULL, NULL)) return FAULT_9007; + + dmuci_get_value_by_section_string((((struct wifi_ssid_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: - // mapcontroller config: Update the corresponding fronthaul ssid section if exist - map_ssid_s = find_mapcontroller_ssid_section((((struct wifi_ssid_args *)data)->sections)->config_section); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "ssid", value); - // wireless config: Update ssid option dmuci_set_value_by_section((((struct wifi_ssid_args *)data)->sections)->config_section, "ssid", value); + // mapcontroller config: Update the corresponding ap section if exists + if (map_s) + dmuci_set_value_by_section(map_s, "ssid", value); + return 0; } return 0; @@ -1818,31 +1831,26 @@ static bool is_different_group(const char *mode1, const char *mode2) } -static void set_security_mode(struct uci_section *section, char *value, bool is_endpoint) +static void set_security_mode(struct uci_section *wireless_s, struct uci_section *map_s, char *value) { - struct uci_section *map_ssid_s = NULL; char *wpa_key = NULL; - char *mode = get_security_mode(section); - - // mapcontroller config: find the corresponding fronthaul ssid section if exist - if (!is_endpoint) - map_ssid_s = find_mapcontroller_ssid_section(section); + char *mode = get_security_mode(wireless_s); // Use default key only in case the key is not set - dmuci_get_value_by_section_string(section, "key", &wpa_key); + dmuci_get_value_by_section_string(wireless_s, "key", &wpa_key); if (DM_STRLEN(wpa_key) == 0) wpa_key = get_default_wpa_key(); if (mode && DM_STRCMP(value, mode) != 0) { // Only reset the wlan key section if its belongs to different group if (is_different_group(value, mode)) - reset_wlan(section); - dmuci_set_value_by_section(section, "ieee80211w", "0"); + reset_wlan(wireless_s); + dmuci_set_value_by_section(wireless_s, "ieee80211w", "0"); if (DM_LSTRCMP(value, "None") == 0) { - dmuci_set_value_by_section(section, "encryption", "none"); + dmuci_set_value_by_section(wireless_s, "encryption", "none"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "none"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "none"); } else if (DM_LSTRCMP(value, "WEP-64") == 0) { char key[16], buf[11]; int i; @@ -1850,12 +1858,12 @@ static void set_security_mode(struct uci_section *section, char *value, bool is_ generate_wep_key("iopsys", buf, sizeof(buf)); for (i = 0; i < 4; i++) { snprintf(key, sizeof(key), "key%d", i + 1); - dmuci_set_value_by_section(section, key, buf); + dmuci_set_value_by_section(wireless_s, key, buf); } - dmuci_set_value_by_section(section, "encryption", "wep-open"); - dmuci_set_value_by_section(section, "key", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "wep-open"); + dmuci_set_value_by_section(wireless_s, "key", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "none"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "none"); } else if (DM_LSTRCMP(value, "WEP-128") == 0) { char key[16], buf[27]; int i; @@ -1863,71 +1871,71 @@ static void set_security_mode(struct uci_section *section, char *value, bool is_ generate_wep_key("iopsys_wep128", buf, sizeof(buf)); for (i = 0; i < 4; i++) { snprintf(key, sizeof(key), "key%d", i + 1); - dmuci_set_value_by_section(section, key, buf); + dmuci_set_value_by_section(wireless_s, key, buf); } - dmuci_set_value_by_section(section, "encryption", "wep-open"); - dmuci_set_value_by_section(section, "key", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "wep-open"); + dmuci_set_value_by_section(wireless_s, "key", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "none"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "none"); } else if (DM_LSTRCMP(value, "WPA-Personal") == 0) { - dmuci_set_value_by_section(section, "encryption", "psk"); - dmuci_set_value_by_section(section, "key", wpa_key); - dmuci_set_value_by_section(section, "wpa_group_rekey", "3600"); + dmuci_set_value_by_section(wireless_s, "encryption", "psk"); + dmuci_set_value_by_section(wireless_s, "key", wpa_key); + dmuci_set_value_by_section(wireless_s, "wpa_group_rekey", "3600"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "psk"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", wpa_key); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "psk"); + if (map_s) dmuci_set_value_by_section(map_s, "key", wpa_key); } else if (DM_LSTRCMP(value, "WPA-Enterprise") == 0) { - dmuci_set_value_by_section(section, "encryption", "wpa"); - dmuci_set_value_by_section(section, "auth_port", "1812"); + dmuci_set_value_by_section(wireless_s, "encryption", "wpa"); + dmuci_set_value_by_section(wireless_s, "auth_port", "1812"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "wpa"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "wpa"); } else if (DM_LSTRCMP(value, "WPA2-Personal") == 0) { - dmuci_set_value_by_section(section, "encryption", "psk2"); - dmuci_set_value_by_section(section, "key", wpa_key); - dmuci_set_value_by_section(section, "wpa_group_rekey", "3600"); - dmuci_set_value_by_section(section, "wps_pushbutton", "1"); - dmuci_set_value_by_section(section, "ieee80211w", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "psk2"); + dmuci_set_value_by_section(wireless_s, "key", wpa_key); + dmuci_set_value_by_section(wireless_s, "wpa_group_rekey", "3600"); + dmuci_set_value_by_section(wireless_s, "wps_pushbutton", "1"); + dmuci_set_value_by_section(wireless_s, "ieee80211w", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "psk2"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", wpa_key); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "psk2"); + if (map_s) dmuci_set_value_by_section(map_s, "key", wpa_key); } else if (DM_LSTRCMP(value, "WPA2-Enterprise") == 0) { - dmuci_set_value_by_section(section, "encryption", "wpa2"); - dmuci_set_value_by_section(section, "auth_port", "1812"); - dmuci_set_value_by_section(section, "ieee80211w", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "wpa2"); + dmuci_set_value_by_section(wireless_s, "auth_port", "1812"); + dmuci_set_value_by_section(wireless_s, "ieee80211w", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "wpa2"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "wpa2"); } else if (DM_LSTRCMP(value, "WPA-WPA2-Personal") == 0) { - dmuci_set_value_by_section(section, "encryption", "psk-mixed"); - dmuci_set_value_by_section(section, "key", wpa_key); - dmuci_set_value_by_section(section, "wpa_group_rekey", "3600"); - dmuci_set_value_by_section(section, "wps_pushbutton", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "psk-mixed"); + dmuci_set_value_by_section(wireless_s, "key", wpa_key); + dmuci_set_value_by_section(wireless_s, "wpa_group_rekey", "3600"); + dmuci_set_value_by_section(wireless_s, "wps_pushbutton", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "psk-mixed"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", wpa_key); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "psk-mixed"); + if (map_s) dmuci_set_value_by_section(map_s, "key", wpa_key); } else if (DM_LSTRCMP(value, "WPA-WPA2-Enterprise") == 0) { - dmuci_set_value_by_section(section, "encryption", "wpa-mixed"); - dmuci_set_value_by_section(section, "auth_port", "1812"); + dmuci_set_value_by_section(wireless_s, "encryption", "wpa-mixed"); + dmuci_set_value_by_section(wireless_s, "auth_port", "1812"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "wpa-mixed"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "wpa-mixed"); } else if (DM_LSTRCMP(value, "WPA3-Personal") == 0) { - dmuci_set_value_by_section(section, "encryption", "sae"); - dmuci_set_value_by_section(section, "key", wpa_key); - dmuci_set_value_by_section(section, "ieee80211w", "2"); + dmuci_set_value_by_section(wireless_s, "encryption", "sae"); + dmuci_set_value_by_section(wireless_s, "key", wpa_key); + dmuci_set_value_by_section(wireless_s, "ieee80211w", "2"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "sae"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", wpa_key); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "sae"); + if (map_s) dmuci_set_value_by_section(map_s, "key", wpa_key); } else if (DM_LSTRCMP(value, "WPA3-Enterprise") == 0) { - dmuci_set_value_by_section(section, "encryption", "wpa3"); - dmuci_set_value_by_section(section, "auth_port", "1812"); + dmuci_set_value_by_section(wireless_s, "encryption", "wpa3"); + dmuci_set_value_by_section(wireless_s, "auth_port", "1812"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "wpa"); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "wpa"); } else if (DM_LSTRCMP(value, "WPA3-Personal-Transition") == 0) { - dmuci_set_value_by_section(section, "encryption", "sae-mixed"); - dmuci_set_value_by_section(section, "key", wpa_key); - dmuci_set_value_by_section(section, "ieee80211w", "1"); + dmuci_set_value_by_section(wireless_s, "encryption", "sae-mixed"); + dmuci_set_value_by_section(wireless_s, "key", wpa_key); + dmuci_set_value_by_section(wireless_s, "ieee80211w", "1"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "encryption", "sae-mixed"); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", wpa_key); + if (map_s) dmuci_set_value_by_section(map_s, "encryption", "sae-mixed"); + if (map_s) dmuci_set_value_by_section(map_s, "key", wpa_key); } } } @@ -1941,7 +1949,11 @@ static int get_access_point_security_modes(char *refparam, struct dmctx *ctx, vo static int set_access_point_security_modes(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { + struct uci_section *map_s = NULL; char *supported_modes = NULL; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_acp_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: @@ -1955,9 +1967,13 @@ static int set_access_point_security_modes(char *refparam, struct dmctx *ctx, vo if (!value_exits_in_str_list(supported_modes, ",", value)) return FAULT_9007; + dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: - set_security_mode((((struct wifi_acp_args *)data)->sections)->config_section, value, false); + set_security_mode((((struct wifi_acp_args *)data)->sections)->config_section, map_s, value); return 0; } return 0; @@ -1965,12 +1981,21 @@ static int set_access_point_security_modes(char *refparam, struct dmctx *ctx, vo static int set_access_point_security_wepkey(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { + struct uci_section *map_s = NULL; char *encryption; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_acp_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: if (dm_validate_hexBinary(value, RANGE_ARGS{{"5","5"},{"13","13"}}, 2)) return FAULT_9007; + + dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "encryption", &encryption); @@ -1979,7 +2004,13 @@ static int set_access_point_security_wepkey(char *refparam, struct dmctx *ctx, v dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "key", &key_index); snprintf(buf, sizeof(buf),"key%s", key_index ? key_index : "1"); + + // wireless config: Update key option dmuci_set_value_by_section((((struct wifi_acp_args *)data)->sections)->config_section, buf, value); + + // mapcontroller config: Update the corresponding ap section if exists + if (map_s) + dmuci_set_value_by_section(map_s, buf, value); } return 0; } @@ -1988,22 +2019,32 @@ static int set_access_point_security_wepkey(char *refparam, struct dmctx *ctx, v static int set_access_point_security_shared_key(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *map_ssid_s = NULL; + struct uci_section *map_s = NULL; char *encryption = NULL; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_ssid_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: if (dm_validate_hexBinary(value, RANGE_ARGS{{NULL,"32"}}, 1)) return FAULT_9007; + + dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "encryption", &encryption); if (DM_LSTRSTR(encryption, "psk")) { + + // wireless config: Update key option dmuci_set_value_by_section((((struct wifi_acp_args *)data)->sections)->config_section, "key", value); - // mapcontroller config: Update the corresponding fronthaul ssid section if exist - map_ssid_s = find_mapcontroller_ssid_section((((struct wifi_acp_args *)data)->sections)->config_section); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", value); + // mapcontroller config: Update the corresponding ap section if exists + if (map_s) + dmuci_set_value_by_section(map_s, "key", value); } return 0; @@ -2057,22 +2098,32 @@ static int set_access_point_security_rekey_interval(char *refparam, struct dmctx /*#Device.WiFi.AccessPoint.{i}.Security.SAEPassphrase!UCI:wireless/wifi-iface,@i-1/key*/ static int set_WiFiAccessPointSecurity_SAEPassphrase(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *map_ssid_s = NULL; + struct uci_section *map_s = NULL; char *encryption = NULL; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_ssid_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, -1, NULL, NULL)) return FAULT_9007; + + dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + break; case VALUESET: dmuci_get_value_by_section_string((((struct wifi_acp_args *)data)->sections)->config_section, "encryption", &encryption); if (DM_LSTRSTR(encryption, "sae")) { + + // wireless config: Update key option dmuci_set_value_by_section((((struct wifi_acp_args *)data)->sections)->config_section, "key", value); - // mapcontroller config: Update the corresponding fronthaul ssid section if exist - map_ssid_s = find_mapcontroller_ssid_section((((struct wifi_acp_args *)data)->sections)->config_section); - if (map_ssid_s) dmuci_set_value_by_section(map_ssid_s, "key", value); + // mapcontroller config: Update the corresponding ap section if exists + if (map_s) + dmuci_set_value_by_section(map_s, "key", value); } break; } @@ -2625,7 +2676,11 @@ static int get_WiFiEndPointProfileSecurity_ModeEnabled(char *refparam, struct dm static int set_WiFiEndPointProfileSecurity_ModeEnabled(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { + struct uci_section *map_s = NULL; char *supported_modes = NULL; + char *multi_ap = NULL; + + map_s = find_mapcontroller_section((((struct wifi_ssid_args *)data)->sections)->config_section); switch (action) { case VALUECHECK: @@ -2639,9 +2694,13 @@ static int set_WiFiEndPointProfileSecurity_ModeEnabled(char *refparam, struct dm if (!value_exits_in_str_list(supported_modes, ",", value)) return FAULT_9007; + dmuci_get_value_by_section_string((struct uci_section *)data, "multi_ap", &multi_ap); + if (DM_STRLEN(multi_ap) && !map_s) + return FAULT_9007; + return 0; case VALUESET: - set_security_mode((struct uci_section *)data, value, true); + set_security_mode((struct uci_section *)data, map_s, value); return 0; } return 0; @@ -2989,8 +3048,10 @@ static int set_neighboring_wifi_diagnostics_diagnostics_state(char *refparam, st case VALUESET: if (file_exists("/etc/bbfdm/dmmap/dmmap_wifi_neighboring")) remove("/etc/bbfdm/dmmap/dmmap_wifi_neighboring"); + dmuci_add_section_bbfdm("dmmap_wifi_neighboring", "diagnostic_status", &s); dmuci_set_value_by_section(s, "DiagnosticsState", value); + if (DM_LSTRCMP(value, "Requested") == 0) { bbf_set_end_session_flag(ctx, BBF_END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC); } @@ -5788,6 +5849,7 @@ static int operate_WiFi_NeighboringWiFiDiagnostic(char *refparam, struct dmctx * dmuci_set_value_by_section(dmmap_s, "band", frequency[1]); dmuci_set_value_by_section(dmmap_s, "noise", noise[1]); } + dmasprintf(&ssid[0], "Result.%d.SSID", index); dmasprintf(&bssid[0], "Result.%d.BSSID", index); dmasprintf(&channel[0], "Result.%d.Channel", index); diff --git a/docs/guide/wireless_easymesh.md b/docs/guide/wireless_easymesh.md new file mode 100644 index 00000000..8ef6c50e --- /dev/null +++ b/docs/guide/wireless_easymesh.md @@ -0,0 +1,11 @@ +# Wireless configuration using TR-181 + +The purpose of this document is to explain the datamodel handling/mapping for the wireless configuration using data model parameters. + +Currently in a CPE, wireless configuration can be managed using TR-181 or if the CPE is Easymesh capable then its managed by multi-ap-controller present in the network. As per TR-181 Easymesh network represented by 'Device.WiFi.DataElements.' datamodel object, whereas standalone wireless parameters available in 'Device.WiFi.{SSID,AccessPoint,Radio,EndPoint}' datamodel objects. + +Easymesh multi-ap-controller configuration stored in `mapcontroller` uci, but it also configures the same wireless uci which is used by standalone wireless datamodel object. The Easymesh wireless access-point configuration can easily be identified as they have a additional uci option called 'multi_ap', this uci option defines the fronthaul/backhaul behaviour for the access-point. + +TR-181 wifi definition bit open for the Easymesh enabled cpe, to simplify the same in our implementation, Wifi standalone objects maps 1-to-1 with wireless uci, so they will show non-multi-ap access-points, fronthaul-access-points and backhaul-access-points. Any update using standalone wireless objects specifically in SSID, Password, EncryptionType and Enable parameters automatically synced by datamodel in `mapcontroller` uci as well in case of Easymesh device for 'multi_ap' access-points. + +> Note: If 'multi_ap' option is defined in wireless uci and its corresponding section not present in `mapcontroller` uci, then an error will be returned when the user tries to modify any configuration for those wireless access-point. diff --git a/gitlab-ci/setup.sh b/gitlab-ci/setup.sh index e650b4c2..ac4b28c3 100755 --- a/gitlab-ci/setup.sh +++ b/gitlab-ci/setup.sh @@ -12,5 +12,6 @@ cp -r ./test/files/var/* /var/ cp -r ./test/files/tmp/* /tmp/ cp -r ./test/files/lib/* /lib/ +apt install -y iproute2 ls /etc/config/ diff --git a/test/cmocka/functional_test_bbfd.c b/test/cmocka/functional_test_bbfd.c index 0706d427..c1d429e7 100644 --- a/test/cmocka/functional_test_bbfd.c +++ b/test/cmocka/functional_test_bbfd.c @@ -1146,7 +1146,7 @@ static void test_api_bbfdm_add_del_library_object(void **state) // check the new instance assert_non_null(ctx->addobj_instance); - assert_string_equal(ctx->addobj_instance, "3"); + assert_string_equal(ctx->addobj_instance, "4"); // delete object ==> expected "0" error fault = dm_entry_param_method(ctx, CMD_DEL_OBJECT, "Device.WiFi.SSID.2.", "test_key", NULL); diff --git a/test/files/etc/config/mapcontroller b/test/files/etc/config/mapcontroller index bf737242..5f899cc7 100644 --- a/test/files/etc/config/mapcontroller +++ b/test/files/etc/config/mapcontroller @@ -11,19 +11,10 @@ config controller 'controller' config interface 'lan' -config ap - option band '5' - option ssid 'iopsysWrt-44D43771B410' - option encryption 'sae-mixed' - option key 'PCTQ44TNVKK5NU' - option vid '1' - option type 'fronthaul' - option network 'lan' - config ap option band '2' - option ssid 'iopsysWrt-44D43771B410' - option encryption 'sae-mixed' + option ssid 'iopsysWrt-44D43771B810' + option encryption 'MPUEO3L7WHJ45P' option key 'PCTQ44TNVKK5NU' option vid '1' option type 'fronthaul' @@ -31,23 +22,13 @@ config ap config ap option band '5' - option ssid 'MAP-44D43771B410-BH-5GHz' + option ssid 'MAP-44D43771B810-BH-5GHz' option encryption 'sae' option type 'backhaul' option vid '1' option network 'lan' option key '029be741b7ff7b4caf9b1b3c48c56030fed877c22f5031bc9cf0132d1672c2c' -config ap - option band '2' - option ssid 'MAP-44D43771B410-BH-2.4GHz' - option encryption 'sae' - option type 'backhaul' - list disallow_bsta '0' - option vid '1' - option network 'lan' - option key '029be741b7ff7b4caf9b1b3c48c56030fed877c22f5031bc9cf0132d1672c2c' - config node option agent_id '46:d4:37:71:b4:10' option primary_vid '55' diff --git a/test/files/etc/config/wireless b/test/files/etc/config/wireless index d944a3d5..1937ae7f 100644 --- a/test/files/etc/config/wireless +++ b/test/files/etc/config/wireless @@ -7,16 +7,25 @@ config wifi-device 'test1' option apsta '0' option phy 'phy0' +config wifi-iface 'no_mp_test1' + option device 'test1' + option network 'lan' + option mode 'ap' + option ifname 'test1' + option encryption 'psk2' + option wps_pushbutton '1' + option ieee80211k '1' + option ieee80211v '1' + option bss_transition '1' + option ssid 'NON-MULTI-AP-TEST' + config wifi-iface 'default_test1' option device 'test1' option network 'lan' option mode 'ap' option ifname 'test1' - option ssid 'iopsysWrt-44D43771B810' - option uuid 'd0e411a7-57d2-4998-82ea-44D43771B810' + option ssid 'MAP-44D43771B810-BH-5GHz' option encryption 'psk2' - option key 'MPUEO3L7WHJ45P' - option wps '1' option wps_pushbutton '1' option ieee80211k '1' option ieee80211v '1' @@ -38,13 +47,10 @@ config wifi-iface 'default_test2' option mode 'ap' option ifname 'test2' option ssid 'iopsysWrt-44D43771B810' - option uuid '3077d261-e293-461e-8a59-44D43771B810' option encryption 'psk2' option key 'MPUEO3L7WHJ45P' - option wps '1' option wps_pushbutton '1' option ieee80211k '1' option ieee80211v '1' option bss_transition '1' - option multi_ap '3' - \ No newline at end of file + option multi_ap '2'