diff --git a/dm/dmcommon.c b/dm/dmcommon.c index 66b7c91..836ab97 100644 --- a/dm/dmcommon.c +++ b/dm/dmcommon.c @@ -429,18 +429,25 @@ void update_section_option_list(char *config, char *section, char *option, char } } -void update_section_list(char *config, char *section, char *option, int number, char *wlan) + +void update_section_list(char *config, char *section, char *option, int number, char *filter) { char *add_value; struct uci_section *s = NULL; int i = 0; - uci_foreach_option_eq(config, section, option, wlan, s) { - return; + if(option) { + uci_foreach_option_eq(config, section, option, filter, s) { + return; + } + } else { + uci_foreach_sections(config, section, s) { + return; + } } while (ilwlansection)); uci_foreach_option_eq("dmmap", "wlan-psk", "wlan", section_name(wlanargs->lwlansection), s) { wlanargs->pki++; - printf("CHEK PKI = %d \n", wlanargs->pki); ipk = handle_update_instance(3, ctx, &ipk_last, update_instance_alias, 3, s, "pskinstance", "pskalias"); SUBENTRY(entry_landevice_wlanconfiguration_presharedkey_instance, ctx, idev, iwlan, ipk); //"$wunit" "$wlctl_num" "$uci_num" are not needed } diff --git a/dm/dmtree/layer_2_bridging.c b/dm/dmtree/layer_2_bridging.c index cfcace7..633c621 100644 --- a/dm/dmtree/layer_2_bridging.c +++ b/dm/dmtree/layer_2_bridging.c @@ -20,8 +20,8 @@ inline int entry_layer2_availableinterface_instance(struct dmctx *ctx, char *int_instance); inline int entry_layer2_marking_instance(struct dmctx *ctx, char *marking_br_instance); -inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance); -inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance); +inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last); +inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last); inline int entry_layer2_bridge_vlan_instance(struct dmctx *ctx,char *bridge_instance, char *vlan_instance); int set_marking_bridge_key_sub(char *refparam, struct dmctx *ctx, char *value); int set_marking_interface_key_sub(char *refparam, struct dmctx *ctx, char *value); @@ -830,7 +830,7 @@ int get_interfaces_type(char *refparam, struct dmctx *ctx, char **value) return 0; } -struct uci_section *update_availableinterface_list(char *iface, char **instance) +struct uci_section *update_availableinterface_list(struct dmctx *ctx, char *iface, char **instance, char **instance_last) { struct uci_section *s = NULL; struct uci_section *available_bridge = NULL; @@ -838,12 +838,12 @@ struct uci_section *update_availableinterface_list(char *iface, char **instance) uci_foreach_option_eq("dmmap", "available-bridge", "baseifname", iface, s) { - dmuci_get_value_by_section_string(s, "key", instance); + *instance = handle_update_instance(1, ctx, instance_last, update_instance_alias, 3, s, "key", "avbralias"); return s; } dmuci_add_section("dmmap", "available-bridge", &available_bridge, &add_value); dmuci_set_value_by_section(available_bridge, "baseifname", iface); - *instance = update_instance(available_bridge, *instance, "key"); + *instance = handle_update_instance(1, ctx, instance_last, update_instance_alias, 3, available_bridge, "key", "avbralias"); return available_bridge; } @@ -1081,14 +1081,15 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx) char *oface, *phy_interface, *ch_ptr, *saveptr, *waninstance = NULL; char *base_ifname, *available_inst = NULL; struct uci_section *wifi_s , *wan_s, *ai_s; + char *instance_last = NULL; for (i=0; i<3; i++) { uci_foreach_sections(wan_interface_tab[i].package, wan_interface_tab[i].section, wan_s) { waninstance = update_instance(wan_s, waninstance, "waninstance"); dmasprintf(&oface, DMROOT"WANDevice.%s.WANConnectionDevice.%s.", wan_interface_tab[i].instance, waninstance); // MEM WILL BE FREED IN DMMEMCLEAN dmuci_get_value_by_section_string(wan_s, "baseifname", &base_ifname); - ai_s = update_availableinterface_list(base_ifname, &available_inst); - init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "WANInterface", oface); + ai_s = update_availableinterface_list(ctx, base_ifname, &available_inst, &instance_last); + init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "WANInterface", oface); SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst); } } @@ -1098,16 +1099,16 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx) while (ch_ptr != NULL) { dmasprintf(&oface, DMROOT"LANInterfaces.LANEthernetInterfaceConfig.%d.", ++i); // MEM WILL BE FREED IN DMMEMCLEAN - ai_s = update_availableinterface_list(ch_ptr, &available_inst); - init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "LANInterface", oface); + ai_s = update_availableinterface_list(ctx, ch_ptr, &available_inst, &instance_last); + init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "LANInterface", oface); SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst); ch_ptr = strtok_r(NULL, " ", &saveptr); } i = 0; uci_foreach_sections("wireless", "wifi-iface", wifi_s) { dmasprintf(&oface, DMROOT"LANInterfaces.WLANConfiguration.%d.", ++i); // MEM WILL BE FREED IN DMMEMCLEAN - ai_s = update_availableinterface_list(section_name(wifi_s), &available_inst); - init_args_layer2(ctx, ai_s, NULL, available_inst, NULL, "LANInterface", oface); + ai_s = update_availableinterface_list(ctx, section_name(wifi_s), &available_inst, &instance_last); + init_args_layer2(ctx, ai_s, NULL, instance_last, NULL, "LANInterface", oface); SUBENTRY(entry_layer2_availableinterface_instance, ctx, available_inst); } return 0; @@ -1115,39 +1116,39 @@ inline int entry_layer2_availableinterface(struct dmctx *ctx) inline int entry_layer2_bridge(struct dmctx *ctx) { - char *bridge_instance = NULL; + char *bridge_instance = NULL, *bridge_instance_last = NULL; struct uci_section *bridge_s; uci_foreach_option_eq("network", "interface", "type", "bridge", bridge_s) { - bridge_instance = update_instance(bridge_s, bridge_instance, "bridge_instance"); - update_markinginterface_list(bridge_s, bridge_instance); - init_args_layer2(ctx, bridge_s, NULL, NULL, bridge_instance, NULL, NULL); - SUBENTRY(entry_layer2_bridge_instance, ctx, bridge_instance); + bridge_instance = handle_update_instance(1, ctx, &bridge_instance_last, update_instance_alias, 3, bridge_s, "bridge_instance", "bridge_alias"); + update_markinginterface_list(bridge_s, bridge_instance_last); + init_args_layer2(ctx, bridge_s, NULL, NULL, bridge_instance_last, NULL, NULL); + SUBENTRY(entry_layer2_bridge_instance, ctx, bridge_instance, bridge_instance_last); } return 0; } inline int entry_layer2_marking(struct dmctx *ctx) { - char *marking_instance = NULL; + char *marking_instance = NULL, marking_instance_last = NULL; struct uci_section *marking_s = NULL; uci_foreach_sections("dmmap", "marking-bridge", marking_s) { - marking_instance = update_instance(marking_s, marking_instance, "marking_instance"); + marking_instance = handle_update_instance(1, ctx, &marking_instance_last, update_instance_alias, 3, marking_s, "marking_instance", "marking_alias"); init_args_layer2(ctx, marking_s, NULL, NULL, NULL, NULL, NULL); SUBENTRY(entry_layer2_marking_instance, ctx, marking_instance); } return 0; } -inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance) +inline int entry_layer2_bridge_vlan(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last) { struct uci_section *ss = NULL; - char *vlan_instance = NULL; + char *vlan_instance = NULL, *vlan_instance_last = NULL; update_bridge_all_vlan_config_bybridge(ctx); - uci_foreach_option_eq("dmmap", "vlan_bridge", "bridgekey", bridge_instance, ss) { - vlan_instance = update_instance(ss, vlan_instance, "vlan_instance"); + uci_foreach_option_eq("dmmap", "vlan_bridge", "bridgekey", bridge_instance_last, ss) { + vlan_instance = handle_update_instance(2, ctx, &vlan_instance_last, update_instance_alias, 3, ss, "vlan_instance", "vlan_alias"); init_args_layer2_vlan(ctx, ss); SUBENTRY(entry_layer2_bridge_vlan_instance, ctx, bridge_instance, vlan_instance); } @@ -1196,7 +1197,7 @@ inline int entry_layer2_marking_instance(struct dmctx *ctx, char *marking_br_ins return FAULT_9005; } -inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance) +inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance, char *bridge_instance_last) { IF_MATCH(ctx, DMROOT"Layer2Bridging.Bridge.%s.", bridge_instance) { DMOBJECT(DMROOT"Layer2Bridging.Bridge.%s.", ctx, "1", 1, NULL, delete_layer2bridging_bridge, NULL, bridge_instance); @@ -1206,7 +1207,7 @@ inline int entry_layer2_bridge_instance(struct dmctx *ctx, char *bridge_instance DMPARAM("VLANID", ctx, "1", get_bridge_vlanid, set_bridge_vlanid, "xsd:unsignedInt", 0, 1, UNDEF, NULL); DMPARAM("X_INTENO_COM_AssociatedInterfaces", ctx, "1", get_associated_interfaces, set_associated_interfaces, NULL, 0, 1, UNDEF, NULL); DMOBJECT(DMROOT"Layer2Bridging.Bridge.%s.VLAN.", ctx, "1", 1, add_layer2bridging_bridge_vlan, delete_layer2bridging_bridge_vlan_all, NULL, bridge_instance); - SUBENTRY(entry_layer2_bridge_vlan, ctx, bridge_instance); + SUBENTRY(entry_layer2_bridge_vlan, ctx, bridge_instance, bridge_instance_last); return 0; } return FAULT_9005;