From b0cb62533fe5a01b6d3f15e7f3ce1270435a0372 Mon Sep 17 00:00:00 2001 From: Anis Ellouze Date: Fri, 20 Nov 2015 18:51:29 +0100 Subject: [PATCH] fix issue #8187 : TR-069: Wireless guest network not in LANDevice tree -> fix also the management of wlanconfiguration instance --- dm/dmtree/landevice.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/dm/dmtree/landevice.c b/dm/dmtree/landevice.c index c514a25..502352c 100644 --- a/dm/dmtree/landevice.c +++ b/dm/dmtree/landevice.c @@ -226,7 +226,6 @@ int get_lan_dns(char *refparam, struct dmctx *ctx, char **value) dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); DM_ASSERT(res, *value = ""); json_parse_array(res, "dns-server", -1, NULL, value); - TRACE("returned value after parse is %s\n", *value); if ((*value)[0] == '\0') { dmuci_get_value_by_section_string(lanargs->ldlansection, "dns", value); *value = dmstrdup(*value); // MEM WILL BE FREED IN DMMEMCLEAN @@ -269,7 +268,6 @@ int get_lan_dhcp_server_configurable(char *refparam, struct dmctx *ctx, char **v struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; uci_foreach_option_eq("dhcp", "dhcp", "interface", section_name(lanargs->ldlansection), s) { - TRACE("section found s name %s section type is %s \n\n", s->e.name, s->type); *value = "1"; return 0; } @@ -359,7 +357,7 @@ enum enum_lanip_interval_address { }; int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option) -{//TODO , check with issue in the bug tracker of inteno #7467 +{ json_object *res; char *ipaddr = "" , *mask = "", *start , *limit; struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args; @@ -370,7 +368,6 @@ int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option) *value = ""; uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { - TRACE("section start found \n"); dmuci_get_value_by_section_string(s, "start", &start); if (option == LANIP_INTERVAL_END) dmuci_get_value_by_section_string(s, "limit", &limit); @@ -385,7 +382,6 @@ int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option) if (res) json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL); } - TRACE("start vaut ipaddr %s \n", ipaddr); if (ipaddr[0] == '\0') { goto end; } @@ -400,7 +396,6 @@ int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option) mask = cidr2netmask(atoi(mask)); } } - TRACE("start vaut mask %s \n", mask); if (mask[0] == '\0') { mask = "255.255.255.0"; } @@ -418,19 +413,19 @@ end: } int get_lan_dhcp_interval_address_start(char *refparam, struct dmctx *ctx, char **value) -{//TODO , check with issue in the bug tracker of inteno #7467 +{ int ret = get_lan_dhcp_interval_address(ctx, value, LANIP_INTERVAL_START); return ret; } int get_lan_dhcp_interval_address_end(char *refparam, struct dmctx *ctx, char **value) -{//TODO , check with issue in the bug tracker of inteno #7467 +{ int ret = get_lan_dhcp_interval_address(ctx, value, LANIP_INTERVAL_END); return ret; } int set_lan_dhcp_address_start(char *refparam, struct dmctx *ctx, int action, char *value) -{//TODO , check with issue in the bug tracker of inteno #7467 +{ json_object *res; char *ipaddr = "", *mask = "", *start , *limit, buf[16]; struct uci_section *s = NULL; @@ -489,7 +484,6 @@ int set_lan_dhcp_address_end(char *refparam, struct dmctx *ctx, int action, char return 0; case VALUESET: uci_foreach_option_eq("dhcp", "dhcp", "interface", lan_name, s) { - TRACE("section start found \n"); dmuci_get_value_by_section_string(s, "start", &start); break; } @@ -622,7 +616,6 @@ int get_lan_dhcp_subnetmask(char *refparam, struct dmctx *ctx, char **value) } if (s == NULL || (*value)[0] == '\0') dmuci_get_value_by_section_string(lanargs->ldlansection, "netmask", value); - TRACE("next value is %s \n", *value); if ((*value)[0] == '\0') { dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res); DM_ASSERT(res, *value = ""); @@ -813,14 +806,16 @@ int filter_lan_device_interface(struct uci_section *s, void *v) { char *ifname = NULL; char *phy_itf = NULL, *phy_itf_local; - char *pch, *spch, *ftype; + char *pch, *spch, *ftype, *islan; dmuci_get_value_by_section_string(s, "type", &ftype); if (strcmp(ftype, "alias") != 0) { + dmuci_get_value_by_section_string(s, "is_lan", &islan); + if (islan[0] == '1') + return 0; dmuci_get_value_by_section_string(s, "ifname", &ifname); db_get_value_string("hw", "board", "ethernetLanPorts", &phy_itf); phy_itf_local = dmstrdup(phy_itf); - TRACE("end db_get_value\n"); pch = strtok_r(phy_itf_local, " ", &spch); while (pch != NULL) { if (strstr(ifname, pch)) { @@ -2293,7 +2288,6 @@ int get_wlan_total_associations(char *refparam, struct dmctx *ctx, char **value) dmubus_call("router", "sta", UBUS_ARGS{{"vif", wlanargs->wiface}}, 1, &res); DM_ASSERT(res, *value = "0"); json_object_object_foreach(res, key, val) { - TRACE("TotalAssociations json obj %s\n", key); if (strstr(key, "sta-")) i++; } @@ -2652,7 +2646,6 @@ int get_wlan_psk_assoc_MACAddress(char *refparam, struct dmctx *ctx, char **valu dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption); if (strstr(encryption, "psk")) { - TRACE("pki vaut %d \n", wlanargs->pki); sprintf(sta_pki, "sta-%d", wlanargs->pki); dmubus_call("router", "sta", UBUS_ARGS{{"vif", wlanargs->wiface}}, 1, &res); DM_ASSERT(res, *value = ""); @@ -2731,10 +2724,7 @@ inline int entry_landevice_sub(struct dmctx *ctx) struct uci_section *s = NULL; char *idev = NULL; - TRACE("uci_foreach_filter_func start \n"); uci_foreach_filter_func("network", "interface", NULL, &filter_lan_device_interface, s) { - TRACE("section type %s section name %s \n\n", s->e.name, s->type); - //DMOBJECT(DMROOT"LANDevice.%s.", ctx, "0", 1, NULL, NULL, NULL, DMINSTANCES(idev, idev2)); idev = update_instance(s, idev, "ldinstance"); init_ldargs_lan(ctx, s, idev); SUBENTRY(entry_landevice_sub_instance, ctx, s, idev); @@ -2771,8 +2761,7 @@ inline int entry_landevice_wlanconfiguration(struct dmctx *ctx, struct uci_secti char *iwlan = NULL; char *network , *wiface, buf[8]; - iwlan = NULL; - get_last_instance("wireless", "wifi-iface", "lwlaninstance"); + iwlan = get_last_instance_lev2("wireless", "wifi-iface", "lwlaninstance", "network", section_name(landevice_section)); uci_foreach_sections("wireless", "wifi-device", ss) { int wlctl_num=0; uci_foreach_option_eq("wireless", "wifi-iface", "device", section_name(ss), sss) {