WIP: Device layer port to nRF52840
Network Telementry Manager Implementation. The following telemetry
mechanisms there implemented:
-- Thread Network Telemetry
-- Thread Network Topology
-- Thread Network Telemetry Full Statistical Data
-- WiFi Network Telemetry
-- Weave Tunnel Telemetry
Thread network telemetry is relavant and enabled for nRF52840 platform.
WiFi network and Weave tunnel telemetry are enabled for ESP32 platform.
diff --git a/build/esp32/components/openweave/Kconfig b/build/esp32/components/openweave/Kconfig
index 274d22b..2e5aa05 100644
--- a/build/esp32/components/openweave/Kconfig
+++ b/build/esp32/components/openweave/Kconfig
@@ -720,4 +720,35 @@
endmenu
+ menu "Network Telemetry Options"
+
+ config ENABLE_WIFI_TELEMETRY
+ bool "Enable WiFi Telemetry"
+ default y
+ help
+ Enable automatically uploading Wi-Fi telemetry via trait on an interval.
+
+ config ENABLE_THREAD_TELEMETRY
+ bool "Enable Thread Telemetry"
+ default n
+ help
+ Enable automatically uploading minimal Thread telemetry and topology via trait on an interval.
+
+ config ENABLE_THREAD_TELEMETRY_FULL
+ bool "Enable Full Thread Telemetry"
+ default n
+ help
+ Enable automatically uploading all Thread telemetry and topology via trait on an interval.
+ This is suitable for products that have router capability.
+
+ This option can be enabled only when Thread telemetry is enabled.
+
+ config ENABLE_TUNNEL_TELEMETRY
+ bool "Enable Weave Tunnel Telemetry"
+ default y
+ help
+ Enable automatically uploading Weave tunnel telemetry via trait on an interval.
+
+ endmenu
+
endmenu
diff --git a/src/adaptations/device-layer/ESP32/ConnectivityManagerImpl.cpp b/src/adaptations/device-layer/ESP32/ConnectivityManagerImpl.cpp
index 661e442..e6a03fc 100644
--- a/src/adaptations/device-layer/ESP32/ConnectivityManagerImpl.cpp
+++ b/src/adaptations/device-layer/ESP32/ConnectivityManagerImpl.cpp
@@ -50,6 +50,11 @@
#error "WiFi AP support must be enabled when building for ESP32"
#endif
+#if WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+#include <Weave/Support/TraitEventUtils.h>
+#include <nest/trait/network/TelemetryNetworkTrait.h>
+#include <nest/trait/network/TelemetryNetworkWifiTrait.h>
+#endif
using namespace ::nl;
using namespace ::nl::Weave;
@@ -187,6 +192,154 @@
SystemLayer.ScheduleWork(DriveAPState, NULL);
}
+#define WIFI_BAND_2_4GHZ 2400
+#define WIFI_BAND_5_0GHZ 5000
+
+static uint16_t Map2400MHz(const uint8_t inChannel)
+{
+ uint16_t frequency = 0;
+
+ if (inChannel >= 1 && inChannel <= 13) {
+ frequency = 2412 + ((inChannel - 1) * 5);
+
+ } else if (inChannel == 14) {
+ frequency = 2484;
+
+ }
+
+ return frequency;
+}
+
+static uint16_t Map5000MHz(const uint8_t inChannel)
+{
+ uint16_t frequency = 0;
+
+ switch (inChannel) {
+
+ case 183: frequency = 4915; break;
+ case 184: frequency = 4920; break;
+ case 185: frequency = 4925; break;
+ case 187: frequency = 4935; break;
+ case 188: frequency = 4940; break;
+ case 189: frequency = 4945; break;
+ case 192: frequency = 4960; break;
+ case 196: frequency = 4980; break;
+ case 7: frequency = 5035; break;
+ case 8: frequency = 5040; break;
+ case 9: frequency = 5045; break;
+ case 11: frequency = 5055; break;
+ case 12: frequency = 5060; break;
+ case 16: frequency = 5080; break;
+ case 34: frequency = 5170; break;
+ case 36: frequency = 5180; break;
+ case 38: frequency = 5190; break;
+ case 40: frequency = 5200; break;
+ case 42: frequency = 5210; break;
+ case 44: frequency = 5220; break;
+ case 46: frequency = 5230; break;
+ case 48: frequency = 5240; break;
+ case 52: frequency = 5260; break;
+ case 56: frequency = 5280; break;
+ case 60: frequency = 5300; break;
+ case 64: frequency = 5320; break;
+ case 100: frequency = 5500; break;
+ case 104: frequency = 5520; break;
+ case 108: frequency = 5540; break;
+ case 112: frequency = 5560; break;
+ case 116: frequency = 5580; break;
+ case 120: frequency = 5600; break;
+ case 124: frequency = 5620; break;
+ case 128: frequency = 5640; break;
+ case 132: frequency = 5660; break;
+ case 136: frequency = 5680; break;
+ case 140: frequency = 5700; break;
+ case 149: frequency = 5745; break;
+ case 153: frequency = 5765; break;
+ case 157: frequency = 5785; break;
+ case 161: frequency = 5805; break;
+ case 165: frequency = 5825; break;
+
+ }
+
+ return frequency;
+}
+
+static uint16_t MapFrequency(const uint16_t inBand, const uint8_t inChannel)
+{
+ uint16_t frequency = 0;
+
+ if (inBand == WIFI_BAND_2_4GHZ) {
+ frequency = Map2400MHz(inChannel);
+
+ } else if (inBand == WIFI_BAND_5_0GHZ) {
+ frequency = Map5000MHz(inChannel);
+
+ }
+
+ return frequency;
+}
+
+WEAVE_ERROR ConnectivityManagerImpl::_GetAndLogWifiStatsCounters(void)
+{
+ WEAVE_ERROR err;
+ nl::Weave::Profiles::DataManagement_Current::event_id_t eventId;
+ Schema::Nest::Trait::Network::TelemetryNetworkWifiTrait::NetworkWiFiStatsEvent statsEvent;
+ wifi_config_t wifiConfig;
+ uint8_t primaryChannel;
+ wifi_second_chan_t secondChannel;
+
+ VerifyOrExit(_IsWiFiStationConnected() && _IsWiFiStationConnected(), err = WEAVE_NO_ERROR);
+
+ err = esp_wifi_get_config(ESP_IF_WIFI_STA, &wifiConfig);
+ if (err != ESP_OK)
+ {
+ WeaveLogError(DeviceLayer, "esp_wifi_get_config() failed: %s", nl::ErrorStr(err));
+ }
+ SuccessOrExit(err);
+
+ err = esp_wifi_get_channel(&primaryChannel, &secondChannel);
+ if (err != ESP_OK)
+ {
+ WeaveLogError(DeviceLayer, "esp_wifi_get_channel() failed: %s", nl::ErrorStr(err));
+ }
+ SuccessOrExit(err);
+
+ statsEvent.bssid = (wifiConfig.sta.bssid[4] << 8) | wifiConfig.sta.bssid[5];
+ statsEvent.freq = MapFrequency(WIFI_BAND_2_4GHZ, primaryChannel);
+ statsEvent.rssi = 0;
+ statsEvent.bcnRecvd = 0;
+ statsEvent.bcnLost = 0;
+ statsEvent.pktMcastRx = 0;
+ statsEvent.pktUcastRx = 0;
+ statsEvent.currTxRate = 0;
+ statsEvent.currRxRate = 0;
+ statsEvent.sleepTimePercent = 0;
+ statsEvent.numOfAp = 0;
+
+ WeaveLogProgress(DeviceLayer,
+ "WiFi-Telemtry\n"
+ "BSSID: %x\n"
+ "freq: %d\n"
+ "rssi: %d\n"
+ "bcn recvd: %d\n"
+ "bcn lost: %d\n"
+ "mcast: %d\n"
+ "ucast: %d\n"
+ "rx rate: %d\n"
+ "tx rate: %d\n"
+ "sleep percent: %d\n"
+ "Num of AP: %d\n",
+ statsEvent.bssid, statsEvent.freq, statsEvent.rssi, statsEvent.bcnRecvd, statsEvent.bcnLost,
+ statsEvent.pktMcastRx, statsEvent.pktUcastRx, statsEvent.currRxRate, statsEvent.currTxRate,
+ statsEvent.sleepTimePercent, statsEvent.numOfAp);
+
+ eventId = nl::LogEvent(&statsEvent);
+ WeaveLogProgress(DeviceLayer, "WiFi Telemetry Stats Event Id: %u\n", eventId);
+
+exit:
+ return err;
+}
+
WEAVE_ERROR ConnectivityManagerImpl::_SetServiceTunnelMode(ServiceTunnelMode val)
{
WEAVE_ERROR err = WEAVE_NO_ERROR;
diff --git a/src/adaptations/device-layer/Makefile.am b/src/adaptations/device-layer/Makefile.am
index 034857e..995eb6b 100644
--- a/src/adaptations/device-layer/Makefile.am
+++ b/src/adaptations/device-layer/Makefile.am
@@ -54,6 +54,7 @@
include/Weave/DeviceLayer/FreeRTOS/GenericPlatformManagerImpl_FreeRTOS.h \
include/Weave/DeviceLayer/FreeRTOS/GenericPlatformManagerImpl_FreeRTOS.ipp \
include/Weave/DeviceLayer/GeneralUtils.h \
+ include/Weave/DeviceLayer/NetworkTelemetryManager.h \
include/Weave/DeviceLayer/PlatformManager.h \
include/Weave/DeviceLayer/TimeSyncManager.h \
include/Weave/DeviceLayer/TraitManager.h \
@@ -79,7 +80,11 @@
include/Weave/DeviceLayer/internal/ServiceProvisioningServer.h \
include/Weave/DeviceLayer/internal/ServiceTunnelAgent.h \
include/Weave/DeviceLayer/internal/WeaveDeviceLayerInternal.h \
+ trait-support/nest/trait/network/TelemetryNetworkTrait.h \
+ trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h \
+ trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h \
trait-support/weave/trait/description/DeviceIdentityTrait.h \
+ trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h \
$(NULL)
if CONFIG_DEVICE_LAYER
@@ -102,6 +107,7 @@
FabricProvisioningServer.cpp \
GeneralUtils.cpp \
Globals.cpp \
+ NetworkTelemetryManager.cpp \
PersistedStorage.cpp \
ServiceDirectoryManager.cpp \
ServiceProvisioningServer.cpp \
@@ -111,7 +117,11 @@
TestDeviceIds.cpp \
TimeSyncManager.cpp \
TraitManager.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkTrait.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp \
trait-support/weave/trait/description/DeviceIdentityTrait.cpp \
+ trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp \
$(NULL)
if WEAVE_DEVICE_LAYER_TARGET_ESP32
diff --git a/src/adaptations/device-layer/Makefile.in b/src/adaptations/device-layer/Makefile.in
index 94244e2..26b4925 100644
--- a/src/adaptations/device-layer/Makefile.in
+++ b/src/adaptations/device-layer/Makefile.in
@@ -217,11 +217,16 @@
DeviceControlServer.cpp DeviceDescriptionServer.cpp \
DeviceIdentityTraitDataSource.cpp DeviceNetworkInfo.cpp \
EchoServer.cpp FabricProvisioningServer.cpp GeneralUtils.cpp \
- Globals.cpp PersistedStorage.cpp ServiceDirectoryManager.cpp \
+ Globals.cpp NetworkTelemetryManager.cpp \
+ PersistedStorage.cpp ServiceDirectoryManager.cpp \
ServiceProvisioningServer.cpp ServiceTunnelAgent.cpp \
SystemEventSupport.cpp SystemTimerSupport.cpp \
TestDeviceIds.cpp TimeSyncManager.cpp TraitManager.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkTrait.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp \
+ trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp \
trait-support/weave/trait/description/DeviceIdentityTrait.cpp \
+ trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp \
ESP32/AESBlockCipher.cpp ESP32/BLEManagerImpl.cpp \
ESP32/ConfigurationManagerImpl.cpp \
ESP32/ConnectivityManagerImpl.cpp ESP32/Entropy.cpp \
@@ -276,6 +281,7 @@
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-FabricProvisioningServer.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-GeneralUtils.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-Globals.$(OBJEXT) \
+@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-NetworkTelemetryManager.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-PersistedStorage.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-ServiceDirectoryManager.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-ServiceProvisioningServer.$(OBJEXT) \
@@ -285,7 +291,11 @@
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-TestDeviceIds.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-TimeSyncManager.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ libDeviceLayer_a-TraitManager.$(OBJEXT) \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.$(OBJEXT) \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.$(OBJEXT) \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.$(OBJEXT) \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.$(OBJEXT) \
@CONFIG_DEVICE_LAYER_TRUE@ $(am__objects_1) $(am__objects_2)
libDeviceLayer_a_OBJECTS = $(am_libDeviceLayer_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
@@ -635,6 +645,7 @@
include/Weave/DeviceLayer/FreeRTOS/GenericPlatformManagerImpl_FreeRTOS.h \
include/Weave/DeviceLayer/FreeRTOS/GenericPlatformManagerImpl_FreeRTOS.ipp \
include/Weave/DeviceLayer/GeneralUtils.h \
+ include/Weave/DeviceLayer/NetworkTelemetryManager.h \
include/Weave/DeviceLayer/PlatformManager.h \
include/Weave/DeviceLayer/TimeSyncManager.h \
include/Weave/DeviceLayer/TraitManager.h \
@@ -660,7 +671,11 @@
include/Weave/DeviceLayer/internal/ServiceProvisioningServer.h \
include/Weave/DeviceLayer/internal/ServiceTunnelAgent.h \
include/Weave/DeviceLayer/internal/WeaveDeviceLayerInternal.h \
+ trait-support/nest/trait/network/TelemetryNetworkTrait.h \
+ trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h \
+ trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h \
trait-support/weave/trait/description/DeviceIdentityTrait.h \
+ trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h \
$(NULL)
@CONFIG_DEVICE_LAYER_TRUE@lib_LIBRARIES = libDeviceLayer.a
@@ -677,6 +692,7 @@
@CONFIG_DEVICE_LAYER_TRUE@ DeviceNetworkInfo.cpp EchoServer.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ FabricProvisioningServer.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ GeneralUtils.cpp Globals.cpp \
+@CONFIG_DEVICE_LAYER_TRUE@ NetworkTelemetryManager.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ PersistedStorage.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ ServiceDirectoryManager.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ ServiceProvisioningServer.cpp \
@@ -685,7 +701,11 @@
@CONFIG_DEVICE_LAYER_TRUE@ SystemTimerSupport.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ TestDeviceIds.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ TimeSyncManager.cpp TraitManager.cpp \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/TelemetryNetworkTrait.cpp \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ trait-support/weave/trait/description/DeviceIdentityTrait.cpp \
+@CONFIG_DEVICE_LAYER_TRUE@ trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp \
@CONFIG_DEVICE_LAYER_TRUE@ $(NULL) $(am__append_1) \
@CONFIG_DEVICE_LAYER_TRUE@ $(am__append_2)
all: all-am
@@ -753,6 +773,21 @@
clean-libLIBRARIES:
-test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+trait-support/nest/trait/network/$(am__dirstamp):
+ @$(MKDIR_P) trait-support/nest/trait/network
+ @: > trait-support/nest/trait/network/$(am__dirstamp)
+trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) trait-support/nest/trait/network/$(DEPDIR)
+ @: > trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp)
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.$(OBJEXT): \
+ trait-support/nest/trait/network/$(am__dirstamp) \
+ trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp)
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.$(OBJEXT): \
+ trait-support/nest/trait/network/$(am__dirstamp) \
+ trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp)
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.$(OBJEXT): \
+ trait-support/nest/trait/network/$(am__dirstamp) \
+ trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp)
trait-support/weave/trait/description/$(am__dirstamp):
@$(MKDIR_P) trait-support/weave/trait/description
@: > trait-support/weave/trait/description/$(am__dirstamp)
@@ -762,6 +797,15 @@
trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.$(OBJEXT): \
trait-support/weave/trait/description/$(am__dirstamp) \
trait-support/weave/trait/description/$(DEPDIR)/$(am__dirstamp)
+trait-support/weave/trait/telemetry/tunnel/$(am__dirstamp):
+ @$(MKDIR_P) trait-support/weave/trait/telemetry/tunnel
+ @: > trait-support/weave/trait/telemetry/tunnel/$(am__dirstamp)
+trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)
+ @: > trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/$(am__dirstamp)
+trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.$(OBJEXT): \
+ trait-support/weave/trait/telemetry/tunnel/$(am__dirstamp) \
+ trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/$(am__dirstamp)
ESP32/$(am__dirstamp):
@$(MKDIR_P) ESP32
@: > ESP32/$(am__dirstamp)
@@ -860,7 +904,9 @@
-rm -f LwIP/*.$(OBJEXT)
-rm -f OpenThread/*.$(OBJEXT)
-rm -f nRF5/*.$(OBJEXT)
+ -rm -f trait-support/nest/trait/network/*.$(OBJEXT)
-rm -f trait-support/weave/trait/description/*.$(OBJEXT)
+ -rm -f trait-support/weave/trait/telemetry/tunnel/*.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@@ -874,6 +920,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-FabricProvisioningServer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-GeneralUtils.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-Globals.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-PersistedStorage.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-ServiceDirectoryManager.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libDeviceLayer_a-ServiceProvisioningServer.Po@am__quote@
@@ -910,7 +957,11 @@
@AMDEP_TRUE@@am__include@ @am__quote@nRF5/$(DEPDIR)/libDeviceLayer_a-ThreadStackManagerImpl.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@nRF5/$(DEPDIR)/libDeviceLayer_a-nRF5Config.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@nRF5/$(DEPDIR)/libDeviceLayer_a-nRF5Utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@trait-support/weave/trait/description/$(DEPDIR)/libDeviceLayer_a-DeviceIdentityTrait.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Po@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1062,6 +1113,20 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libDeviceLayer_a-Globals.obj `if test -f 'Globals.cpp'; then $(CYGPATH_W) 'Globals.cpp'; else $(CYGPATH_W) '$(srcdir)/Globals.cpp'; fi`
+libDeviceLayer_a-NetworkTelemetryManager.o: NetworkTelemetryManager.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libDeviceLayer_a-NetworkTelemetryManager.o -MD -MP -MF $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Tpo -c -o libDeviceLayer_a-NetworkTelemetryManager.o `test -f 'NetworkTelemetryManager.cpp' || echo '$(srcdir)/'`NetworkTelemetryManager.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Tpo $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkTelemetryManager.cpp' object='libDeviceLayer_a-NetworkTelemetryManager.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libDeviceLayer_a-NetworkTelemetryManager.o `test -f 'NetworkTelemetryManager.cpp' || echo '$(srcdir)/'`NetworkTelemetryManager.cpp
+
+libDeviceLayer_a-NetworkTelemetryManager.obj: NetworkTelemetryManager.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libDeviceLayer_a-NetworkTelemetryManager.obj -MD -MP -MF $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Tpo -c -o libDeviceLayer_a-NetworkTelemetryManager.obj `if test -f 'NetworkTelemetryManager.cpp'; then $(CYGPATH_W) 'NetworkTelemetryManager.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkTelemetryManager.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Tpo $(DEPDIR)/libDeviceLayer_a-NetworkTelemetryManager.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NetworkTelemetryManager.cpp' object='libDeviceLayer_a-NetworkTelemetryManager.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libDeviceLayer_a-NetworkTelemetryManager.obj `if test -f 'NetworkTelemetryManager.cpp'; then $(CYGPATH_W) 'NetworkTelemetryManager.cpp'; else $(CYGPATH_W) '$(srcdir)/NetworkTelemetryManager.cpp'; fi`
+
libDeviceLayer_a-PersistedStorage.o: PersistedStorage.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libDeviceLayer_a-PersistedStorage.o -MD -MP -MF $(DEPDIR)/libDeviceLayer_a-PersistedStorage.Tpo -c -o libDeviceLayer_a-PersistedStorage.o `test -f 'PersistedStorage.cpp' || echo '$(srcdir)/'`PersistedStorage.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libDeviceLayer_a-PersistedStorage.Tpo $(DEPDIR)/libDeviceLayer_a-PersistedStorage.Po
@@ -1188,6 +1253,48 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libDeviceLayer_a-TraitManager.obj `if test -f 'TraitManager.cpp'; then $(CYGPATH_W) 'TraitManager.cpp'; else $(CYGPATH_W) '$(srcdir)/TraitManager.cpp'; fi`
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.o: trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.o -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
+
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.obj: trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.obj -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkTrait.cpp'; fi`
+
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.o: trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.o -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
+
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.obj: trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.obj -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWifiTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWifiTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp'; fi`
+
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.o: trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.o -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.o `test -f 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp' || echo '$(srcdir)/'`trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
+
+trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.obj: trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.obj -MD -MP -MF trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Tpo -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Tpo trait-support/nest/trait/network/$(DEPDIR)/libDeviceLayer_a-TelemetryNetworkWpanTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp' object='trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/nest/trait/network/libDeviceLayer_a-TelemetryNetworkWpanTrait.obj `if test -f 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; then $(CYGPATH_W) 'trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp'; fi`
+
trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.o: trait-support/weave/trait/description/DeviceIdentityTrait.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.o -MD -MP -MF trait-support/weave/trait/description/$(DEPDIR)/libDeviceLayer_a-DeviceIdentityTrait.Tpo -c -o trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.o `test -f 'trait-support/weave/trait/description/DeviceIdentityTrait.cpp' || echo '$(srcdir)/'`trait-support/weave/trait/description/DeviceIdentityTrait.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/weave/trait/description/$(DEPDIR)/libDeviceLayer_a-DeviceIdentityTrait.Tpo trait-support/weave/trait/description/$(DEPDIR)/libDeviceLayer_a-DeviceIdentityTrait.Po
@@ -1202,6 +1309,20 @@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/weave/trait/description/libDeviceLayer_a-DeviceIdentityTrait.obj `if test -f 'trait-support/weave/trait/description/DeviceIdentityTrait.cpp'; then $(CYGPATH_W) 'trait-support/weave/trait/description/DeviceIdentityTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/weave/trait/description/DeviceIdentityTrait.cpp'; fi`
+trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.o: trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.o -MD -MP -MF trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Tpo -c -o trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.o `test -f 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp' || echo '$(srcdir)/'`trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Tpo trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp' object='trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.o `test -f 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp' || echo '$(srcdir)/'`trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
+
+trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.obj: trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
+@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.obj -MD -MP -MF trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Tpo -c -o trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.obj `if test -f 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; then $(CYGPATH_W) 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; fi`
+@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Tpo trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/libDeviceLayer_a-TelemetryTunnelTrait.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp' object='trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o trait-support/weave/trait/telemetry/tunnel/libDeviceLayer_a-TelemetryTunnelTrait.obj `if test -f 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; then $(CYGPATH_W) 'trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; else $(CYGPATH_W) '$(srcdir)/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp'; fi`
+
ESP32/libDeviceLayer_a-AESBlockCipher.o: ESP32/AESBlockCipher.cpp
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libDeviceLayer_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ESP32/libDeviceLayer_a-AESBlockCipher.o -MD -MP -MF ESP32/$(DEPDIR)/libDeviceLayer_a-AESBlockCipher.Tpo -c -o ESP32/libDeviceLayer_a-AESBlockCipher.o `test -f 'ESP32/AESBlockCipher.cpp' || echo '$(srcdir)/'`ESP32/AESBlockCipher.cpp
@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ESP32/$(DEPDIR)/libDeviceLayer_a-AESBlockCipher.Tpo ESP32/$(DEPDIR)/libDeviceLayer_a-AESBlockCipher.Po
@@ -1711,8 +1832,12 @@
-rm -f OpenThread/$(am__dirstamp)
-rm -f nRF5/$(DEPDIR)/$(am__dirstamp)
-rm -f nRF5/$(am__dirstamp)
+ -rm -f trait-support/nest/trait/network/$(DEPDIR)/$(am__dirstamp)
+ -rm -f trait-support/nest/trait/network/$(am__dirstamp)
-rm -f trait-support/weave/trait/description/$(DEPDIR)/$(am__dirstamp)
-rm -f trait-support/weave/trait/description/$(am__dirstamp)
+ -rm -f trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)/$(am__dirstamp)
+ -rm -f trait-support/weave/trait/telemetry/tunnel/$(am__dirstamp)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -1723,7 +1848,7 @@
mostlyclean-am
distclean: distclean-am
- -rm -rf ./$(DEPDIR) ESP32/$(DEPDIR) FreeRTOS/$(DEPDIR) LwIP/$(DEPDIR) OpenThread/$(DEPDIR) nRF5/$(DEPDIR) trait-support/weave/trait/description/$(DEPDIR)
+ -rm -rf ./$(DEPDIR) ESP32/$(DEPDIR) FreeRTOS/$(DEPDIR) LwIP/$(DEPDIR) OpenThread/$(DEPDIR) nRF5/$(DEPDIR) trait-support/nest/trait/network/$(DEPDIR) trait-support/weave/trait/description/$(DEPDIR) trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1769,7 +1894,7 @@
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR) ESP32/$(DEPDIR) FreeRTOS/$(DEPDIR) LwIP/$(DEPDIR) OpenThread/$(DEPDIR) nRF5/$(DEPDIR) trait-support/weave/trait/description/$(DEPDIR)
+ -rm -rf ./$(DEPDIR) ESP32/$(DEPDIR) FreeRTOS/$(DEPDIR) LwIP/$(DEPDIR) OpenThread/$(DEPDIR) nRF5/$(DEPDIR) trait-support/nest/trait/network/$(DEPDIR) trait-support/weave/trait/description/$(DEPDIR) trait-support/weave/trait/telemetry/tunnel/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
diff --git a/src/adaptations/device-layer/NetworkTelemetryManager.cpp b/src/adaptations/device-layer/NetworkTelemetryManager.cpp
new file mode 100644
index 0000000..fc376ea
--- /dev/null
+++ b/src/adaptations/device-layer/NetworkTelemetryManager.cpp
@@ -0,0 +1,238 @@
+/*
+ *
+ * Copyright (c) 2019 Google LLC.
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Implementation for the Weave Device Layer Network Telemetry object.
+ *
+ */
+
+#include <Weave/DeviceLayer/internal/WeaveDeviceLayerInternal.h>
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_NETWORK_TELEMETRY
+
+#include <Weave/DeviceLayer/NetworkTelemetryManager.h>
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+#include <Weave/DeviceLayer/ThreadStackManager.h>
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+#include <Weave/Support/TraitEventUtils.h>
+#include <Weave/DeviceLayer/internal/ServiceTunnelAgent.h>
+#include <Weave/Profiles/weave-tunneling/WeaveTunnelAgent.h>
+#include <weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h>
+#endif
+
+using namespace nl::Weave::DeviceLayer;
+using namespace nl::Weave::DeviceLayer::Internal;
+
+WeaveTelemetryBase::WeaveTelemetryBase()
+{
+}
+
+void WeaveTelemetryBase::Init(uint32_t aIntervalMsec)
+{
+ SetPollingInterval(aIntervalMsec);
+ Enable();
+}
+
+void WeaveTelemetryBase::Enable(void)
+{
+ mEnabled = true;
+ StartPollingTimer();
+}
+
+void WeaveTelemetryBase::Disable(void)
+{
+ mEnabled = false;
+ StopPollingTimer();
+}
+
+void WeaveTelemetryBase::StartPollingTimer(void)
+{
+ SystemLayer.StartTimer(mInterval, sHandleTimer, this);
+}
+
+void WeaveTelemetryBase::StopPollingTimer(void)
+{
+ SystemLayer.CancelTimer(sHandleTimer, this);
+}
+
+void WeaveTelemetryBase::HandleTimer(void)
+{
+ GetTelemetryStatsAndLogEvent();
+
+ StartPollingTimer();
+}
+
+NetworkTelemetryManager::NetworkTelemetryManager(void)
+{
+}
+
+WEAVE_ERROR NetworkTelemetryManager::Init(void)
+{
+ WEAVE_ERROR err = WEAVE_NO_ERROR;
+
+ WeaveLogProgress(DeviceLayer, "Initiating Network Telemetry & Topology\n");
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+ mWiFiTelemetry.Init(WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS);
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+ mThreadTelemetry.Init(WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS);
+ mThreadTopology.Init(WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS);
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+ mTunnelTelemetry.Init(WEAVE_DEVICE_CONFIG_DEFAULT_TUNNEL_TELEMETRY_INTERVAL_MS);
+#endif
+
+ return err;
+}
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+void WiFiTelemetry::GetTelemetryStatsAndLogEvent(void)
+{
+ WEAVE_ERROR err;
+
+ err = ConnectivityMgr().GetAndLogWifiStatsCounters();
+ SuccessOrExit(err);
+
+exit:
+ return;
+}
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+void ThreadTelemetry::GetTelemetryStatsAndLogEvent(void)
+{
+ WEAVE_ERROR err;
+
+ err = ThreadStackMgr().GetAndLogThreadStatsCounters();
+ SuccessOrExit(err);
+
+exit:
+ return;
+}
+
+void ThreadTopology::GetTelemetryStatsAndLogEvent(void)
+{
+ WEAVE_ERROR err;
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL
+ err = ThreadStackMgr().GetAndLogThreadTopologyFull();
+ SuccessOrExit(err);
+#else
+ err = ThreadStackMgr().GetAndLogThreadTopologyMinimal();
+ SuccessOrExit(err);
+#endif
+
+exit:
+ return;
+}
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+void TunnelTelemetry::GetTelemetryStatsAndLogEvent(void)
+{
+ nl::Weave::Profiles::DataManagement_Current::event_id_t eventId;
+ nl::Weave::Profiles::WeaveTunnel::WeaveTunnelStatistics tunnelStats;
+ Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TelemetryTunnelStatsEvent statsEvent;
+
+ ServiceTunnelAgent.GetWeaveTunnelStatistics(tunnelStats);
+
+ statsEvent.txBytesToService = tunnelStats.mPrimaryStats.mTxBytesToService;
+ statsEvent.rxBytesFromService = tunnelStats.mPrimaryStats.mRxBytesFromService;
+ statsEvent.txMessagesToService = tunnelStats.mPrimaryStats.mTxMessagesToService;
+ statsEvent.rxMessagesFromService = tunnelStats.mPrimaryStats.mRxMessagesFromService;
+ statsEvent.tunnelDownCount = tunnelStats.mPrimaryStats.mTunnelDownCount;
+ statsEvent.tunnelConnAttemptCount = tunnelStats.mPrimaryStats.mTunnelConnAttemptCount;
+
+ statsEvent.lastTimeTunnelWentDown = tunnelStats.mPrimaryStats.mLastTimeTunnelWentDown;
+ statsEvent.lastTimeTunnelEstablished = tunnelStats.mPrimaryStats.mLastTimeTunnelEstablished;
+
+ statsEvent.droppedMessagesCount = tunnelStats.mDroppedMessagesCount;
+
+ switch (ServiceTunnelAgent.GetWeaveTunnelAgentState())
+ {
+ case nl::Weave::Profiles::WeaveTunnel::WeaveTunnelAgent::kState_Initialized_NoTunnel:
+ statsEvent.currentTunnelState = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_STATE_NO_TUNNEL;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::WeaveTunnelAgent::kState_PrimaryTunModeEstablished:
+ statsEvent.currentTunnelState = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_STATE_PRIMARY_ESTABLISHED;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::WeaveTunnelAgent::kState_BkupOnlyTunModeEstablished:
+ statsEvent.currentTunnelState =
+ Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_STATE_BACKUP_ONLY_ESTABLISHED;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::WeaveTunnelAgent::kState_PrimaryAndBkupTunModeEstablished:
+ statsEvent.currentTunnelState =
+ Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_STATE_PRIMARY_AND_BACKUP_ESTABLISHED;
+ break;
+ default:
+ break;
+ }
+
+ switch (tunnelStats.mCurrentActiveTunnel)
+ {
+ case nl::Weave::Profiles::WeaveTunnel::kType_TunnelUnknown:
+ statsEvent.currentActiveTunnel = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_TYPE_NONE;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::kType_TunnelPrimary:
+ statsEvent.currentActiveTunnel = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_TYPE_PRIMARY;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::kType_TunnelBackup:
+ statsEvent.currentActiveTunnel = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_TYPE_BACKUP;
+ break;
+ case nl::Weave::Profiles::WeaveTunnel::kType_TunnelShortcut:
+ statsEvent.currentActiveTunnel = Schema::Weave::Trait::Telemetry::Tunnel::TelemetryTunnelTrait::TUNNEL_TYPE_SHORTCUT;
+ break;
+ default:
+ break;
+ }
+
+ WeaveLogProgress(DeviceLayer,
+ "Weave Tunnel Counters\n"
+ "Tx Messages: %d\n"
+ "Rx Messages: %d\n"
+ "Tunnel Down Count: %d\n"
+ "Tunnel Conn Attempt Count: %d\n"
+ "Tunnel State: %d\n"
+ "CurrentActiveTunnel: %d\n",
+ statsEvent.txMessagesToService, statsEvent.rxMessagesFromService, statsEvent.tunnelDownCount, statsEvent.tunnelConnAttemptCount,
+ statsEvent.currentTunnelState, statsEvent.currentActiveTunnel);
+
+ WeaveLogProgress(DeviceLayer,
+ "Weave Tunnel Time Stamps\n"
+ "LastTime TunnelWentDown: %" PRIu64 "\n"
+ "LastTime TunnelEstablished: %" PRIu64 "\n",
+ statsEvent.lastTimeTunnelWentDown, statsEvent.lastTimeTunnelEstablished);
+
+ eventId = nl::LogEvent(&statsEvent);
+ WeaveLogProgress(DeviceLayer, "Weave Tunnel Tolopoly Stats Event Id: %u\n", eventId);
+
+ return;
+}
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_NETWORK_TELEMETRY
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h
index 752aa92..26b38d0 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h
@@ -110,6 +110,8 @@
uint32_t GetWiFiAPIdleTimeoutMS(void);
void SetWiFiAPIdleTimeoutMS(uint32_t val);
+ WEAVE_ERROR GetAndLogWifiStatsCounters(void);
+
// Thread Methods
ThreadMode GetThreadMode(void);
WEAVE_ERROR SetThreadMode(ThreadMode val);
@@ -305,6 +307,11 @@
static_cast<ImplClass*>(this)->_SetWiFiAPIdleTimeoutMS(val);
}
+inline WEAVE_ERROR ConnectivityManager::GetAndLogWifiStatsCounters(void)
+{
+ return static_cast<ImplClass*>(this)->_GetAndLogWifiStatsCounters();
+}
+
inline bool ConnectivityManager::HaveServiceConnectivityViaTunnel(void)
{
return static_cast<ImplClass*>(this)->_HaveServiceConnectivityViaTunnel();
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/ConnectivityManagerImpl.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/ConnectivityManagerImpl.h
index 27329ff..fa5218f 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/ConnectivityManagerImpl.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/ConnectivityManagerImpl.h
@@ -92,6 +92,7 @@
void _MaintainOnDemandWiFiAP(void);
uint32_t _GetWiFiAPIdleTimeoutMS(void);
void _SetWiFiAPIdleTimeoutMS(uint32_t val);
+ WEAVE_ERROR _GetAndLogWifiStatsCounters(void);
bool _HaveIPv4InternetConnectivity(void);
bool _HaveIPv6InternetConnectivity(void);
ServiceTunnelMode _GetServiceTunnelMode(void);
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/WeaveDevicePlatformConfig.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/WeaveDevicePlatformConfig.h
index e60f087..fb834e3 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/WeaveDevicePlatformConfig.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/ESP32/WeaveDevicePlatformConfig.h
@@ -69,5 +69,9 @@
#define WEAVE_DEVICE_CONFIG_USE_TEST_PAIRING_CODE CONFIG_USE_TEST_PAIRING_CODE
#define WEAVE_DEVICE_CONFIG_USE_TEST_SERIAL_NUMBER CONFIG_USE_TEST_SERIAL_NUMBER
#define WEAVE_DEVICE_CONFIG_ENABLE_TRAIT_MANAGER CONFIG_ENABLE_TRAIT_MANAGER
+#define WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY CONFIG_ENABLE_WIFI_TELEMETRY
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY CONFIG_ENABLE_THREAD_TELEMETRY
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL CONFIG_ENABLE_THREAD_TELEMETRY_FULL
+#define WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY CONFIG_ENABLE_TUNNEL_TELEMETRY
#endif // WEAVE_DEVICE_PLATFORM_CONFIG_H
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/NetworkTelemetryManager.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/NetworkTelemetryManager.h
new file mode 100644
index 0000000..f4f42bb
--- /dev/null
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/NetworkTelemetryManager.h
@@ -0,0 +1,150 @@
+/*
+ *
+ * Copyright (c) 2019 Google LLC.
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file
+ * Defines the Weave Device Layer Network Telemetry Manager object.
+ *
+ */
+
+#include <Weave/DeviceLayer/WeaveDeviceConfig.h>
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_NETWORK_TELEMETRY
+
+#ifndef NETWORK_TELEMETRY_MANAGER_H
+#define NETWORK_TELEMETRY_MANAGER_H
+
+namespace nl {
+namespace Weave {
+namespace DeviceLayer {
+namespace Internal {
+
+#include <SystemLayer/SystemLayer.h>
+
+/**
+ * This is a base class that handles network telemetry functions
+ * for different networks.
+ */
+class WeaveTelemetryBase
+{
+public:
+ WeaveTelemetryBase();
+
+ void Init(uint32_t aIntervalMsec);
+
+ void Enable(void);
+ void Disable(void);
+ bool IsEnabled(void) const;
+ void SetPollingInterval(uint32_t aIntervalMsec);
+ uint32_t GetPollingInterval(void) const;
+
+private:
+ void StartPollingTimer(void);
+ void StopPollingTimer(void);
+ void HandleTimer(void);
+ static void sHandleTimer(nl::Weave::System::Layer * aLayer, void * aAppState, WEAVE_ERROR aError);
+ virtual void GetTelemetryStatsAndLogEvent(void) = 0;
+
+private:
+ bool mEnabled;
+ uint32_t mInterval;
+};
+
+inline bool WeaveTelemetryBase::IsEnabled(void) const
+{
+ return mEnabled;
+}
+
+inline void WeaveTelemetryBase::SetPollingInterval(uint32_t aIntervalMsec)
+{
+ mInterval = aIntervalMsec;
+}
+
+inline uint32_t WeaveTelemetryBase::GetPollingInterval(void) const
+{
+ return mInterval;
+}
+
+inline void WeaveTelemetryBase::sHandleTimer(nl::Weave::System::Layer * aLayer, void * aAppState, WEAVE_ERROR aError)
+{
+ static_cast<WeaveTelemetryBase *>(aAppState)->HandleTimer();
+}
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+class WiFiTelemetry : public WeaveTelemetryBase
+{
+protected:
+ virtual void GetTelemetryStatsAndLogEvent(void);
+};
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+class ThreadTelemetry : public WeaveTelemetryBase
+{
+protected:
+ virtual void GetTelemetryStatsAndLogEvent(void);
+};
+
+class ThreadTopology : public WeaveTelemetryBase
+{
+protected:
+ virtual void GetTelemetryStatsAndLogEvent(void);
+};
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+class TunnelTelemetry : public WeaveTelemetryBase
+{
+protected:
+ virtual void GetTelemetryStatsAndLogEvent(void);
+};
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+
+
+class NetworkTelemetryManager
+{
+public:
+ NetworkTelemetryManager(void);
+
+ WEAVE_ERROR Init(void);
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+ WiFiTelemetry mWiFiTelemetry;
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+ ThreadTelemetry mThreadTelemetry;
+ ThreadTopology mThreadTopology;
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+ TunnelTelemetry mTunnelTelemetry;
+#endif
+};
+
+} // namespace Internal
+} // namespace DeviceLayer
+} // namespace Weave
+} // namespace nl
+
+#endif // NETWORK_TELEMETRY_MANAGER_H
+
+#endif // WEAVE_DEVICE_CONFIG_ENABLE_NETWORK_TELEMETRY
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.h
index dc1c7e6..1a74929 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.h
@@ -28,7 +28,6 @@
#include <openthread/instance.h>
-
namespace nl {
namespace Weave {
namespace DeviceLayer {
@@ -75,6 +74,9 @@
WEAVE_ERROR _SetThreadProvision(const DeviceNetworkInfo & netInfo);
void _ClearThreadProvision(void);
bool _HaveMeshConnectivity(void);
+ WEAVE_ERROR _GetAndLogThreadStatsCounters(void);
+ WEAVE_ERROR _GetAndLogThreadTopologyMinimal(void);
+ WEAVE_ERROR _GetAndLogThreadTopologyFull(void);
// ===== Members available to the implementation subclass.
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.ipp b/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.ipp
index f1898f8..e787ef9 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.ipp
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/OpenThread/GenericThreadStackManagerImpl_OpenThread.ipp
@@ -32,14 +32,18 @@
#include <Weave/Profiles/network-provisioning/NetworkProvisioning.h>
#include <Weave/DeviceLayer/internal/DeviceNetworkInfo.h>
#include <Weave/Support/crypto/WeaveRNG.h>
+#include <Weave/Support/TraitEventUtils.h>
+#include <nest/trait/network/TelemetryNetworkWpanTrait.h>
#include <openthread/thread.h>
#include <openthread/tasklet.h>
#include <openthread/link.h>
#include <openthread/dataset.h>
#include <openthread/dataset_ftd.h>
+#include <openthread/thread_ftd.h>
using namespace ::nl::Weave::Profiles::NetworkProvisioning;
+using namespace Schema::Nest::Trait::Network;
extern "C" void otSysProcessDrivers(otInstance *aInstance);
@@ -395,6 +399,414 @@
}
template<class ImplClass>
+WEAVE_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::_GetAndLogThreadStatsCounters(void)
+{
+ WEAVE_ERROR err = WEAVE_NO_ERROR;
+ otError otErr;
+ nl::Weave::Profiles::DataManagement_Current::event_id_t eventId;
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NetworkWpanStatsEvent counterEvent = { 0 };
+ const otMacCounters *macCounters;
+ const otIpCounters *ipCounters;
+ otOperationalDataset activeDataset;
+ otDeviceRole role;
+
+ Impl()->LockThreadStack();
+
+ // Get Mac Counters
+ macCounters = otLinkGetCounters(mOTInst);
+
+ // Rx Counters
+ counterEvent.phyRx = macCounters->mRxTotal;
+ counterEvent.macUnicastRx = macCounters->mRxUnicast;
+ counterEvent.macBroadcastRx = macCounters->mRxBroadcast;
+ counterEvent.macRxData = macCounters->mRxData;
+ counterEvent.macRxDataPoll = macCounters->mRxDataPoll;
+ counterEvent.macRxBeacon = macCounters->mRxBeacon;
+ counterEvent.macRxBeaconReq = macCounters->mRxBeaconRequest;
+ counterEvent.macRxOtherPkt = macCounters->mRxOther;
+ counterEvent.macRxFilterWhitelist = macCounters->mRxAddressFiltered;
+ counterEvent.macRxFilterDestAddr = macCounters->mRxDestAddrFiltered;
+
+ // Tx Counters
+ counterEvent.phyTx = macCounters->mTxTotal;
+ counterEvent.macUnicastTx = macCounters->mTxUnicast;
+ counterEvent.macBroadcastTx = macCounters->mTxBroadcast;
+ counterEvent.macTxAckReq = macCounters->mTxAckRequested;
+ counterEvent.macTxNoAckReq = macCounters->mTxNoAckRequested;
+ counterEvent.macTxAcked = macCounters->mTxAcked;
+ counterEvent.macTxData = macCounters->mTxData;
+ counterEvent.macTxDataPoll = macCounters->mTxDataPoll;
+ counterEvent.macTxBeacon = macCounters->mTxBeacon;
+ counterEvent.macTxBeaconReq = macCounters->mTxBeaconRequest;
+ counterEvent.macTxOtherPkt = macCounters->mTxOther;
+ counterEvent.macTxRetry = macCounters->mTxRetry;
+
+ // Tx Error Counters
+ counterEvent.macTxFailCca = macCounters->mTxErrCca;
+
+ // Rx Error Counters
+ counterEvent.macRxFailDecrypt = macCounters->mRxErrSec;
+ counterEvent.macRxFailNoFrame = macCounters->mRxErrNoFrame;
+ counterEvent.macRxFailUnknownNeighbor = macCounters->mRxErrUnknownNeighbor;
+ counterEvent.macRxFailInvalidSrcAddr = macCounters->mRxErrInvalidSrcAddr;
+ counterEvent.macRxFailFcs = macCounters->mRxErrFcs;
+ counterEvent.macRxFailOther = macCounters->mRxErrOther;
+
+ // Get Ip Counters
+ ipCounters = otThreadGetIp6Counters(mOTInst);
+
+ // Ip Counters
+ counterEvent.ipTxSuccess = ipCounters->mTxSuccess;
+ counterEvent.ipRxSuccess = ipCounters->mRxSuccess;
+ counterEvent.ipTxFailure = ipCounters->mTxFailure;
+ counterEvent.ipRxFailure = ipCounters->mRxFailure;
+
+ if (otDatasetIsCommissioned(mOTInst))
+ {
+ otErr = otDatasetGetActive(mOTInst, &activeDataset);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ if (activeDataset.mComponents.mIsChannelPresent)
+ {
+ counterEvent.channel = activeDataset.mChannel;
+ }
+ }
+
+ role = otThreadGetDeviceRole(mOTInst);
+
+ switch (role)
+ {
+ case OT_DEVICE_ROLE_LEADER:
+ counterEvent.nodeType |= TelemetryNetworkWpanTrait::NODE_TYPE_LEADER;
+ // Intentional fall-through: if it's a leader, then it's also a router
+ case OT_DEVICE_ROLE_ROUTER:
+ counterEvent.nodeType |= TelemetryNetworkWpanTrait::NODE_TYPE_ROUTER;
+ break;
+ case OT_DEVICE_ROLE_CHILD:
+ case OT_DEVICE_ROLE_DISABLED:
+ case OT_DEVICE_ROLE_DETACHED:
+ default:
+ counterEvent.nodeType = 0;
+ break;
+ }
+
+ counterEvent.threadType = TelemetryNetworkWpanTrait::THREAD_TYPE_OPENTHREAD;
+
+ WeaveLogProgress(DeviceLayer,
+ "Rx Counters:\n"
+ "PHY Rx Total: %d\n"
+ "MAC Rx Unicast: %d\n"
+ "MAC Rx Broadcast: %d\n"
+ "MAC Rx Data: %d\n"
+ "MAC Rx Data Polls: %d\n"
+ "MAC Rx Beacons: %d\n"
+ "MAC Rx Beacon Reqs: %d\n"
+ "MAC Rx Other: %d\n"
+ "MAC Rx Filtered Whitelist: %d\n"
+ "MAC Rx Filtered DestAddr: %d\n",
+ counterEvent.phyRx, counterEvent.macUnicastRx, counterEvent.macBroadcastRx, counterEvent.macRxData,
+ counterEvent.macRxDataPoll, counterEvent.macRxBeacon, counterEvent.macRxBeaconReq, counterEvent.macRxOtherPkt,
+ counterEvent.macRxFilterWhitelist, counterEvent.macRxFilterDestAddr);
+
+ WeaveLogProgress(DeviceLayer,
+ "Tx Counters:\n"
+ "PHY Tx Total: %d\n"
+ "MAC Tx Unicast: %d\n"
+ "MAC Tx Broadcast: %d\n"
+ "MAC Tx Data: %d\n"
+ "MAC Tx Data Polls: %d\n"
+ "MAC Tx Beacons: %d\n"
+ "MAC Tx Beacon Reqs: %d\n"
+ "MAC Tx Other: %d\n"
+ "MAC Tx Retry: %d\n"
+ "MAC Tx CCA Fail: %d\n",
+ counterEvent.phyTx, counterEvent.macUnicastTx, counterEvent.macBroadcastTx, counterEvent.macTxData,
+ counterEvent.macTxDataPoll, counterEvent.macTxBeacon, counterEvent.macTxBeaconReq, counterEvent.macTxOtherPkt,
+ counterEvent.macTxRetry, counterEvent.macTxFailCca);
+
+ WeaveLogProgress(DeviceLayer,
+ "Failure Counters:\n"
+ "MAC Rx Decrypt Fail: %d\n"
+ "MAC Rx No Frame Fail: %d\n"
+ "MAC Rx Unknown Neighbor Fail: %d\n"
+ "MAC Rx Invalid Src Addr Fail: %d\n"
+ "MAC Rx FCS Fail: %d\n"
+ "MAC Rx Other Fail: %d\n",
+ counterEvent.macRxFailDecrypt, counterEvent.macRxFailNoFrame, counterEvent.macRxFailUnknownNeighbor,
+ counterEvent.macRxFailInvalidSrcAddr, counterEvent.macRxFailFcs, counterEvent.macRxFailOther);
+
+ eventId = nl::LogEvent(&counterEvent);
+ WeaveLogProgress(DeviceLayer, "OpenThread Telemetry Stats Event Id: %u\n", eventId);
+
+ Impl()->UnlockThreadStack();
+
+exit:
+ return err;
+}
+
+template<class ImplClass>
+WEAVE_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::_GetAndLogThreadTopologyMinimal(void)
+{
+ WEAVE_ERROR err = WEAVE_NO_ERROR;
+ otError otErr;
+ nl::Weave::Profiles::DataManagement_Current::event_id_t eventId;
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NetworkWpanTopoMinimalEvent topologyEvent = { 0 };
+ const otExtAddress *extAddress;
+
+ Impl()->LockThreadStack();
+
+ topologyEvent.rloc16 = otThreadGetRloc16(mOTInst);
+
+ // Router ID is the top 6 bits of the RLOC
+ topologyEvent.routerId = (topologyEvent.rloc16 >> 10) & 0x3f;
+
+ topologyEvent.leaderRouterId = otThreadGetLeaderRouterId(mOTInst);
+
+ otErr = otThreadGetParentAverageRssi(mOTInst, &topologyEvent.parentAverageRssi);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ otErr = otThreadGetParentLastRssi(mOTInst, &topologyEvent.parentLastRssi);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ topologyEvent.partitionId = otThreadGetPartitionId(mOTInst);
+
+ extAddress = otLinkGetExtendedAddress(mOTInst);
+
+ topologyEvent.extAddress.mBuf = (uint8_t *)extAddress;
+ topologyEvent.extAddress.mLen = sizeof(otExtAddress);
+
+ topologyEvent.instantRssi = otPlatRadioGetRssi(mOTInst);
+
+ WeaveLogProgress(DeviceLayer,
+ "Thread Topology:\n"
+ "RLOC16: %04X\n"
+ "Router ID: %u\n"
+ "Leader Router ID: %u\n"
+ "Parent Avg RSSI: %d\n"
+ "Parent Last RSSI: %d\n"
+ "Partition ID: %d\n"
+ "Extended Address: %02X%02X:%02X%02X:%02X%02X:%02X%02X\n"
+ "Instant RSSI: %d\n",
+ topologyEvent.rloc16, topologyEvent.routerId, topologyEvent.leaderRouterId, topologyEvent.parentAverageRssi,
+ topologyEvent.parentLastRssi, topologyEvent.partitionId, topologyEvent.extAddress.mBuf[0], topologyEvent.extAddress.mBuf[1],
+ topologyEvent.extAddress.mBuf[2], topologyEvent.extAddress.mBuf[3], topologyEvent.extAddress.mBuf[4],
+ topologyEvent.extAddress.mBuf[5], topologyEvent.extAddress.mBuf[6], topologyEvent.extAddress.mBuf[7], topologyEvent.instantRssi);
+
+ eventId = nl::LogEvent(&topologyEvent);
+ WeaveLogProgress(DeviceLayer, "OpenThread Telemetry Stats Event Id: %u\n", eventId);
+
+ Impl()->UnlockThreadStack();
+
+exit:
+ if (err != WEAVE_NO_ERROR)
+ {
+ WeaveLogError(DeviceLayer, "GetAndLogThreadTopologyMinimul failed: %s", nl::ErrorStr(err));
+ }
+
+ return err;
+}
+
+#define TELEM_NEIGHBOR_TABLE_SIZE (64)
+#define TELEM_PRINT_BUFFER_SIZE (64)
+
+template<class ImplClass>
+WEAVE_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::_GetAndLogThreadTopologyFull(void)
+{
+ WEAVE_ERROR err = WEAVE_NO_ERROR;
+ otError otErr;
+ nl::Weave::Profiles::DataManagement_Current::EventOptions neighborTopoOpts(true);
+ nl::Weave::Profiles::DataManagement_Current::event_id_t eventId;
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NetworkWpanTopoFullEvent fullTopoEvent = { 0 };
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::TopoEntryEvent neighborTopoEvent = { 0 };
+ otIp6Address * leaderAddr = NULL;
+ uint8_t * networkData = NULL;
+ uint8_t * stableNetworkData = NULL;
+ uint8_t networkDataLen = 0;
+ uint8_t stableNetworkDataLen = 0;
+ const otExtAddress * extAddress;
+ otNeighborInfo neighborInfo[TELEM_NEIGHBOR_TABLE_SIZE];
+ otNeighborInfoIterator iter;
+ otNeighborInfoIterator iterCopy;
+ char printBuf[TELEM_PRINT_BUFFER_SIZE];
+
+ Impl()->LockThreadStack();
+
+ fullTopoEvent.rloc16 = otThreadGetRloc16(mOTInst);
+
+ // Router ID is the top 6 bits of the RLOC
+ fullTopoEvent.routerId = (fullTopoEvent.rloc16 >> 10) & 0x3f;
+
+ fullTopoEvent.leaderRouterId = otThreadGetLeaderRouterId(mOTInst);
+
+ otErr = otThreadGetLeaderRloc(mOTInst, leaderAddr);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ fullTopoEvent.leaderAddress.mBuf = leaderAddr->mFields.m8;
+ fullTopoEvent.leaderAddress.mLen = OT_IP6_ADDRESS_SIZE;
+
+ fullTopoEvent.leaderWeight = otThreadGetLeaderWeight(mOTInst);
+
+ fullTopoEvent.leaderLocalWeight = otThreadGetLocalLeaderWeight(mOTInst);
+
+ otErr = otNetDataGet(mOTInst, false, networkData, &networkDataLen);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ fullTopoEvent.networkData.mBuf = networkData;
+ fullTopoEvent.networkData.mLen = networkDataLen;
+
+ fullTopoEvent.networkDataVersion = otNetDataGetVersion(mOTInst);
+
+ otErr = otNetDataGet(mOTInst, true, stableNetworkData, &stableNetworkDataLen);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ fullTopoEvent.stableNetworkData.mBuf = stableNetworkData;
+ fullTopoEvent.stableNetworkData.mLen = stableNetworkDataLen;
+
+ fullTopoEvent.stableNetworkDataVersion = otNetDataGetStableVersion(mOTInst);
+
+ // Deprecated property
+ fullTopoEvent.preferredRouterId = -1;
+
+ extAddress = otLinkGetExtendedAddress(mOTInst);
+
+ fullTopoEvent.extAddress.mBuf = (uint8_t *)extAddress;
+ fullTopoEvent.extAddress.mLen = sizeof(otExtAddress);
+
+ fullTopoEvent.partitionId = otThreadGetPartitionId(mOTInst);
+
+ fullTopoEvent.instantRssi = otPlatRadioGetRssi(mOTInst);
+
+ iter = OT_NEIGHBOR_INFO_ITERATOR_INIT;
+ iterCopy = OT_NEIGHBOR_INFO_ITERATOR_INIT;
+ fullTopoEvent.neighborTableSize = 0;
+ fullTopoEvent.childTableSize = 0;
+
+ while (otThreadGetNextNeighborInfo(mOTInst, &iter, &neighborInfo[iter]) == OT_ERROR_NONE)
+ {
+ fullTopoEvent.neighborTableSize++;
+ if (neighborInfo[iterCopy].mIsChild)
+ {
+ fullTopoEvent.childTableSize++;
+ }
+ iterCopy = iter;
+ }
+
+ WeaveLogProgress(DeviceLayer,
+ "Thread Topology:\n"
+ "RLOC16: %04X\n"
+ "Router ID: %u\n"
+ "Leader Router ID: %u\n"
+ "Leader Address: %02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X\n"
+ "Leader Weight: %d\n"
+ "Local Leader Weight: %d\n"
+ "Network Data Len: %d\n"
+ "Network Data Version: %d\n"
+ "Extended Address: %02X%02X:%02X%02X:%02X%02X:%02X%02X\n"
+ "Partition ID: %X\n"
+ "Instant RSSI: %d\n"
+ "Neighbor Table Length: %d\n"
+ "Child Table Length: %d\n",
+ fullTopoEvent.rloc16, fullTopoEvent.routerId, fullTopoEvent.leaderRouterId,
+ fullTopoEvent.leaderAddress.mBuf[0], fullTopoEvent.leaderAddress.mBuf[1], fullTopoEvent.leaderAddress.mBuf[2], fullTopoEvent.leaderAddress.mBuf[3],
+ fullTopoEvent.leaderAddress.mBuf[4], fullTopoEvent.leaderAddress.mBuf[5], fullTopoEvent.leaderAddress.mBuf[6], fullTopoEvent.leaderAddress.mBuf[7],
+ fullTopoEvent.leaderAddress.mBuf[8], fullTopoEvent.leaderAddress.mBuf[9], fullTopoEvent.leaderAddress.mBuf[10], fullTopoEvent.leaderAddress.mBuf[11],
+ fullTopoEvent.leaderAddress.mBuf[12], fullTopoEvent.leaderAddress.mBuf[13], fullTopoEvent.leaderAddress.mBuf[14], fullTopoEvent.leaderAddress.mBuf[15],
+ fullTopoEvent.leaderWeight, fullTopoEvent.leaderLocalWeight, fullTopoEvent.networkData.mLen, fullTopoEvent.networkDataVersion,
+ fullTopoEvent.extAddress.mBuf[0], fullTopoEvent.extAddress.mBuf[1], fullTopoEvent.extAddress.mBuf[2], fullTopoEvent.extAddress.mBuf[3],
+ fullTopoEvent.extAddress.mBuf[4], fullTopoEvent.extAddress.mBuf[5], fullTopoEvent.extAddress.mBuf[6], fullTopoEvent.extAddress.mBuf[7],
+ fullTopoEvent.partitionId, fullTopoEvent.instantRssi, fullTopoEvent.neighborTableSize, fullTopoEvent.childTableSize);
+
+ eventId = nl::LogEvent(&fullTopoEvent);
+ WeaveLogProgress(DeviceLayer, "OpenThread Full Topology Event Id: %u\n", eventId);
+
+ // Populate the neighbor event options.
+ // This way the neighbor topology entries are linked to the actual topology full event.
+ neighborTopoOpts.relatedEventID = eventId;
+ neighborTopoOpts.relatedImportance = TelemetryNetworkWpanTrait::NetworkWpanTopoFullEvent::Schema.mImportance;
+
+ // Handle each neighbor event seperatly.
+ for (uint32_t i = 0; i < fullTopoEvent.neighborTableSize; i++)
+ {
+ otNeighborInfo * neighbor = &neighborInfo[i];
+
+ neighborTopoEvent.extAddress.mBuf = neighbor->mExtAddress.m8;
+ neighborTopoEvent.extAddress.mLen = sizeof(uint64_t);
+
+ neighborTopoEvent.rloc16 = neighbor->mRloc16;
+ neighborTopoEvent.linkQualityIn = neighbor->mLinkQualityIn;
+ neighborTopoEvent.averageRssi = neighbor->mAverageRssi;
+ neighborTopoEvent.age = neighbor->mAge;
+ neighborTopoEvent.rxOnWhenIdle = neighbor->mRxOnWhenIdle;
+ // TODO: not supported in old version of OpenThread used by Nordic SDK.
+ // neighborTopoEvent.fullFunction = neighbor->mFullThreadDevice;
+ neighborTopoEvent.fullFunction = false;
+ neighborTopoEvent.secureDataRequest = neighbor->mSecureDataRequest;
+ neighborTopoEvent.fullNetworkData = neighbor->mFullNetworkData;
+ neighborTopoEvent.lastRssi = neighbor->mLastRssi;
+ neighborTopoEvent.linkFrameCounter = neighbor->mLinkFrameCounter;
+ neighborTopoEvent.mleFrameCounter = neighbor->mMleFrameCounter;
+ neighborTopoEvent.isChild = neighbor->mIsChild;
+
+ if (neighborTopoEvent.isChild)
+ {
+ otChildInfo * child = NULL;
+ otErr = otThreadGetChildInfoById(mOTInst, neighborTopoEvent.rloc16, child);
+ VerifyOrExit(otErr == OT_ERROR_NONE, err = MapOpenThreadError(otErr));
+
+ neighborTopoEvent.timeout = child->mTimeout;
+ neighborTopoEvent.networkDataVersion = child->mNetworkDataVersion;
+
+ neighborTopoEvent.SetTimeoutPresent();
+ neighborTopoEvent.SetNetworkDataVersionPresent();
+
+ snprintf(printBuf, TELEM_PRINT_BUFFER_SIZE, ", Timeout: %10lu NetworkDataVersion: %3d",
+ neighborTopoEvent.timeout, neighborTopoEvent.networkDataVersion);
+ }
+ else
+ {
+ neighborTopoEvent.SetTimeoutNull();
+ neighborTopoEvent.SetNetworkDataVersionNull();
+
+ printBuf[0] = 0;
+ }
+
+ WeaveLogProgress(DeviceLayer,
+ "TopoEntry[%u]: %02X%02X:%02X%02X:%02X%02X:%02X%02X\n"
+ "RLOC: %04X\n"
+ "Age: %3d\n"
+ "LQI: %1d\n"
+ "AvgRSSI: %3d\n"
+ "LastRSSI: %3d\n"
+ "LinkFrameCounter: %10d\n"
+ "MleFrameCounter: %10d\n"
+ "RxOnWhenIdle: %c\n"
+ "SecureDataRequest: %c\n"
+ "FullFunction: %c\n"
+ "FullNetworkData: %c\n"
+ "IsChild: %c%s\n",
+ i, neighborTopoEvent.extAddress.mBuf[0], neighborTopoEvent.extAddress.mBuf[1], neighborTopoEvent.extAddress.mBuf[2],
+ neighborTopoEvent.extAddress.mBuf[3], neighborTopoEvent.extAddress.mBuf[4], neighborTopoEvent.extAddress.mBuf[5],
+ neighborTopoEvent.extAddress.mBuf[6], neighborTopoEvent.extAddress.mBuf[7], neighborTopoEvent.rloc16, neighborTopoEvent.age,
+ neighborTopoEvent.linkQualityIn, neighborTopoEvent.averageRssi, neighborTopoEvent.lastRssi, neighborTopoEvent.linkFrameCounter,
+ neighborTopoEvent.mleFrameCounter, neighborTopoEvent.rxOnWhenIdle ? 'Y' : 'n', neighborTopoEvent.secureDataRequest ? 'Y' : 'n',
+ neighborTopoEvent.fullFunction ? 'Y' : 'n', neighborTopoEvent.fullNetworkData ? 'Y' : 'n',
+ neighborTopoEvent.isChild ? 'Y' : 'n', printBuf);
+
+ eventId = nl::LogEvent(&neighborTopoEvent, neighborTopoOpts);
+ WeaveLogProgress(DeviceLayer, "OpenThread Neighbor TopoEntry[%u] Event Id: %ld\n", i, eventId);
+ }
+
+ Impl()->UnlockThreadStack();
+
+exit:
+ if (err != WEAVE_NO_ERROR)
+ {
+ WeaveLogError(DeviceLayer, "GetAndLogThreadTopologyFull failed: %s", nl::ErrorStr(err));
+ }
+ return err;
+}
+
+template<class ImplClass>
WEAVE_ERROR GenericThreadStackManagerImpl_OpenThread<ImplClass>::DoInit(otInstance * otInst)
{
WEAVE_ERROR err = WEAVE_NO_ERROR;
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/ThreadStackManager.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/ThreadStackManager.h
index 2bf6ab8..8fdf3a5 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/ThreadStackManager.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/ThreadStackManager.h
@@ -63,6 +63,9 @@
bool TryLockThreadStack(void);
void UnlockThreadStack(void);
bool HaveRouteToAddress(const IPAddress & destAddr);
+ WEAVE_ERROR GetAndLogThreadStatsCounters(void);
+ WEAVE_ERROR GetAndLogThreadTopologyMinimal(void);
+ WEAVE_ERROR GetAndLogThreadTopologyFull(void);
private:
@@ -218,6 +221,21 @@
return static_cast<ImplClass*>(this)->_HaveMeshConnectivity();
}
+inline WEAVE_ERROR ThreadStackManager::GetAndLogThreadStatsCounters(void)
+{
+ return static_cast<ImplClass*>(this)->_GetAndLogThreadStatsCounters();
+}
+
+inline WEAVE_ERROR ThreadStackManager::GetAndLogThreadTopologyMinimal(void)
+{
+ return static_cast<ImplClass*>(this)->_GetAndLogThreadTopologyMinimal();
+}
+
+inline WEAVE_ERROR ThreadStackManager::GetAndLogThreadTopologyFull(void)
+{
+ return static_cast<ImplClass*>(this)->_GetAndLogThreadTopologyFull();
+}
+
} // namespace DeviceLayer
} // namespace Weave
} // namespace nl
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h
index 1459e06..b88a74f 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h
@@ -569,5 +569,92 @@
#define WEAVE_DEVICE_CONFIG_DISABLE_ACCOUNT_PAIRING 0
#endif
+// -------------------- Network Telemetry Configuration --------------------
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+ *
+ * @brief
+ * Enable automatically uploading Wi-Fi telemetry via trait on an interval.
+ */
+#ifndef WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY
+#define WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY (0)
+#endif
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+ *
+ * @brief
+ * Enable automatically uploading minimal Thread telemetry and topology via trait on an interval.
+ */
+#ifndef WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY (0)
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY && !WEAVE_DEVICE_CONFIG_ENABLE_THREAD
+#error "If WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY set, then WEAVE_DEVICE_CONFIG_ENABLE_THREAD must also be set."
+#endif
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL
+ *
+ * @brief
+ * Enable automatically uploading all Thread telemetry and topology via trait on an interval.
+ * This is suitable for products that have router capability.
+ *
+ * @note
+ * If set, WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY must also be set.
+ */
+#ifndef WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL (0)
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL && !WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY
+#error "If WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL set, then WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY must also be set."
+#endif
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+ *
+ * @brief
+ * Enable automatically uploading Weave tunnel telemetry via trait on an interval.
+ */
+#ifndef WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY
+#define WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY (0)
+#endif
+
+#if WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY && !WEAVE_CONFIG_ENABLE_TUNNELING
+#error "If WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY set, then WEAVE_CONFIG_ENABLE_TUNNELING must also be set."
+#endif
+
+// Enable Network Telemetry feature if it is enabled for at lease one network.
+#define WEAVE_DEVICE_CONFIG_ENABLE_NETWORK_TELEMETRY (WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY || \
+ WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY || \
+ WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY)
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS
+ *
+ * @brief
+ * This sets the default interval at which network telemetry events
+ * will be logged to Weave buffers. This can be overwritten at runtime
+ * with a trait.
+ *
+ */
+#ifndef WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS
+#define WEAVE_DEVICE_CONFIG_DEFAULT_TELEMETRY_INTERVAL_MS 90000
+#endif
+
+/**
+ * @def WEAVE_DEVICE_CONFIG_DEFAULT_TUNNEL_TELEMETRY_INTERVAL_MS
+ *
+ * @brief
+ * This sets the default interval at which Weave tunnel telemetry events
+ * will be logged to Weave buffers.
+ *
+ */
+#ifndef WEAVE_DEVICE_CONFIG_DEFAULT_TUNNEL_TELEMETRY_INTERVAL_MS
+#define WEAVE_DEVICE_CONFIG_DEFAULT_TUNNEL_TELEMETRY_INTERVAL_MS 300000
+#endif
#endif // WEAVE_DEVICE_CONFIG_H
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericConnectivityManagerImpl_NoWiFi.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericConnectivityManagerImpl_NoWiFi.h
index 09922fe..cd9c3b8 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericConnectivityManagerImpl_NoWiFi.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericConnectivityManagerImpl_NoWiFi.h
@@ -73,6 +73,7 @@
void _MaintainOnDemandWiFiAP(void);
uint32_t _GetWiFiAPIdleTimeoutMS(void);
void _SetWiFiAPIdleTimeoutMS(uint32_t val);
+ WEAVE_ERROR _GetAndLogWifiStatsCounters(void);
bool _CanStartWiFiScan();
void _OnWiFiScanDone();
void _OnWiFiStationProvisionChange();
@@ -182,6 +183,12 @@
}
template<class ImplClass>
+inline WEAVE_ERROR GenericConnectivityManagerImpl_NoWiFi<ImplClass>::_GetAndLogWifiStatsCounters(void)
+{
+ return WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE;
+}
+
+template<class ImplClass>
inline bool GenericConnectivityManagerImpl_NoWiFi<ImplClass>::_CanStartWiFiScan()
{
return false;
diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/nRF5/WeaveDevicePlatformConfig.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/nRF5/WeaveDevicePlatformConfig.h
index 3d6cec9..e79b6b5 100644
--- a/src/adaptations/device-layer/include/Weave/DeviceLayer/nRF5/WeaveDevicePlatformConfig.h
+++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/nRF5/WeaveDevicePlatformConfig.h
@@ -78,4 +78,9 @@
#define WEAVE_DEVICE_CONFIG_THREAD_TASK_STACK_SIZE 8192
#endif // WEAVE_DEVICE_CONFIG_THREAD_TASK_STACK_SIZE
+#define WEAVE_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY 0
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY 1
+#define WEAVE_DEVICE_CONFIG_ENABLE_THREAD_TELEMETRY_FULL 0
+#define WEAVE_DEVICE_CONFIG_ENABLE_TUNNEL_TELEMETRY 0
+
#endif // WEAVE_DEVICE_PLATFORM_CONFIG_H
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.cpp b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
new file mode 100644
index 0000000..085cdc8
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.cpp
@@ -0,0 +1,88 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp
+ * SOURCE PROTO: nest/trait/network/telemetry_network_trait.proto
+ *
+ */
+
+#include <nest/trait/network/TelemetryNetworkTrait.h>
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkTrait {
+
+using namespace ::nl::Weave::Profiles::DataManagement;
+
+//
+// Property Table
+//
+
+const TraitSchemaEngine::PropertyInfo PropertyMap[] = {
+};
+
+//
+// Schema
+//
+
+const TraitSchemaEngine TraitSchema = {
+ {
+ kWeaveProfileId,
+ PropertyMap,
+ sizeof(PropertyMap) / sizeof(PropertyMap[0]),
+ 1,
+#if (TDM_EXTENSION_SUPPORT) || (TDM_VERSIONING_SUPPORT)
+ 2,
+#endif
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#if (TDM_EXTENSION_SUPPORT)
+ NULL,
+#endif
+#if (TDM_VERSIONING_SUPPORT)
+ NULL,
+#endif
+ }
+};
+
+ //
+ // Events
+ //
+
+const nl::FieldDescriptor NetworkDHCPFailureEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkDHCPFailureEvent, reason), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 1
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkDHCPFailureEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkDHCPFailureEventFieldDescriptors)/sizeof(NetworkDHCPFailureEventFieldDescriptors[0]),
+ .mFields = NetworkDHCPFailureEventFieldDescriptors,
+ .mSize = sizeof(NetworkDHCPFailureEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkDHCPFailureEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x1,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 1,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+} // namespace TelemetryNetworkTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.h b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.h
new file mode 100644
index 0000000..b9bf340
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkTrait.h
@@ -0,0 +1,61 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp.h
+ * SOURCE PROTO: nest/trait/network/telemetry_network_trait.proto
+ *
+ */
+#ifndef _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_TRAIT_H_
+#define _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_TRAIT_H_
+
+#include <Weave/Profiles/data-management/DataManagement.h>
+#include <Weave/Support/SerializationUtils.h>
+
+
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkTrait {
+
+extern const nl::Weave::Profiles::DataManagement::TraitSchemaEngine TraitSchema;
+
+enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x601U
+};
+
+//
+// Events
+//
+struct NetworkDHCPFailureEvent
+{
+ uint32_t reason;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x601U,
+ kEventTypeId = 0x1U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkDHCPFailureEvent_array {
+ uint32_t num;
+ NetworkDHCPFailureEvent *buf;
+};
+
+
+} // namespace TelemetryNetworkTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
+#endif // _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_TRAIT_H_
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
new file mode 100644
index 0000000..ec6d437
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.cpp
@@ -0,0 +1,202 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp
+ * SOURCE PROTO: nest/trait/network/telemetry_network_wifi_trait.proto
+ *
+ */
+
+#include <nest/trait/network/TelemetryNetworkWifiTrait.h>
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkWifiTrait {
+
+using namespace ::nl::Weave::Profiles::DataManagement;
+
+//
+// Property Table
+//
+
+const TraitSchemaEngine::PropertyInfo PropertyMap[] = {
+};
+
+//
+// Supported version
+//
+const ConstSchemaVersionRange traitVersion = { .mMinVersion = 1, .mMaxVersion = 2 };
+
+//
+// Schema
+//
+
+const TraitSchemaEngine TraitSchema = {
+ {
+ kWeaveProfileId,
+ PropertyMap,
+ sizeof(PropertyMap) / sizeof(PropertyMap[0]),
+ 1,
+#if (TDM_EXTENSION_SUPPORT) || (TDM_VERSIONING_SUPPORT)
+ 2,
+#endif
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#if (TDM_EXTENSION_SUPPORT)
+ NULL,
+#endif
+#if (TDM_VERSIONING_SUPPORT)
+ &traitVersion,
+#endif
+ }
+};
+
+ //
+ // Events
+ //
+
+const nl::FieldDescriptor NetworkWiFiStatsEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, rssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 1
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, bcnRecvd), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, bcnLost), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 3
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, pktMcastRx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 4
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, pktUcastRx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 5
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, currRxRate), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 6
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, currTxRate), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 7
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, sleepTimePercent), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 8
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, bssid), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 9
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, freq), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 10
+ },
+
+ {
+ NULL, offsetof(NetworkWiFiStatsEvent, numOfAp), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 11
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWiFiStatsEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWiFiStatsEventFieldDescriptors)/sizeof(NetworkWiFiStatsEventFieldDescriptors[0]),
+ .mFields = NetworkWiFiStatsEventFieldDescriptors,
+ .mSize = sizeof(NetworkWiFiStatsEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWiFiStatsEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x1,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 2,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWiFiDeauthEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWiFiDeauthEvent, reason), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 1
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWiFiDeauthEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWiFiDeauthEventFieldDescriptors)/sizeof(NetworkWiFiDeauthEventFieldDescriptors[0]),
+ .mFields = NetworkWiFiDeauthEventFieldDescriptors,
+ .mSize = sizeof(NetworkWiFiDeauthEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWiFiDeauthEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x2,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 2,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWiFiInvalidKeyEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWiFiInvalidKeyEvent, reason), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 1
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWiFiInvalidKeyEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWiFiInvalidKeyEventFieldDescriptors)/sizeof(NetworkWiFiInvalidKeyEventFieldDescriptors[0]),
+ .mFields = NetworkWiFiInvalidKeyEventFieldDescriptors,
+ .mSize = sizeof(NetworkWiFiInvalidKeyEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWiFiInvalidKeyEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x3,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 2,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWiFiConnectionStatusChangeEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWiFiConnectionStatusChangeEvent, isConnected), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 1
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWiFiConnectionStatusChangeEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWiFiConnectionStatusChangeEventFieldDescriptors)/sizeof(NetworkWiFiConnectionStatusChangeEventFieldDescriptors[0]),
+ .mFields = NetworkWiFiConnectionStatusChangeEventFieldDescriptors,
+ .mSize = sizeof(NetworkWiFiConnectionStatusChangeEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWiFiConnectionStatusChangeEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x4,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 2,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+} // namespace TelemetryNetworkWifiTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h
new file mode 100644
index 0000000..278fece
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h
@@ -0,0 +1,134 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp.h
+ * SOURCE PROTO: nest/trait/network/telemetry_network_wifi_trait.proto
+ *
+ */
+#ifndef _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WIFI_TRAIT_H_
+#define _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WIFI_TRAIT_H_
+
+#include <Weave/Profiles/data-management/DataManagement.h>
+#include <Weave/Support/SerializationUtils.h>
+
+
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkWifiTrait {
+
+extern const nl::Weave::Profiles::DataManagement::TraitSchemaEngine TraitSchema;
+
+enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x602U
+};
+
+//
+// Events
+//
+struct NetworkWiFiStatsEvent
+{
+ int8_t rssi;
+ uint32_t bcnRecvd;
+ uint32_t bcnLost;
+ uint32_t pktMcastRx;
+ uint32_t pktUcastRx;
+ uint32_t currRxRate;
+ uint32_t currTxRate;
+ uint8_t sleepTimePercent;
+ uint16_t bssid;
+ uint32_t freq;
+ uint32_t numOfAp;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x602U,
+ kEventTypeId = 0x1U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWiFiStatsEvent_array {
+ uint32_t num;
+ NetworkWiFiStatsEvent *buf;
+};
+
+
+struct NetworkWiFiDeauthEvent
+{
+ uint32_t reason;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x602U,
+ kEventTypeId = 0x2U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWiFiDeauthEvent_array {
+ uint32_t num;
+ NetworkWiFiDeauthEvent *buf;
+};
+
+
+struct NetworkWiFiInvalidKeyEvent
+{
+ uint32_t reason;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x602U,
+ kEventTypeId = 0x3U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWiFiInvalidKeyEvent_array {
+ uint32_t num;
+ NetworkWiFiInvalidKeyEvent *buf;
+};
+
+
+struct NetworkWiFiConnectionStatusChangeEvent
+{
+ bool isConnected;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x602U,
+ kEventTypeId = 0x4U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWiFiConnectionStatusChangeEvent_array {
+ uint32_t num;
+ NetworkWiFiConnectionStatusChangeEvent *buf;
+};
+
+
+} // namespace TelemetryNetworkWifiTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
+#endif // _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WIFI_TRAIT_H_
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
new file mode 100644
index 0000000..73e83e5
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.cpp
@@ -0,0 +1,773 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp
+ * SOURCE PROTO: nest/trait/network/telemetry_network_wpan_trait.proto
+ *
+ */
+
+#include <nest/trait/network/TelemetryNetworkWpanTrait.h>
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkWpanTrait {
+
+using namespace ::nl::Weave::Profiles::DataManagement;
+
+//
+// Property Table
+//
+
+const TraitSchemaEngine::PropertyInfo PropertyMap[] = {
+};
+
+//
+// Supported version
+//
+const ConstSchemaVersionRange traitVersion = { .mMinVersion = 1, .mMaxVersion = 3 };
+
+//
+// Schema
+//
+
+const TraitSchemaEngine TraitSchema = {
+ {
+ kWeaveProfileId,
+ PropertyMap,
+ sizeof(PropertyMap) / sizeof(PropertyMap[0]),
+ 1,
+#if (TDM_EXTENSION_SUPPORT) || (TDM_VERSIONING_SUPPORT)
+ 2,
+#endif
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#if (TDM_EXTENSION_SUPPORT)
+ NULL,
+#endif
+#if (TDM_VERSIONING_SUPPORT)
+ &traitVersion,
+#endif
+ }
+};
+
+ //
+ // Events
+ //
+
+const nl::FieldDescriptor WpanParentLinkEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(WpanParentLinkEvent, rssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 1
+ },
+
+ {
+ NULL, offsetof(WpanParentLinkEvent, unicastCcaThresholdFailures), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 2
+ },
+
+ {
+ NULL, offsetof(WpanParentLinkEvent, unicastMacRetryCount), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 3
+ },
+
+};
+
+const nl::SchemaFieldDescriptor WpanParentLinkEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(WpanParentLinkEventFieldDescriptors)/sizeof(WpanParentLinkEventFieldDescriptors[0]),
+ .mFields = WpanParentLinkEventFieldDescriptors,
+ .mSize = sizeof(WpanParentLinkEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema WpanParentLinkEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x1,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWpanStatsEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, phyRx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 1
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, phyTx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 2
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macUnicastRx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 3
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macUnicastTx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 4
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macBroadcastRx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 5
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macBroadcastTx), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 6
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxAckReq), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 24
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxNoAckReq), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 25
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxAcked), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 26
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 27
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxDataPoll), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 28
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxBeacon), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 29
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxBeaconReq), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 30
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxOtherPkt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 31
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxRetry), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 32
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 33
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxDataPoll), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 34
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxBeacon), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 35
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxBeaconReq), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 36
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxOtherPkt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 37
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFilterWhitelist), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 38
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFilterDestAddr), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 39
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macTxFailCca), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 8
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailDecrypt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 12
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailNoFrame), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 20
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailUnknownNeighbor), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 21
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailInvalidSrcAddr), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 22
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailFcs), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 23
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macRxFailOther), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 40
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ipTxSuccess), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 41
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ipRxSuccess), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 42
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ipTxFailure), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 43
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ipRxFailure), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 44
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, nodeType), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 15
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, channel), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 16
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, radioTxPower), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 17
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, threadType), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 18
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ncpTxTotalTime), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 45
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, ncpRxTotalTime), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 46
+ },
+
+ {
+ NULL, offsetof(NetworkWpanStatsEvent, macCcaFailRate), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 47
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWpanStatsEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWpanStatsEventFieldDescriptors)/sizeof(NetworkWpanStatsEventFieldDescriptors[0]),
+ .mFields = NetworkWpanStatsEventFieldDescriptors,
+ .mSize = sizeof(NetworkWpanStatsEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWpanStatsEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x2,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWpanTopoMinimalEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, rloc16), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 1
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, routerId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 2
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, leaderRouterId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 3
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, parentAverageRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 4
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, parentLastRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 5
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, partitionId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 6
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, extAddress), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 7
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoMinimalEvent, instantRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 8
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWpanTopoMinimalEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWpanTopoMinimalEventFieldDescriptors)/sizeof(NetworkWpanTopoMinimalEventFieldDescriptors[0]),
+ .mFields = NetworkWpanTopoMinimalEventFieldDescriptors,
+ .mSize = sizeof(NetworkWpanTopoMinimalEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWpanTopoMinimalEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x3,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWpanTopoFullEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, rloc16), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 1
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, routerId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 2
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, leaderRouterId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 3
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, extAddress), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 15
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, leaderAddress), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 4
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, leaderWeight), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 5
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, leaderLocalWeight), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 6
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, networkData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 9
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, networkDataVersion), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 10
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, stableNetworkData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 11
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, stableNetworkDataVersion), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 12
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, preferredRouterId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 13
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, partitionId), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 14
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, deprecatedChildTable) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChildTableEntry_array, num), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeArray, 0), 7
+ },
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChildTableEntry::FieldSchema, offsetof(NetworkWpanTopoFullEvent, deprecatedChildTable) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChildTableEntry_array, buf), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 7
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, deprecatedNeighborTable) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NeighborTableEntry_array, num), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeArray, 0), 8
+ },
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NeighborTableEntry::FieldSchema, offsetof(NetworkWpanTopoFullEvent, deprecatedNeighborTable) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NeighborTableEntry_array, buf), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 8
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, childTableSize), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 16
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, neighborTableSize), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 17
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoFullEvent, instantRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 18
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWpanTopoFullEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWpanTopoFullEventFieldDescriptors)/sizeof(NetworkWpanTopoFullEventFieldDescriptors[0]),
+ .mFields = NetworkWpanTopoFullEventFieldDescriptors,
+ .mSize = sizeof(NetworkWpanTopoFullEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWpanTopoFullEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x4,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor TopoEntryEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(TopoEntryEvent, extAddress), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 1
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, rloc16), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 2
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, linkQualityIn), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 3
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, averageRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 4
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, age), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 5
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, rxOnWhenIdle), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 6
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, fullFunction), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 7
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, secureDataRequest), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 8
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, fullNetworkData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 9
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, lastRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 10
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, linkFrameCounter), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 11
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, mleFrameCounter), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 12
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, isChild), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 13
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, timeout), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 1), 14
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, networkDataVersion), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 1), 15
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, macFrameErrorRate), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 16
+ },
+
+ {
+ NULL, offsetof(TopoEntryEvent, ipMessageErrorRate), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 17
+ },
+
+};
+
+const nl::SchemaFieldDescriptor TopoEntryEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(TopoEntryEventFieldDescriptors)/sizeof(TopoEntryEventFieldDescriptors[0]),
+ .mFields = TopoEntryEventFieldDescriptors,
+ .mSize = sizeof(TopoEntryEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema TopoEntryEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x5,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor WpanChannelmonStatsEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(WpanChannelmonStatsEvent, channels) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChannelUtilization_array, num), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeArray, 0), 1
+ },
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChannelUtilization::FieldSchema, offsetof(WpanChannelmonStatsEvent, channels) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChannelUtilization_array, buf), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 1
+ },
+
+ {
+ NULL, offsetof(WpanChannelmonStatsEvent, samples), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+};
+
+const nl::SchemaFieldDescriptor WpanChannelmonStatsEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(WpanChannelmonStatsEventFieldDescriptors)/sizeof(WpanChannelmonStatsEventFieldDescriptors[0]),
+ .mFields = WpanChannelmonStatsEventFieldDescriptors,
+ .mSize = sizeof(WpanChannelmonStatsEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema WpanChannelmonStatsEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x6,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor WpanAntennaStatsEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(WpanAntennaStatsEvent, antennaStats) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::PerAntennaStats_array, num), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeArray, 0), 1
+ },
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::PerAntennaStats::FieldSchema, offsetof(WpanAntennaStatsEvent, antennaStats) + offsetof(Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::PerAntennaStats_array, buf), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 1
+ },
+
+ {
+ NULL, offsetof(WpanAntennaStatsEvent, antSwitchCnt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+};
+
+const nl::SchemaFieldDescriptor WpanAntennaStatsEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(WpanAntennaStatsEventFieldDescriptors)/sizeof(WpanAntennaStatsEventFieldDescriptors[0]),
+ .mFields = WpanAntennaStatsEventFieldDescriptors,
+ .mSize = sizeof(WpanAntennaStatsEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema WpanAntennaStatsEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x7,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+const nl::FieldDescriptor NetworkWpanTopoParentRespEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, rloc16), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 1
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, rssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 2
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, priority), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 3
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, extAddr), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 4
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, linkQuality3), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 5
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, linkQuality2), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 6
+ },
+
+ {
+ NULL, offsetof(NetworkWpanTopoParentRespEvent, linkQuality1), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 7
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NetworkWpanTopoParentRespEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NetworkWpanTopoParentRespEventFieldDescriptors)/sizeof(NetworkWpanTopoParentRespEventFieldDescriptors[0]),
+ .mFields = NetworkWpanTopoParentRespEventFieldDescriptors,
+ .mSize = sizeof(NetworkWpanTopoParentRespEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema NetworkWpanTopoParentRespEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x8,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 3,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+//
+// Event Structs
+//
+
+const nl::FieldDescriptor ChannelUtilizationFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(ChannelUtilization, channel), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 1
+ },
+
+ {
+ NULL, offsetof(ChannelUtilization, percentBusy), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 2
+ },
+
+};
+
+const nl::SchemaFieldDescriptor ChannelUtilization::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(ChannelUtilizationFieldDescriptors)/sizeof(ChannelUtilizationFieldDescriptors[0]),
+ .mFields = ChannelUtilizationFieldDescriptors,
+ .mSize = sizeof(ChannelUtilization)
+};
+
+
+const nl::FieldDescriptor PerAntennaStatsFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(PerAntennaStats, txSuccessCnt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 1
+ },
+
+ {
+ NULL, offsetof(PerAntennaStats, txFailCnt), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+ {
+ NULL, offsetof(PerAntennaStats, avgAckRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 3
+ },
+
+};
+
+const nl::SchemaFieldDescriptor PerAntennaStats::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(PerAntennaStatsFieldDescriptors)/sizeof(PerAntennaStatsFieldDescriptors[0]),
+ .mFields = PerAntennaStatsFieldDescriptors,
+ .mSize = sizeof(PerAntennaStats)
+};
+
+
+const nl::FieldDescriptor TopoEntryFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(TopoEntry, extAddress), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeByteString, 0), 1
+ },
+
+ {
+ NULL, offsetof(TopoEntry, rloc16), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt16, 0), 2
+ },
+
+ {
+ NULL, offsetof(TopoEntry, linkQualityIn), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 3
+ },
+
+ {
+ NULL, offsetof(TopoEntry, averageRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 4
+ },
+
+ {
+ NULL, offsetof(TopoEntry, age), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 5
+ },
+
+ {
+ NULL, offsetof(TopoEntry, rxOnWhenIdle), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 6
+ },
+
+ {
+ NULL, offsetof(TopoEntry, fullFunction), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 7
+ },
+
+ {
+ NULL, offsetof(TopoEntry, secureDataRequest), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 8
+ },
+
+ {
+ NULL, offsetof(TopoEntry, fullNetworkData), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 9
+ },
+
+ {
+ NULL, offsetof(TopoEntry, lastRssi), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt8, 0), 10
+ },
+
+};
+
+const nl::SchemaFieldDescriptor TopoEntry::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(TopoEntryFieldDescriptors)/sizeof(TopoEntryFieldDescriptors[0]),
+ .mFields = TopoEntryFieldDescriptors,
+ .mSize = sizeof(TopoEntry)
+};
+
+
+const nl::FieldDescriptor ChildTableEntryFieldDescriptors[] =
+{
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::TopoEntry::FieldSchema, offsetof(ChildTableEntry, topo), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 1
+ },
+
+ {
+ NULL, offsetof(ChildTableEntry, timeout), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+ {
+ NULL, offsetof(ChildTableEntry, networkDataVersion), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt8, 0), 3
+ },
+
+};
+
+const nl::SchemaFieldDescriptor ChildTableEntry::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(ChildTableEntryFieldDescriptors)/sizeof(ChildTableEntryFieldDescriptors[0]),
+ .mFields = ChildTableEntryFieldDescriptors,
+ .mSize = sizeof(ChildTableEntry)
+};
+
+
+const nl::FieldDescriptor NeighborTableEntryFieldDescriptors[] =
+{
+ {
+ &Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::TopoEntry::FieldSchema, offsetof(NeighborTableEntry, topo), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeStructure, 0), 1
+ },
+
+ {
+ NULL, offsetof(NeighborTableEntry, linkFrameCounter), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 2
+ },
+
+ {
+ NULL, offsetof(NeighborTableEntry, mleFrameCounter), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 3
+ },
+
+ {
+ NULL, offsetof(NeighborTableEntry, isChild), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeBoolean, 0), 4
+ },
+
+};
+
+const nl::SchemaFieldDescriptor NeighborTableEntry::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(NeighborTableEntryFieldDescriptors)/sizeof(NeighborTableEntryFieldDescriptors[0]),
+ .mFields = NeighborTableEntryFieldDescriptors,
+ .mSize = sizeof(NeighborTableEntry)
+};
+
+} // namespace TelemetryNetworkWpanTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
diff --git a/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h
new file mode 100644
index 0000000..6c5ce81
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h
@@ -0,0 +1,448 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp.h
+ * SOURCE PROTO: nest/trait/network/telemetry_network_wpan_trait.proto
+ *
+ */
+#ifndef _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WPAN_TRAIT_H_
+#define _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WPAN_TRAIT_H_
+
+#include <Weave/Profiles/data-management/DataManagement.h>
+#include <Weave/Support/SerializationUtils.h>
+
+
+
+namespace Schema {
+namespace Nest {
+namespace Trait {
+namespace Network {
+namespace TelemetryNetworkWpanTrait {
+
+extern const nl::Weave::Profiles::DataManagement::TraitSchemaEngine TraitSchema;
+
+enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U
+};
+
+//
+// Event Structs
+//
+
+struct ChannelUtilization
+{
+ uint8_t channel;
+ uint16_t percentBusy;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+};
+
+struct ChannelUtilization_array {
+ uint32_t num;
+ ChannelUtilization *buf;
+};
+
+struct PerAntennaStats
+{
+ uint32_t txSuccessCnt;
+ uint32_t txFailCnt;
+ int8_t avgAckRssi;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+};
+
+struct PerAntennaStats_array {
+ uint32_t num;
+ PerAntennaStats *buf;
+};
+
+struct TopoEntry
+{
+ nl::SerializedByteString extAddress;
+ uint16_t rloc16;
+ uint8_t linkQualityIn;
+ int8_t averageRssi;
+ uint32_t age;
+ bool rxOnWhenIdle;
+ bool fullFunction;
+ bool secureDataRequest;
+ bool fullNetworkData;
+ int8_t lastRssi;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+};
+
+struct TopoEntry_array {
+ uint32_t num;
+ TopoEntry *buf;
+};
+
+struct ChildTableEntry
+{
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::TopoEntry topo;
+ uint32_t timeout;
+ uint8_t networkDataVersion;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+};
+
+struct ChildTableEntry_array {
+ uint32_t num;
+ ChildTableEntry *buf;
+};
+
+struct NeighborTableEntry
+{
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::TopoEntry topo;
+ uint32_t linkFrameCounter;
+ uint32_t mleFrameCounter;
+ bool isChild;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+};
+
+struct NeighborTableEntry_array {
+ uint32_t num;
+ NeighborTableEntry *buf;
+};
+
+//
+// Events
+//
+struct WpanParentLinkEvent
+{
+ int8_t rssi;
+ uint16_t unicastCcaThresholdFailures;
+ uint16_t unicastMacRetryCount;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x1U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct WpanParentLinkEvent_array {
+ uint32_t num;
+ WpanParentLinkEvent *buf;
+};
+
+
+struct NetworkWpanStatsEvent
+{
+ int32_t phyRx;
+ int32_t phyTx;
+ int32_t macUnicastRx;
+ int32_t macUnicastTx;
+ int32_t macBroadcastRx;
+ int32_t macBroadcastTx;
+ int32_t macTxAckReq;
+ int32_t macTxNoAckReq;
+ int32_t macTxAcked;
+ int32_t macTxData;
+ int32_t macTxDataPoll;
+ int32_t macTxBeacon;
+ int32_t macTxBeaconReq;
+ int32_t macTxOtherPkt;
+ int32_t macTxRetry;
+ int32_t macRxData;
+ int32_t macRxDataPoll;
+ int32_t macRxBeacon;
+ int32_t macRxBeaconReq;
+ int32_t macRxOtherPkt;
+ int32_t macRxFilterWhitelist;
+ int32_t macRxFilterDestAddr;
+ int32_t macTxFailCca;
+ int32_t macRxFailDecrypt;
+ int32_t macRxFailNoFrame;
+ int32_t macRxFailUnknownNeighbor;
+ int32_t macRxFailInvalidSrcAddr;
+ int32_t macRxFailFcs;
+ int32_t macRxFailOther;
+ int32_t ipTxSuccess;
+ int32_t ipRxSuccess;
+ int32_t ipTxFailure;
+ int32_t ipRxFailure;
+ uint8_t nodeType;
+ uint8_t channel;
+ int8_t radioTxPower;
+ int32_t threadType;
+ uint32_t ncpTxTotalTime;
+ uint32_t ncpRxTotalTime;
+ uint16_t macCcaFailRate;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x2U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWpanStatsEvent_array {
+ uint32_t num;
+ NetworkWpanStatsEvent *buf;
+};
+
+
+struct NetworkWpanTopoMinimalEvent
+{
+ uint16_t rloc16;
+ uint8_t routerId;
+ uint8_t leaderRouterId;
+ int8_t parentAverageRssi;
+ int8_t parentLastRssi;
+ uint32_t partitionId;
+ nl::SerializedByteString extAddress;
+ int8_t instantRssi;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x3U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWpanTopoMinimalEvent_array {
+ uint32_t num;
+ NetworkWpanTopoMinimalEvent *buf;
+};
+
+
+struct NetworkWpanTopoFullEvent
+{
+ uint16_t rloc16;
+ uint8_t routerId;
+ uint8_t leaderRouterId;
+ nl::SerializedByteString extAddress;
+ nl::SerializedByteString leaderAddress;
+ uint8_t leaderWeight;
+ uint8_t leaderLocalWeight;
+ nl::SerializedByteString networkData;
+ uint8_t networkDataVersion;
+ nl::SerializedByteString stableNetworkData;
+ uint8_t stableNetworkDataVersion;
+ uint8_t preferredRouterId;
+ uint32_t partitionId;
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChildTableEntry_array deprecatedChildTable;
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::NeighborTableEntry_array deprecatedNeighborTable;
+ uint16_t childTableSize;
+ uint16_t neighborTableSize;
+ int8_t instantRssi;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x4U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWpanTopoFullEvent_array {
+ uint32_t num;
+ NetworkWpanTopoFullEvent *buf;
+};
+
+
+struct TopoEntryEvent
+{
+ nl::SerializedByteString extAddress;
+ uint16_t rloc16;
+ uint8_t linkQualityIn;
+ int8_t averageRssi;
+ uint32_t age;
+ bool rxOnWhenIdle;
+ bool fullFunction;
+ bool secureDataRequest;
+ bool fullNetworkData;
+ int8_t lastRssi;
+ uint32_t linkFrameCounter;
+ uint32_t mleFrameCounter;
+ bool isChild;
+ uint32_t timeout;
+ void SetTimeoutNull(void);
+ void SetTimeoutPresent(void);
+#if WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
+ bool IsTimeoutPresent(void);
+#endif
+ uint8_t networkDataVersion;
+ void SetNetworkDataVersionNull(void);
+ void SetNetworkDataVersionPresent(void);
+#if WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
+ bool IsNetworkDataVersionPresent(void);
+#endif
+ uint16_t macFrameErrorRate;
+ uint16_t ipMessageErrorRate;
+ uint8_t __nullified_fields__[2/8 + 1];
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x5U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct TopoEntryEvent_array {
+ uint32_t num;
+ TopoEntryEvent *buf;
+};
+
+inline void TopoEntryEvent::SetTimeoutNull(void)
+{
+ SET_FIELD_NULLIFIED_BIT(__nullified_fields__, 0);
+}
+
+inline void TopoEntryEvent::SetTimeoutPresent(void)
+{
+ CLEAR_FIELD_NULLIFIED_BIT(__nullified_fields__, 0);
+}
+
+#if WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
+inline bool TopoEntryEvent::IsTimeoutPresent(void)
+{
+ return (!GET_FIELD_NULLIFIED_BIT(__nullified_fields__, 0));
+}
+#endif
+inline void TopoEntryEvent::SetNetworkDataVersionNull(void)
+{
+ SET_FIELD_NULLIFIED_BIT(__nullified_fields__, 1);
+}
+
+inline void TopoEntryEvent::SetNetworkDataVersionPresent(void)
+{
+ CLEAR_FIELD_NULLIFIED_BIT(__nullified_fields__, 1);
+}
+
+#if WEAVE_CONFIG_SERIALIZATION_ENABLE_DESERIALIZATION
+inline bool TopoEntryEvent::IsNetworkDataVersionPresent(void)
+{
+ return (!GET_FIELD_NULLIFIED_BIT(__nullified_fields__, 1));
+}
+#endif
+
+struct WpanChannelmonStatsEvent
+{
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::ChannelUtilization_array channels;
+ uint32_t samples;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x6U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct WpanChannelmonStatsEvent_array {
+ uint32_t num;
+ WpanChannelmonStatsEvent *buf;
+};
+
+
+struct WpanAntennaStatsEvent
+{
+ Schema::Nest::Trait::Network::TelemetryNetworkWpanTrait::PerAntennaStats_array antennaStats;
+ uint32_t antSwitchCnt;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x7U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct WpanAntennaStatsEvent_array {
+ uint32_t num;
+ WpanAntennaStatsEvent *buf;
+};
+
+
+struct NetworkWpanTopoParentRespEvent
+{
+ uint16_t rloc16;
+ int8_t rssi;
+ int8_t priority;
+ nl::SerializedByteString extAddr;
+ uint8_t linkQuality3;
+ uint8_t linkQuality2;
+ uint8_t linkQuality1;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x235aU << 16) | 0x603U,
+ kEventTypeId = 0x8U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct NetworkWpanTopoParentRespEvent_array {
+ uint32_t num;
+ NetworkWpanTopoParentRespEvent *buf;
+};
+
+
+//
+// Enums
+//
+
+enum NodeType {
+ NODE_TYPE_ROUTER = 1,
+ NODE_TYPE_END = 2,
+ NODE_TYPE_SLEEPY_END = 3,
+ NODE_TYPE_MINIMAL_END = 4,
+ NODE_TYPE_OFFLINE = 5,
+ NODE_TYPE_DISABLED = 6,
+ NODE_TYPE_DETACHED = 7,
+ NODE_TYPE_NL_LURKER = 16,
+ NODE_TYPE_COMMISSIONER = 32,
+ NODE_TYPE_LEADER = 64,
+};
+
+enum ThreadType {
+ THREAD_TYPE_SILABS = 1,
+ THREAD_TYPE_OPENTHREAD = 2,
+};
+
+} // namespace TelemetryNetworkWpanTrait
+} // namespace Network
+} // namespace Trait
+} // namespace Nest
+} // namespace Schema
+#endif // _NEST_TRAIT_NETWORK__TELEMETRY_NETWORK_WPAN_TRAIT_H_
diff --git a/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp b/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
new file mode 100644
index 0000000..97a2774
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.cpp
@@ -0,0 +1,130 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp
+ * SOURCE PROTO: weave/trait/telemetry/tunnel/telemetry_tunnel_trait.proto
+ *
+ */
+
+#include <weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h>
+
+namespace Schema {
+namespace Weave {
+namespace Trait {
+namespace Telemetry {
+namespace Tunnel {
+namespace TelemetryTunnelTrait {
+
+using namespace ::nl::Weave::Profiles::DataManagement;
+
+//
+// Property Table
+//
+
+const TraitSchemaEngine::PropertyInfo PropertyMap[] = {
+};
+
+//
+// Schema
+//
+
+const TraitSchemaEngine TraitSchema = {
+ {
+ kWeaveProfileId,
+ PropertyMap,
+ sizeof(PropertyMap) / sizeof(PropertyMap[0]),
+ 1,
+#if (TDM_EXTENSION_SUPPORT) || (TDM_VERSIONING_SUPPORT)
+ 2,
+#endif
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+#if (TDM_EXTENSION_SUPPORT)
+ NULL,
+#endif
+#if (TDM_VERSIONING_SUPPORT)
+ NULL,
+#endif
+ }
+};
+
+ //
+ // Events
+ //
+
+const nl::FieldDescriptor TelemetryTunnelStatsEventFieldDescriptors[] =
+{
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, txBytesToService), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt64, 0), 1
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, rxBytesFromService), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt64, 0), 2
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, txMessagesToService), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 3
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, rxMessagesFromService), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 4
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, tunnelDownCount), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 5
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, tunnelConnAttemptCount), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 6
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, lastTimeTunnelWentDown), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt64, 0), 7
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, lastTimeTunnelEstablished), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt64, 0), 8
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, droppedMessagesCount), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeUInt32, 0), 9
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, currentTunnelState), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 10
+ },
+
+ {
+ NULL, offsetof(TelemetryTunnelStatsEvent, currentActiveTunnel), SET_TYPE_AND_FLAGS(nl::SerializedFieldTypeInt32, 0), 11
+ },
+
+};
+
+const nl::SchemaFieldDescriptor TelemetryTunnelStatsEvent::FieldSchema =
+{
+ .mNumFieldDescriptorElements = sizeof(TelemetryTunnelStatsEventFieldDescriptors)/sizeof(TelemetryTunnelStatsEventFieldDescriptors[0]),
+ .mFields = TelemetryTunnelStatsEventFieldDescriptors,
+ .mSize = sizeof(TelemetryTunnelStatsEvent)
+};
+const nl::Weave::Profiles::DataManagement::EventSchema TelemetryTunnelStatsEvent::Schema =
+{
+ .mProfileId = kWeaveProfileId,
+ .mStructureType = 0x1,
+ .mImportance = nl::Weave::Profiles::DataManagement::Debug,
+ .mDataSchemaVersion = 1,
+ .mMinCompatibleDataSchemaVersion = 1,
+};
+
+} // namespace TelemetryTunnelTrait
+} // namespace Tunnel
+} // namespace Telemetry
+} // namespace Trait
+} // namespace Weave
+} // namespace Schema
diff --git a/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h b/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h
new file mode 100644
index 0000000..20f137b
--- /dev/null
+++ b/src/adaptations/device-layer/trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h
@@ -0,0 +1,91 @@
+
+/**
+ * Copyright (c) 2019 Nest Labs, Inc.
+ * All rights reserved.
+ *
+ * THIS FILE IS GENERATED. DO NOT MODIFY.
+ *
+ * SOURCE TEMPLATE: trait.cpp.h
+ * SOURCE PROTO: weave/trait/telemetry/tunnel/telemetry_tunnel_trait.proto
+ *
+ */
+#ifndef _WEAVE_TRAIT_TELEMETRY_TUNNEL__TELEMETRY_TUNNEL_TRAIT_H_
+#define _WEAVE_TRAIT_TELEMETRY_TUNNEL__TELEMETRY_TUNNEL_TRAIT_H_
+
+#include <Weave/Profiles/data-management/DataManagement.h>
+#include <Weave/Support/SerializationUtils.h>
+
+
+
+namespace Schema {
+namespace Weave {
+namespace Trait {
+namespace Telemetry {
+namespace Tunnel {
+namespace TelemetryTunnelTrait {
+
+extern const nl::Weave::Profiles::DataManagement::TraitSchemaEngine TraitSchema;
+
+enum {
+ kWeaveProfileId = (0x0U << 16) | 0x1701U
+};
+
+//
+// Events
+//
+struct TelemetryTunnelStatsEvent
+{
+ uint64_t txBytesToService;
+ uint64_t rxBytesFromService;
+ uint32_t txMessagesToService;
+ uint32_t rxMessagesFromService;
+ uint32_t tunnelDownCount;
+ uint32_t tunnelConnAttemptCount;
+ int64_t lastTimeTunnelWentDown;
+ int64_t lastTimeTunnelEstablished;
+ uint32_t droppedMessagesCount;
+ int32_t currentTunnelState;
+ int32_t currentActiveTunnel;
+
+ static const nl::SchemaFieldDescriptor FieldSchema;
+
+ // Statically-known Event Struct Attributes:
+ enum {
+ kWeaveProfileId = (0x0U << 16) | 0x1701U,
+ kEventTypeId = 0x1U
+ };
+
+ static const nl::Weave::Profiles::DataManagement::EventSchema Schema;
+};
+
+struct TelemetryTunnelStatsEvent_array {
+ uint32_t num;
+ TelemetryTunnelStatsEvent *buf;
+};
+
+
+//
+// Enums
+//
+
+enum TunnelType {
+ TUNNEL_TYPE_NONE = 1,
+ TUNNEL_TYPE_PRIMARY = 2,
+ TUNNEL_TYPE_BACKUP = 3,
+ TUNNEL_TYPE_SHORTCUT = 4,
+};
+
+enum TunnelState {
+ TUNNEL_STATE_NO_TUNNEL = 1,
+ TUNNEL_STATE_PRIMARY_ESTABLISHED = 2,
+ TUNNEL_STATE_BACKUP_ONLY_ESTABLISHED = 3,
+ TUNNEL_STATE_PRIMARY_AND_BACKUP_ESTABLISHED = 4,
+};
+
+} // namespace TelemetryTunnelTrait
+} // namespace Tunnel
+} // namespace Telemetry
+} // namespace Trait
+} // namespace Weave
+} // namespace Schema
+#endif // _WEAVE_TRAIT_TELEMETRY_TUNNEL__TELEMETRY_TUNNEL_TRAIT_H_
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
index 6802968..b6c5bf3 100644
--- a/src/include/Makefile.am
+++ b/src/include/Makefile.am
@@ -969,6 +969,7 @@
$(nl_public_WeaveDeviceLayer_source_dirstem)/ConfigurationManager.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/ConnectivityManager.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/GeneralUtils.h \
+$(nl_public_WeaveDeviceLayer_source_dirstem)/NetworkTelemetryManager.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/PlatformManager.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/ThreadStackManager.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/TimeSyncManager.h \
@@ -977,6 +978,10 @@
$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceError.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceEvent.h \
$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceLayer.h \
+$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkTrait.h \
+$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h \
+$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h \
+$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h \
$(NULL)
nl_public_WeaveDeviceLayer_internal_header_sources = \
diff --git a/src/include/Makefile.in b/src/include/Makefile.in
index 8388d2e..7a6b959 100644
--- a/src/include/Makefile.in
+++ b/src/include/Makefile.in
@@ -1346,6 +1346,7 @@
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/ConfigurationManager.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/ConnectivityManager.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/GeneralUtils.h \
+@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/NetworkTelemetryManager.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/PlatformManager.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/ThreadStackManager.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/TimeSyncManager.h \
@@ -1354,6 +1355,10 @@
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceError.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceEvent.h \
@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/WeaveDeviceLayer.h \
+@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkTrait.h \
+@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkWifiTrait.h \
+@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/nest/trait/network/TelemetryNetworkWpanTrait.h \
+@CONFIG_DEVICE_LAYER_TRUE@$(nl_public_WeaveDeviceLayer_source_dirstem)/../../../trait-support/weave/trait/telemetry/tunnel/TelemetryTunnelTrait.h \
@CONFIG_DEVICE_LAYER_TRUE@$(NULL)
@CONFIG_DEVICE_LAYER_TRUE@nl_public_WeaveDeviceLayer_internal_header_sources = \