From 5d10fba0836b275992b242fe8de24576aed484b5 Mon Sep 17 00:00:00 2001 From: Amin Ben Ramdhane Date: Sat, 5 Dec 2020 23:35:25 +0100 Subject: [PATCH] bbf: improve and cleanup the code - update_instance_alias: read config and type section from the passed section in handle_update_instance - remove append_dot_to_string() function --- dmdiagnostics.c | 8 +- dmentry.c | 9 ++- dmentryjson.c | 4 +- dmtree/tr104/servicesvoiceservice.c | 14 ++-- .../tr104/servicesvoiceservicecallcontrol.c | 38 +++++----- dmtree/tr104/servicesvoiceservicepots.c | 4 +- dmtree/tr104/servicesvoiceservicesip.c | 8 +- dmtree/tr143/diagnostics.c | 12 +-- dmtree/tr181/atm.c | 4 +- dmtree/tr181/bridging.c | 56 +++++++------- dmtree/tr181/deviceinfo.c | 8 +- dmtree/tr181/dhcpv4.c | 62 +++++++--------- dmtree/tr181/dhcpv6.c | 35 ++++----- dmtree/tr181/dns.c | 30 ++++---- dmtree/tr181/dsl.c | 8 +- dmtree/tr181/dynamicdns.c | 30 ++++---- dmtree/tr181/ethernet.c | 69 +++++++----------- dmtree/tr181/firewall.c | 37 +++++----- dmtree/tr181/gre.c | 8 +- dmtree/tr181/ieee1905.c | 4 +- dmtree/tr181/interfacestack.c | 36 ++++----- dmtree/tr181/ip.c | 54 ++++++-------- dmtree/tr181/nat.c | 26 +++---- dmtree/tr181/ppp.c | 15 ++-- dmtree/tr181/ptm.c | 4 +- dmtree/tr181/qos-iopsyswrt.c | 73 +++++++++---------- dmtree/tr181/qos-openwrt.c | 27 +++---- dmtree/tr181/routing.c | 18 ++--- dmtree/tr181/security.c | 8 +- dmtree/tr181/times.c | 8 +- dmtree/tr181/upnp.c | 24 +++--- dmtree/tr181/usb.c | 24 +++--- dmtree/tr181/users.c | 4 +- dmtree/tr181/wifi.c | 30 ++++---- dmtree/tr181/x_iopsys_eu_buttons.c | 4 +- dmtree/tr181/x_iopsys_eu_dropbear.c | 4 +- dmtree/tr181/x_iopsys_eu_igmp.c | 58 +++++++-------- dmtree/tr181/x_iopsys_eu_mld.c | 47 ++++++------ dmtree/tr181/x_iopsys_eu_owsd.c | 11 ++- json/generate_source_code.py | 4 +- libbbf_api/dmbbf.c | 26 +++---- libbbf_api/dmcommon.c | 8 -- libbbf_api/dmcommon.h | 1 - libbbf_api/dmuci.h | 2 + 44 files changed, 447 insertions(+), 517 deletions(-) diff --git a/dmdiagnostics.c b/dmdiagnostics.c index 13370d96..18e08161 100644 --- a/dmdiagnostics.c +++ b/dmdiagnostics.c @@ -56,17 +56,15 @@ void init_diagnostics_operation(char *sec_name, char *operation_path) void set_diagnostics_interface_option(struct dmctx *ctx, char *sec_name, char *value) { - char interface[64] = {0}, *linker = NULL; + char *linker = NULL; if (value[0] == 0) return; - append_dot_to_string(interface, value, sizeof(interface)); - - if (strncmp(interface, "Device.IP.Interface.", 20) != 0) + if (strncmp(value, "Device.IP.Interface.", 20) != 0) return; - adm_entry_get_linker_value(ctx, interface, &linker); + adm_entry_get_linker_value(ctx, value, &linker); if (linker && *linker) { set_diagnostics_option(sec_name, "interface", linker); diff --git a/dmentry.c b/dmentry.c index c07a0a0a..fbf55540 100644 --- a/dmentry.c +++ b/dmentry.c @@ -519,6 +519,7 @@ int adm_entry_get_linker_param(struct dmctx *ctx, char *param, char *linker, cha dm_entry_get_linker(&dmctx); *value = dmctx.linker_param; + dm_ctx_clean_sub(&dmctx); return 0; } @@ -526,14 +527,16 @@ int adm_entry_get_linker_param(struct dmctx *ctx, char *param, char *linker, cha int adm_entry_get_linker_value(struct dmctx *ctx, char *param, char **value) { struct dmctx dmctx = {0}; + char linker[256] = {0}; *value = NULL; - if (!param || param[0] == '\0') { + if (!param || param[0] == '\0') return 0; - } + + snprintf(linker, sizeof(linker), "%s%c", param, (param[strlen(param) - 1] != '.') ? '.' : '\0'); dm_ctx_init_sub(&dmctx, ctx->dm_type, ctx->amd_version, ctx->instance_mode); - dmctx.in_param = param; + dmctx.in_param = linker; dm_entry_get_linker_value(&dmctx); *value = dmctx.linker; diff --git a/dmentryjson.c b/dmentryjson.c index 26b13602..50f28d33 100644 --- a/dmentryjson.c +++ b/dmentryjson.c @@ -299,8 +299,8 @@ int browse_obj(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char * synchronize_specific_config_sections_with_dmmap(arg2, arg3, arg4, &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, buf_instance, buf_alias, arg4, arg3); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, buf_instance, buf_alias); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr104/servicesvoiceservice.c b/dmtree/tr104/servicesvoiceservice.c index 19fd8d6a..20f0b859 100644 --- a/dmtree/tr104/servicesvoiceservice.c +++ b/dmtree/tr104/servicesvoiceservice.c @@ -47,8 +47,8 @@ static int browseServicesVoiceServiceVoIPProfileInst(struct dmctx *dmctx, DMNODE synchronize_specific_config_sections_with_dmmap("asterisk", "sip_service_provider", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "clientinstance", "clientalias", "dmmap_asterisk", "sip_service_provider"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "clientinstance", "clientalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -105,8 +105,8 @@ static int browseServicesVoiceServiceCodecProfileInst(struct dmctx *dmctx, DMNOD synchronize_specific_config_sections_with_dmmap("asterisk", "codec_profile", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "codecprofileinstance", "codecprofilealias", "dmmap_asterisk", "codec_profile"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "codecprofileinstance", "codecprofilealias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -219,8 +219,10 @@ static int browseVoiceServiceInst(struct dmctx *dmctx, DMNODE *parent_node, void update_section_list(DMMAP,"voice_service", NULL, 1, NULL, NULL, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, "dmmap", "voice_service", s) { - vs = handle_update_instance(1, dmctx, &vs_last, update_instance_alias, 5, - s, "vsinstance", "vsalias", "dmmap", "voice_service"); + + vs = handle_update_instance(1, dmctx, &vs_last, update_instance_alias, 3, + s, "vsinstance", "vsalias"); + if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, vs) == DM_STOP) break; } diff --git a/dmtree/tr104/servicesvoiceservicecallcontrol.c b/dmtree/tr104/servicesvoiceservicecallcontrol.c index b7d80260..6e6f7246 100644 --- a/dmtree/tr104/servicesvoiceservicecallcontrol.c +++ b/dmtree/tr104/servicesvoiceservicecallcontrol.c @@ -34,8 +34,8 @@ static int browseServicesVoiceServiceCallControlLineInst(struct dmctx *dmctx, DM synchronize_specific_config_sections_with_dmmap("asterisk", "tel_line", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "lineinstance", "linealias", "dmmap_asterisk", "tel_line"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "lineinstance", "linealias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -54,8 +54,8 @@ static int browseServicesVoiceServiceCallControlIncomingMapInst(struct dmctx *dm synchronize_specific_config_sections_with_dmmap("asterisk", "sip_service_provider", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "clientinstance", "clientalias", "dmmap_asterisk", "sip_service_provider"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "clientinstance", "clientalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -74,8 +74,8 @@ static int browseServicesVoiceServiceCallControlOutgoingMapInst(struct dmctx *dm synchronize_specific_config_sections_with_dmmap("asterisk", "sip_service_provider", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "clientinstance", "clientalias", "dmmap_asterisk", "sip_service_provider"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "clientinstance", "clientalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -94,8 +94,8 @@ static int browseServicesVoiceServiceCallControlNumberingPlanInst(struct dmctx * synchronize_specific_config_sections_with_dmmap("asterisk", "tel_advanced", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "numberingplaninstance", "numberingplanalias", "dmmap_asterisk", "tel_advanced"); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "numberingplaninstance", "numberingplanalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -114,8 +114,8 @@ static int browseServicesVoiceServiceCallControlCallingFeaturesSetInst(struct dm synchronize_specific_config_sections_with_dmmap("asterisk", "advanced_features", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "setinstance", "setalias", "dmmap_asterisk", "advanced_features"); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "setinstance", "setalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -134,8 +134,8 @@ static int browseServicesVoiceServiceCallControlCallingFeaturesSetSCREJInst(stru synchronize_specific_config_sections_with_dmmap("asterisk", "call_filter_rule_incoming", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(3, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "screjinstance", "screjalias", "dmmap_asterisk", "call_filter_rule_incoming"); + inst = handle_update_instance(3, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "screjinstance", "screjalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -336,7 +336,6 @@ static int set_ServicesVoiceServiceCallControlLine_Provider(char *refparam, stru { char sip_client[64] = "Device.Services.VoiceService.1.SIP.Client."; size_t client_len = strlen(sip_client); - char lower_layer[64] = {0}; switch (action) { case VALUECHECK: @@ -344,11 +343,10 @@ static int set_ServicesVoiceServiceCallControlLine_Provider(char *refparam, stru return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - if (strncmp(lower_layer, sip_client, client_len) == 0) { + if (strncmp(value, sip_client, client_len) == 0) { /* check linker is available */ char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); + adm_entry_get_linker_value(ctx, value, &linker); if (linker && *linker) { dmuci_set_value_by_section((struct uci_section *)data, "sip_account", linker); dmfree(linker); @@ -389,7 +387,7 @@ static int get_ServicesVoiceServiceCallControlIncomingMap_Line(char *refparam, s static int set_ServicesVoiceServiceCallControlIncomingMap_Line(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *dup = NULL, *token = NULL, *saveptr = NULL, *p, buf[16] = { 0, 0 }, lower_layer[64] = {0}; + char *dup = NULL, *token = NULL, *saveptr = NULL, *p, buf[16] = { 0, 0 }; char call_line[64] = "Device.Services.VoiceService.1.CallControl.Line."; size_t line_len = strlen(call_line); @@ -407,12 +405,10 @@ static int set_ServicesVoiceServiceCallControlIncomingMap_Line(char *refparam, s p = buf; for (token = strtok_r(value, ",", &saveptr); token != NULL; token = strtok_r(NULL, ",", &saveptr)) { - append_dot_to_string(lower_layer, token, sizeof(lower_layer)); - - if (strncmp(lower_layer, call_line, line_len) == 0) { + if (strncmp(token, call_line, line_len) == 0) { /* check linker is available */ char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); + adm_entry_get_linker_value(ctx, token, &linker); if (!linker || linker[0] == '\0') continue; diff --git a/dmtree/tr104/servicesvoiceservicepots.c b/dmtree/tr104/servicesvoiceservicepots.c index b14d0134..5df5bf64 100644 --- a/dmtree/tr104/servicesvoiceservicepots.c +++ b/dmtree/tr104/servicesvoiceservicepots.c @@ -28,8 +28,8 @@ static int browseServicesVoiceServicePOTSFXSInst(struct dmctx *dmctx, DMNODE *pa dmuci_get_value_by_section_string(p->config_section, "name", &line_name); if (*line_name == '\0' || strcasestr(line_name, "DECT") == NULL) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, p->dmmap_section, - "fxsinstance", "fxsalias", "dmmap_asterisk", "tel_line"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "fxsinstance", "fxsalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr104/servicesvoiceservicesip.c b/dmtree/tr104/servicesvoiceservicesip.c index f1860a79..a4da208b 100644 --- a/dmtree/tr104/servicesvoiceservicesip.c +++ b/dmtree/tr104/servicesvoiceservicesip.c @@ -34,8 +34,8 @@ static int browseServicesVoiceServiceSIPClientInst(struct dmctx *dmctx, DMNODE * synchronize_specific_config_sections_with_dmmap("asterisk", "sip_service_provider", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "clientinstance", "clientalias", "dmmap_asterisk", "sip_service_provider"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "clientinstance", "clientalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -63,8 +63,8 @@ static int browseServicesVoiceServiceSIPNetworkInst(struct dmctx *dmctx, DMNODE synchronize_specific_config_sections_with_dmmap("asterisk", "sip_service_provider", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 5, - p->dmmap_section, "networkinstance", "networkalias", "dmmap_asterisk", "sip_service_provider"); + inst = handle_update_instance(2, dmctx, &inst_last, update_instance_alias, 3, + p->dmmap_section, "networkinstance", "networkalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr143/diagnostics.c b/dmtree/tr143/diagnostics.c index 9f44821e..889dd775 100644 --- a/dmtree/tr143/diagnostics.c +++ b/dmtree/tr143/diagnostics.c @@ -1593,8 +1593,8 @@ static int browseIPDiagnosticsTraceRouteRouteHopsInst(struct dmctx *dmctx, DMNOD uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "RouteHops", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - (void *)s, "routehop_instance", "routehop_alias", DMMAP_DIAGNOSTIGS, "RouteHops"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "routehop_instance", "routehop_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -1609,8 +1609,8 @@ static int browseIPDiagnosticsDownloadDiagnosticsPerConnectionResultInst(struct uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "DownloadPerConnection", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - (void *)s, "perconnection_instance", "perconnection_alias", DMMAP_DIAGNOSTIGS, "DownloadPerConnection"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "perconnection_instance", "perconnection_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -1625,8 +1625,8 @@ static int browseIPDiagnosticsUploadDiagnosticsPerConnectionResultInst(struct dm uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "UploadPerConnection", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - (void *)s, "perconnection_instance", "perconnection_alias", DMMAP_DIAGNOSTIGS, "UploadPerConnection"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "perconnection_instance", "perconnection_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; diff --git a/dmtree/tr181/atm.c b/dmtree/tr181/atm.c index aa1d5005..3ea9d29d 100644 --- a/dmtree/tr181/atm.c +++ b/dmtree/tr181/atm.c @@ -359,8 +359,8 @@ static int browseAtmLinkInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmuci_get_value_by_section_string(p->config_section, "device", &ifname); init_atm_link(&curr_atm_args, p->config_section, ifname); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "atmlinkinstance", "atmlinkalias", "dmmap_dsl", "atm-device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "atmlinkinstance", "atmlinkalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_atm_args, inst) == DM_STOP) break; diff --git a/dmtree/tr181/bridging.c b/dmtree/tr181/bridging.c index bdfac4c2..c0bbaa92 100644 --- a/dmtree/tr181/bridging.c +++ b/dmtree/tr181/bridging.c @@ -641,20 +641,18 @@ static int remove_vlanid_from_ifname_list(struct uci_section *bridge_sec, char * static void set_lowerlayers_management_port(struct dmctx *ctx, void *data, char *value) { - char lower_layer[256] = {0}, lower_layer_path[256] = {0}; + char lower_layer_path[256] = {0}; char *pch = NULL, *spch = NULL, *p, new_device[512] = { 0, 0 }; p = new_device; for (pch = strtok_r(value, ",", &spch); pch != NULL; pch = strtok_r(NULL, ",", &spch)) { - append_dot_to_string(lower_layer, pch, sizeof(lower_layer)); - snprintf(lower_layer_path, sizeof(lower_layer_path), "Device.Bridging.Bridge.%s.Port.", ((struct bridge_port_args *)data)->br_inst); - if (strncmp(lower_layer, lower_layer_path, strlen(lower_layer_path)) == 0) { + if (strncmp(pch, lower_layer_path, strlen(lower_layer_path)) == 0) { /* check linker is available */ char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); + adm_entry_get_linker_value(ctx, pch, &linker); if (!linker || linker[0] == '\0') continue; @@ -1427,7 +1425,7 @@ static int get_BridgingBridgePort_LowerLayers(char *refparam, struct dmctx *ctx, static int set_BridgingBridgePort_LowerLayers(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, *management; + char *management = NULL; switch (action) { case VALUECHECK: @@ -1436,16 +1434,14 @@ static int set_BridgingBridgePort_LowerLayers(char *refparam, struct dmctx *ctx, return 0; case VALUESET: dmuci_get_value_by_section_string(((struct bridge_port_args *)data)->bridge_port_dmmap_sec, "management", &management); - if (strcmp(management, "1") == 0) { + if (management && strcmp(management, "1") == 0) { /* Management Port ==> true */ set_lowerlayers_management_port(ctx, data, value); } else { /* Management Port ==> false */ - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); + adm_entry_get_linker_value(ctx, value, &linker); if (!linker || linker[0] == '\0') return 0; @@ -2028,7 +2024,7 @@ static int get_BridgingBridgeVLANPort_VLAN(char *refparam, struct dmctx *ctx, vo static int set_BridgingBridgeVLANPort_VLAN(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, lower_layer_path[256] = {0}; + char lower_layer_path[256] = {0}; switch (action) { case VALUECHECK: @@ -2036,15 +2032,14 @@ static int set_BridgingBridgeVLANPort_VLAN(char *refparam, struct dmctx *ctx, vo return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); snprintf(lower_layer_path, sizeof(lower_layer_path), "Device.Bridging.Bridge.%s.VLAN.", ((struct bridge_vlanport_args *)data)->br_inst); /* Check the path object is correct or no */ - if (strncmp(lower_layer, lower_layer_path, strlen(lower_layer_path)) == 0) { + if (strncmp(value, lower_layer_path, strlen(lower_layer_path)) == 0) { /* Check linker exist */ char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (!linker) + adm_entry_get_linker_value(ctx, value, &linker); + if (!linker || *linker == '\0') return 0; char *br = strstr(linker, ":vlan_"); @@ -2112,7 +2107,7 @@ static int get_BridgingBridgeVLANPort_Port(char *refparam, struct dmctx *ctx, vo static int set_BridgingBridgeVLANPort_Port(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, lower_layer_path[256] = {0}; + char lower_layer_path[256] = {0}; switch (action) { case VALUECHECK: @@ -2120,13 +2115,12 @@ static int set_BridgingBridgeVLANPort_Port(char *refparam, struct dmctx *ctx, vo return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); snprintf(lower_layer_path, sizeof(lower_layer_path), "Device.Bridging.Bridge.%s.Port.", ((struct bridge_vlanport_args *)data)->br_inst); - if (strncmp(lower_layer, lower_layer_path, strlen(lower_layer_path)) == 0) { + if (strncmp(value, lower_layer_path, strlen(lower_layer_path)) == 0) { char *linker = NULL; - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (!linker) + adm_entry_get_linker_value(ctx, value, &linker); + if (!linker || *linker == '\0') return 0; char *br = strchr(linker, ':'); @@ -2239,8 +2233,8 @@ static int browseBridgingBridgeInst(struct dmctx *dmctx, DMNODE *parent_node, vo synchronize_specific_config_sections_with_dmmap_eq("network", "interface", "dmmap_network", "type", "bridge", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "bridge_instance", "bridge_alias", "dmmap_network", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "bridge_instance", "bridge_alias"); dmuci_get_value_by_section_string(p->config_section, "ifname", &ifname); init_bridging_args(&curr_bridging_args, p->config_section, ifname, inst); @@ -2268,9 +2262,9 @@ static int browseBridgingBridgePortInst(struct dmctx *dmctx, DMNODE *parent_node browse_args.option = "br_inst"; browse_args.value = br_args->br_inst; - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - s, "bridge_port_instance", "bridge_port_alias", "dmmap_bridge_port", "bridge_port", - check_browse_section, (void *)&browse_args); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + s, "bridge_port_instance", "bridge_port_alias", + check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_bridge_port_args, inst) == DM_STOP) break; @@ -2293,9 +2287,9 @@ static int browseBridgingBridgeVLANInst(struct dmctx *dmctx, DMNODE *parent_node browse_args.option = "br_inst"; browse_args.value = br_args->br_inst; - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - s, "bridge_vlan_instance", "bridge_vlan_alias", "dmmap_bridge_vlanport", "bridge_vlan", - check_browse_section, (void *)&browse_args); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + s, "bridge_vlan_instance", "bridge_vlan_alias", + check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_bridge_vlan_args, inst) == DM_STOP) break; @@ -2319,9 +2313,9 @@ static int browseBridgingBridgeVLANPortInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "br_inst"; browse_args.value = br_args->br_inst; - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - s, "bridge_vlanport_instance", "bridge_vlanport_alias", "dmmap_bridge_vlanport", "bridge_vlanport", - check_browse_section, (void *)&browse_args); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + s, "bridge_vlanport_instance", "bridge_vlanport_alias", + check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_bridge_vlanport_args, inst) == DM_STOP) break; diff --git a/dmtree/tr181/deviceinfo.c b/dmtree/tr181/deviceinfo.c index 4d9720ff..deb92758 100644 --- a/dmtree/tr181/deviceinfo.c +++ b/dmtree/tr181/deviceinfo.c @@ -351,8 +351,8 @@ static int browseVcfInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_da continue; } - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "vcf_instance", "vcf_alias", "dmmap", "vcf"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "vcf_instance", "vcf_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -389,8 +389,8 @@ static int browseVlfInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_da uci_path_foreach_sections(bbfdm, "dmmap", "vlf", dm_sec) { char *inst, *max_inst = NULL; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dm_sec, "vlf_instance", "vlf_alias", "dmmap", "vlf"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dm_sec, "vlf_instance", "vlf_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)dm_sec, inst) == DM_STOP){ break; diff --git a/dmtree/tr181/dhcpv4.c b/dmtree/tr181/dhcpv4.c index 64cdcd86..35ece505 100644 --- a/dmtree/tr181/dhcpv4.c +++ b/dmtree/tr181/dhcpv4.c @@ -871,8 +871,7 @@ static int get_DHCPv4ServerPool_Interface(char *refparam, struct dmctx *ctx, voi static int set_DHCPv4ServerPool_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}; - char *linker; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -880,9 +879,8 @@ static int set_DHCPv4ServerPool_Interface(char *refparam, struct dmctx *ctx, voi return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct dhcp_args *)data)->dhcp_sec, "interface", linker); dmfree(linker); } @@ -1729,25 +1727,24 @@ static int get_DHCPv4Client_Interface(char *refparam, struct dmctx *ctx, void *d static int set_DHCPv4Client_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *s; + struct uci_section *s = NULL; char *linker = NULL, *v; - char interface[256] = {0}; switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 256, NULL, 0, NULL, 0)) return FAULT_9007; - if(strlen(value) == 0 || strcmp(value, "") == 0) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || linker[0] == '\0') return FAULT_9007; - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); uci_path_foreach_sections(bbfdm, "dmmap_dhcp_client", "interface", s) { dmuci_get_value_by_section_string(s, "section_name", &v); if(strcmp(v, linker) == 0) return FAULT_9007; } + uci_foreach_sections("network", "interface", s) { if(strcmp(section_name(s), linker) == 0){ dmuci_get_value_by_section_string(s, "proto", &v); @@ -1757,8 +1754,7 @@ static int set_DHCPv4Client_Interface(char *refparam, struct dmctx *ctx, void *d } break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); + adm_entry_get_linker_value(ctx, value, &linker); dmuci_set_value_by_section_bbfdm(((struct dhcp_client_args *)data)->dhcp_client_dm, "section_name", linker); break; } @@ -2410,27 +2406,24 @@ static int get_DHCPv4RelayForwarding_Interface(char *refparam, struct dmctx *ctx static int set_DHCPv4RelayForwarding_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *s; + struct uci_section *s = NULL; char *linker = NULL, *v; - char interface[256] = {0}; switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 256, NULL, 0, NULL, 0)) return FAULT_9007; - if (strlen(value) == 0 || strcmp(value, "") == 0) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || linker[0] == '\0') return FAULT_9007; - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker == NULL) - return FAULT_9007; uci_path_foreach_sections(bbfdm, "dmmap_dhcp_relay", "interface", s) { dmuci_get_value_by_section_string(s, "section_name", &v); if (strcmp(v, linker) == 0) return FAULT_9007; } + uci_foreach_sections("network", "interface", s) { if (strcmp(section_name(s), linker) == 0) { dmuci_get_value_by_section_string(s, "proto", &v); @@ -2440,8 +2433,7 @@ static int set_DHCPv4RelayForwarding_Interface(char *refparam, struct dmctx *ctx } break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); + adm_entry_get_linker_value(ctx, value, &linker); dmuci_set_value_by_section_bbfdm(((struct dhcp_client_args *)data)->dhcp_client_dm, "section_name", linker); break; } @@ -2698,8 +2690,8 @@ static int browseDHCPv4ServerPoolInst(struct dmctx *dmctx, DMNODE *parent_node, dhcp_leases_assign_to_interface(&curr_dhcp_args, &leases, interface); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "dhcp_instance", "dhcp_alias", "dmmap_dhcp", "dhcp"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "dhcp_instance", "dhcp_alias"); dmuci_get_value_by_section_string(p->dmmap_section, "order", &v); if (v == NULL || strlen(v) == 0) @@ -2736,8 +2728,8 @@ static int browseDHCPv4ServerPoolStaticAddressInst(struct dmctx *dmctx, DMNODE * browse_args.option = "dhcp"; browse_args.value = ((struct dhcp_args *)prev_data)->interface; - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "dhcp_host_instance", "dhcp_host_alias", "dmmap_dhcp", "host", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "dhcp_host_instance", "dhcp_host_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_dhcp_host_args, inst) == DM_STOP) @@ -2892,8 +2884,8 @@ static int browseDHCPv4ClientInst(struct dmctx *dmctx, DMNODE *parent_node, void dhcp_client_arg.dhcp_client_conf = p->config_section; dhcp_client_arg.dhcp_client_dm = p->dmmap_section; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "bbf_dhcpv4client_instance", "bbf_dhcpv4client_alias", "dmmap_dhcp_client", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "bbf_dhcpv4client_instance", "bbf_dhcpv4client_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_client_arg, inst) == DM_STOP) break; @@ -2947,8 +2939,8 @@ static int browseDHCPv4ClientSentOptionInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "section_name"; browse_args.value = section_name(dhcp_client_args->dhcp_client_conf); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_sect, "bbf_dhcpv4_sentopt_instance", "bbf_dhcpv4_sentopt_alias", "dmmap_dhcp_client", "send_option", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_sect, "bbf_dhcpv4_sentopt_instance", "bbf_dhcpv4_sentopt_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_client_opt_args, inst) == DM_STOP) @@ -2988,8 +2980,8 @@ static int browseDHCPv4ClientReqOptionInst(struct dmctx *dmctx, DMNODE *parent_n browse_args.option = "section_name"; browse_args.value = section_name(dhcp_client_args->dhcp_client_conf); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_sect, "bbf_dhcpv4_reqtopt_instance", "bbf_dhcpv4_reqtopt_alias", "dmmap_dhcp_client", "req_option", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_sect, "bbf_dhcpv4_reqtopt_instance", "bbf_dhcpv4_reqtopt_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_client_opt_args, inst) == DM_STOP) @@ -3045,8 +3037,8 @@ static int browseDHCPv4ServerPoolOptionInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "section_name"; browse_args.value = section_name(curr_dhcp_args->dhcp_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_sect, "bbf_dhcpv4_servpool_option_instance", "bbf_dhcpv4_servpool_option_alias", "dmmap_dhcp", "servpool_option", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_sect, "bbf_dhcpv4_servpool_option_instance", "bbf_dhcpv4_servpool_option_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_client_opt_args, inst) == DM_STOP) @@ -3128,8 +3120,8 @@ static int browseDHCPv4RelayForwardingInst(struct dmctx *dmctx, DMNODE *parent_n dhcp_relay_arg.dhcp_client_dm= p->dmmap_section; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "bbf_dhcpv4relay_instance", "bbf_dhcpv4relay_alias", "dmmap_dhcp_relay", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "bbf_dhcpv4relay_instance", "bbf_dhcpv4relay_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_relay_arg, inst) == DM_STOP) break; diff --git a/dmtree/tr181/dhcpv6.c b/dmtree/tr181/dhcpv6.c index beddb5e9..fda985d7 100644 --- a/dmtree/tr181/dhcpv6.c +++ b/dmtree/tr181/dhcpv6.c @@ -134,8 +134,8 @@ static int browseDHCPv6ClientInst(struct dmctx *dmctx, DMNODE *parent_node, void dhcpv6_client_arg.dhcp_client_dm = p->dmmap_section; dhcpv6_client_arg.ip = dmstrdup(ipv6addr?ipv6addr:""); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "bbf_dhcpv6client_instance", "bbf_dhcpv6client_alias", "dmmap_dhcpv6", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "bbf_dhcpv6client_instance", "bbf_dhcpv6client_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcpv6_client_arg, inst) == DM_STOP) break; @@ -157,8 +157,8 @@ static int browseDHCPv6ServerPoolInst(struct dmctx *dmctx, DMNODE *parent_node, dmuci_get_value_by_section_string(p->config_section, "interface", &interface); init_dhcpv6_args(&curr_dhcp6_args, p->config_section, interface); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "dhcpv6_serv_pool_instance", "dhcpv6_serv_pool_alias", "dmmap_dhcpv6", "dhcp"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "dhcpv6_serv_pool_instance", "dhcpv6_serv_pool_alias"); dmuci_get_value_by_section_string(p->dmmap_section, "order", &v); if (v == NULL || strlen(v) == 0) @@ -249,9 +249,9 @@ static int browseDHCPv6ServerPoolOptionInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "section_name"; browse_args.value = section_name(curr_dhcp_args->dhcp_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_sect, "bbf_dhcpv6_servpool_option_instance", "bbf_dhcpv6_servpool_option_alias", "dmmap_dhcpv6", "servpool_option", - check_browse_section, (void *)&browse_args); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_sect, "bbf_dhcpv6_servpool_option_instance", "bbf_dhcpv6_servpool_option_alias", + check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&dhcp_client_opt_args, inst) == DM_STOP) break; @@ -558,25 +558,24 @@ static int get_DHCPv6Client_Interface(char *refparam, struct dmctx *ctx, void *d static int set_DHCPv6Client_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - struct uci_section *s; + struct uci_section *s = NULL; char *linker = NULL, *v; - char interface[256] = {0}; switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 256, NULL, 0, NULL, 0)) return FAULT_9007; - if (strlen(value) == 0 || strcmp(value, "") == 0) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || linker[0] == '\0') return FAULT_9007; - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); uci_path_foreach_sections(bbfdm, "dmmap_dhcpv6", "interface", s) { dmuci_get_value_by_section_string(s, "section_name", &v); if (strcmp(v, linker) == 0) return FAULT_9007; } + uci_foreach_sections("network", "interface", s) { if (strcmp(section_name(s), linker) == 0) { dmuci_get_value_by_section_string(s, "proto", &v); @@ -586,8 +585,7 @@ static int set_DHCPv6Client_Interface(char *refparam, struct dmctx *ctx, void *d } break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); + adm_entry_get_linker_value(ctx, value, &linker); dmuci_set_value_by_section_bbfdm(((struct dhcpv6_client_args *)data)->dhcp_client_dm, "section_name", linker); break; } @@ -908,7 +906,7 @@ static int get_DHCPv6ServerPool_Interface(char *refparam, struct dmctx *ctx, voi static int set_DHCPv6ServerPool_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *linker; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -916,13 +914,12 @@ static int set_DHCPv6ServerPool_Interface(char *refparam, struct dmctx *ctx, voi return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct dhcpv6_args *)data)->dhcp_sec, "interface", linker); dmfree(linker); } - return 0; + break; } return 0; } diff --git a/dmtree/tr181/dns.c b/dmtree/tr181/dns.c index b0c595aa..e14fd881 100644 --- a/dmtree/tr181/dns.c +++ b/dmtree/tr181/dns.c @@ -109,8 +109,8 @@ static int browseServerInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev dmmap_synchronizeDNSClientRelayServer(dmctx, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, "dmmap_dns", "dns_server", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "dns_server_instance", "dns_server_alias", "dmmap_dns", "dns_server"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "dns_server_instance", "dns_server_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -126,8 +126,8 @@ static int browseRelayForwardingInst(struct dmctx *dmctx, DMNODE *parent_node, v dmmap_synchronizeDNSClientRelayServer(dmctx, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, "dmmap_dns", "dns_server", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "dns_server_instance", "dns_server_alias", "dmmap_dns", "dns_server"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "dns_server_instance", "dns_server_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -142,8 +142,8 @@ static int browseResultInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "NSLookupResult", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "nslookup_res_instance", "nslookup_res_alias", DMMAP_DIAGNOSTIGS, "NSLookupResult"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "nslookup_res_instance", "nslookup_res_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -627,8 +627,7 @@ static int set_server_dns_server(char *refparam, struct dmctx *ctx, void *data, static int set_server_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *str, *ointerface, *ip, *interface; - char intf[256] = {0}; + char *str, *ointerface, *ip, *interface = NULL; switch (action) { case VALUECHECK: @@ -636,8 +635,10 @@ static int set_server_interface(char *refparam, struct dmctx *ctx, void *data, c return FAULT_9007; break; case VALUESET: - append_dot_to_string(intf, value, sizeof(intf)); - adm_entry_get_linker_value(ctx, intf, &interface); + adm_entry_get_linker_value(ctx, value, &interface); + if (interface == NULL && interface[0] == '\0') + return 0; + dmuci_get_value_by_section_string((struct uci_section *)data, "interface", &ointerface); if (strcmp(ointerface, interface) == 0) return 0; @@ -764,8 +765,7 @@ static int set_forwarding_dns_server(char *refparam, struct dmctx *ctx, void *da static int set_forwarding_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *str, *ointerface, *ip, *interface; - char intf[256] = {0}; + char *str, *ointerface, *ip, *interface = NULL; switch (action) { case VALUECHECK: @@ -773,8 +773,10 @@ static int set_forwarding_interface(char *refparam, struct dmctx *ctx, void *dat return FAULT_9007; break; case VALUESET: - append_dot_to_string(intf, value, sizeof(intf)); - adm_entry_get_linker_value(ctx, intf, &interface); + adm_entry_get_linker_value(ctx, value, &interface); + if (interface == NULL || interface[0] == '\0') + return 0; + dmuci_get_value_by_section_string((struct uci_section *)data, "interface", &ointerface); if (strcmp(ointerface, interface) == 0) return 0; diff --git a/dmtree/tr181/dsl.c b/dmtree/tr181/dsl.c index 177f5025..78d2054f 100644 --- a/dmtree/tr181/dsl.c +++ b/dmtree/tr181/dsl.c @@ -118,8 +118,8 @@ static int browseDSLLineInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre s = update_create_dmmap_dsl_line(cur_dsl_line_args.id); init_dsl_line(&cur_dsl_line_args, s); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "dsl_line_instance", "dsl_line_alias", "dmmap", "dsl_line"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "dsl_line_instance", "dsl_line_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&cur_dsl_line_args, inst) == DM_STOP) break; @@ -149,8 +149,8 @@ static int browseDSLChannelInst(struct dmctx *dmctx, DMNODE *parent_node, void * s = update_create_dmmap_dsl_channel(cur_dsl_channel_args.id); init_dsl_channel(&cur_dsl_channel_args, s); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "dsl_channel_instance", "dsl_channel_alias", "dmmap", "dsl_line"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "dsl_channel_instance", "dsl_channel_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&cur_dsl_channel_args, inst) == DM_STOP) break; diff --git a/dmtree/tr181/dynamicdns.c b/dmtree/tr181/dynamicdns.c index 1d733d79..7bad9203 100644 --- a/dmtree/tr181/dynamicdns.c +++ b/dmtree/tr181/dynamicdns.c @@ -42,8 +42,8 @@ static int browseDynamicDNSClientInst(struct dmctx *dmctx, DMNODE *parent_node, synchronize_specific_config_sections_with_dmmap("ddns", "service", "dmmap_ddns", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "clientinstance", "clientalias", "dmmap_ddns", "service"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "clientinstance", "clientalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -133,8 +133,8 @@ static int browseDynamicDNSServerInst(struct dmctx *dmctx, DMNODE *parent_node, dmmap_synchronizeDynamicDNSServer(dmctx, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, "dmmap_ddns", "ddns_server", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "serverinstance", "serveralias", "dmmap_ddns", "ddns_server"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "serverinstance", "serveralias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -469,7 +469,7 @@ static int get_DynamicDNSClient_Server(char *refparam, struct dmctx *ctx, void * static int set_DynamicDNSClient_Server(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, *linker = NULL; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -477,12 +477,11 @@ static int set_DynamicDNSClient_Server(char *refparam, struct dmctx *ctx, void * return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (linker) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section((struct uci_section *)data, "service_name", linker); - else - return FAULT_9005; + dmfree(linker); + } break; } return 0; @@ -501,7 +500,7 @@ static int get_DynamicDNSClient_Interface(char *refparam, struct dmctx *ctx, voi static int set_DynamicDNSClient_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *linker = NULL; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -509,12 +508,11 @@ static int set_DynamicDNSClient_Interface(char *refparam, struct dmctx *ctx, voi return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section((struct uci_section *)data, "interface", linker); - else - return FAULT_9005; + dmfree(linker); + } break; } return 0; diff --git a/dmtree/tr181/ethernet.c b/dmtree/tr181/ethernet.c index c3b2d91e..4276f2c4 100644 --- a/dmtree/tr181/ethernet.c +++ b/dmtree/tr181/ethernet.c @@ -230,8 +230,8 @@ static int browseEthernetInterfaceInst(struct dmctx *dmctx, DMNODE *parent_node, dmuci_get_value_by_section_string(p->config_section, "ifname", &ifname); init_eth_port(&curr_eth_port_args, p->config_section, ifname); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "eth_port_instance", "eth_port_alias", "dmmap_ports", "ethport"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "eth_port_instance", "eth_port_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_eth_port_args, inst) == DM_STOP) break; @@ -248,8 +248,8 @@ static int browseEthernetLinkInst(struct dmctx *dmctx, DMNODE *parent_node, void dmmap_synchronizeEthernetLink(dmctx, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, DMMAP, "link", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "link_instance", "link_alias", "dmmap", "link"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "link_instance", "link_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst) == DM_STOP) break; @@ -272,8 +272,8 @@ static int browseEthernetVLANTerminationInst(struct dmctx *dmctx, DMNODE *parent if (strcmp(type, "untagged") == 0 || (*name != '\0' && !is_vlan_termination_section(name))) continue; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "vlan_term_instance", "vlan_term_alias", "dmmap_network", "device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "vlan_term_instance", "vlan_term_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -297,8 +297,8 @@ static int browseEthernetRMONStatsInst(struct dmctx *dmctx, DMNODE *parent_node, if (!res) continue; init_eth_rmon(&curr_eth_rmon_args, p->config_section, res); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "eth_rmon_instance", "eth_rmon_alias", "dmmap_eth_rmon", "ethport"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "eth_rmon_instance", "eth_rmon_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_eth_rmon_args, inst) == DM_STOP) break; @@ -978,7 +978,7 @@ static int get_EthernetLink_LowerLayers(char *refparam, struct dmctx *ctx, void static int set_EthernetLink_LowerLayers(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -986,32 +986,26 @@ static int set_EthernetLink_LowerLayers(char *refparam, struct dmctx *ctx, void return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || *linker == '\0') + return -1; - if (strncmp(lower_layer, "Device.Ethernet.Interface.", 26) == 0) { - char *linker, *int_name; - adm_entry_get_linker_value(ctx, lower_layer, &linker); - - if (linker == NULL || *linker == '\0') - return -1; + if (strncmp(value, "Device.Ethernet.Interface.", 26) == 0) { + struct uci_section *s = NULL; + char *int_name = NULL; dmuci_set_value_by_section((struct uci_section *)data, "device", linker); dmuci_get_value_by_section_string((struct uci_section *)data, "section_name", &int_name); - struct uci_section *s; + uci_foreach_sections("network", "interface", s) { if (strcmp(section_name(s), int_name) == 0) { dmuci_set_value_by_section(s, "ifname", linker); break; } } - } else if (strncmp(lower_layer, "Device.Bridging.Bridge.", 23) == 0) { - char *linker; - adm_entry_get_linker_value(ctx, lower_layer, &linker); - - if (linker == NULL || *linker == '\0') - return -1; - + } else if (strncmp(value, "Device.Bridging.Bridge.", 23) == 0) { char br_linker[250] = {0}; + strncpy(br_linker, linker, sizeof(br_linker) - 1); char *bridge = strchr(br_linker, ':'); @@ -1213,7 +1207,7 @@ static int get_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -1221,14 +1215,12 @@ static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || *linker == '\0') + return -1; - if (strncmp(lower_layer, "Device.Ethernet.Link.", 21) == 0) { - char new_name[16] = {0}, *linker = NULL, *type; - - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (linker == NULL || *linker == '\0') - return -1; + if (strncmp(value, "Device.Ethernet.Link.", 21) == 0) { + char new_name[16] = {0}, *type; // Get type option from device section dmuci_get_value_by_section_string((struct uci_section *)data, "type", &type); @@ -1239,7 +1231,7 @@ static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx struct uci_section *s = NULL, *dmmap_s = NULL; char link_inst[8] = {0}, sec_name[32] = {0}; - snprintf(link_inst, sizeof(link_inst), "%c", lower_layer[strlen(lower_layer)-2]); + snprintf(link_inst, sizeof(link_inst), "%c", value[21]); snprintf(new_name, sizeof(new_name), "%s_%s", linker, link_inst); if (is_name_exist_in_devices(new_name)) @@ -1281,15 +1273,10 @@ static int set_EthernetVLANTermination_LowerLayers(char *refparam, struct dmctx // Set ifname and name options of device section dmuci_set_value_by_section((struct uci_section *)data, "ifname", linker); dmuci_set_value_by_section((struct uci_section *)data, "name", new_name); - } else if (strncmp(lower_layer, "Device.Ethernet.VLANTermination.", 32) == 0) { - char new_name[16] = {0}, *linker = NULL; + + } else if (strncmp(value, "Device.Ethernet.VLANTermination.", 32) == 0) { struct uci_section *ss = NULL; - char *dev_name, *inner_vid, *vid; - - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (linker == NULL || *linker == '\0') - return -1; - + char *dev_name, *inner_vid, *vid, new_name[16] = {0}; dmuci_get_value_by_section_string((struct uci_section *)data, "vid", &vid); diff --git a/dmtree/tr181/firewall.c b/dmtree/tr181/firewall.c index 4de07e02..ff82ebd2 100644 --- a/dmtree/tr181/firewall.c +++ b/dmtree/tr181/firewall.c @@ -20,8 +20,8 @@ static int browseLevelInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_ s = is_dmmap_section_exist("dmmap_firewall", "level"); if (!s) dmuci_add_section_bbfdm("dmmap_firewall", "level", &s); - handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "firewall_level_instance", "firewall_level_alias", "dmmap_firewall", "level"); + handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "firewall_level_instance", "firewall_level_alias"); DM_LINK_INST_OBJ(dmctx, parent_node, s, "1"); return 0; } @@ -33,8 +33,8 @@ static int browseChainInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_ s = is_dmmap_section_exist("dmmap_firewall", "chain"); if (!s) dmuci_add_section_bbfdm("dmmap_firewall", "chain", &s); - handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "firewall_chain_instance", "firewall_chain_alias", "dmmap_firewall", "chain"); + handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "firewall_chain_instance", "firewall_chain_alias"); DM_LINK_INST_OBJ(dmctx, parent_node, s, "1"); return 0; } @@ -49,8 +49,8 @@ static int browseRuleInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_d synchronize_specific_config_sections_with_dmmap("firewall", "rule", "dmmap_firewall", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "firewall_chain_rule_instance", "firewall_chain_rule_alias", "dmmap_firewall", "rule"); + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "firewall_chain_rule_instance", "firewall_chain_rule_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -900,24 +900,22 @@ static int set_rule_target(char *refparam, struct dmctx *ctx, void *data, char * static int set_rule_source_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *iface, *zone, *net; - struct uci_section *s = NULL; - char interface[256] = {0}; + char *iface = NULL, *zone, *net; switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 256, NULL, 0, NULL, 0)) return FAULT_9007; - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); + adm_entry_get_linker_value(ctx, value, &iface); if (iface == NULL || iface[0] == '\0') return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); + adm_entry_get_linker_value(ctx, value, &iface); if (iface && iface[0] != '\0') { + struct uci_section *s = NULL; + uci_foreach_sections("firewall", "zone", s) { dmuci_get_value_by_section_string(s, "network", &net); if (dm_strword(net, iface)) { @@ -926,6 +924,7 @@ static int set_rule_source_interface(char *refparam, struct dmctx *ctx, void *da break; } } + dmfree(iface); } break; } @@ -934,9 +933,7 @@ static int set_rule_source_interface(char *refparam, struct dmctx *ctx, void *da static int set_rule_dest_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *iface, *zone, *net; - struct uci_section *s = NULL; - char interface[256] = {0}; + char *iface = NULL, *zone, *net; switch (action) { case VALUECHECK: @@ -949,9 +946,10 @@ static int set_rule_dest_interface(char *refparam, struct dmctx *ctx, void *data break; } - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); + adm_entry_get_linker_value(ctx, value, &iface); if (iface != NULL && iface[0] != '\0') { + struct uci_section *s = NULL; + uci_foreach_sections("firewall", "zone", s) { dmuci_get_value_by_section_string(s, "name", &net); if (dm_strword(net, iface)) { @@ -960,10 +958,11 @@ static int set_rule_dest_interface(char *refparam, struct dmctx *ctx, void *data break; } } + dmfree(iface); } break; } - return 0; + return 0; } static int set_rule_i_p_version(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) diff --git a/dmtree/tr181/gre.c b/dmtree/tr181/gre.c index 790a11f8..9bcd365c 100644 --- a/dmtree/tr181/gre.c +++ b/dmtree/tr181/gre.c @@ -23,8 +23,8 @@ static int browseGRETunnelInst(struct dmctx *dmctx, DMNODE *parent_node, void *p synchronize_specific_config_sections_with_dmmap_eq("network", "interface", "dmmap_network", "proto", "gre", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "gretunnel_instance", "gretunnel_alias", "dmmap_network", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "gretunnel_instance", "gretunnel_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP) break; @@ -62,8 +62,8 @@ static int browseGRETunnelInterfaceInst(struct dmctx *dmctx, DMNODE *parent_node browse_args.option = "section_name"; browse_args.value = section_name(dm->config_section); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "greiface_instance", "greiface_alias", "dmmap_network", "interface", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "greiface_instance", "greiface_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP) diff --git a/dmtree/tr181/ieee1905.c b/dmtree/tr181/ieee1905.c index 5c9f37ee..3d38b597 100644 --- a/dmtree/tr181/ieee1905.c +++ b/dmtree/tr181/ieee1905.c @@ -84,8 +84,8 @@ static int browseIEEE1905ALForwardingTableForwardingRuleInst(struct dmctx *dmctx synchronize_specific_config_sections_with_dmmap("ieee1905", "forwarding_rule", "dmmap_forwarding_rule", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "forwardingruleinstance", "forwardingrulealias", "dmmap_forwarding_rule", "forwarding_rule"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "forwardingruleinstance", "forwardingrulealias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/interfacestack.c b/dmtree/tr181/interfacestack.c index 48685661..b98e264b 100644 --- a/dmtree/tr181/interfacestack.c +++ b/dmtree/tr181/interfacestack.c @@ -188,8 +188,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -266,8 +266,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -329,8 +329,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -425,8 +425,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -509,8 +509,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -627,8 +627,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre snprintf(buf_instance, sizeof(buf_instance), "%d", ++instance); dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -682,8 +682,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -729,8 +729,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; @@ -776,8 +776,8 @@ int browseInterfaceStackInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmmap_s = create_dmmap_interface_stack_section(buf_instance); // link instance to interface stack data - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_s, "interface_stack_instance", "interface_stack_alias", "dmmap_interface_stack", "interface_stack"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_s, "interface_stack_instance", "interface_stack_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&intf_stack_data, inst) == DM_STOP) goto end; diff --git a/dmtree/tr181/ip.c b/dmtree/tr181/ip.c index 5f76c7c4..cf9e5576 100644 --- a/dmtree/tr181/ip.c +++ b/dmtree/tr181/ip.c @@ -433,8 +433,8 @@ static int browseIPInterfaceInst(struct dmctx *dmctx, DMNODE *parent_node, void strchr(ifname, '@')) continue; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "ip_int_instance", "ip_int_alias", "dmmap_network", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "ip_int_instance", "ip_int_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -480,8 +480,8 @@ static int browseIPInterfaceIPv4AddressInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv4_instance", "ipv4_alias", "dmmap_network_ipv4", "intf_ipv4", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv4_instance", "ipv4_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -497,8 +497,8 @@ static int browseIPInterfaceIPv4AddressInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv4_instance", "ipv4_alias", "dmmap_network_ipv4", "intf_ipv4", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv4_instance", "ipv4_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -547,8 +547,8 @@ static int browseIPInterfaceIPv6AddressInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_instance", "ipv6_alias", "dmmap_network_ipv6", "intf_ipv6", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_instance", "ipv6_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -564,8 +564,8 @@ static int browseIPInterfaceIPv6AddressInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_instance", "ipv6_alias", "dmmap_network_ipv6", "intf_ipv6", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_instance", "ipv6_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -586,8 +586,8 @@ static int browseIPInterfaceIPv6AddressInst(struct dmctx *dmctx, DMNODE *parent_ browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_instance", "ipv6_alias", "dmmap_network_ipv6", "intf_ipv6", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_instance", "ipv6_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -638,8 +638,8 @@ static int browseIPInterfaceIPv6PrefixInst(struct dmctx *dmctx, DMNODE *parent_n browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", "dmmap_network_ipv6_prefix", "intf_ipv6_prefix", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -655,8 +655,8 @@ static int browseIPInterfaceIPv6PrefixInst(struct dmctx *dmctx, DMNODE *parent_n browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", "dmmap_network_ipv6_prefix", "intf_ipv6_prefix", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -679,8 +679,8 @@ static int browseIPInterfaceIPv6PrefixInst(struct dmctx *dmctx, DMNODE *parent_n browse_args.option = "parent_section"; browse_args.value = section_name(parent_sec); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", "dmmap_network_ipv6_prefix", "intf_ipv6_prefix", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + dmmap_s, "ipv6_prefix_instance", "ipv6_prefix_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_intf_ip_args, inst) == DM_STOP) @@ -1323,7 +1323,6 @@ static int get_IPInterface_LowerLayers(char *refparam, struct dmctx *ctx, void * static int set_IPInterface_LowerLayers(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { char *linker = NULL; - char lower_layer[256] = {0}; switch (action) { case VALUECHECK: @@ -1331,14 +1330,11 @@ static int set_IPInterface_LowerLayers(char *refparam, struct dmctx *ctx, void * return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - - if (strncmp(lower_layer, "Device.Ethernet.VLANTermination.", 32) == 0) { - adm_entry_get_linker_value(ctx, lower_layer, &linker); - - if (linker == NULL || *linker == '\0') - return -1; + adm_entry_get_linker_value(ctx, value, &linker); + if (linker == NULL || *linker == '\0') + return -1; + if (strncmp(value, "Device.Ethernet.VLANTermination.", 32) == 0) { struct uci_section *s = NULL, *stmp = NULL; // Remove the device section corresponding to this interface if exists @@ -1377,11 +1373,7 @@ static int set_IPInterface_LowerLayers(char *refparam, struct dmctx *ctx, void * // Update ifname list dmuci_set_value_by_section((struct uci_section *)data, "ifname", linker); - } else if (strncmp(lower_layer, "Device.Ethernet.Link.", 21) == 0) { - adm_entry_get_linker_value(ctx, lower_layer, &linker); - - if (linker == NULL || *linker == '\0') - return -1; + } else if (strncmp(value, "Device.Ethernet.Link.", 21) == 0) { // Get interface name from Ethernet.Link. object struct uci_section *s = NULL; diff --git a/dmtree/tr181/nat.c b/dmtree/tr181/nat.c index 03aaf7b5..8fcd9267 100644 --- a/dmtree/tr181/nat.c +++ b/dmtree/tr181/nat.c @@ -243,7 +243,6 @@ static int get_nat_interface_setting_interface(char *refparam, struct dmctx *ctx static int set_nat_interface_setting_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { char *iface, *pch, *pchr, buf[256] = ""; - char interface[256] = {0}; switch (action) { case VALUECHECK: @@ -254,9 +253,8 @@ static int set_nat_interface_setting_interface(char *refparam, struct dmctx *ctx strcpy(buf, value); dmuci_set_value_by_section((struct uci_section *)data, "network", ""); for(pch = strtok_r(buf, ",", &pchr); pch != NULL; pch = strtok_r(NULL, ",", &pchr)) { - append_dot_to_string(interface, pch, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); - if (iface) { + adm_entry_get_linker_value(ctx, pch, &iface); + if (iface && *iface) { dmuci_add_list_value_by_section((struct uci_section *)data, "network", iface); dmfree(iface); } @@ -361,9 +359,7 @@ static int get_nat_port_mapping_interface(char *refparam, struct dmctx *ctx, voi static int set_nat_port_mapping_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *iface, *network, *zone; - struct uci_section *s = NULL; - char interface[256] = {0}; + char *iface = NULL, *network, *zone; switch (action) { case VALUECHECK: @@ -371,9 +367,10 @@ static int set_nat_port_mapping_interface(char *refparam, struct dmctx *ctx, voi return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); - if (iface[0] != '\0') { + adm_entry_get_linker_value(ctx, value, &iface); + if (iface && *iface) { + struct uci_section *s = NULL; + uci_foreach_sections("firewall", "zone", s) { dmuci_get_value_by_section_string(s, "network", &network); if (is_strword_in_optionvalue(network, iface)) { @@ -382,6 +379,7 @@ static int set_nat_port_mapping_interface(char *refparam, struct dmctx *ctx, voi break; } } + dmfree(iface); } break; } @@ -580,8 +578,8 @@ static int browseInterfaceSettingInst(struct dmctx *dmctx, DMNODE *parent_node, synchronize_specific_config_sections_with_dmmap("firewall", "zone", "dmmap_firewall", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "interface_setting_instance", "interface_setting_alias", "dmmap_firewall", "zone"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "interface_setting_instance", "interface_setting_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -603,8 +601,8 @@ static int browsePortMappingInst(struct dmctx *dmctx, DMNODE *parent_node, void if (*target != '\0' && strcmp(target, "DNAT") != 0) continue; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "port_mapping_instance", "port_mapping_alias", "dmmap_firewall", "redirect"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "port_mapping_instance", "port_mapping_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/ppp.c b/dmtree/tr181/ppp.c index ea402572..e0370d28 100644 --- a/dmtree/tr181/ppp.c +++ b/dmtree/tr181/ppp.c @@ -285,7 +285,7 @@ static int get_ppp_lower_layer(char *refparam, struct dmctx *ctx, void *data, ch static int set_ppp_lower_layer(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, *linker; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -293,12 +293,11 @@ static int set_ppp_lower_layer(char *refparam, struct dmctx *ctx, void *data, ch return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if(linker) + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct uci_section *)data), "ifname", linker); - else - return FAULT_9005; + dmfree(linker); + } return 0; } return 0; @@ -465,8 +464,8 @@ static int browseInterfaceInst(struct dmctx *dmctx, DMNODE *parent_node, void *p if (!strstr(proto, "ppp")) continue; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "ppp_int_instance", "ppp_int_alias", "dmmap_network", "interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "ppp_int_instance", "ppp_int_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/ptm.c b/dmtree/tr181/ptm.c index 9d8bff31..486dcd78 100644 --- a/dmtree/tr181/ptm.c +++ b/dmtree/tr181/ptm.c @@ -253,8 +253,8 @@ static int browsePtmLinkInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre dmuci_get_value_by_section_string(p->config_section, "device", &ifname); init_ptm_link(&curr_ptm_args, p->config_section, ifname); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "ptmlinkinstance", "ptmlinkalias", "dmmap_dsl", "ptm-device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "ptmlinkinstance", "ptmlinkalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_ptm_args, inst) == DM_STOP) break; diff --git a/dmtree/tr181/qos-iopsyswrt.c b/dmtree/tr181/qos-iopsyswrt.c index 6750b5fc..df0eb5a7 100644 --- a/dmtree/tr181/qos-iopsyswrt.c +++ b/dmtree/tr181/qos-iopsyswrt.c @@ -30,8 +30,8 @@ int os_browseQoSClassificationInst(struct dmctx *dmctx, DMNODE *parent_node, voi synchronize_specific_config_sections_with_dmmap("qos", "classify", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "classify_instance", "classifyalias", "dmmap_qos", "classify"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "classify_instance", "classifyalias"); //synchronizing option src_ip of uci classify section to src_mask/src_ip of dmmap's classify section dmuci_get_value_by_section_string(p->config_section, "src_ip", &value); @@ -69,8 +69,8 @@ int browseQoSClassificationInst(struct dmctx *dmctx, DMNODE *parent_node, void * synchronize_specific_config_sections_with_dmmap("qos", "classify", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "classificationinstance", "classificationalias", "dmmap_qos", "classify"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "classificationinstance", "classificationalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -107,8 +107,8 @@ int os_browseQoSPolicerInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev synchronize_specific_config_sections_with_dmmap("qos", "policer", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "policer_instance", "policeralias", "dmmap_qos", "policer"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "policer_instance", "policeralias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -127,8 +127,8 @@ int os_browseQoSQueueInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_d synchronize_specific_config_sections_with_dmmap("qos", "queue", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "queueinstance", "queuealias", "dmmap_qos", "queue"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "queueinstance", "queuealias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -151,8 +151,8 @@ int os_browseQoSShaperInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_ synchronize_specific_config_sections_with_dmmap("qos", "shaper", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "shaperinstance", "shaperalias", "dmmap_qos", "shaper"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "shaperinstance", "shaperalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -1028,8 +1028,7 @@ int os_get_QoSClassification_Interface(char *refparam, struct dmctx *ctx, void * int os_set_QoSClassification_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *interface_linker = NULL; - char interface[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -1037,10 +1036,11 @@ int os_set_QoSClassification_Interface(char *refparam, struct dmctx *ctx, void * return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &interface_linker); - if (interface_linker) - dmuci_set_value_by_section((struct uci_section *)data, "ifname", interface_linker); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + dmuci_set_value_by_section((struct uci_section *)data, "ifname", linker); + dmfree(linker); + } break; } return 0; @@ -2468,29 +2468,21 @@ int os_get_QoSClassification_Policer(char *refparam, struct dmctx *ctx, void *da int os_set_QoSClassification_Policer(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *linker = NULL; - char policer[256] = {0}; + struct uci_section *dmmap_s = NULL; + char *linker = NULL, link_inst[8] = {0}; + switch (action) { case VALUECHECK: if (dm_validate_string(value, -1, 64, NULL, 0, NULL, 0)) return FAULT_9007; break; case VALUESET: - append_dot_to_string(policer, value, sizeof(policer)); - - if (strncmp(policer, "Device.QoS.Policer.", 19) != 0) + if (strncmp(value, "Device.QoS.Policer.", 19) != 0) return 0; - struct uci_section *dmmap_s = NULL; - char link_inst[8] = {0}; - snprintf(link_inst, sizeof(link_inst), "%c", policer[strlen(policer)-2]); + snprintf(link_inst, sizeof(link_inst), "%c", value[19]); get_dmmap_section_of_config_section_eq("dmmap_qos", "policer", "policer_instance", link_inst, &dmmap_s); - - if (dmmap_s == NULL) - break; - dmuci_get_value_by_section_string(dmmap_s, "section_name", &linker); - dmuci_set_value_by_section((struct uci_section *)data, "policer", linker); break; } @@ -3316,8 +3308,7 @@ int os_get_QoSQueue_Interface(char *refparam, struct dmctx *ctx, void *data, cha int os_set_QoSQueue_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *interface_linker = NULL; - char interface[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -3325,10 +3316,11 @@ int os_set_QoSQueue_Interface(char *refparam, struct dmctx *ctx, void *data, cha return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &interface_linker); - if (interface_linker) - dmuci_set_value_by_section((struct uci_section *)data, "ifname", interface_linker); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + dmuci_set_value_by_section((struct uci_section *)data, "ifname", linker); + dmfree(linker); + } break; } return 0; @@ -3729,8 +3721,7 @@ int os_get_QoSShaper_Interface(char *refparam, struct dmctx *ctx, void *data, ch int os_set_QoSShaper_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *interface_linker = NULL; - char interface[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -3738,9 +3729,11 @@ int os_set_QoSShaper_Interface(char *refparam, struct dmctx *ctx, void *data, ch return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &interface_linker); - dmuci_set_value_by_section((struct uci_section *)data, "ifname", interface_linker); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + dmuci_set_value_by_section((struct uci_section *)data, "ifname", linker); + dmfree(linker); + } break; } return 0; diff --git a/dmtree/tr181/qos-openwrt.c b/dmtree/tr181/qos-openwrt.c index 04ed08ef..f76e70fa 100644 --- a/dmtree/tr181/qos-openwrt.c +++ b/dmtree/tr181/qos-openwrt.c @@ -71,8 +71,8 @@ int os_browseQoSClassificationInst(struct dmctx *dmctx, DMNODE *parent_node, voi synchronize_specific_config_sections_with_dmmap("qos", "classify", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "classifinstance", "classifalias", "dmmap_qos", "classify"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "classifinstance", "classifalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP) break; @@ -152,8 +152,8 @@ int os_browseQoSQueueStatsInst(struct dmctx *dmctx, DMNODE *parent_node, void *p if (lastinstancestore != NULL && max_inst != NULL) max_inst = dmstrdup(lastinstancestore); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "queuestatsinstance", "queuestatsalias", "dmmap_qos", "qos_queue_stats"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "queuestatsinstance", "queuestatsalias"); lastinstancestore = dmstrdup(max_inst); @@ -586,8 +586,7 @@ int get_QoS_DefaultQueue(char *refparam, struct dmctx *ctx, void *data, char *in int set_QoS_DefaultQueue(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *linker; - char lower_layer[256] = {0}; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -595,9 +594,11 @@ int set_QoS_DefaultQueue(char *refparam, struct dmctx *ctx, void *data, char *in return FAULT_9007; break; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - adm_entry_get_linker_value(ctx, lower_layer, &linker); - dmuci_set_value("qos", "Default", "default", linker); + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + dmuci_set_value("qos", "Default", "default", linker); + dmfree(linker); + } break; } return 0; @@ -3392,8 +3393,8 @@ int browseQoSQueueInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data synchronize_specific_config_sections_with_dmmap("qos", "class", "dmmap_qos", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "queueinstance", "queuealias", "dmmap_qos", "class"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "queueinstance", "queuealias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP) break; @@ -3705,8 +3706,8 @@ int browseQoSShaperInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_dat if (limitrate == NULL || strlen(limitrate) == 0) continue; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "shaperinstance", "shaperalias", "dmmap_qos", "class"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "shaperinstance", "shaperalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p, inst) == DM_STOP) break; diff --git a/dmtree/tr181/routing.c b/dmtree/tr181/routing.c index 6048bc5f..d3e27d2c 100644 --- a/dmtree/tr181/routing.c +++ b/dmtree/tr181/routing.c @@ -651,7 +651,7 @@ static int get_router_ipv4forwarding_interface_linker_parameter(char *refparam, static int set_router_ipv4forwarding_interface_linker_parameter(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *linker = NULL; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -659,9 +659,8 @@ static int set_router_ipv4forwarding_interface_linker_parameter(char *refparam, return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "interface", linker); dmfree(linker); } @@ -793,7 +792,7 @@ static int get_RoutingRouterIPv6Forwarding_Interface(char *refparam, struct dmct static int set_RoutingRouterIPv6Forwarding_Interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *linker = NULL; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -801,9 +800,8 @@ static int set_RoutingRouterIPv6Forwarding_Interface(char *refparam, struct dmct return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct routingfwdargs *)data)->routefwdsection, "interface", linker); dmfree(linker); } @@ -1180,8 +1178,8 @@ static int browseRouterInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev update_section_list(DMMAP,"router", NULL, 1, NULL, NULL, NULL, NULL, NULL); uci_path_foreach_sections(bbfdm, "dmmap", "router", s) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - s, "router_instance", "router_alias", "dmmap", "router"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + s, "router_instance", "router_alias"); DM_LINK_INST_OBJ(dmctx, parent_node, (void *)s, inst); break; diff --git a/dmtree/tr181/security.c b/dmtree/tr181/security.c index 93372f87..98452af7 100644 --- a/dmtree/tr181/security.c +++ b/dmtree/tr181/security.c @@ -235,8 +235,8 @@ static int browseSecurityCertificateInst(struct dmctx *dmctx, DMNODE *parent_nod } init_certificate(certifcates_paths[i], cert, dmmap_sect, &certificateprofile); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "security_certificate_instance", "security_certificate_alias", "dmmap_security", "security_certificate"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "security_certificate_instance", "security_certificate_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&certificateprofile, inst) == DM_STOP) break; @@ -258,8 +258,8 @@ static int browseSecurityCertificateInst(struct dmctx *dmctx, DMNODE *parent_nod } init_certificate(certifcates_paths[i], cacert, dmmap_sect, &certificateprofile); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "security_certificate_instance", "security_certificate_alias", "dmmap_security", "security_certificate"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "security_certificate_instance", "security_certificate_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&certificateprofile, inst) == DM_STOP) break; diff --git a/dmtree/tr181/times.c b/dmtree/tr181/times.c index 40110a57..5b14d099 100644 --- a/dmtree/tr181/times.c +++ b/dmtree/tr181/times.c @@ -160,18 +160,16 @@ static int get_time_ntpserver5(char *refparam, struct dmctx *ctx, void *data, ch static int set_time_source_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *iface = NULL; + char *iface = NULL; switch (action) { case VALUECHECK: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); + adm_entry_get_linker_value(ctx, value, &iface); if (iface == NULL || iface[0] == '\0') return FAULT_9007; break; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &iface); + adm_entry_get_linker_value(ctx, value, &iface); dmuci_set_value("system", "ntp", "interface", iface); return 0; } diff --git a/dmtree/tr181/upnp.c b/dmtree/tr181/upnp.c index 41dd8bd0..709c9510 100644 --- a/dmtree/tr181/upnp.c +++ b/dmtree/tr181/upnp.c @@ -137,8 +137,8 @@ static int browseUPnPDiscoveryRootDeviceInst(struct dmctx *dmctx, DMNODE *parent upnp_dev.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_root_device_instance", "upnp_root_device_alias", "dmmap_upnp", "upnp_root_device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_root_device_instance", "upnp_root_device_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev, inst) == DM_STOP) return 0; @@ -183,8 +183,8 @@ static int browseUPnPDiscoveryDeviceInst(struct dmctx *dmctx, DMNODE *parent_nod upnp_dev.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_evice_instance", "upnp_device_alias", "dmmap_upnp", "upnp_device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_evice_instance", "upnp_device_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev, inst) == DM_STOP) return 0; @@ -229,8 +229,8 @@ static int browseUPnPDiscoveryServiceInst(struct dmctx *dmctx, DMNODE *parent_no upnp_dev.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_service_instance", "upnp_service_alias", "dmmap_upnp", "upnp_service"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_service_instance", "upnp_service_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev, inst) == DM_STOP) return 0; @@ -263,8 +263,8 @@ static int browseUPnPDescriptionDeviceDescriptionInst(struct dmctx *dmctx, DMNOD } upnp_desc.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_service_instance", "upnp_service_alias", "dmmap_upnp", "upnp_description"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_service_instance", "upnp_service_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_desc, inst) == DM_STOP) return 0; @@ -308,8 +308,8 @@ static int browseUPnPDescriptionDeviceInstanceInst(struct dmctx *dmctx, DMNODE * upnp_dev_inst.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_device_inst_instance", "upnp_device_inst_alias", "dmmap_upnp", "upnp_device_inst"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_device_inst_instance", "upnp_device_inst_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_dev_inst, inst) == DM_STOP) return 0; @@ -347,8 +347,8 @@ static int browseUPnPDescriptionServiceInstanceInst(struct dmctx *dmctx, DMNODE upnp_services_inst.dmmap_sect = dmmap_sect; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "upnp_service_inst_instance", "upnp_service_inst_alias", "dmmap_upnp", "upnp_service_inst"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "upnp_service_inst_instance", "upnp_service_inst_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &upnp_services_inst, inst) == DM_STOP) return 0; diff --git a/dmtree/tr181/usb.c b/dmtree/tr181/usb.c index 61894350..143de661 100644 --- a/dmtree/tr181/usb.c +++ b/dmtree/tr181/usb.c @@ -161,8 +161,8 @@ static int browseUSBInterfaceInst(struct dmctx *dmctx, DMNODE *parent_node, void dmasprintf(&statistics_path, "%s/statistics", iface_path); init_usb_interface(p->dm, iface_name, iface_path, statistics_path, port_link, &iface); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dm, "usb_iface_instance", "usb_iface_alias", "dmmap_usb", "dmmap_interface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dm, "usb_iface_instance", "usb_iface_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &iface, inst) == DM_STOP) break; @@ -197,8 +197,8 @@ static int browseUSBPortInst(struct dmctx *dmctx, DMNODE *parent_node, void *pre init_usb_port(p->dm, p->sysfs_folder_name, p->sysfs_folder_path, &port); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dm, "usb_port_instance", "usb_port_alias", "dmmap_usb", "dmmap_port"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dm, "usb_port_instance", "usb_port_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &port, inst) == DM_STOP) break; @@ -226,8 +226,8 @@ static int browseUSBUSBHostsHostInst(struct dmctx *dmctx, DMNODE *parent_node, v init_usb_port(p->dm, p->sysfs_folder_name, p->sysfs_folder_path, &port); port.dmsect= p->dm; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dm, "usb_host_instance", "usb_host_alias", "dmmap_usb", "dmmap_host"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dm, "usb_host_instance", "usb_host_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &port, inst) == DM_STOP) break; @@ -332,8 +332,8 @@ static int browseUSBUSBHostsHostDeviceInst(struct dmctx *dmctx, DMNODE *parent_n port.dmsect = prev_port->dmsect; - instance = handle_update_instance(2, dmctx, &instnbr, update_instance_alias, 5, - p->dm, "usb_host_device_instance", "usb_host_device_alias", "dmmap_usb", "dmmap_host_device"); + instance = handle_update_instance(2, dmctx, &instnbr, update_instance_alias, 3, + p->dm, "usb_host_device_instance", "usb_host_device_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &port, instance) == DM_STOP) break; @@ -360,8 +360,8 @@ static int browseUSBUSBHostsHostDeviceConfigurationInst(struct dmctx *dmctx, DMN init_usb_port(s, usb_dev->folder_name, usb_dev->folder_path, &port); - handle_update_instance(3, dmctx, &max_inst, update_instance_alias, 5, - s, "usb_device_conf_instance", "usb_device_conf_alias", "dmmap_usb", "usb_device_conf"); + handle_update_instance(3, dmctx, &max_inst, update_instance_alias, 3, + s, "usb_device_conf_instance", "usb_device_conf_alias"); DM_LINK_INST_OBJ(dmctx, parent_node, &port, "1"); return 0; @@ -395,8 +395,8 @@ static int browseUSBUSBHostsHostDeviceConfigurationInterfaceInst(struct dmctx *d init_usb_port(dmmap_sect, ent->d_name, sysfs_rep_path, &port); - inst = handle_update_instance(4, dmctx, &max_inst, update_instance_alias, 5, - dmmap_sect, "usb_device_conf_iface_instance", "usb_device_conf_iface_alias", "dmmap_usb", "usb_device_conf_interface"); + inst = handle_update_instance(4, dmctx, &max_inst, update_instance_alias, 3, + dmmap_sect, "usb_device_conf_iface_instance", "usb_device_conf_iface_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, &port, inst) == DM_STOP) break; diff --git a/dmtree/tr181/users.c b/dmtree/tr181/users.c index 90b2ecf5..5837412a 100644 --- a/dmtree/tr181/users.c +++ b/dmtree/tr181/users.c @@ -22,8 +22,8 @@ static int browseUserInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_d synchronize_specific_config_sections_with_dmmap("users", "user", "dmmap_users", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "user_instance", "user_alias", "dmmap_users", "user"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "user_instance", "user_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/wifi.c b/dmtree/tr181/wifi.c index ec225d0d..358b933d 100644 --- a/dmtree/tr181/wifi.c +++ b/dmtree/tr181/wifi.c @@ -1793,7 +1793,7 @@ static int get_ssid_lower_layer(char *refparam, struct dmctx *ctx, void *data, c static int set_ssid_lower_layer(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char lower_layer[256] = {0}, *linker; + char *linker = NULL; switch (action) { case VALUECHECK: @@ -1801,13 +1801,11 @@ static int set_ssid_lower_layer(char *refparam, struct dmctx *ctx, void *data, c return FAULT_9007; return 0; case VALUESET: - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - adm_entry_get_linker_value(ctx, lower_layer, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section(((struct wifi_ssid_args *)data)->wifi_ssid_sec, "device", linker); dmfree(linker); - } else - return FAULT_9005; + } return 0; } return 0; @@ -1987,8 +1985,8 @@ static int browseWifiRadioInst(struct dmctx *dmctx, DMNODE *parent_node, void *p list_for_each_entry(p, &dup_list, list) { init_wifi_radio(&curr_wifi_radio_args, p->config_section); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "radioinstance", "radioalias", "dmmap_wireless", "wifi-device"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "radioinstance", "radioalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_wifi_radio_args, inst) == DM_STOP) break; @@ -2015,8 +2013,8 @@ static int browseWifiSsidInst(struct dmctx *dmctx, DMNODE *parent_node, void *pr #endif init_wifi_ssid(&curr_wifi_ssid_args, p->config_section, ifname, linker); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "ssidinstance", "ssidalias", "dmmap_wireless", "wifi-iface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "ssidinstance", "ssidalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_wifi_ssid_args, inst) == DM_STOP) break; @@ -2041,8 +2039,8 @@ static int browseWifiAccessPointInst(struct dmctx *dmctx, DMNODE *parent_node, v dmuci_get_value_by_section_string(p->config_section, "ifname", &ifname); init_wifi_acp(&curr_wifi_acp_args, p->config_section, ifname); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "ap_instance", "ap_alias", "dmmap_wireless", "wifi-iface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "ap_instance", "ap_alias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_wifi_acp_args, inst) == DM_STOP) break; @@ -2067,8 +2065,8 @@ static int browseWiFiEndPointInst(struct dmctx *dmctx, DMNODE *parent_node, void dmuci_get_value_by_section_string(p->config_section, "ifname", &ifname); init_wifi_enp(&curr_wifi_enp_args, p->config_section, ifname); - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "endpointinstance", "endpointalias", "dmmap_wireless", "wifi-iface"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "endpointinstance", "endpointalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_wifi_enp_args, inst) == DM_STOP) break; @@ -2091,8 +2089,8 @@ static int browseWiFiEndPointProfileInst(struct dmctx *dmctx, DMNODE *parent_nod dmuci_add_section_bbfdm("dmmap_wireless", "ep_profile", &s); dmuci_set_value_by_section_bbfdm(s, "ep_key", ep_instance); - handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, - s, "ep_profile_instance", "ep_profile_alias", "dmmap_wireless", "wifi-iface"); + handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 3, + s, "ep_profile_instance", "ep_profile_alias"); DM_LINK_INST_OBJ(dmctx, parent_node, ep_args->wifi_enp_sec, "1"); return 0; diff --git a/dmtree/tr181/x_iopsys_eu_buttons.c b/dmtree/tr181/x_iopsys_eu_buttons.c index d5f3ca52..d24610f7 100644 --- a/dmtree/tr181/x_iopsys_eu_buttons.c +++ b/dmtree/tr181/x_iopsys_eu_buttons.c @@ -21,8 +21,8 @@ int browseXIopsysEuButton(struct dmctx *dmctx, DMNODE *parent_node, void *prev_d synchronize_specific_config_sections_with_dmmap("buttons", "button", "dmmap_buttons", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "buttoninstance", "buttonalias", "dmmap_buttons", "button"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "buttoninstance", "buttonalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/x_iopsys_eu_dropbear.c b/dmtree/tr181/x_iopsys_eu_dropbear.c index a2f4b8bd..dccabf29 100644 --- a/dmtree/tr181/x_iopsys_eu_dropbear.c +++ b/dmtree/tr181/x_iopsys_eu_dropbear.c @@ -21,8 +21,8 @@ int browseXIopsysEuDropbear(struct dmctx *dmctx, DMNODE *parent_node, void *prev synchronize_specific_config_sections_with_dmmap("dropbear", "dropbear", "dmmap_dropbear", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "dropbearinstance", "dropbearalias", "dmmap_dropbear", "dropbear"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "dropbearinstance", "dropbearalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; diff --git a/dmtree/tr181/x_iopsys_eu_igmp.c b/dmtree/tr181/x_iopsys_eu_igmp.c index 9e9ba23e..9811b7cd 100644 --- a/dmtree/tr181/x_iopsys_eu_igmp.c +++ b/dmtree/tr181/x_iopsys_eu_igmp.c @@ -225,16 +225,12 @@ static int get_br_key_from_lower_layer(char *lower_layer, char *key, size_t s_ke int get_mcast_snooping_interface_val(char *value, char *ifname, size_t s_ifname) { - char lower_layer[256] = {0}; - - append_dot_to_string(lower_layer, value, sizeof(lower_layer)); - /* Check if the value is valid or not. */ - if (strncmp(lower_layer, "Device.Bridging.Bridge.", 23) != 0) + if (strncmp(value, "Device.Bridging.Bridge.", 23) != 0) return -1; char key[10] = {0}; - if (get_br_key_from_lower_layer(lower_layer, key, sizeof(key)) != 0) + if (get_br_key_from_lower_layer(value, key, sizeof(key)) != 0) return -1; /* Find out bridge section name using bridge key. */ @@ -352,8 +348,8 @@ static int browse_igmp_proxy_inst(struct dmctx *dmctx, DMNODE *parent_node, void browse_args.option = "proto"; browse_args.value = "igmp"; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy", + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "proxy_instance", "proxy_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -448,8 +444,8 @@ static int browse_igmp_snooping_inst(struct dmctx *dmctx, DMNODE *parent_node, v browse_args.option = "proto"; browse_args.value = "igmp"; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping", + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "snooping_instance", "snooping_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -583,8 +579,8 @@ static int browse_igmps_filter_inst(struct dmctx *dmctx, DMNODE *parent_node, vo browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "filter_instance", "filter_alias", "dmmap_mcast", "snooping_filter", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "filter_instance", "filter_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -1065,8 +1061,8 @@ static int browse_igmpp_interface_inst(struct dmctx *dmctx, DMNODE *parent_node, browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "iface_instance", "iface_alias", "dmmap_mcast", "proxy_interface", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "iface_instance", "iface_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -1159,8 +1155,8 @@ static int browse_igmpp_filter_inst(struct dmctx *dmctx, DMNODE *parent_node, vo browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "filter_instance", "filter_alias", "dmmap_mcast", "proxy_filter", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "filter_instance", "filter_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -1745,7 +1741,7 @@ static void set_igmpp_iface_val(void *data, char *instance, char *linker, char * static int set_igmpp_interface_iface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *linker, *interface_linker = NULL; + char *linker = NULL, *interface_linker = NULL; char ifname[16]; char *if_type; struct uci_section *s; @@ -1762,23 +1758,21 @@ static int set_igmpp_interface_iface(char *refparam, struct dmctx *ctx, void *da interface_linker = dmstrdup(ifname); is_br = true; } else { - char interface[256] = {0}; + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + uci_foreach_sections("network", "interface", s) { + if(strcmp(section_name(s), linker) != 0) + continue; - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - uci_foreach_sections("network", "interface", s) { - if(strcmp(section_name(s), linker) != 0) { - continue; + dmuci_get_value_by_section_string(s, "type", &if_type); + if (strcmp(if_type, "bridge") == 0) { + dmasprintf(&interface_linker, "br-%s", linker); + is_br = true; + } else { + dmuci_get_value_by_section_string(s, "ifname", &interface_linker); + } + break; } - - dmuci_get_value_by_section_string(s, "type", &if_type); - if (strcmp(if_type, "bridge") == 0) { - dmasprintf(&interface_linker, "br-%s", linker); - is_br = true; - } else { - dmuci_get_value_by_section_string(s, "ifname", &interface_linker); - } - break; } } diff --git a/dmtree/tr181/x_iopsys_eu_mld.c b/dmtree/tr181/x_iopsys_eu_mld.c index 7396268a..2a98fd34 100644 --- a/dmtree/tr181/x_iopsys_eu_mld.c +++ b/dmtree/tr181/x_iopsys_eu_mld.c @@ -98,8 +98,8 @@ static int browse_mld_proxy_inst(struct dmctx *dmctx, DMNODE *parent_node, void browse_args.option = "proto"; browse_args.value = "mld"; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "proxy_instance", "proxy_alias", "dmmap_mcast", "proxy", + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "proxy_instance", "proxy_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -193,8 +193,8 @@ static int browse_mld_snooping_inst(struct dmctx *dmctx, DMNODE *parent_node, vo browse_args.option = "proto"; browse_args.value = "mld"; - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "snooping_instance", "snooping_alias", "dmmap_mcast", "snooping", + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "snooping_instance", "snooping_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -280,8 +280,8 @@ static int browse_mlds_filter_inst(struct dmctx *dmctx, DMNODE *parent_node, voi browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "filter_instance", "filter_alias", "dmmap_mcast", "snooping_filter", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "filter_instance", "filter_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -404,8 +404,8 @@ static int browse_mldp_interface_inst(struct dmctx *dmctx, DMNODE *parent_node, browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "iface_instance", "iface_alias", "dmmap_mcast", "proxy_interface", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "iface_instance", "iface_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -452,8 +452,8 @@ static int browse_mldp_filter_inst(struct dmctx *dmctx, DMNODE *parent_node, voi browse_args.option = "section_name"; browse_args.value = section_name((struct uci_section *)prev_data); - inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 7, - p->dmmap_section, "filter_instance", "filter_alias", "dmmap_mcast", "proxy_filter", + inst = handle_update_instance(2, dmctx, &max_inst, update_instance_alias, 5, + p->dmmap_section, "filter_instance", "filter_alias", check_browse_section, (void *)&browse_args); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) @@ -651,7 +651,7 @@ static int set_mld_proxy_version(char *refparam, struct dmctx *ctx, void *data, static int set_mldp_interface_iface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char *linker, *interface_linker = NULL; + char *linker = NULL, *interface_linker = NULL; char ifname[16]; char *up, *f_inst, *if_type; struct uci_section *d_sec, *s; @@ -667,20 +667,19 @@ static int set_mldp_interface_iface(char *refparam, struct dmctx *ctx, void *dat if (get_mcast_snooping_interface_val(value, ifname, sizeof(ifname)) == 0) { interface_linker = dmstrdup(ifname); } else { - char interface[256] = {0}; - - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - uci_foreach_sections("network", "interface", s) { - if(strcmp(section_name(s), linker) != 0) { - continue; + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { + uci_foreach_sections("network", "interface", s) { + if(strcmp(section_name(s), linker) != 0) { + continue; + } + dmuci_get_value_by_section_string(s, "type", &if_type); + if (strcmp(if_type, "bridge") == 0) + dmasprintf(&interface_linker, "br-%s", linker); + else + dmuci_get_value_by_section_string(s, "ifname", &interface_linker); + break; } - dmuci_get_value_by_section_string(s, "type", &if_type); - if (strcmp(if_type, "bridge") == 0) - dmasprintf(&interface_linker, "br-%s", linker); - else - dmuci_get_value_by_section_string(s, "ifname", &interface_linker); - break; } } uci_path_foreach_option_eq(bbfdm, "dmmap_mcast", "proxy_interface", diff --git a/dmtree/tr181/x_iopsys_eu_owsd.c b/dmtree/tr181/x_iopsys_eu_owsd.c index d9c497b5..348b1d10 100644 --- a/dmtree/tr181/x_iopsys_eu_owsd.c +++ b/dmtree/tr181/x_iopsys_eu_owsd.c @@ -22,8 +22,8 @@ static int browseXIopsysEuOWSDVirtualHost(struct dmctx *dmctx, DMNODE *parent_no synchronize_specific_config_sections_with_dmmap("owsd", "owsd-listen", "dmmap_owsd", &dup_list); list_for_each_entry(p, &dup_list, list) { - inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5, - p->dmmap_section, "olisteninstance", "olistenalias", "dmmap_owsd", "owsd-listen"); + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3, + p->dmmap_section, "olisteninstance", "olistenalias"); if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP) break; @@ -107,15 +107,14 @@ static int get_x_iopsys_eu_owsd_virtualhost_interface(char *refparam, struct dmc static int set_x_iopsys_eu_owsd_virtualhost_interface(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - char interface[256] = {0}, *linker; + char *linker = NULL; switch (action) { case VALUECHECK: return 0; case VALUESET: - append_dot_to_string(interface, value, sizeof(interface)); - adm_entry_get_linker_value(ctx, interface, &linker); - if (linker) { + adm_entry_get_linker_value(ctx, value, &linker); + if (linker && *linker) { dmuci_set_value_by_section((struct uci_section *)data, "interface", linker); dmfree(linker); } diff --git a/json/generate_source_code.py b/json/generate_source_code.py index 11d1dbe4..d492c5f4 100755 --- a/json/generate_source_code.py +++ b/json/generate_source_code.py @@ -494,8 +494,8 @@ def cprintBrowseObj( fbrowse, name, mappingobj, dmobject ): print(" synchronize_specific_config_sections_with_dmmap(\"%s\", \"%s\", \"%s\", &dup_list);" % (res1, res2, res3), file=fp) print(" list_for_each_entry(p, &dup_list, list) {", file=fp) print("", file=fp) - print(" inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 5,", file=fp) - print(" p->dmmap_section, \"%s\", \"%s\", \"%s\", \"%s\");" % (name+"instance", name+"alias", res3, res2), file=fp) + print(" inst = handle_update_instance(1, dmctx, &max_inst, update_instance_alias, 3,", file=fp) + print(" p->dmmap_section, \"%s\", \"%s\");" % (name+"instance", name+"alias"), file=fp) print("", file=fp) print(" if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)p->config_section, inst) == DM_STOP)", file=fp) print(" break;", file=fp) diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index 5c2188d7..5f9f065b 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -650,13 +650,11 @@ char *update_instance_alias(int action, char **last_inst, char **max_inst, void struct uci_section *s = (struct uci_section *) argv[0]; char *inst_opt = (char *) argv[1]; char *alias_opt = (char *) argv[2]; - char *dmmap_package = (char *) argv[3]; - char *section_type = (char *) argv[4]; - int (*check_browse)(struct uci_section *section, void *data) = argv[5]; - void *data = (void *) argv[6]; + int (*check_browse)(struct uci_section *section, void *data) = argv[3]; + void *data = (void *) argv[4]; if (*max_inst == NULL) - max_instance = get_max_instance(dmmap_package, section_type, inst_opt, check_browse, data); + max_instance = get_max_instance(section_config(s), section_type(s), inst_opt, check_browse, data); else max_instance = atoi(*max_inst); @@ -2028,16 +2026,17 @@ static int get_linker_check_obj(DMOBJECT_ARGS) { char *link_val = ""; - if (!get_linker) { + if (!get_linker) return FAULT_9005; - } - if (node->obj->browseinstobj && !node->is_instanceobj) { + + if (node->obj->browseinstobj && !node->is_instanceobj) return FAULT_9005; - } + get_linker(node->current_object, dmctx, data, instance, &link_val); - if (dmctx->linker[0] == '\0') { + + if (dmctx->linker[0] == '\0') return FAULT_9005; - } + if (link_val && link_val[0] != '\0' && strcmp(link_val, dmctx->linker) == 0) { if (node->current_object[strlen(node->current_object) - 1] == '.') node->current_object[strlen(node->current_object) - 1] = 0; @@ -2045,6 +2044,7 @@ static int get_linker_check_obj(DMOBJECT_ARGS) dmctx->stop = true; return 0; } + return FAULT_9005; } @@ -2058,7 +2058,7 @@ static int get_linker_check_param(DMPARAM_ARGS) *****************/ int dm_entry_get_linker_value(struct dmctx *dmctx) { - int err ; + int err; DMOBJ *root = dmctx->dm_entryobj; DMNODE node = { .current_object = "" }; @@ -2076,11 +2076,11 @@ int dm_entry_get_linker_value(struct dmctx *dmctx) static int get_linker_value_check_obj(DMOBJECT_ARGS) { - char *link_val; if (!get_linker) return FAULT_9005; if (strcmp(node->current_object, dmctx->in_param) == 0) { + char *link_val; get_linker(node->current_object, dmctx, data, instance, &link_val); dmctx->linker = dmstrdup(link_val); dmctx->stop = true; diff --git a/libbbf_api/dmcommon.c b/libbbf_api/dmcommon.c index ec23c593..ffd94ec6 100644 --- a/libbbf_api/dmcommon.c +++ b/libbbf_api/dmcommon.c @@ -1760,14 +1760,6 @@ int check_browse_section(struct uci_section *s, void *data) return -1; } -void append_dot_to_string(char *new_string, const char *string, size_t len) -{ - if (string[strlen(string) - 1] != '.') - snprintf(new_string, len, "%s.", string); - else - strncpy(new_string, string, len - 1); -} - int check_instance_wildcard_parameter_by_regex(char *parameter, char* regex) { size_t l1, l2; diff --git a/libbbf_api/dmcommon.h b/libbbf_api/dmcommon.h index 0c73ba28..cadfb0b1 100644 --- a/libbbf_api/dmcommon.h +++ b/libbbf_api/dmcommon.h @@ -330,6 +330,5 @@ int is_vlan_termination_section(char *name); void sync_dmmap_bool_to_uci_list(struct uci_section *s, char *section, char *value, bool b); void del_dmmap_sec_with_opt_eq(char *dmmap_file, char *section, char *option, char *value); int check_browse_section(struct uci_section *s, void *data); -void append_dot_to_string(char *new_string, const char *string, size_t len); int check_instance_wildcard_parameter_by_regex(char *parameter, char* regex); #endif diff --git a/libbbf_api/dmuci.h b/libbbf_api/dmuci.h index f52a2873..a3c6aabb 100644 --- a/libbbf_api/dmuci.h +++ b/libbbf_api/dmuci.h @@ -122,6 +122,8 @@ struct package_change section = dmuci_walk_section(package, stype, arg, NULL, CMP_FILTER_FUNC, func, section, GET_NEXT_SECTION)) #define section_name(s) (s)->e.name +#define section_type(s) (s)->type +#define section_config(s) (s)->package->e.name static inline void uci_list_insert(struct uci_list *list, struct uci_list *ptr) {