From 2ab34bd42d0481c85a6f76adb28d1a0b57532373 Mon Sep 17 00:00:00 2001 From: Amin Ben Ramdhane Date: Tue, 12 Apr 2022 13:19:29 +0100 Subject: [PATCH] Hosts: Align with new topology output --- dmtree/tr181/hosts.c | 14 +++++++++++--- dmtree/tr181/wifi.c | 8 +++++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/dmtree/tr181/hosts.c b/dmtree/tr181/hosts.c index b202f00f..f2dababb 100644 --- a/dmtree/tr181/hosts.c +++ b/dmtree/tr181/hosts.c @@ -103,8 +103,10 @@ static int get_HostsHost_DHCPClient(char *refparam, struct dmctx *ctx, void *dat static int get_HostsHost_AssociatedDevice(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - char *linker = dmjson_get_value((json_object *)data, 1, "macaddr"); + char *linker = dmjson_get_value((json_object *)data, 1, "link_macaddr"); adm_entry_get_linker_param(ctx, "Device.WiFi.AccessPoint.", linker, value); + if (!(*value) || (*value)[0] == 0) + adm_entry_get_linker_param(ctx, "Device.WiFi.DataElements.Network.Device.", linker, value); return 0; } @@ -112,9 +114,15 @@ static int get_HostsHost_Layer1Interface(char *refparam, struct dmctx *ctx, void { char *linker = dmjson_get_value((json_object *)data, 1, "device"); char *type = dmjson_get_value((json_object *)data, 1, "interface_type"); - if (DM_LSTRCMP(type, "Wi-Fi") == 0) + if (DM_LSTRCMP(type, "Wi-Fi") == 0) { adm_entry_get_linker_param(ctx, "Device.WiFi.Radio.", linker, value); - else + if (!(*value) || (*value)[0] == 0) { + char *device = dmjson_get_value((json_object *)data, 1, "parent_device"); + struct uci_section *iface_s = get_dup_section_in_config_opt("wireless", "wifi-iface", "ifname", device); + dmuci_get_value_by_section_string(iface_s, "device", &linker); + adm_entry_get_linker_param(ctx, "Device.WiFi.Radio.", linker, value); + } + } else adm_entry_get_linker_param(ctx, "Device.Ethernet.Interface.", linker, value); return 0; } diff --git a/dmtree/tr181/wifi.c b/dmtree/tr181/wifi.c index c1c611e7..fa16142e 100644 --- a/dmtree/tr181/wifi.c +++ b/dmtree/tr181/wifi.c @@ -80,6 +80,12 @@ static int get_linker_wfdata_Device(char *refparam, struct dmctx *dmctx, void *d return 0; } +static int get_linker_wfdata_BSS_STA(char *refparam, struct dmctx *dmctx, void *data, char *instance, char **linker) +{ + *linker = data ? dmjson_get_value((json_object *)data, 1, "MACAddress") : ""; + return 0; +} + /************************************************************************** * INIT ***************************************************************************/ @@ -7163,7 +7169,7 @@ DMOBJ tWiFiDataElementsNetworkDeviceRadioBSSObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ // {"QMDescriptor", &DMREAD, NULL, NULL, NULL, browseWiFiDataElementsNetworkDeviceRadioBSSQMDescriptorInst, NULL, NULL, NULL, tWiFiDataElementsNetworkDeviceRadioBSSQMDescriptorParams, NULL, BBFDM_BOTH, LIST_KEY{"ClientMAC", NULL}, "2.15"}, {"MultiAPSteering", &DMREAD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, tWiFiDataElementsNetworkDeviceRadioBSSMultiAPSteeringParams, NULL, BBFDM_BOTH, NULL, "2.15"}, -{"STA", &DMREAD, NULL, NULL, NULL, browseWiFiDataElementsNetworkDeviceRadioBSSSTAInst, NULL, NULL, tWiFiDataElementsNetworkDeviceRadioBSSSTAObj, tWiFiDataElementsNetworkDeviceRadioBSSSTAParams, NULL, BBFDM_BOTH, LIST_KEY{"MACAddress", NULL}, "2.13"}, +{"STA", &DMREAD, NULL, NULL, NULL, browseWiFiDataElementsNetworkDeviceRadioBSSSTAInst, NULL, NULL, tWiFiDataElementsNetworkDeviceRadioBSSSTAObj, tWiFiDataElementsNetworkDeviceRadioBSSSTAParams, get_linker_wfdata_BSS_STA, BBFDM_BOTH, LIST_KEY{"MACAddress", NULL}, "2.13"}, {0} };