From 1020381868d3e2126bd4fbc603e5b45ea10f35b9 Mon Sep 17 00:00:00 2001 From: sverma Date: Wed, 20 Jan 2021 13:09:58 +0530 Subject: [PATCH] bbf: Support added for wfadatad associated/disassociated STA events. --- dmtree/tr181/wifi-iopsyswrt.c | 220 ++++++++++++++++++++++++++++++---- dmtree/tr181/wifi-openwrt.c | 4 - dmtree/tr181/wifi.c | 44 +++---- 3 files changed, 216 insertions(+), 52 deletions(-) diff --git a/dmtree/tr181/wifi-iopsyswrt.c b/dmtree/tr181/wifi-iopsyswrt.c index 1dae1553..64d760d3 100644 --- a/dmtree/tr181/wifi-iopsyswrt.c +++ b/dmtree/tr181/wifi-iopsyswrt.c @@ -1415,127 +1415,271 @@ int os__get_WiFiDataElementsNetworkDeviceRadioUnassociatedSTA_SignalStrength(cha return 0; } -#if 0 int os__get_WiFiDataElementsAssociationEvent_AssociationEventDataNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *res = NULL, *notify_arr = NULL, *notify_obj = NULL, *assoc_ev = NULL; + int num_assoc_ev = 0, i = 0; + + dmubus_call("wifi.dataelements.collector", "event", UBUS_ARGS{}, 0, &res); + if (res) { + dmjson_foreach_obj_in_array(res, notify_arr, notify_obj, i, 1, "notification") { + if (json_object_object_get_ex(notify_obj, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + num_assoc_ev++; + } + } + } + dmasprintf(value, "%d", num_assoc_ev); return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_BSSID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "BSSID"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_MACAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "MACAddress"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_StatusCode(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "StatusCode"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_HTCapabilities(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "HTCapabilities"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_VHTCapabilities(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "VHTCapabilities"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_HECapabilities(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL, *assoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + if (json_object_object_get_ex(assoc_ev, "AssocData", &assoc_data)) + *value = dmjson_get_value(assoc_data, 1, "HECapabilities"); + } + } return 0; } int os__get_WiFiDataElementsAssociationEventAssociationEventData_TimeStamp(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *assoc_ev = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + *value = dmjson_get_value((json_object *)data, 1, "eventTime"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEvent_DisassociationEventDataNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *res = NULL, *notify_arr = NULL, *notify_obj = NULL, *disassoc_ev = NULL; + int num_disassoc_ev = 0, i = 0; + + dmubus_call("wifi.dataelements.collector", "event", UBUS_ARGS{}, 0, &res); + if (res) { + dmjson_foreach_obj_in_array(res, notify_arr, notify_obj, i, 1, "notification") { + if (json_object_object_get_ex(notify_obj, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + num_disassoc_ev++; + } + } + } + dmasprintf(value, "%d", num_disassoc_ev); return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BSSID(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "BSSID"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_MACAddress(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "MACAddress"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ReasonCode(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "ReasonCode"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesSent(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "BytesSent"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesReceived(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "BytesReceived"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsSent(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "PacketsSent"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsReceived(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "PacketsReceived"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsSent(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "ErrorsSent"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsReceived(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "ErrorsReceived"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_RetransCount(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL, *disassoc_data = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + if (json_object_object_get_ex(disassoc_ev, "DisassocData", &disassoc_data)) + *value = dmjson_get_value(disassoc_data, 1, "RetransCount"); + } + } return 0; } int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_TimeStamp(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - //TODO + json_object *disassoc_ev = NULL; + + if (data) { + if (json_object_object_get_ex((json_object *)data, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + *value = dmjson_get_value((json_object *)data, 1, "eventTime"); + } + } return 0; } -#endif /************************************************************* * ENTRY METHOD @@ -1704,16 +1848,40 @@ int os__browseWiFiDataElementsNetworkDeviceRadioScanResultOpClassScanChannelScan return 0; } -#if 0 int os__browseWiFiDataElementsAssociationEventAssociationEventDataInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) { - //TODO + json_object *res = NULL, *notify_arr = NULL, *notify_obj = NULL, *assoc_ev = NULL; + char *inst = NULL, *max_inst = NULL; + int id = 0, i = 0; + + dmubus_call("wifi.dataelements.collector", "event", UBUS_ARGS{}, 0, &res); + if (res) { + dmjson_foreach_obj_in_array(res, notify_arr, notify_obj, i, 1, "notification") { + if (json_object_object_get_ex(notify_obj, "wfa-dataelements:AssociationEvent", &assoc_ev)) { + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_without_section, 1, ++id); + if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)notify_obj, inst) == DM_STOP) + break; + } + } + } return 0; } int os__browseWiFiDataElementsDisassociationEventDisassociationEventDataInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) { - //TODO + json_object *res = NULL, *notify_arr = NULL, *notify_obj = NULL, *disassoc_ev = NULL; + char *inst = NULL, *max_inst = NULL; + int id = 0, i = 0; + + dmubus_call("wifi.dataelements.collector", "event", UBUS_ARGS{}, 0, &res); + if (res) { + dmjson_foreach_obj_in_array(res, notify_arr, notify_obj, i, 1, "notification") { + if (json_object_object_get_ex(notify_obj, "wfa-dataelements:DisassociationEvent", &disassoc_ev)) { + inst = handle_update_instance(1, dmctx, &max_inst, update_instance_without_section, 1, ++id); + if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)notify_obj, inst) == DM_STOP) + break; + } + } + } return 0; } -#endif diff --git a/dmtree/tr181/wifi-openwrt.c b/dmtree/tr181/wifi-openwrt.c index 8ec4b71c..ac3877cc 100644 --- a/dmtree/tr181/wifi-openwrt.c +++ b/dmtree/tr181/wifi-openwrt.c @@ -831,7 +831,6 @@ int os__get_WiFiDataElementsNetworkDeviceRadioUnassociatedSTA_SignalStrength(cha return not_implemented(value); } -#if 0 int os__get_WiFiDataElementsAssociationEvent_AssociationEventDataNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { return not_implemented(value); @@ -931,7 +930,6 @@ int os__get_WiFiDataElementsDisassociationEventDisassociationEventData_TimeStamp { return not_implemented(value); } -#endif int os__browseWiFiDataElementsNetworkDeviceInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) { @@ -988,7 +986,6 @@ int os__browseWiFiDataElementsNetworkDeviceRadioScanResultOpClassScanChannelScan return 0; } -#if 0 int os__browseWiFiDataElementsAssociationEventAssociationEventDataInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) { return 0; @@ -998,4 +995,3 @@ int os__browseWiFiDataElementsDisassociationEventDisassociationEventDataInst(str { return 0; } -#endif diff --git a/dmtree/tr181/wifi.c b/dmtree/tr181/wifi.c index 9c76c449..3321ded4 100644 --- a/dmtree/tr181/wifi.c +++ b/dmtree/tr181/wifi.c @@ -2663,55 +2663,55 @@ DMLEAF tWiFiDataElementsNetworkDeviceRadioUnassociatedSTAParams[] = { /* *** Device.WiFi.DataElements.AssociationEvent. *** */ DMOBJ tWiFiDataElementsAssociationEventObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, nextobj, leaf, linker, bbfdm_type, uniqueKeys*/ -//{"AssociationEventData", &DMREAD, NULL, NULL, NULL, os__browseWiFiDataElementsAssociationEventAssociationEventDataInst, NULL, NULL, tWiFiDataElementsAssociationEventAssociationEventDataParams, NULL, BBFDM_BOTH}, +{"AssociationEventData", &DMREAD, NULL, NULL, NULL, os__browseWiFiDataElementsAssociationEventAssociationEventDataInst, NULL, NULL, tWiFiDataElementsAssociationEventAssociationEventDataParams, NULL, BBFDM_BOTH}, {0} }; DMLEAF tWiFiDataElementsAssociationEventParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/ -//{"AssociationEventDataNumberOfEntries", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsAssociationEvent_AssociationEventDataNumberOfEntries, NULL, BBFDM_BOTH}, +{"AssociationEventDataNumberOfEntries", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsAssociationEvent_AssociationEventDataNumberOfEntries, NULL, BBFDM_BOTH}, {0} }; /* *** Device.WiFi.DataElements.AssociationEvent.AssociationEventData.{i}. *** */ DMLEAF tWiFiDataElementsAssociationEventAssociationEventDataParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/ -//{"BSSID", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_BSSID, NULL, BBFDM_BOTH}, -//{"MACAddress", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_MACAddress, NULL, BBFDM_BOTH}, -//{"StatusCode", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsAssociationEventAssociationEventData_StatusCode, NULL, BBFDM_BOTH}, -//{"HTCapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_HTCapabilities, NULL, BBFDM_BOTH}, -//{"VHTCapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_VHTCapabilities, NULL, BBFDM_BOTH}, -//{"HECapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_HECapabilities, NULL, BBFDM_BOTH}, -//{"TimeStamp", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_TimeStamp, NULL, BBFDM_BOTH}, +{"BSSID", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_BSSID, NULL, BBFDM_BOTH}, +{"MACAddress", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_MACAddress, NULL, BBFDM_BOTH}, +{"StatusCode", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsAssociationEventAssociationEventData_StatusCode, NULL, BBFDM_BOTH}, +{"HTCapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_HTCapabilities, NULL, BBFDM_BOTH}, +{"VHTCapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_VHTCapabilities, NULL, BBFDM_BOTH}, +{"HECapabilities", &DMREAD, DMT_BASE64, os__get_WiFiDataElementsAssociationEventAssociationEventData_HECapabilities, NULL, BBFDM_BOTH}, +{"TimeStamp", &DMREAD, DMT_STRING, os__get_WiFiDataElementsAssociationEventAssociationEventData_TimeStamp, NULL, BBFDM_BOTH}, {0} }; /* *** Device.WiFi.DataElements.DisassociationEvent. *** */ DMOBJ tWiFiDataElementsDisassociationEventObj[] = { /* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, nextobj, leaf, linker, bbfdm_type, uniqueKeys*/ -//{"DisassociationEventData", &DMREAD, NULL, NULL, NULL, os__browseWiFiDataElementsDisassociationEventDisassociationEventDataInst, NULL, NULL, tWiFiDataElementsDisassociationEventDisassociationEventDataParams, NULL, BBFDM_BOTH}, +{"DisassociationEventData", &DMREAD, NULL, NULL, NULL, os__browseWiFiDataElementsDisassociationEventDisassociationEventDataInst, NULL, NULL, tWiFiDataElementsDisassociationEventDisassociationEventDataParams, NULL, BBFDM_BOTH}, {0} }; DMLEAF tWiFiDataElementsDisassociationEventParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/ -//{"DisassociationEventDataNumberOfEntries", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEvent_DisassociationEventDataNumberOfEntries, NULL, BBFDM_BOTH}, +{"DisassociationEventDataNumberOfEntries", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEvent_DisassociationEventDataNumberOfEntries, NULL, BBFDM_BOTH}, {0} }; /* *** Device.WiFi.DataElements.DisassociationEvent.DisassociationEventData.{i}. *** */ DMLEAF tWiFiDataElementsDisassociationEventDisassociationEventDataParams[] = { /* PARAM, permission, type, getvalue, setvalue, bbfdm_type*/ -//{"BSSID", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BSSID, NULL, BBFDM_BOTH}, -//{"MACAddress", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_MACAddress, NULL, BBFDM_BOTH}, -//{"ReasonCode", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ReasonCode, NULL, BBFDM_BOTH}, -//{"BytesSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesSent, NULL, BBFDM_BOTH}, -//{"BytesReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesReceived, NULL, BBFDM_BOTH}, -//{"PacketsSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsSent, NULL, BBFDM_BOTH}, -//{"PacketsReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsReceived, NULL, BBFDM_BOTH}, -//{"ErrorsSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsSent, NULL, BBFDM_BOTH}, -//{"ErrorsReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsReceived, NULL, BBFDM_BOTH}, -//{"RetransCount", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_RetransCount, NULL, BBFDM_BOTH}, -//{"TimeStamp", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_TimeStamp, NULL, BBFDM_BOTH}, +{"BSSID", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BSSID, NULL, BBFDM_BOTH}, +{"MACAddress", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_MACAddress, NULL, BBFDM_BOTH}, +{"ReasonCode", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ReasonCode, NULL, BBFDM_BOTH}, +{"BytesSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesSent, NULL, BBFDM_BOTH}, +{"BytesReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_BytesReceived, NULL, BBFDM_BOTH}, +{"PacketsSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsSent, NULL, BBFDM_BOTH}, +{"PacketsReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_PacketsReceived, NULL, BBFDM_BOTH}, +{"ErrorsSent", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsSent, NULL, BBFDM_BOTH}, +{"ErrorsReceived", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_ErrorsReceived, NULL, BBFDM_BOTH}, +{"RetransCount", &DMREAD, DMT_UNINT, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_RetransCount, NULL, BBFDM_BOTH}, +{"TimeStamp", &DMREAD, DMT_STRING, os__get_WiFiDataElementsDisassociationEventDisassociationEventData_TimeStamp, NULL, BBFDM_BOTH}, {0} };