diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h index 189e16463e..d04eb71e13 100644 --- a/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h +++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/ConnectivityManager.h @@ -99,6 +99,11 @@ class ConnectivityManager struct ThreadPollingConfig; +#if WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + // System managed network + WEAVE_ERROR ProvisionSystemManagedNetwork(void); +#endif // WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + // WiFi station methods WiFiStationMode GetWiFiStationMode(void); WEAVE_ERROR SetWiFiStationMode(WiFiStationMode val); @@ -255,6 +260,13 @@ namespace nl { namespace Weave { namespace DeviceLayer { +#if WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK +inline WEAVE_ERROR ConnectivityManager::ProvisionSystemManagedNetwork(void) +{ + return static_cast(this)->_ProvisionSystemManagedNetwork(); +} +#endif // WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + inline ConnectivityManager::WiFiStationMode ConnectivityManager::GetWiFiStationMode(void) { return static_cast(this)->_GetWiFiStationMode(); diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h index f1dcdcdbcd..01f40573db 100644 --- a/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h +++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/WeaveDeviceConfig.h @@ -576,6 +576,18 @@ #define WEAVE_DEVICE_CONFIG_THREAD_CONNECTIVITY_TIMEOUT 30000 #endif +// -------------------- Misc Network Configuration -------------------- + +/** + * WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + * + * Enable support for system managed network + */ +#ifndef WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK +#define WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK 0 +#endif + + // -------------------- Tunnel Configuration -------------------- /** diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/DeviceNetworkInfo.h b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/DeviceNetworkInfo.h index 1ea3fe9aeb..9d6edfb728 100644 --- a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/DeviceNetworkInfo.h +++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/DeviceNetworkInfo.h @@ -35,6 +35,7 @@ enum { kThreadNetworkId = 1, kWiFiStationNetworkId = 2, + kSystemManagedNetworkId = 3, }; class DeviceNetworkInfo diff --git a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericNetworkProvisioningServerImpl.ipp b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericNetworkProvisioningServerImpl.ipp index c5bed46d02..7951355e13 100644 --- a/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericNetworkProvisioningServerImpl.ipp +++ b/src/adaptations/device-layer/include/Weave/DeviceLayer/internal/GenericNetworkProvisioningServerImpl.ipp @@ -364,6 +364,19 @@ WEAVE_ERROR GenericNetworkProvisioningServerImpl::HandleAddUpdateNetw #endif // WEAVE_DEVICE_CONFIG_ENABLE_THREAD +#if WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + + case kNetworkType_SystemManaged: + + err = ConnectivityMgr().ProvisionSystemManagedNetwork(); + VerifyOrExit(err == WEAVE_NO_ERROR, SendStatusReport(kWeaveProfile_NetworkProvisioning, 0, err)); + + netId = kSystemManagedNetworkId; + + break; + +#endif // WEAVE_DEVICE_CONFIG_ENABLE_SYSTEM_MANAGED_NETWORK + default: WeaveLogProgress(DeviceLayer, "%sUnsupported network type: %d", sLogPrefix, netInfo.NetworkType); diff --git a/src/device-manager/python/openweave/WeaveDeviceMgr.py b/src/device-manager/python/openweave/WeaveDeviceMgr.py index 826d51274e..4461d7f78c 100644 --- a/src/device-manager/python/openweave/WeaveDeviceMgr.py +++ b/src/device-manager/python/openweave/WeaveDeviceMgr.py @@ -49,6 +49,7 @@ NetworkType_WiFi = 1 NetworkType_Thread = 2 +NetworkType_SystemManaged = 3 WiFiMode_AdHoc = 1 WiFiMode_Managed = 2 @@ -1301,6 +1302,8 @@ def NetworkTypeToString(val): return "WiFi" if (val == NetworkType_Thread): return "Thread" + if (val == NetworkType_SystemManaged): + return "SystemManaged" if (val != None): return "UNKNOWN (" + str(val)+ ")" return None @@ -1313,6 +1316,8 @@ def ParseNetworkType(val): return NetworkType_WiFi if (val == "thread"): return NetworkType_Thread + if (val == "system"): + return NetworkType_SystemManaged raise Exception("Invalid network type: " + str(val)) def WiFiModeToString(val): diff --git a/src/device-manager/python/weave-device-mgr.py b/src/device-manager/python/weave-device-mgr.py index 809e08a3f8..bdbe4b2642 100755 --- a/src/device-manager/python/weave-device-mgr.py +++ b/src/device-manager/python/weave-device-mgr.py @@ -238,6 +238,7 @@ def __init__(self, rendezvousAddr=None): 'passive-rendezvous', 'remote-passive-rendezvous', 'reconnect', + 'add-system-managed-network', 'scan-networks', 'add-wifi-network', 'add-thread-network', @@ -1027,6 +1028,33 @@ def do_close(self, line): except WeaveStack.WeaveStackException as ex: print(str(ex)) + def do_addsystemmanagednetwork(self, line): + """ + add-system-managed-network + + Provision a system managed network. + """ + + args = shlex.split(line) + + if (len(args) != 0): + print("Usage:") + self.do_help('add-system-managed-network') + return + + networkInfo = WeaveDeviceMgr.NetworkInfo( + networkType = WeaveDeviceMgr.NetworkType_SystemManaged) + + try: + addResult = self.devMgr.AddNetwork(networkInfo) + except WeaveStack.WeaveStackException as ex: + print(str(ex)) + return + + self.lastNetworkId = addResult + + print("Add system managed network complete (network id = " + str(addResult) + ")") + def do_enableconnectionmonitor(self, line): """ enable-connection-monitor [ ] diff --git a/src/lib/profiles/network-provisioning/NetworkProvisioning.h b/src/lib/profiles/network-provisioning/NetworkProvisioning.h index db31c8f413..821b792506 100644 --- a/src/lib/profiles/network-provisioning/NetworkProvisioning.h +++ b/src/lib/profiles/network-provisioning/NetworkProvisioning.h @@ -162,7 +162,8 @@ enum NetworkType kNetworkType_NotSpecified = -1, kNetworkType_WiFi = 1, - kNetworkType_Thread = 2 + kNetworkType_Thread = 2, + kNetworkType_SystemManaged = 3, }; /**