diff --git a/bbfdmd/ubus/pretty_print.c b/bbfdmd/ubus/pretty_print.c index 4e9a4038..0cf6ced6 100644 --- a/bbfdmd/ubus/pretty_print.c +++ b/bbfdmd/ubus/pretty_print.c @@ -346,8 +346,10 @@ static void bb_add_flags_arr(struct blob_buf *bb, char *data) if (*dm_falgs & DM_FLAG_REFERENCE) bb_add_string(bb, NULL, "Reference"); - else if (*dm_falgs & DM_FLAG_UNIQUE) + if (*dm_falgs & DM_FLAG_UNIQUE) bb_add_string(bb, NULL, "Unique"); + if (*dm_falgs & DM_FLAG_LINKER) + bb_add_string(bb, NULL, "Linker"); blobmsg_close_array(bb, flags_arr); } diff --git a/libbbfdm-api/dmbbf.c b/libbbfdm-api/dmbbf.c index 4d799dfa..893bc9df 100644 --- a/libbbfdm-api/dmbbf.c +++ b/libbbfdm-api/dmbbf.c @@ -1048,6 +1048,8 @@ static int get_ubus_value(struct dmctx *dmctx, struct dmnode *node) dm_falgs |= DM_FLAG_REFERENCE; } else if (DM_STRCMP(flag, "Unique") == 0) { dm_falgs |= DM_FLAG_UNIQUE; + } else if (DM_STRCMP(flag, "Linker") == 0) { + dm_falgs |= DM_FLAG_LINKER; } } } @@ -2411,9 +2413,6 @@ int dm_entry_get_reference_value(struct dmctx *dmctx) *****************/ static int object_exists_check_obj(DMOBJECT_ARGS) { - if (!get_linker) - return FAULT_9005; - if (DM_STRCMP(node->current_object, dmctx->in_param) == 0) { dmctx->match = true; dmctx->stop = true; diff --git a/libbbfdm/dmtree/tr181/atm.c b/libbbfdm/dmtree/tr181/atm.c index bc6020f2..39726d2c 100644 --- a/libbbfdm/dmtree/tr181/atm.c +++ b/libbbfdm/dmtree/tr181/atm.c @@ -17,15 +17,6 @@ struct atm_args char *device; }; -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_atm_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = (data && ((struct atm_args *)data)->device) ? ((struct atm_args *)data)->device : ""; - return 0; -} - /************************************************************************** * INIT ***************************************************************************/ @@ -389,7 +380,7 @@ static int set_atm_alias(char *refparam, struct dmctx *ctx, void *data, char *in /*** ATM. ***/ DMOBJ tATMObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys*/ -{"Link", &DMWRITE, add_atm_link, delete_atm_link, NULL, browseAtmLinkInst, NULL, NULL, tATMLinkObj, tATMLinkParams, get_atm_linker, BBFDM_BOTH, NULL}, +{"Link", &DMWRITE, add_atm_link, delete_atm_link, NULL, browseAtmLinkInst, NULL, NULL, tATMLinkObj, tATMLinkParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/bridging.c b/libbbfdm/dmtree/tr181/bridging.c index ef0a63cd..5e333508 100644 --- a/libbbfdm/dmtree/tr181/bridging.c +++ b/libbbfdm/dmtree/tr181/bridging.c @@ -46,31 +46,6 @@ struct provider_bridge_args /************************************************************************** * LINKER FUNCTIONS ***************************************************************************/ -static int get_linker_br_port(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - struct bridge_port_args *data_args = (struct bridge_port_args *)data; - - if (!data_args) - return -1; - - if (data_args->is_management_port) - dmuci_get_value_by_section_string(data_args->bridge_port_dmmap_sec, "port", linker); - else - *linker = dmstrdup(section_name(data_args->bridge_port_dmmap_sec)); - return 0; -} - -static int get_linker_br_vlan(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - struct bridge_vlan_args *data_args = (struct bridge_vlan_args *)data; - - if (!data_args) - return -1; - - dmuci_get_value_by_section_string(data_args->bridge_vlan_sec, "vid", linker); - return 0; -} - static int get_linker_bridge(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) { dmasprintf(linker, "%s", data ? ((struct bridge_args *)data)->br_inst : ""); @@ -291,7 +266,7 @@ static void remove_port_from_bridge_sections(struct uci_section *br_sec, struct } } -static void set_Provider_bridge_component(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, char *component) +static void set_Provider_bridge_component(char *refparam, struct dmctx *ctx, void *data, char *instance, char *br_inst, char *component) { /* *value=Device.Bridging.Bridge.{i}. * In file dmmap_provider_bridge set "option svlan_br_inst {i}" or "list cvlan_br_inst {i}" in this(refered "provider_bridge" section) @@ -300,10 +275,8 @@ static void set_Provider_bridge_component(char *refparam, struct dmctx *ctx, voi struct uci_section *network_bridge_sec_from = NULL, *network_bridge_sec_to = NULL; char pr_br_sec_name[64] = {0}; char *br_sec_name = NULL; - char *br_inst = NULL; // Get candidate bridge instance - adm_entry_get_linker_value(ctx, value, &br_inst); if (DM_STRLEN(br_inst) == 0) return; @@ -1689,12 +1662,13 @@ static int get_BridgingBridge_Status(char *refparam, struct dmctx *ctx, void *da /*#Device.Bridging.Bridge.{i}.Alias!UCI:dmmap_bridge/device,@i-1/bridge_alias*/ static int get_BridgingBridge_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - return bbf_get_alias(ctx, ((struct bridge_args *)data)->bridge_dmmap_sec, "bridge_alias", instance, value); + *value = dmstrdup(((struct bridge_args *)data)->br_inst); + return 0; } static int set_BridgingBridge_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { - return bbf_set_alias(ctx, ((struct bridge_args *)data)->bridge_dmmap_sec, "bridge_alias", instance, value); + return 0; } static int get_BridgingBridge_Standard(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) @@ -2929,18 +2903,21 @@ static int get_BridgingBridgeProviderBridge_SVLANcomponent(char *refparam, struc static int set_BridgingBridgeProviderBridge_SVLANcomponent(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { char *allowed_objects[] = {"Device.Bridging.Bridge.", NULL}; + struct dm_reference reference = {0}; + + bbf_get_reference_args(value, &reference); switch (action) { case VALUECHECK: - if (bbfdm_validate_string(ctx, value, -1, 256, NULL, NULL)) + if (bbfdm_validate_string(ctx, reference.path, -1, 256, NULL, NULL)) return FAULT_9007; - if (dm_entry_validate_allowed_objects(ctx, value, allowed_objects)) + if (dm_validate_allowed_objects(ctx, &reference, allowed_objects)) return FAULT_9007; break; case VALUESET: - set_Provider_bridge_component(refparam, ctx, data, instance, value, "SVLAN"); + set_Provider_bridge_component(refparam, ctx, data, instance, reference.value, "SVLAN"); break; } return 0; @@ -2973,28 +2950,31 @@ static int get_BridgingBridgeProviderBridge_CVLANcomponents(char *refparam, stru static int set_BridgingBridgeProviderBridge_CVLANcomponents(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { char *allowed_objects[] = {"Device.Bridging.Bridge.", NULL}; + struct dm_reference reference = {0}; char *pch = NULL, *pchr = NULL; char buf[512] = {0}; - DM_STRNCPY(buf, value, sizeof(buf)); + bbf_get_reference_args(value, &reference); + + DM_STRNCPY(buf, reference.path, sizeof(buf)); switch (action) { case VALUECHECK: - if (bbfdm_validate_string_list(ctx, value, -1, -1, -1, -1, 256, NULL, NULL)) + if (bbfdm_validate_string_list(ctx, reference.path, -1, -1, -1, -1, 256, NULL, NULL)) return FAULT_9007; // Validate each item in list and Check if bridge is present for (pch = strtok_r(buf, ",", &pchr); pch != NULL; pch = strtok_r(NULL, ",", &pchr)) { // Parse each Bridge path and validate: - if (dm_entry_validate_allowed_objects(ctx, pch, allowed_objects)) + if (dm_validate_allowed_objects(ctx, &reference, allowed_objects)) return FAULT_9007; } break; case VALUESET: for (pch = strtok_r(buf, ",", &pchr); pch != NULL; pch = strtok_r(NULL, ",", &pchr)) - set_Provider_bridge_component(refparam, ctx, data, instance, pch, "CVLAN"); + set_Provider_bridge_component(refparam, ctx, data, instance, reference.value, "CVLAN"); break; } return 0; @@ -3028,8 +3008,8 @@ DMLEAF tBridgingParams[] = { DMOBJ tBridgingBridgeObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ {"STP", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tBridgingBridgeSTPParams, NULL, BBFDM_BOTH}, -{"Port", &DMWRITE, addObjBridgingBridgePort, delObjBridgingBridgePort, NULL, browseBridgingBridgePortInst, NULL, NULL, tBridgingBridgePortObj, tBridgingBridgePortParams, get_linker_br_port, BBFDM_BOTH, NULL}, -{"VLAN", &DMWRITE, addObjBridgingBridgeVLAN, delObjBridgingBridgeVLAN, NULL, browseBridgingBridgeVLANInst, NULL, NULL, NULL, tBridgingBridgeVLANParams, get_linker_br_vlan, BBFDM_BOTH, NULL}, +{"Port", &DMWRITE, addObjBridgingBridgePort, delObjBridgingBridgePort, NULL, browseBridgingBridgePortInst, NULL, NULL, tBridgingBridgePortObj, tBridgingBridgePortParams, NULL, BBFDM_BOTH, NULL}, +{"VLAN", &DMWRITE, addObjBridgingBridgeVLAN, delObjBridgingBridgeVLAN, NULL, browseBridgingBridgeVLANInst, NULL, NULL, NULL, tBridgingBridgeVLANParams, NULL, BBFDM_BOTH, NULL}, {"VLANPort", &DMWRITE, addObjBridgingBridgeVLANPort, delObjBridgingBridgeVLANPort, NULL, browseBridgingBridgeVLANPortInst, NULL, NULL, NULL, tBridgingBridgeVLANPortParams, NULL, BBFDM_BOTH, NULL}, {0} }; @@ -3038,7 +3018,7 @@ DMLEAF tBridgingBridgeParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/ {"Enable", &DMWRITE, DMT_BOOL, get_BridgingBridge_Enable, set_BridgingBridge_Enable, BBFDM_BOTH}, {"Status", &DMREAD, DMT_STRING, get_BridgingBridge_Status, NULL, BBFDM_BOTH}, -{"Alias", &DMWRITE, DMT_STRING, get_BridgingBridge_Alias, set_BridgingBridge_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE}, +{"Alias", &DMWRITE, DMT_STRING, get_BridgingBridge_Alias, set_BridgingBridge_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_LINKER}, {"Standard", &DMWRITE, DMT_STRING, get_BridgingBridge_Standard, set_BridgingBridge_Standard, BBFDM_BOTH}, {"PortNumberOfEntries", &DMREAD, DMT_UNINT, get_BridgingBridge_PortNumberOfEntries, NULL, BBFDM_BOTH}, {"VLANNumberOfEntries", &DMREAD, DMT_UNINT, get_BridgingBridge_VLANNumberOfEntries, NULL, BBFDM_BOTH}, @@ -3132,7 +3112,7 @@ DMLEAF tBridgingProviderBridgeParams[] = { {"Enable", &DMWRITE, DMT_BOOL, get_BridgingBridgeProviderBridge_Enable, set_BridgingBridgeProviderBridge_Enable, BBFDM_BOTH}, {"Status", &DMREAD, DMT_STRING, get_BridgingBridgeProviderBridge_Status, NULL, BBFDM_BOTH}, {"Alias", &DMWRITE, DMT_STRING, get_BridgingBridgeProviderBridge_Alias, set_BridgingBridgeProviderBridge_Alias, BBFDM_BOTH}, -{"SVLANcomponent", &DMWRITE, DMT_STRING, get_BridgingBridgeProviderBridge_SVLANcomponent, set_BridgingBridgeProviderBridge_SVLANcomponent, BBFDM_BOTH}, -{"CVLANcomponents", &DMWRITE, DMT_STRING, get_BridgingBridgeProviderBridge_CVLANcomponents, set_BridgingBridgeProviderBridge_CVLANcomponents, BBFDM_BOTH}, +{"SVLANcomponent", &DMWRITE, DMT_STRING, get_BridgingBridgeProviderBridge_SVLANcomponent, set_BridgingBridgeProviderBridge_SVLANcomponent, BBFDM_BOTH, DM_FLAG_REFERENCE}, +{"CVLANcomponents", &DMWRITE, DMT_STRING, get_BridgingBridgeProviderBridge_CVLANcomponents, set_BridgingBridgeProviderBridge_CVLANcomponents, BBFDM_BOTH, DM_FLAG_REFERENCE}, {0} }; diff --git a/libbbfdm/dmtree/tr181/dhcpv4.c b/libbbfdm/dmtree/tr181/dhcpv4.c index 3f725cac..15237efe 100644 --- a/libbbfdm/dmtree/tr181/dhcpv4.c +++ b/libbbfdm/dmtree/tr181/dhcpv4.c @@ -61,17 +61,6 @@ struct dhcp_client_option_args { static char *allowed_devices[] = {"All", "Known", "UnKnown", NULL}; -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_dhcp_client_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - const struct client_args *args = data; - - *linker = (char *)args->lease->hwaddr; - return 0; -} - /************************************************************* * INIT **************************************************************/ @@ -3382,7 +3371,7 @@ DMOBJ tDHCPv4ServerPoolObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ {"StaticAddress", &DMWRITE, addObjDHCPv4ServerPoolStaticAddress, delObjDHCPv4ServerPoolStaticAddress, NULL, browseDHCPv4ServerPoolStaticAddressInst, NULL, NULL, NULL, tDHCPv4ServerPoolStaticAddressParams, NULL, BBFDM_BOTH, NULL}, {"Option", &DMWRITE, addObjDHCPv4ServerPoolOption, delObjDHCPv4ServerPoolOption, NULL, browseDHCPv4ServerPoolOptionInst, NULL, NULL, NULL, tDHCPv4ServerPoolOptionParams, NULL, BBFDM_BOTH, NULL}, -{"Client", &DMREAD, NULL, NULL, NULL, browseDhcpClientInst, NULL, NULL, tDHCPv4ServerPoolClientObj, tDHCPv4ServerPoolClientParams, get_dhcp_client_linker, BBFDM_BOTH, NULL}, +{"Client", &DMREAD, NULL, NULL, NULL, browseDhcpClientInst, NULL, NULL, tDHCPv4ServerPoolClientObj, tDHCPv4ServerPoolClientParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/dsl.c b/libbbfdm/dmtree/tr181/dsl.c index 1a7f15f9..a5031f37 100644 --- a/libbbfdm/dmtree/tr181/dsl.c +++ b/libbbfdm/dmtree/tr181/dsl.c @@ -22,29 +22,6 @@ struct dsl_channel_args char *id; }; -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_dsl_line_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - if (data && ((struct dsl_line_args *)data)->id) { - dmasprintf(linker, "line_%s", ((struct dsl_line_args *)data)->id); - return 0; - } - *linker = "" ; - return 0; -} - -static int get_dsl_channel_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - if (instance) { - dmasprintf(linker, "dsl_channel_%s", instance); - return 0; - } - *linker = "" ; - return 0; -} - /************************************************************************** * INIT ***************************************************************************/ @@ -1429,8 +1406,8 @@ static int get_DSLChannelStatsQuarterHour_XTUCCRCErrors(char *refparam, struct d /* *** Device.DSL. *** */ DMOBJ tDSLObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Line", &DMREAD, NULL, NULL, NULL, browseDSLLineInst, NULL, NULL, tDSLLineObj, tDSLLineParams, get_dsl_line_linker, BBFDM_BOTH, NULL}, -{"Channel", &DMREAD, NULL, NULL, NULL, browseDSLChannelInst, NULL, NULL, tDSLChannelObj, tDSLChannelParams, get_dsl_channel_linker, BBFDM_BOTH, NULL}, +{"Line", &DMREAD, NULL, NULL, NULL, browseDSLLineInst, NULL, NULL, tDSLLineObj, tDSLLineParams, NULL, BBFDM_BOTH, NULL}, +{"Channel", &DMREAD, NULL, NULL, NULL, browseDSLChannelInst, NULL, NULL, tDSLChannelObj, tDSLChannelParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/ethernet.c b/libbbfdm/dmtree/tr181/ethernet.c index c1b0c39f..3b10dcdd 100644 --- a/libbbfdm/dmtree/tr181/ethernet.c +++ b/libbbfdm/dmtree/tr181/ethernet.c @@ -322,27 +322,6 @@ static int browseEthernetRMONStatsInst(struct dmctx *dmctx, DMNODE *parent_node, return 0; } -/************************************************************* -* LINKER -**************************************************************/ -static int get_linker_interface(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = data ? ((struct eth_port_args *)data)->ifname : ""; - return 0; -} - -static int get_linker_link(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - dmuci_get_value_by_section_string((struct uci_section *)data, "device", linker); - return 0; -} - -static int get_linker_vlan_term(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "name", linker); - return 0; -} - /************************************************************* * ADD & DEL OBJ **************************************************************/ @@ -1800,9 +1779,9 @@ static int get_EthernetRMONStats_Packets1024to1518Bytes(char *refparam, struct d /* *** Device.Ethernet. *** */ DMOBJ tEthernetObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Interface", &DMREAD, NULL, NULL, NULL, browseEthernetInterfaceInst, NULL, NULL, tEthernetInterfaceObj, tEthernetInterfaceParams, get_linker_interface, BBFDM_BOTH, NULL}, -{"Link", &DMWRITE, addObjEthernetLink, delObjEthernetLink, NULL, browseEthernetLinkInst, NULL, NULL, tEthernetLinkObj, tEthernetLinkParams, get_linker_link, BBFDM_BOTH, NULL}, -{"VLANTermination", &DMWRITE, addObjEthernetVLANTermination, delObjEthernetVLANTermination, NULL, browseEthernetVLANTerminationInst, NULL, NULL, tEthernetVLANTerminationObj, tEthernetVLANTerminationParams, get_linker_vlan_term, BBFDM_BOTH, NULL}, +{"Interface", &DMREAD, NULL, NULL, NULL, browseEthernetInterfaceInst, NULL, NULL, tEthernetInterfaceObj, tEthernetInterfaceParams, NULL, BBFDM_BOTH, NULL}, +{"Link", &DMWRITE, addObjEthernetLink, delObjEthernetLink, NULL, browseEthernetLinkInst, NULL, NULL, tEthernetLinkObj, tEthernetLinkParams, NULL, BBFDM_BOTH, NULL}, +{"VLANTermination", &DMWRITE, addObjEthernetVLANTermination, delObjEthernetVLANTermination, NULL, browseEthernetVLANTerminationInst, NULL, NULL, tEthernetVLANTerminationObj, tEthernetVLANTerminationParams, NULL, BBFDM_BOTH, NULL}, {"RMONStats", &DMREAD, NULL, NULL, "ubus:ethernet->rmonstats", browseEthernetRMONStatsInst, NULL, NULL, NULL, tEthernetRMONStatsParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/fast.c b/libbbfdm/dmtree/tr181/fast.c index a2ab984e..279446c0 100644 --- a/libbbfdm/dmtree/tr181/fast.c +++ b/libbbfdm/dmtree/tr181/fast.c @@ -17,20 +17,6 @@ struct fast_line_args char *id; }; -/************************************************************************** -* LINKER -***************************************************************************/ - -static int get_fast_line_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - if (instance) { - dmasprintf(linker, "fast_line_%s", instance); - return 0; - } - *linker = "" ; - return 0; -} - /************************************************************************** * INIT ***************************************************************************/ @@ -888,7 +874,7 @@ static int get_FASTLineStatsQuarterHour_SuccessTIGA(char *refparam, struct dmctx /* *** Device.FAST. *** */ DMOBJ tFASTObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Line", &DMREAD, NULL, NULL, NULL, browseFASTLineInst, NULL, NULL, tFASTLineObj, tFASTLineParams, get_fast_line_linker, BBFDM_BOTH, NULL}, +{"Line", &DMREAD, NULL, NULL, NULL, browseFASTLineInst, NULL, NULL, tFASTLineObj, tFASTLineParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/ip.c b/libbbfdm/dmtree/tr181/ip.c index a30678d3..5e811704 100644 --- a/libbbfdm/dmtree/tr181/ip.c +++ b/libbbfdm/dmtree/tr181/ip.c @@ -37,30 +37,6 @@ static int init_interface_ip_args(struct intf_ip_args *args, struct uci_section return 0; } -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_linker_ip_interface(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = (data) ? dmstrdup(section_name((struct uci_section *)data)) : ""; - return 0; -} - -static int get_linker_ipv6_prefix(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - char *assign = NULL; - - dmuci_get_value_by_section_string(((struct intf_ip_args *)data)->dmmap_sec, "assign", &assign); - if (assign && DM_LSTRCMP(assign, "0") == 0) { - char *address = dmjson_get_value(((struct intf_ip_args *)data)->interface_obj, 3, "assigned", "lan", "address"); - char *mask = dmjson_get_value(((struct intf_ip_args *)data)->interface_obj, 3, "assigned", "lan", "mask"); - dmasprintf(linker, "%s/%s", address, mask); - } else { - *linker = ""; - } - return 0; -} - /************************************************************* * COMMON Functions **************************************************************/ @@ -2224,7 +2200,7 @@ static int operate_IPInterface_Reset(char *refparam, struct dmctx *ctx, void *da /* *** Device.IP. *** */ DMOBJ tIPObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Interface", &DMWRITE, addObjIPInterface, delObjIPInterface, NULL, browseIPInterfaceInst, NULL, NULL, tIPInterfaceObj, tIPInterfaceParams, get_linker_ip_interface, BBFDM_BOTH, NULL}, +{"Interface", &DMWRITE, addObjIPInterface, delObjIPInterface, NULL, browseIPInterfaceInst, NULL, NULL, tIPInterfaceObj, tIPInterfaceParams, NULL, BBFDM_BOTH, NULL}, #if defined(BBF_TR143) || defined(BBF_TR471) {"Diagnostics", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, tIPDiagnosticsObj, tIPDiagnosticsParams, NULL, BBFDM_BOTH, NULL}, #endif @@ -2249,7 +2225,7 @@ DMOBJ tIPInterfaceObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ {"IPv4Address", &DMWRITE, addObjIPInterfaceIPv4Address, delObjIPInterfaceIPv4Address, NULL, browseIPInterfaceIPv4AddressInst, NULL, NULL, NULL, tIPInterfaceIPv4AddressParams, NULL, BBFDM_BOTH, NULL}, {"IPv6Address", &DMWRITE, addObjIPInterfaceIPv6Address, delObjIPInterfaceIPv6Address, NULL, browseIPInterfaceIPv6AddressInst, NULL, NULL, NULL, tIPInterfaceIPv6AddressParams, NULL, BBFDM_BOTH, NULL}, -{"IPv6Prefix", &DMWRITE, addObjIPInterfaceIPv6Prefix, delObjIPInterfaceIPv6Prefix, NULL, browseIPInterfaceIPv6PrefixInst, NULL, NULL, NULL, tIPInterfaceIPv6PrefixParams, get_linker_ipv6_prefix, BBFDM_BOTH, NULL}, +{"IPv6Prefix", &DMWRITE, addObjIPInterfaceIPv6Prefix, delObjIPInterfaceIPv6Prefix, NULL, browseIPInterfaceIPv6PrefixInst, NULL, NULL, NULL, tIPInterfaceIPv6PrefixParams, NULL, BBFDM_BOTH, NULL}, {"Stats", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tIPInterfaceStatsParams, NULL, BBFDM_BOTH}, {0} }; diff --git a/libbbfdm/dmtree/tr181/ppp.c b/libbbfdm/dmtree/tr181/ppp.c index d0c22c31..1b250e99 100644 --- a/libbbfdm/dmtree/tr181/ppp.c +++ b/libbbfdm/dmtree/tr181/ppp.c @@ -1155,22 +1155,6 @@ static int set_PPPInterfacePPPoE_ServiceName(char *refparam, struct dmctx *ctx, return 0; } -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_linker_ppp_interface(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - if (((struct ppp_args *)data)->iface_s) { - *linker = get_device(section_name(((struct ppp_args *)data)->iface_s)); - if (DM_STRLEN(*linker) == 0) - dmuci_get_value_by_section_string(((struct ppp_args *)data)->iface_s, "device", linker); - } else { - dmuci_get_value_by_section_string(((struct ppp_args *)data)->dmmap_s, "device", linker); - } - - return 0; -} - /************************************************************* * OPERATE COMMANDS *************************************************************/ @@ -1195,7 +1179,7 @@ static int operate_PPPInterface_Reset(char *refparam, struct dmctx *ctx, void *d /* *** Device.PPP. *** */ DMOBJ tPPPObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Interface", &DMWRITE, add_ppp_interface, delete_ppp_interface, NULL, browseInterfaceInst, NULL, NULL, tPPPInterfaceObj, tPPPInterfaceParams, get_linker_ppp_interface, BBFDM_BOTH, NULL}, +{"Interface", &DMWRITE, add_ppp_interface, delete_ppp_interface, NULL, browseInterfaceInst, NULL, NULL, tPPPInterfaceObj, tPPPInterfaceParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/ptm.c b/libbbfdm/dmtree/tr181/ptm.c index 24ebed30..09cdfc67 100644 --- a/libbbfdm/dmtree/tr181/ptm.c +++ b/libbbfdm/dmtree/tr181/ptm.c @@ -18,15 +18,6 @@ struct ptm_args char *device; }; -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_ptm_linker(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = (data && ((struct ptm_args *)data)->device) ? ((struct ptm_args *)data)->device : ""; - return 0; -} - /************************************************************************** * INIT ***************************************************************************/ @@ -259,7 +250,7 @@ static int get_ptm_stats_pack_sent(char *refparam, struct dmctx *ctx, void *data /* *** Device.PTM. *** */ DMOBJ tPTMObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Link", &DMWRITE, add_ptm_link, delete_ptm_link, NULL, browsePtmLinkInst, NULL, NULL, tPTMLinkObj, tPTMLinkParams, get_ptm_linker, BBFDM_BOTH, NULL}, +{"Link", &DMWRITE, add_ptm_link, delete_ptm_link, NULL, browsePtmLinkInst, NULL, NULL, tPTMLinkObj, tPTMLinkParams, NULL, BBFDM_BOTH, NULL}, {0} }; diff --git a/libbbfdm/dmtree/tr181/usb.c b/libbbfdm/dmtree/tr181/usb.c index ac46a9c1..09d544c0 100644 --- a/libbbfdm/dmtree/tr181/usb.c +++ b/libbbfdm/dmtree/tr181/usb.c @@ -941,30 +941,6 @@ static int get_USBUSBHostsHostDeviceConfigurationInterface_InterfaceProtocol(cha return read_sysfs_usb_port(data, "bInterfaceProtocol", value); } -static int get_linker_usb_port(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - struct usb_port *port = (struct usb_port *)data; - if (port && port->folder_name) { - *linker = dmstrdup(port->folder_name); - return 0; - } else { - *linker = ""; - return 0; - } -} - -static int get_linker_usb_host_device(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - struct usb_port *port = (struct usb_port *)data; - if(port && port->folder_name) { - *linker = dmstrdup(port->folder_name); - return 0; - } else { - *linker = ""; - return 0; - } -} - /********************************************************************************************************************************** * OBJ & PARAM DEFINITION ***********************************************************************************************************************************/ @@ -972,7 +948,7 @@ static int get_linker_usb_host_device(char *refparam, struct dmctx *dmctx, void DMOBJ tUSBObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ {"Interface", &DMREAD, NULL, NULL, NULL, browseUSBInterfaceInst, NULL, NULL, tUSBInterfaceObj, tUSBInterfaceParams, NULL, BBFDM_BOTH, NULL}, -{"Port", &DMREAD, NULL, NULL, NULL, browseUSBPortInst, NULL, NULL, NULL, tUSBPortParams, get_linker_usb_port, BBFDM_BOTH, NULL}, +{"Port", &DMREAD, NULL, NULL, NULL, browseUSBPortInst, NULL, NULL, NULL, tUSBPortParams, NULL, BBFDM_BOTH, NULL}, {"USBHosts", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, tUSBUSBHostsObj, tUSBUSBHostsParams, NULL, BBFDM_BOTH, NULL}, {0} }; @@ -1056,7 +1032,7 @@ DMLEAF tUSBUSBHostsParams[] = { /* *** Device.USB.USBHosts.Host.{i}. *** */ DMOBJ tUSBUSBHostsHostObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"Device", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostDeviceInst, NULL, NULL, tUSBUSBHostsHostDeviceObj, tUSBUSBHostsHostDeviceParams, get_linker_usb_host_device, BBFDM_BOTH}, +{"Device", &DMREAD, NULL, NULL, NULL, browseUSBUSBHostsHostDeviceInst, NULL, NULL, tUSBUSBHostsHostDeviceObj, tUSBUSBHostsHostDeviceParams, NULL, BBFDM_BOTH}, {0} }; diff --git a/libbbfdm/dmtree/tr181/wifi.c b/libbbfdm/dmtree/tr181/wifi.c index 89851b03..dbe2a8b7 100644 --- a/libbbfdm/dmtree/tr181/wifi.c +++ b/libbbfdm/dmtree/tr181/wifi.c @@ -49,35 +49,6 @@ struct wifi_enp_args char *ifname; }; -/************************************************************************** -* LINKER -***************************************************************************/ -static int get_linker_Wifi_Radio(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = (data && (((struct wifi_radio_args *)data)->sections)->config_section) ? section_name((((struct wifi_radio_args *)data)->sections)->config_section) : ""; - return 0; -} - -static int get_linker_Wifi_Ssid(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - dmuci_get_value_by_section_string(((struct wifi_ssid_args *)data)->dmmap_s, "ap_section_name", linker); - if (DM_STRLEN(*linker) == 0) - *linker = dmstrdup(instance); - return 0; -} - -static int get_linker_Wifi_AccessPoint(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = (data && ((struct wifi_acp_args *)data)->ifname) ? ((struct wifi_acp_args *)data)->ifname : ""; - return 0; -} - -static int get_linker_associated_device(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - *linker = data ? dmjson_get_value((json_object *)data, 1, "macaddr") : ""; - return 0; -} - /************************************************************************** * INIT ***************************************************************************/ @@ -3604,9 +3575,9 @@ DMOBJ tWiFiObj[] = { #ifdef BBF_WIFI_DATAELEMENTS {"DataElements", &DMREAD, NULL, NULL, "file:/etc/init.d/decollector", NULL, NULL, NULL, tWiFiDataElementsObj, NULL, NULL, BBFDM_BOTH, NULL}, #endif -{"Radio", &DMREAD, NULL, NULL, "file:/etc/config/wireless", browseWifiRadioInst, NULL, NULL, tWiFiRadioObj, tWiFiRadioParams, get_linker_Wifi_Radio, BBFDM_BOTH, NULL}, -{"SSID", &DMWRITE, add_wifi_ssid, delete_wifi_ssid, "file:/etc/config/wireless", browseWifiSsidInst, NULL, NULL, tWiFiSSIDObj, tWiFiSSIDParams, get_linker_Wifi_Ssid, BBFDM_BOTH, NULL}, -{"AccessPoint", &DMWRITE, add_wifi_accesspoint, delete_wifi_accesspoint, "file:/etc/config/wireless", browseWifiAccessPointInst, NULL, NULL, tWiFiAccessPointObj, tWiFiAccessPointParams, get_linker_Wifi_AccessPoint, BBFDM_BOTH, NULL}, +{"Radio", &DMREAD, NULL, NULL, "file:/etc/config/wireless", browseWifiRadioInst, NULL, NULL, tWiFiRadioObj, tWiFiRadioParams, NULL, BBFDM_BOTH, NULL}, +{"SSID", &DMWRITE, add_wifi_ssid, delete_wifi_ssid, "file:/etc/config/wireless", browseWifiSsidInst, NULL, NULL, tWiFiSSIDObj, tWiFiSSIDParams, NULL, BBFDM_BOTH, NULL}, +{"AccessPoint", &DMWRITE, add_wifi_accesspoint, delete_wifi_accesspoint, "file:/etc/config/wireless", browseWifiAccessPointInst, NULL, NULL, tWiFiAccessPointObj, tWiFiAccessPointParams, NULL, BBFDM_BOTH, NULL}, {"NeighboringWiFiDiagnostic", &DMREAD, NULL, NULL, "file:/etc/config/wireless", NULL, NULL, NULL, tWiFiNeighboringWiFiDiagnosticObj, tWiFiNeighboringWiFiDiagnosticParams, NULL, BBFDM_BOTH, NULL}, {"EndPoint", &DMWRITE, addObjWiFiEndPoint, delObjWiFiEndPoint, "file:/etc/config/wireless", browseWiFiEndPointInst, NULL, NULL, tWiFiEndPointObj, tWiFiEndPointParams, NULL, BBFDM_BOTH, NULL}, {0} @@ -3758,7 +3729,7 @@ DMLEAF tWiFiSSIDStatsParams[] = { DMOBJ tWiFiAccessPointObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ {"Security", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointSecurityParams, NULL, BBFDM_BOTH, NULL}, -{"AssociatedDevice", &DMREAD, NULL, NULL, NULL, browse_wifi_associated_device, NULL, NULL, tWiFiAccessPointAssociatedDeviceObj, tWiFiAccessPointAssociatedDeviceParams, get_linker_associated_device, BBFDM_BOTH, NULL}, +{"AssociatedDevice", &DMREAD, NULL, NULL, NULL, browse_wifi_associated_device, NULL, NULL, tWiFiAccessPointAssociatedDeviceObj, tWiFiAccessPointAssociatedDeviceParams, NULL, BBFDM_BOTH, NULL}, {"WPS", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointWPSParams, NULL, BBFDM_BOTH, NULL}, {"Accounting", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiAccessPointAccountingParams, NULL, BBFDM_BOTH, NULL}, {0} diff --git a/libbbfdm/dmtree/tr181/wifi.dataelements.c b/libbbfdm/dmtree/tr181/wifi.dataelements.c index 03f9a35a..d473772b 100644 --- a/libbbfdm/dmtree/tr181/wifi.dataelements.c +++ b/libbbfdm/dmtree/tr181/wifi.dataelements.c @@ -3268,13 +3268,13 @@ static int operate_WiFiDataElementsNetwork_SetPreferredBackhauls(char *refparam, break; } - adm_entry_get_linker_value(ctx, device_path, &linker); + adm_entry_get_reference_value(ctx, device_path, &linker); if (linker == NULL || *linker == '\0') { status = "Error_Invalid_Input"; break; } - struct uci_section *s = get_origin_section_from_config("mapcontroller", "node", linker); + struct uci_section *s = get_dup_section_in_config_opt("mapcontroller", "node", "agent_id", linker); if (*(operate_args[i].arg1) != '\0') dmuci_set_value_by_section(s, "backhaul_ul_macaddr", operate_args[i].arg1); @@ -3701,7 +3701,7 @@ DMOBJ tWiFiDataElementsNetworkDeviceObj[] = { DMLEAF tWiFiDataElementsNetworkDeviceParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type, version*/ -{"ID", &DMREAD, DMT_STRING, get_WiFiDataElementsNetworkDevice_ID, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE}, +{"ID", &DMREAD, DMT_STRING, get_WiFiDataElementsNetworkDevice_ID, NULL, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_LINKER}, {"MultiAPCapabilities", &DMREAD, DMT_BASE64, get_WiFiDataElementsNetworkDevice_MultiAPCapabilities, NULL, BBFDM_BOTH}, {"CollectionInterval", &DMREAD, DMT_UNINT, get_WiFiDataElementsNetworkDevice_CollectionInterval, NULL, BBFDM_BOTH}, {"ReportUnsuccessfulAssociations", &DMWRITE, DMT_BOOL, get_WiFiDataElementsNetworkDevice_ReportUnsuccessfulAssociations, set_WiFiDataElementsNetworkDevice_ReportUnsuccessfulAssociations, BBFDM_BOTH}, diff --git a/libbbfdm/dmtree/vendor/iopsys/tr181/ethernet.c b/libbbfdm/dmtree/vendor/iopsys/tr181/ethernet.c index 75ead318..66265b81 100644 --- a/libbbfdm/dmtree/vendor/iopsys/tr181/ethernet.c +++ b/libbbfdm/dmtree/vendor/iopsys/tr181/ethernet.c @@ -32,15 +32,6 @@ static int browseEthernetMACVLANInst(struct dmctx *dmctx, DMNODE *parent_node, v return 0; } -/************************************************************* -* LINKER -**************************************************************/ -static int get_linker_mac_vlan(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) -{ - dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "name", linker); - return 0; -} - /************************************************************* * ADD & DEL OBJ **************************************************************/ @@ -292,7 +283,7 @@ static int get_EthernetMACVLANStats_MulticastPacketsReceived(char *refparam, str ***********************************************************************************************************************************/ DMOBJ tIOPSYS_EthernetObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{BBF_VENDOR_PREFIX"MACVLAN", &DMWRITE, addObjEthernetMACVLAN, delObjEthernetMACVLAN, NULL, browseEthernetMACVLANInst, NULL, NULL, tEthernetMACVLANObj, tEthernetMACVLANParams, get_linker_mac_vlan, BBFDM_BOTH, NULL}, +{BBF_VENDOR_PREFIX"MACVLAN", &DMWRITE, addObjEthernetMACVLAN, delObjEthernetMACVLAN, NULL, browseEthernetMACVLANInst, NULL, NULL, tEthernetMACVLANObj, tEthernetMACVLANParams, NULL, BBFDM_BOTH, NULL}, {0} };