mirror of
				https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
				synced 2025-11-02 19:47:52 +00:00 
			
		
		
		
	Compare commits
	
		
			105 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bad137c0b3 | ||
| 
						 | 
					35108f0a5d | ||
| 
						 | 
					2eb0f54eab | ||
| 
						 | 
					609fe073f2 | ||
| 
						 | 
					a66049a600 | ||
| 
						 | 
					36d5f30a73 | ||
| 
						 | 
					db944d8509 | ||
| 
						 | 
					85bf7e8f98 | ||
| 
						 | 
					aefc799975 | ||
| 
						 | 
					0021d52624 | ||
| 
						 | 
					6416a76f88 | ||
| 
						 | 
					036f402824 | ||
| 
						 | 
					19be90a423 | ||
| 
						 | 
					8ce5b3ed89 | ||
| 
						 | 
					6647075961 | ||
| 
						 | 
					995b4a294b | ||
| 
						 | 
					88dac08eb1 | ||
| 
						 | 
					010251bffb | ||
| 
						 | 
					469c5fefb5 | ||
| 
						 | 
					511f3c1253 | ||
| 
						 | 
					e7c288683f | ||
| 
						 | 
					e54ec7ab01 | ||
| 
						 | 
					e1f84648c8 | ||
| 
						 | 
					b42a1f4318 | ||
| 
						 | 
					925246604b | ||
| 
						 | 
					32160fd699 | ||
| 
						 | 
					61b55491ed | ||
| 
						 | 
					7ae99a1b51 | ||
| 
						 | 
					877cf41249 | ||
| 
						 | 
					dc6e1a56b8 | ||
| 
						 | 
					f0f534fd70 | ||
| 
						 | 
					ae846588b2 | ||
| 
						 | 
					6a8d5478a0 | ||
| 
						 | 
					2f12768168 | ||
| 
						 | 
					b4d010e64f | ||
| 
						 | 
					460b1f78be | ||
| 
						 | 
					7e0a4bcddf | ||
| 
						 | 
					f4691fccd6 | ||
| 
						 | 
					b51cd52f80 | ||
| 
						 | 
					5a87904787 | ||
| 
						 | 
					ef31af48db | ||
| 
						 | 
					cea96f49f3 | ||
| 
						 | 
					b7ab0b973c | ||
| 
						 | 
					0ea56397b2 | ||
| 
						 | 
					bba5008753 | ||
| 
						 | 
					095c611b8a | ||
| 
						 | 
					cdc29b6b32 | ||
| 
						 | 
					4822a60f79 | ||
| 
						 | 
					6a22a9b2fb | ||
| 
						 | 
					455b61c6c3 | ||
| 
						 | 
					7fa1270066 | ||
| 
						 | 
					346476ef33 | ||
| 
						 | 
					b245061ed9 | ||
| 
						 | 
					8a58ccd636 | ||
| 
						 | 
					49050f774f | ||
| 
						 | 
					2cbe0b8b34 | ||
| 
						 | 
					ab0061b582 | ||
| 
						 | 
					a0f475a789 | ||
| 
						 | 
					9b52e7bf78 | ||
| 
						 | 
					cd4874ae18 | ||
| 
						 | 
					9659433e76 | ||
| 
						 | 
					9a79c0e103 | ||
| 
						 | 
					cc0fd8c009 | ||
| 
						 | 
					41570bb705 | ||
| 
						 | 
					932edc34c2 | ||
| 
						 | 
					34aba7191a | ||
| 
						 | 
					9b83f28ab3 | ||
| 
						 | 
					cced70dd20 | ||
| 
						 | 
					4a9ca9c949 | ||
| 
						 | 
					41f65673ca | ||
| 
						 | 
					33e004a3e0 | ||
| 
						 | 
					cabbebcb7a | ||
| 
						 | 
					40ac428bb5 | ||
| 
						 | 
					aead466770 | ||
| 
						 | 
					14cc34ef75 | ||
| 
						 | 
					01c75f8175 | ||
| 
						 | 
					2f32ec66d5 | ||
| 
						 | 
					eea9d9b044 | ||
| 
						 | 
					8cf2e9e402 | ||
| 
						 | 
					aeb949a884 | ||
| 
						 | 
					67c0ae9ffc | ||
| 
						 | 
					8ff3010190 | ||
| 
						 | 
					9cd260f1a9 | ||
| 
						 | 
					66035a22ad | ||
| 
						 | 
					1d6c356a1a | ||
| 
						 | 
					77b67ca3d2 | ||
| 
						 | 
					40c283ba89 | ||
| 
						 | 
					08b9b62f81 | ||
| 
						 | 
					8bc37f4a9a | ||
| 
						 | 
					b8cd98017d | ||
| 
						 | 
					0c89e6c624 | ||
| 
						 | 
					becf59dc0f | ||
| 
						 | 
					feff3d6530 | ||
| 
						 | 
					2e7a090722 | ||
| 
						 | 
					6ece024535 | ||
| 
						 | 
					4837b0e026 | ||
| 
						 | 
					0eca082a4d | ||
| 
						 | 
					db4672a9a2 | ||
| 
						 | 
					9e58a9d7b7 | ||
| 
						 | 
					f083c3488c | ||
| 
						 | 
					b28655a5bd | ||
| 
						 | 
					124b6054b5 | ||
| 
						 | 
					d79917d20f | ||
| 
						 | 
					c0bb71aed2 | ||
| 
						 | 
					5e32798159 | 
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
BSD 3-Clause License
 | 
			
		||||
#Release Testing
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2020, Telecom Infra Project
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,10 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-ext-cloud</artifactId>
 | 
			
		||||
@@ -16,108 +14,126 @@
 | 
			
		||||
<!-- 		<dependency> -->
 | 
			
		||||
<!-- 			<groupId>com.telecominfraproject.wlan</groupId> -->
 | 
			
		||||
<!-- 			<artifactId>opensync-ext-interface</artifactId> -->
 | 
			
		||||
<!-- 			<version>${tip-wlan-cloud.release.version}</version> -->
 | 
			
		||||
<!-- 			<version>0.0.1-SNAPSHOT</version> -->
 | 
			
		||||
<!-- 		</dependency> -->
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-gateway</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 	 
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <artifactId>base-client</artifactId>
 | 
			
		||||
            <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
            <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
            <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>equipment-gateway-models</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
     
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>customer-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>location-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>equipment-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>profile-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
      
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>portal-user-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>service-metric-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
      
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>service-metric-models</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>system-event-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>system-event-models</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
      
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>alarm-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>status-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>client-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>client-models</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>routing-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 
 | 
			
		||||
       <dependency>
 | 
			
		||||
        <artifactId>firmware-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>manufacturer-service-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>      
 | 
			
		||||
 
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <artifactId>cloud-event-dispatcher-interface</artifactId>
 | 
			
		||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
        <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
      </dependency>     
 | 
			
		||||
 | 
			
		||||
	</dependencies>
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -329,7 +329,9 @@ public class OpensyncCloudGatewayController {
 | 
			
		||||
        } else if (command instanceof CEGWNewChannelRequest) {
 | 
			
		||||
            CEGWNewChannelRequest request = (CEGWNewChannelRequest) command;
 | 
			
		||||
            Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
 | 
			
		||||
            String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels);
 | 
			
		||||
            Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels();
 | 
			
		||||
 | 
			
		||||
            String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels);
 | 
			
		||||
            response.setResultDetail(resultDetails);
 | 
			
		||||
 | 
			
		||||
        } else if (command instanceof CEGWFirmwareDownloadRequest) {
 | 
			
		||||
@@ -339,10 +341,9 @@ public class OpensyncCloudGatewayController {
 | 
			
		||||
            String filepath = dlRequest.getFilePath();
 | 
			
		||||
            String firmwareVersion = dlRequest.getFirmwareVersion();
 | 
			
		||||
            String username = dlRequest.getUsername();
 | 
			
		||||
            String validationCode = dlRequest.getValidationCode();
 | 
			
		||||
 | 
			
		||||
            String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
 | 
			
		||||
                    username, validationCode);
 | 
			
		||||
                    username);
 | 
			
		||||
 | 
			
		||||
            response.setResultDetail(resultDetails);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -66,6 +66,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.controller.Ope
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.utils.MqttStatsPublisher;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.models.ProfileType;
 | 
			
		||||
@@ -88,7 +89,6 @@ import sts.OpensyncStats.Client;
 | 
			
		||||
import sts.OpensyncStats.ClientReport;
 | 
			
		||||
import sts.OpensyncStats.EventReport;
 | 
			
		||||
import sts.OpensyncStats.EventReport.ClientAssocEvent;
 | 
			
		||||
import sts.OpensyncStats.EventType;
 | 
			
		||||
import sts.OpensyncStats.RadioBandType;
 | 
			
		||||
import sts.OpensyncStats.Report;
 | 
			
		||||
 | 
			
		||||
@@ -126,7 +126,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
			
		||||
    OpensyncCloudGatewayController gatewayController;
 | 
			
		||||
    @MockBean
 | 
			
		||||
    OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttProcessor;
 | 
			
		||||
    MqttStatsPublisher opensyncExternalIntegrationMqttProcessor;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud;
 | 
			
		||||
@@ -162,20 +162,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetCustomerEquipment() {
 | 
			
		||||
 | 
			
		||||
        Equipment equipment = new Equipment();
 | 
			
		||||
        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
			
		||||
 | 
			
		||||
        Mockito.when(
 | 
			
		||||
                equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
 | 
			
		||||
                .thenReturn(equipment);
 | 
			
		||||
        assertNotNull(opensyncExternalIntegrationCloud.getCustomerEquipment("Test_Client_21P10C68818122"));
 | 
			
		||||
        assertNull(opensyncExternalIntegrationCloud.getCustomerEquipment("Test_Client_21P10C68818133"));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testApConnected() {
 | 
			
		||||
 | 
			
		||||
@@ -476,16 +462,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testExtractApIdFromTopic() {
 | 
			
		||||
 | 
			
		||||
        String topic = "/ap/Test_Client_21P10C68818122/opensync";
 | 
			
		||||
 | 
			
		||||
        assertEquals("Test_Client_21P10C68818122",
 | 
			
		||||
                OpensyncExternalIntegrationMqttMessageProcessor.extractApIdFromTopic(topic));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testProcessMqttMessageStringReport() {
 | 
			
		||||
 | 
			
		||||
@@ -508,10 +484,10 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
 | 
			
		||||
        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
			
		||||
        com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
 | 
			
		||||
        clientInstance.setMacAddress(new MacAddress("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientInstance.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientInstance.setDetails(new ClientInfoDetails());
 | 
			
		||||
        com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
 | 
			
		||||
        clientInstance2.setMacAddress(new MacAddress("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientInstance2.setDetails(new ClientInfoDetails());
 | 
			
		||||
        Mockito.when(
 | 
			
		||||
                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
			
		||||
@@ -521,10 +497,10 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
			
		||||
 | 
			
		||||
        ClientSession clientSession = new ClientSession();
 | 
			
		||||
        clientSession.setMacAddress(new MacAddress("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientSession.setDetails(new ClientSessionDetails());
 | 
			
		||||
        ClientSession clientSession2 = new ClientSession();
 | 
			
		||||
        clientSession2.setMacAddress(new MacAddress("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientSession2.setDetails(new ClientSessionDetails());
 | 
			
		||||
        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
			
		||||
                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
			
		||||
@@ -612,7 +588,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
        equipment.setProfileId(1);
 | 
			
		||||
        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
			
		||||
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(apId)).thenReturn(equipment);
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.get(equipment.getId())).thenReturn(equipment);
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment);
 | 
			
		||||
        
 | 
			
		||||
@@ -644,7 +620,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
        Mockito.verify(session).getCustomerId();
 | 
			
		||||
        Mockito.verify(session).getEquipmentId();
 | 
			
		||||
        Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
 | 
			
		||||
        Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull(apId);
 | 
			
		||||
        Mockito.verify(equipmentServiceInterface).getOrNull(1L);
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS);
 | 
			
		||||
        Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS);
 | 
			
		||||
@@ -741,7 +717,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
        Mockito.verify(session).getEquipmentId();
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
 | 
			
		||||
        Mockito.verify(equipmentServiceInterface, Mockito.times(2)).getByInventoryIdOrNull(apId);
 | 
			
		||||
        Mockito.verify(equipmentServiceInterface, Mockito.times(1)).getByInventoryIdOrNull(apId);
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(statusServiceInterface, Mockito.times(3)).getOrNull(2, 1L, StatusDataType.PROTOCOL);
 | 
			
		||||
        Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus);
 | 
			
		||||
@@ -814,8 +790,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
 | 
			
		||||
    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        List<ClientAssocEvent> clientAssocEventList = new ArrayList<>();
 | 
			
		||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
			
		||||
                .getDefaultInstance().toBuilder();
 | 
			
		||||
        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
			
		||||
@@ -827,21 +801,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
        clientAssocBuilder.setInternalSc(1);
 | 
			
		||||
        clientAssocBuilder.setSsid("ssid-3");
 | 
			
		||||
        clientAssocBuilder.setStatus(1);
 | 
			
		||||
 | 
			
		||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder2 = EventReport.ClientAssocEvent
 | 
			
		||||
                .getDefaultInstance().toBuilder();
 | 
			
		||||
        clientAssocBuilder2.setAssocType(AssocType.ASSOC);
 | 
			
		||||
        clientAssocBuilder2.setBand(RadioBandType.BAND2G);
 | 
			
		||||
        clientAssocBuilder2.setRssi(-65);
 | 
			
		||||
        clientAssocBuilder2.setStaMac("7C:AB:60:E6:EA:4D");
 | 
			
		||||
        clientAssocBuilder2.setStaMacBytes(ByteString.copyFrom("7C:AB:60:E6:EA:4D".getBytes()));
 | 
			
		||||
        clientAssocBuilder2.setSessionId(1000L);
 | 
			
		||||
        clientAssocBuilder2.setInternalSc(1);
 | 
			
		||||
        clientAssocBuilder2.setSsid("ssid-1");
 | 
			
		||||
        clientAssocBuilder2.setStatus(1);
 | 
			
		||||
 | 
			
		||||
        clientAssocEventList.add(clientAssocBuilder.build());
 | 
			
		||||
        clientAssocEventList.add(clientAssocBuilder2.build());
 | 
			
		||||
        clientAssocBuilder.setTimestampMs(System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        List<EventReport> eventReportList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
@@ -851,7 +811,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
			
		||||
 | 
			
		||||
        clientSessionBuilder.setSessionId(1000L);
 | 
			
		||||
 | 
			
		||||
        clientSessionBuilder.addAllClientAssocEvent(clientAssocEventList);
 | 
			
		||||
        clientSessionBuilder.setClientAssocEvent(clientAssocBuilder.build());
 | 
			
		||||
        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
			
		||||
        clientSessionList.add(clientSessionBuilder.build());
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration;
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.utils;
 | 
			
		||||
 | 
			
		||||
import static org.junit.Assert.assertNotNull;
 | 
			
		||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
			
		||||
@@ -39,8 +39,13 @@ import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.customer.service.CustomerServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
			
		||||
import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.location.service.LocationServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationCloud;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.controller.OpensyncCloudGatewayController;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.routing.RoutingServiceInterface;
 | 
			
		||||
@@ -53,26 +58,28 @@ import com.telecominfraproject.wlan.status.models.Status;
 | 
			
		||||
import com.telecominfraproject.wlan.status.models.StatusDataType;
 | 
			
		||||
 | 
			
		||||
import sts.OpensyncStats.AssocType;
 | 
			
		||||
import sts.OpensyncStats.ChannelSwitchReason;
 | 
			
		||||
import sts.OpensyncStats.Client;
 | 
			
		||||
import sts.OpensyncStats.ClientReport;
 | 
			
		||||
import sts.OpensyncStats.DNSProbeMetric;
 | 
			
		||||
import sts.OpensyncStats.EventReport;
 | 
			
		||||
import sts.OpensyncStats.EventReport.ChannelSwitchEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.ClientAssocEvent;
 | 
			
		||||
import sts.OpensyncStats.NetworkProbe;
 | 
			
		||||
import sts.OpensyncStats.RADIUSMetrics;
 | 
			
		||||
import sts.OpensyncStats.RadioBandType;
 | 
			
		||||
import sts.OpensyncStats.Report;
 | 
			
		||||
import sts.OpensyncStats.StateUpDown;
 | 
			
		||||
import sts.OpensyncStats.VLANMetrics;
 | 
			
		||||
import sts.OpensyncStats.EventReport.ClientAssocEvent;
 | 
			
		||||
 | 
			
		||||
@RunWith(SpringRunner.class)
 | 
			
		||||
@ActiveProfiles(profiles = { "integration_test", })
 | 
			
		||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationMqttMessageProcessorTest.class)
 | 
			
		||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = MqttStatsPublisherTest.class)
 | 
			
		||||
@Import(value = { AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class,
 | 
			
		||||
        OpensyncExternalIntegrationMqttMessageProcessorTest.Config.class,
 | 
			
		||||
        MqttStatsPublisherTest.Config.class,
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
public class MqttStatsPublisherTest {
 | 
			
		||||
 | 
			
		||||
    @MockBean
 | 
			
		||||
    AlarmServiceInterface alarmServiceInterface;
 | 
			
		||||
@@ -98,9 +105,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
    FirmwareServiceInterface firmwareServiceInterface;
 | 
			
		||||
    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
			
		||||
    OpensyncCloudGatewayController gatewayController;
 | 
			
		||||
 | 
			
		||||
    @MockBean
 | 
			
		||||
    RealtimeEventPublisher realtimeEventPublisher;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttProcessor;
 | 
			
		||||
    MqttStatsPublisher opensyncExternalIntegrationMqttProcessor;
 | 
			
		||||
 | 
			
		||||
    MockitoSession mockito;
 | 
			
		||||
 | 
			
		||||
@@ -108,8 +116,8 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
    static class Config {
 | 
			
		||||
 | 
			
		||||
        @Bean
 | 
			
		||||
        public OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttMessageProcessor() {
 | 
			
		||||
            return new OpensyncExternalIntegrationMqttMessageProcessor();
 | 
			
		||||
        public MqttStatsPublisher mqttStatsPublisher() {
 | 
			
		||||
            return new MqttStatsPublisher();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
@@ -127,14 +135,12 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testExtractApIdFromTopic() {
 | 
			
		||||
 | 
			
		||||
        String topic = "/ap/Test_Client_21P10C68818122/opensync";
 | 
			
		||||
 | 
			
		||||
        assertEquals("Test_Client_21P10C68818122",
 | 
			
		||||
                OpensyncExternalIntegrationMqttMessageProcessor.extractApIdFromTopic(topic));
 | 
			
		||||
        assertEquals("Test_Client_21P10C68818122", MqttStatsPublisher.extractApIdFromTopic(topic));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -164,6 +170,20 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testProcessMqttMessageStringReport() {
 | 
			
		||||
        Equipment equipment = new Equipment();
 | 
			
		||||
 | 
			
		||||
        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
			
		||||
 | 
			
		||||
        equipment.setId(1L);
 | 
			
		||||
 | 
			
		||||
        Mockito.when(
 | 
			
		||||
                equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
 | 
			
		||||
                .thenReturn(equipment);
 | 
			
		||||
 | 
			
		||||
        equipment.setProfileId(0L);
 | 
			
		||||
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
 | 
			
		||||
        Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
 | 
			
		||||
 | 
			
		||||
        Report report = Report.newBuilder().setNodeID("21P10C68818122")
 | 
			
		||||
                .addAllClients(getOpensyncStatsClientReportsList())
 | 
			
		||||
@@ -190,10 +210,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
 | 
			
		||||
        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
			
		||||
        com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
 | 
			
		||||
        clientInstance.setMacAddress(new MacAddress("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientInstance.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientInstance.setDetails(new ClientInfoDetails());
 | 
			
		||||
        com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
 | 
			
		||||
        clientInstance2.setMacAddress(new MacAddress("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientInstance2.setDetails(new ClientInfoDetails());
 | 
			
		||||
        Mockito.when(
 | 
			
		||||
                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
			
		||||
@@ -203,10 +223,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
			
		||||
 | 
			
		||||
        ClientSession clientSession = new ClientSession();
 | 
			
		||||
        clientSession.setMacAddress(new MacAddress("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
 | 
			
		||||
        clientSession.setDetails(new ClientSessionDetails());
 | 
			
		||||
        ClientSession clientSession2 = new ClientSession();
 | 
			
		||||
        clientSession2.setMacAddress(new MacAddress("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
 | 
			
		||||
        clientSession2.setDetails(new ClientSessionDetails());
 | 
			
		||||
        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
			
		||||
                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
			
		||||
@@ -296,12 +316,8 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
        bssidList.add(activeBssid3);
 | 
			
		||||
        return bssidList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        List<ClientAssocEvent> clientAssocEventList = new ArrayList<>();
 | 
			
		||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
			
		||||
                .getDefaultInstance().toBuilder();
 | 
			
		||||
        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
			
		||||
@@ -313,21 +329,7 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
        clientAssocBuilder.setInternalSc(1);
 | 
			
		||||
        clientAssocBuilder.setSsid("ssid-3");
 | 
			
		||||
        clientAssocBuilder.setStatus(1);
 | 
			
		||||
 | 
			
		||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder2 = EventReport.ClientAssocEvent
 | 
			
		||||
                .getDefaultInstance().toBuilder();
 | 
			
		||||
        clientAssocBuilder2.setAssocType(AssocType.ASSOC);
 | 
			
		||||
        clientAssocBuilder2.setBand(RadioBandType.BAND2G);
 | 
			
		||||
        clientAssocBuilder2.setRssi(-65);
 | 
			
		||||
        clientAssocBuilder2.setStaMac("7C:AB:60:E6:EA:4D");
 | 
			
		||||
        clientAssocBuilder2.setStaMacBytes(ByteString.copyFrom("7C:AB:60:E6:EA:4D".getBytes()));
 | 
			
		||||
        clientAssocBuilder2.setSessionId(1000L);
 | 
			
		||||
        clientAssocBuilder2.setInternalSc(1);
 | 
			
		||||
        clientAssocBuilder2.setSsid("ssid-1");
 | 
			
		||||
        clientAssocBuilder2.setStatus(1);
 | 
			
		||||
 | 
			
		||||
        clientAssocEventList.add(clientAssocBuilder.build());
 | 
			
		||||
        clientAssocEventList.add(clientAssocBuilder2.build());
 | 
			
		||||
        clientAssocBuilder.setTimestampMs(System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        List<EventReport> eventReportList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
@@ -338,18 +340,25 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
			
		||||
 | 
			
		||||
        clientSessionBuilder.setSessionId(1000L);
 | 
			
		||||
 | 
			
		||||
        clientSessionBuilder.addAllClientAssocEvent(clientAssocEventList);
 | 
			
		||||
        clientSessionBuilder.setClientAssocEvent(clientAssocBuilder.build());
 | 
			
		||||
        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
			
		||||
        clientSessionList.add(clientSessionBuilder.build());
 | 
			
		||||
 | 
			
		||||
        sts.OpensyncStats.EventReport.ChannelSwitchEvent.Builder channelSwitchEventBuilder = sts.OpensyncStats.EventReport.ChannelSwitchEvent
 | 
			
		||||
                .getDefaultInstance().toBuilder();
 | 
			
		||||
        channelSwitchEventBuilder.setBand(RadioBandType.BAND5GL).setChannel(40)
 | 
			
		||||
                .setReason(ChannelSwitchReason.high_interference).setTimestampMs(System.currentTimeMillis());
 | 
			
		||||
 | 
			
		||||
        List<ChannelSwitchEvent> channelSwitchEventList = new ArrayList<>();
 | 
			
		||||
        channelSwitchEventList.add(channelSwitchEventBuilder.build());
 | 
			
		||||
 | 
			
		||||
        eventReportBuilder.addAllClientSession(clientSessionList);
 | 
			
		||||
        eventReportBuilder.addAllChannelSwitch(channelSwitchEventList);
 | 
			
		||||
 | 
			
		||||
        eventReportList.add(eventReportBuilder.build());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        return eventReportList;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private List<ClientReport> getOpensyncStatsClientReportsList() {
 | 
			
		||||
@@ -0,0 +1,382 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.utils;
 | 
			
		||||
 | 
			
		||||
import java.net.InetAddress;
 | 
			
		||||
import java.sql.Date;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Ignore;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.junit.runner.RunWith;
 | 
			
		||||
import org.mockito.Mockito;
 | 
			
		||||
import org.mockito.MockitoSession;
 | 
			
		||||
import org.mockito.quality.Strictness;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.boot.test.context.SpringBootTest;
 | 
			
		||||
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
 | 
			
		||||
import org.springframework.boot.test.mock.mockito.MockBean;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.context.annotation.Import;
 | 
			
		||||
import org.springframework.test.context.ActiveProfiles;
 | 
			
		||||
import org.springframework.test.context.junit4.SpringRunner;
 | 
			
		||||
 | 
			
		||||
import com.google.protobuf.ByteString;
 | 
			
		||||
import com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent;
 | 
			
		||||
import com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent;
 | 
			
		||||
import com.telecominfraproject.wlan.client.models.events.utils.WlanStatusCode;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationCloud;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
			
		||||
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpNakEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpOfferEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpRequestEvent;
 | 
			
		||||
import sts.OpensyncStats;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpAckEvent;
 | 
			
		||||
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpCommonData;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpDeclineEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpDiscoverEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpInformEvent;
 | 
			
		||||
import sts.OpensyncStats.EventReport.DhcpTransaction;
 | 
			
		||||
import sts.OpensyncStats.RadioBandType;
 | 
			
		||||
import sts.OpensyncStats.Report;
 | 
			
		||||
 | 
			
		||||
@RunWith(SpringRunner.class)
 | 
			
		||||
@ActiveProfiles(profiles = { "integration_test", })
 | 
			
		||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = RealtimeEventPublisherTest.class)
 | 
			
		||||
@Import(value = { OpensyncExternalIntegrationCloud.class, RealtimeEventPublisherTest.Config.class,
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
public class RealtimeEventPublisherTest {
 | 
			
		||||
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private CloudEventDispatcherInterface cloudEventDispatcherInterface;
 | 
			
		||||
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private EquipmentServiceInterface equipmentServiceInterface;
 | 
			
		||||
    
 | 
			
		||||
    @MockBean
 | 
			
		||||
    private ProfileServiceInterface  profileServiceInterface;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    RealtimeEventPublisher realtimeEventPublisher;
 | 
			
		||||
    MockitoSession mockito;
 | 
			
		||||
 | 
			
		||||
    @Configuration
 | 
			
		||||
    static class Config {
 | 
			
		||||
 | 
			
		||||
        @Bean
 | 
			
		||||
        public RealtimeEventPublisher realtimeEventPublisher() {
 | 
			
		||||
            return new RealtimeEventPublisher();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Before
 | 
			
		||||
    public void setUp() throws Exception {
 | 
			
		||||
 | 
			
		||||
        mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.STRICT_STUBS).startMocking();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @After
 | 
			
		||||
    public void tearDown() throws Exception {
 | 
			
		||||
        mockito.finishMocking();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishChannelHopEvents() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientConnectSuccessEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientDisconnectEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testPublishClientAuthSystemEvent() throws Exception {
 | 
			
		||||
 | 
			
		||||
        OpensyncStats.EventReport.ClientAuthEvent clientAuthEvent = OpensyncStats.EventReport.ClientAuthEvent
 | 
			
		||||
                .newBuilder().setBand(RadioBandType.BAND5GL).setSsid("TipWlan-cloud-3-radios")
 | 
			
		||||
                .setStaMac("c0:9a:d0:76:a9:69").setSessionId(Long.parseUnsignedLong("12377998144488079334"))
 | 
			
		||||
                .setAuthStatus(WlanStatusCode.WLAN_STATUS_SUCCESS.getId()).setTimestampMs(1610050309).build();
 | 
			
		||||
 | 
			
		||||
        realtimeEventPublisher.publishClientAuthSystemEvent(2, 1L, 0L, clientAuthEvent);
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(cloudEventDispatcherInterface, Mockito.times(1))
 | 
			
		||||
                .publishEvent(Mockito.any(ClientAuthEvent.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testPublishClientAssocEvent() throws Exception {
 | 
			
		||||
 | 
			
		||||
        OpensyncStats.EventReport.ClientAssocEvent clientAssocEvent = OpensyncStats.EventReport.ClientAssocEvent
 | 
			
		||||
                .newBuilder().setBand(RadioBandType.BAND5GL).setRssi(-37).setSsid("TipWlan-cloud-3-radios")
 | 
			
		||||
                .setStaMac("c0:9a:d0:76:a9:69").setSessionId(Long.parseUnsignedLong("12377998144488079334"))
 | 
			
		||||
                .setUsing11K(true).setUsing11V(true).setStatus(WlanStatusCode.WLAN_STATUS_SUCCESS.getId())
 | 
			
		||||
                .setTimestampMs(1610050309).build();
 | 
			
		||||
 | 
			
		||||
        realtimeEventPublisher.publishClientAssocEvent(2, 1L, 0L, clientAssocEvent);
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(cloudEventDispatcherInterface, Mockito.times(1))
 | 
			
		||||
                .publishEvent(Mockito.any(ClientAssocEvent.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientFailureEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientFirstDataEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientIdEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientIpEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Ignore
 | 
			
		||||
    public void testPublishClientTimeoutEvent() {
 | 
			
		||||
        // TODO: implement
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testPublishDhcpTransactionEvents() throws Exception {
 | 
			
		||||
        
 | 
			
		||||
        long timestamp = System.currentTimeMillis();
 | 
			
		||||
        List<DhcpTransaction> dhcpTransactionList = new ArrayList<>();
 | 
			
		||||
        DhcpAckEvent ackEvent = DhcpAckEvent.newBuilder()
 | 
			
		||||
                .setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                        .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
 | 
			
		||||
                        .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                        .setDeviceMacAddress("c0:9a:d0:76:a9:69")
 | 
			
		||||
                        .setXId(123456789)
 | 
			
		||||
                        .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build())
 | 
			
		||||
                .setGatewayIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setPrimaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.204").getAddress()))
 | 
			
		||||
                .setSecondaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.198").getAddress()))
 | 
			
		||||
                .setSubnetMask(ByteString.copyFrom(InetAddress.getByName("255.255.255.0").getAddress()))
 | 
			
		||||
                .setLeaseTime(172800).setTimeOffset(10).build();
 | 
			
		||||
        
 | 
			
		||||
        DhcpAckEvent ackEvent2 = DhcpAckEvent.newBuilder()
 | 
			
		||||
                .setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                        .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
 | 
			
		||||
                        .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                        .setDeviceMacAddress("f6:f0:65:99:e2:33")
 | 
			
		||||
                        .setXId(123456789)
 | 
			
		||||
                        .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build())
 | 
			
		||||
                .setGatewayIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setPrimaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.204").getAddress()))
 | 
			
		||||
                .setSecondaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.198").getAddress()))
 | 
			
		||||
                .setSubnetMask(ByteString.copyFrom(InetAddress.getByName("255.255.255.0").getAddress()))
 | 
			
		||||
                .setLeaseTime(172800).setTimeOffset(10).build();
 | 
			
		||||
        
 | 
			
		||||
        List<DhcpAckEvent> ackEventList = List.of(ackEvent, ackEvent2);
 | 
			
		||||
        
 | 
			
		||||
        DhcpNakEvent nakEvent1 = DhcpNakEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                        .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.129").getAddress()))
 | 
			
		||||
                        .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                        .setDeviceMacAddress("24:f5:a2:ef:2e:53")
 | 
			
		||||
                        .setXId(123456789)
 | 
			
		||||
                        .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
 | 
			
		||||
        
 | 
			
		||||
        List<DhcpNakEvent> nakEventList = List.of(nakEvent1);
 | 
			
		||||
        
 | 
			
		||||
        DhcpOfferEvent offerEvent1 = DhcpOfferEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("c0:9a:d0:76:a9:69")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
 | 
			
		||||
        
 | 
			
		||||
        DhcpOfferEvent offerEvent2 = DhcpOfferEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("f6:f0:65:99:e2:33")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
 | 
			
		||||
 | 
			
		||||
        List<DhcpOfferEvent> offerEventList = List.of(offerEvent1,offerEvent2);
 | 
			
		||||
        
 | 
			
		||||
        DhcpDiscoverEvent discoverEvent1 = DhcpDiscoverEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("c0:9a:d0:76:a9:69")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPhone").build();
 | 
			
		||||
        
 | 
			
		||||
        DhcpDiscoverEvent discoverEvent2 = DhcpDiscoverEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("f6:f0:65:99:e2:33")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPad").build();
 | 
			
		||||
 | 
			
		||||
        List<DhcpDiscoverEvent> discoverEventList = List.of(discoverEvent1,discoverEvent2);
 | 
			
		||||
        
 | 
			
		||||
        DhcpRequestEvent requestEvent1 = DhcpRequestEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("c0:9a:d0:76:a9:69")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPhone").build();
 | 
			
		||||
        
 | 
			
		||||
        DhcpRequestEvent requestEvent2 = DhcpRequestEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("f6:f0:65:99:e2:33")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPad").build();
 | 
			
		||||
 | 
			
		||||
        List<DhcpRequestEvent> requestEventList = List.of(requestEvent1,requestEvent2);
 | 
			
		||||
        
 | 
			
		||||
        DhcpInformEvent informEvent = DhcpInformEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("c0:9a:d0:76:a9:69")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).build();
 | 
			
		||||
        
 | 
			
		||||
        List<DhcpInformEvent> informEventList = List.of(informEvent);
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        DhcpDeclineEvent declineEvent = DhcpDeclineEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
 | 
			
		||||
                .setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.129").getAddress()))
 | 
			
		||||
                .setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
 | 
			
		||||
                .setDeviceMacAddress("24:f5:a2:ef:2e:53")
 | 
			
		||||
                .setXId(123456789)
 | 
			
		||||
                .setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).build();
 | 
			
		||||
 | 
			
		||||
        List<DhcpDeclineEvent> declineEventList = List.of(declineEvent);
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        DhcpTransaction dhcpTransaction = DhcpTransaction.newBuilder(DhcpTransaction.getDefaultInstance())
 | 
			
		||||
                .addAllDhcpAckEvent(ackEventList).addAllDhcpNakEvent(nakEventList).addAllDhcpOfferEvent(offerEventList)
 | 
			
		||||
                .addAllDhcpInformEvent(informEventList).addAllDhcpDeclineEvent(declineEventList)
 | 
			
		||||
                .addAllDhcpDiscoverEvent(discoverEventList).addAllDhcpRequestEvent(requestEventList).setXId(123456789)
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
        dhcpTransactionList.add(dhcpTransaction);
 | 
			
		||||
        
 | 
			
		||||
        realtimeEventPublisher.publishDhcpTransactionEvents(2, 1L, 0L, dhcpTransactionList);
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(cloudEventDispatcherInterface,Mockito.times(1)).publishEventsBulk(Mockito.anyList());
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testPublishSipCallEvents() throws Exception {
 | 
			
		||||
 | 
			
		||||
        OpensyncStats.VideoVoiceReport.Builder callStartVoiceReportBuilder = OpensyncStats.VideoVoiceReport.newBuilder()
 | 
			
		||||
                .setCallStart(getDefaultCallStart());
 | 
			
		||||
        OpensyncStats.VideoVoiceReport.Builder callReportGotPublishVoiceReportBuilder = OpensyncStats.VideoVoiceReport
 | 
			
		||||
                .newBuilder().setCallReport(getDefaultCallReport(OpensyncStats.CallReport.CallReportReason.GOT_PUBLISH,
 | 
			
		||||
                        121, 1028, 1316, 1888, 298, 2, 100, 200));
 | 
			
		||||
        OpensyncStats.VideoVoiceReport.Builder callReportRoamedToVoiceReportBuilder = OpensyncStats.VideoVoiceReport
 | 
			
		||||
                .newBuilder().setCallReport(getDefaultCallReport(OpensyncStats.CallReport.CallReportReason.ROAMED_TO,
 | 
			
		||||
                        123, 1020, 1116, 1345, 223, 0, 102, 203));
 | 
			
		||||
        OpensyncStats.VideoVoiceReport.Builder callReportRoamedFromVoiceReportBuilder = OpensyncStats.VideoVoiceReport
 | 
			
		||||
                .newBuilder().setCallReport(getDefaultCallReport(OpensyncStats.CallReport.CallReportReason.ROAMED_FROM,
 | 
			
		||||
                        122, 1029, 1300, 1234, 111, 3, 101, 201));
 | 
			
		||||
        OpensyncStats.VideoVoiceReport.Builder callStopVoiceReportBuilder = OpensyncStats.VideoVoiceReport.newBuilder()
 | 
			
		||||
                .setCallStop(getDefaultCallStop());
 | 
			
		||||
        // Create report with multiple voiceReports in one
 | 
			
		||||
        Report multipleVoiceReportsInOneReport = Report.newBuilder().addVideoVoiceReport(callStartVoiceReportBuilder)
 | 
			
		||||
                .addVideoVoiceReport(callReportGotPublishVoiceReportBuilder)
 | 
			
		||||
                .addVideoVoiceReport(callReportRoamedFromVoiceReportBuilder)
 | 
			
		||||
                .addVideoVoiceReport(callReportRoamedToVoiceReportBuilder)
 | 
			
		||||
                .addVideoVoiceReport(callStopVoiceReportBuilder).setNodeID("1").build();
 | 
			
		||||
 | 
			
		||||
        realtimeEventPublisher.publishSipCallEvents(1, 2L, 0L, multipleVoiceReportsInOneReport.getVideoVoiceReportList());
 | 
			
		||||
 | 
			
		||||
        Mockito.verify(cloudEventDispatcherInterface, Mockito.times(1)).publishEventsBulk(Mockito.anyList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private OpensyncStats.CallStart getDefaultCallStart() {
 | 
			
		||||
        OpensyncStats.CallStart.Builder callStartBuilder = OpensyncStats.CallStart.newBuilder();
 | 
			
		||||
        callStartBuilder.setBand(RadioBandType.BAND5G);
 | 
			
		||||
        callStartBuilder.setChannel(40);
 | 
			
		||||
        callStartBuilder.addCodecs("110 opus/48000/2");
 | 
			
		||||
        callStartBuilder.addCodecs("102 iLBC/8000");
 | 
			
		||||
        callStartBuilder.setClientMac(ByteString.copyFrom("C0:9A:D0:76:A9:69".getBytes()));
 | 
			
		||||
        callStartBuilder.setDeviceInfo("Test Device");
 | 
			
		||||
        callStartBuilder.setProviderDomain("skype");
 | 
			
		||||
        callStartBuilder.setSessionId(123L);
 | 
			
		||||
        callStartBuilder.setWifiSessionId(1234L);
 | 
			
		||||
 | 
			
		||||
        return callStartBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private OpensyncStats.CallStop getDefaultCallStop() {
 | 
			
		||||
        OpensyncStats.CallStop.Builder callStopBuilder = OpensyncStats.CallStop.newBuilder();
 | 
			
		||||
        callStopBuilder.setBand(RadioBandType.BAND5G);
 | 
			
		||||
        callStopBuilder.setChannel(40);
 | 
			
		||||
        callStopBuilder.addCodecs("110 opus/48000/2");
 | 
			
		||||
        callStopBuilder.addCodecs("102 iLBC/8000");
 | 
			
		||||
        callStopBuilder.setClientMac(ByteString.copyFrom("C0:9A:D0:76:A9:69".getBytes()));
 | 
			
		||||
        callStopBuilder.setCallDuration(1230);
 | 
			
		||||
        callStopBuilder.setProviderDomain("skype");
 | 
			
		||||
        callStopBuilder.setSessionId(123L);
 | 
			
		||||
        callStopBuilder.setWifiSessionId(1234L);
 | 
			
		||||
        callStopBuilder.setReason(OpensyncStats.CallStop.CallStopReason.BYE_OK);
 | 
			
		||||
        callStopBuilder.addStats(getRtpFlowStats(121, 1380, 1400, 3000, 119, 3, 205, 350));
 | 
			
		||||
 | 
			
		||||
        return callStopBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private OpensyncStats.RtpFlowStats getRtpFlowStats(int codec, int jitter, int latency, int totalPackets,
 | 
			
		||||
            int totalPacketsLost, int mos, int firstRtpSeq, int lastRtpSeq) {
 | 
			
		||||
        OpensyncStats.RtpFlowStats.Builder rtpFlowStatsBuilder = OpensyncStats.RtpFlowStats.newBuilder();
 | 
			
		||||
        rtpFlowStatsBuilder.setCodec(codec);
 | 
			
		||||
        rtpFlowStatsBuilder.setBlockCodecs(ByteString.copyFrom(new byte[] { (byte) 0xe6, 0x1 }));
 | 
			
		||||
        rtpFlowStatsBuilder.setDirection(OpensyncStats.RtpFlowStats.RtpFlowDirection.RTP_DOWNSTREAM);
 | 
			
		||||
        rtpFlowStatsBuilder.setRtpFlowType(OpensyncStats.RtpFlowStats.RtpFlowType.RTP_VOICE);
 | 
			
		||||
        rtpFlowStatsBuilder.setJitter(jitter);
 | 
			
		||||
        rtpFlowStatsBuilder.setLatency(latency);
 | 
			
		||||
        rtpFlowStatsBuilder.setTotalPacketsSent(totalPackets);
 | 
			
		||||
        rtpFlowStatsBuilder.setTotalPacketsLost(totalPacketsLost);
 | 
			
		||||
        rtpFlowStatsBuilder.setMosx100(mos);
 | 
			
		||||
        rtpFlowStatsBuilder.setRtpSeqFirst(firstRtpSeq);
 | 
			
		||||
        rtpFlowStatsBuilder.setRtpSeqLast(lastRtpSeq);
 | 
			
		||||
 | 
			
		||||
        return rtpFlowStatsBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private OpensyncStats.CallReport getDefaultCallReport(OpensyncStats.CallReport.CallReportReason reason, int codec,
 | 
			
		||||
            int jitter, int latency, int totalPackets, int totalPacketsLost, int mos, int firstRtpSeq, int lastRtpSeq) {
 | 
			
		||||
        OpensyncStats.CallReport.Builder callReportBuilder = OpensyncStats.CallReport.newBuilder();
 | 
			
		||||
        callReportBuilder.setBand(RadioBandType.BAND5G);
 | 
			
		||||
        callReportBuilder.setChannel(40);
 | 
			
		||||
        callReportBuilder.addCodecs("110 opus/48000/2");
 | 
			
		||||
        callReportBuilder.addCodecs("102 iLBC/8000");
 | 
			
		||||
        callReportBuilder.setClientMac(ByteString.copyFrom("C0:9A:D0:76:A9:69".getBytes()));
 | 
			
		||||
        callReportBuilder.setProviderDomain("skype");
 | 
			
		||||
        callReportBuilder.setSessionId(123L);
 | 
			
		||||
        callReportBuilder.setWifiSessionId(1234L);
 | 
			
		||||
        callReportBuilder.setReason(reason);
 | 
			
		||||
        callReportBuilder.addStats(
 | 
			
		||||
                getRtpFlowStats(codec, jitter, latency, totalPackets, totalPacketsLost, mos, firstRtpSeq, lastRtpSeq));
 | 
			
		||||
 | 
			
		||||
        return callReportBuilder.build();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-ext-interface</artifactId>
 | 
			
		||||
@@ -15,33 +13,33 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>base-models</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>tip-wlan-opensync-protobuf</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>equipment-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>profile-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>location-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>routing-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -51,4 +51,6 @@ public interface OpensyncExternalIntegrationInterface {
 | 
			
		||||
    void dhcpLeasedIpDbTableUpdate(List<Map<String,String>> dhcpAttributes, String apId, RowUpdateOperation rowUpdateOperation);
 | 
			
		||||
 | 
			
		||||
    void commandStateDbTableUpdate(List<Map<String,String>> commandStateAttributes, String apId, RowUpdateOperation rowUpdateOperation);
 | 
			
		||||
    
 | 
			
		||||
    void clearEquipmentStatus(String apId);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,7 @@ public interface OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
    void processClientBlocklistChange(String apId, List<MacAddress> blockList);
 | 
			
		||||
 | 
			
		||||
    String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username,
 | 
			
		||||
            String validationCode);
 | 
			
		||||
    String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username);
 | 
			
		||||
 | 
			
		||||
    String closeSession(String apId);
 | 
			
		||||
 | 
			
		||||
@@ -32,6 +31,6 @@ public interface OvsdbClientInterface {
 | 
			
		||||
    
 | 
			
		||||
    String processFactoryResetRequest(String apId);
 | 
			
		||||
    
 | 
			
		||||
    String processNewChannelsRequest(String apId, Map<RadioType,Integer> channelMap);
 | 
			
		||||
    String processNewChannelsRequest(String apId, Map<RadioType,Integer> backupChannelMap, Map<RadioType,Integer> primaryChannelMap);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,13 +46,6 @@ public class ConnectNodeInfo implements Cloneable {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(country, firmwareVersion, ifName, ifType, ipV4Address, lanIfName, lanIfType, lanIpV4Address,
 | 
			
		||||
                lanMacAddress, macAddress, managerAddr, model, mqttSettings, platformVersion, redirectorAddr, revision,
 | 
			
		||||
                serialNumber, skuNumber, versionMatrix, wifiRadioStates);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object obj) {
 | 
			
		||||
        if (this == obj) {
 | 
			
		||||
@@ -76,6 +69,13 @@ public class ConnectNodeInfo implements Cloneable {
 | 
			
		||||
                && Objects.equals(wifiRadioStates, other.wifiRadioStates);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(country, firmwareVersion, ifName, ifType, ipV4Address, lanIfName, lanIfType, lanIpV4Address,
 | 
			
		||||
                lanMacAddress, macAddress, managerAddr, model, mqttSettings, platformVersion, redirectorAddr, revision,
 | 
			
		||||
                serialNumber, skuNumber, versionMatrix, wifiRadioStates);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return "ConnectNodeInfo [mqttSettings=" + mqttSettings + ", versionMatrix=" + versionMatrix
 | 
			
		||||
@@ -87,5 +87,4 @@ public class ConnectNodeInfo implements Cloneable {
 | 
			
		||||
                + ", lanIfName=" + lanIfName + ", lanIfType=" + lanIfType + ", lanMacAddress=" + lanMacAddress + "]";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,30 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
 | 
			
		||||
public abstract class OpensyncAPBase extends BaseJsonModel {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -68509242520818671L;
 | 
			
		||||
 | 
			
		||||
    public static <T> T getSingleValueFromSet(Row row, String columnName) {
 | 
			
		||||
 | 
			
		||||
        Set<T> set = row != null ? row.getSetColumn(columnName) : null;
 | 
			
		||||
        T ret = (set != null) && !set.isEmpty() ? set.iterator().next() : null;
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPBase() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public <T> Set<T> getSet(Row row, String columnName) {
 | 
			
		||||
 | 
			
		||||
        Set<T> set = row != null ? row.getSetColumn(columnName) : null;
 | 
			
		||||
 | 
			
		||||
        return set;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -10,7 +10,6 @@ import com.telecominfraproject.wlan.core.model.entity.CountryCode;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.StateSetting;
 | 
			
		||||
@@ -24,10 +23,14 @@ import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration.Secure
 | 
			
		||||
import com.telecominfraproject.wlan.routing.models.EquipmentGatewayRecord;
 | 
			
		||||
import com.telecominfraproject.wlan.routing.models.EquipmentRoutingRecord;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPConfig extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPConfig extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 3917975477206236668L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Equipment customerEquipment;
 | 
			
		||||
    private OpensyncAPHotspot20Config hotspotConfig;
 | 
			
		||||
    private Profile apProfile;
 | 
			
		||||
@@ -40,8 +43,205 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
			
		||||
    private EquipmentGatewayRecord equipmentGateway;
 | 
			
		||||
    private List<Profile> captiveProfiles;
 | 
			
		||||
    private List<Profile> bonjourGatewayProfiles;
 | 
			
		||||
 | 
			
		||||
    private List<MacAddress> blockedClients;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPConfig clone() {
 | 
			
		||||
        OpensyncAPConfig ret = (OpensyncAPConfig) super.clone();
 | 
			
		||||
 | 
			
		||||
        if (customerEquipment != null) {
 | 
			
		||||
            ret.customerEquipment = customerEquipment.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (hotspotConfig != null) {
 | 
			
		||||
            ret.hotspotConfig = hotspotConfig.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (equipmentLocation != null) {
 | 
			
		||||
            ret.equipmentLocation = equipmentLocation.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (ssidProfile != null) {
 | 
			
		||||
            List<Profile> ssidList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : ssidProfile) {
 | 
			
		||||
                ssidList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.ssidProfile = ssidList;
 | 
			
		||||
        }
 | 
			
		||||
        if (metricsProfile != null) {
 | 
			
		||||
            List<Profile> metricsList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : metricsProfile) {
 | 
			
		||||
                metricsList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.metricsProfile = metricsList;
 | 
			
		||||
        }
 | 
			
		||||
        if (bonjourGatewayProfiles != null) {
 | 
			
		||||
            List<Profile> bonjourGatewayProfilesList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : bonjourGatewayProfiles) {
 | 
			
		||||
                bonjourGatewayProfilesList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.bonjourGatewayProfiles = bonjourGatewayProfilesList;
 | 
			
		||||
        }
 | 
			
		||||
        if (apProfile != null) {
 | 
			
		||||
            ret.apProfile = apProfile.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (rfProfile != null) {
 | 
			
		||||
            ret.rfProfile = rfProfile.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (equipmentRouting != null) {
 | 
			
		||||
            ret.equipmentRouting = equipmentRouting.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (equipmentGateway != null) {
 | 
			
		||||
            ret.equipmentGateway = equipmentGateway.clone();
 | 
			
		||||
        }
 | 
			
		||||
        if (radiusProfiles != null) {
 | 
			
		||||
            ret.radiusProfiles = new ArrayList<>();
 | 
			
		||||
            for (Profile radiusProfile : this.radiusProfiles) {
 | 
			
		||||
                ret.radiusProfiles.add(radiusProfile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (captiveProfiles != null) {
 | 
			
		||||
            ret.captiveProfiles = new ArrayList<>();
 | 
			
		||||
            for (Profile cpConfig : this.captiveProfiles) {
 | 
			
		||||
                ret.captiveProfiles.add(cpConfig);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (blockedClients != null) {
 | 
			
		||||
            ret.blockedClients = new ArrayList<MacAddress>();
 | 
			
		||||
            for (MacAddress blockedClient : this.blockedClients) {
 | 
			
		||||
                ret.blockedClients.add(blockedClient);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object obj) {
 | 
			
		||||
        if (this == obj) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (obj == null) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (getClass() != obj.getClass()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        OpensyncAPConfig other = (OpensyncAPConfig) obj;
 | 
			
		||||
        return Objects.equals(apProfile, other.apProfile) && Objects.equals(blockedClients, other.blockedClients)
 | 
			
		||||
                && Objects.equals(bonjourGatewayProfiles, other.bonjourGatewayProfiles)
 | 
			
		||||
                && Objects.equals(captiveProfiles, other.captiveProfiles)
 | 
			
		||||
                && Objects.equals(customerEquipment, other.customerEquipment)
 | 
			
		||||
                && Objects.equals(equipmentGateway, other.equipmentGateway)
 | 
			
		||||
                && Objects.equals(equipmentLocation, other.equipmentLocation)
 | 
			
		||||
                && Objects.equals(equipmentRouting, other.equipmentRouting)
 | 
			
		||||
                && Objects.equals(hotspotConfig, other.hotspotConfig)
 | 
			
		||||
                && Objects.equals(metricsProfile, other.metricsProfile)
 | 
			
		||||
                && Objects.equals(radiusProfiles, other.radiusProfiles) && Objects.equals(rfProfile, other.rfProfile)
 | 
			
		||||
                && Objects.equals(ssidProfile, other.ssidProfile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Profile getApProfile() {
 | 
			
		||||
        return apProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<MacAddress> getBlockedClients() {
 | 
			
		||||
        return blockedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getBonjourGatewayProfiles() {
 | 
			
		||||
        return bonjourGatewayProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getCaptiveProfiles() {
 | 
			
		||||
        return captiveProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountryCode() {
 | 
			
		||||
        return Location.getCountryCode(this.equipmentLocation).toString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Equipment getCustomerEquipment() {
 | 
			
		||||
        return customerEquipment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public EquipmentGatewayRecord getEquipmentGateway() {
 | 
			
		||||
        return equipmentGateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Location getEquipmentLocation() {
 | 
			
		||||
        return equipmentLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public EquipmentRoutingRecord getEquipmentRouting() {
 | 
			
		||||
        return equipmentRouting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPHotspot20Config getHotspotConfig() {
 | 
			
		||||
        return hotspotConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getMetricsProfiles() {
 | 
			
		||||
        return metricsProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getRadiusProfiles() {
 | 
			
		||||
        return radiusProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Profile getRfProfile() {
 | 
			
		||||
        return rfProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getSsidProfile() {
 | 
			
		||||
        return ssidProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(apProfile, blockedClients, bonjourGatewayProfiles, captiveProfiles, customerEquipment,
 | 
			
		||||
                equipmentGateway, equipmentLocation, equipmentRouting, hotspotConfig, metricsProfile, radiusProfiles,
 | 
			
		||||
                rfProfile, ssidProfile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setApProfile(Profile apProfile) {
 | 
			
		||||
        this.apProfile = apProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBlockedClients(List<MacAddress> blockedClients) {
 | 
			
		||||
        this.blockedClients = blockedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBonjourGatewayProfiles(List<Profile> bonjourGatewayProfiles) {
 | 
			
		||||
        this.bonjourGatewayProfiles = bonjourGatewayProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCaptiveProfiles(List<Profile> captiveProfiles) {
 | 
			
		||||
        this.captiveProfiles = captiveProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCustomerEquipment(Equipment customerEquipment) {
 | 
			
		||||
        this.customerEquipment = customerEquipment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentGateway(EquipmentGatewayRecord equipmentGateway) {
 | 
			
		||||
        this.equipmentGateway = equipmentGateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentLocation(Location equipmentLocation) {
 | 
			
		||||
        this.equipmentLocation = equipmentLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentRouting(EquipmentRoutingRecord equipmentRouting) {
 | 
			
		||||
        this.equipmentRouting = equipmentRouting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspotConfig(OpensyncAPHotspot20Config hotspotConfig) {
 | 
			
		||||
        this.hotspotConfig = hotspotConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMetricsProfiles(List<Profile> metricsProfileList) {
 | 
			
		||||
        metricsProfile = metricsProfileList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Handle Legacy Config Support
 | 
			
		||||
    public void setRadioConfig(OpensyncAPRadioConfig radioConfig) {
 | 
			
		||||
 | 
			
		||||
@@ -61,13 +261,21 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
			
		||||
            equipmentLocation = new Location();
 | 
			
		||||
            equipmentLocation.setId(1);
 | 
			
		||||
            equipmentLocation.setDetails(LocationDetails.createWithDefaults());
 | 
			
		||||
            ((LocationDetails) equipmentLocation.getDetails())
 | 
			
		||||
            equipmentLocation.getDetails()
 | 
			
		||||
                    .setCountryCode(CountryCode.getByName(radioConfig.getCountry().toLowerCase()));
 | 
			
		||||
            customerEquipment.setLocationId(equipmentLocation.getId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadiusProfiles(List<Profile> radiusProfiles) {
 | 
			
		||||
        this.radiusProfiles = radiusProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRfProfile(Profile rfProfile) {
 | 
			
		||||
        this.rfProfile = rfProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Handle Legacy Config Support
 | 
			
		||||
    public void setSsidConfigs(List<OpensyncAPSsidConfig> ssidConfigs) {
 | 
			
		||||
 | 
			
		||||
@@ -89,16 +297,18 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
			
		||||
            appliedRadios.add(ssidConfig.getRadioType());
 | 
			
		||||
            cfg.setAppliedRadios(appliedRadios);
 | 
			
		||||
            cfg.setSsid(ssidConfig.getSsid());
 | 
			
		||||
            if (ssidConfig.getEncryption().equals("WPA-PSK") && ssidConfig.getMode().equals("1"))
 | 
			
		||||
            if (ssidConfig.getEncryption().equals("WPA-PSK") && ssidConfig.getMode().equals("1")) {
 | 
			
		||||
                cfg.setSecureMode(SecureMode.wpaPSK);
 | 
			
		||||
            else
 | 
			
		||||
            } else {
 | 
			
		||||
                cfg.setSecureMode(SecureMode.wpa2PSK);
 | 
			
		||||
            }
 | 
			
		||||
            cfg.setBroadcastSsid(ssidConfig.isBroadcast() ? StateSetting.enabled : StateSetting.disabled);
 | 
			
		||||
 | 
			
		||||
            profile.setDetails(cfg);
 | 
			
		||||
            profile.setId(ssidProfileId);
 | 
			
		||||
            if (this.ssidProfile == null)
 | 
			
		||||
            if (this.ssidProfile == null) {
 | 
			
		||||
                this.ssidProfile = new ArrayList<Profile>();
 | 
			
		||||
            }
 | 
			
		||||
            this.ssidProfile.add(profile);
 | 
			
		||||
            apProfile.getChildProfileIds().add(ssidProfileId);
 | 
			
		||||
            ssidProfileId++;
 | 
			
		||||
@@ -111,206 +321,8 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public EquipmentGatewayRecord getEquipmentGateway() {
 | 
			
		||||
        return equipmentGateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentGateway(EquipmentGatewayRecord equipmentGateway) {
 | 
			
		||||
        this.equipmentGateway = equipmentGateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public EquipmentRoutingRecord getEquipmentRouting() {
 | 
			
		||||
        return equipmentRouting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentRouting(EquipmentRoutingRecord equipmentRouting) {
 | 
			
		||||
        this.equipmentRouting = equipmentRouting;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Equipment getCustomerEquipment() {
 | 
			
		||||
        return customerEquipment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCustomerEquipment(Equipment customerEquipment) {
 | 
			
		||||
        this.customerEquipment = customerEquipment;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPHotspot20Config getHotspotConfig() {
 | 
			
		||||
        return hotspotConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspotConfig(OpensyncAPHotspot20Config hotspotConfig) {
 | 
			
		||||
        this.hotspotConfig = hotspotConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Profile getApProfile() {
 | 
			
		||||
        return apProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setApProfile(Profile apProfile) {
 | 
			
		||||
        this.apProfile = apProfile;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Profile getRfProfile() {
 | 
			
		||||
    	return rfProfile;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setRfProfile(Profile rfProfile) {
 | 
			
		||||
    	this.rfProfile = rfProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getSsidProfile() {
 | 
			
		||||
        return ssidProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsidProfile(List<Profile> ssidProfile) {
 | 
			
		||||
        this.ssidProfile = ssidProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getBonjourGatewayProfiles() {
 | 
			
		||||
        return bonjourGatewayProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBonjourGatewayProfiles(List<Profile> bonjourGatewayProfiles) {
 | 
			
		||||
        this.bonjourGatewayProfiles = bonjourGatewayProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Location getEquipmentLocation() {
 | 
			
		||||
        return equipmentLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEquipmentLocation(Location equipmentLocation) {
 | 
			
		||||
        this.equipmentLocation = equipmentLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountryCode() {
 | 
			
		||||
        return Location.getCountryCode(this.equipmentLocation).toString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPConfig clone() {
 | 
			
		||||
        OpensyncAPConfig ret = (OpensyncAPConfig) super.clone();
 | 
			
		||||
 | 
			
		||||
        if (customerEquipment != null)
 | 
			
		||||
            ret.customerEquipment = customerEquipment.clone();
 | 
			
		||||
        if (hotspotConfig != null)
 | 
			
		||||
            ret.hotspotConfig = hotspotConfig.clone();
 | 
			
		||||
        if (equipmentLocation != null)
 | 
			
		||||
            ret.equipmentLocation = equipmentLocation.clone();
 | 
			
		||||
        if (ssidProfile != null) {
 | 
			
		||||
            List<Profile> ssidList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : ssidProfile) {
 | 
			
		||||
                ssidList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.ssidProfile = ssidList;
 | 
			
		||||
        }
 | 
			
		||||
        if (metricsProfile != null) {
 | 
			
		||||
            List<Profile> metricsList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : metricsProfile) {
 | 
			
		||||
                metricsList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.metricsProfile = metricsList;
 | 
			
		||||
        }
 | 
			
		||||
        if (bonjourGatewayProfiles != null) {
 | 
			
		||||
            List<Profile> bonjourGatewayProfilesList = new ArrayList<Profile>();
 | 
			
		||||
            for (Profile profile : bonjourGatewayProfiles) {
 | 
			
		||||
                bonjourGatewayProfilesList.add(profile.clone());
 | 
			
		||||
            }
 | 
			
		||||
            ret.bonjourGatewayProfiles = bonjourGatewayProfilesList;
 | 
			
		||||
        }
 | 
			
		||||
        if (apProfile != null)
 | 
			
		||||
            ret.apProfile = apProfile.clone();
 | 
			
		||||
        if (rfProfile != null)
 | 
			
		||||
        	ret.rfProfile = rfProfile.clone();
 | 
			
		||||
        if (equipmentRouting != null)
 | 
			
		||||
            ret.equipmentRouting = equipmentRouting.clone();
 | 
			
		||||
        if (equipmentGateway != null)
 | 
			
		||||
            ret.equipmentGateway = equipmentGateway.clone();
 | 
			
		||||
        if (radiusProfiles != null) {
 | 
			
		||||
            ret.radiusProfiles = new ArrayList<>();
 | 
			
		||||
            for (Profile radiusProfile : this.radiusProfiles) {
 | 
			
		||||
                ret.radiusProfiles.add(radiusProfile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (captiveProfiles != null) {
 | 
			
		||||
            ret.captiveProfiles = new ArrayList<>();
 | 
			
		||||
            for (Profile cpConfig : this.captiveProfiles) {
 | 
			
		||||
                ret.captiveProfiles.add(cpConfig);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (blockedClients != null) {
 | 
			
		||||
            ret.blockedClients = new ArrayList<MacAddress>();
 | 
			
		||||
            for (MacAddress blockedClient : this.blockedClients) {
 | 
			
		||||
                ret.blockedClients.add(blockedClient);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getRadiusProfiles() {
 | 
			
		||||
        return radiusProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadiusProfiles(List<Profile> radiusProfiles) {
 | 
			
		||||
        this.radiusProfiles = radiusProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Profile> getCaptiveProfiles() {
 | 
			
		||||
        return captiveProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCaptiveProfiles(List<Profile> captiveProfiles) {
 | 
			
		||||
        this.captiveProfiles = captiveProfiles;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<MacAddress> getBlockedClients() {
 | 
			
		||||
        return blockedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBlockedClients(List<MacAddress> blockedClients) {
 | 
			
		||||
        this.blockedClients = blockedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMetricsProfiles(List<Profile> metricsProfileList) {
 | 
			
		||||
        metricsProfile = metricsProfileList;       
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public List<Profile> getMetricsProfiles() {
 | 
			
		||||
        return metricsProfile;       
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(apProfile, blockedClients, bonjourGatewayProfiles, captiveProfiles, customerEquipment,
 | 
			
		||||
                equipmentGateway, equipmentLocation, equipmentRouting, hotspotConfig, metricsProfile,
 | 
			
		||||
                radiusProfiles, rfProfile, ssidProfile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object obj) {
 | 
			
		||||
        if (this == obj) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (!(obj instanceof OpensyncAPConfig)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        OpensyncAPConfig other = (OpensyncAPConfig) obj;
 | 
			
		||||
        return Objects.equals(apProfile, other.apProfile) && Objects.equals(blockedClients, other.blockedClients)
 | 
			
		||||
                && Objects.equals(bonjourGatewayProfiles, other.bonjourGatewayProfiles)
 | 
			
		||||
                && Objects.equals(captiveProfiles, other.captiveProfiles)
 | 
			
		||||
                && Objects.equals(customerEquipment, other.customerEquipment)
 | 
			
		||||
                && Objects.equals(equipmentGateway, other.equipmentGateway)
 | 
			
		||||
                && Objects.equals(equipmentLocation, other.equipmentLocation)
 | 
			
		||||
                && Objects.equals(equipmentRouting, other.equipmentRouting)
 | 
			
		||||
                && Objects.equals(hotspotConfig, other.hotspotConfig)
 | 
			
		||||
                && Objects.equals(metricsProfile, other.metricsProfile)
 | 
			
		||||
                && Objects.equals(radiusProfiles, other.radiusProfiles) && Objects.equals(rfProfile, other.rfProfile)
 | 
			
		||||
                && Objects.equals(ssidProfile, other.ssidProfile);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,10 +4,9 @@ import java.util.HashSet;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPHotspot20Config extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -8495473152523219578L;
 | 
			
		||||
 | 
			
		||||
@@ -20,40 +19,6 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
			
		||||
    private Set<Profile> hotspot20VenueSet;
 | 
			
		||||
    private Set<Profile> hotspot20ProviderSet;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    public Set<Profile> getHotspot20ProfileSet() {
 | 
			
		||||
        return hotspot20ProfileSet;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setHotspot20ProfileSet(Set<Profile> hotspot20ProfileSet) {
 | 
			
		||||
        this.hotspot20ProfileSet = hotspot20ProfileSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20OperatorSet() {
 | 
			
		||||
        return hotspot20OperatorSet;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setHotspot20OperatorSet(Set<Profile> hotspot20OperatorSet) {
 | 
			
		||||
        this.hotspot20OperatorSet = hotspot20OperatorSet;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Set<Profile> getHotspot20VenueSet() {
 | 
			
		||||
        return hotspot20VenueSet;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setHotspot20VenueSet(Set<Profile> hotspot20VenueSet) {
 | 
			
		||||
        this.hotspot20VenueSet = hotspot20VenueSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20ProviderSet() {
 | 
			
		||||
        return hotspot20ProviderSet;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setHotspot20ProviderSet(Set<Profile> hotspot20ProviderSet) {
 | 
			
		||||
        this.hotspot20ProviderSet = hotspot20ProviderSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPHotspot20Config clone() {
 | 
			
		||||
        OpensyncAPHotspot20Config ret = (OpensyncAPHotspot20Config) super.clone();
 | 
			
		||||
@@ -77,17 +42,15 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(hotspot20OperatorSet, hotspot20ProfileSet, hotspot20ProviderSet, hotspot20VenueSet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object obj) {
 | 
			
		||||
        if (this == obj) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (!(obj instanceof OpensyncAPHotspot20Config)) {
 | 
			
		||||
        if (obj == null) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (getClass() != obj.getClass()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        OpensyncAPHotspot20Config other = (OpensyncAPHotspot20Config) obj;
 | 
			
		||||
@@ -97,4 +60,41 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
			
		||||
                && Objects.equals(hotspot20VenueSet, other.hotspot20VenueSet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20OperatorSet() {
 | 
			
		||||
        return hotspot20OperatorSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20ProfileSet() {
 | 
			
		||||
        return hotspot20ProfileSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20ProviderSet() {
 | 
			
		||||
        return hotspot20ProviderSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Profile> getHotspot20VenueSet() {
 | 
			
		||||
        return hotspot20VenueSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(hotspot20OperatorSet, hotspot20ProfileSet, hotspot20ProviderSet, hotspot20VenueSet);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspot20OperatorSet(Set<Profile> hotspot20OperatorSet) {
 | 
			
		||||
        this.hotspot20OperatorSet = hotspot20OperatorSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspot20ProfileSet(Set<Profile> hotspot20ProfileSet) {
 | 
			
		||||
        this.hotspot20ProfileSet = hotspot20ProfileSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspot20ProviderSet(Set<Profile> hotspot20ProviderSet) {
 | 
			
		||||
        this.hotspot20ProviderSet = hotspot20ProviderSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHotspot20VenueSet(Set<Profile> hotspot20VenueSet) {
 | 
			
		||||
        this.hotspot20VenueSet = hotspot20VenueSet;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,14 +2,20 @@ package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPInetState extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPInetState extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 1707053648715030173L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String ifName;
 | 
			
		||||
    public Map<String, String> dhcpd;
 | 
			
		||||
    public String unpnpMode;
 | 
			
		||||
@@ -37,224 +43,344 @@ public class OpensyncAPInetState extends BaseJsonModel {
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
    public String greLocalInetAddr;
 | 
			
		||||
 | 
			
		||||
    public String greRemoteMacAddr;
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPInetState() {
 | 
			
		||||
		super();
 | 
			
		||||
        dns = new HashMap<>();
 | 
			
		||||
        dhcpc = new HashMap<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public String getIfName() {
 | 
			
		||||
		return ifName;
 | 
			
		||||
    public OpensyncAPInetState(Row row) {
 | 
			
		||||
        dns = new HashMap<>();
 | 
			
		||||
        dhcpc = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
        Map<String, Value> map = row.getColumns();
 | 
			
		||||
 | 
			
		||||
        if ((map.get("NAT") != null)
 | 
			
		||||
                && map.get("NAT").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setNat(row.getBooleanColumn("NAT"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("enabled") != null)
 | 
			
		||||
                && map.get("enabled").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setEnabled(row.getBooleanColumn("enabled"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("if_name") != null)
 | 
			
		||||
                && map.get("if_name").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setIfName(row.getStringColumn("if_name"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("if_type") != null)
 | 
			
		||||
                && map.get("if_type").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setIfType(row.getStringColumn("if_type"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setIfName(String ifName) {
 | 
			
		||||
		this.ifName = ifName;
 | 
			
		||||
        if (map.containsKey("dhcpc")) {
 | 
			
		||||
            this.setDhcpc(row.getMapColumn("dhcpc"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.containsKey("dhcpd")) {
 | 
			
		||||
            this.setDhcpd(row.getMapColumn("dhcpd"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.containsKey("dns")) {
 | 
			
		||||
            this.setDns(row.getMapColumn("dns"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("inet_addr") != null
 | 
			
		||||
                && map.get("inet_addr").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setInetAddr(row.getStringColumn("inet_addr"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.containsKey("netmask")) {
 | 
			
		||||
            this.setNetmask(getSingleValueFromSet(row, "netmask"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("vlan_id") != null
 | 
			
		||||
                && map.get("vlan_id").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVlanId(row.getIntegerColumn("vlan_id").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("gre_ifname") != null
 | 
			
		||||
                && map.get("gre_ifname").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setGreIfName(row.getStringColumn("gre_ifname"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("gre_remote_inet_addr") != null && map.get("gre_remote_inet_addr").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setGreRemoteInetAddr(row.getStringColumn("gre_remote_inet_addr"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("gre_local_inet_addr") != null && map.get("gre_local_inet_addr").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setGreLocalInetAddr(row.getStringColumn("gre_local_inet_addr"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("gre_remote_mac_addr") != null && map.get("gre_remote_mac_addr").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setGreRemoteMacAddr(row.getStringColumn("gre_remote_mac_addr"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public Map<String, String> getDhcpd() {
 | 
			
		||||
		return dhcpd;
 | 
			
		||||
        if ((map.get("ip_assign_scheme") != null) && map.get("ip_assign_scheme").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setIpAssignScheme(row.getStringColumn("ip_assign_scheme"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("network") != null)
 | 
			
		||||
                && map.get("network").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setNetwork(row.getBooleanColumn("network"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("hwaddr") != null)
 | 
			
		||||
                && map.get("hwaddr").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setHwAddr(row.getStringColumn("hwaddr"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("_version") != null)
 | 
			
		||||
                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_version"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("_uuid") != null)
 | 
			
		||||
                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_uuid"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public void setDhcpd(Map<String, String> dhcpd) {
 | 
			
		||||
		this.dhcpd = dhcpd;
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(Object obj) {
 | 
			
		||||
        if (this == obj) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getUnpnpMode() {
 | 
			
		||||
		return unpnpMode;
 | 
			
		||||
        if (obj == null) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setUnpnpMode(String unpnpMode) {
 | 
			
		||||
		this.unpnpMode = unpnpMode;
 | 
			
		||||
        if (getClass() != obj.getClass()) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getIfType() {
 | 
			
		||||
		return ifType;
 | 
			
		||||
        OpensyncAPInetState other = (OpensyncAPInetState) obj;
 | 
			
		||||
        if (!Objects.equals(_uuid, other._uuid)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setIfType(String ifType) {
 | 
			
		||||
		this.ifType = ifType;
 | 
			
		||||
        if (!Objects.equals(broadcast, other.broadcast)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getSoftwdsMacAddr() {
 | 
			
		||||
		return softwdsMacAddr;
 | 
			
		||||
        if (!Objects.equals(dhcpc, other.dhcpc)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setSoftwdsMacAddr(String softwdsMacAddr) {
 | 
			
		||||
		this.softwdsMacAddr = softwdsMacAddr;
 | 
			
		||||
        if (!Objects.equals(dhcpd, other.dhcpd)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public boolean isEnabled() {
 | 
			
		||||
		return enabled;
 | 
			
		||||
        if (!Objects.equals(dns, other.dns)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setEnabled(boolean enabled) {
 | 
			
		||||
		this.enabled = enabled;
 | 
			
		||||
        if (enabled != other.enabled) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public boolean isSofwdsWrap() {
 | 
			
		||||
		return sofwdsWrap;
 | 
			
		||||
        if (!Objects.equals(gateway, other.gateway)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setSofwdsWrap(boolean sofwdsWrap) {
 | 
			
		||||
		this.sofwdsWrap = sofwdsWrap;
 | 
			
		||||
        if (!Objects.equals(greIfName, other.greIfName)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public int getVlanId() {
 | 
			
		||||
		return vlanId;
 | 
			
		||||
        if (!Objects.equals(greLocalInetAddr, other.greLocalInetAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setVlanId(int vlanId) {
 | 
			
		||||
		this.vlanId = vlanId;
 | 
			
		||||
        if (!Objects.equals(greRemoteInetAddr, other.greRemoteInetAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getNetmask() {
 | 
			
		||||
		return netmask;
 | 
			
		||||
        if (!Objects.equals(hwAddr, other.hwAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setNetmask(String netmask) {
 | 
			
		||||
		this.netmask = netmask;
 | 
			
		||||
        if (!Objects.equals(ifName, other.ifName)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public boolean isNat() {
 | 
			
		||||
		return nat;
 | 
			
		||||
        if (!Objects.equals(ifType, other.ifType)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setNat(boolean nat) {
 | 
			
		||||
		this.nat = nat;
 | 
			
		||||
        if (!Objects.equals(ifUuid, other.ifUuid)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getGreRemoteInetAddr() {
 | 
			
		||||
		return greRemoteInetAddr;
 | 
			
		||||
        if (!Objects.equals(inetAddr, other.inetAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setGreRemoteInetAddr(String greRemoteInetAddr) {
 | 
			
		||||
		this.greRemoteInetAddr = greRemoteInetAddr;
 | 
			
		||||
        if (!Objects.equals(inetConfig, other.inetConfig)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getIfUuid() {
 | 
			
		||||
		return ifUuid;
 | 
			
		||||
        if (!Objects.equals(ipAssignScheme, other.ipAssignScheme)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setIfUuid(String ifUuid) {
 | 
			
		||||
		this.ifUuid = ifUuid;
 | 
			
		||||
        if (mtw != other.mtw) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getInetAddr() {
 | 
			
		||||
		return inetAddr;
 | 
			
		||||
        if (nat != other.nat) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setInetAddr(String inetAddr) {
 | 
			
		||||
		this.inetAddr = inetAddr;
 | 
			
		||||
        if (!Objects.equals(netmask, other.netmask)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getHwAddr() {
 | 
			
		||||
		return hwAddr;
 | 
			
		||||
        if (network != other.network) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setHwAddr(String hwAddr) {
 | 
			
		||||
		this.hwAddr = hwAddr;
 | 
			
		||||
        if (!Objects.equals(parentIfName, other.parentIfName)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public int getMtw() {
 | 
			
		||||
		return mtw;
 | 
			
		||||
        if (!Objects.equals(greRemoteMacAddr, other.greRemoteMacAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setMtw(int mtw) {
 | 
			
		||||
		this.mtw = mtw;
 | 
			
		||||
        if (!Objects.equals(softwdsMacAddr, other.softwdsMacAddr)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public boolean isNetwork() {
 | 
			
		||||
		return network;
 | 
			
		||||
        if (sofwdsWrap != other.sofwdsWrap) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setNetwork(boolean network) {
 | 
			
		||||
		this.network = network;
 | 
			
		||||
        if (!Objects.equals(unpnpMode, other.unpnpMode)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public Map<String, String> getDns() {
 | 
			
		||||
		return dns;
 | 
			
		||||
        if (!Objects.equals(version, other.version)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public void setDns(Map<String, String> dns) {
 | 
			
		||||
		this.dns = dns;
 | 
			
		||||
        if (vlanId != other.vlanId) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
	public String getParentIfName() {
 | 
			
		||||
		return parentIfName;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setParentIfName(String parentIfName) {
 | 
			
		||||
		this.parentIfName = parentIfName;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getGreIfName() {
 | 
			
		||||
		return greIfName;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setGreIfName(String greIfName) {
 | 
			
		||||
		this.greIfName = greIfName;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getBroadcast() {
 | 
			
		||||
		return broadcast;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setBroadcast(String broadcast) {
 | 
			
		||||
		this.broadcast = broadcast;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public Map<String, String> getDhcpc() {
 | 
			
		||||
		return dhcpc;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setDhcpc(Map<String, String> dhcpc) {
 | 
			
		||||
		this.dhcpc = dhcpc;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getGateway() {
 | 
			
		||||
		return gateway;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setGateway(String gateway) {
 | 
			
		||||
		this.gateway = gateway;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getIpAssignScheme() {
 | 
			
		||||
		return ipAssignScheme;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setIpAssignScheme(String ipAssignScheme) {
 | 
			
		||||
		this.ipAssignScheme = ipAssignScheme;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public String getInetConfig() {
 | 
			
		||||
		return inetConfig;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setInetConfig(String inetConfig) {
 | 
			
		||||
		this.inetConfig = inetConfig;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static long getSerialversionuid() {
 | 
			
		||||
		return serialVersionUID;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid get_uuid() {
 | 
			
		||||
        return _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public void set_uuid(Uuid _uuid) {
 | 
			
		||||
		this._uuid = _uuid;
 | 
			
		||||
    public String getBroadcast() {
 | 
			
		||||
        return broadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getDhcpc() {
 | 
			
		||||
        return dhcpc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getDhcpd() {
 | 
			
		||||
        return dhcpd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getDns() {
 | 
			
		||||
        return dns;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getGateway() {
 | 
			
		||||
        return gateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getGreIfName() {
 | 
			
		||||
        return greIfName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getGreLocalInetAddr() {
 | 
			
		||||
        return greLocalInetAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getGreRemoteInetAddr() {
 | 
			
		||||
        return greRemoteInetAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getGreRemoteMacAddr() {
 | 
			
		||||
        return this.greRemoteMacAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getHwAddr() {
 | 
			
		||||
        return hwAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfName() {
 | 
			
		||||
        return ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfType() {
 | 
			
		||||
        return ifType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfUuid() {
 | 
			
		||||
        return ifUuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getInetAddr() {
 | 
			
		||||
        return inetAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getInetConfig() {
 | 
			
		||||
        return inetConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIpAssignScheme() {
 | 
			
		||||
        return ipAssignScheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMtw() {
 | 
			
		||||
        return mtw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getNetmask() {
 | 
			
		||||
        return netmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParentIfName() {
 | 
			
		||||
        return parentIfName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSoftwdsMacAddr() {
 | 
			
		||||
        return softwdsMacAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUnpnpMode() {
 | 
			
		||||
        return unpnpMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid getVersion() {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public void setVersion(Uuid version) {
 | 
			
		||||
		this.version = version;
 | 
			
		||||
    public int getVlanId() {
 | 
			
		||||
        return vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int hashCode() {
 | 
			
		||||
        return Objects.hash(_uuid, broadcast, dhcpc, dhcpd, dns, enabled, gateway, greIfName, greLocalInetAddr, greRemoteInetAddr,
 | 
			
		||||
                hwAddr, ifName, ifType, ifUuid, inetAddr, inetConfig, ipAssignScheme, mtw, nat, netmask, network,
 | 
			
		||||
                parentIfName, greRemoteMacAddr, softwdsMacAddr, sofwdsWrap, unpnpMode, version, vlanId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnabled() {
 | 
			
		||||
        return enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNat() {
 | 
			
		||||
        return nat;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetwork() {
 | 
			
		||||
        return network;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSofwdsWrap() {
 | 
			
		||||
        return sofwdsWrap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBroadcast(String broadcast) {
 | 
			
		||||
        this.broadcast = broadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDhcpc(Map<String, String> dhcpc) {
 | 
			
		||||
        this.dhcpc = dhcpc;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDhcpd(Map<String, String> dhcpd) {
 | 
			
		||||
        this.dhcpd = dhcpd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDns(Map<String, String> dns) {
 | 
			
		||||
        this.dns = dns;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEnabled(boolean enabled) {
 | 
			
		||||
        this.enabled = enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGateway(String gateway) {
 | 
			
		||||
        this.gateway = gateway;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGreIfName(String greIfName) {
 | 
			
		||||
        this.greIfName = greIfName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGreLocalInetAddr(String greLocalInetAddr) {
 | 
			
		||||
@@ -262,184 +388,80 @@ public class OpensyncAPInetState extends BaseJsonModel {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public String getGreLocalInetAddr() {
 | 
			
		||||
		return greLocalInetAddr;
 | 
			
		||||
    public void setGreRemoteInetAddr(String greRemoteInetAddr) {
 | 
			
		||||
        this.greRemoteInetAddr = greRemoteInetAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGreRemoteMacAddr(String greRemoteMacAddr) {
 | 
			
		||||
        this.greRemoteMacAddr = greRemoteMacAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	public String getGreRemoteMacAddr(){
 | 
			
		||||
		return this.greRemoteMacAddr;
 | 
			
		||||
	}
 | 
			
		||||
	@Override
 | 
			
		||||
	public int hashCode() {
 | 
			
		||||
		final int prime = 31;
 | 
			
		||||
		int result = 1;
 | 
			
		||||
		result = prime * result + ((_uuid == null) ? 0 : _uuid.hashCode());
 | 
			
		||||
		result = prime * result + ((broadcast == null) ? 0 : broadcast.hashCode());
 | 
			
		||||
		result = prime * result + ((dhcpc == null) ? 0 : dhcpc.hashCode());
 | 
			
		||||
		result = prime * result + ((dhcpd == null) ? 0 : dhcpd.hashCode());
 | 
			
		||||
		result = prime * result + ((dns == null) ? 0 : dns.hashCode());
 | 
			
		||||
		result = prime * result + (enabled ? 1231 : 1237);
 | 
			
		||||
		result = prime * result + ((gateway == null) ? 0 : gateway.hashCode());
 | 
			
		||||
		result = prime * result + ((greIfName == null) ? 0 : greIfName.hashCode());
 | 
			
		||||
		result = prime * result + ((greLocalInetAddr == null) ? 0 : greLocalInetAddr.hashCode());
 | 
			
		||||
		result = prime * result + ((greRemoteInetAddr == null) ? 0 : greRemoteInetAddr.hashCode());
 | 
			
		||||
		result = prime * result + ((hwAddr == null) ? 0 : hwAddr.hashCode());
 | 
			
		||||
		result = prime * result + ((ifName == null) ? 0 : ifName.hashCode());
 | 
			
		||||
		result = prime * result + ((ifType == null) ? 0 : ifType.hashCode());
 | 
			
		||||
		result = prime * result + ((ifUuid == null) ? 0 : ifUuid.hashCode());
 | 
			
		||||
		result = prime * result + ((inetAddr == null) ? 0 : inetAddr.hashCode());
 | 
			
		||||
		result = prime * result + ((inetConfig == null) ? 0 : inetConfig.hashCode());
 | 
			
		||||
		result = prime * result + ((ipAssignScheme == null) ? 0 : ipAssignScheme.hashCode());
 | 
			
		||||
		result = prime * result + mtw;
 | 
			
		||||
		result = prime * result + (nat ? 1231 : 1237);
 | 
			
		||||
		result = prime * result + ((netmask == null) ? 0 : netmask.hashCode());
 | 
			
		||||
		result = prime * result + (network ? 1231 : 1237);
 | 
			
		||||
		result = prime * result + ((parentIfName == null) ? 0 : parentIfName.hashCode());
 | 
			
		||||
		result = prime * result + ((greRemoteMacAddr == null) ? 0 : greRemoteMacAddr.hashCode());
 | 
			
		||||
		result = prime * result + ((softwdsMacAddr == null) ? 0 : softwdsMacAddr.hashCode());
 | 
			
		||||
		result = prime * result + (sofwdsWrap ? 1231 : 1237);
 | 
			
		||||
		result = prime * result + ((unpnpMode == null) ? 0 : unpnpMode.hashCode());
 | 
			
		||||
		result = prime * result + ((version == null) ? 0 : version.hashCode());
 | 
			
		||||
		result = prime * result + vlanId;
 | 
			
		||||
		return result;
 | 
			
		||||
    public void setHwAddr(String hwAddr) {
 | 
			
		||||
        this.hwAddr = hwAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean equals(Object obj) {
 | 
			
		||||
		if (this == obj)
 | 
			
		||||
			return true;
 | 
			
		||||
		if (obj == null)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (getClass() != obj.getClass())
 | 
			
		||||
			return false;
 | 
			
		||||
		OpensyncAPInetState other = (OpensyncAPInetState) obj;
 | 
			
		||||
		if (_uuid == null) {
 | 
			
		||||
			if (other._uuid != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!_uuid.equals(other._uuid))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (broadcast == null) {
 | 
			
		||||
			if (other.broadcast != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!broadcast.equals(other.broadcast))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (dhcpc == null) {
 | 
			
		||||
			if (other.dhcpc != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!dhcpc.equals(other.dhcpc))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (dhcpd == null) {
 | 
			
		||||
			if (other.dhcpd != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!dhcpd.equals(other.dhcpd))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (dns == null) {
 | 
			
		||||
			if (other.dns != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!dns.equals(other.dns))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (enabled != other.enabled)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (gateway == null) {
 | 
			
		||||
			if (other.gateway != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!gateway.equals(other.gateway))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (greIfName == null) {
 | 
			
		||||
			if (other.greIfName != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!greIfName.equals(other.greIfName))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (greLocalInetAddr == null) {
 | 
			
		||||
			if (other.greLocalInetAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!greLocalInetAddr.equals(other.greLocalInetAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (greRemoteInetAddr == null) {
 | 
			
		||||
			if (other.greRemoteInetAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!greRemoteInetAddr.equals(other.greRemoteInetAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (hwAddr == null) {
 | 
			
		||||
			if (other.hwAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!hwAddr.equals(other.hwAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (ifName == null) {
 | 
			
		||||
			if (other.ifName != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!ifName.equals(other.ifName))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (ifType == null) {
 | 
			
		||||
			if (other.ifType != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!ifType.equals(other.ifType))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (ifUuid == null) {
 | 
			
		||||
			if (other.ifUuid != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!ifUuid.equals(other.ifUuid))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (inetAddr == null) {
 | 
			
		||||
			if (other.inetAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!inetAddr.equals(other.inetAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (inetConfig == null) {
 | 
			
		||||
			if (other.inetConfig != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!inetConfig.equals(other.inetConfig))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (ipAssignScheme == null) {
 | 
			
		||||
			if (other.ipAssignScheme != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!ipAssignScheme.equals(other.ipAssignScheme))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (mtw != other.mtw)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (nat != other.nat)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (netmask == null) {
 | 
			
		||||
			if (other.netmask != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!netmask.equals(other.netmask))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (network != other.network)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (parentIfName == null) {
 | 
			
		||||
			if (other.parentIfName != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!parentIfName.equals(other.parentIfName))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (greRemoteMacAddr == null) {
 | 
			
		||||
			if (other.greRemoteMacAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!greRemoteMacAddr.equals(other.greRemoteMacAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (softwdsMacAddr == null) {
 | 
			
		||||
			if (other.softwdsMacAddr != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!softwdsMacAddr.equals(other.softwdsMacAddr))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (sofwdsWrap != other.sofwdsWrap)
 | 
			
		||||
			return false;
 | 
			
		||||
		if (unpnpMode == null) {
 | 
			
		||||
			if (other.unpnpMode != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!unpnpMode.equals(other.unpnpMode))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (version == null) {
 | 
			
		||||
			if (other.version != null)
 | 
			
		||||
				return false;
 | 
			
		||||
		} else if (!version.equals(other.version))
 | 
			
		||||
			return false;
 | 
			
		||||
		if (vlanId != other.vlanId)
 | 
			
		||||
			return false;
 | 
			
		||||
		return true;
 | 
			
		||||
    public void setIfName(String ifName) {
 | 
			
		||||
        this.ifName = ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfType(String ifType) {
 | 
			
		||||
        this.ifType = ifType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfUuid(String ifUuid) {
 | 
			
		||||
        this.ifUuid = ifUuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setInetAddr(String inetAddr) {
 | 
			
		||||
        this.inetAddr = inetAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setInetConfig(String inetConfig) {
 | 
			
		||||
        this.inetConfig = inetConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIpAssignScheme(String ipAssignScheme) {
 | 
			
		||||
        this.ipAssignScheme = ipAssignScheme;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMtw(int mtw) {
 | 
			
		||||
        this.mtw = mtw;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setNat(boolean nat) {
 | 
			
		||||
        this.nat = nat;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setNetmask(String netmask) {
 | 
			
		||||
        this.netmask = netmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setNetwork(boolean network) {
 | 
			
		||||
        this.network = network;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentIfName(String parentIfName) {
 | 
			
		||||
        this.parentIfName = parentIfName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSoftwdsMacAddr(String softwdsMacAddr) {
 | 
			
		||||
        this.softwdsMacAddr = softwdsMacAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSofwdsWrap(boolean sofwdsWrap) {
 | 
			
		||||
        this.sofwdsWrap = sofwdsWrap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUnpnpMode(String unpnpMode) {
 | 
			
		||||
        this.unpnpMode = unpnpMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(Uuid version) {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVlanId(int vlanId) {
 | 
			
		||||
        this.vlanId = vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,6 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPRadioConfig extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPRadioConfig extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 5683558403622855381L;
 | 
			
		||||
 | 
			
		||||
@@ -11,40 +9,40 @@ public class OpensyncAPRadioConfig extends BaseJsonModel {
 | 
			
		||||
    private int radioChannel5LG;
 | 
			
		||||
    private int radioChannel5HG;
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel24G() {
 | 
			
		||||
        return radioChannel24G;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioChannel24G(int radioChannel24G) {
 | 
			
		||||
        this.radioChannel24G = radioChannel24G;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel5LG() {
 | 
			
		||||
        return radioChannel5LG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioChannel5LG(int radioChannel5LG) {
 | 
			
		||||
        this.radioChannel5LG = radioChannel5LG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel5HG() {
 | 
			
		||||
        return radioChannel5HG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioChannel5HG(int radioChannel5HG) {
 | 
			
		||||
        this.radioChannel5HG = radioChannel5HG;
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPRadioConfig clone() {
 | 
			
		||||
        return (OpensyncAPRadioConfig) super.clone();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountry() {
 | 
			
		||||
        return country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel24G() {
 | 
			
		||||
        return radioChannel24G;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel5HG() {
 | 
			
		||||
        return radioChannel5HG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRadioChannel5LG() {
 | 
			
		||||
        return radioChannel5LG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCountry(String country) {
 | 
			
		||||
        this.country = country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPRadioConfig clone() {
 | 
			
		||||
        return (OpensyncAPRadioConfig)super.clone();
 | 
			
		||||
    public void setRadioChannel24G(int radioChannel24G) {
 | 
			
		||||
        this.radioChannel24G = radioChannel24G;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioChannel5HG(int radioChannel5HG) {
 | 
			
		||||
        this.radioChannel5HG = radioChannel5HG;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioChannel5LG(int radioChannel5LG) {
 | 
			
		||||
        this.radioChannel5LG = radioChannel5LG;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,25 +3,28 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author mikehansen
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OpensyncAPRadioState extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPRadioState extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 5003143778489404219L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int temperatureControl;
 | 
			
		||||
    public boolean thermalDowngraded;
 | 
			
		||||
    public boolean dfsDemo;
 | 
			
		||||
@@ -48,10 +51,15 @@ public class OpensyncAPRadioState extends BaseJsonModel {
 | 
			
		||||
    public Map<String, String> hwParams;
 | 
			
		||||
    public RadioType freqBand;
 | 
			
		||||
    public int thermalIntegration;
 | 
			
		||||
 | 
			
		||||
    public Set<Uuid> vifStates;
 | 
			
		||||
 | 
			
		||||
    public String channelMode;
 | 
			
		||||
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPRadioState() {
 | 
			
		||||
        super();
 | 
			
		||||
        allowedChannels = new HashSet<>();
 | 
			
		||||
        hwConfig = new HashMap<>();
 | 
			
		||||
        channels = new HashMap<>();
 | 
			
		||||
@@ -59,252 +67,334 @@ public class OpensyncAPRadioState extends BaseJsonModel {
 | 
			
		||||
        vifStates = new HashSet<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String channelMode;
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
    public OpensyncAPRadioState(Row row) {
 | 
			
		||||
        this();
 | 
			
		||||
 | 
			
		||||
    public int getTemperatureControl() {
 | 
			
		||||
        return temperatureControl;
 | 
			
		||||
        Map<String, Value> map = row.getColumns();
 | 
			
		||||
 | 
			
		||||
        if ((map.get("mac") != null)
 | 
			
		||||
                && map.get("mac").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMac(row.getStringColumn("mac"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("channel") != null)
 | 
			
		||||
                && map.get("channel").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setChannel(row.getIntegerColumn("channel").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("freq_band") != null)
 | 
			
		||||
                && map.get("freq_band").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            String frequencyBand = row.getStringColumn("freq_band");
 | 
			
		||||
            switch (frequencyBand) {
 | 
			
		||||
            case "2.4G":
 | 
			
		||||
                this.setFreqBand(RadioType.is2dot4GHz);
 | 
			
		||||
                break;
 | 
			
		||||
            case "5G":
 | 
			
		||||
                this.setFreqBand(RadioType.is5GHz);
 | 
			
		||||
                break;
 | 
			
		||||
            case "5GL":
 | 
			
		||||
                this.setFreqBand(RadioType.is5GHzL);
 | 
			
		||||
                break;
 | 
			
		||||
            case "5GU":
 | 
			
		||||
                this.setFreqBand(RadioType.is5GHzU);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                this.setFreqBand(RadioType.UNSUPPORTED);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("if_name") != null)
 | 
			
		||||
                && map.get("if_name").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setIfName(row.getStringColumn("if_name"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("channel_mode") != null)
 | 
			
		||||
                && map.get("channel_mode").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setChannelMode(row.getStringColumn("channel_mode"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("country") != null)
 | 
			
		||||
                && map.get("country").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setCountry(row.getStringColumn("country").toUpperCase());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("enabled") != null)
 | 
			
		||||
                && map.get("enabled").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setEnabled(row.getBooleanColumn("enabled"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("ht_mode") != null)
 | 
			
		||||
                && map.get("ht_mode").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setHtMode(row.getStringColumn("ht_mode"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("tx_power") != null)
 | 
			
		||||
                && map.get("tx_power").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setTxPower(row.getIntegerColumn("tx_power").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("hw_config") != null)
 | 
			
		||||
                && map.get("hw_config").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Map.class)) {
 | 
			
		||||
            this.setHwConfig(row.getMapColumn("hw_config"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("_version") != null)
 | 
			
		||||
                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_version"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("_uuid") != null)
 | 
			
		||||
                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_uuid"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("allowed_channels") != null) {
 | 
			
		||||
 | 
			
		||||
            Set<Long> allowedChannels = getSet(row, "allowed_channels");
 | 
			
		||||
 | 
			
		||||
            Set<Integer> allowed = new HashSet<>();
 | 
			
		||||
            for (Long channel : allowedChannels) {
 | 
			
		||||
                allowed.add(channel.intValue());
 | 
			
		||||
            }
 | 
			
		||||
            this.setAllowedChannels(allowed);
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("channels") != null) {
 | 
			
		||||
 | 
			
		||||
            Map<String, String> channels = row.getMapColumn("channels");
 | 
			
		||||
            this.setChannels(channels);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setTemperatureControl(int temperatureControl) {
 | 
			
		||||
        this.temperatureControl = temperatureControl;
 | 
			
		||||
    }
 | 
			
		||||
        Set<Uuid> vifStates = row.getSetColumn("vif_states");
 | 
			
		||||
        this.setVifStates(vifStates);
 | 
			
		||||
 | 
			
		||||
    public boolean isThermalDowngraded() {
 | 
			
		||||
        return thermalDowngraded;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalDowngraded(boolean thermalDowngraded) {
 | 
			
		||||
        this.thermalDowngraded = thermalDowngraded;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDfsDemo() {
 | 
			
		||||
        return dfsDemo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDfsDemo(boolean dfsDemo) {
 | 
			
		||||
        this.dfsDemo = dfsDemo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfName() {
 | 
			
		||||
        return ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfName(String ifName) {
 | 
			
		||||
        this.ifName = ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Uuid> getVifStates() {
 | 
			
		||||
        return vifStates;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVifStates(Set<Uuid> vifStates) {
 | 
			
		||||
        this.vifStates = vifStates;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getBcnInt() {
 | 
			
		||||
        return bcnInt;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBcnInt(int bcnInt) {
 | 
			
		||||
        this.bcnInt = bcnInt;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalTxChainmask() {
 | 
			
		||||
        return thermalTxChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalTxChainmask(int thermalTxChainmask) {
 | 
			
		||||
        this.thermalTxChainmask = thermalTxChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Integer> getAllowedChannels() {
 | 
			
		||||
        return allowedChannels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAllowedChannels(Set<Integer> allowedChannels) {
 | 
			
		||||
        this.allowedChannels = allowedChannels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalShutdown() {
 | 
			
		||||
        return thermalShutdown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalShutdown(int thermalShutdown) {
 | 
			
		||||
        this.thermalShutdown = thermalShutdown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannelSync() {
 | 
			
		||||
        return channelSync;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannelSync(int channelSync) {
 | 
			
		||||
        this.channelSync = channelSync;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHwType() {
 | 
			
		||||
        return hwType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwType(int hwType) {
 | 
			
		||||
        this.hwType = hwType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTxChainmask() {
 | 
			
		||||
        return txChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTxChainmask(int txChainmask) {
 | 
			
		||||
        this.txChainmask = txChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRadar() {
 | 
			
		||||
        return radar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadar(String radar) {
 | 
			
		||||
        this.radar = radar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountry() {
 | 
			
		||||
        return country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCountry(String country) {
 | 
			
		||||
        this.country = country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getHwConfig() {
 | 
			
		||||
        return hwConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwConfig(Map<String, String> hwConfig) {
 | 
			
		||||
        this.hwConfig = hwConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannel() {
 | 
			
		||||
        return channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannel(int channel) {
 | 
			
		||||
        this.channel = channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTxPower() {
 | 
			
		||||
        return txPower;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTxPower(int txPower) {
 | 
			
		||||
        this.txPower = txPower;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getHtMode() {
 | 
			
		||||
        return htMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHtMode(String htMode) {
 | 
			
		||||
        this.htMode = htMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalDowngradeTemp() {
 | 
			
		||||
        return thermalDowngradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalDowngradeTemp(int thermalDowngradeTemp) {
 | 
			
		||||
        this.thermalDowngradeTemp = thermalDowngradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getHwMode() {
 | 
			
		||||
        return hwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwMode(String hwMode) {
 | 
			
		||||
        this.hwMode = hwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnabled() {
 | 
			
		||||
        return enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEnabled(boolean enabled) {
 | 
			
		||||
        this.enabled = enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getChannels() {
 | 
			
		||||
        return channels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannels(Map<String, String> channels) {
 | 
			
		||||
        this.channels = channels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalUpgradeTemp() {
 | 
			
		||||
        return thermalUpgradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalUpgradeTemp(int thermalUpgradeTemp) {
 | 
			
		||||
        this.thermalUpgradeTemp = thermalUpgradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getHwParams() {
 | 
			
		||||
        return hwParams;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwParams(Map<String, String> hwParams) {
 | 
			
		||||
        this.hwParams = hwParams;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public RadioType getFreqBand() {
 | 
			
		||||
        return freqBand;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFreqBand(RadioType freqBand) {
 | 
			
		||||
        this.freqBand = freqBand;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalIntegration() {
 | 
			
		||||
        return thermalIntegration;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalIntegration(int thermalIntegration) {
 | 
			
		||||
        this.thermalIntegration = thermalIntegration;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getChannelMode() {
 | 
			
		||||
        return channelMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannelMode(String channelMode) {
 | 
			
		||||
        this.channelMode = channelMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid get_uuid() {
 | 
			
		||||
        return _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    public Set<Integer> getAllowedChannels() {
 | 
			
		||||
        return allowedChannels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getBcnInt() {
 | 
			
		||||
        return bcnInt;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannel() {
 | 
			
		||||
        return channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getChannelMode() {
 | 
			
		||||
        return channelMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getChannels() {
 | 
			
		||||
        return channels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannelSync() {
 | 
			
		||||
        return channelSync;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCountry() {
 | 
			
		||||
        return country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public RadioType getFreqBand() {
 | 
			
		||||
        return freqBand;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getHtMode() {
 | 
			
		||||
        return htMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getHwConfig() {
 | 
			
		||||
        return hwConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getHwMode() {
 | 
			
		||||
        return hwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getHwParams() {
 | 
			
		||||
        return hwParams;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getHwType() {
 | 
			
		||||
        return hwType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfName() {
 | 
			
		||||
        return ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRadar() {
 | 
			
		||||
        return radar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTemperatureControl() {
 | 
			
		||||
        return temperatureControl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalDowngradeTemp() {
 | 
			
		||||
        return thermalDowngradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalIntegration() {
 | 
			
		||||
        return thermalIntegration;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalShutdown() {
 | 
			
		||||
        return thermalShutdown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalTxChainmask() {
 | 
			
		||||
        return thermalTxChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getThermalUpgradeTemp() {
 | 
			
		||||
        return thermalUpgradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTxChainmask() {
 | 
			
		||||
        return txChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTxPower() {
 | 
			
		||||
        return txPower;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid getVersion() {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<Uuid> getVifStates() {
 | 
			
		||||
        return vifStates;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDfsDemo() {
 | 
			
		||||
        return dfsDemo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnabled() {
 | 
			
		||||
        return enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isThermalDowngraded() {
 | 
			
		||||
        return thermalDowngraded;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAllowedChannels(Set<Integer> allowedChannels) {
 | 
			
		||||
        this.allowedChannels = allowedChannels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBcnInt(int bcnInt) {
 | 
			
		||||
        this.bcnInt = bcnInt;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannel(int channel) {
 | 
			
		||||
        this.channel = channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannelMode(String channelMode) {
 | 
			
		||||
        this.channelMode = channelMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannels(Map<String, String> channels) {
 | 
			
		||||
        this.channels = channels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannelSync(int channelSync) {
 | 
			
		||||
        this.channelSync = channelSync;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCountry(String country) {
 | 
			
		||||
        this.country = country;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDfsDemo(boolean dfsDemo) {
 | 
			
		||||
        this.dfsDemo = dfsDemo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEnabled(boolean enabled) {
 | 
			
		||||
        this.enabled = enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFreqBand(RadioType freqBand) {
 | 
			
		||||
        this.freqBand = freqBand;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHtMode(String htMode) {
 | 
			
		||||
        this.htMode = htMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwConfig(Map<String, String> hwConfig) {
 | 
			
		||||
        this.hwConfig = hwConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwMode(String hwMode) {
 | 
			
		||||
        this.hwMode = hwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwParams(Map<String, String> hwParams) {
 | 
			
		||||
        this.hwParams = hwParams;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHwType(int hwType) {
 | 
			
		||||
        this.hwType = hwType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfName(String ifName) {
 | 
			
		||||
        this.ifName = ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadar(String radar) {
 | 
			
		||||
        this.radar = radar;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTemperatureControl(int temperatureControl) {
 | 
			
		||||
        this.temperatureControl = temperatureControl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalDowngraded(boolean thermalDowngraded) {
 | 
			
		||||
        this.thermalDowngraded = thermalDowngraded;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalDowngradeTemp(int thermalDowngradeTemp) {
 | 
			
		||||
        this.thermalDowngradeTemp = thermalDowngradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalIntegration(int thermalIntegration) {
 | 
			
		||||
        this.thermalIntegration = thermalIntegration;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalShutdown(int thermalShutdown) {
 | 
			
		||||
        this.thermalShutdown = thermalShutdown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalTxChainmask(int thermalTxChainmask) {
 | 
			
		||||
        this.thermalTxChainmask = thermalTxChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setThermalUpgradeTemp(int thermalUpgradeTemp) {
 | 
			
		||||
        this.thermalUpgradeTemp = thermalUpgradeTemp;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTxChainmask(int txChainmask) {
 | 
			
		||||
        this.txChainmask = txChainmask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTxPower(int txPower) {
 | 
			
		||||
        this.txPower = txPower;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(Uuid version) {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVifStates(Set<Uuid> vifStates) {
 | 
			
		||||
        this.vifStates = vifStates;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,8 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPSsidConfig extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPSsidConfig extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -8540144450360788799L;
 | 
			
		||||
 | 
			
		||||
@@ -14,44 +13,29 @@ public class OpensyncAPSsidConfig extends BaseJsonModel {
 | 
			
		||||
    private String mode;
 | 
			
		||||
    private boolean broadcast;
 | 
			
		||||
 | 
			
		||||
    public RadioType getRadioType() {
 | 
			
		||||
        return radioType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioType(RadioType radioType) {
 | 
			
		||||
        this.radioType = radioType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsid() {
 | 
			
		||||
        return ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsid(String ssid) {
 | 
			
		||||
        this.ssid = ssid;
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPSsidConfig clone() {
 | 
			
		||||
        return (OpensyncAPSsidConfig) super.clone();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getEncryption() {
 | 
			
		||||
        return encryption;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEncryption(String encryption) {
 | 
			
		||||
        this.encryption = encryption;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getKey() {
 | 
			
		||||
        return key;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setKey(String key) {
 | 
			
		||||
        this.key = key;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMode() {
 | 
			
		||||
        return mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMode(String mode) {
 | 
			
		||||
        this.mode = mode;
 | 
			
		||||
    public RadioType getRadioType() {
 | 
			
		||||
        return radioType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsid() {
 | 
			
		||||
        return ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBroadcast() {
 | 
			
		||||
@@ -62,9 +46,24 @@ public class OpensyncAPSsidConfig extends BaseJsonModel {
 | 
			
		||||
        this.broadcast = broadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OpensyncAPSsidConfig clone() {
 | 
			
		||||
        return (OpensyncAPSsidConfig)super.clone();
 | 
			
		||||
    public void setEncryption(String encryption) {
 | 
			
		||||
        this.encryption = encryption;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setKey(String key) {
 | 
			
		||||
        this.key = key;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMode(String mode) {
 | 
			
		||||
        this.mode = mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRadioType(RadioType radioType) {
 | 
			
		||||
        this.radioType = radioType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsid(String ssid) {
 | 
			
		||||
        this.ssid = ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -6,13 +6,18 @@ import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
 | 
			
		||||
public class OpensyncAPVIFState extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAPVIFState extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -4916251246542770881L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String ifName;
 | 
			
		||||
    public int vifRadioIdx;
 | 
			
		||||
    public String parent;
 | 
			
		||||
@@ -24,8 +29,8 @@ public class OpensyncAPVIFState extends BaseJsonModel {
 | 
			
		||||
    public String ssid;
 | 
			
		||||
    public Map<String, String> security;
 | 
			
		||||
    public String macList;
 | 
			
		||||
    public List<Uuid> associatedClients;
 | 
			
		||||
 | 
			
		||||
    public List<Uuid> associatedClients;
 | 
			
		||||
    public boolean enabled;
 | 
			
		||||
    public int vlanId;
 | 
			
		||||
    public int btm;
 | 
			
		||||
@@ -40,232 +45,321 @@ public class OpensyncAPVIFState extends BaseJsonModel {
 | 
			
		||||
    public boolean dynamicBeacon;
 | 
			
		||||
    public int channel;
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
 | 
			
		||||
    public String getIfName() {
 | 
			
		||||
        return ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public OpensyncAPVIFState() {
 | 
			
		||||
        super();
 | 
			
		||||
        security = new HashMap<>();
 | 
			
		||||
        associatedClients = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfName(String ifName) {
 | 
			
		||||
        this.ifName = ifName;
 | 
			
		||||
    public OpensyncAPVIFState(Row row) {
 | 
			
		||||
        Map<String, Value> map = row.getColumns();
 | 
			
		||||
 | 
			
		||||
        if ((map.get("mac") != null)
 | 
			
		||||
                && map.get("mac").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMac(row.getStringColumn("mac"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("bridge") != null)
 | 
			
		||||
                && map.get("bridge").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setBridge(row.getStringColumn("bridge"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("btm") != null)
 | 
			
		||||
                && map.get("btm").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setBtm(row.getIntegerColumn("btm").intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public int getVifRadioIdx() {
 | 
			
		||||
        return vifRadioIdx;
 | 
			
		||||
        if ((map.get("channel") != null)
 | 
			
		||||
                && map.get("channel").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setChannel(row.getIntegerColumn("channel").intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setVifRadioIdx(int vifRadioIdx) {
 | 
			
		||||
        this.vifRadioIdx = vifRadioIdx;
 | 
			
		||||
        if ((map.get("enabled") != null)
 | 
			
		||||
                && map.get("enabled").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setEnabled(row.getBooleanColumn("enabled"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getParent() {
 | 
			
		||||
        return parent;
 | 
			
		||||
        Long ftPsk = getSingleValueFromSet(row, "ft_psk");
 | 
			
		||||
        if (ftPsk != null) {
 | 
			
		||||
            this.setFtPsk(ftPsk.intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setParent(String parent) {
 | 
			
		||||
        this.parent = parent;
 | 
			
		||||
        Long ftMobilityDomain = getSingleValueFromSet(row, "ft_mobility_domain");
 | 
			
		||||
        if (ftMobilityDomain != null) {
 | 
			
		||||
            this.setFtMobilityDomain(ftMobilityDomain.intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
        if ((map.get("group_rekey") != null)
 | 
			
		||||
                && map.get("group_rekey").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setGroupRekey(row.getIntegerColumn("group_rekey").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("if_name") != null)
 | 
			
		||||
                && map.get("if_name").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setIfName(row.getStringColumn("if_name"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setState(String state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
        if ((map.get("mode") != null)
 | 
			
		||||
                && map.get("mode").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMode(row.getStringColumn("mode"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
        if ((map.get("rrm") != null)
 | 
			
		||||
                && map.get("rrm").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setRrm(row.getIntegerColumn("rrm").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("ssid") != null)
 | 
			
		||||
                && map.get("ssid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setSsid(row.getStringColumn("ssid"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
        if ((map.get("ssid_broadcast") != null) && map.get("ssid_broadcast").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setSsidBroadcast(row.getStringColumn("ssid_broadcast"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("uapsd_enable") != null)
 | 
			
		||||
                && map.get("uapsd_enable").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setUapsdEnable(row.getBooleanColumn("uapsd_enable"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("vif_radio_idx") != null) && map.get("vif_radio_idx").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVifRadioIdx(row.getIntegerColumn("vif_radio_idx").intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public boolean isApBridge() {
 | 
			
		||||
        return apBridge;
 | 
			
		||||
        List<Uuid> associatedClientsList = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        Set<Uuid> clients = row.getSetColumn("associated_clients");
 | 
			
		||||
        associatedClientsList.addAll(clients);
 | 
			
		||||
 | 
			
		||||
        this.setAssociatedClients(associatedClientsList);
 | 
			
		||||
 | 
			
		||||
        if (map.get("security") != null) {
 | 
			
		||||
            this.setSecurity(row.getMapColumn("security"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setApBridge(boolean apBridge) {
 | 
			
		||||
        this.apBridge = apBridge;
 | 
			
		||||
        if ((map.get("_version") != null)
 | 
			
		||||
                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_version"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public boolean isUapsdEnable() {
 | 
			
		||||
        return uapsdEnable;
 | 
			
		||||
        if ((map.get("_uuid") != null)
 | 
			
		||||
                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_uuid"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setUapsdEnable(boolean uapsdEnable) {
 | 
			
		||||
        this.uapsdEnable = uapsdEnable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isWds() {
 | 
			
		||||
        return wds;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setWds(boolean wds) {
 | 
			
		||||
        this.wds = wds;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsid() {
 | 
			
		||||
        return ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsid(String ssid) {
 | 
			
		||||
        this.ssid = ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getSecurity() {
 | 
			
		||||
        return security;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSecurity(Map<String, String> security) {
 | 
			
		||||
        this.security = security;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMacList() {
 | 
			
		||||
        return macList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMacList(String macList) {
 | 
			
		||||
        this.macList = macList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<Uuid> getAssociatedClients() {
 | 
			
		||||
        return associatedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAssociatedClients(List<Uuid> list) {
 | 
			
		||||
        this.associatedClients = list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnabled() {
 | 
			
		||||
        return enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEnabled(boolean enabled) {
 | 
			
		||||
        this.enabled = enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getVlanId() {
 | 
			
		||||
        return vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVlanId(int vlanId) {
 | 
			
		||||
        this.vlanId = vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getBtm() {
 | 
			
		||||
        return btm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBtm(int btm) {
 | 
			
		||||
        this.btm = btm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMinHwMode() {
 | 
			
		||||
        return minHwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinHwMode(String minHwMode) {
 | 
			
		||||
        this.minHwMode = minHwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsidBroadcast() {
 | 
			
		||||
        return ssidBroadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsidBroadcast(String ssidBroadcast) {
 | 
			
		||||
        this.ssidBroadcast = ssidBroadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMode() {
 | 
			
		||||
        return mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMode(String mode) {
 | 
			
		||||
        this.mode = mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getBridge() {
 | 
			
		||||
        return bridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBridge(String bridge) {
 | 
			
		||||
        this.bridge = bridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getGroupRekey() {
 | 
			
		||||
        return groupRekey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGroupRekey(int groupRekey) {
 | 
			
		||||
        this.groupRekey = groupRekey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getFtMobilityDomain() {
 | 
			
		||||
        return ftMobilityDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFtMobilityDomain(int ftMobilityDomain) {
 | 
			
		||||
        this.ftMobilityDomain = ftMobilityDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getFtPsk() {
 | 
			
		||||
        return ftPsk;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFtPsk(int ftPsk) {
 | 
			
		||||
        this.ftPsk = ftPsk;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRrm() {
 | 
			
		||||
        return rrm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRrm(int rrm) {
 | 
			
		||||
        this.rrm = rrm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDynamicBeacon() {
 | 
			
		||||
        return dynamicBeacon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDynamicBeacon(boolean dynamicBeacon) {
 | 
			
		||||
        this.dynamicBeacon = dynamicBeacon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannel() {
 | 
			
		||||
        return channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannel(int channel) {
 | 
			
		||||
        this.channel = channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid get_uuid() {
 | 
			
		||||
        return _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    public List<Uuid> getAssociatedClients() {
 | 
			
		||||
        return associatedClients;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getBridge() {
 | 
			
		||||
        return bridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getBtm() {
 | 
			
		||||
        return btm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getChannel() {
 | 
			
		||||
        return channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getFtMobilityDomain() {
 | 
			
		||||
        return ftMobilityDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getFtPsk() {
 | 
			
		||||
        return ftPsk;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getGroupRekey() {
 | 
			
		||||
        return groupRekey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIfName() {
 | 
			
		||||
        return ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMacList() {
 | 
			
		||||
        return macList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMinHwMode() {
 | 
			
		||||
        return minHwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMode() {
 | 
			
		||||
        return mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParent() {
 | 
			
		||||
        return parent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRrm() {
 | 
			
		||||
        return rrm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getSecurity() {
 | 
			
		||||
        return security;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsid() {
 | 
			
		||||
        return ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSsidBroadcast() {
 | 
			
		||||
        return ssidBroadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid getVersion() {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getVifRadioIdx() {
 | 
			
		||||
        return vifRadioIdx;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getVlanId() {
 | 
			
		||||
        return vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isApBridge() {
 | 
			
		||||
        return apBridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDynamicBeacon() {
 | 
			
		||||
        return dynamicBeacon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnabled() {
 | 
			
		||||
        return enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isUapsdEnable() {
 | 
			
		||||
        return uapsdEnable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isWds() {
 | 
			
		||||
        return wds;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setApBridge(boolean apBridge) {
 | 
			
		||||
        this.apBridge = apBridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAssociatedClients(List<Uuid> list) {
 | 
			
		||||
        this.associatedClients = list;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBridge(String bridge) {
 | 
			
		||||
        this.bridge = bridge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBtm(int btm) {
 | 
			
		||||
        this.btm = btm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChannel(int channel) {
 | 
			
		||||
        this.channel = channel;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDynamicBeacon(boolean dynamicBeacon) {
 | 
			
		||||
        this.dynamicBeacon = dynamicBeacon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setEnabled(boolean enabled) {
 | 
			
		||||
        this.enabled = enabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFtMobilityDomain(int ftMobilityDomain) {
 | 
			
		||||
        this.ftMobilityDomain = ftMobilityDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFtPsk(int ftPsk) {
 | 
			
		||||
        this.ftPsk = ftPsk;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setGroupRekey(int groupRekey) {
 | 
			
		||||
        this.groupRekey = groupRekey;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIfName(String ifName) {
 | 
			
		||||
        this.ifName = ifName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMacList(String macList) {
 | 
			
		||||
        this.macList = macList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinHwMode(String minHwMode) {
 | 
			
		||||
        this.minHwMode = minHwMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMode(String mode) {
 | 
			
		||||
        this.mode = mode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParent(String parent) {
 | 
			
		||||
        this.parent = parent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRrm(int rrm) {
 | 
			
		||||
        this.rrm = rrm;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSecurity(Map<String, String> security) {
 | 
			
		||||
        this.security = security;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsid(String ssid) {
 | 
			
		||||
        this.ssid = ssid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSsidBroadcast(String ssidBroadcast) {
 | 
			
		||||
        this.ssidBroadcast = ssidBroadcast;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setState(String state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUapsdEnable(boolean uapsdEnable) {
 | 
			
		||||
        this.uapsdEnable = uapsdEnable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(Uuid version) {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVifRadioIdx(int vifRadioIdx) {
 | 
			
		||||
        this.vifRadioIdx = vifRadioIdx;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVlanId(int vlanId) {
 | 
			
		||||
        this.vlanId = vlanId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setWds(boolean wds) {
 | 
			
		||||
        this.wds = wds;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,17 +6,22 @@ package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author mikehansen
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OpensyncAWLANNode extends BaseJsonModel {
 | 
			
		||||
public class OpensyncAWLANNode extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -6172956297643126710L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<Object, Object> mqttSettings;
 | 
			
		||||
    public String model;
 | 
			
		||||
    public String skuNumber;
 | 
			
		||||
@@ -41,10 +46,10 @@ public class OpensyncAWLANNode extends BaseJsonModel {
 | 
			
		||||
    public String managerAddr;
 | 
			
		||||
    public boolean factoryReset;
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
 | 
			
		||||
    public OpensyncAWLANNode() {
 | 
			
		||||
        super();
 | 
			
		||||
        mqttSettings = new HashMap<>();
 | 
			
		||||
        versionMatrix = new HashMap<>();
 | 
			
		||||
        ledConfig = new HashMap<>();
 | 
			
		||||
@@ -52,208 +57,308 @@ public class OpensyncAWLANNode extends BaseJsonModel {
 | 
			
		||||
        mqttTopics = new HashMap<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<Object, Object> getMqttSettings() {
 | 
			
		||||
        return mqttSettings;
 | 
			
		||||
    public OpensyncAWLANNode(Row row) {
 | 
			
		||||
        this();
 | 
			
		||||
        Map<String, Value> map = row.getColumns();
 | 
			
		||||
 | 
			
		||||
        if (map.get("mqtt_settings") != null) {
 | 
			
		||||
            this.setMqttSettings(row.getMapColumn("mqtt_settings"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("mqtt_headers") != null) {
 | 
			
		||||
            this.setMqttHeaders(row.getMapColumn("mqtt_headers"));
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("mqtt_topics") != null) {
 | 
			
		||||
            this.setMqttHeaders(row.getMapColumn("mqtt_topics"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setMqttSettings(Map<Object, Object> map) {
 | 
			
		||||
        this.mqttSettings = map;
 | 
			
		||||
        if ((map.get("model") != null)
 | 
			
		||||
                && map.get("model").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setModel(row.getStringColumn("model"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("sku_number") != null)
 | 
			
		||||
                && map.get("sku_number").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setSkuNumber(row.getStringColumn("sku_number"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("id") != null)
 | 
			
		||||
                && map.get("id").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setId(row.getStringColumn("id"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getModel() {
 | 
			
		||||
        return model;
 | 
			
		||||
        if (map.get("version_matrix") != null) {
 | 
			
		||||
            this.setVersionMatrix(row.getMapColumn("version_matrix"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("firmware_version") != null) && map.get("firmware_version").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setFirmwareVersion(row.getStringColumn("firmware_version"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("firmware_url") != null)
 | 
			
		||||
                && map.get("firmware_url").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setFirmwareUrl(row.getStringColumn("firmware_url"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setModel(String model) {
 | 
			
		||||
        this.model = model;
 | 
			
		||||
        if ((map.get("_uuid") != null)
 | 
			
		||||
                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_uuid"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("upgrade_dl_timer") != null) && map.get("upgrade_dl_timer").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setUpgradeDlTimer(row.getIntegerColumn("upgrade_dl_timer").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("platform_version") != null) && map.get("platform_version").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setPlatformVersion(row.getStringColumn("platform_version"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("firmware_pass") != null) && map.get("firmware_pass").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setFirmwarePass(row.getStringColumn("firmware_pass"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("upgrade_timer") != null) && map.get("upgrade_timer").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setUpgradeTimer(row.getIntegerColumn("upgrade_timer").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("max_backoff") != null)
 | 
			
		||||
                && map.get("max_backoff").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMaxBackoff(row.getIntegerColumn("max_backoff").intValue());
 | 
			
		||||
        }
 | 
			
		||||
        if (map.get("led_config") != null) {
 | 
			
		||||
            this.setLedConfig(row.getMapColumn("led_config"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("redirector_addr") != null) && map.get("redirector_addr").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setRedirectorAddr(row.getStringColumn("redirector_addr"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("serial_number") != null) && map.get("serial_number").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setSerialNumber(row.getStringColumn("serial_number"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("_version") != null)
 | 
			
		||||
                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_version"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getSkuNumber() {
 | 
			
		||||
        return skuNumber;
 | 
			
		||||
        this.setUpgradeStatus(row.getIntegerColumn("upgrade_status").intValue());
 | 
			
		||||
 | 
			
		||||
        if ((map.get("device_mode") != null)
 | 
			
		||||
                && map.get("device_mode").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setDeviceMode(row.getStringColumn("device_mode"));
 | 
			
		||||
        }
 | 
			
		||||
        if ((map.get("min_backoff") != null)
 | 
			
		||||
                && map.get("min_backoff").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMinBackoff(row.getIntegerColumn("min_backoff").intValue());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setSkuNumber(String skuNumber) {
 | 
			
		||||
        this.skuNumber = skuNumber;
 | 
			
		||||
        if ((map.get("revision") != null)
 | 
			
		||||
                && map.get("revision").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setRevision(row.getStringColumn("revision"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
        if ((map.get("manager_addr") != null)
 | 
			
		||||
                && map.get("manager_addr").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setManagerAddr(row.getStringColumn("manager_addr"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setId(String id) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        if ((map.get("factory_reset") != null) && map.get("factory_reset").getClass()
 | 
			
		||||
                .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setFactoryReset(row.getBooleanColumn("factory_reset"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getVersionMatrix() {
 | 
			
		||||
        return versionMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersionMatrix(Map<String, String> versionMatrix) {
 | 
			
		||||
        this.versionMatrix = versionMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwareVersion() {
 | 
			
		||||
        return firmwareVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwareVersion(String firmwareVersion) {
 | 
			
		||||
        this.firmwareVersion = firmwareVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwareUrl() {
 | 
			
		||||
        return firmwareUrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwareUrl(String firmwareUrl) {
 | 
			
		||||
        this.firmwareUrl = firmwareUrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeDlTimer() {
 | 
			
		||||
        return upgradeDlTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeDlTimer(int upgradeDlTimer) {
 | 
			
		||||
        this.upgradeDlTimer = upgradeDlTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPlatformVersion() {
 | 
			
		||||
        return platformVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPlatformVersion(String platformVersion) {
 | 
			
		||||
        this.platformVersion = platformVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwarePass() {
 | 
			
		||||
        return firmwarePass;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwarePass(String firmwarePass) {
 | 
			
		||||
        this.firmwarePass = firmwarePass;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeTimer() {
 | 
			
		||||
        return upgradeTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeTimer(int upgradeTimer) {
 | 
			
		||||
        this.upgradeTimer = upgradeTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMaxBackoff() {
 | 
			
		||||
        return maxBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxBackoff(int maxBackoff) {
 | 
			
		||||
        this.maxBackoff = maxBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getLedConfig() {
 | 
			
		||||
        return ledConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLedConfig(Map<String, String> ledConfig) {
 | 
			
		||||
        this.ledConfig = ledConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRedirectorAddr() {
 | 
			
		||||
        return redirectorAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRedirectorAddr(String redirectorAddr) {
 | 
			
		||||
        this.redirectorAddr = redirectorAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getMqttHeaders() {
 | 
			
		||||
        return mqttHeaders;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMqttHeaders(Map<String, String> mqttHeaders) {
 | 
			
		||||
        this.mqttHeaders = mqttHeaders;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSerialNumber() {
 | 
			
		||||
        return serialNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSerialNumber(String serialNumber) {
 | 
			
		||||
        this.serialNumber = serialNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeStatus() {
 | 
			
		||||
        return upgradeStatus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeStatus(int upgradeStatus) {
 | 
			
		||||
        this.upgradeStatus = upgradeStatus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getDeviceMode() {
 | 
			
		||||
        return deviceMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeviceMode(String deviceMode) {
 | 
			
		||||
        this.deviceMode = deviceMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMinBackoff() {
 | 
			
		||||
        return minBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinBackoff(int minBackoff) {
 | 
			
		||||
        this.minBackoff = minBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getMqttTopics() {
 | 
			
		||||
        return mqttTopics;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMqttTopics(Map<String, String> mqttTopics) {
 | 
			
		||||
        this.mqttTopics = mqttTopics;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRevision() {
 | 
			
		||||
        return revision;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRevision(String revision) {
 | 
			
		||||
        this.revision = revision;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getManagerAddr() {
 | 
			
		||||
        return managerAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setManagerAddr(String managerAddr) {
 | 
			
		||||
        this.managerAddr = managerAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isFactoryReset() {
 | 
			
		||||
        return factoryReset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFactoryReset(boolean factoryReset) {
 | 
			
		||||
        this.factoryReset = factoryReset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid get_uuid() {
 | 
			
		||||
        return _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    public String getDeviceMode() {
 | 
			
		||||
        return deviceMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwarePass() {
 | 
			
		||||
        return firmwarePass;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwareUrl() {
 | 
			
		||||
        return firmwareUrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFirmwareVersion() {
 | 
			
		||||
        return firmwareVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getLedConfig() {
 | 
			
		||||
        return ledConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getManagerAddr() {
 | 
			
		||||
        return managerAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMaxBackoff() {
 | 
			
		||||
        return maxBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getMinBackoff() {
 | 
			
		||||
        return minBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getModel() {
 | 
			
		||||
        return model;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getMqttHeaders() {
 | 
			
		||||
        return mqttHeaders;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<Object, Object> getMqttSettings() {
 | 
			
		||||
        return mqttSettings;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getMqttTopics() {
 | 
			
		||||
        return mqttTopics;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPlatformVersion() {
 | 
			
		||||
        return platformVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRedirectorAddr() {
 | 
			
		||||
        return redirectorAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRevision() {
 | 
			
		||||
        return revision;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSerialNumber() {
 | 
			
		||||
        return serialNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getSkuNumber() {
 | 
			
		||||
        return skuNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeDlTimer() {
 | 
			
		||||
        return upgradeDlTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeStatus() {
 | 
			
		||||
        return upgradeStatus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUpgradeTimer() {
 | 
			
		||||
        return upgradeTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid getVersion() {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, String> getVersionMatrix() {
 | 
			
		||||
        return versionMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isFactoryReset() {
 | 
			
		||||
        return factoryReset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeviceMode(String deviceMode) {
 | 
			
		||||
        this.deviceMode = deviceMode;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFactoryReset(boolean factoryReset) {
 | 
			
		||||
        this.factoryReset = factoryReset;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwarePass(String firmwarePass) {
 | 
			
		||||
        this.firmwarePass = firmwarePass;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwareUrl(String firmwareUrl) {
 | 
			
		||||
        this.firmwareUrl = firmwareUrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFirmwareVersion(String firmwareVersion) {
 | 
			
		||||
        this.firmwareVersion = firmwareVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setId(String id) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLedConfig(Map<String, String> ledConfig) {
 | 
			
		||||
        this.ledConfig = ledConfig;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setManagerAddr(String managerAddr) {
 | 
			
		||||
        this.managerAddr = managerAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMaxBackoff(int maxBackoff) {
 | 
			
		||||
        this.maxBackoff = maxBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMinBackoff(int minBackoff) {
 | 
			
		||||
        this.minBackoff = minBackoff;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setModel(String model) {
 | 
			
		||||
        this.model = model;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMqttHeaders(Map<String, String> mqttHeaders) {
 | 
			
		||||
        this.mqttHeaders = mqttHeaders;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMqttSettings(Map<Object, Object> map) {
 | 
			
		||||
        this.mqttSettings = map;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMqttTopics(Map<String, String> mqttTopics) {
 | 
			
		||||
        this.mqttTopics = mqttTopics;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPlatformVersion(String platformVersion) {
 | 
			
		||||
        this.platformVersion = platformVersion;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRedirectorAddr(String redirectorAddr) {
 | 
			
		||||
        this.redirectorAddr = redirectorAddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRevision(String revision) {
 | 
			
		||||
        this.revision = revision;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSerialNumber(String serialNumber) {
 | 
			
		||||
        this.serialNumber = serialNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSkuNumber(String skuNumber) {
 | 
			
		||||
        this.skuNumber = skuNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeDlTimer(int upgradeDlTimer) {
 | 
			
		||||
        this.upgradeDlTimer = upgradeDlTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeStatus(int upgradeStatus) {
 | 
			
		||||
        this.upgradeStatus = upgradeStatus;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpgradeTimer(int upgradeTimer) {
 | 
			
		||||
        this.upgradeTimer = upgradeTimer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(Uuid version) {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersionMatrix(Map<String, String> versionMatrix) {
 | 
			
		||||
        this.versionMatrix = versionMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,19 +4,25 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author mikehansen
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public class OpensyncWifiAssociatedClients extends BaseJsonModel {
 | 
			
		||||
public class OpensyncWifiAssociatedClients extends OpensyncAPBase {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = -7088651136971662138L;
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String keyId;
 | 
			
		||||
    public String mac;
 | 
			
		||||
    public String state;
 | 
			
		||||
@@ -25,85 +31,107 @@ public class OpensyncWifiAssociatedClients extends BaseJsonModel {
 | 
			
		||||
    public String kick;
 | 
			
		||||
    public String oftag;
 | 
			
		||||
    public Uuid _uuid;
 | 
			
		||||
 | 
			
		||||
    public Uuid version;
 | 
			
		||||
 | 
			
		||||
    public OpensyncWifiAssociatedClients() {
 | 
			
		||||
        super();
 | 
			
		||||
        capabilities = new HashSet<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getKeyId() {
 | 
			
		||||
        return keyId;
 | 
			
		||||
    }
 | 
			
		||||
    public OpensyncWifiAssociatedClients(Row row) {
 | 
			
		||||
        this();
 | 
			
		||||
 | 
			
		||||
    public void setKeyId(String keyId) {
 | 
			
		||||
        this.keyId = keyId;
 | 
			
		||||
    }
 | 
			
		||||
        Map<String, Value> map = row.getColumns();
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
        if ((map.get("mac") != null)
 | 
			
		||||
                && map.get("mac").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setMac(row.getStringColumn("mac"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
        if (row.getSetColumn("capabilities") != null) {
 | 
			
		||||
            this.setCapabilities(row.getSetColumn("capabilities"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public String getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
        if ((map.get("state") != null)
 | 
			
		||||
                && map.get("state").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setState(row.getStringColumn("state"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setState(String state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
        if ((map.get("_version") != null)
 | 
			
		||||
                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_version"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public Set<String> getCapabilities() {
 | 
			
		||||
        return capabilities;
 | 
			
		||||
        if ((map.get("_uuid") != null)
 | 
			
		||||
                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
			
		||||
            this.setVersion(row.getUuidColumn("_uuid"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public void setCapabilities(Set<String> set) {
 | 
			
		||||
        this.capabilities = set;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUapsd() {
 | 
			
		||||
        return uapsd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUapsd(int uapsd) {
 | 
			
		||||
        this.uapsd = uapsd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getKick() {
 | 
			
		||||
        return kick;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setKick(String kick) {
 | 
			
		||||
        this.kick = kick;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getOftag() {
 | 
			
		||||
        return oftag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOftag(String oftag) {
 | 
			
		||||
        this.oftag = oftag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static long getSerialversionuid() {
 | 
			
		||||
        return serialVersionUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid get_uuid() {
 | 
			
		||||
        return _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    public Set<String> getCapabilities() {
 | 
			
		||||
        return capabilities;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getKeyId() {
 | 
			
		||||
        return keyId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getKick() {
 | 
			
		||||
        return kick;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMac() {
 | 
			
		||||
        return mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getOftag() {
 | 
			
		||||
        return oftag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getState() {
 | 
			
		||||
        return state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getUapsd() {
 | 
			
		||||
        return uapsd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Uuid getVersion() {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void set_uuid(Uuid _uuid) {
 | 
			
		||||
        this._uuid = _uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCapabilities(Set<String> set) {
 | 
			
		||||
        this.capabilities = set;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setKeyId(String keyId) {
 | 
			
		||||
        this.keyId = keyId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setKick(String kick) {
 | 
			
		||||
        this.kick = kick;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMac(String mac) {
 | 
			
		||||
        this.mac = mac;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOftag(String oftag) {
 | 
			
		||||
        this.oftag = oftag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setState(String state) {
 | 
			
		||||
        this.state = state;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUapsd(int uapsd) {
 | 
			
		||||
        this.uapsd = uapsd;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(Uuid version) {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
  <parent>
 | 
			
		||||
    <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
    <version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
    <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
    <relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
  </parent>
 | 
			
		||||
  <artifactId>opensync-ext-static</artifactId>
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
  	<dependency>
 | 
			
		||||
  		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
  		<artifactId>opensync-gateway</artifactId>
 | 
			
		||||
  		<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
  		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
  	</dependency>
 | 
			
		||||
  </dependencies>
 | 
			
		||||
</project>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.telecominfraproject.wlan.opensync.external.integration;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +17,6 @@ import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
			
		||||
import com.telecominfraproject.wlan.location.models.Location;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPHotspot20Config;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
 | 
			
		||||
@@ -47,30 +45,9 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.ssidProfileFileName:/app/config/ProfileSsid.json}")
 | 
			
		||||
    private String ssidProfileFileName;
 | 
			
		||||
    
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.metricsProfileFileName:/app/config/ProfileMetrics.json}")
 | 
			
		||||
    private String metricsProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.venueProfileFileName:/app/config/ProfileVenue.json}")
 | 
			
		||||
    private String venueProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.operatorProfileFileName:/app/config/ProfileOperator.json}")
 | 
			
		||||
    private String operatorProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.hotspot20ProfileFileName:/app/config/ProfileHotspot20.json}")
 | 
			
		||||
    private String hotspot20ProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.idProviderProfileFileName:/app/config/ProfileIdProvider.json}")
 | 
			
		||||
    private String idProviderProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.radiusProfileFileName:/app/config/ProfileRadius.json}")
 | 
			
		||||
    private String radiusProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.captiveProfileFileName:/app/config/ProfileCaptive.json}")
 | 
			
		||||
    private String captiveProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.bonjourProfileFileName:/app/config/ProfileBonjour.json}")
 | 
			
		||||
    private String bonjourProfileFileName;
 | 
			
		||||
 | 
			
		||||
    @Value("${tip.wlan.ovsdb.locationFileName:/app/config/LocationBuildingExample.json}")
 | 
			
		||||
    private String locationFileName;
 | 
			
		||||
 | 
			
		||||
@@ -85,7 +62,6 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
			
		||||
        serialNumber = connectNodeInfo.serialNumber;
 | 
			
		||||
        LOG.info("AP {} got connected to the gateway", apId);
 | 
			
		||||
        LOG.info("ConnectNodeInfo {}", connectNodeInfo);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void apDisconnected(String apId) {
 | 
			
		||||
@@ -95,97 +71,42 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
			
		||||
    public OpensyncAPConfig getApConfig(String apId) {
 | 
			
		||||
        LOG.info("Retrieving config for AP {}", apId);
 | 
			
		||||
        OpensyncAPConfig ret = null;
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
 | 
			
		||||
            Equipment equipment = Equipment.fromFile(customerEquipmentFileName, Equipment.class);
 | 
			
		||||
            equipment.setInventoryId(apId);
 | 
			
		||||
            equipment.setName(apId);
 | 
			
		||||
            equipment.setSerial(serialNumber);
 | 
			
		||||
 | 
			
		||||
            com.telecominfraproject.wlan.profile.models.Profile apProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .fromFile(apProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
            com.telecominfraproject.wlan.profile.models.Profile rfProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .fromFile(rfProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
            apProfile.getChildProfileIds().add(rfProfile.getId());
 | 
			
		||||
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> ssidProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(ssidProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> hotspot20Profiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(hotspot20ProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> operatorProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(operatorProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> venueProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(venueProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> providerProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(idProviderProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            ssidProfiles.stream().forEach(p -> apProfile.getChildProfileIds().add(p.getId()));
 | 
			
		||||
            
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> metricsProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(metricsProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> radiusProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                    .listFromFile(radiusProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> captiveProfiles = null;
 | 
			
		||||
            File captiveFile = new File(captiveProfileFileName);
 | 
			
		||||
            if (captiveFile.exists()) {
 | 
			
		||||
                captiveProfiles = com.telecominfraproject.wlan.profile.models.Profile.listFromFile(
 | 
			
		||||
                        captiveProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.info("Captive file is not provided");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            List<com.telecominfraproject.wlan.profile.models.Profile> bonjourProfiles = null;
 | 
			
		||||
            File bonjourFile = new File(bonjourProfileFileName);
 | 
			
		||||
            if (bonjourFile.exists()) {
 | 
			
		||||
                bonjourProfiles = com.telecominfraproject.wlan.profile.models.Profile.listFromFile(
 | 
			
		||||
                        bonjourProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.info("Bonjour file is not provided");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            equipment.setProfileId(apProfile.getId());
 | 
			
		||||
 | 
			
		||||
            Location location = Location.fromFile(locationFileName, Location.class);
 | 
			
		||||
 | 
			
		||||
            equipment.setLocationId(location.getId());
 | 
			
		||||
 | 
			
		||||
            OpensyncAPHotspot20Config hotspotConfig = new OpensyncAPHotspot20Config();
 | 
			
		||||
 | 
			
		||||
            hotspotConfig.setHotspot20ProfileSet(
 | 
			
		||||
                    new HashSet<com.telecominfraproject.wlan.profile.models.Profile>(hotspot20Profiles));
 | 
			
		||||
            hotspotConfig.setHotspot20OperatorSet(
 | 
			
		||||
                    new HashSet<com.telecominfraproject.wlan.profile.models.Profile>(operatorProfiles));
 | 
			
		||||
            hotspotConfig.setHotspot20VenueSet(
 | 
			
		||||
                    new HashSet<com.telecominfraproject.wlan.profile.models.Profile>(venueProfiles));
 | 
			
		||||
            hotspotConfig.setHotspot20ProviderSet(
 | 
			
		||||
                    new HashSet<com.telecominfraproject.wlan.profile.models.Profile>(providerProfiles));
 | 
			
		||||
 | 
			
		||||
            ret = new OpensyncAPConfig();
 | 
			
		||||
            ret.setCustomerEquipment(equipment);
 | 
			
		||||
            ret.setApProfile(apProfile);
 | 
			
		||||
            ret.setRfProfile(rfProfile);
 | 
			
		||||
            ret.setMetricsProfiles(metricsProfiles);
 | 
			
		||||
            ret.setSsidProfile(ssidProfiles);
 | 
			
		||||
            File radiusFile = new File(radiusProfileFileName);
 | 
			
		||||
            if (radiusFile.exists()) {
 | 
			
		||||
                List<com.telecominfraproject.wlan.profile.models.Profile> radiusProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
			
		||||
                        .listFromFile(radiusProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
			
		||||
                ret.setRadiusProfiles(radiusProfiles);
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.debug("No radius file present at {}", radiusFile.getAbsolutePath());
 | 
			
		||||
            }
 | 
			
		||||
            ret.setEquipmentLocation(location);
 | 
			
		||||
            ret.setCaptiveProfiles(captiveProfiles);
 | 
			
		||||
            ret.setBonjourGatewayProfiles(bonjourProfiles);
 | 
			
		||||
            ret.setHotspotConfig(hotspotConfig);
 | 
			
		||||
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            LOG.error("Cannot read config file", e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        LOG.debug("Config content : {}", ret);
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -275,4 +196,10 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void clearEquipmentStatus(String apId) {
 | 
			
		||||
        LOG.info("Received clearEquipmentStatus for ap {}",apId);
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Equipment",
 | 
			
		||||
  "id": 51,
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
  "profileId": 5,
 | 
			
		||||
    "profileId": 8,
 | 
			
		||||
    "locationId": 8,
 | 
			
		||||
    "equipmentType": "AP",
 | 
			
		||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
			
		||||
  "name": "Test_Client_21P10C68818122",
 | 
			
		||||
    "inventoryId": "Open_AP_21P10C68818122",
 | 
			
		||||
    "name": "Open_AP_21P10C68818122",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApElementConfiguration",
 | 
			
		||||
        "equipmentModel": "EA8300-CA",
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
        "staticDnsIp1": null,
 | 
			
		||||
        "staticDnsIp2": null,
 | 
			
		||||
        "peerInfoList": [],
 | 
			
		||||
    "deviceName": "Default Device Name",
 | 
			
		||||
        "deviceName": "Open_AP_21P10C68818122",
 | 
			
		||||
        "locationData": null,
 | 
			
		||||
        "locallyConfiguredMgmtVlan": 0,
 | 
			
		||||
        "locallyConfigured": false,
 | 
			
		||||
@@ -32,73 +32,246 @@
 | 
			
		||||
        "costSavingEventsEnabled": true,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "channelNumber": 149,
 | 
			
		||||
                "manualChannelNumber": 149,
 | 
			
		||||
                "backupChannelNumber": 157,
 | 
			
		||||
                "manualBackupChannelNumber": 157,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 161,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 100,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 132,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 165,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 104,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 136,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 108,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 140,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 112,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 144,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 116,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 149,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 153,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 157,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "channelNumber": 6,
 | 
			
		||||
                "manualChannelNumber": 6,
 | 
			
		||||
                "backupChannelNumber": 11,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 11,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 6
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 1,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
      "is5GHzU": {
 | 
			
		||||
        "model_type": "ElementRadioConfiguration",
 | 
			
		||||
        "radioType": "is5GHzU",
 | 
			
		||||
        "channelNumber": 149,
 | 
			
		||||
        "manualChannelNumber": 149,
 | 
			
		||||
        "backupChannelNumber": 154,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
        "rxCellSizeDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 2,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "probeResponseThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 3,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "clientDisconnectThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 4,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "eirpTxPower": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 5,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "perimeterDetectionEnabled": true,
 | 
			
		||||
        "bestAPSteerType": "both",
 | 
			
		||||
        "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 149
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 6,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 7,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 8,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 9,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 10,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 11,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
@@ -106,33 +279,88 @@
 | 
			
		||||
                "channelNumber": 36,
 | 
			
		||||
                "manualChannelNumber": 36,
 | 
			
		||||
                "backupChannelNumber": 44,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 44,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 36
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 52,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 36,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 56,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 40,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 60,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 44,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 64,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 48,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "advancedRadioMap": {
 | 
			
		||||
@@ -143,22 +371,28 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
	          "dropInSnrPercentage": 30,
 | 
			
		||||
	          "minLoadFactor": 40
 | 
			
		||||
                        "dropInSnrPercentage": 20,
 | 
			
		||||
                        "minLoadFactor": 50
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
@@ -168,14 +402,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -184,6 +423,7 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
@@ -193,14 +433,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -209,13 +454,19 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "latitude": null,
 | 
			
		||||
    "longitude": null,
 | 
			
		||||
    "baseMacAddress": {
 | 
			
		||||
        "model_type": "MacAddress",
 | 
			
		||||
        "address": "JPWi7y5T",
 | 
			
		||||
        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
			
		||||
    },
 | 
			
		||||
    "serial": "21P10C68818122",
 | 
			
		||||
  "createdTimestamp": 1591653239821,
 | 
			
		||||
  "lastModifiedTimestamp": 1591653241398
 | 
			
		||||
    "createdTimestamp": 1612285288821,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285293922
 | 
			
		||||
}
 | 
			
		||||
@@ -7,54 +7,55 @@
 | 
			
		||||
    "name": "Ottawa",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "LocationDetails",
 | 
			
		||||
    "countryCode" : "ca",
 | 
			
		||||
    "maintenanceWindow" : null,
 | 
			
		||||
    "rrmEnabled" : true,
 | 
			
		||||
        "countryCode": "CA",
 | 
			
		||||
        "dailyActivityDetails": {
 | 
			
		||||
            "SUNDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "MONDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "TUESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "WEDNESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "THURSDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "FRIDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "SATURDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
  "createdTimestamp" : 1590607043540,
 | 
			
		||||
  "lastModifiedTimestamp" : 1590607043540
 | 
			
		||||
        "maintenanceWindow": null,
 | 
			
		||||
        "rrmEnabled": true,
 | 
			
		||||
        "timezone": "US/Eastern"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285243534,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285243534
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 23,
 | 
			
		||||
    "id": 8,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "equipment_ap",
 | 
			
		||||
	"name": "ApProfile-3-radios-passpoint",
 | 
			
		||||
    "name": "ApProfile-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApNetworkConfiguration",
 | 
			
		||||
        "networkConfigVersion": "AP-1",
 | 
			
		||||
@@ -20,11 +20,6 @@
 | 
			
		||||
        "syntheticClientEnabled": true,
 | 
			
		||||
        "ledControlEnabled": true,
 | 
			
		||||
        "equipmentDiscovery": false,
 | 
			
		||||
		"greTunnelName": null,
 | 
			
		||||
		"greParentIfName": null,
 | 
			
		||||
		"greLocalInetAddr": null,
 | 
			
		||||
		"greRemoteInetAddr": null,
 | 
			
		||||
		"greRemoteMacAddr": null,
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "RadioProfileConfiguration",
 | 
			
		||||
@@ -42,14 +37,22 @@
 | 
			
		||||
                "bestAPSteerType": "both"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
		"profileType": "equipment_ap"
 | 
			
		||||
	},
 | 
			
		||||
	"createdTimestamp": 1605711197140,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711197140,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
		16,
 | 
			
		||||
		21,
 | 
			
		||||
		22,
 | 
			
		||||
		15
 | 
			
		||||
        "greTunnelConfigurations": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "GreTunnelConfiguration",
 | 
			
		||||
                "greTunnelName": "gre1",
 | 
			
		||||
                "greRemoteInetAddr": "192.168.1.101",
 | 
			
		||||
                "vlanIdsInGreTunnel": [
 | 
			
		||||
                    100
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "equipment_ap"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285248925,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285628377,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
        2,
 | 
			
		||||
        4
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
    "id": 100,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "bonjour",
 | 
			
		||||
    "name": "Bonjour-gateway",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "BonjourGatewayProfile",
 | 
			
		||||
        "profileDescription": "Bonjour Gateway Configuration for Design Testing",
 | 
			
		||||
        "profileType": "bonjour",
 | 
			
		||||
        "bonjourServices": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "BonjourServiceSet",
 | 
			
		||||
                "vlanId": 1,
 | 
			
		||||
                "supportAllServices": false,
 | 
			
		||||
                "serviceNames": [
 | 
			
		||||
                    "AirPort",
 | 
			
		||||
                    "SFTP",
 | 
			
		||||
                    "SSH"
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1599234550774,
 | 
			
		||||
    "lastModifiedTimestamp": 1599234550774,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -1,135 +1,58 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
    "id": 14,
 | 
			
		||||
    "id": 5,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "captive_portal",
 | 
			
		||||
    "name": "Captive-portal",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "CaptivePortalConfiguration",
 | 
			
		||||
        "name": "Captive-portal",
 | 
			
		||||
        "browserTitle": "Access the network as Guest",
 | 
			
		||||
      "name": "Default",
 | 
			
		||||
      "browserTitle": "Captive-portal",
 | 
			
		||||
      "headerContent": "Captive Portal",
 | 
			
		||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
			
		||||
        "successPageMarkdownText": "Welcome to the network",
 | 
			
		||||
        "redirectURL": "",
 | 
			
		||||
      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
			
		||||
      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
			
		||||
      "redirectURL": "https://www.google.com",
 | 
			
		||||
      "externalCaptivePortalURL": null,
 | 
			
		||||
        "sessionTimeoutInMinutes": 60,
 | 
			
		||||
        "logoFile": null,
 | 
			
		||||
        "backgroundFile": null,
 | 
			
		||||
        "walledGardenAllowlist": [],
 | 
			
		||||
        "usernamePasswordFile": {
 | 
			
		||||
      "sessionTimeoutInMinutes": 10,
 | 
			
		||||
      "logoFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
            "apExportUrl": "userList",
 | 
			
		||||
            "fileCategory": "UsernamePasswordList",
 | 
			
		||||
            "fileType": "TEXT",
 | 
			
		||||
            "altSlot": true
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
			
		||||
        "fileCategory": "CaptivePortalLogo",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "backgroundFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo",
 | 
			
		||||
        "fileCategory": "CaptivePortalBackground",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "walledGardenAllowlist": [
 | 
			
		||||
      ],
 | 
			
		||||
      "usernamePasswordFile": null,
 | 
			
		||||
      "authenticationType": "guest",
 | 
			
		||||
      "radiusAuthMethod": "CHAP",
 | 
			
		||||
        "maxUsersWithSameCredentials": 42,
 | 
			
		||||
      "maxUsersWithSameCredentials": 3,
 | 
			
		||||
      "externalPolicyFile": null,
 | 
			
		||||
      "backgroundPosition": "left_top",
 | 
			
		||||
      "backgroundRepeat": "no_repeat",
 | 
			
		||||
        "radiusServiceName": null,
 | 
			
		||||
        "expiryType": "unlimited",
 | 
			
		||||
      "radiusServiceId": 0,
 | 
			
		||||
      "expiryType": "time_limited",
 | 
			
		||||
      "userList": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994956,
 | 
			
		||||
                "expirationTime": 1602212794956,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Pac",
 | 
			
		||||
                    "lastName": "Man",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upO",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4e"
 | 
			
		||||
                    }
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602187594957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Q",
 | 
			
		||||
                    "lastName": "Bert",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqho",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:68"
 | 
			
		||||
                    }
 | 
			
		||||
      "macAllowList": [
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602788794957,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Duke",
 | 
			
		||||
                    "lastName": "Nukem",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upN",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4d"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602270394957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Missile",
 | 
			
		||||
                    "lastName": "Commander",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqhj",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:63"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "macAllowList": [],
 | 
			
		||||
      "profileType": "captive_portal"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1602183994959,
 | 
			
		||||
    "lastModifiedTimestamp": 1602183994959,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611857459118,
 | 
			
		||||
    "lastModifiedTimestamp": 1611857459118,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,72 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
        "id": 24,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint",
 | 
			
		||||
        "name": "TipWlan-Hotspot20-Config",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointProfile",
 | 
			
		||||
            "enableInterworkingAndHs20": true,
 | 
			
		||||
            "hessid": null,
 | 
			
		||||
            "additionalStepsRequiredForAccess": 0,
 | 
			
		||||
            "deauthRequestTimeout": 0,
 | 
			
		||||
            "operatingClass": 0,
 | 
			
		||||
            "termsAndConditionsFile": {
 | 
			
		||||
                "model_type": "ManagedFileInfo",
 | 
			
		||||
                "md5checksum": null,
 | 
			
		||||
                "lastModifiedTimestamp": null,
 | 
			
		||||
                "apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
			
		||||
                "fileCategory": "ExternalPolicyConfiguration",
 | 
			
		||||
                "fileType": "TEXT",
 | 
			
		||||
                "altSlot": false
 | 
			
		||||
            },
 | 
			
		||||
            "whitelistDomain": null,
 | 
			
		||||
            "emergencyServicesReachable": true,
 | 
			
		||||
            "unauthenticatedEmergencyServiceAccessible": false,
 | 
			
		||||
            "internetConnectivity": true,
 | 
			
		||||
            "connectionCapabilitySet": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointConnectionCapability",
 | 
			
		||||
                    "connectionCapabilitiesPortNumber": 8888,
 | 
			
		||||
                    "connectionCapabilitiesIpProtocol": "TCP",
 | 
			
		||||
                    "connectionCapabilitiesStatus": "open"
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
			
		||||
            "qosMapSetConfiguration": null,
 | 
			
		||||
            "apGeospatialLocation": null,
 | 
			
		||||
            "apCivicLocation": null,
 | 
			
		||||
            "apPublicLocationIdUri": null,
 | 
			
		||||
            "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
			
		||||
            "anqpDomainId": 1234,
 | 
			
		||||
            "disableDownstreamGroupAddressedForwarding": false,
 | 
			
		||||
            "enable2pt4GHz": true,
 | 
			
		||||
            "enable5GHz": true,
 | 
			
		||||
            "associatedAccessSsidNames": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
            ],
 | 
			
		||||
            "osuSsidName": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
            "operatorProfileName": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
            "venueProfileName": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
            "idProviderProfileNames": [
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider"
 | 
			
		||||
            ],
 | 
			
		||||
            "accessNetworkType": "free_public_network",
 | 
			
		||||
            "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
            "associatedSsids": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint"
 | 
			
		||||
        },
 | 
			
		||||
        "createdTimestamp": 1605711223339,
 | 
			
		||||
        "lastModifiedTimestamp": 1605711223339,
 | 
			
		||||
        "childProfileIds": [
 | 
			
		||||
            17,
 | 
			
		||||
            18,
 | 
			
		||||
            19,
 | 
			
		||||
            20
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,270 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 19,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "rogers.com",
 | 
			
		||||
			"mccMncList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointMccMnc",
 | 
			
		||||
					"mcc": 302,
 | 
			
		||||
					"mnc": 720,
 | 
			
		||||
					"iso": "ca",
 | 
			
		||||
					"country": "Canada",
 | 
			
		||||
					"countryCode": 1,
 | 
			
		||||
					"network": "Rogers AT&T Wireless",
 | 
			
		||||
					"mccMncPairing": "302,720"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"naiRealmList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointNaiRealmInformation",
 | 
			
		||||
					"naiRealms": [
 | 
			
		||||
						"rogers.com"
 | 
			
		||||
					],
 | 
			
		||||
					"encoding": 0,
 | 
			
		||||
					"eapMethods": [
 | 
			
		||||
						"EAP-TTLS with username/password",
 | 
			
		||||
						"EAP-TLS with certificate"
 | 
			
		||||
					],
 | 
			
		||||
					"eapMap": {
 | 
			
		||||
						"EAP-TTLS with username/password": [
 | 
			
		||||
							"Credential Type:username/password",
 | 
			
		||||
							"Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
			
		||||
						],
 | 
			
		||||
						"EAP-TLS with certificate": [
 | 
			
		||||
							"Credential Type:Certificate"
 | 
			
		||||
						]
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuIconList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "eng",
 | 
			
		||||
					"iconLocale": "en_CA",
 | 
			
		||||
					"iconName": "icon32eng",
 | 
			
		||||
					"filePath": "/tmp/icon32eng.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
			
		||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "fra",
 | 
			
		||||
					"iconLocale": "fr_CA",
 | 
			
		||||
					"iconName": "icon32fra",
 | 
			
		||||
					"filePath": "/tmp/icon32fra.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
			
		||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "eng",
 | 
			
		||||
					"iconLocale": "en_US",
 | 
			
		||||
					"iconName": "icon32usa",
 | 
			
		||||
					"filePath": "/tmp/icon32usa.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
			
		||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuServerUri": "https://example.com/osu/rogers",
 | 
			
		||||
			"osuFriendlyName": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Example provider rogers",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Example provider rogers"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Exemple de fournisseur rogers",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "fra:Exemple de fournisseur rogers"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuNaiStandalone": "anonymous@rogers.com",
 | 
			
		||||
			"osuNaiShared": "anonymous@rogers.com",
 | 
			
		||||
			"osuMethodList": [
 | 
			
		||||
				1,
 | 
			
		||||
				0
 | 
			
		||||
			],
 | 
			
		||||
			"osuServiceDescription": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Example services rogers",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Example services rogers"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Exemples de services rogers",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "fra:Exemples de services rogers"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
			],
 | 
			
		||||
			"profileType": "passpoint_osu_id_provider"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711165325,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165325,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 20,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "telus.com",
 | 
			
		||||
			"mccMncList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointMccMnc",
 | 
			
		||||
					"mcc": 302,
 | 
			
		||||
					"mnc": 220,
 | 
			
		||||
					"iso": "ca",
 | 
			
		||||
					"country": "Canada",
 | 
			
		||||
					"countryCode": 1,
 | 
			
		||||
					"network": "Telus Mobility",
 | 
			
		||||
					"mccMncPairing": "302,220"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"naiRealmList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointNaiRealmInformation",
 | 
			
		||||
					"naiRealms": [
 | 
			
		||||
						"telus.com"
 | 
			
		||||
					],
 | 
			
		||||
					"encoding": 0,
 | 
			
		||||
					"eapMethods": [
 | 
			
		||||
						"EAP-TTLS with username/password",
 | 
			
		||||
						"EAP-TLS with certificate"
 | 
			
		||||
					],
 | 
			
		||||
					"eapMap": {
 | 
			
		||||
						"EAP-TTLS with username/password": [
 | 
			
		||||
							"Credential Type:username/password",
 | 
			
		||||
							"Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
			
		||||
						],
 | 
			
		||||
						"EAP-TLS with certificate": [
 | 
			
		||||
							"Credential Type:Certificate"
 | 
			
		||||
						]
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuIconList": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "eng",
 | 
			
		||||
					"iconLocale": "en_CA",
 | 
			
		||||
					"iconName": "icon32eng",
 | 
			
		||||
					"filePath": "/tmp/icon32eng.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
			
		||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "fra",
 | 
			
		||||
					"iconLocale": "fr_CA",
 | 
			
		||||
					"iconName": "icon32fra",
 | 
			
		||||
					"filePath": "/tmp/icon32fra.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
			
		||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointOsuIcon",
 | 
			
		||||
					"iconWidth": 32,
 | 
			
		||||
					"iconHeight": 32,
 | 
			
		||||
					"languageCode": "eng",
 | 
			
		||||
					"iconLocale": "en_US",
 | 
			
		||||
					"iconName": "icon32usa",
 | 
			
		||||
					"filePath": "/tmp/icon32usa.png",
 | 
			
		||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
			
		||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuServerUri": "https://example.com/osu/telus",
 | 
			
		||||
			"osuFriendlyName": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Example provider telus",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Example provider telus"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Exemple de fournisseur telus",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "fra:Exemple de fournisseur telus"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"osuNaiStandalone": "anonymous@telus.com",
 | 
			
		||||
			"osuNaiShared": "anonymous@telus.com",
 | 
			
		||||
			"osuMethodList": [
 | 
			
		||||
				1,
 | 
			
		||||
				0
 | 
			
		||||
			],
 | 
			
		||||
			"osuServiceDescription": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Example services telus",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Example services telus"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Exemples de services telus",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "fra:Exemples de services telus"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
			],
 | 
			
		||||
			"profileType": "passpoint_osu_id_provider"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711165330,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165330,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
@@ -1,299 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 22,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "service_metrics_collection_config",
 | 
			
		||||
		"name": "Metrics-Profile-Passpoint",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "ServiceMetricsCollectionConfigProfile",
 | 
			
		||||
			"radioTypes": [
 | 
			
		||||
				"is5GHzL",
 | 
			
		||||
				"is2dot4GHz",
 | 
			
		||||
				"is5GHzU"
 | 
			
		||||
			],
 | 
			
		||||
			"serviceMetricDataTypes": [
 | 
			
		||||
				"ApNode",
 | 
			
		||||
				"ApSsid",
 | 
			
		||||
				"Client",
 | 
			
		||||
				"Channel",
 | 
			
		||||
				"Neighbour"
 | 
			
		||||
			],
 | 
			
		||||
			"metricConfigParameterMap": {
 | 
			
		||||
				"ApNode": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"ApSsid": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Client": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Client"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Client"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Client"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Channel": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Neighbour": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				]
 | 
			
		||||
			},
 | 
			
		||||
			"profileType": "service_metrics_collection_config"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711195528,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711195528,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
@@ -1,37 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 17,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "passpoint_operator",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "PasspointOperatorProfile",
 | 
			
		||||
			"serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
			
		||||
			"x509CertificateLocation": "/etc/ca.pem",
 | 
			
		||||
			"operatorFriendlyName": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Nom de l'opérateur convivial par défaut",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"profileType": "passpoint_operator"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164952,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164952,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
        {
 | 
			
		||||
            "model_type": "Profile",
 | 
			
		||||
            "id": 1,
 | 
			
		||||
            "customerId": 2,
 | 
			
		||||
            "profileType": "radius",
 | 
			
		||||
            "name": "Radius-Profile",
 | 
			
		||||
            "details": {
 | 
			
		||||
                "model_type": "RadiusProfile",
 | 
			
		||||
                "subnetConfiguration": null,
 | 
			
		||||
                "serviceRegionMap": {
 | 
			
		||||
                    "Ottawa": {
 | 
			
		||||
                        "model_type": "RadiusServiceRegion",
 | 
			
		||||
                        "serverMap": {
 | 
			
		||||
                            "Radius-Profile": [
 | 
			
		||||
                                {
 | 
			
		||||
                                    "model_type": "RadiusServer",
 | 
			
		||||
                                    "ipAddress": "192.168.0.1",
 | 
			
		||||
                                    "secret": "testing123",
 | 
			
		||||
                                    "authPort": 1812,
 | 
			
		||||
                                    "timeout": null
 | 
			
		||||
                                }
 | 
			
		||||
                            ]
 | 
			
		||||
                        },
 | 
			
		||||
                        "regionName": "Ottawa"
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "profileType": "radius"
 | 
			
		||||
            },
 | 
			
		||||
            "createdTimestamp": 1601961451668,
 | 
			
		||||
            "lastModifiedTimestamp": 1601961451668,
 | 
			
		||||
            "childProfileIds": []
 | 
			
		||||
        }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 21,
 | 
			
		||||
    "id": 4,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "rf",
 | 
			
		||||
	"name": "TipWlan-rf-passpoint",
 | 
			
		||||
    "name": "TipWlan-rf",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "RfConfiguration",
 | 
			
		||||
        "rfConfigMap": {
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHz",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "radioMode": "modeN",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -105,7 +105,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -152,7 +152,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzL",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -198,8 +198,7 @@
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "rf"
 | 
			
		||||
    },
 | 
			
		||||
	"createdTimestamp": 1605711191976,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711191976,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
	]
 | 
			
		||||
    "createdTimestamp": 1612285248650,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248650,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +1,27 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 15,
 | 
			
		||||
    "id": 2,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
    "name": "TipWlan-cloud-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
        "ssid": "TipWlan-cloud-3-radios",
 | 
			
		||||
        "appliedRadios": [
 | 
			
		||||
				"is5GHzL",
 | 
			
		||||
				"is5GHzU"
 | 
			
		||||
            "is5GHzU",
 | 
			
		||||
            "is2dot4GHz",
 | 
			
		||||
            "is5GHzL"
 | 
			
		||||
        ],
 | 
			
		||||
        "ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "wpa2PSK",
 | 
			
		||||
        "secureMode": "wpa2OnlyPSK",
 | 
			
		||||
        "vlanId": 1,
 | 
			
		||||
			"keyStr": "testing123",
 | 
			
		||||
        "keyStr": "openwifi",
 | 
			
		||||
        "broadcastSsid": "enabled",
 | 
			
		||||
        "keyRefresh": 0,
 | 
			
		||||
        "noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
        "radiusServiceId": 0,
 | 
			
		||||
        "radiusAcountingServiceInterval": 60,
 | 
			
		||||
        "captivePortalId": null,
 | 
			
		||||
        "bandwidthLimitDown": 0,
 | 
			
		||||
        "bandwidthLimitUp": 0,
 | 
			
		||||
@@ -28,7 +29,7 @@
 | 
			
		||||
        "clientBandwidthLimitUp": 0,
 | 
			
		||||
        "videoTrafficOnly": false,
 | 
			
		||||
        "radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -40,7 +41,7 @@
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
                "enable80211v": null
 | 
			
		||||
            },
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
            "is5GHz": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -56,79 +57,19 @@
 | 
			
		||||
        "bonjourGatewayProfileId": null,
 | 
			
		||||
        "enable80211w": null,
 | 
			
		||||
        "wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164949,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711223372,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			24
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 16,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
			"appliedRadios": [
 | 
			
		||||
				"is2dot4GHz"
 | 
			
		||||
			],
 | 
			
		||||
			"ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "open",
 | 
			
		||||
			"vlanId": 1,
 | 
			
		||||
			"keyStr": null,
 | 
			
		||||
			"broadcastSsid": "enabled",
 | 
			
		||||
			"keyRefresh": 0,
 | 
			
		||||
			"noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
			"captivePortalId": null,
 | 
			
		||||
			"bandwidthLimitDown": 0,
 | 
			
		||||
			"bandwidthLimitUp": 0,
 | 
			
		||||
			"clientBandwidthLimitDown": 0,
 | 
			
		||||
			"clientBandwidthLimitUp": 0,
 | 
			
		||||
			"videoTrafficOnly": false,
 | 
			
		||||
			"radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is2dot4GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzL": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
        "radiusClientConfiguration": {
 | 
			
		||||
            "model_type": "RadiusNasConfiguration",
 | 
			
		||||
            "nasClientId": "DEFAULT",
 | 
			
		||||
            "nasClientIp": "WAN_IP",
 | 
			
		||||
            "userDefinedNasId": null,
 | 
			
		||||
            "userDefinedNasIp": null,
 | 
			
		||||
            "operatorId": null
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
			"bonjourGatewayProfileId": null,
 | 
			
		||||
			"enable80211w": null,
 | 
			
		||||
			"wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164950,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711171732,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			19,
 | 
			
		||||
			20
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1612285248638,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248638,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 18,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "passpoint_venue",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "PasspointVenueProfile",
 | 
			
		||||
			"venueNameSet": [
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
					"dupleIso3Language": "fra",
 | 
			
		||||
					"dupleName": "Exemple de lieu",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"venueUrl": "http://www.example.com/info-fra",
 | 
			
		||||
					"asDuple": "fra:Exemple de lieu"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Example passpoint_venue",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"venueUrl": "http://www.example.com/info-eng",
 | 
			
		||||
					"asDuple": "eng:Example passpoint_venue"
 | 
			
		||||
				}
 | 
			
		||||
			],
 | 
			
		||||
			"venueTypeAssignment": {
 | 
			
		||||
				"model_type": "ProfileVenueTypeAssignment",
 | 
			
		||||
				"venueDescription": "Research and Development Facility",
 | 
			
		||||
				"venueGroupId": 2,
 | 
			
		||||
				"venueTypeId": 8
 | 
			
		||||
			},
 | 
			
		||||
			"profileType": "passpoint_venue"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164956,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164956,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
]
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
  <parent>
 | 
			
		||||
    <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
    <version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
    <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
    <relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
  </parent>
 | 
			
		||||
  <artifactId>opensync-gateway-build</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-gateway-cloud-docker</artifactId>
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
	</dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -113,9 +113,16 @@ FILE_STORE_PROPS=" "
 | 
			
		||||
FILE_STORE_PROPS+=" -Dtip.wlan.fileStoreDirectory=$FILE_STORE_DIRECTORY"
 | 
			
		||||
FILE_STORE_PROPS+=" -Dtip.wlan.externalFileStoreURL=$FILE_STORE_EXTERNAL_URL"
 | 
			
		||||
 | 
			
		||||
REMOTE_DEBUG_PORT=5005
 | 
			
		||||
REMOTE_DEBUG_PORT=${REMOTE_DEBUG_PORT:-'5005'}
 | 
			
		||||
if [ "x$REMOTE_DEBUG_ENABLE" == "xtrue" ]
 | 
			
		||||
then
 | 
			
		||||
  REMOTE_DEBUG=" -agentlib:jdwp=transport=dt_socket,server=y,address=*:$REMOTE_DEBUG_PORT,suspend=n"
 | 
			
		||||
else
 | 
			
		||||
  REMOTE_DEBUG=" "
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS $HOST_PROPS $PROV_PROPS $FILE_STORE_PROPS $REMOTE_DEBUG"
 | 
			
		||||
JVM_EXTRA_PROPS=" ${JVM_MEM_OPTIONS:- } "
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$JVM_EXTRA_PROPS $PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS $HOST_PROPS $PROV_PROPS $FILE_STORE_PROPS $REMOTE_DEBUG"
 | 
			
		||||
 | 
			
		||||
java $ALL_PROPS -jar app.jar
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
			
		||||
@@ -18,99 +16,99 @@
 | 
			
		||||
 | 
			
		||||
	<dependencies>
 | 
			
		||||
		<!-- <dependency> <groupId>com.telecominfraproject.wlan</groupId> <artifactId>opensync-gateway</artifactId> 
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version> </dependency> -->
 | 
			
		||||
			<version>0.0.1-SNAPSHOT</version> </dependency> -->
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-ext-cloud</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <artifactId>filestore-service</artifactId>
 | 
			
		||||
            <groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
            <version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
            <version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>customer-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>location-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>equipment-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>profile-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>portal-user-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>service-metric-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>system-event-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>alarm-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>status-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>client-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>routing-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>firmware-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>manufacturer-service-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>cloud-event-dispatcher-remote</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
	</dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -136,7 +136,7 @@ tip.wlan.manufacturerServiceBaseUrl=https://localhost:9092
 | 
			
		||||
tip.wlan.portalUserServiceBaseUrl=https://localhost:9092
 | 
			
		||||
 | 
			
		||||
tip.wlan.fileStoreDirectory=/tmp/tip-wlan-filestore
 | 
			
		||||
tip.wlan.externalFileStoreURL=https://localhost:9096
 | 
			
		||||
tip.wlan.externalFileStoreURL=localhost:9096
 | 
			
		||||
 | 
			
		||||
#server.session-timeout= # session timeout in seconds
 | 
			
		||||
#server.tomcat.max-threads = 0 # number of threads in protocol handler
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
        <listEntry value="1"/>
 | 
			
		||||
    </listAttribute>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
 | 
			
		||||
    <listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-gateway-static-docker</artifactId>
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-gateway-static-process</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
	</dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Equipment",
 | 
			
		||||
  "id": 51,
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
  "profileId": 5,
 | 
			
		||||
    "profileId": 8,
 | 
			
		||||
    "locationId": 8,
 | 
			
		||||
    "equipmentType": "AP",
 | 
			
		||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
			
		||||
  "name": "Test_Client_21P10C68818122",
 | 
			
		||||
    "inventoryId": "Open_AP_21P10C68818122",
 | 
			
		||||
    "name": "Open_AP_21P10C68818122",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApElementConfiguration",
 | 
			
		||||
        "equipmentModel": "EA8300-CA",
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
        "staticDnsIp1": null,
 | 
			
		||||
        "staticDnsIp2": null,
 | 
			
		||||
        "peerInfoList": [],
 | 
			
		||||
    "deviceName": "Default Device Name",
 | 
			
		||||
        "deviceName": "Open_AP_21P10C68818122",
 | 
			
		||||
        "locationData": null,
 | 
			
		||||
        "locallyConfiguredMgmtVlan": 0,
 | 
			
		||||
        "locallyConfigured": false,
 | 
			
		||||
@@ -32,73 +32,246 @@
 | 
			
		||||
        "costSavingEventsEnabled": true,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "channelNumber": 149,
 | 
			
		||||
                "manualChannelNumber": 149,
 | 
			
		||||
                "backupChannelNumber": 157,
 | 
			
		||||
                "manualBackupChannelNumber": 157,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 161,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 100,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 132,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 165,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 104,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 136,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 108,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 140,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 112,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 144,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 116,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 149,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 153,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 157,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "channelNumber": 6,
 | 
			
		||||
                "manualChannelNumber": 6,
 | 
			
		||||
                "backupChannelNumber": 11,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 11,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 6
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 1,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
      "is5GHzU": {
 | 
			
		||||
        "model_type": "ElementRadioConfiguration",
 | 
			
		||||
        "radioType": "is5GHzU",
 | 
			
		||||
        "channelNumber": 149,
 | 
			
		||||
        "manualChannelNumber": 149,
 | 
			
		||||
        "backupChannelNumber": 154,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
        "rxCellSizeDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 2,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "probeResponseThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 3,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "clientDisconnectThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 4,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "eirpTxPower": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 5,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "perimeterDetectionEnabled": true,
 | 
			
		||||
        "bestAPSteerType": "both",
 | 
			
		||||
        "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 149
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 6,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 7,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 8,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 9,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 10,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 11,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
@@ -106,33 +279,88 @@
 | 
			
		||||
                "channelNumber": 36,
 | 
			
		||||
                "manualChannelNumber": 36,
 | 
			
		||||
                "backupChannelNumber": 44,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 44,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 36
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 52,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 36,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 56,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 40,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 60,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 44,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 64,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 48,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "advancedRadioMap": {
 | 
			
		||||
@@ -143,22 +371,28 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
	          "dropInSnrPercentage": 30,
 | 
			
		||||
	          "minLoadFactor": 40
 | 
			
		||||
                        "dropInSnrPercentage": 20,
 | 
			
		||||
                        "minLoadFactor": 50
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
@@ -168,14 +402,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -184,6 +423,7 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
@@ -193,14 +433,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -209,13 +454,19 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "latitude": null,
 | 
			
		||||
    "longitude": null,
 | 
			
		||||
    "baseMacAddress": {
 | 
			
		||||
        "model_type": "MacAddress",
 | 
			
		||||
        "address": "JPWi7y5T",
 | 
			
		||||
        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
			
		||||
    },
 | 
			
		||||
    "serial": "21P10C68818122",
 | 
			
		||||
  "createdTimestamp": 1591653239821,
 | 
			
		||||
  "lastModifiedTimestamp": 1591653241398
 | 
			
		||||
    "createdTimestamp": 1612285288821,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285293922
 | 
			
		||||
}
 | 
			
		||||
@@ -7,54 +7,55 @@
 | 
			
		||||
    "name": "Ottawa",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "LocationDetails",
 | 
			
		||||
    "countryCode" : "ca",
 | 
			
		||||
    "maintenanceWindow" : null,
 | 
			
		||||
    "rrmEnabled" : true,
 | 
			
		||||
        "countryCode": "CA",
 | 
			
		||||
        "dailyActivityDetails": {
 | 
			
		||||
            "SUNDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "MONDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "TUESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "WEDNESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "THURSDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "FRIDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "SATURDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
  "createdTimestamp" : 1590607043540,
 | 
			
		||||
  "lastModifiedTimestamp" : 1590607043540
 | 
			
		||||
        "maintenanceWindow": null,
 | 
			
		||||
        "rrmEnabled": true,
 | 
			
		||||
        "timezone": "US/Eastern"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285243534,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285243534
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 23,
 | 
			
		||||
    "id": 8,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "equipment_ap",
 | 
			
		||||
	"name": "ApProfile-3-radios-passpoint",
 | 
			
		||||
    "name": "ApProfile-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApNetworkConfiguration",
 | 
			
		||||
        "networkConfigVersion": "AP-1",
 | 
			
		||||
@@ -20,11 +20,6 @@
 | 
			
		||||
        "syntheticClientEnabled": true,
 | 
			
		||||
        "ledControlEnabled": true,
 | 
			
		||||
        "equipmentDiscovery": false,
 | 
			
		||||
		"greTunnelName": null,
 | 
			
		||||
		"greParentIfName": null,
 | 
			
		||||
		"greLocalInetAddr": null,
 | 
			
		||||
		"greRemoteInetAddr": null,
 | 
			
		||||
		"greRemoteMacAddr": null,
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "RadioProfileConfiguration",
 | 
			
		||||
@@ -42,14 +37,22 @@
 | 
			
		||||
                "bestAPSteerType": "both"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
		"profileType": "equipment_ap"
 | 
			
		||||
	},
 | 
			
		||||
	"createdTimestamp": 1605711197140,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711197140,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
		16,
 | 
			
		||||
		21,
 | 
			
		||||
		22,
 | 
			
		||||
		15
 | 
			
		||||
        "greTunnelConfigurations": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "GreTunnelConfiguration",
 | 
			
		||||
                "greTunnelName": "gre1",
 | 
			
		||||
                "greRemoteInetAddr": "192.168.1.101",
 | 
			
		||||
                "vlanIdsInGreTunnel": [
 | 
			
		||||
                    100
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "equipment_ap"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285248925,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285628377,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
        2,
 | 
			
		||||
        4
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,135 +1,58 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
    "id": 14,
 | 
			
		||||
    "id": 5,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "captive_portal",
 | 
			
		||||
    "name": "Captive-portal",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "CaptivePortalConfiguration",
 | 
			
		||||
        "name": "Captive-portal",
 | 
			
		||||
        "browserTitle": "Access the network as Guest",
 | 
			
		||||
      "name": "Default",
 | 
			
		||||
      "browserTitle": "Captive-portal",
 | 
			
		||||
      "headerContent": "Captive Portal",
 | 
			
		||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
			
		||||
        "successPageMarkdownText": "Welcome to the network",
 | 
			
		||||
        "redirectURL": "",
 | 
			
		||||
      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
			
		||||
      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
			
		||||
      "redirectURL": "https://www.google.com",
 | 
			
		||||
      "externalCaptivePortalURL": null,
 | 
			
		||||
        "sessionTimeoutInMinutes": 60,
 | 
			
		||||
        "logoFile": null,
 | 
			
		||||
        "backgroundFile": null,
 | 
			
		||||
        "walledGardenAllowlist": [],
 | 
			
		||||
        "usernamePasswordFile": {
 | 
			
		||||
      "sessionTimeoutInMinutes": 10,
 | 
			
		||||
      "logoFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
            "apExportUrl": "userList",
 | 
			
		||||
            "fileCategory": "UsernamePasswordList",
 | 
			
		||||
            "fileType": "TEXT",
 | 
			
		||||
            "altSlot": true
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
			
		||||
        "fileCategory": "CaptivePortalLogo",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "backgroundFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo",
 | 
			
		||||
        "fileCategory": "CaptivePortalBackground",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "walledGardenAllowlist": [
 | 
			
		||||
      ],
 | 
			
		||||
      "usernamePasswordFile": null,
 | 
			
		||||
      "authenticationType": "guest",
 | 
			
		||||
      "radiusAuthMethod": "CHAP",
 | 
			
		||||
        "maxUsersWithSameCredentials": 42,
 | 
			
		||||
      "maxUsersWithSameCredentials": 3,
 | 
			
		||||
      "externalPolicyFile": null,
 | 
			
		||||
      "backgroundPosition": "left_top",
 | 
			
		||||
      "backgroundRepeat": "no_repeat",
 | 
			
		||||
        "radiusServiceName": null,
 | 
			
		||||
        "expiryType": "unlimited",
 | 
			
		||||
      "radiusServiceId": 0,
 | 
			
		||||
      "expiryType": "time_limited",
 | 
			
		||||
      "userList": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994956,
 | 
			
		||||
                "expirationTime": 1602212794956,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Pac",
 | 
			
		||||
                    "lastName": "Man",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upO",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4e"
 | 
			
		||||
                    }
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602187594957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Q",
 | 
			
		||||
                    "lastName": "Bert",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqho",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:68"
 | 
			
		||||
                    }
 | 
			
		||||
      "macAllowList": [
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602788794957,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Duke",
 | 
			
		||||
                    "lastName": "Nukem",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upN",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4d"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602270394957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Missile",
 | 
			
		||||
                    "lastName": "Commander",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqhj",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:63"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "macAllowList": [],
 | 
			
		||||
      "profileType": "captive_portal"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1602183994959,
 | 
			
		||||
    "lastModifiedTimestamp": 1602183994959,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611857459118,
 | 
			
		||||
    "lastModifiedTimestamp": 1611857459118,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,14 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
        "id": 24,
 | 
			
		||||
    "id": 37,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint",
 | 
			
		||||
        "name": "TipWlan-Hotspot20-Config",
 | 
			
		||||
    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointProfile",
 | 
			
		||||
        "enableInterworkingAndHs20": true,
 | 
			
		||||
        "hessid": null,
 | 
			
		||||
        "passpointAccessNetworkType": "free_public_network",
 | 
			
		||||
        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
        "additionalStepsRequiredForAccess": 0,
 | 
			
		||||
        "deauthRequestTimeout": 0,
 | 
			
		||||
        "operatingClass": 0,
 | 
			
		||||
@@ -43,30 +45,27 @@
 | 
			
		||||
        "disableDownstreamGroupAddressedForwarding": false,
 | 
			
		||||
        "enable2pt4GHz": true,
 | 
			
		||||
        "enable5GHz": true,
 | 
			
		||||
            "associatedAccessSsidNames": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
        "associatedAccessSsidProfileIds": [
 | 
			
		||||
            32
 | 
			
		||||
        ],
 | 
			
		||||
            "osuSsidName": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
            "operatorProfileName": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
            "venueProfileName": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
            "idProviderProfileNames": [
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider"
 | 
			
		||||
        "osuSsidProfileId": 31,
 | 
			
		||||
        "passpointOperatorProfileId": 34,
 | 
			
		||||
        "passpointVenueProfileId": 33,
 | 
			
		||||
        "passpointOsuProviderProfileIds": [
 | 
			
		||||
            35,
 | 
			
		||||
            36
 | 
			
		||||
        ],
 | 
			
		||||
        "accessNetworkType": "free_public_network",
 | 
			
		||||
        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
            "associatedSsids": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
            ],
 | 
			
		||||
        "profileType": "passpoint"
 | 
			
		||||
    },
 | 
			
		||||
        "createdTimestamp": 1605711223339,
 | 
			
		||||
        "lastModifiedTimestamp": 1605711223339,
 | 
			
		||||
    "createdTimestamp": 0,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539331,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
            17,
 | 
			
		||||
            18,
 | 
			
		||||
            19,
 | 
			
		||||
            20
 | 
			
		||||
        33,
 | 
			
		||||
        34,
 | 
			
		||||
        35,
 | 
			
		||||
        36
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 19,
 | 
			
		||||
        "id": 35,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider",
 | 
			
		||||
        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "rogers.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -81,7 +80,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -89,7 +88,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -105,7 +104,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -113,7 +112,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -121,27 +120,23 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "BAA2D00100",
 | 
			
		||||
                "BAA2D00000"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165325,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165325,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539070,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539070,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 20,
 | 
			
		||||
        "id": 36,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "telus.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -215,7 +210,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -223,7 +218,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -239,7 +234,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -247,7 +242,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -255,16 +250,14 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "004096",
 | 
			
		||||
                "005014",
 | 
			
		||||
                "F4F5E8F5F4"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165330,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165330,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539131,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539131,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 22,
 | 
			
		||||
		"id": 10,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "service_metrics_collection_config",
 | 
			
		||||
		"name": "Metrics-Profile-Passpoint",
 | 
			
		||||
		"name": "Metrics-Profile-3-Radios",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "ServiceMetricsCollectionConfigProfile",
 | 
			
		||||
			"radioTypes": [
 | 
			
		||||
@@ -21,30 +21,6 @@
 | 
			
		||||
			],
 | 
			
		||||
			"metricConfigParameterMap": {
 | 
			
		||||
				"ApNode": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -69,18 +45,6 @@
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -92,9 +56,52 @@
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"ApSsid": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -108,13 +115,6 @@
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Client": [
 | 
			
		||||
@@ -144,12 +144,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -168,12 +168,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -192,41 +192,29 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Neighbour": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -251,18 +239,6 @@
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -286,13 +262,37 @@
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				]
 | 
			
		||||
			},
 | 
			
		||||
			"profileType": "service_metrics_collection_config"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711195528,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711195528,
 | 
			
		||||
		"createdTimestamp": 1606778369931,
 | 
			
		||||
		"lastModifiedTimestamp": 1606778369931,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 17,
 | 
			
		||||
    "id": 34,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_operator",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointOperatorProfile",
 | 
			
		||||
        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
			
		||||
@@ -12,26 +12,30 @@
 | 
			
		||||
        "operatorFriendlyName": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "domainNameList": [
 | 
			
		||||
            "bell.ca",
 | 
			
		||||
            "telus.com",
 | 
			
		||||
            "rogers.com"
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "passpoint_operator"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164952,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164952,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264539004,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539004,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -7,28 +7,18 @@
 | 
			
		||||
    "name": "Radius-Profile",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "RadiusProfile",
 | 
			
		||||
                "subnetConfiguration": null,
 | 
			
		||||
                "serviceRegionMap": {
 | 
			
		||||
                    "Ottawa": {
 | 
			
		||||
                        "model_type": "RadiusServiceRegion",
 | 
			
		||||
                        "serverMap": {
 | 
			
		||||
                            "Radius-Profile": [
 | 
			
		||||
                                {
 | 
			
		||||
      "primaryRadiusAuthServer": {
 | 
			
		||||
        "model_type": "RadiusServer",
 | 
			
		||||
        "ipAddress": "192.168.0.1",
 | 
			
		||||
        "secret": "testing123",
 | 
			
		||||
                                    "authPort": 1812,
 | 
			
		||||
        "port": 1812,
 | 
			
		||||
        "timeout": null
 | 
			
		||||
                                }
 | 
			
		||||
                            ]
 | 
			
		||||
                        },
 | 
			
		||||
                        "regionName": "Ottawa"
 | 
			
		||||
                    }
 | 
			
		||||
      },
 | 
			
		||||
      "profileType": "radius"
 | 
			
		||||
    },
 | 
			
		||||
            "createdTimestamp": 1601961451668,
 | 
			
		||||
            "lastModifiedTimestamp": 1601961451668,
 | 
			
		||||
            "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611262628767,
 | 
			
		||||
    "lastModifiedTimestamp": 1611262628767,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 21,
 | 
			
		||||
    "id": 4,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "rf",
 | 
			
		||||
	"name": "TipWlan-rf-passpoint",
 | 
			
		||||
    "name": "TipWlan-rf",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "RfConfiguration",
 | 
			
		||||
        "rfConfigMap": {
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHz",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "radioMode": "modeN",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -105,7 +105,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -152,7 +152,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzL",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -198,8 +198,7 @@
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "rf"
 | 
			
		||||
    },
 | 
			
		||||
	"createdTimestamp": 1605711191976,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711191976,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
	]
 | 
			
		||||
    "createdTimestamp": 1612285248650,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248650,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +1,27 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 15,
 | 
			
		||||
    "id": 2,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
    "name": "TipWlan-cloud-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
        "ssid": "TipWlan-cloud-3-radios",
 | 
			
		||||
        "appliedRadios": [
 | 
			
		||||
				"is5GHzL",
 | 
			
		||||
				"is5GHzU"
 | 
			
		||||
            "is5GHzU",
 | 
			
		||||
            "is2dot4GHz",
 | 
			
		||||
            "is5GHzL"
 | 
			
		||||
        ],
 | 
			
		||||
        "ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "wpa2PSK",
 | 
			
		||||
        "secureMode": "wpa2OnlyPSK",
 | 
			
		||||
        "vlanId": 1,
 | 
			
		||||
			"keyStr": "testing123",
 | 
			
		||||
        "keyStr": "openwifi",
 | 
			
		||||
        "broadcastSsid": "enabled",
 | 
			
		||||
        "keyRefresh": 0,
 | 
			
		||||
        "noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
        "radiusServiceId": 0,
 | 
			
		||||
        "radiusAcountingServiceInterval": 60,
 | 
			
		||||
        "captivePortalId": null,
 | 
			
		||||
        "bandwidthLimitDown": 0,
 | 
			
		||||
        "bandwidthLimitUp": 0,
 | 
			
		||||
@@ -28,7 +29,7 @@
 | 
			
		||||
        "clientBandwidthLimitUp": 0,
 | 
			
		||||
        "videoTrafficOnly": false,
 | 
			
		||||
        "radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -40,7 +41,7 @@
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
                "enable80211v": null
 | 
			
		||||
            },
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
            "is5GHz": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -56,79 +57,19 @@
 | 
			
		||||
        "bonjourGatewayProfileId": null,
 | 
			
		||||
        "enable80211w": null,
 | 
			
		||||
        "wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164949,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711223372,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			24
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 16,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
			"appliedRadios": [
 | 
			
		||||
				"is2dot4GHz"
 | 
			
		||||
			],
 | 
			
		||||
			"ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "open",
 | 
			
		||||
			"vlanId": 1,
 | 
			
		||||
			"keyStr": null,
 | 
			
		||||
			"broadcastSsid": "enabled",
 | 
			
		||||
			"keyRefresh": 0,
 | 
			
		||||
			"noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
			"captivePortalId": null,
 | 
			
		||||
			"bandwidthLimitDown": 0,
 | 
			
		||||
			"bandwidthLimitUp": 0,
 | 
			
		||||
			"clientBandwidthLimitDown": 0,
 | 
			
		||||
			"clientBandwidthLimitUp": 0,
 | 
			
		||||
			"videoTrafficOnly": false,
 | 
			
		||||
			"radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is2dot4GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzL": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
        "radiusClientConfiguration": {
 | 
			
		||||
            "model_type": "RadiusNasConfiguration",
 | 
			
		||||
            "nasClientId": "DEFAULT",
 | 
			
		||||
            "nasClientIp": "WAN_IP",
 | 
			
		||||
            "userDefinedNasId": null,
 | 
			
		||||
            "userDefinedNasIp": null,
 | 
			
		||||
            "operatorId": null
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
			"bonjourGatewayProfileId": null,
 | 
			
		||||
			"enable80211w": null,
 | 
			
		||||
			"wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164950,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711171732,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			19,
 | 
			
		||||
			20
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1612285248638,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248638,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 18,
 | 
			
		||||
    "id": 33,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_venue",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointVenueProfile",
 | 
			
		||||
        "venueNameSet": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Exemple de lieu",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Example passpoint_venue",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -28,16 +28,15 @@
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "venueTypeAssignment": {
 | 
			
		||||
				"model_type": "ProfileVenueTypeAssignment",
 | 
			
		||||
            "model_type": "PasspointVenueTypeAssignment",
 | 
			
		||||
            "venueDescription": "Research and Development Facility",
 | 
			
		||||
            "venueGroupId": 2,
 | 
			
		||||
            "venueTypeId": 8
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "passpoint_venue"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164956,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164956,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264538947,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264538947,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -174,7 +174,9 @@ RESTAPI_PROPS="$RESTAPI_PROPS -Dserver.port=4043"
 | 
			
		||||
 | 
			
		||||
SPRING_EXTRA_PROPS=" --add-opens java.base/java.lang=ALL-UNNAMED"
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS "
 | 
			
		||||
JVM_EXTRA_PROPS=" ${JVM_MEM_OPTIONS:- } "
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$JVM_EXTRA_PROPS $PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS "
 | 
			
		||||
 | 
			
		||||
echo Starting opensync wifi controller
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Equipment",
 | 
			
		||||
  "id": 51,
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
  "profileId": 5,
 | 
			
		||||
    "profileId": 8,
 | 
			
		||||
    "locationId": 8,
 | 
			
		||||
    "equipmentType": "AP",
 | 
			
		||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
			
		||||
  "name": "Test_Client_21P10C68818122",
 | 
			
		||||
    "inventoryId": "Open_AP_21P10C68818122",
 | 
			
		||||
    "name": "Open_AP_21P10C68818122",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApElementConfiguration",
 | 
			
		||||
        "equipmentModel": "EA8300-CA",
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
        "staticDnsIp1": null,
 | 
			
		||||
        "staticDnsIp2": null,
 | 
			
		||||
        "peerInfoList": [],
 | 
			
		||||
    "deviceName": "Default Device Name",
 | 
			
		||||
        "deviceName": "Open_AP_21P10C68818122",
 | 
			
		||||
        "locationData": null,
 | 
			
		||||
        "locallyConfiguredMgmtVlan": 0,
 | 
			
		||||
        "locallyConfigured": false,
 | 
			
		||||
@@ -32,73 +32,246 @@
 | 
			
		||||
        "costSavingEventsEnabled": true,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "channelNumber": 149,
 | 
			
		||||
                "manualChannelNumber": 149,
 | 
			
		||||
                "backupChannelNumber": 157,
 | 
			
		||||
                "manualBackupChannelNumber": 157,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 161,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 100,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 132,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 165,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 104,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 136,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 108,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 140,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 112,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 144,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 116,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 149,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 153,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 157,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "channelNumber": 6,
 | 
			
		||||
                "manualChannelNumber": 6,
 | 
			
		||||
                "backupChannelNumber": 11,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 11,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 6
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 1,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
      "is5GHzU": {
 | 
			
		||||
        "model_type": "ElementRadioConfiguration",
 | 
			
		||||
        "radioType": "is5GHzU",
 | 
			
		||||
        "channelNumber": 149,
 | 
			
		||||
        "manualChannelNumber": 149,
 | 
			
		||||
        "backupChannelNumber": 154,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
        "rxCellSizeDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 2,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "probeResponseThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 3,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "clientDisconnectThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 4,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "eirpTxPower": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 5,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "perimeterDetectionEnabled": true,
 | 
			
		||||
        "bestAPSteerType": "both",
 | 
			
		||||
        "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 149
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 6,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 7,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 8,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 9,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 10,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 11,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
@@ -106,33 +279,88 @@
 | 
			
		||||
                "channelNumber": 36,
 | 
			
		||||
                "manualChannelNumber": 36,
 | 
			
		||||
                "backupChannelNumber": 44,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 44,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 36
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 52,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 36,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 56,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 40,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 60,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 44,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 64,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 48,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "advancedRadioMap": {
 | 
			
		||||
@@ -143,22 +371,28 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
	          "dropInSnrPercentage": 30,
 | 
			
		||||
	          "minLoadFactor": 40
 | 
			
		||||
                        "dropInSnrPercentage": 20,
 | 
			
		||||
                        "minLoadFactor": 50
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
@@ -168,14 +402,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -184,6 +423,7 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
@@ -193,14 +433,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -209,13 +454,19 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "latitude": null,
 | 
			
		||||
    "longitude": null,
 | 
			
		||||
    "baseMacAddress": {
 | 
			
		||||
        "model_type": "MacAddress",
 | 
			
		||||
        "address": "JPWi7y5T",
 | 
			
		||||
        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
			
		||||
    },
 | 
			
		||||
    "serial": "21P10C68818122",
 | 
			
		||||
  "createdTimestamp": 1591653239821,
 | 
			
		||||
  "lastModifiedTimestamp": 1591653241398
 | 
			
		||||
    "createdTimestamp": 1612285288821,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285293922
 | 
			
		||||
}
 | 
			
		||||
@@ -7,54 +7,55 @@
 | 
			
		||||
    "name": "Ottawa",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "LocationDetails",
 | 
			
		||||
    "countryCode" : "ca",
 | 
			
		||||
    "maintenanceWindow" : null,
 | 
			
		||||
    "rrmEnabled" : true,
 | 
			
		||||
        "countryCode": "CA",
 | 
			
		||||
        "dailyActivityDetails": {
 | 
			
		||||
            "SUNDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "MONDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "TUESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "WEDNESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "THURSDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "FRIDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "SATURDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
  "createdTimestamp" : 1590607043540,
 | 
			
		||||
  "lastModifiedTimestamp" : 1590607043540
 | 
			
		||||
        "maintenanceWindow": null,
 | 
			
		||||
        "rrmEnabled": true,
 | 
			
		||||
        "timezone": "US/Eastern"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285243534,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285243534
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 23,
 | 
			
		||||
    "id": 8,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "equipment_ap",
 | 
			
		||||
	"name": "ApProfile-3-radios-passpoint",
 | 
			
		||||
    "name": "ApProfile-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApNetworkConfiguration",
 | 
			
		||||
        "networkConfigVersion": "AP-1",
 | 
			
		||||
@@ -20,11 +20,6 @@
 | 
			
		||||
        "syntheticClientEnabled": true,
 | 
			
		||||
        "ledControlEnabled": true,
 | 
			
		||||
        "equipmentDiscovery": false,
 | 
			
		||||
		"greTunnelName": null,
 | 
			
		||||
		"greParentIfName": null,
 | 
			
		||||
		"greLocalInetAddr": null,
 | 
			
		||||
		"greRemoteInetAddr": null,
 | 
			
		||||
		"greRemoteMacAddr": null,
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "RadioProfileConfiguration",
 | 
			
		||||
@@ -42,14 +37,22 @@
 | 
			
		||||
                "bestAPSteerType": "both"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
		"profileType": "equipment_ap"
 | 
			
		||||
	},
 | 
			
		||||
	"createdTimestamp": 1605711197140,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711197140,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
		16,
 | 
			
		||||
		21,
 | 
			
		||||
		22,
 | 
			
		||||
		15
 | 
			
		||||
        "greTunnelConfigurations": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "GreTunnelConfiguration",
 | 
			
		||||
                "greTunnelName": "gre1",
 | 
			
		||||
                "greRemoteInetAddr": "192.168.1.101",
 | 
			
		||||
                "vlanIdsInGreTunnel": [
 | 
			
		||||
                    100
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "equipment_ap"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285248925,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285628377,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
        2,
 | 
			
		||||
        4
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,135 +1,58 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
    "id": 14,
 | 
			
		||||
    "id": 5,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "captive_portal",
 | 
			
		||||
    "name": "Captive-portal",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "CaptivePortalConfiguration",
 | 
			
		||||
        "name": "Captive-portal",
 | 
			
		||||
        "browserTitle": "Access the network as Guest",
 | 
			
		||||
      "name": "Default",
 | 
			
		||||
      "browserTitle": "Captive-portal",
 | 
			
		||||
      "headerContent": "Captive Portal",
 | 
			
		||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
			
		||||
        "successPageMarkdownText": "Welcome to the network",
 | 
			
		||||
        "redirectURL": "",
 | 
			
		||||
      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
			
		||||
      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
			
		||||
      "redirectURL": "https://www.google.com",
 | 
			
		||||
      "externalCaptivePortalURL": null,
 | 
			
		||||
        "sessionTimeoutInMinutes": 60,
 | 
			
		||||
        "logoFile": null,
 | 
			
		||||
        "backgroundFile": null,
 | 
			
		||||
        "walledGardenAllowlist": [],
 | 
			
		||||
        "usernamePasswordFile": {
 | 
			
		||||
      "sessionTimeoutInMinutes": 10,
 | 
			
		||||
      "logoFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
            "apExportUrl": "userList",
 | 
			
		||||
            "fileCategory": "UsernamePasswordList",
 | 
			
		||||
            "fileType": "TEXT",
 | 
			
		||||
            "altSlot": true
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
			
		||||
        "fileCategory": "CaptivePortalLogo",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "backgroundFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo",
 | 
			
		||||
        "fileCategory": "CaptivePortalBackground",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "walledGardenAllowlist": [
 | 
			
		||||
      ],
 | 
			
		||||
      "usernamePasswordFile": null,
 | 
			
		||||
      "authenticationType": "guest",
 | 
			
		||||
      "radiusAuthMethod": "CHAP",
 | 
			
		||||
        "maxUsersWithSameCredentials": 42,
 | 
			
		||||
      "maxUsersWithSameCredentials": 3,
 | 
			
		||||
      "externalPolicyFile": null,
 | 
			
		||||
      "backgroundPosition": "left_top",
 | 
			
		||||
      "backgroundRepeat": "no_repeat",
 | 
			
		||||
        "radiusServiceName": null,
 | 
			
		||||
        "expiryType": "unlimited",
 | 
			
		||||
      "radiusServiceId": 0,
 | 
			
		||||
      "expiryType": "time_limited",
 | 
			
		||||
      "userList": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994956,
 | 
			
		||||
                "expirationTime": 1602212794956,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Pac",
 | 
			
		||||
                    "lastName": "Man",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upO",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4e"
 | 
			
		||||
                    }
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602187594957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Q",
 | 
			
		||||
                    "lastName": "Bert",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqho",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:68"
 | 
			
		||||
                    }
 | 
			
		||||
      "macAllowList": [
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602788794957,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Duke",
 | 
			
		||||
                    "lastName": "Nukem",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upN",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4d"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602270394957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Missile",
 | 
			
		||||
                    "lastName": "Commander",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqhj",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:63"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "macAllowList": [],
 | 
			
		||||
      "profileType": "captive_portal"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1602183994959,
 | 
			
		||||
    "lastModifiedTimestamp": 1602183994959,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611857459118,
 | 
			
		||||
    "lastModifiedTimestamp": 1611857459118,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,14 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
        "id": 24,
 | 
			
		||||
    "id": 37,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint",
 | 
			
		||||
        "name": "TipWlan-Hotspot20-Config",
 | 
			
		||||
    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointProfile",
 | 
			
		||||
        "enableInterworkingAndHs20": true,
 | 
			
		||||
        "hessid": null,
 | 
			
		||||
        "passpointAccessNetworkType": "free_public_network",
 | 
			
		||||
        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
        "additionalStepsRequiredForAccess": 0,
 | 
			
		||||
        "deauthRequestTimeout": 0,
 | 
			
		||||
        "operatingClass": 0,
 | 
			
		||||
@@ -43,30 +45,27 @@
 | 
			
		||||
        "disableDownstreamGroupAddressedForwarding": false,
 | 
			
		||||
        "enable2pt4GHz": true,
 | 
			
		||||
        "enable5GHz": true,
 | 
			
		||||
            "associatedAccessSsidNames": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
        "associatedAccessSsidProfileIds": [
 | 
			
		||||
            32
 | 
			
		||||
        ],
 | 
			
		||||
            "osuSsidName": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
            "operatorProfileName": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
            "venueProfileName": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
            "idProviderProfileNames": [
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider"
 | 
			
		||||
        "osuSsidProfileId": 31,
 | 
			
		||||
        "passpointOperatorProfileId": 34,
 | 
			
		||||
        "passpointVenueProfileId": 33,
 | 
			
		||||
        "passpointOsuProviderProfileIds": [
 | 
			
		||||
            35,
 | 
			
		||||
            36
 | 
			
		||||
        ],
 | 
			
		||||
        "accessNetworkType": "free_public_network",
 | 
			
		||||
        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
            "associatedSsids": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
            ],
 | 
			
		||||
        "profileType": "passpoint"
 | 
			
		||||
    },
 | 
			
		||||
        "createdTimestamp": 1605711223339,
 | 
			
		||||
        "lastModifiedTimestamp": 1605711223339,
 | 
			
		||||
    "createdTimestamp": 0,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539331,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
            17,
 | 
			
		||||
            18,
 | 
			
		||||
            19,
 | 
			
		||||
            20
 | 
			
		||||
        33,
 | 
			
		||||
        34,
 | 
			
		||||
        35,
 | 
			
		||||
        36
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 19,
 | 
			
		||||
        "id": 35,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider",
 | 
			
		||||
        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "rogers.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -81,7 +80,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -89,7 +88,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -105,7 +104,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -113,7 +112,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -121,27 +120,23 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "BAA2D00100",
 | 
			
		||||
                "BAA2D00000"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165325,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165325,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539070,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539070,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 20,
 | 
			
		||||
        "id": 36,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "telus.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -215,7 +210,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -223,7 +218,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -239,7 +234,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -247,7 +242,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -255,16 +250,14 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "004096",
 | 
			
		||||
                "005014",
 | 
			
		||||
                "F4F5E8F5F4"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165330,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165330,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539131,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539131,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 22,
 | 
			
		||||
		"id": 10,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "service_metrics_collection_config",
 | 
			
		||||
		"name": "Metrics-Profile-Passpoint",
 | 
			
		||||
		"name": "Metrics-Profile-3-Radios",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "ServiceMetricsCollectionConfigProfile",
 | 
			
		||||
			"radioTypes": [
 | 
			
		||||
@@ -21,30 +21,6 @@
 | 
			
		||||
			],
 | 
			
		||||
			"metricConfigParameterMap": {
 | 
			
		||||
				"ApNode": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -69,18 +45,6 @@
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -92,9 +56,52 @@
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"ApSsid": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -108,13 +115,6 @@
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Client": [
 | 
			
		||||
@@ -144,12 +144,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -168,12 +168,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -192,41 +192,29 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Neighbour": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -251,18 +239,6 @@
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -286,13 +262,37 @@
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				]
 | 
			
		||||
			},
 | 
			
		||||
			"profileType": "service_metrics_collection_config"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711195528,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711195528,
 | 
			
		||||
		"createdTimestamp": 1606778369931,
 | 
			
		||||
		"lastModifiedTimestamp": 1606778369931,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 17,
 | 
			
		||||
    "id": 34,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_operator",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointOperatorProfile",
 | 
			
		||||
        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
			
		||||
@@ -12,26 +12,30 @@
 | 
			
		||||
        "operatorFriendlyName": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "domainNameList": [
 | 
			
		||||
            "bell.ca",
 | 
			
		||||
            "telus.com",
 | 
			
		||||
            "rogers.com"
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "passpoint_operator"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164952,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164952,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264539004,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539004,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -7,28 +7,18 @@
 | 
			
		||||
    "name": "Radius-Profile",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "RadiusProfile",
 | 
			
		||||
                "subnetConfiguration": null,
 | 
			
		||||
                "serviceRegionMap": {
 | 
			
		||||
                    "Ottawa": {
 | 
			
		||||
                        "model_type": "RadiusServiceRegion",
 | 
			
		||||
                        "serverMap": {
 | 
			
		||||
                            "Radius-Profile": [
 | 
			
		||||
                                {
 | 
			
		||||
      "primaryRadiusAuthServer": {
 | 
			
		||||
        "model_type": "RadiusServer",
 | 
			
		||||
        "ipAddress": "192.168.0.1",
 | 
			
		||||
        "secret": "testing123",
 | 
			
		||||
                                    "authPort": 1812,
 | 
			
		||||
        "port": 1812,
 | 
			
		||||
        "timeout": null
 | 
			
		||||
                                }
 | 
			
		||||
                            ]
 | 
			
		||||
                        },
 | 
			
		||||
                        "regionName": "Ottawa"
 | 
			
		||||
                    }
 | 
			
		||||
      },
 | 
			
		||||
      "profileType": "radius"
 | 
			
		||||
    },
 | 
			
		||||
            "createdTimestamp": 1601961451668,
 | 
			
		||||
            "lastModifiedTimestamp": 1601961451668,
 | 
			
		||||
            "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611262628767,
 | 
			
		||||
    "lastModifiedTimestamp": 1611262628767,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 21,
 | 
			
		||||
    "id": 4,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "rf",
 | 
			
		||||
	"name": "TipWlan-rf-passpoint",
 | 
			
		||||
    "name": "TipWlan-rf",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "RfConfiguration",
 | 
			
		||||
        "rfConfigMap": {
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHz",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "radioMode": "modeN",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -105,7 +105,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -152,7 +152,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzL",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -198,8 +198,7 @@
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "rf"
 | 
			
		||||
    },
 | 
			
		||||
	"createdTimestamp": 1605711191976,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711191976,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
	]
 | 
			
		||||
    "createdTimestamp": 1612285248650,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248650,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +1,27 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 15,
 | 
			
		||||
    "id": 2,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
    "name": "TipWlan-cloud-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
        "ssid": "TipWlan-cloud-3-radios",
 | 
			
		||||
        "appliedRadios": [
 | 
			
		||||
				"is5GHzL",
 | 
			
		||||
				"is5GHzU"
 | 
			
		||||
            "is5GHzU",
 | 
			
		||||
            "is2dot4GHz",
 | 
			
		||||
            "is5GHzL"
 | 
			
		||||
        ],
 | 
			
		||||
        "ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "wpa2PSK",
 | 
			
		||||
        "secureMode": "wpa2OnlyPSK",
 | 
			
		||||
        "vlanId": 1,
 | 
			
		||||
			"keyStr": "testing123",
 | 
			
		||||
        "keyStr": "openwifi",
 | 
			
		||||
        "broadcastSsid": "enabled",
 | 
			
		||||
        "keyRefresh": 0,
 | 
			
		||||
        "noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
        "radiusServiceId": 0,
 | 
			
		||||
        "radiusAcountingServiceInterval": 60,
 | 
			
		||||
        "captivePortalId": null,
 | 
			
		||||
        "bandwidthLimitDown": 0,
 | 
			
		||||
        "bandwidthLimitUp": 0,
 | 
			
		||||
@@ -28,7 +29,7 @@
 | 
			
		||||
        "clientBandwidthLimitUp": 0,
 | 
			
		||||
        "videoTrafficOnly": false,
 | 
			
		||||
        "radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -40,7 +41,7 @@
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
                "enable80211v": null
 | 
			
		||||
            },
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
            "is5GHz": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -56,79 +57,19 @@
 | 
			
		||||
        "bonjourGatewayProfileId": null,
 | 
			
		||||
        "enable80211w": null,
 | 
			
		||||
        "wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164949,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711223372,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			24
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 16,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
			"appliedRadios": [
 | 
			
		||||
				"is2dot4GHz"
 | 
			
		||||
			],
 | 
			
		||||
			"ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "open",
 | 
			
		||||
			"vlanId": 1,
 | 
			
		||||
			"keyStr": null,
 | 
			
		||||
			"broadcastSsid": "enabled",
 | 
			
		||||
			"keyRefresh": 0,
 | 
			
		||||
			"noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
			"captivePortalId": null,
 | 
			
		||||
			"bandwidthLimitDown": 0,
 | 
			
		||||
			"bandwidthLimitUp": 0,
 | 
			
		||||
			"clientBandwidthLimitDown": 0,
 | 
			
		||||
			"clientBandwidthLimitUp": 0,
 | 
			
		||||
			"videoTrafficOnly": false,
 | 
			
		||||
			"radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is2dot4GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzL": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
        "radiusClientConfiguration": {
 | 
			
		||||
            "model_type": "RadiusNasConfiguration",
 | 
			
		||||
            "nasClientId": "DEFAULT",
 | 
			
		||||
            "nasClientIp": "WAN_IP",
 | 
			
		||||
            "userDefinedNasId": null,
 | 
			
		||||
            "userDefinedNasIp": null,
 | 
			
		||||
            "operatorId": null
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
			"bonjourGatewayProfileId": null,
 | 
			
		||||
			"enable80211w": null,
 | 
			
		||||
			"wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164950,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711171732,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			19,
 | 
			
		||||
			20
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1612285248638,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248638,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 18,
 | 
			
		||||
    "id": 33,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_venue",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointVenueProfile",
 | 
			
		||||
        "venueNameSet": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Exemple de lieu",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Example passpoint_venue",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -28,16 +28,15 @@
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "venueTypeAssignment": {
 | 
			
		||||
				"model_type": "ProfileVenueTypeAssignment",
 | 
			
		||||
            "model_type": "PasspointVenueTypeAssignment",
 | 
			
		||||
            "venueDescription": "Research and Development Facility",
 | 
			
		||||
            "venueGroupId": 2,
 | 
			
		||||
            "venueTypeId": 8
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "passpoint_venue"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164956,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164956,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264538947,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264538947,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -56,6 +56,8 @@ RESTAPI_PROPS+=" -Dserver.port=443"
 | 
			
		||||
 | 
			
		||||
SPRING_EXTRA_PROPS=" --add-opens java.base/java.lang=ALL-UNNAMED"
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS"
 | 
			
		||||
JVM_EXTRA_PROPS=" ${JVM_MEM_OPTIONS:- } "
 | 
			
		||||
 | 
			
		||||
export ALL_PROPS="$JVM_EXTRA_PROPS $PROFILES $SSL_PROPS $CLIENT_MQTT_SSL_PROPS $OVSDB_PROPS $MQTT_PROPS $LOGGING_PROPS $RESTAPI_PROPS $SPRING_EXTRA_PROPS"
 | 
			
		||||
 | 
			
		||||
java $ALL_PROPS -jar app.jar
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-gateway-static-process</artifactId>
 | 
			
		||||
@@ -18,7 +18,7 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-ext-static</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
	</dependencies>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Equipment",
 | 
			
		||||
  "id": 51,
 | 
			
		||||
    "id": 1,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
  "profileId": 5,
 | 
			
		||||
    "profileId": 8,
 | 
			
		||||
    "locationId": 8,
 | 
			
		||||
    "equipmentType": "AP",
 | 
			
		||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
			
		||||
  "name": "Test_Client_21P10C68818122",
 | 
			
		||||
    "inventoryId": "Open_AP_21P10C68818122",
 | 
			
		||||
    "name": "Open_AP_21P10C68818122",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApElementConfiguration",
 | 
			
		||||
        "equipmentModel": "EA8300-CA",
 | 
			
		||||
@@ -21,7 +21,7 @@
 | 
			
		||||
        "staticDnsIp1": null,
 | 
			
		||||
        "staticDnsIp2": null,
 | 
			
		||||
        "peerInfoList": [],
 | 
			
		||||
    "deviceName": "Default Device Name",
 | 
			
		||||
        "deviceName": "Open_AP_21P10C68818122",
 | 
			
		||||
        "locationData": null,
 | 
			
		||||
        "locallyConfiguredMgmtVlan": 0,
 | 
			
		||||
        "locallyConfigured": false,
 | 
			
		||||
@@ -32,73 +32,246 @@
 | 
			
		||||
        "costSavingEventsEnabled": true,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "channelNumber": 149,
 | 
			
		||||
                "manualChannelNumber": 149,
 | 
			
		||||
                "backupChannelNumber": 157,
 | 
			
		||||
                "manualBackupChannelNumber": 157,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 161,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 100,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 132,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 165,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 104,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 136,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 108,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 140,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 112,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 144,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 116,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 149,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 153,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 157,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "channelNumber": 6,
 | 
			
		||||
                "manualChannelNumber": 6,
 | 
			
		||||
                "backupChannelNumber": 11,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 11,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 6
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 1,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
      "is5GHzU": {
 | 
			
		||||
        "model_type": "ElementRadioConfiguration",
 | 
			
		||||
        "radioType": "is5GHzU",
 | 
			
		||||
        "channelNumber": 149,
 | 
			
		||||
        "manualChannelNumber": 149,
 | 
			
		||||
        "backupChannelNumber": 154,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
        "rxCellSizeDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 2,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "probeResponseThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 3,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "clientDisconnectThresholdDb": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": -90
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 4,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "eirpTxPower": {
 | 
			
		||||
          "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 5,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
        "perimeterDetectionEnabled": true,
 | 
			
		||||
        "bestAPSteerType": "both",
 | 
			
		||||
        "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 149
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 6,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 7,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 8,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 9,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 10,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 11,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 20
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
                "model_type": "ElementRadioConfiguration",
 | 
			
		||||
@@ -106,33 +279,88 @@
 | 
			
		||||
                "channelNumber": 36,
 | 
			
		||||
                "manualChannelNumber": 36,
 | 
			
		||||
                "backupChannelNumber": 44,
 | 
			
		||||
        "bannedChannels": [],
 | 
			
		||||
        "allowedChannels": [],
 | 
			
		||||
                "manualBackupChannelNumber": 44,
 | 
			
		||||
                "rxCellSizeDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "probeResponseThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "clientDisconnectThresholdDb": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": -90
 | 
			
		||||
                },
 | 
			
		||||
                "eirpTxPower": {
 | 
			
		||||
                    "model_type": "SourceSelectionValue",
 | 
			
		||||
        	 "source": "auto",
 | 
			
		||||
          "value": 32
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": 18
 | 
			
		||||
                },
 | 
			
		||||
                "perimeterDetectionEnabled": true,
 | 
			
		||||
                "bestAPSteerType": "both",
 | 
			
		||||
                "deauthAttackDetection": null,
 | 
			
		||||
        "allowedChannelsPowerLevels": [],
 | 
			
		||||
        "activeChannel": 36
 | 
			
		||||
                "allowedChannelsPowerLevels": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 52,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 36,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 56,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 40,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 60,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 44,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 64,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": true,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "ChannelPowerLevel",
 | 
			
		||||
                        "channelNumber": 48,
 | 
			
		||||
                        "powerLevel": 18,
 | 
			
		||||
                        "dfs": false,
 | 
			
		||||
                        "channelWidth": 80
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "advancedRadioMap": {
 | 
			
		||||
@@ -143,22 +371,28 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
	          "dropInSnrPercentage": 30,
 | 
			
		||||
	          "minLoadFactor": 40
 | 
			
		||||
                        "dropInSnrPercentage": 20,
 | 
			
		||||
                        "minLoadFactor": 50
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
@@ -168,14 +402,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -184,6 +423,7 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            },
 | 
			
		||||
            "is5GHzL": {
 | 
			
		||||
@@ -193,14 +433,19 @@
 | 
			
		||||
                "fragmentationThresholdBytes": 2346,
 | 
			
		||||
                "uapsdState": "enabled",
 | 
			
		||||
                "stationIsolation": "disabled",
 | 
			
		||||
                "multicastRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionMulticast",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "managementRate": {
 | 
			
		||||
                    "model_type": "SourceSelectionManagement",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "profile",
 | 
			
		||||
                    "value": "auto"
 | 
			
		||||
                },
 | 
			
		||||
                "bestApSettings": {
 | 
			
		||||
                    "model_type": "SourceSelectionSteering",
 | 
			
		||||
          "source": "auto",
 | 
			
		||||
                    "source": "manual",
 | 
			
		||||
                    "value": {
 | 
			
		||||
                        "model_type": "RadioBestApSettings",
 | 
			
		||||
                        "mlComputed": true,
 | 
			
		||||
@@ -209,13 +454,19 @@
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "legacyBSSRate": "enabled",
 | 
			
		||||
                "dtimPeriod": 2,
 | 
			
		||||
                "deauthAttackDetection": null
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "latitude": null,
 | 
			
		||||
    "longitude": null,
 | 
			
		||||
    "baseMacAddress": {
 | 
			
		||||
        "model_type": "MacAddress",
 | 
			
		||||
        "address": "JPWi7y5T",
 | 
			
		||||
        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
			
		||||
    },
 | 
			
		||||
    "serial": "21P10C68818122",
 | 
			
		||||
  "createdTimestamp": 1591653239821,
 | 
			
		||||
  "lastModifiedTimestamp": 1591653241398
 | 
			
		||||
    "createdTimestamp": 1612285288821,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285293922
 | 
			
		||||
}
 | 
			
		||||
@@ -7,54 +7,55 @@
 | 
			
		||||
    "name": "Ottawa",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "LocationDetails",
 | 
			
		||||
    "countryCode" : "ca",
 | 
			
		||||
    "maintenanceWindow" : null,
 | 
			
		||||
    "rrmEnabled" : true,
 | 
			
		||||
        "countryCode": "CA",
 | 
			
		||||
        "dailyActivityDetails": {
 | 
			
		||||
            "SUNDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "MONDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "TUESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "WEDNESDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "THURSDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "FRIDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            },
 | 
			
		||||
            "SATURDAY": {
 | 
			
		||||
                "model_type": "LocationActivityDetails",
 | 
			
		||||
                "busyTime": "13:30",
 | 
			
		||||
        "quietTime" : "3:30",
 | 
			
		||||
                "quietTime": "3:00",
 | 
			
		||||
                "timezone": "US/Eastern"
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
  "createdTimestamp" : 1590607043540,
 | 
			
		||||
  "lastModifiedTimestamp" : 1590607043540
 | 
			
		||||
        "maintenanceWindow": null,
 | 
			
		||||
        "rrmEnabled": true,
 | 
			
		||||
        "timezone": "US/Eastern"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285243534,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285243534
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 23,
 | 
			
		||||
    "id": 8,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "equipment_ap",
 | 
			
		||||
	"name": "ApProfile-3-radios-passpoint",
 | 
			
		||||
    "name": "ApProfile-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "ApNetworkConfiguration",
 | 
			
		||||
        "networkConfigVersion": "AP-1",
 | 
			
		||||
@@ -20,11 +20,6 @@
 | 
			
		||||
        "syntheticClientEnabled": true,
 | 
			
		||||
        "ledControlEnabled": true,
 | 
			
		||||
        "equipmentDiscovery": false,
 | 
			
		||||
		"greTunnelName": null,
 | 
			
		||||
		"greParentIfName": null,
 | 
			
		||||
		"greLocalInetAddr": null,
 | 
			
		||||
		"greRemoteInetAddr": null,
 | 
			
		||||
		"greRemoteMacAddr": null,
 | 
			
		||||
        "radioMap": {
 | 
			
		||||
            "is2dot4GHz": {
 | 
			
		||||
                "model_type": "RadioProfileConfiguration",
 | 
			
		||||
@@ -42,14 +37,22 @@
 | 
			
		||||
                "bestAPSteerType": "both"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
		"profileType": "equipment_ap"
 | 
			
		||||
	},
 | 
			
		||||
	"createdTimestamp": 1605711197140,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711197140,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
		16,
 | 
			
		||||
		21,
 | 
			
		||||
		22,
 | 
			
		||||
		15
 | 
			
		||||
        "greTunnelConfigurations": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "GreTunnelConfiguration",
 | 
			
		||||
                "greTunnelName": "gre1",
 | 
			
		||||
                "greRemoteInetAddr": "192.168.1.101",
 | 
			
		||||
                "vlanIdsInGreTunnel": [
 | 
			
		||||
                    100
 | 
			
		||||
                ]
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "equipment_ap"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1612285248925,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285628377,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
        2,
 | 
			
		||||
        4
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -1,135 +1,58 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
    "id": 14,
 | 
			
		||||
    "id": 5,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "captive_portal",
 | 
			
		||||
    "name": "Captive-portal",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "CaptivePortalConfiguration",
 | 
			
		||||
        "name": "Captive-portal",
 | 
			
		||||
        "browserTitle": "Access the network as Guest",
 | 
			
		||||
      "name": "Default",
 | 
			
		||||
      "browserTitle": "Captive-portal",
 | 
			
		||||
      "headerContent": "Captive Portal",
 | 
			
		||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
			
		||||
        "successPageMarkdownText": "Welcome to the network",
 | 
			
		||||
        "redirectURL": "",
 | 
			
		||||
      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
			
		||||
      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
			
		||||
      "redirectURL": "https://www.google.com",
 | 
			
		||||
      "externalCaptivePortalURL": null,
 | 
			
		||||
        "sessionTimeoutInMinutes": 60,
 | 
			
		||||
        "logoFile": null,
 | 
			
		||||
        "backgroundFile": null,
 | 
			
		||||
        "walledGardenAllowlist": [],
 | 
			
		||||
        "usernamePasswordFile": {
 | 
			
		||||
      "sessionTimeoutInMinutes": 10,
 | 
			
		||||
      "logoFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
            "apExportUrl": "userList",
 | 
			
		||||
            "fileCategory": "UsernamePasswordList",
 | 
			
		||||
            "fileType": "TEXT",
 | 
			
		||||
            "altSlot": true
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
			
		||||
        "fileCategory": "CaptivePortalLogo",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "backgroundFile": {
 | 
			
		||||
        "model_type": "ManagedFileInfo",
 | 
			
		||||
        "md5checksum": null,
 | 
			
		||||
        "lastModifiedTimestamp": null,
 | 
			
		||||
        "apExportUrl": "/filestore/tip-logo",
 | 
			
		||||
        "fileCategory": "CaptivePortalBackground",
 | 
			
		||||
        "fileType": "PNG",
 | 
			
		||||
        "altSlot": false
 | 
			
		||||
      },
 | 
			
		||||
      "walledGardenAllowlist": [
 | 
			
		||||
      ],
 | 
			
		||||
      "usernamePasswordFile": null,
 | 
			
		||||
      "authenticationType": "guest",
 | 
			
		||||
      "radiusAuthMethod": "CHAP",
 | 
			
		||||
        "maxUsersWithSameCredentials": 42,
 | 
			
		||||
      "maxUsersWithSameCredentials": 3,
 | 
			
		||||
      "externalPolicyFile": null,
 | 
			
		||||
      "backgroundPosition": "left_top",
 | 
			
		||||
      "backgroundRepeat": "no_repeat",
 | 
			
		||||
        "radiusServiceName": null,
 | 
			
		||||
        "expiryType": "unlimited",
 | 
			
		||||
      "radiusServiceId": 0,
 | 
			
		||||
      "expiryType": "time_limited",
 | 
			
		||||
      "userList": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994956,
 | 
			
		||||
                "expirationTime": 1602212794956,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Pac",
 | 
			
		||||
                    "lastName": "Man",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upO",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4e"
 | 
			
		||||
                    }
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer",
 | 
			
		||||
                "password": "testing123",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602187594957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Q",
 | 
			
		||||
                    "lastName": "Bert",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqho",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:68"
 | 
			
		||||
                    }
 | 
			
		||||
      "macAllowList": [
 | 
			
		||||
      ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602788794957,
 | 
			
		||||
                "numDevices": 1,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Duke",
 | 
			
		||||
                    "lastName": "Nukem",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "fKtg5upN",
 | 
			
		||||
                        "addressAsString": "7c:ab:60:e6:ea:4d"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "TimedAccessUserRecord",
 | 
			
		||||
                "username": "customer2",
 | 
			
		||||
                "password": "testing1234",
 | 
			
		||||
                "activationTime": 1602183994957,
 | 
			
		||||
                "expirationTime": 1602270394957,
 | 
			
		||||
                "numDevices": 0,
 | 
			
		||||
                "userDetails": {
 | 
			
		||||
                    "model_type": "TimedAccessUserDetails",
 | 
			
		||||
                    "firstName": "Missile",
 | 
			
		||||
                    "lastName": "Commander",
 | 
			
		||||
                    "passwordNeedsReset": false
 | 
			
		||||
                },
 | 
			
		||||
                "userMacAddresses": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "model_type": "MacAddress",
 | 
			
		||||
                        "address": "wJrQdqhj",
 | 
			
		||||
                        "addressAsString": "c0:9a:d0:76:a8:63"
 | 
			
		||||
                    }
 | 
			
		||||
                ],
 | 
			
		||||
                "lastModifiedTimestamp": 0
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "macAllowList": [],
 | 
			
		||||
      "profileType": "captive_portal"
 | 
			
		||||
    },
 | 
			
		||||
    "createdTimestamp": 1602183994959,
 | 
			
		||||
    "lastModifiedTimestamp": 1602183994959,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611857459118,
 | 
			
		||||
    "lastModifiedTimestamp": 1611857459118,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,14 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
        "id": 24,
 | 
			
		||||
    "id": 37,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint",
 | 
			
		||||
        "name": "TipWlan-Hotspot20-Config",
 | 
			
		||||
    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointProfile",
 | 
			
		||||
        "enableInterworkingAndHs20": true,
 | 
			
		||||
        "hessid": null,
 | 
			
		||||
        "passpointAccessNetworkType": "free_public_network",
 | 
			
		||||
        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
        "additionalStepsRequiredForAccess": 0,
 | 
			
		||||
        "deauthRequestTimeout": 0,
 | 
			
		||||
        "operatingClass": 0,
 | 
			
		||||
@@ -43,30 +45,27 @@
 | 
			
		||||
        "disableDownstreamGroupAddressedForwarding": false,
 | 
			
		||||
        "enable2pt4GHz": true,
 | 
			
		||||
        "enable5GHz": true,
 | 
			
		||||
            "associatedAccessSsidNames": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
        "associatedAccessSsidProfileIds": [
 | 
			
		||||
            32
 | 
			
		||||
        ],
 | 
			
		||||
            "osuSsidName": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
            "operatorProfileName": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
            "venueProfileName": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
            "idProviderProfileNames": [
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
                "TipWlan-Hotspot20-OSU-Provider"
 | 
			
		||||
        "osuSsidProfileId": 31,
 | 
			
		||||
        "passpointOperatorProfileId": 34,
 | 
			
		||||
        "passpointVenueProfileId": 33,
 | 
			
		||||
        "passpointOsuProviderProfileIds": [
 | 
			
		||||
            35,
 | 
			
		||||
            36
 | 
			
		||||
        ],
 | 
			
		||||
        "accessNetworkType": "free_public_network",
 | 
			
		||||
        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
			
		||||
            "associatedSsids": [
 | 
			
		||||
                "TipWlan-cloud-hotspot-access"
 | 
			
		||||
            ],
 | 
			
		||||
        "profileType": "passpoint"
 | 
			
		||||
    },
 | 
			
		||||
        "createdTimestamp": 1605711223339,
 | 
			
		||||
        "lastModifiedTimestamp": 1605711223339,
 | 
			
		||||
    "createdTimestamp": 0,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539331,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
            17,
 | 
			
		||||
            18,
 | 
			
		||||
            19,
 | 
			
		||||
            20
 | 
			
		||||
        33,
 | 
			
		||||
        34,
 | 
			
		||||
        35,
 | 
			
		||||
        36
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 19,
 | 
			
		||||
        "id": 35,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider",
 | 
			
		||||
        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "rogers.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -81,7 +80,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -89,7 +88,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -105,7 +104,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -113,7 +112,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services rogers",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -121,27 +120,23 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "BAA2D00100",
 | 
			
		||||
                "BAA2D00000"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165325,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165325,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539070,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539070,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "model_type": "Profile",
 | 
			
		||||
		"id": 20,
 | 
			
		||||
        "id": 36,
 | 
			
		||||
        "customerId": 2,
 | 
			
		||||
        "profileType": "passpoint_osu_id_provider",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-OSU-Provider-2",
 | 
			
		||||
        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
			
		||||
        "details": {
 | 
			
		||||
            "model_type": "PasspointOsuProviderProfile",
 | 
			
		||||
			"domainName": "telus.com",
 | 
			
		||||
            "mccMncList": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointMccMnc",
 | 
			
		||||
@@ -215,7 +210,7 @@
 | 
			
		||||
            "osuFriendlyName": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example provider telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -223,7 +218,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemple de fournisseur telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -239,7 +234,7 @@
 | 
			
		||||
            "osuServiceDescription": [
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                    "locale": "eng",
 | 
			
		||||
                    "dupleIso3Language": "eng",
 | 
			
		||||
                    "dupleName": "Example services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -247,7 +242,7 @@
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                    "locale": "fra",
 | 
			
		||||
                    "dupleIso3Language": "fra",
 | 
			
		||||
                    "dupleName": "Exemples de services telus",
 | 
			
		||||
                    "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -255,16 +250,14 @@
 | 
			
		||||
                }
 | 
			
		||||
            ],
 | 
			
		||||
            "roamingOi": [
 | 
			
		||||
				1,
 | 
			
		||||
				2,
 | 
			
		||||
				3,
 | 
			
		||||
				4
 | 
			
		||||
                "004096",
 | 
			
		||||
                "005014",
 | 
			
		||||
                "F4F5E8F5F4"
 | 
			
		||||
            ],
 | 
			
		||||
            "profileType": "passpoint_osu_id_provider"
 | 
			
		||||
        },
 | 
			
		||||
		"createdTimestamp": 1605711165330,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711165330,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
        "createdTimestamp": 1611264539131,
 | 
			
		||||
        "lastModifiedTimestamp": 1611264539131,
 | 
			
		||||
        "childProfileIds": []
 | 
			
		||||
    }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 22,
 | 
			
		||||
		"id": 10,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
		"profileType": "service_metrics_collection_config",
 | 
			
		||||
		"name": "Metrics-Profile-Passpoint",
 | 
			
		||||
		"name": "Metrics-Profile-3-Radios",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "ServiceMetricsCollectionConfigProfile",
 | 
			
		||||
			"radioTypes": [
 | 
			
		||||
@@ -21,30 +21,6 @@
 | 
			
		||||
			],
 | 
			
		||||
			"metricConfigParameterMap": {
 | 
			
		||||
				"ApNode": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -69,18 +45,6 @@
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -92,9 +56,52 @@
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "ApNode",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"ApSsid": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -108,13 +115,6 @@
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "ApSsid"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Client": [
 | 
			
		||||
@@ -144,12 +144,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -168,12 +168,12 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
@@ -192,41 +192,29 @@
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Channel",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				],
 | 
			
		||||
				"Neighbour": [
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -251,18 +239,6 @@
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
@@ -286,13 +262,37 @@
 | 
			
		||||
						"radioType": "is5GHzU",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 120,
 | 
			
		||||
						"channelSurveyType": "OFF_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is5GHzL",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						"model_type": "ServiceMetricSurveyConfigParameters",
 | 
			
		||||
						"samplingInterval": 30,
 | 
			
		||||
						"reportingIntervalSeconds": 60,
 | 
			
		||||
						"channelSurveyType": "ON_CHANNEL",
 | 
			
		||||
						"scanIntervalMillis": 0,
 | 
			
		||||
						"percentUtilizationThreshold": 10,
 | 
			
		||||
						"delayMillisecondsThreshold": 600,
 | 
			
		||||
						"radioType": "is2dot4GHz",
 | 
			
		||||
						"serviceMetricDataType": "Neighbour",
 | 
			
		||||
						"statsReportFormat": "RAW"
 | 
			
		||||
					}
 | 
			
		||||
				]
 | 
			
		||||
			},
 | 
			
		||||
			"profileType": "service_metrics_collection_config"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711195528,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711195528,
 | 
			
		||||
		"createdTimestamp": 1606778369931,
 | 
			
		||||
		"lastModifiedTimestamp": 1606778369931,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 17,
 | 
			
		||||
    "id": 34,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_operator",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Operator",
 | 
			
		||||
    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointOperatorProfile",
 | 
			
		||||
        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
			
		||||
@@ -12,26 +12,30 @@
 | 
			
		||||
        "operatorFriendlyName": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
					"dupleIso3Language": "eng",
 | 
			
		||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
					"defaultDupleSeparator": ":",
 | 
			
		||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"model_type": "PasspointDuple",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointDuple",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Default friendly passpoint_operator name",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "domainNameList": [
 | 
			
		||||
            "bell.ca",
 | 
			
		||||
            "telus.com",
 | 
			
		||||
            "rogers.com"
 | 
			
		||||
        ],
 | 
			
		||||
        "profileType": "passpoint_operator"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164952,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164952,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264539004,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264539004,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -7,28 +7,18 @@
 | 
			
		||||
    "name": "Radius-Profile",
 | 
			
		||||
    "details": {
 | 
			
		||||
      "model_type": "RadiusProfile",
 | 
			
		||||
                "subnetConfiguration": null,
 | 
			
		||||
                "serviceRegionMap": {
 | 
			
		||||
                    "Ottawa": {
 | 
			
		||||
                        "model_type": "RadiusServiceRegion",
 | 
			
		||||
                        "serverMap": {
 | 
			
		||||
                            "Radius-Profile": [
 | 
			
		||||
                                {
 | 
			
		||||
      "primaryRadiusAuthServer": {
 | 
			
		||||
        "model_type": "RadiusServer",
 | 
			
		||||
        "ipAddress": "192.168.0.1",
 | 
			
		||||
        "secret": "testing123",
 | 
			
		||||
                                    "authPort": 1812,
 | 
			
		||||
        "port": 1812,
 | 
			
		||||
        "timeout": null
 | 
			
		||||
                                }
 | 
			
		||||
                            ]
 | 
			
		||||
                        },
 | 
			
		||||
                        "regionName": "Ottawa"
 | 
			
		||||
                    }
 | 
			
		||||
      },
 | 
			
		||||
      "profileType": "radius"
 | 
			
		||||
    },
 | 
			
		||||
            "createdTimestamp": 1601961451668,
 | 
			
		||||
            "lastModifiedTimestamp": 1601961451668,
 | 
			
		||||
            "childProfileIds": []
 | 
			
		||||
    "createdTimestamp": 1611262628767,
 | 
			
		||||
    "lastModifiedTimestamp": 1611262628767,
 | 
			
		||||
    "childProfileIds": [
 | 
			
		||||
    ]
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
	"id": 21,
 | 
			
		||||
    "id": 4,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "rf",
 | 
			
		||||
	"name": "TipWlan-rf-passpoint",
 | 
			
		||||
    "name": "TipWlan-rf",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "RfConfiguration",
 | 
			
		||||
        "rfConfigMap": {
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHz",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -58,7 +58,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is2dot4GHz",
 | 
			
		||||
                "radioMode": "modeN",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -105,7 +105,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzU",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -152,7 +152,7 @@
 | 
			
		||||
                "model_type": "RfElementConfiguration",
 | 
			
		||||
                "radioType": "is5GHzL",
 | 
			
		||||
                "radioMode": "modeAC",
 | 
			
		||||
				"rf": "TipWlan-rf-passpoint",
 | 
			
		||||
                "rf": "TipWlan-rf",
 | 
			
		||||
                "beaconInterval": 100,
 | 
			
		||||
                "forceScanDuringVoice": "disabled",
 | 
			
		||||
                "rtsCtsThreshold": 65535,
 | 
			
		||||
@@ -198,8 +198,7 @@
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "rf"
 | 
			
		||||
    },
 | 
			
		||||
	"createdTimestamp": 1605711191976,
 | 
			
		||||
	"lastModifiedTimestamp": 1605711191976,
 | 
			
		||||
	"childProfileIds": [
 | 
			
		||||
	]
 | 
			
		||||
    "createdTimestamp": 1612285248650,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248650,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +1,27 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 15,
 | 
			
		||||
    "id": 2,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
    "name": "TipWlan-cloud-3-radios",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-access",
 | 
			
		||||
        "ssid": "TipWlan-cloud-3-radios",
 | 
			
		||||
        "appliedRadios": [
 | 
			
		||||
				"is5GHzL",
 | 
			
		||||
				"is5GHzU"
 | 
			
		||||
            "is5GHzU",
 | 
			
		||||
            "is2dot4GHz",
 | 
			
		||||
            "is5GHzL"
 | 
			
		||||
        ],
 | 
			
		||||
        "ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "wpa2PSK",
 | 
			
		||||
        "secureMode": "wpa2OnlyPSK",
 | 
			
		||||
        "vlanId": 1,
 | 
			
		||||
			"keyStr": "testing123",
 | 
			
		||||
        "keyStr": "openwifi",
 | 
			
		||||
        "broadcastSsid": "enabled",
 | 
			
		||||
        "keyRefresh": 0,
 | 
			
		||||
        "noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
        "radiusServiceId": 0,
 | 
			
		||||
        "radiusAcountingServiceInterval": 60,
 | 
			
		||||
        "captivePortalId": null,
 | 
			
		||||
        "bandwidthLimitDown": 0,
 | 
			
		||||
        "bandwidthLimitUp": 0,
 | 
			
		||||
@@ -28,7 +29,7 @@
 | 
			
		||||
        "clientBandwidthLimitUp": 0,
 | 
			
		||||
        "videoTrafficOnly": false,
 | 
			
		||||
        "radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
            "is5GHzU": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -40,7 +41,7 @@
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
                "enable80211v": null
 | 
			
		||||
            },
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
            "is5GHz": {
 | 
			
		||||
                "model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
                "enable80211r": null,
 | 
			
		||||
                "enable80211k": null,
 | 
			
		||||
@@ -56,79 +57,19 @@
 | 
			
		||||
        "bonjourGatewayProfileId": null,
 | 
			
		||||
        "enable80211w": null,
 | 
			
		||||
        "wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164949,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711223372,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			24
 | 
			
		||||
		]
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		"model_type": "Profile",
 | 
			
		||||
		"id": 16,
 | 
			
		||||
		"customerId": 2,
 | 
			
		||||
        "forwardMode": "BRIDGE",
 | 
			
		||||
        "profileType": "ssid",
 | 
			
		||||
		"name": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
		"details": {
 | 
			
		||||
			"model_type": "SsidConfiguration",
 | 
			
		||||
			"ssid": "TipWlan-cloud-hotspot-osu",
 | 
			
		||||
			"appliedRadios": [
 | 
			
		||||
				"is2dot4GHz"
 | 
			
		||||
			],
 | 
			
		||||
			"ssidAdminState": "enabled",
 | 
			
		||||
			"secureMode": "open",
 | 
			
		||||
			"vlanId": 1,
 | 
			
		||||
			"keyStr": null,
 | 
			
		||||
			"broadcastSsid": "enabled",
 | 
			
		||||
			"keyRefresh": 0,
 | 
			
		||||
			"noLocalSubnets": false,
 | 
			
		||||
			"radiusServiceName": null,
 | 
			
		||||
			"radiusAccountingServiceName": null,
 | 
			
		||||
			"captivePortalId": null,
 | 
			
		||||
			"bandwidthLimitDown": 0,
 | 
			
		||||
			"bandwidthLimitUp": 0,
 | 
			
		||||
			"clientBandwidthLimitDown": 0,
 | 
			
		||||
			"clientBandwidthLimitUp": 0,
 | 
			
		||||
			"videoTrafficOnly": false,
 | 
			
		||||
			"radioBasedConfigs": {
 | 
			
		||||
				"is5GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is2dot4GHz": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzU": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
				},
 | 
			
		||||
				"is5GHzL": {
 | 
			
		||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
			
		||||
					"enable80211r": null,
 | 
			
		||||
					"enable80211k": null,
 | 
			
		||||
					"enable80211v": null
 | 
			
		||||
        "radiusClientConfiguration": {
 | 
			
		||||
            "model_type": "RadiusNasConfiguration",
 | 
			
		||||
            "nasClientId": "DEFAULT",
 | 
			
		||||
            "nasClientIp": "WAN_IP",
 | 
			
		||||
            "userDefinedNasId": null,
 | 
			
		||||
            "userDefinedNasIp": null,
 | 
			
		||||
            "operatorId": null
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
			"bonjourGatewayProfileId": null,
 | 
			
		||||
			"enable80211w": null,
 | 
			
		||||
			"wepConfig": null,
 | 
			
		||||
			"forwardMode": null,
 | 
			
		||||
			"profileType": "ssid"
 | 
			
		||||
		},
 | 
			
		||||
		"createdTimestamp": 1605711164950,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711171732,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
			19,
 | 
			
		||||
			20
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1612285248638,
 | 
			
		||||
    "lastModifiedTimestamp": 1612285248638,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
    "model_type": "Profile",
 | 
			
		||||
		"id": 18,
 | 
			
		||||
    "id": 33,
 | 
			
		||||
    "customerId": 2,
 | 
			
		||||
    "profileType": "passpoint_venue",
 | 
			
		||||
		"name": "TipWlan-Hotspot20-Venue",
 | 
			
		||||
    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
			
		||||
    "details": {
 | 
			
		||||
        "model_type": "PasspointVenueProfile",
 | 
			
		||||
        "venueNameSet": [
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "fr_CA",
 | 
			
		||||
                "locale": "fra",
 | 
			
		||||
                "dupleIso3Language": "fra",
 | 
			
		||||
                "dupleName": "Exemple de lieu",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "model_type": "PasspointVenueName",
 | 
			
		||||
					"locale": "en_CA",
 | 
			
		||||
                "locale": "eng",
 | 
			
		||||
                "dupleIso3Language": "eng",
 | 
			
		||||
                "dupleName": "Example passpoint_venue",
 | 
			
		||||
                "defaultDupleSeparator": ":",
 | 
			
		||||
@@ -28,16 +28,15 @@
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "venueTypeAssignment": {
 | 
			
		||||
				"model_type": "ProfileVenueTypeAssignment",
 | 
			
		||||
            "model_type": "PasspointVenueTypeAssignment",
 | 
			
		||||
            "venueDescription": "Research and Development Facility",
 | 
			
		||||
            "venueGroupId": 2,
 | 
			
		||||
            "venueTypeId": 8
 | 
			
		||||
        },
 | 
			
		||||
        "profileType": "passpoint_venue"
 | 
			
		||||
    },
 | 
			
		||||
		"createdTimestamp": 1605711164956,
 | 
			
		||||
		"lastModifiedTimestamp": 1605711164956,
 | 
			
		||||
		"childProfileIds": [
 | 
			
		||||
		]
 | 
			
		||||
    "createdTimestamp": 1611264538947,
 | 
			
		||||
    "lastModifiedTimestamp": 1611264538947,
 | 
			
		||||
    "childProfileIds": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
        <listEntry value="1"/>
 | 
			
		||||
    </listAttribute>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
 | 
			
		||||
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
 | 
			
		||||
    <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
	<modelVersion>4.0.0</modelVersion>
 | 
			
		||||
	<parent>
 | 
			
		||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
			
		||||
		<version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
		<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
			
		||||
	</parent>
 | 
			
		||||
	<artifactId>opensync-gateway</artifactId>
 | 
			
		||||
@@ -16,22 +14,22 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>base-container</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<artifactId>opensync-ext-interface</artifactId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>client-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>customer-models</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<groupId>com.vmware.ovsdb</groupId>
 | 
			
		||||
@@ -49,13 +47,13 @@
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>service-metric-service-interface</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<dependency>
 | 
			
		||||
			<artifactId>status-service-interface</artifactId>
 | 
			
		||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
			
		||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
			
		||||
			<version>1.0.0-SNAPSHOT</version>
 | 
			
		||||
		</dependency>
 | 
			
		||||
 | 
			
		||||
		<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,15 @@ import com.google.protobuf.Descriptors;
 | 
			
		||||
import com.google.protobuf.MessageOrBuilder;
 | 
			
		||||
import com.google.protobuf.util.JsonFormat;
 | 
			
		||||
import com.google.protobuf.util.JsonFormat.TypeRegistry;
 | 
			
		||||
import com.netflix.servo.DefaultMonitorRegistry;
 | 
			
		||||
import com.netflix.servo.monitor.BasicCounter;
 | 
			
		||||
import com.netflix.servo.monitor.BasicTimer;
 | 
			
		||||
import com.netflix.servo.monitor.Counter;
 | 
			
		||||
import com.netflix.servo.monitor.MonitorConfig;
 | 
			
		||||
import com.netflix.servo.monitor.Stopwatch;
 | 
			
		||||
import com.netflix.servo.monitor.Timer;
 | 
			
		||||
import com.netflix.servo.tag.TagList;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
 | 
			
		||||
 | 
			
		||||
@@ -43,9 +52,30 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
 | 
			
		||||
    public static Charset utf8 = Charset.forName("UTF-8");
 | 
			
		||||
 | 
			
		||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
			
		||||
 | 
			
		||||
    private final Counter messagesReceived = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-mqtt-messagesReceived").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter messageBytesReceived = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-mqtt-messageBytesReceived").withTags(tags).build());
 | 
			
		||||
    
 | 
			
		||||
    private final Timer timerMessageProcess = new BasicTimer(
 | 
			
		||||
            MonitorConfig.builder("osgw-mqtt-messageProcessTimer").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private OpensyncExternalIntegrationInterface extIntegrationInterface;
 | 
			
		||||
 | 
			
		||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
			
		||||
    // get executed,
 | 
			
		||||
    // even when somebody adds another constructor in here
 | 
			
		||||
    {
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(messagesReceived);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(messageBytesReceived);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(timerMessageProcess);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // See https://github.com/fusesource/mqtt-client for the docs
 | 
			
		||||
    //
 | 
			
		||||
@@ -141,7 +171,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
                        // new Topic("#", QoS.AT_LEAST_ONCE),
 | 
			
		||||
                        // new Topic("test/#", QoS.EXACTLY_ONCE),
 | 
			
		||||
                        // new Topic("foo/+/bar", QoS.AT_LEAST_ONCE)
 | 
			
		||||
                        Topic[] topics = { new Topic("/ap/+/opensync", QoS.AT_LEAST_ONCE), };
 | 
			
		||||
                        Topic[] topics = { new Topic("#", QoS.AT_LEAST_ONCE), };
 | 
			
		||||
 | 
			
		||||
                        futureConnection.subscribe(topics);
 | 
			
		||||
                        LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
 | 
			
		||||
@@ -180,6 +210,10 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
                            // queue
 | 
			
		||||
                            mqttMsg.ack();
 | 
			
		||||
 | 
			
		||||
                            messagesReceived.increment();
 | 
			
		||||
                            messageBytesReceived.increment(payload.length);
 | 
			
		||||
                            Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
 | 
			
		||||
                            
 | 
			
		||||
                            LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
 | 
			
		||||
 | 
			
		||||
                            if (payload[0] == 0x78) {
 | 
			
		||||
@@ -189,6 +223,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
                                payload = ZlibUtil.decompress(payload);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            // attempt to parse the message as protobuf
 | 
			
		||||
                            MessageOrBuilder encodedMsg = null;
 | 
			
		||||
                            try {
 | 
			
		||||
@@ -198,7 +233,6 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
                                MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
 | 
			
		||||
                                        jsonPrinter.print(encodedMsg));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
 | 
			
		||||
 | 
			
		||||
                            } catch (Exception e) {
 | 
			
		||||
@@ -231,6 +265,8 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
			
		||||
                                        MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            } finally {
 | 
			
		||||
                                stopwatchTimerMessageProcess.stop();
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,24 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.Executors;
 | 
			
		||||
import java.util.concurrent.RejectedExecutionHandler;
 | 
			
		||||
import java.util.concurrent.ScheduledExecutorService;
 | 
			
		||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
 | 
			
		||||
import java.util.concurrent.ThreadFactory;
 | 
			
		||||
import java.util.concurrent.ThreadPoolExecutor;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
 | 
			
		||||
import com.netflix.servo.DefaultMonitorRegistry;
 | 
			
		||||
import com.netflix.servo.monitor.BasicCounter;
 | 
			
		||||
import com.netflix.servo.monitor.Counter;
 | 
			
		||||
import com.netflix.servo.monitor.MonitorConfig;
 | 
			
		||||
import com.netflix.servo.monitor.NumberGauge;
 | 
			
		||||
import com.netflix.servo.tag.TagList;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
 | 
			
		||||
import com.vmware.ovsdb.service.impl.OvsdbPassiveConnectionListenerImpl;
 | 
			
		||||
 | 
			
		||||
@@ -16,12 +27,68 @@ public class OvsdbListenerConfig {
 | 
			
		||||
 | 
			
		||||
    private static final Logger LOG = LoggerFactory.getLogger(OvsdbListenerConfig.class);
 | 
			
		||||
 | 
			
		||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
			
		||||
 | 
			
		||||
    final Counter rejectedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-rejectedTasks").withTags(tags).build());
 | 
			
		||||
    final Counter submittedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-submittedTasks").withTags(tags).build());
 | 
			
		||||
    final Counter completedTasks = new BasicCounter(MonitorConfig.builder("osgw-ovsdb-completedTasks").withTags(tags).build());
 | 
			
		||||
    
 | 
			
		||||
    private AtomicInteger tasksInFlight = new AtomicInteger(0);
 | 
			
		||||
    
 | 
			
		||||
    private final NumberGauge tasksInFlightGauge = new NumberGauge(
 | 
			
		||||
            MonitorConfig.builder("osgw-ovsdb-tasksInFlight").withTags(tags).build(), tasksInFlight);
 | 
			
		||||
 | 
			
		||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
			
		||||
    // get executed,
 | 
			
		||||
    // even when somebody adds another constructor in here
 | 
			
		||||
    {
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(rejectedTasks);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(submittedTasks);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(completedTasks);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(tasksInFlightGauge);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Bean
 | 
			
		||||
    public OvsdbPassiveConnectionListener ovsdbPassiveConnectionListener(
 | 
			
		||||
            @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listener.threadPoolSize:10}")
 | 
			
		||||
            int threadPoolSize) {
 | 
			
		||||
        LOG.debug("Configuring OvsdbPassiveConnectionListener with thread pool size {}", threadPoolSize);
 | 
			
		||||
        ScheduledExecutorService executorService = Executors.newScheduledThreadPool(threadPoolSize);    
 | 
			
		||||
        
 | 
			
		||||
        ThreadFactory threadFactory = new ThreadFactory() {
 | 
			
		||||
            private AtomicInteger thrNum = new AtomicInteger();
 | 
			
		||||
            
 | 
			
		||||
            @Override
 | 
			
		||||
            public Thread newThread(Runnable r) {
 | 
			
		||||
                Thread thr = new Thread(r, "ovsdb-exec-pool-" + thrNum.incrementAndGet());
 | 
			
		||||
                thr.setDaemon(true);
 | 
			
		||||
                return thr;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        RejectedExecutionHandler rejectedExecHandler = new ThreadPoolExecutor.AbortPolicy() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
 | 
			
		||||
                rejectedTasks.increment();
 | 
			
		||||
                super.rejectedExecution(r, executor);
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(threadPoolSize, threadFactory, rejectedExecHandler) {
 | 
			
		||||
            @Override
 | 
			
		||||
            protected void beforeExecute(Thread t, Runnable r) {
 | 
			
		||||
                submittedTasks.increment();
 | 
			
		||||
                tasksInFlight.incrementAndGet();
 | 
			
		||||
                super.beforeExecute(t, r);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            @Override
 | 
			
		||||
            protected void afterExecute(Runnable r, Throwable t) {
 | 
			
		||||
                completedTasks.increment();
 | 
			
		||||
                tasksInFlight.decrementAndGet();
 | 
			
		||||
                super.afterExecute(r, t);
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        
 | 
			
		||||
        OvsdbPassiveConnectionListener listener = new OvsdbPassiveConnectionListenerImpl(executorService);
 | 
			
		||||
        return listener;
 | 
			
		||||
    }    
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,21 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.netflix.servo.DefaultMonitorRegistry;
 | 
			
		||||
import com.netflix.servo.monitor.MonitorConfig;
 | 
			
		||||
import com.netflix.servo.monitor.Monitors;
 | 
			
		||||
import com.netflix.servo.monitor.NumberGauge;
 | 
			
		||||
import com.netflix.servo.tag.TagList;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
@@ -18,8 +25,22 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
			
		||||
 | 
			
		||||
    private static final Logger LOG = LoggerFactory.getLogger(OvsdbSessionMap.class);
 | 
			
		||||
 | 
			
		||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
			
		||||
    
 | 
			
		||||
    private AtomicInteger totalEquipmentConnections = new AtomicInteger(0);
 | 
			
		||||
        
 | 
			
		||||
    private final NumberGauge totalEquipmentConnectionsGauge = new NumberGauge(
 | 
			
		||||
            MonitorConfig.builder("osgw-totalEquipmentConnections").withTags(tags).build(), totalEquipmentConnections);
 | 
			
		||||
    
 | 
			
		||||
    private final ConcurrentHashMap<String, OvsdbSession> connectedClients = new ConcurrentHashMap<>();
 | 
			
		||||
 | 
			
		||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
			
		||||
    // get executed,
 | 
			
		||||
    // even when somebody adds another constructor in here
 | 
			
		||||
    {
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(totalEquipmentConnectionsGauge);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public OvsdbSession getSession(String apId) {
 | 
			
		||||
        LOG.info("Get session for AP {}", apId);
 | 
			
		||||
@@ -29,7 +50,11 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
			
		||||
    @Override
 | 
			
		||||
    public OvsdbSession removeSession(String apId) { 
 | 
			
		||||
        LOG.info("Removing session for AP {}", apId);
 | 
			
		||||
        return connectedClients.remove(apId);
 | 
			
		||||
        OvsdbSession ret = connectedClients.remove(apId);
 | 
			
		||||
        if(ret!=null) {
 | 
			
		||||
            totalEquipmentConnections.decrementAndGet();
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -37,7 +62,7 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.info("Close session for AP {}", apId);
 | 
			
		||||
            connectedClients.get(apId).getOvsdbClient().shutdown();
 | 
			
		||||
            connectedClients.remove(apId);
 | 
			
		||||
            removeSession(apId);
 | 
			
		||||
            LOG.info("Closed ovsdb session for {}", apId);
 | 
			
		||||
        }catch (Exception e) {
 | 
			
		||||
            // do nothing
 | 
			
		||||
@@ -58,6 +83,8 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
			
		||||
            }catch (Exception e) {
 | 
			
		||||
                // do nothing
 | 
			
		||||
            }            
 | 
			
		||||
        } else {
 | 
			
		||||
            totalEquipmentConnections.incrementAndGet();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        LOG.info("Created new ovsdb session for {}", apId);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,13 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
			
		||||
 | 
			
		||||
import java.security.cert.X509Certificate;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.context.annotation.Profile;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.ImmutableMap;
 | 
			
		||||
import com.netflix.servo.DefaultMonitorRegistry;
 | 
			
		||||
import com.netflix.servo.monitor.BasicCounter;
 | 
			
		||||
import com.netflix.servo.monitor.Counter;
 | 
			
		||||
import com.netflix.servo.monitor.MonitorConfig;
 | 
			
		||||
import com.netflix.servo.monitor.Monitors;
 | 
			
		||||
import com.netflix.servo.tag.TagList;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
			
		||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
 | 
			
		||||
@@ -24,29 +15,29 @@ import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExtern
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbClientInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.*;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.utilities.OvsdbStringConstants;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbClientWithMetrics;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbMetrics;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
 | 
			
		||||
import com.vmware.ovsdb.callback.ConnectionCallback;
 | 
			
		||||
import com.vmware.ovsdb.callback.MonitorCallback;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.MonitorRequest;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.MonitorRequests;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.MonitorSelect;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.RowUpdate;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.TableUpdate;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.TableUpdates;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.*;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
 | 
			
		||||
 | 
			
		||||
import io.netty.handler.ssl.SslContext;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.context.annotation.Profile;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import java.security.cert.X509Certificate;
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
 | 
			
		||||
@Profile("ovsdb_manager")
 | 
			
		||||
@Component
 | 
			
		||||
@@ -54,6 +45,21 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
    private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbClient.class);
 | 
			
		||||
 | 
			
		||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsAttempted = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-connectionsAttempted").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsFailed = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-connectionsFailed").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsCreated = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-connectionsCreated").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsDropped = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-connectionsDropped").withTags(tags).build());
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}")
 | 
			
		||||
    private int ovsdbListenPort;
 | 
			
		||||
 | 
			
		||||
@@ -63,6 +69,9 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.preventClientCnAlteration:false}")
 | 
			
		||||
    private boolean preventClientCnAlteration;
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultCommandDurationSec:3600}")
 | 
			
		||||
    private long defaultCommandDurationSec;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SslContext sslContext;
 | 
			
		||||
 | 
			
		||||
@@ -78,6 +87,22 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private OvsdbSessionMapInterface ovsdbSessionMapInterface;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private OvsdbMetrics ovsdbMetrics;
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.manager.collectionIntervalSec.event:60}")
 | 
			
		||||
    private long collectionIntervalSecEvent;
 | 
			
		||||
 | 
			
		||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
			
		||||
    // get executed,
 | 
			
		||||
    // even when somebody adds another constructor in here
 | 
			
		||||
    {
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsAttempted);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsCreated);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsDropped);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsFailed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostConstruct
 | 
			
		||||
    private void postCreate() {
 | 
			
		||||
        listenForConnections();
 | 
			
		||||
@@ -90,9 +115,15 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void connected(OvsdbClient ovsdbClient) {
 | 
			
		||||
 | 
			
		||||
                connectionsAttempted.increment();
 | 
			
		||||
                
 | 
			
		||||
                if(! (ovsdbClient instanceof OvsdbClientWithMetrics )) {
 | 
			
		||||
                    ovsdbClient = new OvsdbClientWithMetrics(ovsdbClient, ovsdbMetrics);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
			
		||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
			
		||||
                String subjectDn = null;
 | 
			
		||||
                String subjectDn;
 | 
			
		||||
                try {
 | 
			
		||||
                    subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
 | 
			
		||||
                            .getSubjectDN().getName();
 | 
			
		||||
@@ -110,41 +141,36 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
                    extIntegrationInterface.apConnected(key, connectNodeInfo);
 | 
			
		||||
 | 
			
		||||
                    // push configuration to AP
 | 
			
		||||
                    connectNodeInfo = processConnectRequest(ovsdbClient, clientCn, connectNodeInfo);
 | 
			
		||||
                    processConnectRequest(ovsdbClient, clientCn, connectNodeInfo);
 | 
			
		||||
 | 
			
		||||
                    monitorOvsdbStateTables(ovsdbClient, key);
 | 
			
		||||
 | 
			
		||||
                    connectionsCreated.increment();
 | 
			
		||||
                    LOG.info("ovsdbClient connected from {} on port {} AP {} ", remoteHost, localPort, key);
 | 
			
		||||
                    LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions());
 | 
			
		||||
 | 
			
		||||
                } catch (IllegalStateException e) {
 | 
			
		||||
                    connectionsFailed.increment();
 | 
			
		||||
                    LOG.error("autoprovisioning error {}", e.getMessage(), e);
 | 
			
		||||
                    // something is wrong with the SSL
 | 
			
		||||
                    ovsdbClient.shutdown();
 | 
			
		||||
                    return;
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    connectionsFailed.increment();
 | 
			
		||||
                    LOG.error("ovsdbClient error", e);
 | 
			
		||||
                    // something is wrong with the SSL
 | 
			
		||||
                    ovsdbClient.shutdown();
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void disconnected(OvsdbClient ovsdbClient) {
 | 
			
		||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
			
		||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
			
		||||
                String subjectDn = null;
 | 
			
		||||
                try {
 | 
			
		||||
                    subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
 | 
			
		||||
                            .getSubjectDN().getName();
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    // do nothing
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                String clientCn = SslUtil.extractCN(subjectDn);
 | 
			
		||||
                connectionsDropped.increment();
 | 
			
		||||
                
 | 
			
		||||
                String remoteHost;
 | 
			
		||||
                int localPort;
 | 
			
		||||
                String clientCn;
 | 
			
		||||
 | 
			
		||||
                // disconnected - deregister ovsdbClient from our
 | 
			
		||||
                // connectedClients table
 | 
			
		||||
@@ -154,22 +180,40 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                // so we are doing a reverse lookup here, and then if we find
 | 
			
		||||
                // the key we will
 | 
			
		||||
                // remove the entry from the connectedClients.
 | 
			
		||||
                String key = ovsdbSessionMapInterface.lookupClientId(ovsdbClient);
 | 
			
		||||
                String key;
 | 
			
		||||
 | 
			
		||||
                try {
 | 
			
		||||
                    remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
			
		||||
                    localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
			
		||||
                    String subjectDn = null;
 | 
			
		||||
                    try {
 | 
			
		||||
                        subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
 | 
			
		||||
                                .getSubjectDN().getName();
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        // do nothing
 | 
			
		||||
                    }
 | 
			
		||||
                    clientCn = SslUtil.extractCN(subjectDn);
 | 
			
		||||
                    key = ovsdbSessionMapInterface.lookupClientId(ovsdbClient);
 | 
			
		||||
                    if (key != null) {
 | 
			
		||||
                        try {
 | 
			
		||||
                            extIntegrationInterface.apDisconnected(key);
 | 
			
		||||
                            ovsdbSessionMapInterface.removeSession(key);
 | 
			
		||||
                        } catch (Exception e) {
 | 
			
		||||
                            LOG.debug("Unable to process ap disconnect. {}", e.getMessage());
 | 
			
		||||
                    } finally {
 | 
			
		||||
                        ovsdbClient.shutdown();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    LOG.info("ovsdbClient disconnected from {} on port {} clientCn {} AP {} ", remoteHost, localPort,
 | 
			
		||||
                            clientCn, key);
 | 
			
		||||
                    LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions());
 | 
			
		||||
                } finally {
 | 
			
		||||
                    try {
 | 
			
		||||
                        ovsdbClient.shutdown();
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("Caught Exception shutting down ovsdb client, may have already been disconnected",
 | 
			
		||||
                                e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@@ -180,7 +224,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        LOG.info("Manager waiting for connection on port {}...", ovsdbListenPort);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ConnectNodeInfo processConnectRequest(OvsdbClient ovsdbClient, String clientCn,
 | 
			
		||||
    private void processConnectRequest(OvsdbClient ovsdbClient, String clientCn,
 | 
			
		||||
                                       ConnectNodeInfo connectNodeInfo) {
 | 
			
		||||
 | 
			
		||||
        LOG.debug("Starting Client connect");
 | 
			
		||||
@@ -193,43 +237,40 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
        LOG.debug("Client {} connect for AP {}", clientCn, apId);
 | 
			
		||||
 | 
			
		||||
        ovsdbDao.removeAllPasspointConfigs(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeAllSsids(ovsdbClient); // always
 | 
			
		||||
        ovsdbDao.removeAllInetConfigs(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeWifiRrm(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always
 | 
			
		||||
 | 
			
		||||
        extIntegrationInterface.clearEquipmentStatus(apId);
 | 
			
		||||
 | 
			
		||||
        OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId);
 | 
			
		||||
 | 
			
		||||
        if (opensyncAPConfig != null) {
 | 
			
		||||
            // cleanup existing
 | 
			
		||||
            ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always
 | 
			
		||||
            ovsdbDao.removeAllPasspointConfigs(ovsdbClient);
 | 
			
		||||
            ovsdbDao.removeWifiRrm(ovsdbClient);
 | 
			
		||||
            ovsdbDao.removeAllSsids(ovsdbClient, opensyncAPConfig); // always
 | 
			
		||||
            ovsdbDao.removeAllGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            // reconfigure
 | 
			
		||||
            ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureInterfaces(ovsdbClient);
 | 
			
		||||
            ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            if (opensyncAPConfig.getHotspotConfig() != null) {
 | 
			
		||||
                ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            }
 | 
			
		||||
            ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            if (((ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails()).getSyntheticClientEnabled()) {
 | 
			
		||||
                ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            ovsdbDao.removeAllPasspointConfigs(ovsdbClient);
 | 
			
		||||
            ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always
 | 
			
		||||
            ovsdbDao.removeWifiRrm(ovsdbClient);
 | 
			
		||||
            ovsdbDao.removeAllSsids(ovsdbClient); // always
 | 
			
		||||
            ovsdbDao.removeAllGreTunnels(ovsdbClient, null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            ovsdbDao.configureInterfaces(ovsdbClient);
 | 
			
		||||
            ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
 | 
			
		||||
            ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
            if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
 | 
			
		||||
                ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
 | 
			
		||||
            }
 | 
			
		||||
            ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            LOG.info("No Configuration available for {}", apId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        LOG.debug("Client connect Done");
 | 
			
		||||
        return connectNodeInfo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -249,9 +290,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
            throw new IllegalStateException("AP with id " + apId + " is not connected");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String ret = ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
        return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -270,24 +309,25 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
            LOG.warn("AP with id " + apId + " does not have a config to apply.");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always
 | 
			
		||||
        ovsdbDao.removeAllPasspointConfigs(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeWifiRrm(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeAllSsids(ovsdbClient, opensyncAPConfig); // always
 | 
			
		||||
        ovsdbDao.removeAllGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
 | 
			
		||||
        ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.configureInterfaces(ovsdbClient);
 | 
			
		||||
        ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.removeAllPasspointConfigs(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeAllSsids(ovsdbClient); // always
 | 
			
		||||
        ovsdbDao.removeAllInetConfigs(ovsdbClient);
 | 
			
		||||
        ovsdbDao.removeWifiRrm(ovsdbClient);
 | 
			
		||||
 | 
			
		||||
        extIntegrationInterface.clearEquipmentStatus(apId);
 | 
			
		||||
        ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
 | 
			
		||||
        ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        if (opensyncAPConfig.getHotspotConfig() != null) {
 | 
			
		||||
            ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        }
 | 
			
		||||
        ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
 | 
			
		||||
            ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ovsdbDao.configureInterfaces(ovsdbClient);
 | 
			
		||||
        ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig);
 | 
			
		||||
        LOG.debug("Finished processConfigChanged for {}", apId);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
@@ -323,17 +363,20 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
            LOG.debug("Could not enable monitor for Wifi_Radio_State table. {}", e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            monitorWifiInetStateDbTable(ovsdbClient, key);
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
            LOG.debug("Could not enable monitor for Wifi_Inet_State table. {}", e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            monitorWifiVifStateDbTable(ovsdbClient, key);
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
            LOG.debug("Could not enable monitor for Wifi_VIF_State table. {}", e.getMessage());
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            monitorWifiAssociatedClientsDbTable(ovsdbClient, key);
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
@@ -346,6 +389,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
            LOG.debug("Could not enable monitor for AWLAN_Node table. {}", e.getMessage());
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            monitorDhcpLeasedIpDbTable(ovsdbClient, key);
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
@@ -359,8 +403,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
            LOG.debug("Could not enable monitor for Command_State table. {}", e.getMessage());
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        LOG.debug("Finished (re)setting monitors for AP {}", key);
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            monitorNodeStateTable(ovsdbClient,key);
 | 
			
		||||
        } catch (OvsdbClientException e) {
 | 
			
		||||
            LOG.debug("Could not enable monitor for Node_State table. {}", e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
        LOG.debug("Finished (re)setting monitors for AP {}", key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void monitorDhcpLeasedIpDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
 | 
			
		||||
@@ -369,10 +418,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                OvsdbDao.dhcpLeasedIpDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable,
 | 
			
		||||
                        new MonitorRequest(new MonitorSelect(true, true, true, true)))),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(OvsdbDao.dhcpLeasedIpDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
 | 
			
		||||
@@ -386,9 +433,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                if (rowUpdate.getNew() == null) {
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        OvsdbDao.translateDhcpFpValueToString(c, rowMap);
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
 | 
			
		||||
 | 
			
		||||
                                    delete.add(rowMap);
 | 
			
		||||
                                    // delete
 | 
			
		||||
@@ -396,9 +441,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                    // insert
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getNew().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        OvsdbDao.translateDhcpFpValueToString(c, rowMap);
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getNew().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
 | 
			
		||||
 | 
			
		||||
                                    insert.add(rowMap);
 | 
			
		||||
                                } else {
 | 
			
		||||
@@ -407,9 +450,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        OvsdbDao.translateDhcpFpValueToString(c, rowMap);
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
 | 
			
		||||
 | 
			
		||||
                                    update.add(rowMap);
 | 
			
		||||
 | 
			
		||||
@@ -418,19 +459,23 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!insert.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(insert, key, RowUpdateOperation.INSERT);
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(insert, key,
 | 
			
		||||
                                    RowUpdateOperation.INSERT);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!delete.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(delete, key, RowUpdateOperation.DELETE);
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(delete, key,
 | 
			
		||||
                                    RowUpdateOperation.DELETE);
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!update.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(update, key, RowUpdateOperation.MODIFY);
 | 
			
		||||
                            extIntegrationInterface.dhcpLeasedIpDbTableUpdate(update, key,
 | 
			
		||||
                                    RowUpdateOperation.MODIFY);
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("dhcpLeasedIpDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
@@ -444,10 +489,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
 | 
			
		||||
                OvsdbDao.commandStateDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(OvsdbDao.commandStateDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
 | 
			
		||||
@@ -461,9 +504,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                if (rowUpdate.getNew() == null) {
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        rowMap.put(c.getKey(), c.getValue().toString());
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
 | 
			
		||||
 | 
			
		||||
                                    delete.add(rowMap);
 | 
			
		||||
                                    // delete
 | 
			
		||||
@@ -471,9 +512,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                    // insert
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getNew().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        rowMap.put(c.getKey(), c.getValue().toString());
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getNew().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
 | 
			
		||||
 | 
			
		||||
                                    insert.add(rowMap);
 | 
			
		||||
                                } else {
 | 
			
		||||
@@ -482,9 +521,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                    Map<String, String> rowMap = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> {
 | 
			
		||||
                                        rowMap.put(c.getKey(), c.getValue().toString());
 | 
			
		||||
                                    });
 | 
			
		||||
                                    rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
 | 
			
		||||
 | 
			
		||||
                                    update.add(rowMap);
 | 
			
		||||
 | 
			
		||||
@@ -493,19 +530,23 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!insert.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(insert, key, RowUpdateOperation.INSERT);
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(insert, key,
 | 
			
		||||
                                    RowUpdateOperation.INSERT);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!delete.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(delete, key, RowUpdateOperation.DELETE);
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(delete, key,
 | 
			
		||||
                                    RowUpdateOperation.DELETE);
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        if (!update.isEmpty()) {
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(update, key, RowUpdateOperation.MODIFY);
 | 
			
		||||
                            extIntegrationInterface.commandStateDbTableUpdate(update, key,
 | 
			
		||||
                                    RowUpdateOperation.MODIFY);
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("commandStateDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
@@ -515,35 +556,34 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
 | 
			
		||||
        CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
 | 
			
		||||
                OvsdbDao.awlanNodeDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
                        LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}", tableUpdates);
 | 
			
		||||
        CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(
 | 
			
		||||
                OvsdbDao.ovsdbName, OvsdbDao.awlanNodeDbTable + "_" + key, new MonitorRequests(ImmutableMap
 | 
			
		||||
                        .of(OvsdbDao.awlanNodeDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))),
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
 | 
			
		||||
                        extIntegrationInterface.awlanNodeDbTableUpdate(
 | 
			
		||||
                                ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key);
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("awlanNodeDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
        awCf.join();
 | 
			
		||||
 | 
			
		||||
        extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient),
 | 
			
		||||
                key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
 | 
			
		||||
        CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
 | 
			
		||||
                OvsdbDao.wifiAssociatedClientsDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
 | 
			
		||||
                        LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(
 | 
			
		||||
                                OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
 | 
			
		||||
                        List<OpensyncWifiAssociatedClients> associatedClients = new ArrayList<>();
 | 
			
		||||
@@ -554,10 +594,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                if ((rowUpdate.getOld() != null) && (rowUpdate.getNew() == null)) {
 | 
			
		||||
                                    Row row = rowUpdate.getOld();
 | 
			
		||||
                                    String deletedClientMac = row.getStringColumn("mac");
 | 
			
		||||
                                    // take care of the deletes as we go through
 | 
			
		||||
                                    // the updates, as we want to delete before
 | 
			
		||||
                                    // take care of the deletes as we go
 | 
			
		||||
                                    // through
 | 
			
		||||
                                    // the updates, as we want to delete
 | 
			
		||||
                                    // before
 | 
			
		||||
                                    // adding anyway.
 | 
			
		||||
                                    extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key);
 | 
			
		||||
                                    extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac,
 | 
			
		||||
                                            key);
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    associatedClients.addAll(
 | 
			
		||||
                                            ovsdbDao.getOpensyncWifiAssociatedClients(rowUpdate, key, ovsdbClient));
 | 
			
		||||
@@ -568,12 +611,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
                        // now address the update/add
 | 
			
		||||
                        extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(associatedClients, key);
 | 
			
		||||
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("wifiAssociatedClientsDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
        acCf.join();
 | 
			
		||||
        extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(
 | 
			
		||||
                ovsdbDao.getInitialOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -582,13 +627,9 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                OvsdbDao.wifiInetStateDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable,
 | 
			
		||||
                        new MonitorRequest(new MonitorSelect(true, true, true, true)))),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
                        LOG.info(OvsdbDao.ovsdbName,
 | 
			
		||||
                                OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}", tableUpdates);
 | 
			
		||||
 | 
			
		||||
                        List<OpensyncAPInetState> inetStateInsertOrUpdate = new ArrayList<>();
 | 
			
		||||
                        List<OpensyncAPInetState> inetStateDelete = new ArrayList<>();
 | 
			
		||||
@@ -598,11 +639,11 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                            for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
 | 
			
		||||
 | 
			
		||||
                                if (rowUpdate.getNew() == null) {
 | 
			
		||||
                                    inetStateDelete.addAll(
 | 
			
		||||
                                            ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
 | 
			
		||||
                                    inetStateDelete.addAll(ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate,
 | 
			
		||||
                                            key, ovsdbClient));
 | 
			
		||||
                                } else {
 | 
			
		||||
                                    inetStateInsertOrUpdate.addAll(
 | 
			
		||||
                                            ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
 | 
			
		||||
                                    inetStateInsertOrUpdate.addAll(ovsdbDao
 | 
			
		||||
                                            .getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            }
 | 
			
		||||
@@ -613,11 +654,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
                        // now process updates and mutations
 | 
			
		||||
                        extIntegrationInterface.wifiInetStateDbTableUpdate(inetStateInsertOrUpdate, key);
 | 
			
		||||
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("wifiInetStateDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
        isCf.join();
 | 
			
		||||
 | 
			
		||||
        extIntegrationInterface.wifiInetStateDbTableUpdate(
 | 
			
		||||
                ovsdbDao.getInitialOpensyncApInetStateForRowUpdate(isCf.join(), key, ovsdbClient), key);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -625,32 +669,31 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
        CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
 | 
			
		||||
                OvsdbDao.wifiRadioStateDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable,
 | 
			
		||||
                        new MonitorRequest(new MonitorSelect(true, false, false, true)))),
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    try {
 | 
			
		||||
                        LOG.info(OvsdbDao.wifiRadioStateDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                tableUpdates);
 | 
			
		||||
 | 
			
		||||
                        extIntegrationInterface.wifiRadioStatusDbTableUpdate(
 | 
			
		||||
                                ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key);
 | 
			
		||||
                    } catch (Exception e) {
 | 
			
		||||
                        LOG.error("wifiRadioStatusDbTableUpdate failed", e);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
        rsCf.join();
 | 
			
		||||
 | 
			
		||||
        extIntegrationInterface
 | 
			
		||||
                .wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
 | 
			
		||||
 | 
			
		||||
        CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
 | 
			
		||||
                OvsdbDao.wifiVifStateDbTable + "_" + key,
 | 
			
		||||
                new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))),
 | 
			
		||||
                new MonitorCallback() {
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void update(TableUpdates tableUpdates) {
 | 
			
		||||
        CompletableFuture<TableUpdates> vsCf = ovsdbClient
 | 
			
		||||
                .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiVifStateDbTable + "_" + key,
 | 
			
		||||
                        new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable,
 | 
			
		||||
                                new MonitorRequest(new MonitorSelect(false, true, true, true)))),
 | 
			
		||||
                        tableUpdates -> {
 | 
			
		||||
                            try {
 | 
			
		||||
                                LOG.info(OvsdbDao.wifiVifStateDbTable + "_" + key + " monitor callback received {}",
 | 
			
		||||
                                        tableUpdates);
 | 
			
		||||
 | 
			
		||||
@@ -662,14 +705,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
 | 
			
		||||
                                        if (rowUpdate.getNew() == null) {
 | 
			
		||||
                                            // this is a deletion
 | 
			
		||||
                                    vifsToDelete.addAll(
 | 
			
		||||
                                            ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
 | 
			
		||||
                                            vifsToDelete.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(
 | 
			
		||||
                                                    rowUpdate, key, ovsdbClient));
 | 
			
		||||
 | 
			
		||||
                                        } else {
 | 
			
		||||
                                            // either an insert or
 | 
			
		||||
                                            // mutuate/update
 | 
			
		||||
                                    vifsToInsertOrUpdate.addAll(
 | 
			
		||||
                                            ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
 | 
			
		||||
                                            vifsToInsertOrUpdate.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(
 | 
			
		||||
                                                    rowUpdate, key, ovsdbClient));
 | 
			
		||||
 | 
			
		||||
                                        }
 | 
			
		||||
 | 
			
		||||
@@ -680,22 +723,46 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                                        extIntegrationInterface.wifiVIFStateDbTableDelete(vifsToDelete, key);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if (!vifsToInsertOrUpdate.isEmpty()) {
 | 
			
		||||
                                extIntegrationInterface.wifiVIFStateDbTableUpdate(vifsToInsertOrUpdate, key);
 | 
			
		||||
                                        extIntegrationInterface.wifiVIFStateDbTableUpdate(vifsToInsertOrUpdate,
 | 
			
		||||
                                                key);
 | 
			
		||||
                                    }
 | 
			
		||||
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            } catch (Exception e) {
 | 
			
		||||
                                LOG.error("wifiVIFStateDbTableUpdate failed", e);
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
        vsCf.join();
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void monitorNodeStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
 | 
			
		||||
        CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(
 | 
			
		||||
                OvsdbDao.ovsdbName, OvsdbDao.nodeStateTable + "_" + key, new MonitorRequests(ImmutableMap
 | 
			
		||||
                        .of(OvsdbDao.nodeStateTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))),
 | 
			
		||||
                tableUpdates -> {
 | 
			
		||||
                    LOG.info(OvsdbDao.nodeStateTable + "_" + key + " monitor callback received {}");
 | 
			
		||||
                    tableUpdates.getTableUpdates().forEach((key1, value) -> {
 | 
			
		||||
                        LOG.info("TableUpdate for {}", key1);
 | 
			
		||||
                        value.getRowUpdates().values().forEach(r -> {
 | 
			
		||||
                            if (r.getOld() != null) {
 | 
			
		||||
                                LOG.info("Node_State old row {}", r.getOld().getColumns());
 | 
			
		||||
                            }
 | 
			
		||||
                            if (r.getNew() != null) {
 | 
			
		||||
                                LOG.info("Node_State new row {}", r.getNew().getColumns());
 | 
			
		||||
                            }
 | 
			
		||||
                        });
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
                });
 | 
			
		||||
        nsCf.join();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String closeSession(String apId) {
 | 
			
		||||
        OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
 | 
			
		||||
        if (session != null) {
 | 
			
		||||
            try {
 | 
			
		||||
                session.getOvsdbClient().shutdown();
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
@@ -703,18 +770,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
                return "Failed to close session to " + apId + " " + e.getLocalizedMessage();
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        LOG.debug("Closed session to " + apId);
 | 
			
		||||
        return "Closed session to " + apId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username,
 | 
			
		||||
            String validationCode) {
 | 
			
		||||
    public String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username) {
 | 
			
		||||
        try {
 | 
			
		||||
            OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
 | 
			
		||||
 | 
			
		||||
            ovsdbDao.configureFirmwareDownload(session.getOvsdbClient(), apId, firmwareUrl, firmwareVersion, username,
 | 
			
		||||
                    validationCode);
 | 
			
		||||
            ovsdbDao.configureFirmwareDownload(session.getOvsdbClient(), apId, firmwareUrl, firmwareVersion, username);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage());
 | 
			
		||||
            return "Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage();
 | 
			
		||||
@@ -746,17 +812,11 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        try {
 | 
			
		||||
            OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
 | 
			
		||||
            OvsdbClient ovsdbClient = session.getOvsdbClient();
 | 
			
		||||
 | 
			
		||||
            // TODO: need to establish what the command will be to start debug
 | 
			
		||||
            // logging, on the AP side
 | 
			
		||||
            // For now, use start_debug_engine
 | 
			
		||||
            // Map will have gateway_host and gateway_port for now
 | 
			
		||||
            // Delay/Duration TBD, just use 0s for now
 | 
			
		||||
            Map<String, String> payload = new HashMap<>();
 | 
			
		||||
            payload.put("gateway_hostname", gatewayHostname);
 | 
			
		||||
            payload.put("gateway_port", gatewayPort.toString());
 | 
			
		||||
            ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, Long.valueOf(0L),
 | 
			
		||||
                    Long.valueOf(0L));
 | 
			
		||||
            ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L,
 | 
			
		||||
                    defaultCommandDurationSec);
 | 
			
		||||
 | 
			
		||||
            LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort);
 | 
			
		||||
            return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort;
 | 
			
		||||
@@ -776,10 +836,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        try {
 | 
			
		||||
            OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
 | 
			
		||||
            OvsdbClient ovsdbClient = session.getOvsdbClient();
 | 
			
		||||
 | 
			
		||||
            Map<String, String> payload = new HashMap<>();
 | 
			
		||||
            ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StopDebugEngineApCommand, payload, Long.valueOf(0L),
 | 
			
		||||
                    Long.valueOf(0L));
 | 
			
		||||
            ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StopDebugEngineApCommand, payload, 0L, 0L);
 | 
			
		||||
 | 
			
		||||
            LOG.debug("TipWlanOvsdbClient::stopDebugEngine Stop debug engine on AP  {}", apId);
 | 
			
		||||
            return "Stop debug engine on AP " + apId;
 | 
			
		||||
@@ -859,19 +917,22 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
 | 
			
		||||
        return key;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String processNewChannelsRequest(String apId, Map<RadioType, Integer> channelMap) {
 | 
			
		||||
        LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId);
 | 
			
		||||
    public String processNewChannelsRequest(String apId, Map<RadioType, Integer> backupChannelMap,
 | 
			
		||||
            Map<RadioType, Integer> primaryChannelMap) {
 | 
			
		||||
        LOG.info("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId);
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
 | 
			
		||||
            OvsdbClient ovsdbClient = session.getOvsdbClient();
 | 
			
		||||
            ovsdbDao.processNewChannelsRequest(ovsdbClient, channelMap);
 | 
			
		||||
            LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest change backup channels for AP   {}", apId);
 | 
			
		||||
            return "Triggered a factory reset of AP  " + apId;
 | 
			
		||||
            ovsdbDao.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap);
 | 
			
		||||
            LOG.info("TipWlanOvsdbClient::processNewChannelsRequest change backup and/or primary channels for AP {}",
 | 
			
		||||
                    apId);
 | 
			
		||||
            return " change backup and/or primary channels for AP " + apId;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("TipWlanOvsdbClient::processNewChannelsRequest failed to change backup channels for AP {}", apId,
 | 
			
		||||
                    e);
 | 
			
		||||
            return " failed to change backup channels for AP " + apId;
 | 
			
		||||
            LOG.error(
 | 
			
		||||
                    "TipWlanOvsdbClient::processNewChannelsRequest failed to change backup and/or primary channels for AP {}",
 | 
			
		||||
                    apId, e);
 | 
			
		||||
            return "failed to change backup and/or primary channels for AP " + apId;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.context.annotation.Profile;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.netflix.servo.DefaultMonitorRegistry;
 | 
			
		||||
import com.netflix.servo.monitor.BasicCounter;
 | 
			
		||||
import com.netflix.servo.monitor.Counter;
 | 
			
		||||
import com.netflix.servo.monitor.MonitorConfig;
 | 
			
		||||
import com.netflix.servo.monitor.Monitors;
 | 
			
		||||
import com.netflix.servo.tag.TagList;
 | 
			
		||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
 | 
			
		||||
import com.vmware.ovsdb.callback.ConnectionCallback;
 | 
			
		||||
@@ -24,6 +31,20 @@ public class TipWlanOvsdbRedirector {
 | 
			
		||||
 | 
			
		||||
    private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbRedirector.class);
 | 
			
		||||
    
 | 
			
		||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsAttempted = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-redirector-connectionsAttempted").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsFailed = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-redirector-connectionsFailed").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsCreated = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-redirector-connectionsCreated").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    private final Counter connectionsDropped = new BasicCounter(
 | 
			
		||||
            MonitorConfig.builder("osgw-redirector-connectionsDropped").withTags(tags).build());
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.redirector.listenPort:6643}")
 | 
			
		||||
    private int ovsdbRedirectorListenPort;
 | 
			
		||||
 | 
			
		||||
@@ -41,10 +62,21 @@ public class TipWlanOvsdbRedirector {
 | 
			
		||||
        listenForConnections();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
			
		||||
    // get executed,
 | 
			
		||||
    // even when somebody adds another constructor in here
 | 
			
		||||
    {
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsAttempted);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsCreated);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsDropped);
 | 
			
		||||
        DefaultMonitorRegistry.getInstance().register(connectionsFailed);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void listenForConnections() {
 | 
			
		||||
 | 
			
		||||
        ConnectionCallback connectionCallback = new ConnectionCallback() {
 | 
			
		||||
            public void connected(OvsdbClient ovsdbClient) {
 | 
			
		||||
                connectionsAttempted.increment();
 | 
			
		||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
			
		||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
			
		||||
                String subjectDn = null;
 | 
			
		||||
@@ -54,8 +86,9 @@ public class TipWlanOvsdbRedirector {
 | 
			
		||||
                    String clientCn = SslUtil.extractCN(subjectDn);
 | 
			
		||||
                    LOG.info("ovsdbClient redirector connected from {} on port {} clientCn {}", remoteHost, localPort, clientCn);                
 | 
			
		||||
                    ovsdbDao.performRedirect(ovsdbClient, clientCn);
 | 
			
		||||
 | 
			
		||||
                    connectionsCreated.increment();
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    connectionsFailed.increment();
 | 
			
		||||
                    //something is wrong with the SSL or with the redirect
 | 
			
		||||
                    ovsdbClient.shutdown();
 | 
			
		||||
                    return;
 | 
			
		||||
@@ -63,6 +96,7 @@ public class TipWlanOvsdbRedirector {
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            public void disconnected(OvsdbClient ovsdbClient) {
 | 
			
		||||
                connectionsDropped.increment();
 | 
			
		||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
			
		||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
			
		||||
                String subjectDn = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,81 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Insert;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbCommandConfig extends OvsdbDaoBase {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    OvsdbGet ovsdbGet;
 | 
			
		||||
 | 
			
		||||
    void configureCommands(OvsdbClient ovsdbClient, String command, Map<String, String> payload, Long delay,
 | 
			
		||||
            Long duration) {
 | 
			
		||||
        LOG.debug("OvsdbCommandConfig::configureCommands command {}, payload {}, delay {} duration {}", command,
 | 
			
		||||
                payload, delay, duration);
 | 
			
		||||
        List<Operation> operations = new ArrayList<>();
 | 
			
		||||
        List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
        Map<String, Value> commandConfigColumns = new HashMap<>();
 | 
			
		||||
        conditions.add(new Condition("command", Function.EQUALS, new Atom<>(command)));
 | 
			
		||||
        commandConfigColumns.put("command", new Atom<>(command));
 | 
			
		||||
        commandConfigColumns.put("payload", com.vmware.ovsdb.protocol.operation.notation.Map.of(payload));
 | 
			
		||||
        commandConfigColumns.put("delay", new Atom<>(delay));
 | 
			
		||||
        commandConfigColumns.put("duration", new Atom<>(duration));
 | 
			
		||||
        commandConfigColumns.put("timestamp", new Atom<>(System.currentTimeMillis()));
 | 
			
		||||
        Row row = new Row(commandConfigColumns);
 | 
			
		||||
        insertOrUpdate(ovsdbClient, command, operations, conditions, row, commandConfigDbTable);
 | 
			
		||||
        try {
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            LOG.debug(
 | 
			
		||||
                    "OvsdbCommandConfig::configureCommands successfully configured command {} for duration {} payload {}",
 | 
			
		||||
                    command, duration, payload);
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                LOG.debug("Op Result {}", res);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
			
		||||
            LOG.error("OvsdbCommandConfig::configureCommands failed.", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Update an existing entry, or insert a new one if entry not found
 | 
			
		||||
     * satisfying conditions
 | 
			
		||||
     * 
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param command
 | 
			
		||||
     * @param operations
 | 
			
		||||
     * @param conditions
 | 
			
		||||
     * @param row
 | 
			
		||||
     * @param ovsdbTableName TODO
 | 
			
		||||
     */
 | 
			
		||||
    void insertOrUpdate(OvsdbClient ovsdbClient, String command, List<Operation> operations, List<Condition> conditions,
 | 
			
		||||
            Row row, String ovsdbTableName) {
 | 
			
		||||
        if (ovsdbGet.getOvsdbTableRowsForCondition(ovsdbClient,commandConfigDbTable,conditions).isEmpty()) {
 | 
			
		||||
            operations.add(new Insert(ovsdbTableName, row));
 | 
			
		||||
        } else {
 | 
			
		||||
            operations.add(new Update(ovsdbTableName, conditions, row));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -0,0 +1,297 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDbStatus;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDeviceType;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpManufId;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Insert;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Select;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.SelectResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
public class OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    static final int MAX_VIF_PER_FREQ = 8;
 | 
			
		||||
    static final Logger LOG = LoggerFactory.getLogger(OvsdbDaoBase.class);
 | 
			
		||||
    public static final String wifiRouteStateDbTable = "Wifi_Route_State";
 | 
			
		||||
    public static final String wifiMasterStateDbTable = "Wifi_Master_State";
 | 
			
		||||
    public static final String HTTP = "http";
 | 
			
		||||
    public static final String ovsdbName = "Open_vSwitch";
 | 
			
		||||
    public static final String awlanNodeDbTable = "AWLAN_Node";
 | 
			
		||||
    public static final String wifiStatsConfigDbTable = "Wifi_Stats_Config";
 | 
			
		||||
    public static final String interfaceDbTable = "Interface";
 | 
			
		||||
    public static final String portDbTable = "Port";
 | 
			
		||||
    public static final String bridgeDbTable = "Bridge";
 | 
			
		||||
    public static final String wifiRadioConfigDbTable = "Wifi_Radio_Config";
 | 
			
		||||
    public static final String wifiRadioStateDbTable = "Wifi_Radio_State";
 | 
			
		||||
    public static final String wifiVifConfigDbTable = "Wifi_VIF_Config";
 | 
			
		||||
    public static final String wifiVifStateDbTable = "Wifi_VIF_State";
 | 
			
		||||
    public static final String wifiInetConfigDbTable = "Wifi_Inet_Config";
 | 
			
		||||
    public static final String wifiInetStateDbTable = "Wifi_Inet_State";
 | 
			
		||||
    public static final String wifiAssociatedClientsDbTable = "Wifi_Associated_Clients";
 | 
			
		||||
    public static final String wifiRrmConfigDbTable = "Wifi_RRM_Config";
 | 
			
		||||
    public static final String nodeConfigTable = "Node_Config";
 | 
			
		||||
    public static final String nodeStateTable = "Node_State";
 | 
			
		||||
    public static final String dhcpLeasedIpDbTable = "DHCP_leased_IP";
 | 
			
		||||
    public static final String commandConfigDbTable = "Command_Config";
 | 
			
		||||
    public static final String commandStateDbTable = "Command_State";
 | 
			
		||||
    public static final String hotspot20IconConfigDbTable = "Hotspot20_Icon_Config";
 | 
			
		||||
    public static final String hotspot20OsuProvidersDbTable = "Hotspot20_OSU_Providers";
 | 
			
		||||
    public static final String hotspot20ConfigDbTable = "Hotspot20_Config";
 | 
			
		||||
    public static final String StartDebugEngineApCommand = "startPortForwardingSession";
 | 
			
		||||
    public static final String StopDebugEngineApCommand = "stopSession";
 | 
			
		||||
 | 
			
		||||
    public static <T> T getSingleValueFromSet(Row row, String columnName) {
 | 
			
		||||
 | 
			
		||||
        Set<T> set = row != null ? row.getSetColumn(columnName) : null;
 | 
			
		||||
        T ret = (set != null) && !set.isEmpty() ? set.iterator().next() : null;
 | 
			
		||||
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void translateDhcpFpValueToString(Entry<String, Value> c, Map<String, String> rowMap) {
 | 
			
		||||
        if (c.getKey().equals("manuf_id")) {
 | 
			
		||||
            rowMap.put(c.getKey(), DhcpFpManufId.getById(Integer.valueOf(c.getValue().toString())).getName());
 | 
			
		||||
        } else if (c.getKey().equals("device_type")) {
 | 
			
		||||
            rowMap.put(c.getKey(), DhcpFpDeviceType.getById(Integer.valueOf(c.getValue().toString())).getName());
 | 
			
		||||
        } else if (c.getKey().equals("db_status")) {
 | 
			
		||||
            rowMap.put(c.getKey(), DhcpFpDbStatus.getById(Integer.valueOf(c.getValue().toString())).getName());
 | 
			
		||||
        } else {
 | 
			
		||||
            rowMap.put(c.getKey(), c.getValue().toString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.managerAddr:3.88.149.10}")
 | 
			
		||||
    String managerIpAddr;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.region:Ottawa}")
 | 
			
		||||
    public String region;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}")
 | 
			
		||||
    int ovsdbListenPort;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.externalPort:6640}")
 | 
			
		||||
    int ovsdbExternalPort;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.mqttBroker.address.external:testportal.123wlan.com}")
 | 
			
		||||
    String mqttBrokerAddress;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.mqttBroker.listenPort:1883}")
 | 
			
		||||
    int mqttBrokerListenPort;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.mqttBroker.externalPort:1883}")
 | 
			
		||||
    int mqttBrokerExternalPort;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.timeoutSec:30}")
 | 
			
		||||
    int ovsdbTimeoutSec;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_bridge:lan}")
 | 
			
		||||
    public String bridgeNameVifInterfaces;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_lan_type:bridge}")
 | 
			
		||||
    public String defaultLanInterfaceType;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_lan_name:lan}")
 | 
			
		||||
    public String defaultLanInterfaceName;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_wan_type:bridge}")
 | 
			
		||||
    public String defaultWanInterfaceType;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_wan_name:wan}")
 | 
			
		||||
    public String defaultWanInterfaceName;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_radio0:wlan0}")
 | 
			
		||||
    public String defaultRadio0;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_radio1:wlan1}")
 | 
			
		||||
    public String defaultRadio1;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.default_radio2:wlan2}")
 | 
			
		||||
    public String defaultRadio2;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-device.radio0:radio0}")
 | 
			
		||||
    public String radio0;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-device.radio1:radio1}")
 | 
			
		||||
    public String radio1;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-device.radio2:radio2}")
 | 
			
		||||
    public String radio2;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.wifi-iface.max:8}")
 | 
			
		||||
    public int maxInterfacesPerRadio;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.awlan-node.upgrade_dl_timer:60}")
 | 
			
		||||
    public long upgradeDlTimerSeconds;
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.awlan-node.upgrade_timer:90}")
 | 
			
		||||
    public long upgradeTimerSeconds;
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.awlan-node.reboot_or_reset_timer:10}")
 | 
			
		||||
    public long rebootOrResetTimerSeconds;
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.externalFileStoreURL:https://localhost:9096}")
 | 
			
		||||
    String externalFileStoreURL;
 | 
			
		||||
 | 
			
		||||
    @org.springframework.beans.factory.annotation.Value("${tip.wlan.fileStoreDirectory:/tmp/tip-wlan-filestore}")
 | 
			
		||||
    String fileStoreDirectoryName;
 | 
			
		||||
 | 
			
		||||
    public OvsdbDaoBase() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public <T> Set<T> getSet(Row row, String columnName) {
 | 
			
		||||
 | 
			
		||||
        Set<T> set = row != null ? row.getSetColumn(columnName) : null;
 | 
			
		||||
 | 
			
		||||
        return set;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void updateEventReportingInterval(OvsdbClient ovsdbClient, long eventReportingIntervalSeconds) {
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
            // turn on stats collection over MQTT: (reporting_interval is in
 | 
			
		||||
            // seconds)
 | 
			
		||||
            // $ ovsh i Wifi_Stats_Config reporting_interval:=10
 | 
			
		||||
            // radio_type:="2.4G" stats_type:="device"
 | 
			
		||||
 | 
			
		||||
            updateColumns.put("reporting_interval", new Atom<>(eventReportingIntervalSeconds));
 | 
			
		||||
            updateColumns.put("radio_type", new Atom<>("2.4G"));
 | 
			
		||||
            updateColumns.put("stats_type", new Atom<>("event"));
 | 
			
		||||
 | 
			
		||||
            Row row = new Row(updateColumns);
 | 
			
		||||
            operations.add(new Insert(wifiStatsConfigDbTable, row));
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
            LOG.debug("Updated {}:", wifiStatsConfigDbTable);
 | 
			
		||||
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                LOG.debug("updateEventReportingInterval Result {}", res);
 | 
			
		||||
                if (res instanceof InsertResult) {
 | 
			
		||||
                    LOG.info("updateEventReportingInterval insert new row result {}", (res));
 | 
			
		||||
                    // for insert, make sure it is actually in the table
 | 
			
		||||
                    confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiStatsConfigDbTable);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void configureWanInterfacesForDhcpSniffing(OvsdbClient ovsdbClient) {
 | 
			
		||||
        List<Operation> operations = new ArrayList<>();
 | 
			
		||||
        Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
        List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
        // Going forward this will be only for WAN, and children will inherit
 | 
			
		||||
        // conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(defaultWanInterfaceName)));
 | 
			
		||||
 | 
			
		||||
        updateColumns.put("dhcp_sniff", new Atom<>(true));
 | 
			
		||||
 | 
			
		||||
        Row row = new Row(updateColumns);
 | 
			
		||||
        operations.add(new Update(wifiInetConfigDbTable, conditions, row));
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                if (res instanceof UpdateResult) {
 | 
			
		||||
                    LOG.info("configureWanInterfacesForDhcpSniffing {}", ((UpdateResult) res).toString());
 | 
			
		||||
                } else if (res instanceof ErrorResult) {
 | 
			
		||||
                    LOG.error("configureWanInterfacesForDhcpSniffing error {}", (res));
 | 
			
		||||
                    throw new RuntimeException("configureWanInterfacesForDhcpSniffing " + ((ErrorResult) res).getError()
 | 
			
		||||
                            + " " + ((ErrorResult) res).getDetails());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
			
		||||
            LOG.error("OvsdbDao::configureWanInterfaces failed.", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Check existence of row with a given Uuid in the specified ovsdb table
 | 
			
		||||
     * Used primarily for operation validation.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param rowUuid
 | 
			
		||||
     * @param table
 | 
			
		||||
     */
 | 
			
		||||
    void confirmRowExistsInTable(OvsdbClient ovsdbClient, Uuid rowUuid, String table) {
 | 
			
		||||
        try {
 | 
			
		||||
            List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
            conditions.add(new Condition("_uuid", Function.EQUALS, new Atom<>(rowUuid)));
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            operations.add(new Select(table, conditions));
 | 
			
		||||
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                if (res instanceof SelectResult) {
 | 
			
		||||
                    LOG.info("Select Result for confirmRowExistsInTable {} with Uuid {} {}", table, rowUuid,
 | 
			
		||||
                            ((SelectResult) res).getRows());
 | 
			
		||||
                } else if (res instanceof ErrorResult) {
 | 
			
		||||
                    LOG.error("confirmRowExistsInTable error {}", (res));
 | 
			
		||||
                    throw new RuntimeException("confirmRowExistsInTable " + ((ErrorResult) res).getError() + " "
 | 
			
		||||
                            + ((ErrorResult) res).getDetails());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
			
		||||
            LOG.error("Unable to confirm existence of row in table {} for Uuid {}", table, rowUuid, e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void fillInRadioInterfaceNames(OvsdbClient ovsdbClient, ConnectNodeInfo ret) {
 | 
			
		||||
        try {
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
            List<String> columns = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
            columns.add("freq_band");
 | 
			
		||||
            columns.add("if_name");
 | 
			
		||||
 | 
			
		||||
            operations.add(new Select(wifiRadioStateDbTable, conditions, columns));
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
            if (LOG.isDebugEnabled()) {
 | 
			
		||||
                LOG.debug("Select from {}:", wifiRadioStateDbTable);
 | 
			
		||||
 | 
			
		||||
                for (OperationResult res : result) {
 | 
			
		||||
                    LOG.debug("Op Result {}", res);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((result != null) && (result.length > 0) && (result[0] instanceof SelectResult)
 | 
			
		||||
                    && !((SelectResult) result[0]).getRows().isEmpty()) {
 | 
			
		||||
 | 
			
		||||
                for (Row row : ((SelectResult) result[0]).getRows()) {
 | 
			
		||||
                    ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"),
 | 
			
		||||
                            getSingleValueFromSet(row, "if_name"));
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,66 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbFirmwareConfig extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    void configureFirmwareDownload(OvsdbClient ovsdbClient, String apId, String firmwareUrl, String firmwareVersion,
 | 
			
		||||
            String username) throws Exception {
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug("configureFirmwareDownload for {} to version {} url {} username {}", apId,
 | 
			
		||||
                    firmwareVersion, firmwareUrl, username);
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
            updateColumns.put("upgrade_dl_timer", new Atom<>(upgradeDlTimerSeconds));
 | 
			
		||||
            updateColumns.put("firmware_url", new Atom<>(firmwareUrl));
 | 
			
		||||
            updateColumns.put("upgrade_timer", new Atom<>(upgradeTimerSeconds));
 | 
			
		||||
            Row row = new Row(updateColumns);
 | 
			
		||||
            operations.add(new Update(awlanNodeDbTable, row));
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            for (OperationResult r : result) {
 | 
			
		||||
                LOG.debug("Op Result {}", r);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Could not download firmware {} to AP {}", firmwareVersion, apId, e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void configureFirmwareFlash(OvsdbClient ovsdbClient, String apId, String firmwareVersion, String username) {
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug("configureFirmwareFlash on AP {} to load {} setting timer for {} seconds.", apId, firmwareVersion,
 | 
			
		||||
                    upgradeTimerSeconds);
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            Map<String, Value> updateColumns = new HashMap<>();
 | 
			
		||||
            updateColumns.put("upgrade_timer", new Atom<>(upgradeTimerSeconds));
 | 
			
		||||
            Row row = new Row(updateColumns);
 | 
			
		||||
            operations.add(new Update(awlanNodeDbTable, row));
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.join();
 | 
			
		||||
            for (OperationResult r : result) {
 | 
			
		||||
                LOG.debug("Op Result {}", r);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Could not configure timer for flashing firmware {} on AP {}", firmwareVersion, apId, e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,172 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.CommandConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20Config;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20IconConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20OsuProviders;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.NodeConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiInetConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiStatsConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Select;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.SelectResult;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbGet extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    Map<String, Set<Integer>> getAllowedChannels(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, Set<Integer>> allowedChannels = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiRadioStateDbTable, null)) {
 | 
			
		||||
            allowedChannels.put(getSingleValueFromSet(row, "freq_band"), row.getSetColumn("allowed_channels"));
 | 
			
		||||
        }
 | 
			
		||||
        return allowedChannels;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get all Rows from given table that satisfy the conditions.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param ovsdbTableName
 | 
			
		||||
     * @param conditions
 | 
			
		||||
     * @return Set of Rows in the table that satisfy the conditions, or all rows
 | 
			
		||||
     *         in table if conditions is null or empty.
 | 
			
		||||
     */
 | 
			
		||||
    Set<Row> getOvsdbTableRowsForCondition(OvsdbClient ovsdbClient, String ovsdbTableName, List<Condition> conditions) {
 | 
			
		||||
        Set<Row> ret = new HashSet<>();
 | 
			
		||||
        List<Operation> operations = new ArrayList<>();
 | 
			
		||||
        if (conditions == null || conditions.isEmpty()) {
 | 
			
		||||
            operations.add(new Select(ovsdbTableName));
 | 
			
		||||
        } else {
 | 
			
		||||
            operations.add(new Select(ovsdbTableName, conditions));
 | 
			
		||||
        }
 | 
			
		||||
        try {
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            for (Row row : ((SelectResult) result[0]).getRows()) {
 | 
			
		||||
                ret.add(row);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
			
		||||
            LOG.error("Transaction exception getting rows from {}.", ovsdbTableName, e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    NodeConfigInfo getNodeConfigInfo(OvsdbClient ovsdbClient) {
 | 
			
		||||
        return new NodeConfigInfo(getOvsdbTableRowsForCondition(ovsdbClient, nodeConfigTable,
 | 
			
		||||
                List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp")))).iterator().next());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, CommandConfigInfo> getProvisionedCommandConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, CommandConfigInfo> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, commandConfigDbTable, null)) {
 | 
			
		||||
            CommandConfigInfo commandConfigInfo = new CommandConfigInfo(row);
 | 
			
		||||
            ret.put(commandConfigInfo.command, commandConfigInfo);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, Hotspot20Config> getProvisionedHotspot20Configs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, Hotspot20Config> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, hotspot20ConfigDbTable, null)) {
 | 
			
		||||
            Hotspot20Config hotspot20Config = new Hotspot20Config(row);
 | 
			
		||||
            ret.put(hotspot20Config.osuSsid, hotspot20Config);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, Hotspot20IconConfig> getProvisionedHotspot20IconConfig(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, Hotspot20IconConfig> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, hotspot20IconConfigDbTable, null)) {
 | 
			
		||||
            Hotspot20IconConfig hotspot20IconConfig = new Hotspot20IconConfig(row);
 | 
			
		||||
            ret.put(hotspot20IconConfig.url, hotspot20IconConfig);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, Hotspot20OsuProviders> getProvisionedHotspot20OsuProviders(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, Hotspot20OsuProviders> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, hotspot20OsuProvidersDbTable, null)) {
 | 
			
		||||
            Hotspot20OsuProviders hotspot20OsuProviders = new Hotspot20OsuProviders(row);
 | 
			
		||||
            ret.put(hotspot20OsuProviders.osuProviderName, hotspot20OsuProviders);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, WifiInetConfigInfo> getProvisionedWifiInetConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, WifiInetConfigInfo> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiInetConfigDbTable, null)) {
 | 
			
		||||
            WifiInetConfigInfo wifiInetConfigInfo = new WifiInetConfigInfo(row);
 | 
			
		||||
            ret.put(wifiInetConfigInfo.ifName, wifiInetConfigInfo);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, WifiRadioConfigInfo> getProvisionedWifiRadioConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, WifiRadioConfigInfo> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiRadioConfigDbTable, null)) {
 | 
			
		||||
            WifiRadioConfigInfo wifiRadioConfigInfo = new WifiRadioConfigInfo(row);
 | 
			
		||||
            ret.put(wifiRadioConfigInfo.ifName, wifiRadioConfigInfo);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, WifiStatsConfigInfo> getProvisionedWifiStatsConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, WifiStatsConfigInfo> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiStatsConfigDbTable, null)) {
 | 
			
		||||
            WifiStatsConfigInfo wifiStatsConfigInfo = new WifiStatsConfigInfo(row);
 | 
			
		||||
            if (wifiStatsConfigInfo.surveyType == null) {
 | 
			
		||||
                ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType, wifiStatsConfigInfo);
 | 
			
		||||
            } else {
 | 
			
		||||
                ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType + "_"
 | 
			
		||||
                        + wifiStatsConfigInfo.surveyType, wifiStatsConfigInfo);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Map<String, WifiVifConfigInfo> getProvisionedWifiVifConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        Map<String, WifiVifConfigInfo> ret = new HashMap<>();
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiVifConfigDbTable, null)) {
 | 
			
		||||
            WifiVifConfigInfo wifiVifConfigInfo = new WifiVifConfigInfo(row);
 | 
			
		||||
            ret.put(wifiVifConfigInfo.ifName + '_' + wifiVifConfigInfo.ssid, wifiVifConfigInfo);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<String> getWifiVifStates(OvsdbClient ovsdbClient, String ssidName) {
 | 
			
		||||
        List<String> ret = new ArrayList<>();
 | 
			
		||||
        List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
        conditions.add(new Condition("ssid", Function.EQUALS, new Atom<>(ssidName)));
 | 
			
		||||
        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, wifiVifStateDbTable, null)) {
 | 
			
		||||
            String mac = getSingleValueFromSet(row, "mac");
 | 
			
		||||
            if (mac != null) {
 | 
			
		||||
                ret.add(mac);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,849 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
import java.util.function.Predicate;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.codec.digest.DigestUtils;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPHotspot20Config;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20Config;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20IconConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.Hotspot20OsuProviders;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.PasspointDuple;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.PasspointIPv4AddressType;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.PasspointIPv6AddressType;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.PasspointMccMnc;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.PasspointProfile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.operator.PasspointOperatorProfile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointEapMethods;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointNaiRealmEapAuthInnerNonEap;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointNaiRealmEapAuthParam;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointNaiRealmEapCredType;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointOsuIcon;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.provider.PasspointOsuProviderProfile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.venue.PasspointVenueName;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.venue.PasspointVenueProfile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.passpoint.models.venue.PasspointVenueTypeAssignment;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Delete;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Insert;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbHotspotConfig extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    OvsdbGet ovsdbGet;
 | 
			
		||||
 | 
			
		||||
    protected void getNaiRealms(PasspointOsuProviderProfile providerProfile, Set<Atom<String>> naiRealms) {
 | 
			
		||||
        providerProfile.getNaiRealmList().stream().forEach(c -> {
 | 
			
		||||
 | 
			
		||||
            StringBuffer naiBuffer = new StringBuffer();
 | 
			
		||||
            naiBuffer.append(Integer.toString(c.getEncoding()));
 | 
			
		||||
            naiBuffer.append(",");
 | 
			
		||||
            Iterator<String> realmsIterator = c.getNaiRealms().iterator();
 | 
			
		||||
            if (realmsIterator != null) {
 | 
			
		||||
                while (realmsIterator.hasNext()) {
 | 
			
		||||
                    String realm = realmsIterator.next();
 | 
			
		||||
                    naiBuffer.append(realm);
 | 
			
		||||
                    if (realmsIterator.hasNext()) {
 | 
			
		||||
                        naiBuffer.append(";");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (c.getEapMap() == null || c.getEapMap().isEmpty()) {
 | 
			
		||||
                naiRealms.add(new Atom<String>(naiBuffer.toString()));
 | 
			
		||||
            } else {
 | 
			
		||||
                naiBuffer.append(",");
 | 
			
		||||
 | 
			
		||||
                Map<String, Set<String>> eapMap = c.getEapMap();
 | 
			
		||||
                eapMap.entrySet().stream().forEach(e -> {
 | 
			
		||||
 | 
			
		||||
                    String eapMethodName = e.getKey();
 | 
			
		||||
                    String eapMethodId = String.valueOf(PasspointEapMethods.getByName(eapMethodName).getId());
 | 
			
		||||
                    naiBuffer.append(eapMethodId);
 | 
			
		||||
 | 
			
		||||
                    for (String credential : e.getValue()) {
 | 
			
		||||
 | 
			
		||||
                        String[] keyValue = credential.split(":");
 | 
			
		||||
                        String keyId = String.valueOf(PasspointNaiRealmEapAuthParam.getByName(keyValue[0]).getId());
 | 
			
		||||
                        if (keyValue[0].equals(
 | 
			
		||||
                                PasspointNaiRealmEapAuthParam.NAI_REALM_EAP_AUTH_NON_EAP_INNER_AUTH.getName())) {
 | 
			
		||||
 | 
			
		||||
                            String valueId = String
 | 
			
		||||
                                    .valueOf(PasspointNaiRealmEapAuthInnerNonEap.getByName(keyValue[1]).getId());
 | 
			
		||||
 | 
			
		||||
                            naiBuffer.append("[");
 | 
			
		||||
                            naiBuffer.append(keyId);
 | 
			
		||||
                            naiBuffer.append(":");
 | 
			
		||||
                            naiBuffer.append(valueId);
 | 
			
		||||
                            naiBuffer.append("]");
 | 
			
		||||
 | 
			
		||||
                        } else if (keyValue[0]
 | 
			
		||||
                                .equals(PasspointNaiRealmEapAuthParam.NAI_REALM_EAP_AUTH_CRED_TYPE.getName())
 | 
			
		||||
                                || keyValue[0]
 | 
			
		||||
                                        .equals(PasspointNaiRealmEapAuthParam.NAI_REALM_EAP_AUTH_TUNNELED_CRED_TYPE
 | 
			
		||||
                                                .getName())) {
 | 
			
		||||
 | 
			
		||||
                            String valueId = String
 | 
			
		||||
                                    .valueOf(PasspointNaiRealmEapCredType.getByName(keyValue[1]).getId());
 | 
			
		||||
 | 
			
		||||
                            naiBuffer.append("[");
 | 
			
		||||
                            naiBuffer.append(keyId);
 | 
			
		||||
                            naiBuffer.append(":");
 | 
			
		||||
                            naiBuffer.append(valueId);
 | 
			
		||||
                            naiBuffer.append("]");
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    naiBuffer.append(",");
 | 
			
		||||
 | 
			
		||||
                });
 | 
			
		||||
                String naiRealm = naiBuffer.toString();
 | 
			
		||||
                if (naiRealm.endsWith(",")) {
 | 
			
		||||
                    naiRealm = naiRealm.substring(0, naiRealm.lastIndexOf(","));
 | 
			
		||||
                }
 | 
			
		||||
                naiRealms.add(new Atom<String>(naiRealm));
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void getOsuIconUuidsForOsuProvider(OvsdbClient ovsdbClient, PasspointOsuProviderProfile providerProfile,
 | 
			
		||||
            Map<String, Value> rowColumns) {
 | 
			
		||||
        Map<String, Hotspot20IconConfig> osuIconsMap = ovsdbGet.getProvisionedHotspot20IconConfig(ovsdbClient);
 | 
			
		||||
        Set<Uuid> iconsSet = new HashSet<>();
 | 
			
		||||
        if (osuIconsMap.size() > 0) {
 | 
			
		||||
            for (PasspointOsuIcon icon : providerProfile.getOsuIconList()) {
 | 
			
		||||
                if (osuIconsMap.containsKey(icon.getImageUrl())) {
 | 
			
		||||
                    iconsSet.add(osuIconsMap.get(icon.getImageUrl()).uuid);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (iconsSet.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set iconUuidSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(iconsSet);
 | 
			
		||||
            rowColumns.put("osu_icons", iconUuidSet);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void getOsuProviderFriendlyNames(PasspointOsuProviderProfile providerProfile,
 | 
			
		||||
            Map<String, Value> rowColumns) {
 | 
			
		||||
        Set<Atom<String>> providerFriendlyNames = new HashSet<>();
 | 
			
		||||
        for (PasspointDuple friendlyName : providerProfile.getOsuFriendlyName()) {
 | 
			
		||||
            providerFriendlyNames.add(new Atom<String>(friendlyName.getAsDuple()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (providerFriendlyNames.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set providerFriendlyNamesSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(providerFriendlyNames);
 | 
			
		||||
            rowColumns.put("osu_friendly_name", providerFriendlyNamesSet);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void getOsuProviderMethodList(PasspointOsuProviderProfile providerProfile,
 | 
			
		||||
            Map<String, Value> rowColumns) {
 | 
			
		||||
        Set<Atom<Integer>> methods = new HashSet<>();
 | 
			
		||||
        for (Integer method : providerProfile.getOsuMethodList()) {
 | 
			
		||||
            methods.add(new Atom<Integer>(method));
 | 
			
		||||
        }
 | 
			
		||||
        if (methods.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set methodsSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(methods);
 | 
			
		||||
            rowColumns.put("method_list", methodsSet);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void getOsuProviderServiceDescriptions(PasspointOsuProviderProfile providerProfile,
 | 
			
		||||
            Map<String, Value> rowColumns) {
 | 
			
		||||
        Set<Atom<String>> serviceDescriptions = new HashSet<>();
 | 
			
		||||
        for (PasspointDuple serviceDescription : providerProfile.getOsuServiceDescription()) {
 | 
			
		||||
            serviceDescriptions.add(new Atom<String>(serviceDescription.getAsDuple()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (serviceDescriptions.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set serviceDescriptionSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(serviceDescriptions);
 | 
			
		||||
            rowColumns.put("service_description", serviceDescriptionSet);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void configureHotspots(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
 | 
			
		||||
        provisionHotspot2IconConfig(ovsdbClient, opensyncApConfig);
 | 
			
		||||
        provisionHotspot20OsuProviders(ovsdbClient, opensyncApConfig);
 | 
			
		||||
        provisionHotspot20Config(ovsdbClient, opensyncApConfig);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Add the operator specific information, taken from the operator profile
 | 
			
		||||
     * for the given hotspotProfile being configured.
 | 
			
		||||
     *
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     * @param hs2Profile
 | 
			
		||||
     */
 | 
			
		||||
    void getOperatorInformationForPasspointConfiguration(OpensyncAPHotspot20Config hs20cfg,
 | 
			
		||||
            Map<String, Value> rowColumns, PasspointProfile hs2Profile) {
 | 
			
		||||
        PasspointOperatorProfile passpointOperatorProfile = getOperatorProfileForPasspoint(hs20cfg, hs2Profile);
 | 
			
		||||
 | 
			
		||||
        Set<Atom<String>> domainNames = new HashSet<>();
 | 
			
		||||
        for (String domainName : passpointOperatorProfile.getDomainNameList()) {
 | 
			
		||||
            domainNames.add(new Atom<>(domainName));
 | 
			
		||||
        }
 | 
			
		||||
        if (domainNames.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set domainNameSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(domainNames);
 | 
			
		||||
            rowColumns.put("domain_name", domainNameSet);
 | 
			
		||||
        }
 | 
			
		||||
        rowColumns.put("osen", new Atom<>(passpointOperatorProfile.isServerOnlyAuthenticatedL2EncryptionNetwork()));
 | 
			
		||||
 | 
			
		||||
        Set<Atom<String>> operatorFriendlyName = new HashSet<>();
 | 
			
		||||
        passpointOperatorProfile.getOperatorFriendlyName().stream()
 | 
			
		||||
                .forEach(c -> operatorFriendlyName.add(new Atom<>(c.getAsDuple())));
 | 
			
		||||
        com.vmware.ovsdb.protocol.operation.notation.Set operatorFriendlyNameSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                .of(operatorFriendlyName);
 | 
			
		||||
        rowColumns.put("operator_friendly_name", operatorFriendlyNameSet);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    PasspointOperatorProfile getOperatorProfileForPasspoint(OpensyncAPHotspot20Config hs20cfg,
 | 
			
		||||
            PasspointProfile hs2Profile) {
 | 
			
		||||
        Profile operator = hs20cfg.getHotspot20OperatorSet().stream().filter(new Predicate<Profile>() {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public boolean test(Profile t) {
 | 
			
		||||
                return t.getId() == hs2Profile.getPasspointOperatorProfileId();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }).findFirst().get();
 | 
			
		||||
 | 
			
		||||
        PasspointOperatorProfile passpointOperatorProfile = (PasspointOperatorProfile) operator.getDetails();
 | 
			
		||||
        return passpointOperatorProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Adds map entries the UUIDs for the OSU Providers and Icons based on the
 | 
			
		||||
     * entries in the for providers that are associated with this
 | 
			
		||||
     * hotspotProfile.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param hotspotProfile
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     */
 | 
			
		||||
    void getOsuIconUuidsForPasspointConfiguration(OvsdbClient ovsdbClient, OpensyncAPHotspot20Config hs20cfg,
 | 
			
		||||
            Profile hotspotProfile, Map<String, Value> rowColumns) {
 | 
			
		||||
        Set<Uuid> osuIconUuids = getOsuProvidersInfoForPasspointConfiguration(ovsdbClient, hs20cfg, hotspotProfile,
 | 
			
		||||
                rowColumns);
 | 
			
		||||
 | 
			
		||||
        if (osuIconUuids.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set iconUuids = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(osuIconUuids);
 | 
			
		||||
            rowColumns.put("operator_icons", iconUuids);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get providers profiles. Helper method.
 | 
			
		||||
     *
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param hotspotProfile
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    List<Profile> getOsuProvidersForPasspoint(OpensyncAPHotspot20Config hs20cfg, Profile hotspotProfile) {
 | 
			
		||||
        List<Profile> providerList = new ArrayList<>();
 | 
			
		||||
        if (hs20cfg.getHotspot20ProviderSet() != null) {
 | 
			
		||||
            providerList = hs20cfg.getHotspot20ProviderSet().stream().filter(new Predicate<Profile>() {
 | 
			
		||||
 | 
			
		||||
                @Override
 | 
			
		||||
                public boolean test(Profile t) {
 | 
			
		||||
                    return hotspotProfile.getChildProfileIds().contains(t.getId());
 | 
			
		||||
                }
 | 
			
		||||
            }).collect(Collectors.toList());
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        return providerList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get's the OSU Provider related information for a given hotspot, the osu
 | 
			
		||||
     * providers being configured on the ovsdb in Hotspot20_OSU_Providers and
 | 
			
		||||
     * defined as children of the hotspot profile
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param hotspotProfile
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    Set<Uuid> getOsuProvidersInfoForPasspointConfiguration(OvsdbClient ovsdbClient, OpensyncAPHotspot20Config hs20cfg,
 | 
			
		||||
            Profile hotspotProfile, Map<String, Value> rowColumns) {
 | 
			
		||||
        Map<String, Hotspot20OsuProviders> osuProviders = ovsdbGet.getProvisionedHotspot20OsuProviders(ovsdbClient);
 | 
			
		||||
        List<Profile> providerList = getOsuProvidersForPasspoint(hs20cfg, hotspotProfile);
 | 
			
		||||
 | 
			
		||||
        Set<Uuid> osuProvidersUuids = new HashSet<>();
 | 
			
		||||
        Set<Uuid> osuIconUuids = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        StringBuffer mccMncBuffer = new StringBuffer();
 | 
			
		||||
        Set<Atom<String>> naiRealms = new HashSet<>();
 | 
			
		||||
        Set<Atom<String>> roamingOis = new HashSet<>();
 | 
			
		||||
        for (Profile provider : providerList) {
 | 
			
		||||
            PasspointOsuProviderProfile providerProfile = (PasspointOsuProviderProfile) provider.getDetails();
 | 
			
		||||
 | 
			
		||||
            osuProviders.keySet().stream().filter(new Predicate<String>() {
 | 
			
		||||
 | 
			
		||||
                @Override
 | 
			
		||||
                public boolean test(String providerNameOnAp) {
 | 
			
		||||
                    return providerNameOnAp.startsWith(OvsdbToWlanCloudTypeMappingUtility
 | 
			
		||||
                            .getApOsuProviderStringFromOsuProviderName(provider.getName()));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }).forEach(p -> {
 | 
			
		||||
                providerProfile.getRoamingOi().stream().forEach(o -> {
 | 
			
		||||
                    roamingOis.add(new Atom<>(o));
 | 
			
		||||
                });
 | 
			
		||||
                osuProvidersUuids.add(osuProviders.get(p).uuid);
 | 
			
		||||
                osuIconUuids.addAll(osuProviders.get(p).osuIcons);
 | 
			
		||||
                getNaiRealms(providerProfile, naiRealms);
 | 
			
		||||
 | 
			
		||||
                for (PasspointMccMnc passpointMccMnc : providerProfile.getMccMncList()) {
 | 
			
		||||
                    mccMncBuffer.append(passpointMccMnc.getMccMncPairing());
 | 
			
		||||
                    mccMncBuffer.append(";");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        String mccMncString = mccMncBuffer.toString();
 | 
			
		||||
        if (mccMncString.endsWith(";")) {
 | 
			
		||||
            mccMncString = mccMncString.substring(0, mccMncString.lastIndexOf(";"));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        rowColumns.put("mcc_mnc", new Atom<>(mccMncString));
 | 
			
		||||
 | 
			
		||||
        com.vmware.ovsdb.protocol.operation.notation.Set roamingOiSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                .of(roamingOis);
 | 
			
		||||
        rowColumns.put("roaming_oi", roamingOiSet);
 | 
			
		||||
 | 
			
		||||
        com.vmware.ovsdb.protocol.operation.notation.Set naiRealmsSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                .of(naiRealms);
 | 
			
		||||
        rowColumns.put("nai_realm", naiRealmsSet);
 | 
			
		||||
 | 
			
		||||
        if (osuProvidersUuids.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set providerUuids = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(osuProvidersUuids);
 | 
			
		||||
            rowColumns.put("osu_providers", providerUuids);
 | 
			
		||||
        }
 | 
			
		||||
        return osuIconUuids;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Passpoint configuration requires profile information from children, as
 | 
			
		||||
     * well as information from parent VIF Configurations These values are
 | 
			
		||||
     * placed in the rowColumns map to be passed into the transaction creating
 | 
			
		||||
     * the Hotspot20_Config in ovsdb.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param opensyncApConfig
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param hotspotProfile
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     * @param hs2Profile
 | 
			
		||||
     */
 | 
			
		||||
    void getPasspointConfigurationInformationFromDependencies(OvsdbClient ovsdbClient,
 | 
			
		||||
            OpensyncAPConfig opensyncApConfig, OpensyncAPHotspot20Config hs20cfg, Profile hotspotProfile,
 | 
			
		||||
            Map<String, Value> rowColumns, PasspointProfile hs2Profile) {
 | 
			
		||||
 | 
			
		||||
        getOperatorInformationForPasspointConfiguration(hs20cfg, rowColumns, hs2Profile);
 | 
			
		||||
 | 
			
		||||
        getVenueInformationForPasspointConfiguration(hs20cfg, rowColumns, hs2Profile);
 | 
			
		||||
 | 
			
		||||
        getOsuIconUuidsForPasspointConfiguration(ovsdbClient, hs20cfg, hotspotProfile, rowColumns);
 | 
			
		||||
 | 
			
		||||
        getVifInformationForPasspointConfiguration(ovsdbClient, opensyncApConfig, rowColumns, hs2Profile);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Add the venue specific information, taken from the venue profile for the
 | 
			
		||||
     * given hotspotProfile being configured.
 | 
			
		||||
     *
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     * @param hs2Profile
 | 
			
		||||
     */
 | 
			
		||||
    void getVenueInformationForPasspointConfiguration(OpensyncAPHotspot20Config hs20cfg, Map<String, Value> rowColumns,
 | 
			
		||||
            PasspointProfile hs2Profile) {
 | 
			
		||||
        PasspointVenueProfile passpointVenueProfile = getVenueProfileForPasspoint(hs20cfg, hs2Profile);
 | 
			
		||||
        Set<Atom<String>> venueNames = new HashSet<>();
 | 
			
		||||
        Set<Atom<String>> venueUrls = new HashSet<>();
 | 
			
		||||
        int index = 1;
 | 
			
		||||
        for (PasspointVenueName passpointVenueName : passpointVenueProfile.getVenueNameSet()) {
 | 
			
		||||
            venueNames.add(new Atom<String>(passpointVenueName.getAsDuple()));
 | 
			
		||||
            String url = String.valueOf(index) + ":" + passpointVenueName.getVenueUrl();
 | 
			
		||||
            venueUrls.add(new Atom<String>(url));
 | 
			
		||||
            index++;
 | 
			
		||||
        }
 | 
			
		||||
        com.vmware.ovsdb.protocol.operation.notation.Set venueNameSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                .of(venueNames);
 | 
			
		||||
        com.vmware.ovsdb.protocol.operation.notation.Set venueUrlSet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                .of(venueUrls);
 | 
			
		||||
        rowColumns.put("venue_name", venueNameSet);
 | 
			
		||||
        rowColumns.put("venue_url", venueUrlSet);
 | 
			
		||||
 | 
			
		||||
        PasspointVenueTypeAssignment passpointVenueTypeAssignment = passpointVenueProfile.getVenueTypeAssignment();
 | 
			
		||||
        String groupType = String.valueOf(passpointVenueTypeAssignment.getVenueGroupId()) + ":"
 | 
			
		||||
                + passpointVenueTypeAssignment.getVenueTypeId();
 | 
			
		||||
 | 
			
		||||
        rowColumns.put("venue_group_type", new Atom<>(groupType));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get's the Venue Profile for the hotspot, helper method
 | 
			
		||||
     *
 | 
			
		||||
     * @param hs20cfg
 | 
			
		||||
     * @param hs2Profile
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    PasspointVenueProfile getVenueProfileForPasspoint(OpensyncAPHotspot20Config hs20cfg, PasspointProfile hs2Profile) {
 | 
			
		||||
        Profile venue = hs20cfg.getHotspot20VenueSet().stream().filter(new Predicate<Profile>() {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public boolean test(Profile t) {
 | 
			
		||||
                return t.getId() == hs2Profile.getPasspointVenueProfileId();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }).findFirst().get();
 | 
			
		||||
 | 
			
		||||
        PasspointVenueProfile passpointVenueProfile = (PasspointVenueProfile) venue.getDetails();
 | 
			
		||||
        return passpointVenueProfile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the UUIDs for the associated access Wifi_VIF_Config parents, as well
 | 
			
		||||
     * as the osu_ssid for the "OPEN" Wifi_VIF_Config used to connect to the
 | 
			
		||||
     * passpoint
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param opensyncApConfig
 | 
			
		||||
     * @param rowColumns
 | 
			
		||||
     * @param hs2Profile
 | 
			
		||||
     */
 | 
			
		||||
    void getVifInformationForPasspointConfiguration(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig,
 | 
			
		||||
            Map<String, Value> rowColumns, PasspointProfile hs2Profile) {
 | 
			
		||||
        Map<String, WifiVifConfigInfo> vifConfigMap = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
 | 
			
		||||
 | 
			
		||||
        Set<Uuid> vifConfigs = new HashSet<>();
 | 
			
		||||
        List<Atom<String>> hessids = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        for (Profile ssidProfile : opensyncApConfig.getSsidProfile()) {
 | 
			
		||||
            if (hs2Profile.getAssociatedAccessSsidProfileIds().contains(ssidProfile.getId())) {
 | 
			
		||||
 | 
			
		||||
                String accessSsidProfileName = ((SsidConfiguration) ssidProfile.getDetails()).getSsid();
 | 
			
		||||
 | 
			
		||||
                for (WifiVifConfigInfo vifConfig : vifConfigMap.values()) {
 | 
			
		||||
                    if (vifConfig.ssid.equals(accessSsidProfileName)) {
 | 
			
		||||
                        vifConfigs.add(vifConfig.uuid);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                List<String> vifStates = ovsdbGet.getWifiVifStates(ovsdbClient, accessSsidProfileName);
 | 
			
		||||
                for (String mac : vifStates) {
 | 
			
		||||
                    hessids.add(new Atom<>(mac));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (vifConfigs.size() > 0) {
 | 
			
		||||
            com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                    .of(vifConfigs);
 | 
			
		||||
            rowColumns.put("vif_config", vifConfigUuids);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (hessids.size() > 0) {
 | 
			
		||||
            rowColumns.put("hessid", new Atom<>(hessids.get(0)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (Profile ssidProfile : opensyncApConfig.getSsidProfile()) {
 | 
			
		||||
            if (ssidProfile.getId() == hs2Profile.getOsuSsidProfileId()) {
 | 
			
		||||
                rowColumns.put("osu_ssid", new Atom<>(((SsidConfiguration) ssidProfile.getDetails()).getSsid()));
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Configure a Hotspot20 Passpoint for AP
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param opensyncApConfig
 | 
			
		||||
     */
 | 
			
		||||
    void provisionHotspot20Config(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
        try {
 | 
			
		||||
            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            if (schema.getTables().containsKey(hotspot20ConfigDbTable)
 | 
			
		||||
                    && schema.getTables().get(hotspot20ConfigDbTable) != null) {
 | 
			
		||||
                Map<String, Hotspot20Config> hotspot20ConfigMap = ovsdbGet.getProvisionedHotspot20Configs(ovsdbClient);
 | 
			
		||||
 | 
			
		||||
                OpensyncAPHotspot20Config hs20cfg = opensyncApConfig.getHotspotConfig();
 | 
			
		||||
 | 
			
		||||
                if (hs20cfg.getHotspot20ProfileSet() != null) {
 | 
			
		||||
                    List<Operation> operations = new ArrayList<>();
 | 
			
		||||
                    for (Profile hotspotProfile : hs20cfg.getHotspot20ProfileSet()) {
 | 
			
		||||
 | 
			
		||||
                        Map<String, Value> rowColumns = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
                        PasspointProfile hs2Profile = (PasspointProfile) hotspotProfile.getDetails();
 | 
			
		||||
 | 
			
		||||
                        getPasspointConfigurationInformationFromDependencies(ovsdbClient, opensyncApConfig, hs20cfg,
 | 
			
		||||
                                hotspotProfile, rowColumns, hs2Profile);
 | 
			
		||||
 | 
			
		||||
                        rowColumns.put("deauth_request_timeout", new Atom<>(hs2Profile.getDeauthRequestTimeout()));
 | 
			
		||||
                        rowColumns.put("tos", new Atom<>(hs2Profile.getTermsAndConditionsFile().getApExportUrl()));
 | 
			
		||||
                        rowColumns.put("enable", new Atom<>(hs2Profile.isEnableInterworkingAndHs20()));
 | 
			
		||||
                        rowColumns.put("network_auth_type",
 | 
			
		||||
                                new Atom<>("0" + hs2Profile.getNetworkAuthenticationType().getId()));
 | 
			
		||||
                        rowColumns.put("gas_addr3_behavior", new Atom<>(hs2Profile.getGasAddr3Behaviour().getId()));
 | 
			
		||||
                        rowColumns.put("operating_class", new Atom<>(hs2Profile.getOperatingClass()));
 | 
			
		||||
                        rowColumns.put("anqp_domain_id", new Atom<>(hs2Profile.getAnqpDomainId()));
 | 
			
		||||
 | 
			
		||||
                        Set<Atom<String>> connectionCapabilities = new HashSet<>();
 | 
			
		||||
                        hs2Profile.getConnectionCapabilitySet().stream()
 | 
			
		||||
                                .forEach(c -> connectionCapabilities
 | 
			
		||||
                                        .add(new Atom<>(c.getConnectionCapabilitiesIpProtocol().getId() + ":"
 | 
			
		||||
                                                + c.getConnectionCapabilitiesPortNumber() + ":"
 | 
			
		||||
                                                + c.getConnectionCapabilitiesStatus().getId())));
 | 
			
		||||
                        com.vmware.ovsdb.protocol.operation.notation.Set connectionCapabilitySet = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
			
		||||
                                .of(connectionCapabilities);
 | 
			
		||||
                        rowColumns.put("connection_capability", connectionCapabilitySet);
 | 
			
		||||
 | 
			
		||||
                        // # format: <1-octet encoded value as hex str>
 | 
			
		||||
                        // # (ipv4_type & 0x3f) << 2 | (ipv6_type & 0x3) << 2
 | 
			
		||||
                        // 0x3f = 63 in decimal
 | 
			
		||||
                        // 0x3 = 3 in decimal
 | 
			
		||||
                        if (PasspointIPv6AddressType.getByName(
 | 
			
		||||
                                hs2Profile.getIpAddressTypeAvailability()) != PasspointIPv6AddressType.UNSUPPORTED) {
 | 
			
		||||
                            int availability = PasspointIPv6AddressType
 | 
			
		||||
                                    .getByName(hs2Profile.getIpAddressTypeAvailability()).getId();
 | 
			
		||||
                            String hexString = Integer.toHexString((availability & 3) << 2);
 | 
			
		||||
                            rowColumns.put("ipaddr_type_availability", new Atom<>(hexString));
 | 
			
		||||
                        } else if (PasspointIPv4AddressType.getByName(
 | 
			
		||||
                                hs2Profile.getIpAddressTypeAvailability()) != PasspointIPv4AddressType.UNSUPPORTED) {
 | 
			
		||||
                            int availability = PasspointIPv4AddressType
 | 
			
		||||
                                    .getByName(hs2Profile.getIpAddressTypeAvailability()).getId();
 | 
			
		||||
                            String hexString = Integer.toHexString((availability & 63) << 2);
 | 
			
		||||
                            rowColumns.put("ipaddr_type_availability", new Atom<>(hexString));
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        Row row = new Row(rowColumns);
 | 
			
		||||
 | 
			
		||||
                        Insert newHs20Config = new Insert(hotspot20ConfigDbTable, row);
 | 
			
		||||
 | 
			
		||||
                        operations.add(newHs20Config);
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
                    OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("provisionHotspot20Config Op Result {}", res);
 | 
			
		||||
                        if (res instanceof InsertResult) {
 | 
			
		||||
                            LOG.info("provisionHotspot20Config insert new row result {}", (res));
 | 
			
		||||
                            // for insert, make sure it is actually in the table
 | 
			
		||||
                            confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(),
 | 
			
		||||
                                    hotspot20ConfigDbTable);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                LOG.info("Current Hotspot20_Config {}", hotspot20ConfigMap);
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.info("Table {} not present in {}. Cannot provision Hotspot20_Config", hotspot20ConfigDbTable,
 | 
			
		||||
                        ovsdbName);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in provisionHotspot20Config", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Provision the OSU Providers in the Hotspot20_OSU_Providers ovsdb table.
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param opensyncApConfig
 | 
			
		||||
     */
 | 
			
		||||
    void provisionHotspot20OsuProviders(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
        try {
 | 
			
		||||
            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            if (schema.getTables().containsKey(hotspot20OsuProvidersDbTable)
 | 
			
		||||
                    && schema.getTables().get(hotspot20OsuProvidersDbTable) != null) {
 | 
			
		||||
                Map<String, Hotspot20OsuProviders> osuProviders = ovsdbGet
 | 
			
		||||
                        .getProvisionedHotspot20OsuProviders(ovsdbClient);
 | 
			
		||||
 | 
			
		||||
                OpensyncAPHotspot20Config hs20cfg = opensyncApConfig.getHotspotConfig();
 | 
			
		||||
                Set<Operation> operations = new HashSet<>();
 | 
			
		||||
                if (hs20cfg.getHotspot20ProviderSet() != null && hs20cfg.getHotspot20ProviderSet().size() > 0) {
 | 
			
		||||
 | 
			
		||||
                    for (Profile provider : hs20cfg.getHotspot20ProviderSet()) {
 | 
			
		||||
                        PasspointOsuProviderProfile providerProfile = (PasspointOsuProviderProfile) provider
 | 
			
		||||
                                .getDetails();
 | 
			
		||||
                        String apOsuProviderName = OvsdbToWlanCloudTypeMappingUtility
 | 
			
		||||
                                .getApOsuProviderStringFromOsuProviderName(provider.getName());
 | 
			
		||||
                        Map<String, Value> rowColumns = new HashMap<>();
 | 
			
		||||
                        rowColumns.put("osu_nai", new Atom<>(providerProfile.getOsuNaiStandalone()));
 | 
			
		||||
 | 
			
		||||
                        rowColumns.put("osu_nai2", new Atom<>(providerProfile.getOsuNaiShared()));
 | 
			
		||||
 | 
			
		||||
                        rowColumns.put("osu_provider_name", new Atom<>(apOsuProviderName));
 | 
			
		||||
 | 
			
		||||
                        getOsuIconUuidsForOsuProvider(ovsdbClient, providerProfile, rowColumns);
 | 
			
		||||
                        getOsuProviderFriendlyNames(providerProfile, rowColumns);
 | 
			
		||||
                        getOsuProviderMethodList(providerProfile, rowColumns);
 | 
			
		||||
                        if (providerProfile.getOsuServerUri() != null) {
 | 
			
		||||
                            rowColumns.put("server_uri", new Atom<>(providerProfile.getOsuServerUri()));
 | 
			
		||||
                        }
 | 
			
		||||
                        getOsuProviderServiceDescriptions(providerProfile, rowColumns);
 | 
			
		||||
 | 
			
		||||
                        Row row = new Row(rowColumns);
 | 
			
		||||
 | 
			
		||||
                        if (!osuProviders.containsKey(apOsuProviderName)) {
 | 
			
		||||
                            Insert newOsuProvider = new Insert(hotspot20OsuProvidersDbTable, row);
 | 
			
		||||
                            operations.add(newOsuProvider);
 | 
			
		||||
                        } else {
 | 
			
		||||
                            List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
                            conditions.add(new Condition("server_uri", Function.EQUALS,
 | 
			
		||||
                                    new Atom<>(providerProfile.getOsuServerUri())));
 | 
			
		||||
                            Update updatedOsuProvider = new Update(hotspot20OsuProvidersDbTable, conditions, row);
 | 
			
		||||
                            operations.add(updatedOsuProvider);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (operations.size() > 0) {
 | 
			
		||||
                    CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName,
 | 
			
		||||
                            List.copyOf(operations));
 | 
			
		||||
                    OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("provisionHotspot20OsuProviders Op Result {}", res);
 | 
			
		||||
                        if (res instanceof InsertResult) {
 | 
			
		||||
                            LOG.info("provisionHotspot20OsuProviders insert new row result {}", (res));
 | 
			
		||||
                            // for insert, make sure it is actually in the table
 | 
			
		||||
                            confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(),
 | 
			
		||||
                                    hotspot20OsuProvidersDbTable);
 | 
			
		||||
                        } else if (res instanceof UpdateResult) {
 | 
			
		||||
                            LOG.info("provisionHotspot20OsuProviders update row result {}", (res));
 | 
			
		||||
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.info("Table {} not present in {}. Cannot provision Hotspot20_OSU_Providers",
 | 
			
		||||
                        hotspot20OsuProvidersDbTable, ovsdbName);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in provisionHotspot20OsuProviders", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void provisionHotspot2IconConfig(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
        try {
 | 
			
		||||
            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            if (schema.getTables().containsKey(hotspot20IconConfigDbTable)
 | 
			
		||||
                    && schema.getTables().get(hotspot20IconConfigDbTable) != null) {
 | 
			
		||||
                Map<String, Hotspot20IconConfig> osuIconConfigs = ovsdbGet
 | 
			
		||||
                        .getProvisionedHotspot20IconConfig(ovsdbClient);
 | 
			
		||||
 | 
			
		||||
                OpensyncAPHotspot20Config hs20cfg = opensyncApConfig.getHotspotConfig();
 | 
			
		||||
                Set<Operation> operations = new HashSet<>();
 | 
			
		||||
                if (hs20cfg.getHotspot20ProviderSet() != null && hs20cfg.getHotspot20ProviderSet().size() > 0) {
 | 
			
		||||
 | 
			
		||||
                    for (Profile provider : hs20cfg.getHotspot20ProviderSet()) {
 | 
			
		||||
                        PasspointOsuProviderProfile providerProfile = (PasspointOsuProviderProfile) provider
 | 
			
		||||
                                .getDetails();
 | 
			
		||||
                        for (PasspointOsuIcon passpointOsuIcon : providerProfile.getOsuIconList()) {
 | 
			
		||||
                            Map<String, Value> rowColumns = new HashMap<>();
 | 
			
		||||
                            rowColumns.put("name", new Atom<>(passpointOsuIcon.getIconName()));
 | 
			
		||||
                            if (schema.getTables().get(hotspot20IconConfigDbTable).getColumns().containsKey("path")) {
 | 
			
		||||
                                rowColumns.put("path", new Atom<>(passpointOsuIcon.getFilePath()));
 | 
			
		||||
                            }
 | 
			
		||||
                            rowColumns.put("url", new Atom<>(passpointOsuIcon.getImageUrl()));
 | 
			
		||||
                            rowColumns.put("lang_code", new Atom<>(passpointOsuIcon.getLanguageCode()));
 | 
			
		||||
                            rowColumns.put("height", new Atom<>(passpointOsuIcon.getIconHeight()));
 | 
			
		||||
                            rowColumns.put("img_type", new Atom<>(PasspointOsuIcon.ICON_TYPE));
 | 
			
		||||
                            rowColumns.put("width", new Atom<>(passpointOsuIcon.getIconWidth()));
 | 
			
		||||
                            if (passpointOsuIcon.getImageUrl() != null) {
 | 
			
		||||
                                String md5Hex = DigestUtils.md5Hex(passpointOsuIcon.getImageUrl()).toUpperCase();
 | 
			
		||||
                                if (schema.getTables().get(hotspot20IconConfigDbTable).getColumns()
 | 
			
		||||
                                        .containsKey("icon_config_name")) {
 | 
			
		||||
                                    rowColumns.put("icon_config_name", new Atom<>(md5Hex));
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            Row row = new Row(rowColumns);
 | 
			
		||||
 | 
			
		||||
                            if (!osuIconConfigs.containsKey(passpointOsuIcon.getImageUrl())) {
 | 
			
		||||
                                Insert newHs20Config = new Insert(hotspot20IconConfigDbTable, row);
 | 
			
		||||
                                operations.add(newHs20Config);
 | 
			
		||||
                            } else {
 | 
			
		||||
                                List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
                                conditions.add(new Condition("url", Function.EQUALS,
 | 
			
		||||
                                        new Atom<>(passpointOsuIcon.getImageUrl())));
 | 
			
		||||
                                Update newHs20Config = new Update(hotspot20IconConfigDbTable, conditions, row);
 | 
			
		||||
                                operations.add(newHs20Config);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (operations.size() > 0) {
 | 
			
		||||
                    CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName,
 | 
			
		||||
                            List.copyOf(operations));
 | 
			
		||||
                    OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("provisionHotspot20Config Op Result {}", res);
 | 
			
		||||
                        if (res instanceof InsertResult) {
 | 
			
		||||
                            LOG.info("provisionHotspot20Config insert new row result {}", (res));
 | 
			
		||||
                        } else if (res instanceof UpdateResult) {
 | 
			
		||||
                            LOG.info("provisionHotspot20Config update row result {}", (res));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                LOG.info("Table {} not present in {}. Cannot provision Hotspot20_Icon_Config",
 | 
			
		||||
                        hotspot20IconConfigDbTable, ovsdbName);
 | 
			
		||||
            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in provisionHotspot2IconConfig", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void removeAllHotspot20Config(OvsdbClient ovsdbClient) {
 | 
			
		||||
        try {
 | 
			
		||||
//            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
//            if (schema.getTables().containsKey(hotspot20ConfigDbTable)
 | 
			
		||||
//                    && schema.getTables().get(hotspot20ConfigDbTable) != null) {
 | 
			
		||||
                List<Operation> operations = new ArrayList<>();
 | 
			
		||||
                operations.add(new Delete(hotspot20ConfigDbTable));
 | 
			
		||||
                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
                if (LOG.isDebugEnabled()) {
 | 
			
		||||
                    LOG.debug("Removed all existing hotspot configs from {}:", hotspot20ConfigDbTable);
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("Op Result {}", res);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
//            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in removeAllHotspot20Config", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void removeAllHotspot20IconConfig(OvsdbClient ovsdbClient) {
 | 
			
		||||
        try {
 | 
			
		||||
            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            if (schema.getTables().containsKey(hotspot20IconConfigDbTable)
 | 
			
		||||
                    && schema.getTables().get(hotspot20IconConfigDbTable) != null) {
 | 
			
		||||
                List<Operation> operations = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
                operations.add(new Delete(hotspot20IconConfigDbTable));
 | 
			
		||||
 | 
			
		||||
                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
                if (LOG.isDebugEnabled()) {
 | 
			
		||||
                    LOG.debug("Removed all existing hotspot icon configs from {}:", hotspot20IconConfigDbTable);
 | 
			
		||||
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("Op Result {}", res);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in removeAllHotspot20IconConfig", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void removeAllHotspot20OsuProviders(OvsdbClient ovsdbClient) {
 | 
			
		||||
        try {
 | 
			
		||||
            DatabaseSchema schema = ovsdbClient.getSchema(ovsdbName).get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            if (schema.getTables().containsKey(hotspot20OsuProvidersDbTable)
 | 
			
		||||
                    && schema.getTables().get(hotspot20OsuProvidersDbTable) != null) {
 | 
			
		||||
                List<Operation> operations = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
                operations.add(new Delete(hotspot20OsuProvidersDbTable));
 | 
			
		||||
 | 
			
		||||
                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
                if (LOG.isDebugEnabled()) {
 | 
			
		||||
                    LOG.debug("Removed all existing hotspot osu providers from {}:", hotspot20OsuProvidersDbTable);
 | 
			
		||||
 | 
			
		||||
                    for (OperationResult res : result) {
 | 
			
		||||
                        LOG.debug("Op Result {}", res);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (InterruptedException | ExecutionException | TimeoutException | OvsdbClientException e) {
 | 
			
		||||
            LOG.error("Error in removeAllHotspot20OsuProviders", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void removeAllPasspointConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        removeAllHotspot20Config(ovsdbClient);
 | 
			
		||||
        removeAllHotspot20OsuProviders(ovsdbClient);
 | 
			
		||||
        removeAllHotspot20IconConfig(ovsdbClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,172 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.RowUpdate;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.TableUpdate;
 | 
			
		||||
import com.vmware.ovsdb.protocol.methods.TableUpdates;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbMonitor extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    List<OpensyncAPInetState> getInitialOpensyncApInetStateForRowUpdate(TableUpdates tableUpdates, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        LOG.debug("getInitialOpensyncApInetStateForRowUpdate:");
 | 
			
		||||
        List<OpensyncAPInetState> ret = new ArrayList<>();
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug(wifiInetStateDbTable + "_" + apId + " initial monitor table state received {}", tableUpdates);
 | 
			
		||||
            for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) {
 | 
			
		||||
                for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
 | 
			
		||||
                    if (rowUpdate.getNew() != null) {
 | 
			
		||||
                        ret.addAll(getOpensyncApInetStateForRowUpdate(rowUpdate, apId, ovsdbClient));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw (e);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncAPVIFState> getInitialOpensyncApVifStateForTableUpdates(TableUpdates tableUpdates, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        LOG.debug("getInitialOpensyncApVifStateForTableUpdates:");
 | 
			
		||||
        List<OpensyncAPVIFState> ret = new ArrayList<>();
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug(wifiVifStateDbTable + "_" + apId + " initial monitor table state received {}", tableUpdates);
 | 
			
		||||
            for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) {
 | 
			
		||||
                for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
 | 
			
		||||
                    if (rowUpdate.getNew() != null) {
 | 
			
		||||
                        ret.add(new OpensyncAPVIFState(rowUpdate.getNew()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw (e);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncWifiAssociatedClients> getInitialOpensyncWifiAssociatedClients(TableUpdates tableUpdates, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        LOG.debug("getInitialOpensyncWifiAssociatedClients:");
 | 
			
		||||
        List<OpensyncWifiAssociatedClients> ret = new ArrayList<>();
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug(wifiAssociatedClientsDbTable + "_" + apId + " initial monitor table state received {}",
 | 
			
		||||
                    tableUpdates);
 | 
			
		||||
 | 
			
		||||
            for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) {
 | 
			
		||||
 | 
			
		||||
                for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
 | 
			
		||||
 | 
			
		||||
                    if (rowUpdate.getNew() != null) {
 | 
			
		||||
                        ret.addAll(getOpensyncWifiAssociatedClients(rowUpdate, apId, ovsdbClient));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw (e);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncAPInetState> getOpensyncApInetStateForRowUpdate(RowUpdate rowUpdate, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        List<OpensyncAPInetState> ret = new ArrayList<>();
 | 
			
		||||
        LOG.debug("OvsdbDao::getOpensyncApInetStateForRowUpdate {} for apId {}", rowUpdate, apId);
 | 
			
		||||
        Row row = null;
 | 
			
		||||
        if (rowUpdate.getNew() != null) {
 | 
			
		||||
            if (rowUpdate.getOld() != null) {
 | 
			
		||||
                row = rowUpdate.getOld();
 | 
			
		||||
                row.getColumns().putAll(rowUpdate.getNew().getColumns());
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            row = rowUpdate.getOld();
 | 
			
		||||
        }
 | 
			
		||||
        if (row != null) {
 | 
			
		||||
            ret.add(new OpensyncAPInetState(row));
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncAPRadioState> getOpensyncAPRadioState(TableUpdates tableUpdates, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        List<OpensyncAPRadioState> ret = new ArrayList<>();
 | 
			
		||||
        try {
 | 
			
		||||
            for (Entry<String, TableUpdate> tableUpdate : tableUpdates.getTableUpdates().entrySet()) {
 | 
			
		||||
                for (Entry<UUID, RowUpdate> rowUpdate : tableUpdate.getValue().getRowUpdates().entrySet()) {
 | 
			
		||||
                    Row row = rowUpdate.getValue().getNew();
 | 
			
		||||
                    if (row != null) {
 | 
			
		||||
                        ret.add(new OpensyncAPRadioState(row));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Could not parse update for Wifi_Radio_State", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncAPVIFState> getOpensyncApVifStateForRowUpdate(RowUpdate rowUpdate, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        List<OpensyncAPVIFState> ret = new ArrayList<>();
 | 
			
		||||
        try {
 | 
			
		||||
            Row row = rowUpdate.getNew(); // add/modify/init
 | 
			
		||||
            if (row == null) {
 | 
			
		||||
                row = rowUpdate.getOld(); // delete/modify
 | 
			
		||||
            }
 | 
			
		||||
            if (row != null) {
 | 
			
		||||
                ret.add(new OpensyncAPVIFState(row));
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Could not parse update for Wifi_VIF_State", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    OpensyncAWLANNode getOpensyncAWLANNode(TableUpdates tableUpdates, String apId, OvsdbClient ovsdbClient) {
 | 
			
		||||
        OpensyncAWLANNode tableState = new OpensyncAWLANNode();
 | 
			
		||||
        try {
 | 
			
		||||
            for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) {
 | 
			
		||||
                for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
 | 
			
		||||
                    Row row = rowUpdate.getNew();
 | 
			
		||||
                    if (row != null) {
 | 
			
		||||
                        tableState = new OpensyncAWLANNode(row);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            LOG.error("Failed to handle AWLAN_Node update", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
        return tableState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    List<OpensyncWifiAssociatedClients> getOpensyncWifiAssociatedClients(RowUpdate rowUpdate, String apId,
 | 
			
		||||
            OvsdbClient ovsdbClient) {
 | 
			
		||||
        Row row = rowUpdate.getNew();
 | 
			
		||||
        if (row == null) {
 | 
			
		||||
            row = rowUpdate.getOld();
 | 
			
		||||
        }
 | 
			
		||||
        if (row != null) {
 | 
			
		||||
            return List.of(new OpensyncWifiAssociatedClients(row));
 | 
			
		||||
        } else {
 | 
			
		||||
            return List.of();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,356 @@
 | 
			
		||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import java.util.concurrent.TimeoutException;
 | 
			
		||||
import java.util.function.Predicate;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import com.telecominfraproject.wlan.equipment.models.NetworkForwardMode;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
			
		||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiInetConfigInfo;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.network.models.GreTunnelConfiguration;
 | 
			
		||||
import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration;
 | 
			
		||||
import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Delete;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Insert;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Operation;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.Update;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Condition;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
 | 
			
		||||
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
 | 
			
		||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
			
		||||
 | 
			
		||||
@Component
 | 
			
		||||
public class OvsdbNetworkConfig extends OvsdbDaoBase {
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    OvsdbGet ovsdbGet;
 | 
			
		||||
 | 
			
		||||
    void configureGreTunnel(OvsdbClient ovsdbClient, Profile apNetworkConfiguration) {
 | 
			
		||||
        try {
 | 
			
		||||
            LOG.debug("Configure Gre Tunnel {}", apNetworkConfiguration);
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
            ApNetworkConfiguration details = (ApNetworkConfiguration) apNetworkConfiguration.getDetails();
 | 
			
		||||
 | 
			
		||||
            for (GreTunnelConfiguration greTunnelConfiguration : details.getGreTunnelConfigurations()) {
 | 
			
		||||
 | 
			
		||||
                if (greTunnelConfiguration.getGreRemoteInetAddr() == null) {
 | 
			
		||||
                    LOG.info("Cannot configure GRE profile without gre_remote_inet_addr");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (greTunnelConfiguration.getGreTunnelName() == null) {
 | 
			
		||||
                    LOG.info("Cannot configure GRE profile without if_name");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                Map<String, Value> tableColumns = new HashMap<>();
 | 
			
		||||
                tableColumns.put("gre_remote_inet_addr",
 | 
			
		||||
                        new Atom<>(greTunnelConfiguration.getGreRemoteInetAddr().getHostAddress()));
 | 
			
		||||
                tableColumns.put("if_name", new Atom<>(greTunnelConfiguration.getGreTunnelName()));
 | 
			
		||||
                tableColumns.put("if_type", new Atom<>("gre"));
 | 
			
		||||
                tableColumns.put("enabled", new Atom<>(true));
 | 
			
		||||
                tableColumns.put("network", new Atom<>(true));
 | 
			
		||||
 | 
			
		||||
                operations.add(new Insert(wifiInetConfigDbTable, new Row(tableColumns)));
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (operations.isEmpty()) {
 | 
			
		||||
                LOG.info("No GRE tunnels to be configured.");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                if (res instanceof InsertResult) {
 | 
			
		||||
                    LOG.info("configureGreTunnel {}", ((InsertResult) res).toString());
 | 
			
		||||
                } else if (res instanceof UpdateResult) {
 | 
			
		||||
                    LOG.info("configureGreTunnel {}", ((UpdateResult) res).toString());
 | 
			
		||||
                } else if (res instanceof ErrorResult) {
 | 
			
		||||
                    LOG.error("configureGreTunnel error {}", (res));
 | 
			
		||||
                    throw new RuntimeException("configureGreTunnel " + ((ErrorResult) res).getError() + " "
 | 
			
		||||
                            + ((ErrorResult) res).getDetails());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
			
		||||
            LOG.error("Couldn't configure Gre Tunnel {}", apNetworkConfiguration, e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void configureGreTunnels(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
 | 
			
		||||
        LOG.info("Configure Gre tunnels {}", opensyncApConfig.getApProfile());
 | 
			
		||||
        if (opensyncApConfig.getApProfile() != null) {
 | 
			
		||||
            configureGreTunnel(ovsdbClient, opensyncApConfig.getApProfile());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Insert or update Wifi_Inet_Interface for Wifi_VIF_Config table entry
 | 
			
		||||
     *
 | 
			
		||||
     * @param ovsdbClient
 | 
			
		||||
     * @param ifName
 | 
			
		||||
     * @param enabled
 | 
			
		||||
     * @param ifType
 | 
			
		||||
     * @param isUpdate
 | 
			
		||||
     * @param isNat
 | 
			
		||||
     */
 | 
			
		||||
    void configureInetInterface(OvsdbClient ovsdbClient, String ifName, boolean enabled, String ifType,
 | 
			
		||||
            boolean isUpdate, boolean isNat, List<Operation> operations) {
 | 
			
		||||
            Map<String, Value> tableColumns = new HashMap<>();
 | 
			
		||||
            tableColumns.put("if_type", new Atom<>(ifType));
 | 
			
		||||
            tableColumns.put("enabled", new Atom<>(enabled));
 | 
			
		||||
            tableColumns.put("network", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("if_name", new Atom<>(ifName));
 | 
			
		||||
            tableColumns.put("NAT", new Atom<>(isNat));
 | 
			
		||||
            Row row = new Row(tableColumns);
 | 
			
		||||
            if (isUpdate) {
 | 
			
		||||
                List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
                conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName)));
 | 
			
		||||
                operations.add(new Update(wifiInetConfigDbTable, conditions, row));
 | 
			
		||||
            } else {
 | 
			
		||||
                operations.add(new Insert(wifiInetConfigDbTable, row));
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  @param ovsdbClient
 | 
			
		||||
     * @param vifInterfaceName
 | 
			
		||||
     * @param enabled
 | 
			
		||||
     * @param networkForwardMode
 | 
			
		||||
     * @param operations
 | 
			
		||||
     */
 | 
			
		||||
    void configureInetVifInterface(OvsdbClient ovsdbClient, String vifInterfaceName, boolean enabled,
 | 
			
		||||
                                   NetworkForwardMode networkForwardMode, List<Operation> operations) {
 | 
			
		||||
        Map<String, WifiInetConfigInfo> inetConfigs = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient);
 | 
			
		||||
        if (inetConfigs.containsKey(vifInterfaceName)) {
 | 
			
		||||
            configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", true,
 | 
			
		||||
                    (networkForwardMode == NetworkForwardMode.NAT), operations);
 | 
			
		||||
        } else {
 | 
			
		||||
            configureInetInterface(ovsdbClient, vifInterfaceName, enabled, "vif", false,
 | 
			
		||||
                    (networkForwardMode == NetworkForwardMode.NAT), operations);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Use this to do any post configuration interface adjustment (i.e. turn on
 | 
			
		||||
     * dhcp_sniff, etc.)
 | 
			
		||||
     */
 | 
			
		||||
    void configureInterfaces(OvsdbClient ovsdbClient) {
 | 
			
		||||
        configureWanInterfacesForDhcpSniffing(ovsdbClient);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void createVlanInterfaceInGreTunnel(OvsdbClient ovsdbClient, int vlanId, String greTunnel) {
 | 
			
		||||
        try {
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            Map<String, Value> tableColumns = new HashMap<>();
 | 
			
		||||
            Map<String, WifiInetConfigInfo> inetConfigMap = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient);
 | 
			
		||||
            WifiInetConfigInfo parentTunnel = inetConfigMap.get(greTunnel);
 | 
			
		||||
            if (parentTunnel == null) {
 | 
			
		||||
                throw new RuntimeException("Cannot get tunnel interface " + parentTunnel + " for vlan " + vlanId);
 | 
			
		||||
            }
 | 
			
		||||
            tableColumns = new HashMap<>();
 | 
			
		||||
            tableColumns.put("if_type", new Atom<>("bridge"));
 | 
			
		||||
            tableColumns.put("vlan_id", new Atom<>(vlanId));
 | 
			
		||||
            tableColumns.put("if_name", new Atom<>(parentTunnel.ifName + "_" + Integer.toString(vlanId)));
 | 
			
		||||
            tableColumns.put("parent_ifname", new Atom<>(parentTunnel.ifName));
 | 
			
		||||
            tableColumns.put("enabled", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("network", new Atom<>(true));
 | 
			
		||||
            Row row = new Row(tableColumns);
 | 
			
		||||
            operations.add(new Insert(wifiInetConfigDbTable, row));
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                if (res instanceof InsertResult) {
 | 
			
		||||
                    LOG.info("createVlanNetworkInterfaces {}", ((InsertResult) res).toString());
 | 
			
		||||
                } else if (res instanceof UpdateResult) {
 | 
			
		||||
                    LOG.info("createVlanNetworkInterfaces {}", ((UpdateResult) res).toString());
 | 
			
		||||
                } else if (res instanceof ErrorResult) {
 | 
			
		||||
                    LOG.error("createVlanNetworkInterfaces error {}", (res));
 | 
			
		||||
                    throw new RuntimeException("createVlanNetworkInterfaces " + ((ErrorResult) res).getError() + " "
 | 
			
		||||
                            + ((ErrorResult) res).getDetails());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            inetConfigMap = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient);
 | 
			
		||||
            LOG.debug("Provisioned vlan on greTunnel {}",
 | 
			
		||||
                    inetConfigMap.get(parentTunnel.ifName + "_" + Integer.toString(vlanId)));
 | 
			
		||||
        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
			
		||||
            LOG.error("Error in provisioning Vlan", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void createVlanNetworkInterfaces(OvsdbClient ovsdbClient, int vlanId) {
 | 
			
		||||
        try {
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            Map<String, Value> tableColumns = new HashMap<>();
 | 
			
		||||
            Map<String, WifiInetConfigInfo> inetConfigMap = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient);
 | 
			
		||||
            WifiInetConfigInfo parentLanInterface = inetConfigMap.get(defaultLanInterfaceName);
 | 
			
		||||
            if (parentLanInterface == null) {
 | 
			
		||||
                throw new RuntimeException(
 | 
			
		||||
                        "Cannot get lan interface " + defaultLanInterfaceName + " for vlan " + vlanId);
 | 
			
		||||
            }
 | 
			
		||||
            tableColumns.put("if_type", new Atom<>("vlan"));
 | 
			
		||||
            tableColumns.put("vlan_id", new Atom<>(vlanId));
 | 
			
		||||
            tableColumns.put("if_name", new Atom<>(parentLanInterface.ifName + "_" + Integer.toString(vlanId)));
 | 
			
		||||
            tableColumns.put("parent_ifname", new Atom<>(parentLanInterface.ifName));
 | 
			
		||||
            tableColumns.put("enabled", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("network", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("ip_assign_scheme", new Atom<>(parentLanInterface.ipAssignScheme));
 | 
			
		||||
            tableColumns.put("NAT", new Atom<>(parentLanInterface.nat));
 | 
			
		||||
            tableColumns.put("mtu", new Atom<>(1500));
 | 
			
		||||
            String[] inetAddress = parentLanInterface.inetAddr.split("\\.");
 | 
			
		||||
            String vlanAddress = inetAddress[0] + "." + inetAddress[1] + "." + vlanId + "." + inetAddress[3];
 | 
			
		||||
            tableColumns.put("inet_addr", new Atom<>(vlanAddress));
 | 
			
		||||
            tableColumns.put("netmask", new Atom<>(parentLanInterface.netmask));
 | 
			
		||||
            tableColumns.put("dhcpd", com.vmware.ovsdb.protocol.operation.notation.Map.of(parentLanInterface.dhcpd));
 | 
			
		||||
            Row row = new Row(tableColumns);
 | 
			
		||||
            if (inetConfigMap.containsKey(parentLanInterface.ifName + "_" + Integer.toString(vlanId))) {
 | 
			
		||||
                List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
                conditions.add(new Condition("vlan_id", Function.EQUALS, new Atom<>(vlanId)));
 | 
			
		||||
                conditions.add(new Condition("parent_ifname", Function.EQUALS, new Atom<>(parentLanInterface.ifName)));
 | 
			
		||||
                operations.add(new Update(wifiInetConfigDbTable, conditions, row));
 | 
			
		||||
            } else {
 | 
			
		||||
                operations.add(new Insert(wifiInetConfigDbTable, row));
 | 
			
		||||
            }
 | 
			
		||||
            WifiInetConfigInfo parentWanInterface = inetConfigMap.get(defaultWanInterfaceName);
 | 
			
		||||
            if (parentWanInterface == null) {
 | 
			
		||||
                throw new RuntimeException(
 | 
			
		||||
                        "Cannot get wan interface " + defaultWanInterfaceName + " for vlan " + vlanId);
 | 
			
		||||
            }
 | 
			
		||||
            tableColumns = new HashMap<>();
 | 
			
		||||
            tableColumns.put("if_type", new Atom<>("vlan"));
 | 
			
		||||
            tableColumns.put("vlan_id", new Atom<>(vlanId));
 | 
			
		||||
            tableColumns.put("if_name", new Atom<>(parentWanInterface.ifName + "_" + Integer.toString(vlanId)));
 | 
			
		||||
            tableColumns.put("parent_ifname", new Atom<>(parentWanInterface.ifName));
 | 
			
		||||
            tableColumns.put("enabled", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("network", new Atom<>(true));
 | 
			
		||||
            tableColumns.put("ip_assign_scheme", new Atom<>(parentWanInterface.ipAssignScheme));
 | 
			
		||||
            tableColumns.put("NAT", new Atom<>(parentWanInterface.nat));
 | 
			
		||||
            tableColumns.put("mtu", new Atom<>(1500));
 | 
			
		||||
            row = new Row(tableColumns);
 | 
			
		||||
            if (inetConfigMap.containsKey(parentWanInterface.ifName + "_" + Integer.toString(vlanId))) {
 | 
			
		||||
                List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
                conditions.add(new Condition("vlan_id", Function.EQUALS, new Atom<>(vlanId)));
 | 
			
		||||
                conditions.add(new Condition("parent_ifname", Function.EQUALS, new Atom<>(parentWanInterface.ifName)));
 | 
			
		||||
            } else {
 | 
			
		||||
                operations.add(new Insert(wifiInetConfigDbTable, row));
 | 
			
		||||
            }
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                if (res instanceof InsertResult) {
 | 
			
		||||
                    LOG.info("createVlanNetworkInterfaces {}", ((InsertResult) res).toString());
 | 
			
		||||
                } else if (res instanceof UpdateResult) {
 | 
			
		||||
                    LOG.info("createVlanNetworkInterfaces {}", ((UpdateResult) res).toString());
 | 
			
		||||
                } else if (res instanceof ErrorResult) {
 | 
			
		||||
                    LOG.error("createVlanNetworkInterfaces error {}", (res));
 | 
			
		||||
                    throw new RuntimeException("createVlanNetworkInterfaces " + ((ErrorResult) res).getError() + " "
 | 
			
		||||
                            + ((ErrorResult) res).getDetails());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            inetConfigMap = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient);
 | 
			
		||||
            LOG.debug("Provisioned vlan on wan {} and lan {}",
 | 
			
		||||
                    inetConfigMap.get(parentWanInterface.ifName + "_" + Integer.toString(vlanId)),
 | 
			
		||||
                    inetConfigMap.get(parentLanInterface.ifName + "_" + Integer.toString(vlanId)));
 | 
			
		||||
        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
			
		||||
            LOG.error("Error in provisioning Vlan", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void createVlanNetworkInterfaces(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
			
		||||
        Set<Integer> vlans = new HashSet<>();
 | 
			
		||||
        for (Profile ssidProfile : opensyncApConfig.getSsidProfile()) {
 | 
			
		||||
            Integer vlanId = ((SsidConfiguration) ssidProfile.getDetails()).getVlanId();
 | 
			
		||||
            if (vlanId != null && vlanId > 1) {
 | 
			
		||||
                vlans.add(vlanId);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (Integer vlanId : vlans) {
 | 
			
		||||
            Optional<GreTunnelConfiguration> tunnelConfiguration = ((ApNetworkConfiguration) opensyncApConfig
 | 
			
		||||
                    .getApProfile().getDetails()).getGreTunnelConfigurations().stream()
 | 
			
		||||
                            .filter(new Predicate<GreTunnelConfiguration>() {
 | 
			
		||||
                                @Override
 | 
			
		||||
                                public boolean test(GreTunnelConfiguration t) {
 | 
			
		||||
                                    return t.getVlanIdsInGreTunnel().contains(vlanId);
 | 
			
		||||
                                }
 | 
			
		||||
                            }).findFirst();
 | 
			
		||||
            if (tunnelConfiguration.isPresent()) {
 | 
			
		||||
                createVlanInterfaceInGreTunnel(ovsdbClient, vlanId, tunnelConfiguration.get().getGreTunnelName());
 | 
			
		||||
            } else {
 | 
			
		||||
                createVlanNetworkInterfaces(ovsdbClient, vlanId);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void removeAllInetConfigs(OvsdbClient ovsdbClient) {
 | 
			
		||||
        try {
 | 
			
		||||
            Collection<WifiInetConfigInfo> provisionedWifiInetConfigs = ovsdbGet
 | 
			
		||||
                    .getProvisionedWifiInetConfigs(ovsdbClient).values();
 | 
			
		||||
            List<Operation> operations = new ArrayList<>();
 | 
			
		||||
            List<Condition> conditions = new ArrayList<>();
 | 
			
		||||
            for (WifiInetConfigInfo wifiInetConfigInfo : provisionedWifiInetConfigs) {
 | 
			
		||||
                if (wifiInetConfigInfo.vlanId > 1 || wifiInetConfigInfo.ifType.equals("vif")
 | 
			
		||||
                        || wifiInetConfigInfo.ifName.startsWith("gre") || wifiInetConfigInfo.ifType.equals("gre")) {
 | 
			
		||||
                    conditions = new ArrayList<>();
 | 
			
		||||
                    conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(wifiInetConfigInfo.ifName)));
 | 
			
		||||
                    operations.add(new Delete(wifiInetConfigDbTable, conditions));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
			
		||||
            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
			
		||||
            LOG.info("Removed all existing vif, vlan, and gre interface configs from {}:", wifiInetConfigDbTable);
 | 
			
		||||
            for (OperationResult res : result) {
 | 
			
		||||
                LOG.info("Op Result {}", res);
 | 
			
		||||
            }
 | 
			
		||||
            provisionedWifiInetConfigs = ovsdbGet.getProvisionedWifiInetConfigs(ovsdbClient).values();
 | 
			
		||||
            for (WifiInetConfigInfo inetConfigInfo : provisionedWifiInetConfigs) {
 | 
			
		||||
                if (inetConfigInfo.ifType.equals("vif") || inetConfigInfo.ifType.equals("gre")) {
 | 
			
		||||
                    throw new RuntimeException(
 | 
			
		||||
                            "Failed to remove all vif and gre interface configurations from Wifi_Inet_Config dbTable, still has "
 | 
			
		||||
                                    + provisionedWifiInetConfigs.stream().filter(new Predicate<WifiInetConfigInfo>() {
 | 
			
		||||
                                        @Override
 | 
			
		||||
                                        public boolean test(WifiInetConfigInfo t) {
 | 
			
		||||
                                            if ((t.ifType.equals("vif")) || (t.ifType.equals("gre"))) {
 | 
			
		||||
                                                return true;
 | 
			
		||||
                                            }
 | 
			
		||||
                                            return false;
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }).collect(Collectors.toList()));
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
			
		||||
            LOG.error("Error in removeAllInetConfigs", e);
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user