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 = \
