mirror of
				https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
				synced 2025-11-03 20:17:53 +00:00 
			
		
		
		
	Compare commits
	
		
			146 Commits
		
	
	
		
			release-te
			...
			release/v1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					af604289cc | ||
| 
						 | 
					e173e02eae | ||
| 
						 | 
					1fbc4e1dff | ||
| 
						 | 
					cd67fc15dd | ||
| 
						 | 
					a98cca3d8c | ||
| 
						 | 
					4552118b4e | ||
| 
						 | 
					67abbc0bc7 | ||
| 
						 | 
					9d33afec93 | ||
| 
						 | 
					1bdecada9b | ||
| 
						 | 
					9b31e67822 | ||
| 
						 | 
					1af6b363b8 | ||
| 
						 | 
					04c6a13675 | ||
| 
						 | 
					44238de99a | ||
| 
						 | 
					d644fa5e37 | ||
| 
						 | 
					1e74c777fd | ||
| 
						 | 
					d43a1d0f7b | ||
| 
						 | 
					d2e3fa7a72 | ||
| 
						 | 
					f96b5b4bed | ||
| 
						 | 
					eeeec8999f | ||
| 
						 | 
					052bad3ef2 | ||
| 
						 | 
					cc007f6115 | ||
| 
						 | 
					18dbc3fe96 | ||
| 
						 | 
					ee4cf9ff59 | ||
| 
						 | 
					cfa8c7e039 | ||
| 
						 | 
					4565d7a446 | ||
| 
						 | 
					89f608b5bc | ||
| 
						 | 
					0fda8b51bf | ||
| 
						 | 
					180fc3ceb1 | ||
| 
						 | 
					9607124360 | ||
| 
						 | 
					acf798bbc9 | ||
| 
						 | 
					1cee28a694 | ||
| 
						 | 
					68037ecf80 | ||
| 
						 | 
					7eb9ea5039 | ||
| 
						 | 
					89f9e2b11e | ||
| 
						 | 
					087fb461a9 | ||
| 
						 | 
					c9e93e2bb3 | ||
| 
						 | 
					0d77847761 | ||
| 
						 | 
					4d2d0d3990 | ||
| 
						 | 
					0ad90840fd | ||
| 
						 | 
					ea6e5cf761 | ||
| 
						 | 
					1e0fd00d98 | ||
| 
						 | 
					7928dceefb | ||
| 
						 | 
					4773530305 | ||
| 
						 | 
					a0a12d3c8c | ||
| 
						 | 
					6fc02664ad | ||
| 
						 | 
					ff8b0a006c | ||
| 
						 | 
					8510882ed8 | ||
| 
						 | 
					d6f907f1af | ||
| 
						 | 
					b04cd86cda | ||
| 
						 | 
					657f61466c | ||
| 
						 | 
					234c087180 | ||
| 
						 | 
					7d785e3a10 | ||
| 
						 | 
					738d11b11c | ||
| 
						 | 
					2c787b4fef | ||
| 
						 | 
					23f9da0af0 | ||
| 
						 | 
					15a7741909 | ||
| 
						 | 
					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 | 
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# wlan-opensync-wifi-controller  #TESTING
 | 
					# wlan-opensync-wifi-controller
 | 
				
			||||||
 
 | 
					
 | 
				
			||||||
Opensync Wifi Controller - accepts connections from the access points, pushes configuration, reads metrics from the topics on MQTT broker.
 | 
					Opensync Wifi Controller - accepts connections from the access points, pushes configuration, reads metrics from the topics on MQTT broker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Components in this repository depend on other wlan-cloud repositories. 
 | 
					Components in this repository depend on other wlan-cloud repositories. 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,10 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
					<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">
 | 
				
			||||||
	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>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-ext-cloud</artifactId>
 | 
						<artifactId>opensync-ext-cloud</artifactId>
 | 
				
			||||||
@@ -16,108 +14,126 @@
 | 
				
			|||||||
<!-- 		<dependency> -->
 | 
					<!-- 		<dependency> -->
 | 
				
			||||||
<!-- 			<groupId>com.telecominfraproject.wlan</groupId> -->
 | 
					<!-- 			<groupId>com.telecominfraproject.wlan</groupId> -->
 | 
				
			||||||
<!-- 			<artifactId>opensync-ext-interface</artifactId> -->
 | 
					<!-- 			<artifactId>opensync-ext-interface</artifactId> -->
 | 
				
			||||||
<!-- 			<version>${tip-wlan-cloud.release.version}</version> -->
 | 
					<!-- 			<version>0.0.1-SNAPSHOT</version> -->
 | 
				
			||||||
<!-- 		</dependency> -->
 | 
					<!-- 		</dependency> -->
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-gateway</artifactId>
 | 
								<artifactId>opensync-gateway</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 	 
 | 
					 	 
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <artifactId>base-client</artifactId>
 | 
					            <artifactId>base-client</artifactId>
 | 
				
			||||||
            <groupId>com.telecominfraproject.wlan</groupId>
 | 
					            <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
            <version>${tip-wlan-cloud.release.version}</version>
 | 
					            <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>equipment-gateway-models</artifactId>
 | 
					        <artifactId>equipment-gateway-models</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>
 | 
					      </dependency>
 | 
				
			||||||
     
 | 
					     
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>customer-service-interface</artifactId>
 | 
					        <artifactId>customer-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>
 | 
					      </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>location-service-interface</artifactId>
 | 
					        <artifactId>location-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>equipment-service-interface</artifactId>
 | 
					        <artifactId>equipment-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>profile-service-interface</artifactId>
 | 
					        <artifactId>profile-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>portal-user-service-interface</artifactId>
 | 
					        <artifactId>portal-user-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>service-metric-service-interface</artifactId>
 | 
					        <artifactId>service-metric-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
 | 
					      <dependency>
 | 
				
			||||||
 | 
					        <artifactId>service-metric-models</artifactId>
 | 
				
			||||||
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>system-event-service-interface</artifactId>
 | 
					        <artifactId>system-event-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <dependency>
 | 
				
			||||||
 | 
					        <artifactId>system-event-models</artifactId>
 | 
				
			||||||
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>alarm-service-interface</artifactId>
 | 
					        <artifactId>alarm-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>status-service-interface</artifactId>
 | 
					        <artifactId>status-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>client-service-interface</artifactId>
 | 
					        <artifactId>client-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <dependency>
 | 
				
			||||||
 | 
					        <artifactId>client-models</artifactId>
 | 
				
			||||||
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>routing-service-interface</artifactId>
 | 
					        <artifactId>routing-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
       <dependency>
 | 
					       <dependency>
 | 
				
			||||||
        <artifactId>firmware-service-interface</artifactId>
 | 
					        <artifactId>firmware-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>manufacturer-service-interface</artifactId>
 | 
					        <artifactId>manufacturer-service-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>      
 | 
					      </dependency>      
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
      <dependency>
 | 
					      <dependency>
 | 
				
			||||||
        <artifactId>cloud-event-dispatcher-interface</artifactId>
 | 
					        <artifactId>cloud-event-dispatcher-interface</artifactId>
 | 
				
			||||||
        <groupId>com.telecominfraproject.wlan</groupId>
 | 
					        <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
        <version>${tip-wlan-cloud.release.version}</version>
 | 
					        <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
      </dependency>     
 | 
					      </dependency>     
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -32,6 +32,7 @@ import com.telecominfraproject.wlan.core.model.service.GatewayType;
 | 
				
			|||||||
import com.telecominfraproject.wlan.core.model.service.ServiceInstanceInformation;
 | 
					import com.telecominfraproject.wlan.core.model.service.ServiceInstanceInformation;
 | 
				
			||||||
import com.telecominfraproject.wlan.core.server.container.ConnectorProperties;
 | 
					import com.telecominfraproject.wlan.core.server.container.ConnectorProperties;
 | 
				
			||||||
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
 | 
					import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBaseCommand;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBaseCommand;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWChangeRedirectorHost;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWChangeRedirectorHost;
 | 
				
			||||||
@@ -42,6 +43,7 @@ import com.telecominfraproject.wlan.equipmentgateway.models.CEGWConfigChangeNoti
 | 
				
			|||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareDownloadRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareDownloadRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareFlashRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareFlashRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCellSizeAttributesRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRadioResetRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRadioResetRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck;
 | 
					import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck;
 | 
				
			||||||
@@ -205,6 +207,9 @@ public class OpensyncCloudGatewayController {
 | 
				
			|||||||
                    case NewChannelRequest:
 | 
					                    case NewChannelRequest:
 | 
				
			||||||
                        ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
 | 
					                        ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
 | 
				
			||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
 | 
					                    case CellSizeAttributesRequest:
 | 
				
			||||||
 | 
					                        ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command));
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
                    default:
 | 
					                    default:
 | 
				
			||||||
                        LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
 | 
					                        LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
 | 
				
			||||||
                        ret.add(new EquipmentCommandResponse(
 | 
					                        ret.add(new EquipmentCommandResponse(
 | 
				
			||||||
@@ -296,6 +301,10 @@ public class OpensyncCloudGatewayController {
 | 
				
			|||||||
    private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) {
 | 
					    private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) {
 | 
				
			||||||
        return sendMessage(session, command.getInventoryId(), command);
 | 
					        return sendMessage(session, command.getInventoryId(), command);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) {
 | 
				
			||||||
 | 
					        return sendMessage(session, command.getInventoryId(), command);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Deliver a message in payload to the CE
 | 
					     * Deliver a message in payload to the CE
 | 
				
			||||||
@@ -329,7 +338,15 @@ public class OpensyncCloudGatewayController {
 | 
				
			|||||||
        } else if (command instanceof CEGWNewChannelRequest) {
 | 
					        } else if (command instanceof CEGWNewChannelRequest) {
 | 
				
			||||||
            CEGWNewChannelRequest request = (CEGWNewChannelRequest) command;
 | 
					            CEGWNewChannelRequest request = (CEGWNewChannelRequest) command;
 | 
				
			||||||
            Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
 | 
					            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 CEGWCellSizeAttributesRequest) {
 | 
				
			||||||
 | 
					            CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
 | 
				
			||||||
 | 
					            Map<RadioType, CellSizeAttributes> cellSizeAttributeMap = request.getCellSizeAttributesMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            String resultDetails = tipwlanOvsdbClient.processCellSizeAttributesRequest(inventoryId, cellSizeAttributeMap);
 | 
				
			||||||
            response.setResultDetail(resultDetails);
 | 
					            response.setResultDetail(resultDetails);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        } else if (command instanceof CEGWFirmwareDownloadRequest) {
 | 
					        } else if (command instanceof CEGWFirmwareDownloadRequest) {
 | 
				
			||||||
@@ -339,10 +356,9 @@ public class OpensyncCloudGatewayController {
 | 
				
			|||||||
            String filepath = dlRequest.getFilePath();
 | 
					            String filepath = dlRequest.getFilePath();
 | 
				
			||||||
            String firmwareVersion = dlRequest.getFirmwareVersion();
 | 
					            String firmwareVersion = dlRequest.getFirmwareVersion();
 | 
				
			||||||
            String username = dlRequest.getUsername();
 | 
					            String username = dlRequest.getUsername();
 | 
				
			||||||
            String validationCode = dlRequest.getValidationCode();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
 | 
					            String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
 | 
				
			||||||
                    username, validationCode);
 | 
					                    username);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            response.setResultDetail(resultDetails);
 | 
					            response.setResultDetail(resultDetails);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -5,6 +5,7 @@ import static org.junit.Assert.assertNull;
 | 
				
			|||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.EnumMap;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@@ -66,6 +67,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.ConnectNodeInfo;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
 | 
					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.OpensyncAPVIFState;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.utils.MqttStatsPublisher;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
					import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
					import com.telecominfraproject.wlan.profile.models.Profile;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.ProfileType;
 | 
					import com.telecominfraproject.wlan.profile.models.ProfileType;
 | 
				
			||||||
@@ -74,6 +76,7 @@ import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration;
 | 
				
			|||||||
import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration;
 | 
					import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration;
 | 
				
			||||||
import com.telecominfraproject.wlan.routing.RoutingServiceInterface;
 | 
					import com.telecominfraproject.wlan.routing.RoutingServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.status.StatusServiceInterface;
 | 
					import com.telecominfraproject.wlan.status.StatusServiceInterface;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.status.equipment.models.EquipmentChannelStatusData;
 | 
				
			||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
 | 
					import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolStatusData;
 | 
				
			||||||
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData;
 | 
					import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData;
 | 
				
			||||||
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID;
 | 
					import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID;
 | 
				
			||||||
@@ -125,7 +128,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
					    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
				
			||||||
    OpensyncCloudGatewayController gatewayController;
 | 
					    OpensyncCloudGatewayController gatewayController;
 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttProcessor;
 | 
					    MqttStatsPublisher opensyncExternalIntegrationMqttProcessor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud;
 | 
					    OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud;
 | 
				
			||||||
@@ -461,16 +464,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					 | 
				
			||||||
    public void testExtractApIdFromTopic() {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        String topic = "/ap/Test_Client_21P10C68818122/opensync";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assertEquals("Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
                OpensyncExternalIntegrationMqttMessageProcessor.extractApIdFromTopic(topic));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testProcessMqttMessageStringReport() {
 | 
					    public void testProcessMqttMessageStringReport() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -493,10 +486,10 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
					        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
				
			||||||
        com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
 | 
					        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());
 | 
					        clientInstance.setDetails(new ClientInfoDetails());
 | 
				
			||||||
        com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
 | 
					        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());
 | 
					        clientInstance2.setDetails(new ClientInfoDetails());
 | 
				
			||||||
        Mockito.when(
 | 
					        Mockito.when(
 | 
				
			||||||
                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
					                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
				
			||||||
@@ -506,10 +499,10 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
					                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ClientSession clientSession = new ClientSession();
 | 
					        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.setDetails(new ClientSessionDetails());
 | 
				
			||||||
        ClientSession clientSession2 = new ClientSession();
 | 
					        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());
 | 
					        clientSession2.setDetails(new ClientSessionDetails());
 | 
				
			||||||
        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
					        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
				
			||||||
                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
					                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
				
			||||||
@@ -597,7 +590,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        equipment.setProfileId(1);
 | 
					        equipment.setProfileId(1);
 | 
				
			||||||
        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
					        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.get(equipment.getId())).thenReturn(equipment);
 | 
				
			||||||
        Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment);
 | 
					        Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
@@ -629,7 +622,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        Mockito.verify(session).getCustomerId();
 | 
					        Mockito.verify(session).getCustomerId();
 | 
				
			||||||
        Mockito.verify(session).getEquipmentId();
 | 
					        Mockito.verify(session).getEquipmentId();
 | 
				
			||||||
        Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
 | 
					        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.CLIENT_DETAILS);
 | 
				
			||||||
        Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS);
 | 
					        Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS);
 | 
				
			||||||
@@ -687,7 +680,19 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        protocolStatus.setStatusDataType(StatusDataType.PROTOCOL);
 | 
					        protocolStatus.setStatusDataType(StatusDataType.PROTOCOL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus);
 | 
					        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        Status channelStatus = new Status();
 | 
				
			||||||
 | 
					        channelStatus.setCustomerId(2);
 | 
				
			||||||
 | 
					        channelStatus.setEquipmentId(1L);
 | 
				
			||||||
 | 
					        EquipmentChannelStatusData channelStatusData = new EquipmentChannelStatusData();
 | 
				
			||||||
 | 
					        Map<RadioType, Integer> channelStatusDataMap = new EnumMap<>(RadioType.class);
 | 
				
			||||||
 | 
					        channelStatusDataMap.put(RadioType.is2dot4GHz, 6);
 | 
				
			||||||
 | 
					        channelStatusDataMap.put(RadioType.is5GHzL, 36);
 | 
				
			||||||
 | 
					        channelStatusDataMap.put(RadioType.is5GHzU, 157);
 | 
				
			||||||
 | 
					        channelStatusData.setChannelNumberStatusDataMap(channelStatusDataMap);
 | 
				
			||||||
 | 
					        channelStatus.setDetails(channelStatusData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.RADIO_CHANNEL)).thenReturn(channelStatus);
 | 
				
			||||||
        Status bssidStatus = new Status();
 | 
					        Status bssidStatus = new Status();
 | 
				
			||||||
        bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS);
 | 
					        bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS);
 | 
				
			||||||
        bssidStatus.setCustomerId(2);
 | 
					        bssidStatus.setCustomerId(2);
 | 
				
			||||||
@@ -698,8 +703,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS)).thenReturn(bssidStatus);
 | 
					        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS)).thenReturn(bssidStatus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.update(bssidStatus)).thenReturn(bssidStatus);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Status clientStatus = new Status();
 | 
					        Status clientStatus = new Status();
 | 
				
			||||||
        clientStatus.setCustomerId(2);
 | 
					        clientStatus.setCustomerId(2);
 | 
				
			||||||
        clientStatus.setEquipmentId(1L);
 | 
					        clientStatus.setEquipmentId(1L);
 | 
				
			||||||
@@ -711,7 +714,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        clientStatus.setDetails(clientConnectionDetails);
 | 
					        clientStatus.setDetails(clientConnectionDetails);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS)).thenReturn(clientStatus);
 | 
					        Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS)).thenReturn(clientStatus);
 | 
				
			||||||
        Mockito.when(statusServiceInterface.update(clientStatus)).thenReturn(clientStatus);
 | 
					        Mockito.when(statusServiceInterface.update(Mockito.any(Status.class))).thenReturn(channelStatus).thenReturn(bssidStatus).thenReturn(clientStatus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        OvsdbSession session = Mockito.mock(OvsdbSession.class);
 | 
					        OvsdbSession session = Mockito.mock(OvsdbSession.class);
 | 
				
			||||||
        Mockito.when(session.getEquipmentId()).thenReturn(1L);
 | 
					        Mockito.when(session.getEquipmentId()).thenReturn(1L);
 | 
				
			||||||
@@ -726,7 +729,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        Mockito.verify(session).getEquipmentId();
 | 
					        Mockito.verify(session).getEquipmentId();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
 | 
					        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.times(3)).getOrNull(2, 1L, StatusDataType.PROTOCOL);
 | 
				
			||||||
        Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus);
 | 
					        Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus);
 | 
				
			||||||
@@ -799,8 +802,6 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
					    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        List<ClientAssocEvent> clientAssocEventList = new ArrayList<>();
 | 
					 | 
				
			||||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
					        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
				
			||||||
                .getDefaultInstance().toBuilder();
 | 
					                .getDefaultInstance().toBuilder();
 | 
				
			||||||
        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
					        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
				
			||||||
@@ -812,22 +813,8 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
        clientAssocBuilder.setInternalSc(1);
 | 
					        clientAssocBuilder.setInternalSc(1);
 | 
				
			||||||
        clientAssocBuilder.setSsid("ssid-3");
 | 
					        clientAssocBuilder.setSsid("ssid-3");
 | 
				
			||||||
        clientAssocBuilder.setStatus(1);
 | 
					        clientAssocBuilder.setStatus(1);
 | 
				
			||||||
 | 
					        clientAssocBuilder.setTimestampMs(System.currentTimeMillis());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        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());
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        List<EventReport> eventReportList = new ArrayList<>();
 | 
					        List<EventReport> eventReportList = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        EventReport.Builder eventReportBuilder = EventReport.getDefaultInstance().toBuilder();
 | 
					        EventReport.Builder eventReportBuilder = EventReport.getDefaultInstance().toBuilder();
 | 
				
			||||||
@@ -836,7 +823,7 @@ public class OpensyncExternalIntegrationCloudTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        clientSessionBuilder.setSessionId(1000L);
 | 
					        clientSessionBuilder.setSessionId(1000L);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        clientSessionBuilder.addAllClientAssocEvent(clientAssocEventList);
 | 
					        clientSessionBuilder.setClientAssocEvent(clientAssocBuilder.build());
 | 
				
			||||||
        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
					        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
				
			||||||
        clientSessionList.add(clientSessionBuilder.build());
 | 
					        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.Assert.assertNotNull;
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
					import static org.junit.jupiter.api.Assertions.assertEquals;
 | 
				
			||||||
@@ -43,11 +43,11 @@ import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
				
			|||||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
					import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
				
			||||||
import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface;
 | 
					import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.location.service.LocationServiceInterface;
 | 
					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.opensync.external.integration.controller.OpensyncCloudGatewayController;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
					import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.ProfileContainer;
 | 
					 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.ProfileType;
 | 
					 | 
				
			||||||
import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration;
 | 
					 | 
				
			||||||
import com.telecominfraproject.wlan.routing.RoutingServiceInterface;
 | 
					import com.telecominfraproject.wlan.routing.RoutingServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.servicemetric.apnode.models.ApNodeMetrics;
 | 
					import com.telecominfraproject.wlan.servicemetric.apnode.models.ApNodeMetrics;
 | 
				
			||||||
import com.telecominfraproject.wlan.servicemetric.apnode.models.StateUpDownError;
 | 
					import com.telecominfraproject.wlan.servicemetric.apnode.models.StateUpDownError;
 | 
				
			||||||
@@ -74,12 +74,12 @@ import sts.OpensyncStats.VLANMetrics;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@RunWith(SpringRunner.class)
 | 
					@RunWith(SpringRunner.class)
 | 
				
			||||||
@ActiveProfiles(profiles = { "integration_test", })
 | 
					@ActiveProfiles(profiles = { "integration_test", })
 | 
				
			||||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationMqttMessageProcessorTest.class)
 | 
					@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = MqttStatsPublisherTest.class)
 | 
				
			||||||
@Import(value = { AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class,
 | 
					@Import(value = { AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class,
 | 
				
			||||||
        OpensyncExternalIntegrationMqttMessageProcessorTest.Config.class,
 | 
					        MqttStatsPublisherTest.Config.class,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
					public class MqttStatsPublisherTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @MockBean
 | 
					    @MockBean
 | 
				
			||||||
    AlarmServiceInterface alarmServiceInterface;
 | 
					    AlarmServiceInterface alarmServiceInterface;
 | 
				
			||||||
@@ -105,9 +105,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
    FirmwareServiceInterface firmwareServiceInterface;
 | 
					    FirmwareServiceInterface firmwareServiceInterface;
 | 
				
			||||||
    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
					    @MockBean(answer = Answers.RETURNS_MOCKS)
 | 
				
			||||||
    OpensyncCloudGatewayController gatewayController;
 | 
					    OpensyncCloudGatewayController gatewayController;
 | 
				
			||||||
 | 
					    @MockBean
 | 
				
			||||||
 | 
					    RealtimeEventPublisher realtimeEventPublisher;
 | 
				
			||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttProcessor;
 | 
					    MqttStatsPublisher opensyncExternalIntegrationMqttProcessor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    MockitoSession mockito;
 | 
					    MockitoSession mockito;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -115,8 +116,8 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
    static class Config {
 | 
					    static class Config {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @Bean
 | 
					        @Bean
 | 
				
			||||||
        public OpensyncExternalIntegrationMqttMessageProcessor opensyncExternalIntegrationMqttMessageProcessor() {
 | 
					        public MqttStatsPublisher mqttStatsPublisher() {
 | 
				
			||||||
            return new OpensyncExternalIntegrationMqttMessageProcessor();
 | 
					            return new MqttStatsPublisher();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -134,14 +135,12 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testExtractApIdFromTopic() {
 | 
					    public void testExtractApIdFromTopic() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String topic = "/ap/Test_Client_21P10C68818122/opensync";
 | 
					        String topic = "/ap/Test_Client_21P10C68818122/opensync";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertEquals("Test_Client_21P10C68818122",
 | 
					        assertEquals("Test_Client_21P10C68818122", MqttStatsPublisher.extractApIdFromTopic(topic));
 | 
				
			||||||
                OpensyncExternalIntegrationMqttMessageProcessor.extractApIdFromTopic(topic));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -174,15 +173,15 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
        Equipment equipment = new Equipment();
 | 
					        Equipment equipment = new Equipment();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
					        equipment.setDetails(ApElementConfiguration.createWithDefaults());
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        equipment.setId(1L);
 | 
					        equipment.setId(1L);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Mockito.when(
 | 
					        Mockito.when(
 | 
				
			||||||
                equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
 | 
					                equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
 | 
				
			||||||
                .thenReturn(equipment);
 | 
					                .thenReturn(equipment);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        equipment.setProfileId(0L);
 | 
					        equipment.setProfileId(0L);
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
 | 
					        Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
 | 
				
			||||||
        Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
 | 
					        Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -211,10 +210,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
					        Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
 | 
				
			||||||
        com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
 | 
					        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());
 | 
					        clientInstance.setDetails(new ClientInfoDetails());
 | 
				
			||||||
        com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
 | 
					        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());
 | 
					        clientInstance2.setDetails(new ClientInfoDetails());
 | 
				
			||||||
        Mockito.when(
 | 
					        Mockito.when(
 | 
				
			||||||
                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
					                clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
 | 
				
			||||||
@@ -224,10 +223,10 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
					                .thenReturn(clientInstance).thenReturn(clientInstance2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ClientSession clientSession = new ClientSession();
 | 
					        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.setDetails(new ClientSessionDetails());
 | 
				
			||||||
        ClientSession clientSession2 = new ClientSession();
 | 
					        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());
 | 
					        clientSession2.setDetails(new ClientSessionDetails());
 | 
				
			||||||
        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
					        Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
 | 
				
			||||||
                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
					                ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
 | 
				
			||||||
@@ -317,12 +316,8 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
        bssidList.add(activeBssid3);
 | 
					        bssidList.add(activeBssid3);
 | 
				
			||||||
        return bssidList;
 | 
					        return bssidList;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
					    private List<EventReport> getOpensyncStatsEventReportsList() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        List<ClientAssocEvent> clientAssocEventList = new ArrayList<>();
 | 
					 | 
				
			||||||
        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
					        sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
 | 
				
			||||||
                .getDefaultInstance().toBuilder();
 | 
					                .getDefaultInstance().toBuilder();
 | 
				
			||||||
        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
					        clientAssocBuilder.setAssocType(AssocType.ASSOC);
 | 
				
			||||||
@@ -334,21 +329,7 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
        clientAssocBuilder.setInternalSc(1);
 | 
					        clientAssocBuilder.setInternalSc(1);
 | 
				
			||||||
        clientAssocBuilder.setSsid("ssid-3");
 | 
					        clientAssocBuilder.setSsid("ssid-3");
 | 
				
			||||||
        clientAssocBuilder.setStatus(1);
 | 
					        clientAssocBuilder.setStatus(1);
 | 
				
			||||||
 | 
					        clientAssocBuilder.setTimestampMs(System.currentTimeMillis());
 | 
				
			||||||
        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());
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<EventReport> eventReportList = new ArrayList<>();
 | 
					        List<EventReport> eventReportList = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -359,25 +340,25 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        clientSessionBuilder.setSessionId(1000L);
 | 
					        clientSessionBuilder.setSessionId(1000L);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        clientSessionBuilder.addAllClientAssocEvent(clientAssocEventList);
 | 
					        clientSessionBuilder.setClientAssocEvent(clientAssocBuilder.build());
 | 
				
			||||||
        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
					        List<sts.OpensyncStats.EventReport.ClientSession> clientSessionList = new ArrayList<>();
 | 
				
			||||||
        clientSessionList.add(clientSessionBuilder.build());
 | 
					        clientSessionList.add(clientSessionBuilder.build());
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        sts.OpensyncStats.EventReport.ChannelSwitchEvent.Builder channelSwitchEventBuilder = sts.OpensyncStats.EventReport.ChannelSwitchEvent.getDefaultInstance().toBuilder();
 | 
					        sts.OpensyncStats.EventReport.ChannelSwitchEvent.Builder channelSwitchEventBuilder = sts.OpensyncStats.EventReport.ChannelSwitchEvent
 | 
				
			||||||
        channelSwitchEventBuilder.setBand(RadioBandType.BAND5GL).setChannel(40).setReason(ChannelSwitchReason.high_interference).setTimestampMs(System.currentTimeMillis());
 | 
					                .getDefaultInstance().toBuilder();
 | 
				
			||||||
 | 
					        channelSwitchEventBuilder.setBand(RadioBandType.BAND5GL).setChannel(40)
 | 
				
			||||||
 | 
					                .setReason(ChannelSwitchReason.high_interference).setTimestampMs(System.currentTimeMillis());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        List<ChannelSwitchEvent> channelSwitchEventList = new ArrayList<>();
 | 
					        List<ChannelSwitchEvent> channelSwitchEventList = new ArrayList<>();
 | 
				
			||||||
        channelSwitchEventList.add(channelSwitchEventBuilder.build());
 | 
					        channelSwitchEventList.add(channelSwitchEventBuilder.build());
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
        eventReportBuilder.addAllClientSession(clientSessionList);
 | 
					        eventReportBuilder.addAllClientSession(clientSessionList);
 | 
				
			||||||
        eventReportBuilder.addAllChannelSwitch(channelSwitchEventList);
 | 
					        eventReportBuilder.addAllChannelSwitch(channelSwitchEventList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        eventReportList.add(eventReportBuilder.build());
 | 
					        eventReportList.add(eventReportBuilder.build());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return eventReportList;
 | 
					        return eventReportList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private List<ClientReport> getOpensyncStatsClientReportsList() {
 | 
					    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"
 | 
					<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">
 | 
				
			||||||
	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>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-ext-interface</artifactId>
 | 
						<artifactId>opensync-ext-interface</artifactId>
 | 
				
			||||||
@@ -15,33 +13,33 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>base-models</artifactId>
 | 
								<artifactId>base-models</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>tip-wlan-opensync-protobuf</artifactId>
 | 
								<artifactId>tip-wlan-opensync-protobuf</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>equipment-models</artifactId>
 | 
								<artifactId>equipment-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>profile-models</artifactId>
 | 
								<artifactId>profile-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>location-models</artifactId>
 | 
								<artifactId>location-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>routing-models</artifactId>
 | 
								<artifactId>routing-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ public interface OpensyncExternalIntegrationInterface {
 | 
				
			|||||||
    void wifiInetStateDbTableUpdate(List<OpensyncAPInetState> inetStateTables, String apId);
 | 
					    void wifiInetStateDbTableUpdate(List<OpensyncAPInetState> inetStateTables, String apId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId);
 | 
					    void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId);
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    void processMqttMessage(String topic, Report report);
 | 
					    void processMqttMessage(String topic, Report report);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void processMqttMessage(String topic, FlowReport flowReport);
 | 
					    void processMqttMessage(String topic, FlowReport flowReport);
 | 
				
			||||||
@@ -47,8 +47,15 @@ public interface OpensyncExternalIntegrationInterface {
 | 
				
			|||||||
    void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId);
 | 
					    void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void awlanNodeDbTableUpdate(OpensyncAWLANNode opensyncAPState, String apId);
 | 
					    void awlanNodeDbTableUpdate(OpensyncAWLANNode opensyncAPState, String apId);
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    void dhcpLeasedIpDbTableUpdate(List<Map<String,String>> dhcpAttributes, String apId, RowUpdateOperation rowUpdateOperation);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    void commandStateDbTableUpdate(List<Map<String,String>> commandStateAttributes, String apId, RowUpdateOperation rowUpdateOperation);
 | 
					    void dhcpLeasedIpDbTableUpdate(List<Map<String, String>> dhcpAttributes, String apId,
 | 
				
			||||||
 | 
					            RowUpdateOperation rowUpdateOperation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void commandStateDbTableUpdate(List<Map<String, String>> commandStateAttributes, String apId,
 | 
				
			||||||
 | 
					            RowUpdateOperation rowUpdateOperation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId,
 | 
				
			||||||
 | 
					            RowUpdateOperation rowUpdateOperation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void clearEquipmentStatus(String apId);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ import java.util.Set;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
					import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
					import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface OvsdbClientInterface {
 | 
					public interface OvsdbClientInterface {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,8 +22,7 @@ public interface OvsdbClientInterface {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void processClientBlocklistChange(String apId, List<MacAddress> blockList);
 | 
					    void processClientBlocklistChange(String apId, List<MacAddress> blockList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username,
 | 
					    String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username);
 | 
				
			||||||
            String validationCode);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String closeSession(String apId);
 | 
					    String closeSession(String apId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,6 +32,8 @@ public interface OvsdbClientInterface {
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    String processFactoryResetRequest(String apId);
 | 
					    String processFactoryResetRequest(String apId);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    String processNewChannelsRequest(String apId, Map<RadioType,Integer> channelMap);
 | 
					    String processNewChannelsRequest(String apId, Map<RadioType,Integer> backupChannelMap, Map<RadioType,Integer> primaryChannelMap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
@@ -26,6 +27,13 @@ public class ConnectNodeInfo implements Cloneable {
 | 
				
			|||||||
    public String lanIfName;
 | 
					    public String lanIfName;
 | 
				
			||||||
    public String lanIfType;
 | 
					    public String lanIfType;
 | 
				
			||||||
    public String lanMacAddress;
 | 
					    public String lanMacAddress;
 | 
				
			||||||
 | 
					    public String referenceDesign;
 | 
				
			||||||
 | 
					    public Map<String, String> qrCode;
 | 
				
			||||||
 | 
					    public String modelDescription;
 | 
				
			||||||
 | 
					    public String manufacturerUrl;
 | 
				
			||||||
 | 
					    public String manufacturerName;
 | 
				
			||||||
 | 
					    public String manufacturerDate;
 | 
				
			||||||
 | 
					    public String certificationRegion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public ConnectNodeInfo clone() {
 | 
					    public ConnectNodeInfo clone() {
 | 
				
			||||||
@@ -40,6 +48,9 @@ public class ConnectNodeInfo implements Cloneable {
 | 
				
			|||||||
            if (this.versionMatrix != null) {
 | 
					            if (this.versionMatrix != null) {
 | 
				
			||||||
                ret.versionMatrix = new HashMap<>(this.versionMatrix);
 | 
					                ret.versionMatrix = new HashMap<>(this.versionMatrix);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (this.qrCode != null) {
 | 
				
			||||||
 | 
					                ret.qrCode = new HashMap<>(this.qrCode);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        } catch (CloneNotSupportedException e) {
 | 
					        } catch (CloneNotSupportedException e) {
 | 
				
			||||||
            throw new IllegalStateException("Cannot clone ", e);
 | 
					            throw new IllegalStateException("Cannot clone ", e);
 | 
				
			||||||
@@ -48,44 +59,44 @@ public class ConnectNodeInfo implements Cloneable {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public int hashCode() {
 | 
					    public int hashCode() {
 | 
				
			||||||
        return Objects.hash(country, firmwareVersion, ifName, ifType, ipV4Address, lanIfName, lanIfType, lanIpV4Address,
 | 
					        return Objects.hash(certificationRegion, country, firmwareVersion, ifName, ifType, ipV4Address, lanIfName, lanIfType, lanIpV4Address, lanMacAddress,
 | 
				
			||||||
                lanMacAddress, macAddress, managerAddr, model, mqttSettings, platformVersion, redirectorAddr, revision,
 | 
					                macAddress, managerAddr, manufacturerDate, manufacturerName, manufacturerUrl, model, modelDescription, mqttSettings, platformVersion, qrCode,
 | 
				
			||||||
                serialNumber, skuNumber, versionMatrix, wifiRadioStates);
 | 
					                redirectorAddr, referenceDesign, revision, serialNumber, skuNumber, versionMatrix, wifiRadioStates);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean equals(Object obj) {
 | 
					    public boolean equals(Object obj) {
 | 
				
			||||||
        if (this == obj) {
 | 
					        if (this == obj)
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        if (obj == null)
 | 
				
			||||||
        if (!(obj instanceof ConnectNodeInfo)) {
 | 
					            return false;
 | 
				
			||||||
 | 
					        if (getClass() != obj.getClass())
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        ConnectNodeInfo other = (ConnectNodeInfo) obj;
 | 
					        ConnectNodeInfo other = (ConnectNodeInfo) obj;
 | 
				
			||||||
        return Objects.equals(country, other.country) && Objects.equals(firmwareVersion, other.firmwareVersion)
 | 
					        return Objects.equals(certificationRegion, other.certificationRegion) && Objects.equals(country, other.country)
 | 
				
			||||||
                && Objects.equals(ifName, other.ifName) && Objects.equals(ifType, other.ifType)
 | 
					                && Objects.equals(firmwareVersion, other.firmwareVersion) && Objects.equals(ifName, other.ifName) && Objects.equals(ifType, other.ifType)
 | 
				
			||||||
                && Objects.equals(ipV4Address, other.ipV4Address) && Objects.equals(lanIfName, other.lanIfName)
 | 
					                && Objects.equals(ipV4Address, other.ipV4Address) && Objects.equals(lanIfName, other.lanIfName) && Objects.equals(lanIfType, other.lanIfType)
 | 
				
			||||||
                && Objects.equals(lanIfType, other.lanIfType) && Objects.equals(lanIpV4Address, other.lanIpV4Address)
 | 
					                && Objects.equals(lanIpV4Address, other.lanIpV4Address) && Objects.equals(lanMacAddress, other.lanMacAddress)
 | 
				
			||||||
                && Objects.equals(lanMacAddress, other.lanMacAddress) && Objects.equals(macAddress, other.macAddress)
 | 
					                && Objects.equals(macAddress, other.macAddress) && Objects.equals(managerAddr, other.managerAddr)
 | 
				
			||||||
                && Objects.equals(managerAddr, other.managerAddr) && Objects.equals(model, other.model)
 | 
					                && Objects.equals(manufacturerDate, other.manufacturerDate) && Objects.equals(manufacturerName, other.manufacturerName)
 | 
				
			||||||
                && Objects.equals(mqttSettings, other.mqttSettings)
 | 
					                && Objects.equals(manufacturerUrl, other.manufacturerUrl) && Objects.equals(model, other.model)
 | 
				
			||||||
                && Objects.equals(platformVersion, other.platformVersion)
 | 
					                && Objects.equals(modelDescription, other.modelDescription) && Objects.equals(mqttSettings, other.mqttSettings)
 | 
				
			||||||
                && Objects.equals(redirectorAddr, other.redirectorAddr) && Objects.equals(revision, other.revision)
 | 
					                && Objects.equals(platformVersion, other.platformVersion) && Objects.equals(qrCode, other.qrCode)
 | 
				
			||||||
                && Objects.equals(serialNumber, other.serialNumber) && Objects.equals(skuNumber, other.skuNumber)
 | 
					                && Objects.equals(redirectorAddr, other.redirectorAddr) && Objects.equals(referenceDesign, other.referenceDesign)
 | 
				
			||||||
                && Objects.equals(versionMatrix, other.versionMatrix)
 | 
					                && Objects.equals(revision, other.revision) && Objects.equals(serialNumber, other.serialNumber) && Objects.equals(skuNumber, other.skuNumber)
 | 
				
			||||||
                && Objects.equals(wifiRadioStates, other.wifiRadioStates);
 | 
					                && Objects.equals(versionMatrix, other.versionMatrix) && Objects.equals(wifiRadioStates, other.wifiRadioStates);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public String toString() {
 | 
					    public String toString() {
 | 
				
			||||||
        return "ConnectNodeInfo [mqttSettings=" + mqttSettings + ", versionMatrix=" + versionMatrix
 | 
					        return "ConnectNodeInfo [mqttSettings=" + mqttSettings + ", versionMatrix=" + versionMatrix + ", wifiRadioStates=" + wifiRadioStates
 | 
				
			||||||
                + ", wifiRadioStates=" + wifiRadioStates + ", redirectorAddr=" + redirectorAddr + ", managerAddr="
 | 
					                + ", redirectorAddr=" + redirectorAddr + ", managerAddr=" + managerAddr + ", skuNumber=" + skuNumber + ", serialNumber=" + serialNumber
 | 
				
			||||||
                + managerAddr + ", skuNumber=" + skuNumber + ", serialNumber=" + serialNumber + ", macAddress="
 | 
					                + ", macAddress=" + macAddress + ", ipV4Address=" + ipV4Address + ", platformVersion=" + platformVersion + ", firmwareVersion="
 | 
				
			||||||
                + macAddress + ", ipV4Address=" + ipV4Address + ", platformVersion=" + platformVersion
 | 
					                + firmwareVersion + ", revision=" + revision + ", model=" + model + ", ifName=" + ifName + ", ifType=" + ifType + ", country=" + country
 | 
				
			||||||
                + ", firmwareVersion=" + firmwareVersion + ", revision=" + revision + ", model=" + model + ", ifName="
 | 
					                + ", lanIpV4Address=" + lanIpV4Address + ", lanIfName=" + lanIfName + ", lanIfType=" + lanIfType + ", lanMacAddress=" + lanMacAddress
 | 
				
			||||||
                + ifName + ", ifType=" + ifType + ", country=" + country + ", lanIpV4Address=" + lanIpV4Address
 | 
					                + ", referenceDesign=" + referenceDesign + ", qrCode=" + qrCode + ", modelDescription=" + modelDescription + ", manufacturerUrl="
 | 
				
			||||||
                + ", lanIfName=" + lanIfName + ", lanIfType=" + lanIfType + ", lanMacAddress=" + lanMacAddress + "]";
 | 
					                + manufacturerUrl + ", manufacturerName=" + manufacturerName + ", manufacturerDate=" + manufacturerDate + ", certificationRegion="
 | 
				
			||||||
 | 
					                + certificationRegion + "]";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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.EquipmentType;
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
					import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
					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.ApElementConfiguration;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
					import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
				
			||||||
import com.telecominfraproject.wlan.equipment.models.StateSetting;
 | 
					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.EquipmentGatewayRecord;
 | 
				
			||||||
import com.telecominfraproject.wlan.routing.models.EquipmentRoutingRecord;
 | 
					import com.telecominfraproject.wlan.routing.models.EquipmentRoutingRecord;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class OpensyncAPConfig extends BaseJsonModel {
 | 
					public class OpensyncAPConfig extends OpensyncAPBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = 3917975477206236668L;
 | 
					    private static final long serialVersionUID = 3917975477206236668L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
 | 
					        return serialVersionUID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Equipment customerEquipment;
 | 
					    private Equipment customerEquipment;
 | 
				
			||||||
    private OpensyncAPHotspot20Config hotspotConfig;
 | 
					    private OpensyncAPHotspot20Config hotspotConfig;
 | 
				
			||||||
    private Profile apProfile;
 | 
					    private Profile apProfile;
 | 
				
			||||||
@@ -40,8 +43,205 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
				
			|||||||
    private EquipmentGatewayRecord equipmentGateway;
 | 
					    private EquipmentGatewayRecord equipmentGateway;
 | 
				
			||||||
    private List<Profile> captiveProfiles;
 | 
					    private List<Profile> captiveProfiles;
 | 
				
			||||||
    private List<Profile> bonjourGatewayProfiles;
 | 
					    private List<Profile> bonjourGatewayProfiles;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private List<MacAddress> blockedClients;
 | 
					    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
 | 
					    // Handle Legacy Config Support
 | 
				
			||||||
    public void setRadioConfig(OpensyncAPRadioConfig radioConfig) {
 | 
					    public void setRadioConfig(OpensyncAPRadioConfig radioConfig) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -61,13 +261,21 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
				
			|||||||
            equipmentLocation = new Location();
 | 
					            equipmentLocation = new Location();
 | 
				
			||||||
            equipmentLocation.setId(1);
 | 
					            equipmentLocation.setId(1);
 | 
				
			||||||
            equipmentLocation.setDetails(LocationDetails.createWithDefaults());
 | 
					            equipmentLocation.setDetails(LocationDetails.createWithDefaults());
 | 
				
			||||||
            ((LocationDetails) equipmentLocation.getDetails())
 | 
					            equipmentLocation.getDetails()
 | 
				
			||||||
                    .setCountryCode(CountryCode.getByName(radioConfig.getCountry().toLowerCase()));
 | 
					                    .setCountryCode(CountryCode.getByName(radioConfig.getCountry().toLowerCase()));
 | 
				
			||||||
            customerEquipment.setLocationId(equipmentLocation.getId());
 | 
					            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
 | 
					    // Handle Legacy Config Support
 | 
				
			||||||
    public void setSsidConfigs(List<OpensyncAPSsidConfig> ssidConfigs) {
 | 
					    public void setSsidConfigs(List<OpensyncAPSsidConfig> ssidConfigs) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,16 +297,18 @@ public class OpensyncAPConfig extends BaseJsonModel {
 | 
				
			|||||||
            appliedRadios.add(ssidConfig.getRadioType());
 | 
					            appliedRadios.add(ssidConfig.getRadioType());
 | 
				
			||||||
            cfg.setAppliedRadios(appliedRadios);
 | 
					            cfg.setAppliedRadios(appliedRadios);
 | 
				
			||||||
            cfg.setSsid(ssidConfig.getSsid());
 | 
					            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);
 | 
					                cfg.setSecureMode(SecureMode.wpaPSK);
 | 
				
			||||||
            else
 | 
					            } else {
 | 
				
			||||||
                cfg.setSecureMode(SecureMode.wpa2PSK);
 | 
					                cfg.setSecureMode(SecureMode.wpa2PSK);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            cfg.setBroadcastSsid(ssidConfig.isBroadcast() ? StateSetting.enabled : StateSetting.disabled);
 | 
					            cfg.setBroadcastSsid(ssidConfig.isBroadcast() ? StateSetting.enabled : StateSetting.disabled);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            profile.setDetails(cfg);
 | 
					            profile.setDetails(cfg);
 | 
				
			||||||
            profile.setId(ssidProfileId);
 | 
					            profile.setId(ssidProfileId);
 | 
				
			||||||
            if (this.ssidProfile == null)
 | 
					            if (this.ssidProfile == null) {
 | 
				
			||||||
                this.ssidProfile = new ArrayList<Profile>();
 | 
					                this.ssidProfile = new ArrayList<Profile>();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            this.ssidProfile.add(profile);
 | 
					            this.ssidProfile.add(profile);
 | 
				
			||||||
            apProfile.getChildProfileIds().add(ssidProfileId);
 | 
					            apProfile.getChildProfileIds().add(ssidProfileId);
 | 
				
			||||||
            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) {
 | 
					    public void setSsidProfile(List<Profile> ssidProfile) {
 | 
				
			||||||
        this.ssidProfile = 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,13 +4,12 @@ import java.util.HashSet;
 | 
				
			|||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
					 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
					import com.telecominfraproject.wlan.profile.models.Profile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
					public class OpensyncAPHotspot20Config extends OpensyncAPBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = -8495473152523219578L;
 | 
					    private static final long serialVersionUID = -8495473152523219578L;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    public static long getSerialversionuid() {
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
        return serialVersionUID;
 | 
					        return serialVersionUID;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -20,40 +19,6 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
				
			|||||||
    private Set<Profile> hotspot20VenueSet;
 | 
					    private Set<Profile> hotspot20VenueSet;
 | 
				
			||||||
    private Set<Profile> hotspot20ProviderSet;
 | 
					    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
 | 
					    @Override
 | 
				
			||||||
    public OpensyncAPHotspot20Config clone() {
 | 
					    public OpensyncAPHotspot20Config clone() {
 | 
				
			||||||
        OpensyncAPHotspot20Config ret = (OpensyncAPHotspot20Config) super.clone();
 | 
					        OpensyncAPHotspot20Config ret = (OpensyncAPHotspot20Config) super.clone();
 | 
				
			||||||
@@ -77,17 +42,15 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
				
			|||||||
        return ret;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public int hashCode() {
 | 
					 | 
				
			||||||
        return Objects.hash(hotspot20OperatorSet, hotspot20ProfileSet, hotspot20ProviderSet, hotspot20VenueSet);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean equals(Object obj) {
 | 
					    public boolean equals(Object obj) {
 | 
				
			||||||
        if (this == obj) {
 | 
					        if (this == obj) {
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!(obj instanceof OpensyncAPHotspot20Config)) {
 | 
					        if (obj == null) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (getClass() != obj.getClass()) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        OpensyncAPHotspot20Config other = (OpensyncAPHotspot20Config) obj;
 | 
					        OpensyncAPHotspot20Config other = (OpensyncAPHotspot20Config) obj;
 | 
				
			||||||
@@ -97,4 +60,41 @@ public class OpensyncAPHotspot20Config extends BaseJsonModel {
 | 
				
			|||||||
                && Objects.equals(hotspot20VenueSet, other.hotspot20VenueSet);
 | 
					                && 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,457 +2,479 @@ package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					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.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;
 | 
					    private static final long serialVersionUID = 1707053648715030173L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String ifName;
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
	public Map<String, String> dhcpd;
 | 
					        return serialVersionUID;
 | 
				
			||||||
	public String unpnpMode;
 | 
					    }
 | 
				
			||||||
	public String ifType;
 | 
					 | 
				
			||||||
	public String softwdsMacAddr;
 | 
					 | 
				
			||||||
	public boolean enabled;
 | 
					 | 
				
			||||||
	public boolean sofwdsWrap;
 | 
					 | 
				
			||||||
	public int vlanId;
 | 
					 | 
				
			||||||
	public String netmask;
 | 
					 | 
				
			||||||
	public boolean nat;
 | 
					 | 
				
			||||||
	public String greRemoteInetAddr;
 | 
					 | 
				
			||||||
	public String ifUuid;
 | 
					 | 
				
			||||||
	public String inetAddr;
 | 
					 | 
				
			||||||
	public String hwAddr;
 | 
					 | 
				
			||||||
	public int mtw;
 | 
					 | 
				
			||||||
	public boolean network;
 | 
					 | 
				
			||||||
	public Map<String, String> dns;
 | 
					 | 
				
			||||||
	public String parentIfName;
 | 
					 | 
				
			||||||
	public String greIfName;
 | 
					 | 
				
			||||||
	public String broadcast;
 | 
					 | 
				
			||||||
	public Map<String, String> dhcpc;
 | 
					 | 
				
			||||||
	public String gateway;
 | 
					 | 
				
			||||||
	public String ipAssignScheme;
 | 
					 | 
				
			||||||
	public String inetConfig;
 | 
					 | 
				
			||||||
	public Uuid _uuid;
 | 
					 | 
				
			||||||
	public Uuid version;
 | 
					 | 
				
			||||||
	public String greLocalInetAddr;
 | 
					 | 
				
			||||||
	public String greRemoteMacAddr;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public OpensyncAPInetState() {
 | 
					    public String ifName;
 | 
				
			||||||
		super();
 | 
					    public Map<String, String> dhcpd;
 | 
				
			||||||
		dns = new HashMap<>();
 | 
					    public String unpnpMode;
 | 
				
			||||||
		dhcpc = new HashMap<>();
 | 
					    public String ifType;
 | 
				
			||||||
	}
 | 
					    public String softwdsMacAddr;
 | 
				
			||||||
 | 
					    public boolean enabled;
 | 
				
			||||||
 | 
					    public boolean sofwdsWrap;
 | 
				
			||||||
 | 
					    public int vlanId;
 | 
				
			||||||
 | 
					    public String netmask;
 | 
				
			||||||
 | 
					    public boolean nat;
 | 
				
			||||||
 | 
					    public String greRemoteInetAddr;
 | 
				
			||||||
 | 
					    public String ifUuid;
 | 
				
			||||||
 | 
					    public String inetAddr;
 | 
				
			||||||
 | 
					    public String hwAddr;
 | 
				
			||||||
 | 
					    public int mtw;
 | 
				
			||||||
 | 
					    public boolean network;
 | 
				
			||||||
 | 
					    public Map<String, String> dns;
 | 
				
			||||||
 | 
					    public String parentIfName;
 | 
				
			||||||
 | 
					    public String greIfName;
 | 
				
			||||||
 | 
					    public String broadcast;
 | 
				
			||||||
 | 
					    public Map<String, String> dhcpc;
 | 
				
			||||||
 | 
					    public String gateway;
 | 
				
			||||||
 | 
					    public String ipAssignScheme;
 | 
				
			||||||
 | 
					    public String inetConfig;
 | 
				
			||||||
 | 
					    public Uuid _uuid;
 | 
				
			||||||
 | 
					    public Uuid version;
 | 
				
			||||||
 | 
					    public String greLocalInetAddr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getIfName() {
 | 
					    public String greRemoteMacAddr;
 | 
				
			||||||
		return ifName;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setIfName(String ifName) {
 | 
					    public OpensyncAPInetState() {
 | 
				
			||||||
		this.ifName = ifName;
 | 
					        dns = new HashMap<>();
 | 
				
			||||||
	}
 | 
					        dhcpc = new HashMap<>();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Map<String, String> getDhcpd() {
 | 
					    public OpensyncAPInetState(Row row) {
 | 
				
			||||||
		return dhcpd;
 | 
					        dns = new HashMap<>();
 | 
				
			||||||
	}
 | 
					        dhcpc = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setDhcpd(Map<String, String> dhcpd) {
 | 
					        Map<String, Value> map = row.getColumns();
 | 
				
			||||||
		this.dhcpd = dhcpd;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getUnpnpMode() {
 | 
					        if ((map.get("NAT") != null)
 | 
				
			||||||
		return unpnpMode;
 | 
					                && 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 setUnpnpMode(String unpnpMode) {
 | 
					        if (map.containsKey("dhcpc")) {
 | 
				
			||||||
		this.unpnpMode = unpnpMode;
 | 
					            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 String getIfType() {
 | 
					        if ((map.get("ip_assign_scheme") != null) && map.get("ip_assign_scheme").getClass()
 | 
				
			||||||
		return ifType;
 | 
					                .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 setIfType(String ifType) {
 | 
					    @Override
 | 
				
			||||||
		this.ifType = ifType;
 | 
					    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 (!Objects.equals(_uuid, other._uuid)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(broadcast, other.broadcast)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(dhcpc, other.dhcpc)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(dhcpd, other.dhcpd)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(dns, other.dns)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (enabled != other.enabled) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(gateway, other.gateway)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(greIfName, other.greIfName)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(greLocalInetAddr, other.greLocalInetAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(greRemoteInetAddr, other.greRemoteInetAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(hwAddr, other.hwAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(ifName, other.ifName)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(ifType, other.ifType)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(ifUuid, other.ifUuid)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(inetAddr, other.inetAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(inetConfig, other.inetConfig)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(ipAssignScheme, other.ipAssignScheme)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (mtw != other.mtw) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (nat != other.nat) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(netmask, other.netmask)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (network != other.network) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(parentIfName, other.parentIfName)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(greRemoteMacAddr, other.greRemoteMacAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(softwdsMacAddr, other.softwdsMacAddr)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (sofwdsWrap != other.sofwdsWrap) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(unpnpMode, other.unpnpMode)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!Objects.equals(version, other.version)) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (vlanId != other.vlanId) {
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getSoftwdsMacAddr() {
 | 
					    public Uuid get_uuid() {
 | 
				
			||||||
		return softwdsMacAddr;
 | 
					        return _uuid;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setSoftwdsMacAddr(String softwdsMacAddr) {
 | 
					    public String getBroadcast() {
 | 
				
			||||||
		this.softwdsMacAddr = softwdsMacAddr;
 | 
					        return broadcast;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public boolean isEnabled() {
 | 
					    public Map<String, String> getDhcpc() {
 | 
				
			||||||
		return enabled;
 | 
					        return dhcpc;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setEnabled(boolean enabled) {
 | 
					    public Map<String, String> getDhcpd() {
 | 
				
			||||||
		this.enabled = enabled;
 | 
					        return dhcpd;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public boolean isSofwdsWrap() {
 | 
					    public Map<String, String> getDns() {
 | 
				
			||||||
		return sofwdsWrap;
 | 
					        return dns;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setSofwdsWrap(boolean sofwdsWrap) {
 | 
					    public String getGateway() {
 | 
				
			||||||
		this.sofwdsWrap = sofwdsWrap;
 | 
					        return gateway;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public int getVlanId() {
 | 
					    public String getGreIfName() {
 | 
				
			||||||
		return vlanId;
 | 
					        return greIfName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setVlanId(int vlanId) {
 | 
					    public String getGreLocalInetAddr() {
 | 
				
			||||||
		this.vlanId = vlanId;
 | 
					        return greLocalInetAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getNetmask() {
 | 
					    public String getGreRemoteInetAddr() {
 | 
				
			||||||
		return netmask;
 | 
					        return greRemoteInetAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setNetmask(String netmask) {
 | 
					    public String getGreRemoteMacAddr() {
 | 
				
			||||||
		this.netmask = netmask;
 | 
					        return this.greRemoteMacAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public boolean isNat() {
 | 
					    public String getHwAddr() {
 | 
				
			||||||
		return nat;
 | 
					        return hwAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setNat(boolean nat) {
 | 
					    public String getIfName() {
 | 
				
			||||||
		this.nat = nat;
 | 
					        return ifName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGreRemoteInetAddr() {
 | 
					    public String getIfType() {
 | 
				
			||||||
		return greRemoteInetAddr;
 | 
					        return ifType;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setGreRemoteInetAddr(String greRemoteInetAddr) {
 | 
					    public String getIfUuid() {
 | 
				
			||||||
		this.greRemoteInetAddr = greRemoteInetAddr;
 | 
					        return ifUuid;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getIfUuid() {
 | 
					    public String getInetAddr() {
 | 
				
			||||||
		return ifUuid;
 | 
					        return inetAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setIfUuid(String ifUuid) {
 | 
					    public String getInetConfig() {
 | 
				
			||||||
		this.ifUuid = ifUuid;
 | 
					        return inetConfig;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getInetAddr() {
 | 
					    public String getIpAssignScheme() {
 | 
				
			||||||
		return inetAddr;
 | 
					        return ipAssignScheme;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setInetAddr(String inetAddr) {
 | 
					    public int getMtw() {
 | 
				
			||||||
		this.inetAddr = inetAddr;
 | 
					        return mtw;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getHwAddr() {
 | 
					    public String getNetmask() {
 | 
				
			||||||
		return hwAddr;
 | 
					        return netmask;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setHwAddr(String hwAddr) {
 | 
					    public String getParentIfName() {
 | 
				
			||||||
		this.hwAddr = hwAddr;
 | 
					        return parentIfName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public int getMtw() {
 | 
					    public String getSoftwdsMacAddr() {
 | 
				
			||||||
		return mtw;
 | 
					        return softwdsMacAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setMtw(int mtw) {
 | 
					    public String getUnpnpMode() {
 | 
				
			||||||
		this.mtw = mtw;
 | 
					        return unpnpMode;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public boolean isNetwork() {
 | 
					    public Uuid getVersion() {
 | 
				
			||||||
		return network;
 | 
					        return version;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setNetwork(boolean network) {
 | 
					    public int getVlanId() {
 | 
				
			||||||
		this.network = network;
 | 
					        return vlanId;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Map<String, String> getDns() {
 | 
					    @Override
 | 
				
			||||||
		return dns;
 | 
					    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 void setDns(Map<String, String> dns) {
 | 
					    public boolean isEnabled() {
 | 
				
			||||||
		this.dns = dns;
 | 
					        return enabled;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getParentIfName() {
 | 
					    public boolean isNat() {
 | 
				
			||||||
		return parentIfName;
 | 
					        return nat;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setParentIfName(String parentIfName) {
 | 
					    public boolean isNetwork() {
 | 
				
			||||||
		this.parentIfName = parentIfName;
 | 
					        return network;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGreIfName() {
 | 
					    public boolean isSofwdsWrap() {
 | 
				
			||||||
		return greIfName;
 | 
					        return sofwdsWrap;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setGreIfName(String greIfName) {
 | 
					    public void set_uuid(Uuid _uuid) {
 | 
				
			||||||
		this.greIfName = greIfName;
 | 
					        this._uuid = _uuid;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getBroadcast() {
 | 
					    public void setBroadcast(String broadcast) {
 | 
				
			||||||
		return broadcast;
 | 
					        this.broadcast = broadcast;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setBroadcast(String broadcast) {
 | 
					    public void setDhcpc(Map<String, String> dhcpc) {
 | 
				
			||||||
		this.broadcast = broadcast;
 | 
					        this.dhcpc = dhcpc;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Map<String, String> getDhcpc() {
 | 
					    public void setDhcpd(Map<String, String> dhcpd) {
 | 
				
			||||||
		return dhcpc;
 | 
					        this.dhcpd = dhcpd;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setDhcpc(Map<String, String> dhcpc) {
 | 
					    public void setDns(Map<String, String> dns) {
 | 
				
			||||||
		this.dhcpc = dhcpc;
 | 
					        this.dns = dns;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGateway() {
 | 
					    public void setEnabled(boolean enabled) {
 | 
				
			||||||
		return gateway;
 | 
					        this.enabled = enabled;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setGateway(String gateway) {
 | 
					    public void setGateway(String gateway) {
 | 
				
			||||||
		this.gateway = gateway;
 | 
					        this.gateway = gateway;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getIpAssignScheme() {
 | 
					    public void setGreIfName(String greIfName) {
 | 
				
			||||||
		return ipAssignScheme;
 | 
					        this.greIfName = greIfName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setIpAssignScheme(String ipAssignScheme) {
 | 
					    public void setGreLocalInetAddr(String greLocalInetAddr) {
 | 
				
			||||||
		this.ipAssignScheme = ipAssignScheme;
 | 
					        this.greLocalInetAddr = greLocalInetAddr;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getInetConfig() {
 | 
					    }
 | 
				
			||||||
		return inetConfig;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setInetConfig(String inetConfig) {
 | 
					    public void setGreRemoteInetAddr(String greRemoteInetAddr) {
 | 
				
			||||||
		this.inetConfig = inetConfig;
 | 
					        this.greRemoteInetAddr = greRemoteInetAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static long getSerialversionuid() {
 | 
					    public void setGreRemoteMacAddr(String greRemoteMacAddr) {
 | 
				
			||||||
		return serialVersionUID;
 | 
					        this.greRemoteMacAddr = greRemoteMacAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Uuid get_uuid() {
 | 
					    public void setHwAddr(String hwAddr) {
 | 
				
			||||||
		return _uuid;
 | 
					        this.hwAddr = hwAddr;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void set_uuid(Uuid _uuid) {
 | 
					    public void setIfName(String ifName) {
 | 
				
			||||||
		this._uuid = _uuid;
 | 
					        this.ifName = ifName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public Uuid getVersion() {
 | 
					    public void setIfType(String ifType) {
 | 
				
			||||||
		return version;
 | 
					        this.ifType = ifType;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setVersion(Uuid version) {
 | 
					    public void setIfUuid(String ifUuid) {
 | 
				
			||||||
		this.version = version;
 | 
					        this.ifUuid = ifUuid;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setGreLocalInetAddr(String greLocalInetAddr) {
 | 
					    public void setInetAddr(String inetAddr) {
 | 
				
			||||||
		this.greLocalInetAddr = greLocalInetAddr;
 | 
					        this.inetAddr = inetAddr;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
					    public void setInetConfig(String inetConfig) {
 | 
				
			||||||
 | 
					        this.inetConfig = inetConfig;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGreLocalInetAddr() {
 | 
					    public void setIpAssignScheme(String ipAssignScheme) {
 | 
				
			||||||
		return greLocalInetAddr;
 | 
					        this.ipAssignScheme = ipAssignScheme;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void setGreRemoteMacAddr(String greRemoteMacAddr) {
 | 
					    public void setMtw(int mtw) {
 | 
				
			||||||
		this.greRemoteMacAddr = greRemoteMacAddr;
 | 
					        this.mtw = mtw;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public String getGreRemoteMacAddr(){
 | 
					    public void setNat(boolean nat) {
 | 
				
			||||||
		return this.greRemoteMacAddr;
 | 
					        this.nat = nat;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
	@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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
					    public void setNetmask(String netmask) {
 | 
				
			||||||
	public boolean equals(Object obj) {
 | 
					        this.netmask = netmask;
 | 
				
			||||||
		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;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
					    public void setNetwork(boolean network) {
 | 
				
			||||||
	public String toString() {
 | 
					        this.network = network;
 | 
				
			||||||
		return "OpensyncAPInetState [ifName=" + ifName + ", dhcpd=" + dhcpd + ", unpnpMode=" + unpnpMode + ", ifType="
 | 
					    }
 | 
				
			||||||
				+ ifType + ", softwdsMacAddr=" + softwdsMacAddr + ", enabled=" + enabled + ", sofwdsWrap=" + sofwdsWrap
 | 
					
 | 
				
			||||||
				+ ", vlanId=" + vlanId + ", netmask=" + netmask + ", nat=" + nat + ", greRemoteInetAddr="
 | 
					    public void setParentIfName(String parentIfName) {
 | 
				
			||||||
				+ greRemoteInetAddr + ", ifUuid=" + ifUuid + ", inetAddr=" + inetAddr + ", hwAddr=" + hwAddr + ", mtw="
 | 
					        this.parentIfName = parentIfName;
 | 
				
			||||||
				+ mtw + ", network=" + network + ", dns=" + dns + ", parentIfName=" + parentIfName + ", greIfName="
 | 
					    }
 | 
				
			||||||
				+ greIfName + ", broadcast=" + broadcast + ", dhcpc=" + dhcpc + ", gateway=" + gateway
 | 
					
 | 
				
			||||||
				+ ", ipAssignScheme=" + ipAssignScheme + ", inetConfig=" + inetConfig + ", _uuid=" + _uuid
 | 
					    public void setSoftwdsMacAddr(String softwdsMacAddr) {
 | 
				
			||||||
				+ ", version=" + version + ", greLocalInetAddr=" + greLocalInetAddr + ", greRemoteMacAddr="
 | 
					        this.softwdsMacAddr = softwdsMacAddr;
 | 
				
			||||||
				+ greRemoteMacAddr + "]";
 | 
					    }
 | 
				
			||||||
	}
 | 
					
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					    public String toString() {
 | 
				
			||||||
 | 
					        return "OpensyncAPInetState [ifName=" + ifName + ", dhcpd=" + dhcpd + ", unpnpMode=" + unpnpMode + ", ifType="
 | 
				
			||||||
 | 
					                + ifType + ", softwdsMacAddr=" + softwdsMacAddr + ", enabled=" + enabled + ", sofwdsWrap=" + sofwdsWrap
 | 
				
			||||||
 | 
					                + ", vlanId=" + vlanId + ", netmask=" + netmask + ", nat=" + nat + ", greRemoteInetAddr="
 | 
				
			||||||
 | 
					                + greRemoteInetAddr + ", ifUuid=" + ifUuid + ", inetAddr=" + inetAddr + ", hwAddr=" + hwAddr + ", mtw="
 | 
				
			||||||
 | 
					                + mtw + ", network=" + network + ", dns=" + dns + ", parentIfName=" + parentIfName + ", greIfName="
 | 
				
			||||||
 | 
					                + greIfName + ", broadcast=" + broadcast + ", dhcpc=" + dhcpc + ", gateway=" + gateway
 | 
				
			||||||
 | 
					                + ", ipAssignScheme=" + ipAssignScheme + ", inetConfig=" + inetConfig + ", _uuid=" + _uuid
 | 
				
			||||||
 | 
					                + ", version=" + version + ", greLocalInetAddr=" + greLocalInetAddr + ", greRemoteMacAddr="
 | 
				
			||||||
 | 
					                + greRemoteMacAddr + "]";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.json.BaseJsonModel;
 | 
					public class OpensyncAPRadioConfig extends OpensyncAPBase {
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class OpensyncAPRadioConfig extends BaseJsonModel {
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = 5683558403622855381L;
 | 
					    private static final long serialVersionUID = 5683558403622855381L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,41 +8,41 @@ public class OpensyncAPRadioConfig extends BaseJsonModel {
 | 
				
			|||||||
    private int radioChannel24G;
 | 
					    private int radioChannel24G;
 | 
				
			||||||
    private int radioChannel5LG;
 | 
					    private int radioChannel5LG;
 | 
				
			||||||
    private int radioChannel5HG;
 | 
					    private int radioChannel5HG;
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    public int getRadioChannel24G() {
 | 
					 | 
				
			||||||
        return radioChannel24G;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRadioChannel24G(int radioChannel24G) {
 | 
					    @Override
 | 
				
			||||||
        this.radioChannel24G = radioChannel24G;
 | 
					    public OpensyncAPRadioConfig clone() {
 | 
				
			||||||
    }
 | 
					        return (OpensyncAPRadioConfig) super.clone();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    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;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getCountry() {
 | 
					    public String getCountry() {
 | 
				
			||||||
        return country;
 | 
					        return country;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getRadioChannel24G() {
 | 
				
			||||||
 | 
					        return radioChannel24G;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getRadioChannel5HG() {
 | 
				
			||||||
 | 
					        return radioChannel5HG;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getRadioChannel5LG() {
 | 
				
			||||||
 | 
					        return radioChannel5LG;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setCountry(String country) {
 | 
					    public void setCountry(String country) {
 | 
				
			||||||
        this.country = country;
 | 
					        this.country = country;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    public void setRadioChannel24G(int radioChannel24G) {
 | 
				
			||||||
    public OpensyncAPRadioConfig clone() {
 | 
					        this.radioChannel24G = radioChannel24G;
 | 
				
			||||||
        return (OpensyncAPRadioConfig)super.clone();
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setRadioChannel5HG(int radioChannel5HG) {
 | 
				
			||||||
 | 
					        this.radioChannel5HG = radioChannel5HG;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setRadioChannel5LG(int radioChannel5LG) {
 | 
				
			||||||
 | 
					        this.radioChannel5LG = radioChannel5LG;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,27 +1,30 @@
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
					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.Uuid;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @author mikehansen
 | 
					 * @author mikehansen
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class OpensyncAPRadioState extends BaseJsonModel {
 | 
					public class OpensyncAPRadioState extends OpensyncAPBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = 5003143778489404219L;
 | 
					    private static final long serialVersionUID = 5003143778489404219L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
 | 
					        return serialVersionUID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int temperatureControl;
 | 
					    public int temperatureControl;
 | 
				
			||||||
    public boolean thermalDowngraded;
 | 
					    public boolean thermalDowngraded;
 | 
				
			||||||
    public boolean dfsDemo;
 | 
					    public boolean dfsDemo;
 | 
				
			||||||
@@ -48,10 +51,15 @@ public class OpensyncAPRadioState extends BaseJsonModel {
 | 
				
			|||||||
    public Map<String, String> hwParams;
 | 
					    public Map<String, String> hwParams;
 | 
				
			||||||
    public RadioType freqBand;
 | 
					    public RadioType freqBand;
 | 
				
			||||||
    public int thermalIntegration;
 | 
					    public int thermalIntegration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Set<Uuid> vifStates;
 | 
					    public Set<Uuid> vifStates;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String channelMode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Uuid _uuid;
 | 
				
			||||||
 | 
					    public Uuid version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public OpensyncAPRadioState() {
 | 
					    public OpensyncAPRadioState() {
 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
        allowedChannels = new HashSet<>();
 | 
					        allowedChannels = new HashSet<>();
 | 
				
			||||||
        hwConfig = new HashMap<>();
 | 
					        hwConfig = new HashMap<>();
 | 
				
			||||||
        channels = new HashMap<>();
 | 
					        channels = new HashMap<>();
 | 
				
			||||||
@@ -59,252 +67,334 @@ public class OpensyncAPRadioState extends BaseJsonModel {
 | 
				
			|||||||
        vifStates = new HashSet<>();
 | 
					        vifStates = new HashSet<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String channelMode;
 | 
					    public OpensyncAPRadioState(Row row) {
 | 
				
			||||||
    public Uuid _uuid;
 | 
					        this();
 | 
				
			||||||
    public Uuid version;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int getTemperatureControl() {
 | 
					        Map<String, Value> map = row.getColumns();
 | 
				
			||||||
        return temperatureControl;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setTemperatureControl(int temperatureControl) {
 | 
					        if ((map.get("mac") != null)
 | 
				
			||||||
        this.temperatureControl = temperatureControl;
 | 
					                && 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) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isThermalDowngraded() {
 | 
					            Set<Long> allowedChannels = getSet(row, "allowed_channels");
 | 
				
			||||||
        return thermalDowngraded;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setThermalDowngraded(boolean thermalDowngraded) {
 | 
					            Set<Integer> allowed = new HashSet<>();
 | 
				
			||||||
        this.thermalDowngraded = thermalDowngraded;
 | 
					            for (Long channel : allowedChannels) {
 | 
				
			||||||
    }
 | 
					                allowed.add(channel.intValue());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            this.setAllowedChannels(allowed);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (map.get("channels") != null) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isDfsDemo() {
 | 
					            Map<String, String> channels = row.getMapColumn("channels");
 | 
				
			||||||
        return dfsDemo;
 | 
					            this.setChannels(channels);
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setDfsDemo(boolean dfsDemo) {
 | 
					        Set<Uuid> vifStates = row.getSetColumn("vif_states");
 | 
				
			||||||
        this.dfsDemo = dfsDemo;
 | 
					        this.setVifStates(vifStates);
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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() {
 | 
					    public Uuid get_uuid() {
 | 
				
			||||||
        return _uuid;
 | 
					        return _uuid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void set_uuid(Uuid _uuid) {
 | 
					    public Set<Integer> getAllowedChannels() {
 | 
				
			||||||
        this._uuid = _uuid;
 | 
					        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() {
 | 
					    public Uuid getVersion() {
 | 
				
			||||||
        return version;
 | 
					        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) {
 | 
					    public void setVersion(Uuid version) {
 | 
				
			||||||
        this.version = 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;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
					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;
 | 
					    private static final long serialVersionUID = -8540144450360788799L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,45 +12,30 @@ public class OpensyncAPSsidConfig extends BaseJsonModel {
 | 
				
			|||||||
    private String key;
 | 
					    private String key;
 | 
				
			||||||
    private String mode;
 | 
					    private String mode;
 | 
				
			||||||
    private boolean broadcast;
 | 
					    private boolean broadcast;
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    public RadioType getRadioType() {
 | 
					 | 
				
			||||||
        return radioType;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setRadioType(RadioType radioType) {
 | 
					    @Override
 | 
				
			||||||
        this.radioType = radioType;
 | 
					    public OpensyncAPSsidConfig clone() {
 | 
				
			||||||
    }
 | 
					        return (OpensyncAPSsidConfig) super.clone();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public String getSsid() {
 | 
					 | 
				
			||||||
        return ssid;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void setSsid(String ssid) {
 | 
					 | 
				
			||||||
        this.ssid = ssid;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getEncryption() {
 | 
					    public String getEncryption() {
 | 
				
			||||||
        return encryption;
 | 
					        return encryption;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setEncryption(String encryption) {
 | 
					 | 
				
			||||||
        this.encryption = encryption;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public String getKey() {
 | 
					    public String getKey() {
 | 
				
			||||||
        return key;
 | 
					        return key;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setKey(String key) {
 | 
					 | 
				
			||||||
        this.key = key;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public String getMode() {
 | 
					    public String getMode() {
 | 
				
			||||||
        return mode;
 | 
					        return mode;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setMode(String mode) {
 | 
					    public RadioType getRadioType() {
 | 
				
			||||||
        this.mode = mode;
 | 
					        return radioType;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getSsid() {
 | 
				
			||||||
 | 
					        return ssid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isBroadcast() {
 | 
					    public boolean isBroadcast() {
 | 
				
			||||||
@@ -62,9 +46,24 @@ public class OpensyncAPSsidConfig extends BaseJsonModel {
 | 
				
			|||||||
        this.broadcast = broadcast;
 | 
					        this.broadcast = broadcast;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    public void setEncryption(String encryption) {
 | 
				
			||||||
    public OpensyncAPSsidConfig clone() {
 | 
					        this.encryption = encryption;
 | 
				
			||||||
        return (OpensyncAPSsidConfig)super.clone();
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					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.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;
 | 
					    private static final long serialVersionUID = -4916251246542770881L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
 | 
					        return serialVersionUID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String ifName;
 | 
					    public String ifName;
 | 
				
			||||||
    public int vifRadioIdx;
 | 
					    public int vifRadioIdx;
 | 
				
			||||||
    public String parent;
 | 
					    public String parent;
 | 
				
			||||||
@@ -24,8 +29,8 @@ public class OpensyncAPVIFState extends BaseJsonModel {
 | 
				
			|||||||
    public String ssid;
 | 
					    public String ssid;
 | 
				
			||||||
    public Map<String, String> security;
 | 
					    public Map<String, String> security;
 | 
				
			||||||
    public String macList;
 | 
					    public String macList;
 | 
				
			||||||
    public List<Uuid> associatedClients;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<Uuid> associatedClients;
 | 
				
			||||||
    public boolean enabled;
 | 
					    public boolean enabled;
 | 
				
			||||||
    public int vlanId;
 | 
					    public int vlanId;
 | 
				
			||||||
    public int btm;
 | 
					    public int btm;
 | 
				
			||||||
@@ -40,232 +45,321 @@ public class OpensyncAPVIFState extends BaseJsonModel {
 | 
				
			|||||||
    public boolean dynamicBeacon;
 | 
					    public boolean dynamicBeacon;
 | 
				
			||||||
    public int channel;
 | 
					    public int channel;
 | 
				
			||||||
    public Uuid _uuid;
 | 
					    public Uuid _uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Uuid version;
 | 
					    public Uuid version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getIfName() {
 | 
					 | 
				
			||||||
        return ifName;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public OpensyncAPVIFState() {
 | 
					    public OpensyncAPVIFState() {
 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
        security = new HashMap<>();
 | 
					        security = new HashMap<>();
 | 
				
			||||||
        associatedClients = new ArrayList<>();
 | 
					        associatedClients = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setIfName(String ifName) {
 | 
					    public OpensyncAPVIFState(Row row) {
 | 
				
			||||||
        this.ifName = ifName;
 | 
					        Map<String, Value> map = row.getColumns();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public int getVifRadioIdx() {
 | 
					        if ((map.get("mac") != null)
 | 
				
			||||||
        return vifRadioIdx;
 | 
					                && 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 void setVifRadioIdx(int vifRadioIdx) {
 | 
					        if ((map.get("channel") != null)
 | 
				
			||||||
        this.vifRadioIdx = vifRadioIdx;
 | 
					                && map.get("channel").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setChannel(row.getIntegerColumn("channel").intValue());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getParent() {
 | 
					        if ((map.get("enabled") != null)
 | 
				
			||||||
        return parent;
 | 
					                && map.get("enabled").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setEnabled(row.getBooleanColumn("enabled"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setParent(String parent) {
 | 
					        Long ftPsk = getSingleValueFromSet(row, "ft_psk");
 | 
				
			||||||
        this.parent = parent;
 | 
					        if (ftPsk != null) {
 | 
				
			||||||
    }
 | 
					            this.setFtPsk(ftPsk.intValue());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getState() {
 | 
					        Long ftMobilityDomain = getSingleValueFromSet(row, "ft_mobility_domain");
 | 
				
			||||||
        return state;
 | 
					        if (ftMobilityDomain != null) {
 | 
				
			||||||
    }
 | 
					            this.setFtMobilityDomain(ftMobilityDomain.intValue());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setState(String state) {
 | 
					        if ((map.get("group_rekey") != null)
 | 
				
			||||||
        this.state = state;
 | 
					                && 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 String getMac() {
 | 
					        if ((map.get("mode") != null)
 | 
				
			||||||
        return mac;
 | 
					                && map.get("mode").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setMode(row.getStringColumn("mode"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setMac(String mac) {
 | 
					        if ((map.get("rrm") != null)
 | 
				
			||||||
        this.mac = mac;
 | 
					                && 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 boolean isApBridge() {
 | 
					        if ((map.get("ssid_broadcast") != null) && map.get("ssid_broadcast").getClass()
 | 
				
			||||||
        return apBridge;
 | 
					                .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 void setApBridge(boolean apBridge) {
 | 
					        List<Uuid> associatedClientsList = new ArrayList<>();
 | 
				
			||||||
        this.apBridge = apBridge;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isUapsdEnable() {
 | 
					        Set<Uuid> clients = row.getSetColumn("associated_clients");
 | 
				
			||||||
        return uapsdEnable;
 | 
					        associatedClientsList.addAll(clients);
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setUapsdEnable(boolean uapsdEnable) {
 | 
					        this.setAssociatedClients(associatedClientsList);
 | 
				
			||||||
        this.uapsdEnable = uapsdEnable;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isWds() {
 | 
					        if (map.get("security") != null) {
 | 
				
			||||||
        return wds;
 | 
					            this.setSecurity(row.getMapColumn("security"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setWds(boolean wds) {
 | 
					        if ((map.get("_version") != null)
 | 
				
			||||||
        this.wds = wds;
 | 
					                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setVersion(row.getUuidColumn("_version"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public String getSsid() {
 | 
					        if ((map.get("_uuid") != null)
 | 
				
			||||||
        return ssid;
 | 
					                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setVersion(row.getUuidColumn("_uuid"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    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() {
 | 
					    public Uuid get_uuid() {
 | 
				
			||||||
        return _uuid;
 | 
					        return _uuid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void set_uuid(Uuid _uuid) {
 | 
					    public List<Uuid> getAssociatedClients() {
 | 
				
			||||||
        this._uuid = _uuid;
 | 
					        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() {
 | 
					    public Uuid getVersion() {
 | 
				
			||||||
        return version;
 | 
					        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) {
 | 
					    public void setVersion(Uuid version) {
 | 
				
			||||||
        this.version = 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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,22 +1,28 @@
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					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.Uuid;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @author mikehansen
 | 
					 * @author mikehansen
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class OpensyncAWLANNode extends BaseJsonModel {
 | 
					public class OpensyncAWLANNode extends OpensyncAPBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = -6172956297643126710L;
 | 
					    private static final long serialVersionUID = -6172956297643126710L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
 | 
					        return serialVersionUID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Map<Object, Object> mqttSettings;
 | 
					    public Map<Object, Object> mqttSettings;
 | 
				
			||||||
    public String model;
 | 
					    public String model;
 | 
				
			||||||
    public String skuNumber;
 | 
					    public String skuNumber;
 | 
				
			||||||
@@ -40,11 +46,19 @@ public class OpensyncAWLANNode extends BaseJsonModel {
 | 
				
			|||||||
    public String revision;
 | 
					    public String revision;
 | 
				
			||||||
    public String managerAddr;
 | 
					    public String managerAddr;
 | 
				
			||||||
    public boolean factoryReset;
 | 
					    public boolean factoryReset;
 | 
				
			||||||
 | 
					    public String referenceDesign;
 | 
				
			||||||
 | 
					    public Map<String, String> qrCode;
 | 
				
			||||||
 | 
					    public String modelDescription;
 | 
				
			||||||
 | 
					    public String manufacturerUrl;
 | 
				
			||||||
 | 
					    public String manufacturerName;
 | 
				
			||||||
 | 
					    public String manufacturerDate;
 | 
				
			||||||
 | 
					    public String certificationRegion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Uuid _uuid;
 | 
					    public Uuid _uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Uuid version;
 | 
					    public Uuid version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public OpensyncAWLANNode() {
 | 
					    public OpensyncAWLANNode() {
 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
        mqttSettings = new HashMap<>();
 | 
					        mqttSettings = new HashMap<>();
 | 
				
			||||||
        versionMatrix = new HashMap<>();
 | 
					        versionMatrix = new HashMap<>();
 | 
				
			||||||
        ledConfig = new HashMap<>();
 | 
					        ledConfig = new HashMap<>();
 | 
				
			||||||
@@ -52,208 +66,391 @@ public class OpensyncAWLANNode extends BaseJsonModel {
 | 
				
			|||||||
        mqttTopics = new HashMap<>();
 | 
					        mqttTopics = new HashMap<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Map<Object, Object> getMqttSettings() {
 | 
					    public OpensyncAWLANNode(Row row) {
 | 
				
			||||||
        return mqttSettings;
 | 
					        this();
 | 
				
			||||||
    }
 | 
					        
 | 
				
			||||||
 | 
					//        mqtt_settings        {"key":"string","max":"unlimited","min":0,"value":"string"}
 | 
				
			||||||
    public void setMqttSettings(Map<Object, Object> map) {
 | 
					//        model                {"key":"string","min":0}
 | 
				
			||||||
        this.mqttSettings = map;
 | 
					//        sku_number           {"key":"string","min":0}
 | 
				
			||||||
    }
 | 
					//        version_matrix       {"key":"string","max":"unlimited","min":0,"value":{"maxLength":128,"type":"string"}}
 | 
				
			||||||
 | 
					//        model_description    "string"
 | 
				
			||||||
    public String getModel() {
 | 
					//        certification_region "string"
 | 
				
			||||||
        return model;
 | 
					//        id                   "string"
 | 
				
			||||||
    }
 | 
					//        firmware_version     "string"
 | 
				
			||||||
 | 
					//        firmware_url         {"key":{"maxLength":256,"type":"string"}}
 | 
				
			||||||
    public void setModel(String model) {
 | 
					//        _uuid                "uuid"
 | 
				
			||||||
        this.model = model;
 | 
					//        upgrade_dl_timer     "integer"
 | 
				
			||||||
    }
 | 
					//        reference_design     "string"
 | 
				
			||||||
 | 
					//        platform_version     "string"
 | 
				
			||||||
    public String getSkuNumber() {
 | 
					//        firmware_pass        {"key":{"maxLength":256,"type":"string"}}
 | 
				
			||||||
        return skuNumber;
 | 
					//        upgrade_timer        "integer"
 | 
				
			||||||
    }
 | 
					//        redirector_addr      "string"
 | 
				
			||||||
 | 
					//        led_config           {"key":"string","max":"unlimited","min":0,"value":"string"}
 | 
				
			||||||
    public void setSkuNumber(String skuNumber) {
 | 
					//        max_backoff          "integer"
 | 
				
			||||||
        this.skuNumber = skuNumber;
 | 
					//        mqtt_headers         {"key":"string","max":"unlimited","min":0,"value":"string"}
 | 
				
			||||||
    }
 | 
					//        serial_number        {"key":"string","min":0}
 | 
				
			||||||
 | 
					//        _version             "uuid"
 | 
				
			||||||
    public String getId() {
 | 
					//        upgrade_status       "integer"
 | 
				
			||||||
        return id;
 | 
					//        device_mode          {"key":{"enum":["set",["battery","cloud","custom","monitor"]],"type":"string"},"min":0}
 | 
				
			||||||
    }
 | 
					//        min_backoff          "integer"
 | 
				
			||||||
 | 
					//        manufacturer_date    "string"
 | 
				
			||||||
    public void setId(String id) {
 | 
					//        mqtt_topics          {"key":"string","max":"unlimited","min":0,"value":{"maxLength":128,"type":"string"}}
 | 
				
			||||||
        this.id = id;
 | 
					//        revision             "string"
 | 
				
			||||||
    }
 | 
					//        manufacturer_name    "string"
 | 
				
			||||||
 | 
					//        manufacturer_url     "string"
 | 
				
			||||||
    public Map<String, String> getVersionMatrix() {
 | 
					//        manager_addr         "string"
 | 
				
			||||||
        return versionMatrix;
 | 
					//        factory_reset        {"key":"boolean","min":0}
 | 
				
			||||||
    }
 | 
					        Map<String, Value> map = row.getColumns();
 | 
				
			||||||
 | 
					        if (map.get("mqtt_settings") != null) {
 | 
				
			||||||
    public void setVersionMatrix(Map<String, String> versionMatrix) {
 | 
					            this.setMqttSettings(row.getMapColumn("mqtt_settings"));
 | 
				
			||||||
        this.versionMatrix = versionMatrix;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if (map.get("mqtt_headers") != null) {
 | 
				
			||||||
 | 
					            this.setMqttHeaders(row.getMapColumn("mqtt_headers"));
 | 
				
			||||||
    public String getFirmwareVersion() {
 | 
					        }
 | 
				
			||||||
        return firmwareVersion;
 | 
					        if (map.get("mqtt_topics") != null) {
 | 
				
			||||||
    }
 | 
					            this.setMqttHeaders(row.getMapColumn("mqtt_topics"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public void setFirmwareVersion(String firmwareVersion) {
 | 
					        if ((map.get("model") != null) && map.get("model").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        this.firmwareVersion = firmwareVersion;
 | 
					            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)) {
 | 
				
			||||||
    public String getFirmwareUrl() {
 | 
					            this.setSkuNumber(row.getStringColumn("sku_number"));
 | 
				
			||||||
        return firmwareUrl;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if (map.get("id") != null) {
 | 
				
			||||||
 | 
					            this.setId(getSingleValueFromSet(row, "id"));
 | 
				
			||||||
    public void setFirmwareUrl(String firmwareUrl) {
 | 
					        }
 | 
				
			||||||
        this.firmwareUrl = firmwareUrl;
 | 
					        if (map.get("reference_design") != null) {
 | 
				
			||||||
    }
 | 
					            this.setReferenceDesign(row.getStringColumn("reference_design"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public int getUpgradeDlTimer() {
 | 
					        if (map.get("qr_code") != null) {
 | 
				
			||||||
        return upgradeDlTimer;
 | 
					            this.setQrCode(row.getMapColumn("qr_code"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("model_description") != null)) {
 | 
				
			||||||
    public void setUpgradeDlTimer(int upgradeDlTimer) {
 | 
					            this.setModelDescription(row.getStringColumn("model_description"));
 | 
				
			||||||
        this.upgradeDlTimer = upgradeDlTimer;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if ((map.get("manufacturer_url") != null)) {
 | 
				
			||||||
 | 
					            this.setManufacturerUrl(row.getStringColumn("manufacturer_url"));
 | 
				
			||||||
    public String getPlatformVersion() {
 | 
					        }
 | 
				
			||||||
        return platformVersion;
 | 
					        if ((map.get("manufacturer_name") != null)) {
 | 
				
			||||||
    }
 | 
					            this.setManufacturerName(row.getStringColumn("manufacturer_name"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public void setPlatformVersion(String platformVersion) {
 | 
					        if ((map.get("manufacturer_date") != null)) {
 | 
				
			||||||
        this.platformVersion = platformVersion;
 | 
					            this.setManufacturerDate(row.getStringColumn("manufacturer_date"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if (map.get("certification_region") != null) {
 | 
				
			||||||
    public String getFirmwarePass() {
 | 
					            this.setCertificationRegion(row.getStringColumn("certification_region"));
 | 
				
			||||||
        return firmwarePass;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if (map.get("version_matrix") != null) {
 | 
				
			||||||
 | 
					            this.setVersionMatrix(row.getMapColumn("version_matrix"));
 | 
				
			||||||
    public void setFirmwarePass(String firmwarePass) {
 | 
					        }
 | 
				
			||||||
        this.firmwarePass = firmwarePass;
 | 
					        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"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public int getUpgradeTimer() {
 | 
					        if ((map.get("firmware_url") != null) && map.get("firmware_url").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        return upgradeTimer;
 | 
					            this.setFirmwareUrl(row.getStringColumn("firmware_url"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("_uuid") != null) && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    public void setUpgradeTimer(int upgradeTimer) {
 | 
					            this.setVersion(row.getUuidColumn("_uuid"));
 | 
				
			||||||
        this.upgradeTimer = upgradeTimer;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        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());
 | 
				
			||||||
    public int getMaxBackoff() {
 | 
					        }
 | 
				
			||||||
        return maxBackoff;
 | 
					        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"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public void setMaxBackoff(int maxBackoff) {
 | 
					        if ((map.get("firmware_pass") != null) && map.get("firmware_pass").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        this.maxBackoff = maxBackoff;
 | 
					            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)) {
 | 
				
			||||||
    public Map<String, String> getLedConfig() {
 | 
					            this.setUpgradeTimer(row.getIntegerColumn("upgrade_timer").intValue());
 | 
				
			||||||
        return ledConfig;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        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());
 | 
				
			||||||
    public void setLedConfig(Map<String, String> ledConfig) {
 | 
					        }
 | 
				
			||||||
        this.ledConfig = ledConfig;
 | 
					        if (map.get("led_config") != null) {
 | 
				
			||||||
    }
 | 
					            this.setLedConfig(row.getMapColumn("led_config"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public String getRedirectorAddr() {
 | 
					        if ((map.get("redirector_addr") != null) && map.get("redirector_addr").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        return redirectorAddr;
 | 
					            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)) {
 | 
				
			||||||
    public void setRedirectorAddr(String redirectorAddr) {
 | 
					            this.setSerialNumber(row.getStringColumn("serial_number"));
 | 
				
			||||||
        this.redirectorAddr = redirectorAddr;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        if ((map.get("_version") != null) && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
 | 
					            this.setVersion(row.getUuidColumn("_version"));
 | 
				
			||||||
    public Map<String, String> getMqttHeaders() {
 | 
					        }
 | 
				
			||||||
        return mqttHeaders;
 | 
					        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"));
 | 
				
			||||||
    public void setMqttHeaders(Map<String, String> mqttHeaders) {
 | 
					        }
 | 
				
			||||||
        this.mqttHeaders = mqttHeaders;
 | 
					        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 String getSerialNumber() {
 | 
					        if ((map.get("revision") != null) && map.get("revision").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        return serialNumber;
 | 
					            this.setRevision(row.getStringColumn("revision"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("manager_addr") != null) && map.get("manager_addr").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    public void setSerialNumber(String serialNumber) {
 | 
					            this.setManagerAddr(row.getStringColumn("manager_addr"));
 | 
				
			||||||
        this.serialNumber = serialNumber;
 | 
					        }
 | 
				
			||||||
    }
 | 
					        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 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() {
 | 
					    public Uuid get_uuid() {
 | 
				
			||||||
        return _uuid;
 | 
					        return _uuid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void set_uuid(Uuid _uuid) {
 | 
					    public String getDeviceMode() {
 | 
				
			||||||
        this._uuid = _uuid;
 | 
					        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() {
 | 
					    public Uuid getVersion() {
 | 
				
			||||||
        return version;
 | 
					        return version;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Map<String, String> getVersionMatrix() {
 | 
				
			||||||
 | 
					        return versionMatrix;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public boolean isFactoryReset() {
 | 
				
			||||||
 | 
					        return factoryReset;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getReferenceDesign() {
 | 
				
			||||||
 | 
					        return referenceDesign;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setReferenceDesign(String referenceDesign) {
 | 
				
			||||||
 | 
					        this.referenceDesign = referenceDesign;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Map<String, String> getQrCode() {
 | 
				
			||||||
 | 
					        return qrCode;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setQrCode(Map<String, String> qrCode) {
 | 
				
			||||||
 | 
					        this.qrCode = qrCode;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getModelDescription() {
 | 
				
			||||||
 | 
					        return modelDescription;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setModelDescription(String modelDescription) {
 | 
				
			||||||
 | 
					        this.modelDescription = modelDescription;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getManufacturerUrl() {
 | 
				
			||||||
 | 
					        return manufacturerUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setManufacturerUrl(String manufacturerUrl) {
 | 
				
			||||||
 | 
					        this.manufacturerUrl = manufacturerUrl;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getManufacturerName() {
 | 
				
			||||||
 | 
					        return manufacturerName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setManufacturerName(String manufacturerName) {
 | 
				
			||||||
 | 
					        this.manufacturerName = manufacturerName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getManufacturerDate() {
 | 
				
			||||||
 | 
					        return manufacturerDate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setManufacturerDate(String manufacturerDate) {
 | 
				
			||||||
 | 
					        this.manufacturerDate = manufacturerDate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getCertificationRegion() {
 | 
				
			||||||
 | 
					        return certificationRegion;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setCertificationRegion(String certificationRegion) {
 | 
				
			||||||
 | 
					        this.certificationRegion = certificationRegion;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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) {
 | 
					    public void setVersion(Uuid version) {
 | 
				
			||||||
        this.version = version;
 | 
					        this.version = version;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setVersionMatrix(Map<String, String> versionMatrix) {
 | 
				
			||||||
 | 
					        this.versionMatrix = versionMatrix;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,22 +1,28 @@
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration.models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					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.Uuid;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @author mikehansen
 | 
					 * @author mikehansen
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class OpensyncWifiAssociatedClients extends BaseJsonModel {
 | 
					public class OpensyncWifiAssociatedClients extends OpensyncAPBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final long serialVersionUID = -7088651136971662138L;
 | 
					    private static final long serialVersionUID = -7088651136971662138L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static long getSerialversionuid() {
 | 
				
			||||||
 | 
					        return serialVersionUID;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String keyId;
 | 
					    public String keyId;
 | 
				
			||||||
    public String mac;
 | 
					    public String mac;
 | 
				
			||||||
    public String state;
 | 
					    public String state;
 | 
				
			||||||
@@ -25,85 +31,107 @@ public class OpensyncWifiAssociatedClients extends BaseJsonModel {
 | 
				
			|||||||
    public String kick;
 | 
					    public String kick;
 | 
				
			||||||
    public String oftag;
 | 
					    public String oftag;
 | 
				
			||||||
    public Uuid _uuid;
 | 
					    public Uuid _uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Uuid version;
 | 
					    public Uuid version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public OpensyncWifiAssociatedClients() {
 | 
					    public OpensyncWifiAssociatedClients() {
 | 
				
			||||||
        super();
 | 
					 | 
				
			||||||
        capabilities = new HashSet<>();
 | 
					        capabilities = new HashSet<>();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getKeyId() {
 | 
					    public OpensyncWifiAssociatedClients(Row row) {
 | 
				
			||||||
        return keyId;
 | 
					        this();
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void setKeyId(String keyId) {
 | 
					        Map<String, Value> map = row.getColumns();
 | 
				
			||||||
        this.keyId = keyId;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getMac() {
 | 
					        if ((map.get("mac") != null)
 | 
				
			||||||
        return mac;
 | 
					                && map.get("mac").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
    }
 | 
					            this.setMac(row.getStringColumn("mac"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    public void setMac(String mac) {
 | 
					        if (row.getSetColumn("capabilities") != null) {
 | 
				
			||||||
        this.mac = mac;
 | 
					            this.setCapabilities(row.getSetColumn("capabilities"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("state") != null)
 | 
				
			||||||
    public String getState() {
 | 
					                && map.get("state").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        return state;
 | 
					            this.setState(row.getStringColumn("state"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("_version") != null)
 | 
				
			||||||
    public void setState(String state) {
 | 
					                && map.get("_version").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        this.state = state;
 | 
					            this.setVersion(row.getUuidColumn("_version"));
 | 
				
			||||||
    }
 | 
					        }
 | 
				
			||||||
 | 
					        if ((map.get("_uuid") != null)
 | 
				
			||||||
    public Set<String> getCapabilities() {
 | 
					                && map.get("_uuid").getClass().equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) {
 | 
				
			||||||
        return capabilities;
 | 
					            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() {
 | 
					    public Uuid get_uuid() {
 | 
				
			||||||
        return _uuid;
 | 
					        return _uuid;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void set_uuid(Uuid _uuid) {
 | 
					    public Set<String> getCapabilities() {
 | 
				
			||||||
        this._uuid = _uuid;
 | 
					        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() {
 | 
					    public Uuid getVersion() {
 | 
				
			||||||
        return version;
 | 
					        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) {
 | 
					    public void setVersion(Uuid version) {
 | 
				
			||||||
        this.version = version;
 | 
					        this.version = version;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
  <parent>
 | 
					  <parent>
 | 
				
			||||||
    <groupId>com.telecominfraproject.wlan</groupId>
 | 
					    <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
					    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
    <version>0.0.1-SNAPSHOT</version>
 | 
					    <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
    <relativePath>../../wlan-cloud-root</relativePath>
 | 
					    <relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
  </parent>
 | 
					  </parent>
 | 
				
			||||||
  <artifactId>opensync-ext-static</artifactId>
 | 
					  <artifactId>opensync-ext-static</artifactId>
 | 
				
			||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
  	<dependency>
 | 
					  	<dependency>
 | 
				
			||||||
  		<groupId>com.telecominfraproject.wlan</groupId>
 | 
					  		<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
  		<artifactId>opensync-gateway</artifactId>
 | 
					  		<artifactId>opensync-gateway</artifactId>
 | 
				
			||||||
  		<version>${tip-wlan-cloud.release.version}</version>
 | 
					  		<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
  	</dependency>
 | 
					  	</dependency>
 | 
				
			||||||
  </dependencies>
 | 
					  </dependencies>
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,6 @@ package com.telecominfraproject.wlan.opensync.external.integration;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					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.location.models.Location;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
 | 
					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.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.OpensyncAPInetState;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
 | 
					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.OpensyncAPVIFState;
 | 
				
			||||||
@@ -47,30 +45,9 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
				
			|||||||
    @Value("${tip.wlan.ovsdb.ssidProfileFileName:/app/config/ProfileSsid.json}")
 | 
					    @Value("${tip.wlan.ovsdb.ssidProfileFileName:/app/config/ProfileSsid.json}")
 | 
				
			||||||
    private String ssidProfileFileName;
 | 
					    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}")
 | 
					    @Value("${tip.wlan.ovsdb.radiusProfileFileName:/app/config/ProfileRadius.json}")
 | 
				
			||||||
    private String radiusProfileFileName;
 | 
					    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}")
 | 
					    @Value("${tip.wlan.ovsdb.locationFileName:/app/config/LocationBuildingExample.json}")
 | 
				
			||||||
    private String locationFileName;
 | 
					    private String locationFileName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,7 +62,6 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
				
			|||||||
        serialNumber = connectNodeInfo.serialNumber;
 | 
					        serialNumber = connectNodeInfo.serialNumber;
 | 
				
			||||||
        LOG.info("AP {} got connected to the gateway", apId);
 | 
					        LOG.info("AP {} got connected to the gateway", apId);
 | 
				
			||||||
        LOG.info("ConnectNodeInfo {}", connectNodeInfo);
 | 
					        LOG.info("ConnectNodeInfo {}", connectNodeInfo);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void apDisconnected(String apId) {
 | 
					    public void apDisconnected(String apId) {
 | 
				
			||||||
@@ -95,97 +71,41 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
				
			|||||||
    public OpensyncAPConfig getApConfig(String apId) {
 | 
					    public OpensyncAPConfig getApConfig(String apId) {
 | 
				
			||||||
        LOG.info("Retrieving config for AP {}", apId);
 | 
					        LOG.info("Retrieving config for AP {}", apId);
 | 
				
			||||||
        OpensyncAPConfig ret = null;
 | 
					        OpensyncAPConfig ret = null;
 | 
				
			||||||
 | 
					 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            Equipment equipment = Equipment.fromFile(customerEquipmentFileName, Equipment.class);
 | 
					            Equipment equipment = Equipment.fromFile(customerEquipmentFileName, Equipment.class);
 | 
				
			||||||
            equipment.setInventoryId(apId);
 | 
					            equipment.setInventoryId(apId);
 | 
				
			||||||
            equipment.setName(apId);
 | 
					            equipment.setName(apId);
 | 
				
			||||||
            equipment.setSerial(serialNumber);
 | 
					            equipment.setSerial(serialNumber);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            com.telecominfraproject.wlan.profile.models.Profile apProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
					            com.telecominfraproject.wlan.profile.models.Profile apProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
				
			||||||
                    .fromFile(apProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
					                    .fromFile(apProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            com.telecominfraproject.wlan.profile.models.Profile rfProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
					            com.telecominfraproject.wlan.profile.models.Profile rfProfile = com.telecominfraproject.wlan.profile.models.Profile
 | 
				
			||||||
                    .fromFile(rfProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
					                    .fromFile(rfProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            apProfile.getChildProfileIds().add(rfProfile.getId());
 | 
					            apProfile.getChildProfileIds().add(rfProfile.getId());
 | 
				
			||||||
 | 
					 | 
				
			||||||
            List<com.telecominfraproject.wlan.profile.models.Profile> ssidProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
					            List<com.telecominfraproject.wlan.profile.models.Profile> ssidProfiles = com.telecominfraproject.wlan.profile.models.Profile
 | 
				
			||||||
                    .listFromFile(ssidProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
 | 
					                    .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()));
 | 
					            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());
 | 
					            equipment.setProfileId(apProfile.getId());
 | 
				
			||||||
 | 
					 | 
				
			||||||
            Location location = Location.fromFile(locationFileName, Location.class);
 | 
					            Location location = Location.fromFile(locationFileName, Location.class);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            equipment.setLocationId(location.getId());
 | 
					            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 = new OpensyncAPConfig();
 | 
				
			||||||
            ret.setCustomerEquipment(equipment);
 | 
					            ret.setCustomerEquipment(equipment);
 | 
				
			||||||
            ret.setApProfile(apProfile);
 | 
					            ret.setApProfile(apProfile);
 | 
				
			||||||
            ret.setRfProfile(rfProfile);
 | 
					            ret.setRfProfile(rfProfile);
 | 
				
			||||||
            ret.setMetricsProfiles(metricsProfiles);
 | 
					 | 
				
			||||||
            ret.setSsidProfile(ssidProfiles);
 | 
					            ret.setSsidProfile(ssidProfiles);
 | 
				
			||||||
            ret.setRadiusProfiles(radiusProfiles);
 | 
					            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.setEquipmentLocation(location);
 | 
				
			||||||
            ret.setCaptiveProfiles(captiveProfiles);
 | 
					 | 
				
			||||||
            ret.setBonjourGatewayProfiles(bonjourProfiles);
 | 
					 | 
				
			||||||
            ret.setHotspotConfig(hotspotConfig);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            LOG.error("Cannot read config file", e);
 | 
					            LOG.error("Cannot read config file", e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        LOG.debug("Config content : {}", ret);
 | 
					        LOG.debug("Config content : {}", ret);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        return ret;
 | 
					        return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -199,7 +119,6 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
				
			|||||||
            LOG.info("Received EventReport {}", e);
 | 
					            LOG.info("Received EventReport {}", e);
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void processMqttMessage(String topic, FlowReport flowReport) {
 | 
					    public void processMqttMessage(String topic, FlowReport flowReport) {
 | 
				
			||||||
@@ -275,4 +194,17 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void clearEquipmentStatus(String apId) {
 | 
				
			||||||
 | 
					        LOG.info("Received clearEquipmentStatus for ap {}", apId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId,
 | 
				
			||||||
 | 
					            RowUpdateOperation rowUpdateOperation) {
 | 
				
			||||||
 | 
					        LOG.info("Received APC_State {} for operation {}", apcStateAttributes, rowUpdateOperation);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,221 +1,472 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type": "Equipment",
 | 
					    "model_type": "Equipment",
 | 
				
			||||||
  "id": 51,
 | 
					    "id": 1,
 | 
				
			||||||
  "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "profileId": 12,
 | 
					    "profileId": 8,
 | 
				
			||||||
  "locationId": 8,
 | 
					    "locationId": 8,
 | 
				
			||||||
  "equipmentType": "AP",
 | 
					 | 
				
			||||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "name": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "details": {
 | 
					 | 
				
			||||||
    "model_type": "ApElementConfiguration",
 | 
					 | 
				
			||||||
    "equipmentModel": "EA8300-CA",
 | 
					 | 
				
			||||||
    "elementConfigVersion": "AP-V1",
 | 
					 | 
				
			||||||
    "equipmentType": "AP",
 | 
					    "equipmentType": "AP",
 | 
				
			||||||
    "deviceMode": "standaloneAP",
 | 
					    "inventoryId": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "gettingIP": "dhcp",
 | 
					    "name": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "staticIP": null,
 | 
					    "details": {
 | 
				
			||||||
    "staticIpMaskCidr": null,
 | 
					        "model_type": "ApElementConfiguration",
 | 
				
			||||||
    "staticIpGw": null,
 | 
					        "equipmentModel": "EA8300-CA",
 | 
				
			||||||
    "gettingDNS": "dhcp",
 | 
					        "elementConfigVersion": "AP-V1",
 | 
				
			||||||
    "staticDnsIp1": null,
 | 
					        "equipmentType": "AP",
 | 
				
			||||||
    "staticDnsIp2": null,
 | 
					        "deviceMode": "standaloneAP",
 | 
				
			||||||
    "peerInfoList": [],
 | 
					        "gettingIP": "dhcp",
 | 
				
			||||||
    "deviceName": "Default Device Name",
 | 
					        "staticIP": null,
 | 
				
			||||||
    "locationData": null,
 | 
					        "staticIpMaskCidr": null,
 | 
				
			||||||
    "locallyConfiguredMgmtVlan": 0,
 | 
					        "staticIpGw": null,
 | 
				
			||||||
    "locallyConfigured": false,
 | 
					        "gettingDNS": "dhcp",
 | 
				
			||||||
    "deploymentType": "CEILING",
 | 
					        "staticDnsIp1": null,
 | 
				
			||||||
    "syntheticClientEnabled": null,
 | 
					        "staticDnsIp2": null,
 | 
				
			||||||
    "frameReportThrottleEnabled": true,
 | 
					        "peerInfoList": [],
 | 
				
			||||||
    "antennaType": "OMNI",
 | 
					        "deviceName": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "costSavingEventsEnabled": true,
 | 
					        "locationData": null,
 | 
				
			||||||
    "forwardMode": "BRIDGE",
 | 
					        "locallyConfiguredMgmtVlan": 0,
 | 
				
			||||||
    "radioMap": {
 | 
					        "locallyConfigured": false,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					        "deploymentType": "CEILING",
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					        "syntheticClientEnabled": null,
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "frameReportThrottleEnabled": true,
 | 
				
			||||||
        "channelNumber": 6,
 | 
					        "antennaType": "OMNI",
 | 
				
			||||||
        "manualChannelNumber": 6,
 | 
					        "costSavingEventsEnabled": true,
 | 
				
			||||||
        "backupChannelNumber": 11,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
        "bannedChannels": [],
 | 
					        "radioMap": {
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            "is5GHzU": {
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "model_type": "ElementRadioConfiguration",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
        "source": "auto",
 | 
					                "channelNumber": 149,
 | 
				
			||||||
          "value": -90
 | 
					                "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,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 11,
 | 
				
			||||||
 | 
					                "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": 1,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 2,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 3,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 4,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 5,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "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",
 | 
				
			||||||
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
 | 
					                "channelNumber": 36,
 | 
				
			||||||
 | 
					                "manualChannelNumber": 36,
 | 
				
			||||||
 | 
					                "backupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "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": 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
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					        "advancedRadioMap": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
        "source": "auto",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
          "value": -90
 | 
					                "radioType": "is2dot4GHz",
 | 
				
			||||||
        },
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
          "value": -90
 | 
					                "multicastRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "source": "profile",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "value": "auto"
 | 
				
			||||||
        	 "source": "auto",
 | 
					                },
 | 
				
			||||||
          "value": 32
 | 
					                "managementRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "source": "profile",
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "value": "auto"
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                },
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "activeChannel": 6
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
      },
 | 
					                    "source": "manual",
 | 
				
			||||||
      "is5GHzU": {
 | 
					                    "value": {
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "channelNumber": 149,
 | 
					                        "dropInSnrPercentage": 20,
 | 
				
			||||||
        "manualChannelNumber": 149,
 | 
					                        "minLoadFactor": 50
 | 
				
			||||||
        "backupChannelNumber": 154,
 | 
					                    }
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                },
 | 
				
			||||||
        "allowedChannels": [],
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        	 "source": "auto",
 | 
					            },
 | 
				
			||||||
          "value": -90
 | 
					            "is5GHzU": {
 | 
				
			||||||
        },
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "value": -90
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        },
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "multicastRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": -90
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                "managementRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": 32
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                    "source": "manual",
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                    "value": {
 | 
				
			||||||
        "activeChannel": 149
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
      },
 | 
					                        "mlComputed": true,
 | 
				
			||||||
      "is5GHzL": {
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					                    }
 | 
				
			||||||
        "channelNumber": 36,
 | 
					                },
 | 
				
			||||||
        "manualChannelNumber": 36,
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "backupChannelNumber": 44,
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            },
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					            "is5GHzL": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
          "value": -90
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        },
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "multicastRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "managementRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "bestApSettings": {
 | 
				
			||||||
          "value": 32
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        },
 | 
					                    "source": "manual",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "value": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "activeChannel": 36
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
      }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "advancedRadioMap": {
 | 
					    "latitude": null,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					    "longitude": null,
 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					    "baseMacAddress": {
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "model_type": "MacAddress",
 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					        "address": "JPWi7y5T",
 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					    },
 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					    "serial": "21P10C68818122",
 | 
				
			||||||
        "managementRate": {
 | 
					    "createdTimestamp": 1612285288821,
 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					    "lastModifiedTimestamp": 1612285293922
 | 
				
			||||||
          "source": "auto",
 | 
					}
 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzU": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzL": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "latitude": null,
 | 
					 | 
				
			||||||
  "longitude": null,
 | 
					 | 
				
			||||||
  "serial": "21P10C68818122",
 | 
					 | 
				
			||||||
  "createdTimestamp": 1591653239821,
 | 
					 | 
				
			||||||
  "lastModifiedTimestamp": 1591653241398
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,60 +1,61 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type" : "Location",
 | 
					    "model_type": "Location",
 | 
				
			||||||
  "id" : 8,
 | 
					    "id": 8,
 | 
				
			||||||
  "parentId" : 0,
 | 
					    "parentId": 0,
 | 
				
			||||||
  "locationType" : "SITE",
 | 
					    "locationType": "SITE",
 | 
				
			||||||
  "customerId" : 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "name" : "Ottawa",
 | 
					    "name": "Ottawa",
 | 
				
			||||||
  "details" : {
 | 
					    "details": {
 | 
				
			||||||
    "model_type" : "LocationDetails",
 | 
					        "model_type": "LocationDetails",
 | 
				
			||||||
    "countryCode" : "ca",
 | 
					        "countryCode": "CA",
 | 
				
			||||||
    "maintenanceWindow" : null,
 | 
					        "dailyActivityDetails": {
 | 
				
			||||||
    "rrmEnabled" : true,
 | 
					            "SUNDAY": {
 | 
				
			||||||
    "dailyActivityDetails" : {
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SUNDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "MONDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "MONDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "TUESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "TUESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "WEDNESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "WEDNESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "THURSDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "THURSDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "FRIDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "FRIDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "SATURDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SATURDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            }
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					        },
 | 
				
			||||||
      }
 | 
					        "maintenanceWindow": null,
 | 
				
			||||||
    }
 | 
					        "rrmEnabled": true,
 | 
				
			||||||
  },
 | 
					        "timezone": "US/Eastern"
 | 
				
			||||||
  "createdTimestamp" : 1590607043540,
 | 
					    },
 | 
				
			||||||
  "lastModifiedTimestamp" : 1590607043540
 | 
					    "createdTimestamp": 1612285243534,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1612285243534
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 12,
 | 
					    "id": 8,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "equipment_ap",
 | 
					    "profileType": "equipment_ap",
 | 
				
			||||||
    "name": "ApProfile-3-radios",
 | 
					    "name": "ApProfile-3-radios",
 | 
				
			||||||
@@ -20,11 +20,6 @@
 | 
				
			|||||||
        "syntheticClientEnabled": true,
 | 
					        "syntheticClientEnabled": true,
 | 
				
			||||||
        "ledControlEnabled": true,
 | 
					        "ledControlEnabled": true,
 | 
				
			||||||
        "equipmentDiscovery": false,
 | 
					        "equipmentDiscovery": false,
 | 
				
			||||||
        "greTunnelName": null,
 | 
					 | 
				
			||||||
        "greParentIfName": null,
 | 
					 | 
				
			||||||
        "greLocalInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteMacAddr": null,
 | 
					 | 
				
			||||||
        "radioMap": {
 | 
					        "radioMap": {
 | 
				
			||||||
            "is2dot4GHz": {
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
                "model_type": "RadioProfileConfiguration",
 | 
					                "model_type": "RadioProfileConfiguration",
 | 
				
			||||||
@@ -42,15 +37,22 @@
 | 
				
			|||||||
                "bestAPSteerType": "both"
 | 
					                "bestAPSteerType": "both"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "greTunnelConfigurations": [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "model_type": "GreTunnelConfiguration",
 | 
				
			||||||
 | 
					                "greTunnelName": "gre1",
 | 
				
			||||||
 | 
					                "greRemoteInetAddr": "192.168.1.101",
 | 
				
			||||||
 | 
					                "vlanIdsInGreTunnel": [
 | 
				
			||||||
 | 
					                    100
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
        "profileType": "equipment_ap"
 | 
					        "profileType": "equipment_ap"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369934,
 | 
					    "createdTimestamp": 1612285248925,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778443413,
 | 
					    "lastModifiedTimestamp": 1612285628377,
 | 
				
			||||||
    "childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
        16,
 | 
					        2,
 | 
				
			||||||
        5,
 | 
					        4
 | 
				
			||||||
        10,
 | 
					 | 
				
			||||||
        11,
 | 
					 | 
				
			||||||
        15
 | 
					 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -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",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 14,
 | 
					    "id": 5,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "captive_portal",
 | 
					    "profileType": "captive_portal",
 | 
				
			||||||
    "name": "Captive-portal",
 | 
					    "name": "Captive-portal",
 | 
				
			||||||
    "details": {
 | 
					    "details": {
 | 
				
			||||||
        "model_type": "CaptivePortalConfiguration",
 | 
					      "model_type": "CaptivePortalConfiguration",
 | 
				
			||||||
        "name": "Captive-portal",
 | 
					      "name": "Default",
 | 
				
			||||||
        "browserTitle": "Access the network as Guest",
 | 
					      "browserTitle": "Captive-portal",
 | 
				
			||||||
        "headerContent": "Captive Portal",
 | 
					      "headerContent": "Captive Portal",
 | 
				
			||||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
					      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
				
			||||||
        "successPageMarkdownText": "Welcome to the network",
 | 
					      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
				
			||||||
        "redirectURL": "",
 | 
					      "redirectURL": "https://www.google.com",
 | 
				
			||||||
        "externalCaptivePortalURL": null,
 | 
					      "externalCaptivePortalURL": null,
 | 
				
			||||||
        "sessionTimeoutInMinutes": 60,
 | 
					      "sessionTimeoutInMinutes": 10,
 | 
				
			||||||
        "logoFile": null,
 | 
					      "logoFile": {
 | 
				
			||||||
        "backgroundFile": null,
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        "walledGardenAllowlist": [],
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "usernamePasswordFile": {
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
            "model_type": "ManagedFileInfo",
 | 
					        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
				
			||||||
            "md5checksum": null,
 | 
					        "fileCategory": "CaptivePortalLogo",
 | 
				
			||||||
            "lastModifiedTimestamp": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
            "apExportUrl": "userList",
 | 
					        "altSlot": false
 | 
				
			||||||
            "fileCategory": "UsernamePasswordList",
 | 
					      },
 | 
				
			||||||
            "fileType": "TEXT",
 | 
					      "backgroundFile": {
 | 
				
			||||||
            "altSlot": true
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        },
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "authenticationType": "guest",
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
        "radiusAuthMethod": "CHAP",
 | 
					        "apExportUrl": "/filestore/tip-logo",
 | 
				
			||||||
        "maxUsersWithSameCredentials": 42,
 | 
					        "fileCategory": "CaptivePortalBackground",
 | 
				
			||||||
        "externalPolicyFile": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
        "backgroundPosition": "left_top",
 | 
					        "altSlot": false
 | 
				
			||||||
        "backgroundRepeat": "no_repeat",
 | 
					      },
 | 
				
			||||||
        "radiusServiceName": null,
 | 
					      "walledGardenAllowlist": [
 | 
				
			||||||
        "expiryType": "unlimited",
 | 
					      ],
 | 
				
			||||||
        "userList": [
 | 
					      "usernamePasswordFile": null,
 | 
				
			||||||
            {
 | 
					      "authenticationType": "guest",
 | 
				
			||||||
                "model_type": "TimedAccessUserRecord",
 | 
					      "radiusAuthMethod": "CHAP",
 | 
				
			||||||
                "username": "customer",
 | 
					      "maxUsersWithSameCredentials": 3,
 | 
				
			||||||
                "password": "testing123",
 | 
					      "externalPolicyFile": null,
 | 
				
			||||||
                "activationTime": 1602183994956,
 | 
					      "backgroundPosition": "left_top",
 | 
				
			||||||
                "expirationTime": 1602212794956,
 | 
					      "backgroundRepeat": "no_repeat",
 | 
				
			||||||
                "numDevices": 1,
 | 
					      "radiusServiceId": 0,
 | 
				
			||||||
                "userDetails": {
 | 
					      "expiryType": "time_limited",
 | 
				
			||||||
                    "model_type": "TimedAccessUserDetails",
 | 
					      "userList": [
 | 
				
			||||||
                    "firstName": "Pac",
 | 
					      ],
 | 
				
			||||||
                    "lastName": "Man",
 | 
					      "macAllowList": [
 | 
				
			||||||
                    "passwordNeedsReset": false
 | 
					      ],
 | 
				
			||||||
                },
 | 
					      "profileType": "captive_portal"
 | 
				
			||||||
                "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"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
                "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,
 | 
					    "createdTimestamp": 1611857459118,
 | 
				
			||||||
    "lastModifiedTimestamp": 1602183994959,
 | 
					    "lastModifiedTimestamp": 1611857459118,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": [
 | 
				
			||||||
}
 | 
					    ]
 | 
				
			||||||
]
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,71 +0,0 @@
 | 
				
			|||||||
[
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 24,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "passpoint",
 | 
					 | 
				
			||||||
		"name": "TipWlan-Passpoint-Config",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "PasspointProfile",
 | 
					 | 
				
			||||||
			"enableInterworkingAndHs20": true,
 | 
					 | 
				
			||||||
			"hessid": null,
 | 
					 | 
				
			||||||
			"passpointAccessNetworkType": "free_public_network",
 | 
					 | 
				
			||||||
			"passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					 | 
				
			||||||
			"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,
 | 
					 | 
				
			||||||
					"connectionCapabilitiesStatus": "open",
 | 
					 | 
				
			||||||
					"connectionCapabilitiesIpProtocol": "TCP"
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
					 | 
				
			||||||
			"qosMapSetConfiguration": null,
 | 
					 | 
				
			||||||
			"apGeospatialLocation": null,
 | 
					 | 
				
			||||||
			"apCivicLocation": null,
 | 
					 | 
				
			||||||
			"apPublicLocationIdUri": null,
 | 
					 | 
				
			||||||
			"gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
					 | 
				
			||||||
			"anqpDomainId": 1234,
 | 
					 | 
				
			||||||
			"disableDownstreamGroupAddressedForwarding": false,
 | 
					 | 
				
			||||||
			"enable2pt4GHz": true,
 | 
					 | 
				
			||||||
			"enable5GHz": true,
 | 
					 | 
				
			||||||
			"associatedAccessSsidProfileIds": [
 | 
					 | 
				
			||||||
				15
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"osuSsidProfileId": 16,
 | 
					 | 
				
			||||||
			"passpointOperatorProfileId": 17,
 | 
					 | 
				
			||||||
			"passpointVenueProfileId": 18,
 | 
					 | 
				
			||||||
			"passpointOsuProviderProfileIds": [
 | 
					 | 
				
			||||||
				19,
 | 
					 | 
				
			||||||
				20
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"accessNetworkType": "free_public_network",
 | 
					 | 
				
			||||||
			"networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					 | 
				
			||||||
			"profileType": "passpoint"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778370807,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370807,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			17,
 | 
					 | 
				
			||||||
			18,
 | 
					 | 
				
			||||||
			19,
 | 
					 | 
				
			||||||
			20
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,270 +0,0 @@
 | 
				
			|||||||
[
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 19,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					 | 
				
			||||||
		"name": "TipWlan-Passpoint-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": 1606778370345,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370345,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 20,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					 | 
				
			||||||
		"name": "TipWlan-Passpoint-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": 1606778370351,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,299 +0,0 @@
 | 
				
			|||||||
[
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 10,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "service_metrics_collection_config",
 | 
					 | 
				
			||||||
		"name": "Metrics-Profile-3-Radios",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "ServiceMetricsCollectionConfigProfile",
 | 
					 | 
				
			||||||
			"radioTypes": [
 | 
					 | 
				
			||||||
				"is5GHzL",
 | 
					 | 
				
			||||||
				"is2dot4GHz",
 | 
					 | 
				
			||||||
				"is5GHzU"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"serviceMetricDataTypes": [
 | 
					 | 
				
			||||||
				"ApNode",
 | 
					 | 
				
			||||||
				"ApSsid",
 | 
					 | 
				
			||||||
				"Client",
 | 
					 | 
				
			||||||
				"Channel",
 | 
					 | 
				
			||||||
				"Neighbour"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"metricConfigParameterMap": {
 | 
					 | 
				
			||||||
				"ApNode": [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						"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": 120,
 | 
					 | 
				
			||||||
						"channelSurveyType": "OFF_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": 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,
 | 
					 | 
				
			||||||
						"reportingIntervalSeconds": 60,
 | 
					 | 
				
			||||||
						"radioType": "is5GHzL",
 | 
					 | 
				
			||||||
						"serviceMetricDataType": "ApSsid"
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						"model_type": "ServiceMetricRadioConfigParameters",
 | 
					 | 
				
			||||||
						"samplingInterval": 30,
 | 
					 | 
				
			||||||
						"reportingIntervalSeconds": 60,
 | 
					 | 
				
			||||||
						"radioType": "is2dot4GHz",
 | 
					 | 
				
			||||||
						"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": 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": "is5GHzU",
 | 
					 | 
				
			||||||
						"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"
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						"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": 60,
 | 
					 | 
				
			||||||
						"channelSurveyType": "ON_CHANNEL",
 | 
					 | 
				
			||||||
						"scanIntervalMillis": 0,
 | 
					 | 
				
			||||||
						"percentUtilizationThreshold": 10,
 | 
					 | 
				
			||||||
						"delayMillisecondsThreshold": 600,
 | 
					 | 
				
			||||||
						"radioType": "is2dot4GHz",
 | 
					 | 
				
			||||||
						"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"
 | 
					 | 
				
			||||||
					}
 | 
					 | 
				
			||||||
				],
 | 
					 | 
				
			||||||
				"Neighbour": [
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						"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": 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"
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						"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": 1606778369931,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369931,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,37 +0,0 @@
 | 
				
			|||||||
[
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 17,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "passpoint_operator",
 | 
					 | 
				
			||||||
		"name": "TipWlan-Passpoint-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": 1606778369945,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369945,
 | 
					 | 
				
			||||||
		"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,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 11,
 | 
					    "id": 4,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "rf",
 | 
					    "profileType": "rf",
 | 
				
			||||||
    "name": "TipWlan-rf",
 | 
					    "name": "TipWlan-rf",
 | 
				
			||||||
@@ -198,7 +198,7 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "profileType": "rf"
 | 
					        "profileType": "rf"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369933,
 | 
					    "createdTimestamp": 1612285248650,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778369933,
 | 
					    "lastModifiedTimestamp": 1612285248650,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": []
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,203 +1,75 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 5,
 | 
					    "id": 2,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "profileType": "ssid",
 | 
				
			||||||
		"name": "TipWlan-cloud-3-radios",
 | 
					    "name": "TipWlan-cloud-3-radios",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					        "model_type": "SsidConfiguration",
 | 
				
			||||||
			"ssid": "TipWlan-cloud-3-radios",
 | 
					        "ssid": "TipWlan-cloud-3-radios",
 | 
				
			||||||
			"appliedRadios": [
 | 
					        "appliedRadios": [
 | 
				
			||||||
				"is5GHzL",
 | 
					            "is5GHzU",
 | 
				
			||||||
				"is2dot4GHz",
 | 
					            "is2dot4GHz",
 | 
				
			||||||
				"is5GHzU"
 | 
					            "is5GHzL"
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					        "ssidAdminState": "enabled",
 | 
				
			||||||
			"secureMode": "wpa2OnlyPSK",
 | 
					        "secureMode": "wpa2OnlyPSK",
 | 
				
			||||||
			"vlanId": 1,
 | 
					        "vlanId": 1,
 | 
				
			||||||
			"keyStr": "openwifi",
 | 
					        "keyStr": "openwifi",
 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					        "broadcastSsid": "enabled",
 | 
				
			||||||
			"keyRefresh": 0,
 | 
					        "keyRefresh": 0,
 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					        "noLocalSubnets": false,
 | 
				
			||||||
			"radiusServiceName": null,
 | 
					        "radiusServiceId": 0,
 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					        "radiusAcountingServiceInterval": 60,
 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					        "captivePortalId": null,
 | 
				
			||||||
			"captivePortalId": null,
 | 
					        "bandwidthLimitDown": 0,
 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					        "bandwidthLimitUp": 0,
 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					        "clientBandwidthLimitDown": 0,
 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					        "clientBandwidthLimitUp": 0,
 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					        "videoTrafficOnly": false,
 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					        "radioBasedConfigs": {
 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					            "is5GHzU": {
 | 
				
			||||||
				"is5GHzL": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
				"is2dot4GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHz": {
 | 
				
			||||||
				"is5GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHzL": {
 | 
				
			||||||
				"is5GHzU": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            }
 | 
				
			||||||
				}
 | 
					        },
 | 
				
			||||||
			},
 | 
					        "bonjourGatewayProfileId": null,
 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					        "enable80211w": null,
 | 
				
			||||||
			"enable80211w": null,
 | 
					        "wepConfig": null,
 | 
				
			||||||
			"wepConfig": null,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
			"forwardMode": "BRIDGE",
 | 
					        "profileType": "ssid",
 | 
				
			||||||
			"profileType": "ssid"
 | 
					        "radiusClientConfiguration": {
 | 
				
			||||||
		},
 | 
					            "model_type": "RadiusNasConfiguration",
 | 
				
			||||||
		"createdTimestamp": 1606778369598,
 | 
					            "nasClientId": "DEFAULT",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369598,
 | 
					            "nasClientIp": "WAN_IP",
 | 
				
			||||||
		"childProfileIds": [
 | 
					            "userDefinedNasId": null,
 | 
				
			||||||
		]
 | 
					            "userDefinedNasIp": null,
 | 
				
			||||||
	},
 | 
					            "operatorId": null
 | 
				
			||||||
	{
 | 
					        }
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    },
 | 
				
			||||||
		"id": 15,
 | 
					    "createdTimestamp": 1612285248638,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "lastModifiedTimestamp": 1612285248638,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "childProfileIds": []
 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-access",
 | 
					}
 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-access",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is5GHzL",
 | 
					 | 
				
			||||||
				"is5GHzU"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "wpa2PSK",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": "testing123",
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369943,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370811,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			24
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 16,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "ssid",
 | 
					 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is2dot4GHz"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "open",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": null,
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369944,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370352,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			19,
 | 
					 | 
				
			||||||
			20
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
[
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 18,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "passpoint_venue",
 | 
					 | 
				
			||||||
		"name": "TipWlan-Passpoint-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": "PasspointVenueTypeAssignment",
 | 
					 | 
				
			||||||
				"venueDescription": "Research and Development Facility",
 | 
					 | 
				
			||||||
				"venueGroupId": 2,
 | 
					 | 
				
			||||||
				"venueTypeId": 8
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"profileType": "passpoint_venue"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369950,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369950,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
  <parent>
 | 
					  <parent>
 | 
				
			||||||
    <groupId>com.telecominfraproject.wlan</groupId>
 | 
					    <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
					    <artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
    <version>0.0.1-SNAPSHOT</version>
 | 
					    <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
    <relativePath>../../wlan-cloud-root</relativePath>
 | 
					    <relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
  </parent>
 | 
					  </parent>
 | 
				
			||||||
  <artifactId>opensync-gateway-build</artifactId>
 | 
					  <artifactId>opensync-gateway-build</artifactId>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-gateway-cloud-docker</artifactId>
 | 
						<artifactId>opensync-gateway-cloud-docker</artifactId>
 | 
				
			||||||
@@ -22,7 +22,7 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
								<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,8 @@ FILE_STORE_DIRECTORY="${FILE_STORE_DIRECTORY_INTERNAL:=/tmp/filestore}"
 | 
				
			|||||||
FILE_STORE_EXTERNAL_URL="${FILE_STORE_URL}"
 | 
					FILE_STORE_EXTERNAL_URL="${FILE_STORE_URL}"
 | 
				
			||||||
MQTT_BROKER_EXTERNAL_PORT="${MQTT_BROKER_EXTERNAL_PORT}"
 | 
					MQTT_BROKER_EXTERNAL_PORT="${MQTT_BROKER_EXTERNAL_PORT}"
 | 
				
			||||||
OVSDB_EXTERNAL_PORT="${OVSDB_EXTERNAL_PORT}"
 | 
					OVSDB_EXTERNAL_PORT="${OVSDB_EXTERNAL_PORT}"
 | 
				
			||||||
 | 
					OFF_CHANNEL_REPORTING_INTERVAL_SECONDS="${OFF_CHANNEL_REPORTING_INTERVAL_SECONDS:=120}"
 | 
				
			||||||
 | 
					REPORTING_INTERVAL_SECONDS="${REPORTING_INTERVAL_SECONDS:=60}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -106,6 +108,8 @@ PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_wan_type=$DEFAULT_WAN_TYPE"
 | 
				
			|||||||
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_wan_name=$DEFAULT_WAN_NAME"
 | 
					PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_wan_name=$DEFAULT_WAN_NAME"
 | 
				
			||||||
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_type=$DEFAULT_LAN_TYPE"
 | 
					PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_type=$DEFAULT_LAN_TYPE"
 | 
				
			||||||
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_name=$DEFAULT_LAN_NAME"
 | 
					PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_name=$DEFAULT_LAN_NAME"
 | 
				
			||||||
 | 
					PROV_PROPS+=" -Dtip.wlan.defaultOffChannelReportingIntervalSeconds=$OFF_CHANNEL_REPORTING_INTERVAL_SECONDS"
 | 
				
			||||||
 | 
					PROV_PROPS+=" -Dtip.wlan.defaultReportingIntervalSeconds=$REPORTING_INTERVAL_SECONDS"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PROV_PROPS+=" -Dtip.wlan.ovsdb.autoProvisionedCustomerId=$AUTO_PROV_CUSTOMER_ID"
 | 
					PROV_PROPS+=" -Dtip.wlan.ovsdb.autoProvisionedCustomerId=$AUTO_PROV_CUSTOMER_ID"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -113,9 +117,16 @@ FILE_STORE_PROPS=" "
 | 
				
			|||||||
FILE_STORE_PROPS+=" -Dtip.wlan.fileStoreDirectory=$FILE_STORE_DIRECTORY"
 | 
					FILE_STORE_PROPS+=" -Dtip.wlan.fileStoreDirectory=$FILE_STORE_DIRECTORY"
 | 
				
			||||||
FILE_STORE_PROPS+=" -Dtip.wlan.externalFileStoreURL=$FILE_STORE_EXTERNAL_URL"
 | 
					FILE_STORE_PROPS+=" -Dtip.wlan.externalFileStoreURL=$FILE_STORE_EXTERNAL_URL"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
REMOTE_DEBUG_PORT=5005
 | 
					REMOTE_DEBUG_PORT=${REMOTE_DEBUG_PORT:-'5005'}
 | 
				
			||||||
REMOTE_DEBUG=" -agentlib:jdwp=transport=dt_socket,server=y,address=*:$REMOTE_DEBUG_PORT,suspend=n"
 | 
					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
 | 
					java $ALL_PROPS -jar app.jar
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,9 @@
 | 
				
			|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
					<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">
 | 
				
			||||||
	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>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
						<artifactId>opensync-gateway-cloud-process</artifactId>
 | 
				
			||||||
@@ -18,99 +16,99 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	<dependencies>
 | 
						<dependencies>
 | 
				
			||||||
		<!-- <dependency> <groupId>com.telecominfraproject.wlan</groupId> <artifactId>opensync-gateway</artifactId> 
 | 
							<!-- <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>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-ext-cloud</artifactId>
 | 
								<artifactId>opensync-ext-cloud</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <artifactId>filestore-service</artifactId>
 | 
					            <artifactId>filestore-service</artifactId>
 | 
				
			||||||
            <groupId>com.telecominfraproject.wlan</groupId>
 | 
					            <groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
            <version>${tip-wlan-cloud.release.version}</version>
 | 
					            <version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>customer-service-remote</artifactId>
 | 
								<artifactId>customer-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>location-service-remote</artifactId>
 | 
								<artifactId>location-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>equipment-service-remote</artifactId>
 | 
								<artifactId>equipment-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>profile-service-remote</artifactId>
 | 
								<artifactId>profile-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>portal-user-service-remote</artifactId>
 | 
								<artifactId>portal-user-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>service-metric-service-remote</artifactId>
 | 
								<artifactId>service-metric-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>system-event-service-remote</artifactId>
 | 
								<artifactId>system-event-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>alarm-service-remote</artifactId>
 | 
								<artifactId>alarm-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>status-service-remote</artifactId>
 | 
								<artifactId>status-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>client-service-remote</artifactId>
 | 
								<artifactId>client-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>routing-service-remote</artifactId>
 | 
								<artifactId>routing-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>firmware-service-remote</artifactId>
 | 
								<artifactId>firmware-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>manufacturer-service-remote</artifactId>
 | 
								<artifactId>manufacturer-service-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>cloud-event-dispatcher-remote</artifactId>
 | 
								<artifactId>cloud-event-dispatcher-remote</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -136,7 +136,7 @@ tip.wlan.manufacturerServiceBaseUrl=https://localhost:9092
 | 
				
			|||||||
tip.wlan.portalUserServiceBaseUrl=https://localhost:9092
 | 
					tip.wlan.portalUserServiceBaseUrl=https://localhost:9092
 | 
				
			||||||
 | 
					
 | 
				
			||||||
tip.wlan.fileStoreDirectory=/tmp/tip-wlan-filestore
 | 
					tip.wlan.fileStoreDirectory=/tmp/tip-wlan-filestore
 | 
				
			||||||
tip.wlan.externalFileStoreURL=https://localhost:9096
 | 
					tip.wlan.externalFileStoreURL=https://localhost:9092
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#server.session-timeout= # session timeout in seconds
 | 
					#server.session-timeout= # session timeout in seconds
 | 
				
			||||||
#server.tomcat.max-threads = 0 # number of threads in protocol handler
 | 
					#server.tomcat.max-threads = 0 # number of threads in protocol handler
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-gateway-static-docker</artifactId>
 | 
						<artifactId>opensync-gateway-static-docker</artifactId>
 | 
				
			||||||
@@ -22,7 +22,7 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-gateway-static-process</artifactId>
 | 
								<artifactId>opensync-gateway-static-process</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,221 +1,472 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type": "Equipment",
 | 
					    "model_type": "Equipment",
 | 
				
			||||||
  "id": 51,
 | 
					    "id": 1,
 | 
				
			||||||
  "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "profileId": 12,
 | 
					    "profileId": 8,
 | 
				
			||||||
  "locationId": 8,
 | 
					    "locationId": 8,
 | 
				
			||||||
  "equipmentType": "AP",
 | 
					 | 
				
			||||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "name": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "details": {
 | 
					 | 
				
			||||||
    "model_type": "ApElementConfiguration",
 | 
					 | 
				
			||||||
    "equipmentModel": "EA8300-CA",
 | 
					 | 
				
			||||||
    "elementConfigVersion": "AP-V1",
 | 
					 | 
				
			||||||
    "equipmentType": "AP",
 | 
					    "equipmentType": "AP",
 | 
				
			||||||
    "deviceMode": "standaloneAP",
 | 
					    "inventoryId": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "gettingIP": "dhcp",
 | 
					    "name": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "staticIP": null,
 | 
					    "details": {
 | 
				
			||||||
    "staticIpMaskCidr": null,
 | 
					        "model_type": "ApElementConfiguration",
 | 
				
			||||||
    "staticIpGw": null,
 | 
					        "equipmentModel": "EA8300-CA",
 | 
				
			||||||
    "gettingDNS": "dhcp",
 | 
					        "elementConfigVersion": "AP-V1",
 | 
				
			||||||
    "staticDnsIp1": null,
 | 
					        "equipmentType": "AP",
 | 
				
			||||||
    "staticDnsIp2": null,
 | 
					        "deviceMode": "standaloneAP",
 | 
				
			||||||
    "peerInfoList": [],
 | 
					        "gettingIP": "dhcp",
 | 
				
			||||||
    "deviceName": "Default Device Name",
 | 
					        "staticIP": null,
 | 
				
			||||||
    "locationData": null,
 | 
					        "staticIpMaskCidr": null,
 | 
				
			||||||
    "locallyConfiguredMgmtVlan": 0,
 | 
					        "staticIpGw": null,
 | 
				
			||||||
    "locallyConfigured": false,
 | 
					        "gettingDNS": "dhcp",
 | 
				
			||||||
    "deploymentType": "CEILING",
 | 
					        "staticDnsIp1": null,
 | 
				
			||||||
    "syntheticClientEnabled": null,
 | 
					        "staticDnsIp2": null,
 | 
				
			||||||
    "frameReportThrottleEnabled": true,
 | 
					        "peerInfoList": [],
 | 
				
			||||||
    "antennaType": "OMNI",
 | 
					        "deviceName": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "costSavingEventsEnabled": true,
 | 
					        "locationData": null,
 | 
				
			||||||
    "forwardMode": "BRIDGE",
 | 
					        "locallyConfiguredMgmtVlan": 0,
 | 
				
			||||||
    "radioMap": {
 | 
					        "locallyConfigured": false,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					        "deploymentType": "CEILING",
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					        "syntheticClientEnabled": null,
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "frameReportThrottleEnabled": true,
 | 
				
			||||||
        "channelNumber": 6,
 | 
					        "antennaType": "OMNI",
 | 
				
			||||||
        "manualChannelNumber": 6,
 | 
					        "costSavingEventsEnabled": true,
 | 
				
			||||||
        "backupChannelNumber": 11,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
        "bannedChannels": [],
 | 
					        "radioMap": {
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            "is5GHzU": {
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "model_type": "ElementRadioConfiguration",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
        "source": "auto",
 | 
					                "channelNumber": 149,
 | 
				
			||||||
          "value": -90
 | 
					                "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,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 11,
 | 
				
			||||||
 | 
					                "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": 1,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 2,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 3,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 4,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 5,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "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",
 | 
				
			||||||
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
 | 
					                "channelNumber": 36,
 | 
				
			||||||
 | 
					                "manualChannelNumber": 36,
 | 
				
			||||||
 | 
					                "backupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "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": 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
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					        "advancedRadioMap": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
        "source": "auto",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
          "value": -90
 | 
					                "radioType": "is2dot4GHz",
 | 
				
			||||||
        },
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
          "value": -90
 | 
					                "multicastRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "source": "profile",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "value": "auto"
 | 
				
			||||||
        	 "source": "auto",
 | 
					                },
 | 
				
			||||||
          "value": 32
 | 
					                "managementRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "source": "profile",
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "value": "auto"
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                },
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "activeChannel": 6
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
      },
 | 
					                    "source": "manual",
 | 
				
			||||||
      "is5GHzU": {
 | 
					                    "value": {
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "channelNumber": 149,
 | 
					                        "dropInSnrPercentage": 20,
 | 
				
			||||||
        "manualChannelNumber": 149,
 | 
					                        "minLoadFactor": 50
 | 
				
			||||||
        "backupChannelNumber": 154,
 | 
					                    }
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                },
 | 
				
			||||||
        "allowedChannels": [],
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        	 "source": "auto",
 | 
					            },
 | 
				
			||||||
          "value": -90
 | 
					            "is5GHzU": {
 | 
				
			||||||
        },
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "value": -90
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        },
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "multicastRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": -90
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                "managementRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": 32
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                    "source": "manual",
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                    "value": {
 | 
				
			||||||
        "activeChannel": 149
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
      },
 | 
					                        "mlComputed": true,
 | 
				
			||||||
      "is5GHzL": {
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					                    }
 | 
				
			||||||
        "channelNumber": 36,
 | 
					                },
 | 
				
			||||||
        "manualChannelNumber": 36,
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "backupChannelNumber": 44,
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            },
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					            "is5GHzL": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
          "value": -90
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        },
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "multicastRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "managementRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "bestApSettings": {
 | 
				
			||||||
          "value": 32
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        },
 | 
					                    "source": "manual",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "value": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "activeChannel": 36
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
      }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "advancedRadioMap": {
 | 
					    "latitude": null,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					    "longitude": null,
 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					    "baseMacAddress": {
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "model_type": "MacAddress",
 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					        "address": "JPWi7y5T",
 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					    },
 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					    "serial": "21P10C68818122",
 | 
				
			||||||
        "managementRate": {
 | 
					    "createdTimestamp": 1612285288821,
 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					    "lastModifiedTimestamp": 1612285293922
 | 
				
			||||||
          "source": "auto",
 | 
					}
 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzU": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzL": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "latitude": null,
 | 
					 | 
				
			||||||
  "longitude": null,
 | 
					 | 
				
			||||||
  "serial": "21P10C68818122",
 | 
					 | 
				
			||||||
  "createdTimestamp": 1591653239821,
 | 
					 | 
				
			||||||
  "lastModifiedTimestamp": 1591653241398
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,60 +1,61 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type" : "Location",
 | 
					    "model_type": "Location",
 | 
				
			||||||
  "id" : 8,
 | 
					    "id": 8,
 | 
				
			||||||
  "parentId" : 0,
 | 
					    "parentId": 0,
 | 
				
			||||||
  "locationType" : "SITE",
 | 
					    "locationType": "SITE",
 | 
				
			||||||
  "customerId" : 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "name" : "Ottawa",
 | 
					    "name": "Ottawa",
 | 
				
			||||||
  "details" : {
 | 
					    "details": {
 | 
				
			||||||
    "model_type" : "LocationDetails",
 | 
					        "model_type": "LocationDetails",
 | 
				
			||||||
    "countryCode" : "ca",
 | 
					        "countryCode": "CA",
 | 
				
			||||||
    "maintenanceWindow" : null,
 | 
					        "dailyActivityDetails": {
 | 
				
			||||||
    "rrmEnabled" : true,
 | 
					            "SUNDAY": {
 | 
				
			||||||
    "dailyActivityDetails" : {
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SUNDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "MONDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "MONDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "TUESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "TUESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "WEDNESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "WEDNESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "THURSDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "THURSDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "FRIDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "FRIDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "SATURDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SATURDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            }
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					        },
 | 
				
			||||||
      }
 | 
					        "maintenanceWindow": null,
 | 
				
			||||||
    }
 | 
					        "rrmEnabled": true,
 | 
				
			||||||
  },
 | 
					        "timezone": "US/Eastern"
 | 
				
			||||||
  "createdTimestamp" : 1590607043540,
 | 
					    },
 | 
				
			||||||
  "lastModifiedTimestamp" : 1590607043540
 | 
					    "createdTimestamp": 1612285243534,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1612285243534
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 12,
 | 
					    "id": 8,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "equipment_ap",
 | 
					    "profileType": "equipment_ap",
 | 
				
			||||||
    "name": "ApProfile-3-radios",
 | 
					    "name": "ApProfile-3-radios",
 | 
				
			||||||
@@ -20,11 +20,6 @@
 | 
				
			|||||||
        "syntheticClientEnabled": true,
 | 
					        "syntheticClientEnabled": true,
 | 
				
			||||||
        "ledControlEnabled": true,
 | 
					        "ledControlEnabled": true,
 | 
				
			||||||
        "equipmentDiscovery": false,
 | 
					        "equipmentDiscovery": false,
 | 
				
			||||||
        "greTunnelName": null,
 | 
					 | 
				
			||||||
        "greParentIfName": null,
 | 
					 | 
				
			||||||
        "greLocalInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteMacAddr": null,
 | 
					 | 
				
			||||||
        "radioMap": {
 | 
					        "radioMap": {
 | 
				
			||||||
            "is2dot4GHz": {
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
                "model_type": "RadioProfileConfiguration",
 | 
					                "model_type": "RadioProfileConfiguration",
 | 
				
			||||||
@@ -42,15 +37,22 @@
 | 
				
			|||||||
                "bestAPSteerType": "both"
 | 
					                "bestAPSteerType": "both"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "greTunnelConfigurations": [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "model_type": "GreTunnelConfiguration",
 | 
				
			||||||
 | 
					                "greTunnelName": "gre1",
 | 
				
			||||||
 | 
					                "greRemoteInetAddr": "192.168.1.101",
 | 
				
			||||||
 | 
					                "vlanIdsInGreTunnel": [
 | 
				
			||||||
 | 
					                    100
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
        "profileType": "equipment_ap"
 | 
					        "profileType": "equipment_ap"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369934,
 | 
					    "createdTimestamp": 1612285248925,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778443413,
 | 
					    "lastModifiedTimestamp": 1612285628377,
 | 
				
			||||||
    "childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
        16,
 | 
					        2,
 | 
				
			||||||
        5,
 | 
					        4
 | 
				
			||||||
        10,
 | 
					 | 
				
			||||||
        11,
 | 
					 | 
				
			||||||
        15
 | 
					 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,135 +1,58 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
{
 | 
					  {
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 14,
 | 
					    "id": 5,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "captive_portal",
 | 
					    "profileType": "captive_portal",
 | 
				
			||||||
    "name": "Captive-portal",
 | 
					    "name": "Captive-portal",
 | 
				
			||||||
    "details": {
 | 
					    "details": {
 | 
				
			||||||
        "model_type": "CaptivePortalConfiguration",
 | 
					      "model_type": "CaptivePortalConfiguration",
 | 
				
			||||||
        "name": "Captive-portal",
 | 
					      "name": "Default",
 | 
				
			||||||
        "browserTitle": "Access the network as Guest",
 | 
					      "browserTitle": "Captive-portal",
 | 
				
			||||||
        "headerContent": "Captive Portal",
 | 
					      "headerContent": "Captive Portal",
 | 
				
			||||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
					      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
				
			||||||
        "successPageMarkdownText": "Welcome to the network",
 | 
					      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
				
			||||||
        "redirectURL": "",
 | 
					      "redirectURL": "https://www.google.com",
 | 
				
			||||||
        "externalCaptivePortalURL": null,
 | 
					      "externalCaptivePortalURL": null,
 | 
				
			||||||
        "sessionTimeoutInMinutes": 60,
 | 
					      "sessionTimeoutInMinutes": 10,
 | 
				
			||||||
        "logoFile": null,
 | 
					      "logoFile": {
 | 
				
			||||||
        "backgroundFile": null,
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        "walledGardenAllowlist": [],
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "usernamePasswordFile": {
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
            "model_type": "ManagedFileInfo",
 | 
					        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
				
			||||||
            "md5checksum": null,
 | 
					        "fileCategory": "CaptivePortalLogo",
 | 
				
			||||||
            "lastModifiedTimestamp": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
            "apExportUrl": "userList",
 | 
					        "altSlot": false
 | 
				
			||||||
            "fileCategory": "UsernamePasswordList",
 | 
					      },
 | 
				
			||||||
            "fileType": "TEXT",
 | 
					      "backgroundFile": {
 | 
				
			||||||
            "altSlot": true
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        },
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "authenticationType": "guest",
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
        "radiusAuthMethod": "CHAP",
 | 
					        "apExportUrl": "/filestore/tip-logo",
 | 
				
			||||||
        "maxUsersWithSameCredentials": 42,
 | 
					        "fileCategory": "CaptivePortalBackground",
 | 
				
			||||||
        "externalPolicyFile": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
        "backgroundPosition": "left_top",
 | 
					        "altSlot": false
 | 
				
			||||||
        "backgroundRepeat": "no_repeat",
 | 
					      },
 | 
				
			||||||
        "radiusServiceName": null,
 | 
					      "walledGardenAllowlist": [
 | 
				
			||||||
        "expiryType": "unlimited",
 | 
					      ],
 | 
				
			||||||
        "userList": [
 | 
					      "usernamePasswordFile": null,
 | 
				
			||||||
            {
 | 
					      "authenticationType": "guest",
 | 
				
			||||||
                "model_type": "TimedAccessUserRecord",
 | 
					      "radiusAuthMethod": "CHAP",
 | 
				
			||||||
                "username": "customer",
 | 
					      "maxUsersWithSameCredentials": 3,
 | 
				
			||||||
                "password": "testing123",
 | 
					      "externalPolicyFile": null,
 | 
				
			||||||
                "activationTime": 1602183994956,
 | 
					      "backgroundPosition": "left_top",
 | 
				
			||||||
                "expirationTime": 1602212794956,
 | 
					      "backgroundRepeat": "no_repeat",
 | 
				
			||||||
                "numDevices": 1,
 | 
					      "radiusServiceId": 0,
 | 
				
			||||||
                "userDetails": {
 | 
					      "expiryType": "time_limited",
 | 
				
			||||||
                    "model_type": "TimedAccessUserDetails",
 | 
					      "userList": [
 | 
				
			||||||
                    "firstName": "Pac",
 | 
					      ],
 | 
				
			||||||
                    "lastName": "Man",
 | 
					      "macAllowList": [
 | 
				
			||||||
                    "passwordNeedsReset": false
 | 
					      ],
 | 
				
			||||||
                },
 | 
					      "profileType": "captive_portal"
 | 
				
			||||||
                "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"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
                "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,
 | 
					    "createdTimestamp": 1611857459118,
 | 
				
			||||||
    "lastModifiedTimestamp": 1602183994959,
 | 
					    "lastModifiedTimestamp": 1611857459118,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": [
 | 
				
			||||||
}
 | 
					    ]
 | 
				
			||||||
]
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,71 +1,71 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 24,
 | 
					    "id": 37,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint",
 | 
					    "profileType": "passpoint",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Config",
 | 
					    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointProfile",
 | 
					        "model_type": "PasspointProfile",
 | 
				
			||||||
			"enableInterworkingAndHs20": true,
 | 
					        "enableInterworkingAndHs20": true,
 | 
				
			||||||
			"hessid": null,
 | 
					        "hessid": null,
 | 
				
			||||||
			"passpointAccessNetworkType": "free_public_network",
 | 
					        "passpointAccessNetworkType": "free_public_network",
 | 
				
			||||||
			"passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"additionalStepsRequiredForAccess": 0,
 | 
					        "additionalStepsRequiredForAccess": 0,
 | 
				
			||||||
			"deauthRequestTimeout": 0,
 | 
					        "deauthRequestTimeout": 0,
 | 
				
			||||||
			"operatingClass": 0,
 | 
					        "operatingClass": 0,
 | 
				
			||||||
			"termsAndConditionsFile": {
 | 
					        "termsAndConditionsFile": {
 | 
				
			||||||
				"model_type": "ManagedFileInfo",
 | 
					            "model_type": "ManagedFileInfo",
 | 
				
			||||||
				"md5checksum": null,
 | 
					            "md5checksum": null,
 | 
				
			||||||
				"lastModifiedTimestamp": null,
 | 
					            "lastModifiedTimestamp": null,
 | 
				
			||||||
				"apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
					            "apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
				
			||||||
				"fileCategory": "ExternalPolicyConfiguration",
 | 
					            "fileCategory": "ExternalPolicyConfiguration",
 | 
				
			||||||
				"fileType": "TEXT",
 | 
					            "fileType": "TEXT",
 | 
				
			||||||
				"altSlot": false
 | 
					            "altSlot": false
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"whitelistDomain": null,
 | 
					        "whitelistDomain": null,
 | 
				
			||||||
			"emergencyServicesReachable": true,
 | 
					        "emergencyServicesReachable": true,
 | 
				
			||||||
			"unauthenticatedEmergencyServiceAccessible": false,
 | 
					        "unauthenticatedEmergencyServiceAccessible": false,
 | 
				
			||||||
			"internetConnectivity": true,
 | 
					        "internetConnectivity": true,
 | 
				
			||||||
			"connectionCapabilitySet": [
 | 
					        "connectionCapabilitySet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointConnectionCapability",
 | 
					                "model_type": "PasspointConnectionCapability",
 | 
				
			||||||
					"connectionCapabilitiesPortNumber": 8888,
 | 
					                "connectionCapabilitiesPortNumber": 8888,
 | 
				
			||||||
					"connectionCapabilitiesStatus": "open",
 | 
					                "connectionCapabilitiesIpProtocol": "TCP",
 | 
				
			||||||
					"connectionCapabilitiesIpProtocol": "TCP"
 | 
					                "connectionCapabilitiesStatus": "open"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
					        "ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
				
			||||||
			"qosMapSetConfiguration": null,
 | 
					        "qosMapSetConfiguration": null,
 | 
				
			||||||
			"apGeospatialLocation": null,
 | 
					        "apGeospatialLocation": null,
 | 
				
			||||||
			"apCivicLocation": null,
 | 
					        "apCivicLocation": null,
 | 
				
			||||||
			"apPublicLocationIdUri": null,
 | 
					        "apPublicLocationIdUri": null,
 | 
				
			||||||
			"gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
					        "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
				
			||||||
			"anqpDomainId": 1234,
 | 
					        "anqpDomainId": 1234,
 | 
				
			||||||
			"disableDownstreamGroupAddressedForwarding": false,
 | 
					        "disableDownstreamGroupAddressedForwarding": false,
 | 
				
			||||||
			"enable2pt4GHz": true,
 | 
					        "enable2pt4GHz": true,
 | 
				
			||||||
			"enable5GHz": true,
 | 
					        "enable5GHz": true,
 | 
				
			||||||
			"associatedAccessSsidProfileIds": [
 | 
					        "associatedAccessSsidProfileIds": [
 | 
				
			||||||
				15
 | 
					            32
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"osuSsidProfileId": 16,
 | 
					        "osuSsidProfileId": 31,
 | 
				
			||||||
			"passpointOperatorProfileId": 17,
 | 
					        "passpointOperatorProfileId": 34,
 | 
				
			||||||
			"passpointVenueProfileId": 18,
 | 
					        "passpointVenueProfileId": 33,
 | 
				
			||||||
			"passpointOsuProviderProfileIds": [
 | 
					        "passpointOsuProviderProfileIds": [
 | 
				
			||||||
				19,
 | 
					            35,
 | 
				
			||||||
				20
 | 
					            36
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"accessNetworkType": "free_public_network",
 | 
					        "accessNetworkType": "free_public_network",
 | 
				
			||||||
			"networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"profileType": "passpoint"
 | 
					        "profileType": "passpoint"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778370807,
 | 
					    "createdTimestamp": 0,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370807,
 | 
					    "lastModifiedTimestamp": 1611264539331,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
			17,
 | 
					        33,
 | 
				
			||||||
			18,
 | 
					        34,
 | 
				
			||||||
			19,
 | 
					        35,
 | 
				
			||||||
			20
 | 
					        36
 | 
				
			||||||
		]
 | 
					    ]
 | 
				
			||||||
	}
 | 
					}
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,270 +1,263 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		"id": 19,
 | 
					        "id": 35,
 | 
				
			||||||
		"customerId": 2,
 | 
					        "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider",
 | 
					        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
				
			||||||
		"details": {
 | 
					        "details": {
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
			"domainName": "rogers.com",
 | 
					            "mccMncList": [
 | 
				
			||||||
			"mccMncList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "mcc": 302,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "mnc": 720,
 | 
				
			||||||
					"mnc": 720,
 | 
					                    "iso": "ca",
 | 
				
			||||||
					"iso": "ca",
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"country": "Canada",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"countryCode": 1,
 | 
					                    "network": "Rogers AT&T Wireless",
 | 
				
			||||||
					"network": "Rogers AT&T Wireless",
 | 
					                    "mccMncPairing": "302,720"
 | 
				
			||||||
					"mccMncPairing": "302,720"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "naiRealmList": [
 | 
				
			||||||
			"naiRealmList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "naiRealms": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "rogers.com"
 | 
				
			||||||
						"rogers.com"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
							"Credential Type:username/password",
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
							"Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
					                        ],
 | 
				
			||||||
						],
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TLS with certificate": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"Credential Type:Certificate"
 | 
					                        ]
 | 
				
			||||||
						]
 | 
					                    }
 | 
				
			||||||
					}
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuIconList": [
 | 
				
			||||||
			"osuIconList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServerUri": "https://example.com/osu/rogers",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/rogers",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example provider rogers",
 | 
				
			||||||
					"dupleName": "Example provider rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example provider rogers"
 | 
				
			||||||
					"asDuple": "eng:Example provider rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemple de fournisseur rogers",
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemple de fournisseur rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuNaiStandalone": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@rogers.com",
 | 
					            "osuNaiShared": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiShared": "anonymous@rogers.com",
 | 
					            "osuMethodList": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                1,
 | 
				
			||||||
				1,
 | 
					                0
 | 
				
			||||||
				0
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example services rogers",
 | 
				
			||||||
					"dupleName": "Example services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example services rogers"
 | 
				
			||||||
					"asDuple": "eng:Example services rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemples de services rogers",
 | 
				
			||||||
					"dupleName": "Exemples de services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemples de services rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemples de services rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "roamingOi": [
 | 
				
			||||||
			"roamingOi": [
 | 
					                "BAA2D00100",
 | 
				
			||||||
				1,
 | 
					                "BAA2D00000"
 | 
				
			||||||
				2,
 | 
					            ],
 | 
				
			||||||
				3,
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				4
 | 
					        },
 | 
				
			||||||
			],
 | 
					        "createdTimestamp": 1611264539070,
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					        "lastModifiedTimestamp": 1611264539070,
 | 
				
			||||||
		},
 | 
					        "childProfileIds": []
 | 
				
			||||||
		"createdTimestamp": 1606778370345,
 | 
					    },
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370345,
 | 
					    {
 | 
				
			||||||
		"childProfileIds": [
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		]
 | 
					        "id": 36,
 | 
				
			||||||
	},
 | 
					        "customerId": 2,
 | 
				
			||||||
	{
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
				
			||||||
		"id": 20,
 | 
					        "details": {
 | 
				
			||||||
		"customerId": 2,
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					            "mccMncList": [
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider-2",
 | 
					                {
 | 
				
			||||||
		"details": {
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					                    "mcc": 302,
 | 
				
			||||||
			"domainName": "telus.com",
 | 
					                    "mnc": 220,
 | 
				
			||||||
			"mccMncList": [
 | 
					                    "iso": "ca",
 | 
				
			||||||
				{
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "network": "Telus Mobility",
 | 
				
			||||||
					"mnc": 220,
 | 
					                    "mccMncPairing": "302,220"
 | 
				
			||||||
					"iso": "ca",
 | 
					                }
 | 
				
			||||||
					"country": "Canada",
 | 
					            ],
 | 
				
			||||||
					"countryCode": 1,
 | 
					            "naiRealmList": [
 | 
				
			||||||
					"network": "Telus Mobility",
 | 
					                {
 | 
				
			||||||
					"mccMncPairing": "302,220"
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
				}
 | 
					                    "naiRealms": [
 | 
				
			||||||
			],
 | 
					                        "telus.com"
 | 
				
			||||||
			"naiRealmList": [
 | 
					                    ],
 | 
				
			||||||
				{
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"telus.com"
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
					],
 | 
					                    ],
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
					],
 | 
					                        ],
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"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,
 | 
				
			||||||
			"osuIconList": [
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                }
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					            ],
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					            "osuServerUri": "https://example.com/osu/telus",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                {
 | 
				
			||||||
				}
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
			],
 | 
					                    "locale": "eng",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/telus",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                    "dupleName": "Example provider telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example provider telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example provider telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example provider telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemple de fournisseur telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemple de fournisseur telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur telus",
 | 
					            "osuNaiStandalone": "anonymous@telus.com",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					            "osuNaiShared": "anonymous@telus.com",
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur telus"
 | 
					            "osuMethodList": [
 | 
				
			||||||
				}
 | 
					                1,
 | 
				
			||||||
			],
 | 
					                0
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@telus.com",
 | 
					            ],
 | 
				
			||||||
			"osuNaiShared": "anonymous@telus.com",
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                {
 | 
				
			||||||
				1,
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
				0
 | 
					                    "locale": "eng",
 | 
				
			||||||
			],
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                    "dupleName": "Example services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example services telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example services telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example services telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemples de services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemples de services telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemples de services telus",
 | 
					            "roamingOi": [
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "004096",
 | 
				
			||||||
					"asDuple": "fra:Exemples de services telus"
 | 
					                "005014",
 | 
				
			||||||
				}
 | 
					                "F4F5E8F5F4"
 | 
				
			||||||
			],
 | 
					            ],
 | 
				
			||||||
			"roamingOi": [
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				1,
 | 
					        },
 | 
				
			||||||
				2,
 | 
					        "createdTimestamp": 1611264539131,
 | 
				
			||||||
				3,
 | 
					        "lastModifiedTimestamp": 1611264539131,
 | 
				
			||||||
				4
 | 
					        "childProfileIds": []
 | 
				
			||||||
			],
 | 
					    }
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					]
 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,37 +1,41 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 17,
 | 
					    "id": 34,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_operator",
 | 
					    "profileType": "passpoint_operator",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Operator",
 | 
					    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointOperatorProfile",
 | 
					        "model_type": "PasspointOperatorProfile",
 | 
				
			||||||
			"serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
					        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
				
			||||||
			"x509CertificateLocation": "/etc/ca.pem",
 | 
					        "x509CertificateLocation": "/etc/ca.pem",
 | 
				
			||||||
			"operatorFriendlyName": [
 | 
					        "operatorFriendlyName": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
					                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
					                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Nom de l'opérateur convivial par défaut",
 | 
					                "dupleName": "Default friendly passpoint_operator name",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
					                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"profileType": "passpoint_operator"
 | 
					        "domainNameList": [
 | 
				
			||||||
		},
 | 
					            "bell.ca",
 | 
				
			||||||
		"createdTimestamp": 1606778369945,
 | 
					            "telus.com",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369945,
 | 
					            "rogers.com"
 | 
				
			||||||
		"childProfileIds": [
 | 
					        ],
 | 
				
			||||||
		]
 | 
					        "profileType": "passpoint_operator"
 | 
				
			||||||
	}
 | 
					    },
 | 
				
			||||||
]
 | 
					    "createdTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "childProfileIds": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
@@ -1,34 +1,24 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
        {
 | 
					  {
 | 
				
			||||||
            "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
            "id": 1,
 | 
					    "id": 1,
 | 
				
			||||||
            "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
            "profileType": "radius",
 | 
					    "profileType": "radius",
 | 
				
			||||||
            "name": "Radius-Profile",
 | 
					    "name": "Radius-Profile",
 | 
				
			||||||
            "details": {
 | 
					    "details": {
 | 
				
			||||||
                "model_type": "RadiusProfile",
 | 
					      "model_type": "RadiusProfile",
 | 
				
			||||||
                "subnetConfiguration": null,
 | 
					      "primaryRadiusAuthServer": {
 | 
				
			||||||
                "serviceRegionMap": {
 | 
					        "model_type": "RadiusServer",
 | 
				
			||||||
                    "Ottawa": {
 | 
					        "ipAddress": "192.168.0.1",
 | 
				
			||||||
                        "model_type": "RadiusServiceRegion",
 | 
					        "secret": "testing123",
 | 
				
			||||||
                        "serverMap": {
 | 
					        "port": 1812,
 | 
				
			||||||
                            "Radius-Profile": [
 | 
					        "timeout": null
 | 
				
			||||||
                                {
 | 
					      },
 | 
				
			||||||
                                    "model_type": "RadiusServer",
 | 
					      "profileType": "radius"
 | 
				
			||||||
                                    "ipAddress": "192.168.0.1",
 | 
					    },
 | 
				
			||||||
                                    "secret": "testing123",
 | 
					    "createdTimestamp": 1611262628767,
 | 
				
			||||||
                                    "authPort": 1812,
 | 
					    "lastModifiedTimestamp": 1611262628767,
 | 
				
			||||||
                                    "timeout": null
 | 
					    "childProfileIds": [
 | 
				
			||||||
                                }
 | 
					    ]
 | 
				
			||||||
                            ]
 | 
					  }
 | 
				
			||||||
                        },
 | 
					]
 | 
				
			||||||
                        "regionName": "Ottawa"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "profileType": "radius"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "createdTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "lastModifiedTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "childProfileIds": []
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 11,
 | 
					    "id": 4,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "rf",
 | 
					    "profileType": "rf",
 | 
				
			||||||
    "name": "TipWlan-rf",
 | 
					    "name": "TipWlan-rf",
 | 
				
			||||||
@@ -198,7 +198,7 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "profileType": "rf"
 | 
					        "profileType": "rf"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369933,
 | 
					    "createdTimestamp": 1612285248650,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778369933,
 | 
					    "lastModifiedTimestamp": 1612285248650,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": []
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,203 +1,75 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 5,
 | 
					    "id": 2,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "profileType": "ssid",
 | 
				
			||||||
		"name": "TipWlan-cloud-3-radios",
 | 
					    "name": "TipWlan-cloud-3-radios",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					        "model_type": "SsidConfiguration",
 | 
				
			||||||
			"ssid": "TipWlan-cloud-3-radios",
 | 
					        "ssid": "TipWlan-cloud-3-radios",
 | 
				
			||||||
			"appliedRadios": [
 | 
					        "appliedRadios": [
 | 
				
			||||||
				"is5GHzL",
 | 
					            "is5GHzU",
 | 
				
			||||||
				"is2dot4GHz",
 | 
					            "is2dot4GHz",
 | 
				
			||||||
				"is5GHzU"
 | 
					            "is5GHzL"
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					        "ssidAdminState": "enabled",
 | 
				
			||||||
			"secureMode": "wpa2OnlyPSK",
 | 
					        "secureMode": "wpa2OnlyPSK",
 | 
				
			||||||
			"vlanId": 1,
 | 
					        "vlanId": 1,
 | 
				
			||||||
			"keyStr": "openwifi",
 | 
					        "keyStr": "openwifi",
 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					        "broadcastSsid": "enabled",
 | 
				
			||||||
			"keyRefresh": 0,
 | 
					        "keyRefresh": 0,
 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					        "noLocalSubnets": false,
 | 
				
			||||||
			"radiusServiceName": null,
 | 
					        "radiusServiceId": 0,
 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					        "radiusAcountingServiceInterval": 60,
 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					        "captivePortalId": null,
 | 
				
			||||||
			"captivePortalId": null,
 | 
					        "bandwidthLimitDown": 0,
 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					        "bandwidthLimitUp": 0,
 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					        "clientBandwidthLimitDown": 0,
 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					        "clientBandwidthLimitUp": 0,
 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					        "videoTrafficOnly": false,
 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					        "radioBasedConfigs": {
 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					            "is5GHzU": {
 | 
				
			||||||
				"is5GHzL": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
				"is2dot4GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHz": {
 | 
				
			||||||
				"is5GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHzL": {
 | 
				
			||||||
				"is5GHzU": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            }
 | 
				
			||||||
				}
 | 
					        },
 | 
				
			||||||
			},
 | 
					        "bonjourGatewayProfileId": null,
 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					        "enable80211w": null,
 | 
				
			||||||
			"enable80211w": null,
 | 
					        "wepConfig": null,
 | 
				
			||||||
			"wepConfig": null,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
			"forwardMode": "BRIDGE",
 | 
					        "profileType": "ssid",
 | 
				
			||||||
			"profileType": "ssid"
 | 
					        "radiusClientConfiguration": {
 | 
				
			||||||
		},
 | 
					            "model_type": "RadiusNasConfiguration",
 | 
				
			||||||
		"createdTimestamp": 1606778369598,
 | 
					            "nasClientId": "DEFAULT",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369598,
 | 
					            "nasClientIp": "WAN_IP",
 | 
				
			||||||
		"childProfileIds": [
 | 
					            "userDefinedNasId": null,
 | 
				
			||||||
		]
 | 
					            "userDefinedNasIp": null,
 | 
				
			||||||
	},
 | 
					            "operatorId": null
 | 
				
			||||||
	{
 | 
					        }
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    },
 | 
				
			||||||
		"id": 15,
 | 
					    "createdTimestamp": 1612285248638,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "lastModifiedTimestamp": 1612285248638,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "childProfileIds": []
 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-access",
 | 
					}
 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-access",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is5GHzL",
 | 
					 | 
				
			||||||
				"is5GHzU"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "wpa2PSK",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": "testing123",
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369943,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370811,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			24
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 16,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "ssid",
 | 
					 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is2dot4GHz"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "open",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": null,
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369944,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370352,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			19,
 | 
					 | 
				
			||||||
			20
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,43 +1,42 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 18,
 | 
					    "id": 33,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_venue",
 | 
					    "profileType": "passpoint_venue",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Venue",
 | 
					    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointVenueProfile",
 | 
					        "model_type": "PasspointVenueProfile",
 | 
				
			||||||
			"venueNameSet": [
 | 
					        "venueNameSet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Exemple de lieu",
 | 
					                "dupleName": "Exemple de lieu",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-fra",
 | 
					                "venueUrl": "http://www.example.com/info-fra",
 | 
				
			||||||
					"asDuple": "fra:Exemple de lieu"
 | 
					                "asDuple": "fra:Exemple de lieu"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Example passpoint_venue",
 | 
					                "dupleName": "Example passpoint_venue",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-eng",
 | 
					                "venueUrl": "http://www.example.com/info-eng",
 | 
				
			||||||
					"asDuple": "eng:Example passpoint_venue"
 | 
					                "asDuple": "eng:Example passpoint_venue"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"venueTypeAssignment": {
 | 
					        "venueTypeAssignment": {
 | 
				
			||||||
				"model_type": "PasspointVenueTypeAssignment",
 | 
					            "model_type": "PasspointVenueTypeAssignment",
 | 
				
			||||||
				"venueDescription": "Research and Development Facility",
 | 
					            "venueDescription": "Research and Development Facility",
 | 
				
			||||||
				"venueGroupId": 2,
 | 
					            "venueGroupId": 2,
 | 
				
			||||||
				"venueTypeId": 8
 | 
					            "venueTypeId": 8
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"profileType": "passpoint_venue"
 | 
					        "profileType": "passpoint_venue"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778369950,
 | 
					    "createdTimestamp": 1611264538947,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369950,
 | 
					    "lastModifiedTimestamp": 1611264538947,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": []
 | 
				
			||||||
		]
 | 
					}
 | 
				
			||||||
	}
 | 
					]
 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -174,7 +174,9 @@ RESTAPI_PROPS="$RESTAPI_PROPS -Dserver.port=4043"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SPRING_EXTRA_PROPS=" --add-opens java.base/java.lang=ALL-UNNAMED"
 | 
					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
 | 
					echo Starting opensync wifi controller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,221 +1,472 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type": "Equipment",
 | 
					    "model_type": "Equipment",
 | 
				
			||||||
  "id": 51,
 | 
					    "id": 1,
 | 
				
			||||||
  "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "profileId": 12,
 | 
					    "profileId": 8,
 | 
				
			||||||
  "locationId": 8,
 | 
					    "locationId": 8,
 | 
				
			||||||
  "equipmentType": "AP",
 | 
					 | 
				
			||||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "name": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "details": {
 | 
					 | 
				
			||||||
    "model_type": "ApElementConfiguration",
 | 
					 | 
				
			||||||
    "equipmentModel": "EA8300-CA",
 | 
					 | 
				
			||||||
    "elementConfigVersion": "AP-V1",
 | 
					 | 
				
			||||||
    "equipmentType": "AP",
 | 
					    "equipmentType": "AP",
 | 
				
			||||||
    "deviceMode": "standaloneAP",
 | 
					    "inventoryId": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "gettingIP": "dhcp",
 | 
					    "name": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "staticIP": null,
 | 
					    "details": {
 | 
				
			||||||
    "staticIpMaskCidr": null,
 | 
					        "model_type": "ApElementConfiguration",
 | 
				
			||||||
    "staticIpGw": null,
 | 
					        "equipmentModel": "EA8300-CA",
 | 
				
			||||||
    "gettingDNS": "dhcp",
 | 
					        "elementConfigVersion": "AP-V1",
 | 
				
			||||||
    "staticDnsIp1": null,
 | 
					        "equipmentType": "AP",
 | 
				
			||||||
    "staticDnsIp2": null,
 | 
					        "deviceMode": "standaloneAP",
 | 
				
			||||||
    "peerInfoList": [],
 | 
					        "gettingIP": "dhcp",
 | 
				
			||||||
    "deviceName": "Default Device Name",
 | 
					        "staticIP": null,
 | 
				
			||||||
    "locationData": null,
 | 
					        "staticIpMaskCidr": null,
 | 
				
			||||||
    "locallyConfiguredMgmtVlan": 0,
 | 
					        "staticIpGw": null,
 | 
				
			||||||
    "locallyConfigured": false,
 | 
					        "gettingDNS": "dhcp",
 | 
				
			||||||
    "deploymentType": "CEILING",
 | 
					        "staticDnsIp1": null,
 | 
				
			||||||
    "syntheticClientEnabled": null,
 | 
					        "staticDnsIp2": null,
 | 
				
			||||||
    "frameReportThrottleEnabled": true,
 | 
					        "peerInfoList": [],
 | 
				
			||||||
    "antennaType": "OMNI",
 | 
					        "deviceName": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "costSavingEventsEnabled": true,
 | 
					        "locationData": null,
 | 
				
			||||||
    "forwardMode": "BRIDGE",
 | 
					        "locallyConfiguredMgmtVlan": 0,
 | 
				
			||||||
    "radioMap": {
 | 
					        "locallyConfigured": false,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					        "deploymentType": "CEILING",
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					        "syntheticClientEnabled": null,
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "frameReportThrottleEnabled": true,
 | 
				
			||||||
        "channelNumber": 6,
 | 
					        "antennaType": "OMNI",
 | 
				
			||||||
        "manualChannelNumber": 6,
 | 
					        "costSavingEventsEnabled": true,
 | 
				
			||||||
        "backupChannelNumber": 11,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
        "bannedChannels": [],
 | 
					        "radioMap": {
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            "is5GHzU": {
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "model_type": "ElementRadioConfiguration",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
        "source": "auto",
 | 
					                "channelNumber": 149,
 | 
				
			||||||
          "value": -90
 | 
					                "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,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 11,
 | 
				
			||||||
 | 
					                "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": 1,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 2,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 3,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 4,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 5,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "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",
 | 
				
			||||||
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
 | 
					                "channelNumber": 36,
 | 
				
			||||||
 | 
					                "manualChannelNumber": 36,
 | 
				
			||||||
 | 
					                "backupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "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": 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
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					        "advancedRadioMap": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
        "source": "auto",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
          "value": -90
 | 
					                "radioType": "is2dot4GHz",
 | 
				
			||||||
        },
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
          "value": -90
 | 
					                "multicastRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "source": "profile",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "value": "auto"
 | 
				
			||||||
        	 "source": "auto",
 | 
					                },
 | 
				
			||||||
          "value": 32
 | 
					                "managementRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "source": "profile",
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "value": "auto"
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                },
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "activeChannel": 6
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
      },
 | 
					                    "source": "manual",
 | 
				
			||||||
      "is5GHzU": {
 | 
					                    "value": {
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "channelNumber": 149,
 | 
					                        "dropInSnrPercentage": 20,
 | 
				
			||||||
        "manualChannelNumber": 149,
 | 
					                        "minLoadFactor": 50
 | 
				
			||||||
        "backupChannelNumber": 154,
 | 
					                    }
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                },
 | 
				
			||||||
        "allowedChannels": [],
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        	 "source": "auto",
 | 
					            },
 | 
				
			||||||
          "value": -90
 | 
					            "is5GHzU": {
 | 
				
			||||||
        },
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "value": -90
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        },
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "multicastRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": -90
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                "managementRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": 32
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                    "source": "manual",
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                    "value": {
 | 
				
			||||||
        "activeChannel": 149
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
      },
 | 
					                        "mlComputed": true,
 | 
				
			||||||
      "is5GHzL": {
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					                    }
 | 
				
			||||||
        "channelNumber": 36,
 | 
					                },
 | 
				
			||||||
        "manualChannelNumber": 36,
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "backupChannelNumber": 44,
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            },
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					            "is5GHzL": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
          "value": -90
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        },
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "multicastRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "managementRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "bestApSettings": {
 | 
				
			||||||
          "value": 32
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        },
 | 
					                    "source": "manual",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "value": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "activeChannel": 36
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
      }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "advancedRadioMap": {
 | 
					    "latitude": null,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					    "longitude": null,
 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					    "baseMacAddress": {
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "model_type": "MacAddress",
 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					        "address": "JPWi7y5T",
 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					    },
 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					    "serial": "21P10C68818122",
 | 
				
			||||||
        "managementRate": {
 | 
					    "createdTimestamp": 1612285288821,
 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					    "lastModifiedTimestamp": 1612285293922
 | 
				
			||||||
          "source": "auto",
 | 
					}
 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzU": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzL": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "latitude": null,
 | 
					 | 
				
			||||||
  "longitude": null,
 | 
					 | 
				
			||||||
  "serial": "21P10C68818122",
 | 
					 | 
				
			||||||
  "createdTimestamp": 1591653239821,
 | 
					 | 
				
			||||||
  "lastModifiedTimestamp": 1591653241398
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,60 +1,61 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type" : "Location",
 | 
					    "model_type": "Location",
 | 
				
			||||||
  "id" : 8,
 | 
					    "id": 8,
 | 
				
			||||||
  "parentId" : 0,
 | 
					    "parentId": 0,
 | 
				
			||||||
  "locationType" : "SITE",
 | 
					    "locationType": "SITE",
 | 
				
			||||||
  "customerId" : 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "name" : "Ottawa",
 | 
					    "name": "Ottawa",
 | 
				
			||||||
  "details" : {
 | 
					    "details": {
 | 
				
			||||||
    "model_type" : "LocationDetails",
 | 
					        "model_type": "LocationDetails",
 | 
				
			||||||
    "countryCode" : "ca",
 | 
					        "countryCode": "CA",
 | 
				
			||||||
    "maintenanceWindow" : null,
 | 
					        "dailyActivityDetails": {
 | 
				
			||||||
    "rrmEnabled" : true,
 | 
					            "SUNDAY": {
 | 
				
			||||||
    "dailyActivityDetails" : {
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SUNDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "MONDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "MONDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "TUESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "TUESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "WEDNESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "WEDNESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "THURSDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "THURSDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "FRIDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "FRIDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "SATURDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SATURDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            }
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					        },
 | 
				
			||||||
      }
 | 
					        "maintenanceWindow": null,
 | 
				
			||||||
    }
 | 
					        "rrmEnabled": true,
 | 
				
			||||||
  },
 | 
					        "timezone": "US/Eastern"
 | 
				
			||||||
  "createdTimestamp" : 1590607043540,
 | 
					    },
 | 
				
			||||||
  "lastModifiedTimestamp" : 1590607043540
 | 
					    "createdTimestamp": 1612285243534,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1612285243534
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 12,
 | 
					    "id": 8,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "equipment_ap",
 | 
					    "profileType": "equipment_ap",
 | 
				
			||||||
    "name": "ApProfile-3-radios",
 | 
					    "name": "ApProfile-3-radios",
 | 
				
			||||||
@@ -20,11 +20,6 @@
 | 
				
			|||||||
        "syntheticClientEnabled": true,
 | 
					        "syntheticClientEnabled": true,
 | 
				
			||||||
        "ledControlEnabled": true,
 | 
					        "ledControlEnabled": true,
 | 
				
			||||||
        "equipmentDiscovery": false,
 | 
					        "equipmentDiscovery": false,
 | 
				
			||||||
        "greTunnelName": null,
 | 
					 | 
				
			||||||
        "greParentIfName": null,
 | 
					 | 
				
			||||||
        "greLocalInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteMacAddr": null,
 | 
					 | 
				
			||||||
        "radioMap": {
 | 
					        "radioMap": {
 | 
				
			||||||
            "is2dot4GHz": {
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
                "model_type": "RadioProfileConfiguration",
 | 
					                "model_type": "RadioProfileConfiguration",
 | 
				
			||||||
@@ -42,15 +37,22 @@
 | 
				
			|||||||
                "bestAPSteerType": "both"
 | 
					                "bestAPSteerType": "both"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "greTunnelConfigurations": [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "model_type": "GreTunnelConfiguration",
 | 
				
			||||||
 | 
					                "greTunnelName": "gre1",
 | 
				
			||||||
 | 
					                "greRemoteInetAddr": "192.168.1.101",
 | 
				
			||||||
 | 
					                "vlanIdsInGreTunnel": [
 | 
				
			||||||
 | 
					                    100
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
        "profileType": "equipment_ap"
 | 
					        "profileType": "equipment_ap"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369934,
 | 
					    "createdTimestamp": 1612285248925,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778443413,
 | 
					    "lastModifiedTimestamp": 1612285628377,
 | 
				
			||||||
    "childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
        16,
 | 
					        2,
 | 
				
			||||||
        5,
 | 
					        4
 | 
				
			||||||
        10,
 | 
					 | 
				
			||||||
        11,
 | 
					 | 
				
			||||||
        15
 | 
					 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,135 +1,58 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
{
 | 
					  {
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 14,
 | 
					    "id": 5,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "captive_portal",
 | 
					    "profileType": "captive_portal",
 | 
				
			||||||
    "name": "Captive-portal",
 | 
					    "name": "Captive-portal",
 | 
				
			||||||
    "details": {
 | 
					    "details": {
 | 
				
			||||||
        "model_type": "CaptivePortalConfiguration",
 | 
					      "model_type": "CaptivePortalConfiguration",
 | 
				
			||||||
        "name": "Captive-portal",
 | 
					      "name": "Default",
 | 
				
			||||||
        "browserTitle": "Access the network as Guest",
 | 
					      "browserTitle": "Captive-portal",
 | 
				
			||||||
        "headerContent": "Captive Portal",
 | 
					      "headerContent": "Captive Portal",
 | 
				
			||||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
					      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
				
			||||||
        "successPageMarkdownText": "Welcome to the network",
 | 
					      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
				
			||||||
        "redirectURL": "",
 | 
					      "redirectURL": "https://www.google.com",
 | 
				
			||||||
        "externalCaptivePortalURL": null,
 | 
					      "externalCaptivePortalURL": null,
 | 
				
			||||||
        "sessionTimeoutInMinutes": 60,
 | 
					      "sessionTimeoutInMinutes": 10,
 | 
				
			||||||
        "logoFile": null,
 | 
					      "logoFile": {
 | 
				
			||||||
        "backgroundFile": null,
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        "walledGardenAllowlist": [],
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "usernamePasswordFile": {
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
            "model_type": "ManagedFileInfo",
 | 
					        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
				
			||||||
            "md5checksum": null,
 | 
					        "fileCategory": "CaptivePortalLogo",
 | 
				
			||||||
            "lastModifiedTimestamp": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
            "apExportUrl": "userList",
 | 
					        "altSlot": false
 | 
				
			||||||
            "fileCategory": "UsernamePasswordList",
 | 
					      },
 | 
				
			||||||
            "fileType": "TEXT",
 | 
					      "backgroundFile": {
 | 
				
			||||||
            "altSlot": true
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        },
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "authenticationType": "guest",
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
        "radiusAuthMethod": "CHAP",
 | 
					        "apExportUrl": "/filestore/tip-logo",
 | 
				
			||||||
        "maxUsersWithSameCredentials": 42,
 | 
					        "fileCategory": "CaptivePortalBackground",
 | 
				
			||||||
        "externalPolicyFile": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
        "backgroundPosition": "left_top",
 | 
					        "altSlot": false
 | 
				
			||||||
        "backgroundRepeat": "no_repeat",
 | 
					      },
 | 
				
			||||||
        "radiusServiceName": null,
 | 
					      "walledGardenAllowlist": [
 | 
				
			||||||
        "expiryType": "unlimited",
 | 
					      ],
 | 
				
			||||||
        "userList": [
 | 
					      "usernamePasswordFile": null,
 | 
				
			||||||
            {
 | 
					      "authenticationType": "guest",
 | 
				
			||||||
                "model_type": "TimedAccessUserRecord",
 | 
					      "radiusAuthMethod": "CHAP",
 | 
				
			||||||
                "username": "customer",
 | 
					      "maxUsersWithSameCredentials": 3,
 | 
				
			||||||
                "password": "testing123",
 | 
					      "externalPolicyFile": null,
 | 
				
			||||||
                "activationTime": 1602183994956,
 | 
					      "backgroundPosition": "left_top",
 | 
				
			||||||
                "expirationTime": 1602212794956,
 | 
					      "backgroundRepeat": "no_repeat",
 | 
				
			||||||
                "numDevices": 1,
 | 
					      "radiusServiceId": 0,
 | 
				
			||||||
                "userDetails": {
 | 
					      "expiryType": "time_limited",
 | 
				
			||||||
                    "model_type": "TimedAccessUserDetails",
 | 
					      "userList": [
 | 
				
			||||||
                    "firstName": "Pac",
 | 
					      ],
 | 
				
			||||||
                    "lastName": "Man",
 | 
					      "macAllowList": [
 | 
				
			||||||
                    "passwordNeedsReset": false
 | 
					      ],
 | 
				
			||||||
                },
 | 
					      "profileType": "captive_portal"
 | 
				
			||||||
                "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"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
                "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,
 | 
					    "createdTimestamp": 1611857459118,
 | 
				
			||||||
    "lastModifiedTimestamp": 1602183994959,
 | 
					    "lastModifiedTimestamp": 1611857459118,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": [
 | 
				
			||||||
}
 | 
					    ]
 | 
				
			||||||
]
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,71 +1,71 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 24,
 | 
					    "id": 37,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint",
 | 
					    "profileType": "passpoint",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Config",
 | 
					    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointProfile",
 | 
					        "model_type": "PasspointProfile",
 | 
				
			||||||
			"enableInterworkingAndHs20": true,
 | 
					        "enableInterworkingAndHs20": true,
 | 
				
			||||||
			"hessid": null,
 | 
					        "hessid": null,
 | 
				
			||||||
			"passpointAccessNetworkType": "free_public_network",
 | 
					        "passpointAccessNetworkType": "free_public_network",
 | 
				
			||||||
			"passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"additionalStepsRequiredForAccess": 0,
 | 
					        "additionalStepsRequiredForAccess": 0,
 | 
				
			||||||
			"deauthRequestTimeout": 0,
 | 
					        "deauthRequestTimeout": 0,
 | 
				
			||||||
			"operatingClass": 0,
 | 
					        "operatingClass": 0,
 | 
				
			||||||
			"termsAndConditionsFile": {
 | 
					        "termsAndConditionsFile": {
 | 
				
			||||||
				"model_type": "ManagedFileInfo",
 | 
					            "model_type": "ManagedFileInfo",
 | 
				
			||||||
				"md5checksum": null,
 | 
					            "md5checksum": null,
 | 
				
			||||||
				"lastModifiedTimestamp": null,
 | 
					            "lastModifiedTimestamp": null,
 | 
				
			||||||
				"apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
					            "apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
				
			||||||
				"fileCategory": "ExternalPolicyConfiguration",
 | 
					            "fileCategory": "ExternalPolicyConfiguration",
 | 
				
			||||||
				"fileType": "TEXT",
 | 
					            "fileType": "TEXT",
 | 
				
			||||||
				"altSlot": false
 | 
					            "altSlot": false
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"whitelistDomain": null,
 | 
					        "whitelistDomain": null,
 | 
				
			||||||
			"emergencyServicesReachable": true,
 | 
					        "emergencyServicesReachable": true,
 | 
				
			||||||
			"unauthenticatedEmergencyServiceAccessible": false,
 | 
					        "unauthenticatedEmergencyServiceAccessible": false,
 | 
				
			||||||
			"internetConnectivity": true,
 | 
					        "internetConnectivity": true,
 | 
				
			||||||
			"connectionCapabilitySet": [
 | 
					        "connectionCapabilitySet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointConnectionCapability",
 | 
					                "model_type": "PasspointConnectionCapability",
 | 
				
			||||||
					"connectionCapabilitiesPortNumber": 8888,
 | 
					                "connectionCapabilitiesPortNumber": 8888,
 | 
				
			||||||
					"connectionCapabilitiesStatus": "open",
 | 
					                "connectionCapabilitiesIpProtocol": "TCP",
 | 
				
			||||||
					"connectionCapabilitiesIpProtocol": "TCP"
 | 
					                "connectionCapabilitiesStatus": "open"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
					        "ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
				
			||||||
			"qosMapSetConfiguration": null,
 | 
					        "qosMapSetConfiguration": null,
 | 
				
			||||||
			"apGeospatialLocation": null,
 | 
					        "apGeospatialLocation": null,
 | 
				
			||||||
			"apCivicLocation": null,
 | 
					        "apCivicLocation": null,
 | 
				
			||||||
			"apPublicLocationIdUri": null,
 | 
					        "apPublicLocationIdUri": null,
 | 
				
			||||||
			"gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
					        "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
				
			||||||
			"anqpDomainId": 1234,
 | 
					        "anqpDomainId": 1234,
 | 
				
			||||||
			"disableDownstreamGroupAddressedForwarding": false,
 | 
					        "disableDownstreamGroupAddressedForwarding": false,
 | 
				
			||||||
			"enable2pt4GHz": true,
 | 
					        "enable2pt4GHz": true,
 | 
				
			||||||
			"enable5GHz": true,
 | 
					        "enable5GHz": true,
 | 
				
			||||||
			"associatedAccessSsidProfileIds": [
 | 
					        "associatedAccessSsidProfileIds": [
 | 
				
			||||||
				15
 | 
					            32
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"osuSsidProfileId": 16,
 | 
					        "osuSsidProfileId": 31,
 | 
				
			||||||
			"passpointOperatorProfileId": 17,
 | 
					        "passpointOperatorProfileId": 34,
 | 
				
			||||||
			"passpointVenueProfileId": 18,
 | 
					        "passpointVenueProfileId": 33,
 | 
				
			||||||
			"passpointOsuProviderProfileIds": [
 | 
					        "passpointOsuProviderProfileIds": [
 | 
				
			||||||
				19,
 | 
					            35,
 | 
				
			||||||
				20
 | 
					            36
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"accessNetworkType": "free_public_network",
 | 
					        "accessNetworkType": "free_public_network",
 | 
				
			||||||
			"networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"profileType": "passpoint"
 | 
					        "profileType": "passpoint"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778370807,
 | 
					    "createdTimestamp": 0,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370807,
 | 
					    "lastModifiedTimestamp": 1611264539331,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
			17,
 | 
					        33,
 | 
				
			||||||
			18,
 | 
					        34,
 | 
				
			||||||
			19,
 | 
					        35,
 | 
				
			||||||
			20
 | 
					        36
 | 
				
			||||||
		]
 | 
					    ]
 | 
				
			||||||
	}
 | 
					}
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,270 +1,263 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		"id": 19,
 | 
					        "id": 35,
 | 
				
			||||||
		"customerId": 2,
 | 
					        "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider",
 | 
					        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
				
			||||||
		"details": {
 | 
					        "details": {
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
			"domainName": "rogers.com",
 | 
					            "mccMncList": [
 | 
				
			||||||
			"mccMncList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "mcc": 302,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "mnc": 720,
 | 
				
			||||||
					"mnc": 720,
 | 
					                    "iso": "ca",
 | 
				
			||||||
					"iso": "ca",
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"country": "Canada",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"countryCode": 1,
 | 
					                    "network": "Rogers AT&T Wireless",
 | 
				
			||||||
					"network": "Rogers AT&T Wireless",
 | 
					                    "mccMncPairing": "302,720"
 | 
				
			||||||
					"mccMncPairing": "302,720"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "naiRealmList": [
 | 
				
			||||||
			"naiRealmList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "naiRealms": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "rogers.com"
 | 
				
			||||||
						"rogers.com"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
							"Credential Type:username/password",
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
							"Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
					                        ],
 | 
				
			||||||
						],
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TLS with certificate": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"Credential Type:Certificate"
 | 
					                        ]
 | 
				
			||||||
						]
 | 
					                    }
 | 
				
			||||||
					}
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuIconList": [
 | 
				
			||||||
			"osuIconList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServerUri": "https://example.com/osu/rogers",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/rogers",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example provider rogers",
 | 
				
			||||||
					"dupleName": "Example provider rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example provider rogers"
 | 
				
			||||||
					"asDuple": "eng:Example provider rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemple de fournisseur rogers",
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemple de fournisseur rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuNaiStandalone": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@rogers.com",
 | 
					            "osuNaiShared": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiShared": "anonymous@rogers.com",
 | 
					            "osuMethodList": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                1,
 | 
				
			||||||
				1,
 | 
					                0
 | 
				
			||||||
				0
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example services rogers",
 | 
				
			||||||
					"dupleName": "Example services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example services rogers"
 | 
				
			||||||
					"asDuple": "eng:Example services rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemples de services rogers",
 | 
				
			||||||
					"dupleName": "Exemples de services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemples de services rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemples de services rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "roamingOi": [
 | 
				
			||||||
			"roamingOi": [
 | 
					                "BAA2D00100",
 | 
				
			||||||
				1,
 | 
					                "BAA2D00000"
 | 
				
			||||||
				2,
 | 
					            ],
 | 
				
			||||||
				3,
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				4
 | 
					        },
 | 
				
			||||||
			],
 | 
					        "createdTimestamp": 1611264539070,
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					        "lastModifiedTimestamp": 1611264539070,
 | 
				
			||||||
		},
 | 
					        "childProfileIds": []
 | 
				
			||||||
		"createdTimestamp": 1606778370345,
 | 
					    },
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370345,
 | 
					    {
 | 
				
			||||||
		"childProfileIds": [
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		]
 | 
					        "id": 36,
 | 
				
			||||||
	},
 | 
					        "customerId": 2,
 | 
				
			||||||
	{
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
				
			||||||
		"id": 20,
 | 
					        "details": {
 | 
				
			||||||
		"customerId": 2,
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					            "mccMncList": [
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider-2",
 | 
					                {
 | 
				
			||||||
		"details": {
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					                    "mcc": 302,
 | 
				
			||||||
			"domainName": "telus.com",
 | 
					                    "mnc": 220,
 | 
				
			||||||
			"mccMncList": [
 | 
					                    "iso": "ca",
 | 
				
			||||||
				{
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "network": "Telus Mobility",
 | 
				
			||||||
					"mnc": 220,
 | 
					                    "mccMncPairing": "302,220"
 | 
				
			||||||
					"iso": "ca",
 | 
					                }
 | 
				
			||||||
					"country": "Canada",
 | 
					            ],
 | 
				
			||||||
					"countryCode": 1,
 | 
					            "naiRealmList": [
 | 
				
			||||||
					"network": "Telus Mobility",
 | 
					                {
 | 
				
			||||||
					"mccMncPairing": "302,220"
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
				}
 | 
					                    "naiRealms": [
 | 
				
			||||||
			],
 | 
					                        "telus.com"
 | 
				
			||||||
			"naiRealmList": [
 | 
					                    ],
 | 
				
			||||||
				{
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"telus.com"
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
					],
 | 
					                    ],
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
					],
 | 
					                        ],
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"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,
 | 
				
			||||||
			"osuIconList": [
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                }
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					            ],
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					            "osuServerUri": "https://example.com/osu/telus",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                {
 | 
				
			||||||
				}
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
			],
 | 
					                    "locale": "eng",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/telus",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                    "dupleName": "Example provider telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example provider telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example provider telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example provider telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemple de fournisseur telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemple de fournisseur telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur telus",
 | 
					            "osuNaiStandalone": "anonymous@telus.com",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					            "osuNaiShared": "anonymous@telus.com",
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur telus"
 | 
					            "osuMethodList": [
 | 
				
			||||||
				}
 | 
					                1,
 | 
				
			||||||
			],
 | 
					                0
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@telus.com",
 | 
					            ],
 | 
				
			||||||
			"osuNaiShared": "anonymous@telus.com",
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                {
 | 
				
			||||||
				1,
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
				0
 | 
					                    "locale": "eng",
 | 
				
			||||||
			],
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                    "dupleName": "Example services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example services telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example services telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example services telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemples de services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemples de services telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemples de services telus",
 | 
					            "roamingOi": [
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "004096",
 | 
				
			||||||
					"asDuple": "fra:Exemples de services telus"
 | 
					                "005014",
 | 
				
			||||||
				}
 | 
					                "F4F5E8F5F4"
 | 
				
			||||||
			],
 | 
					            ],
 | 
				
			||||||
			"roamingOi": [
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				1,
 | 
					        },
 | 
				
			||||||
				2,
 | 
					        "createdTimestamp": 1611264539131,
 | 
				
			||||||
				3,
 | 
					        "lastModifiedTimestamp": 1611264539131,
 | 
				
			||||||
				4
 | 
					        "childProfileIds": []
 | 
				
			||||||
			],
 | 
					    }
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					]
 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,37 +1,41 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 17,
 | 
					    "id": 34,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_operator",
 | 
					    "profileType": "passpoint_operator",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Operator",
 | 
					    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointOperatorProfile",
 | 
					        "model_type": "PasspointOperatorProfile",
 | 
				
			||||||
			"serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
					        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
				
			||||||
			"x509CertificateLocation": "/etc/ca.pem",
 | 
					        "x509CertificateLocation": "/etc/ca.pem",
 | 
				
			||||||
			"operatorFriendlyName": [
 | 
					        "operatorFriendlyName": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
					                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
					                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Nom de l'opérateur convivial par défaut",
 | 
					                "dupleName": "Default friendly passpoint_operator name",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
					                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"profileType": "passpoint_operator"
 | 
					        "domainNameList": [
 | 
				
			||||||
		},
 | 
					            "bell.ca",
 | 
				
			||||||
		"createdTimestamp": 1606778369945,
 | 
					            "telus.com",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369945,
 | 
					            "rogers.com"
 | 
				
			||||||
		"childProfileIds": [
 | 
					        ],
 | 
				
			||||||
		]
 | 
					        "profileType": "passpoint_operator"
 | 
				
			||||||
	}
 | 
					    },
 | 
				
			||||||
]
 | 
					    "createdTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "childProfileIds": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
@@ -1,34 +1,24 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
        {
 | 
					  {
 | 
				
			||||||
            "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
            "id": 1,
 | 
					    "id": 1,
 | 
				
			||||||
            "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
            "profileType": "radius",
 | 
					    "profileType": "radius",
 | 
				
			||||||
            "name": "Radius-Profile",
 | 
					    "name": "Radius-Profile",
 | 
				
			||||||
            "details": {
 | 
					    "details": {
 | 
				
			||||||
                "model_type": "RadiusProfile",
 | 
					      "model_type": "RadiusProfile",
 | 
				
			||||||
                "subnetConfiguration": null,
 | 
					      "primaryRadiusAuthServer": {
 | 
				
			||||||
                "serviceRegionMap": {
 | 
					        "model_type": "RadiusServer",
 | 
				
			||||||
                    "Ottawa": {
 | 
					        "ipAddress": "192.168.0.1",
 | 
				
			||||||
                        "model_type": "RadiusServiceRegion",
 | 
					        "secret": "testing123",
 | 
				
			||||||
                        "serverMap": {
 | 
					        "port": 1812,
 | 
				
			||||||
                            "Radius-Profile": [
 | 
					        "timeout": null
 | 
				
			||||||
                                {
 | 
					      },
 | 
				
			||||||
                                    "model_type": "RadiusServer",
 | 
					      "profileType": "radius"
 | 
				
			||||||
                                    "ipAddress": "192.168.0.1",
 | 
					    },
 | 
				
			||||||
                                    "secret": "testing123",
 | 
					    "createdTimestamp": 1611262628767,
 | 
				
			||||||
                                    "authPort": 1812,
 | 
					    "lastModifiedTimestamp": 1611262628767,
 | 
				
			||||||
                                    "timeout": null
 | 
					    "childProfileIds": [
 | 
				
			||||||
                                }
 | 
					    ]
 | 
				
			||||||
                            ]
 | 
					  }
 | 
				
			||||||
                        },
 | 
					]
 | 
				
			||||||
                        "regionName": "Ottawa"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "profileType": "radius"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "createdTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "lastModifiedTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "childProfileIds": []
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 11,
 | 
					    "id": 4,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "rf",
 | 
					    "profileType": "rf",
 | 
				
			||||||
    "name": "TipWlan-rf",
 | 
					    "name": "TipWlan-rf",
 | 
				
			||||||
@@ -198,7 +198,7 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "profileType": "rf"
 | 
					        "profileType": "rf"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369933,
 | 
					    "createdTimestamp": 1612285248650,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778369933,
 | 
					    "lastModifiedTimestamp": 1612285248650,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": []
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,203 +1,75 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 5,
 | 
					    "id": 2,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "profileType": "ssid",
 | 
				
			||||||
		"name": "TipWlan-cloud-3-radios",
 | 
					    "name": "TipWlan-cloud-3-radios",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					        "model_type": "SsidConfiguration",
 | 
				
			||||||
			"ssid": "TipWlan-cloud-3-radios",
 | 
					        "ssid": "TipWlan-cloud-3-radios",
 | 
				
			||||||
			"appliedRadios": [
 | 
					        "appliedRadios": [
 | 
				
			||||||
				"is5GHzL",
 | 
					            "is5GHzU",
 | 
				
			||||||
				"is2dot4GHz",
 | 
					            "is2dot4GHz",
 | 
				
			||||||
				"is5GHzU"
 | 
					            "is5GHzL"
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					        "ssidAdminState": "enabled",
 | 
				
			||||||
			"secureMode": "wpa2OnlyPSK",
 | 
					        "secureMode": "wpa2OnlyPSK",
 | 
				
			||||||
			"vlanId": 1,
 | 
					        "vlanId": 1,
 | 
				
			||||||
			"keyStr": "openwifi",
 | 
					        "keyStr": "openwifi",
 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					        "broadcastSsid": "enabled",
 | 
				
			||||||
			"keyRefresh": 0,
 | 
					        "keyRefresh": 0,
 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					        "noLocalSubnets": false,
 | 
				
			||||||
			"radiusServiceName": null,
 | 
					        "radiusServiceId": 0,
 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					        "radiusAcountingServiceInterval": 60,
 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					        "captivePortalId": null,
 | 
				
			||||||
			"captivePortalId": null,
 | 
					        "bandwidthLimitDown": 0,
 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					        "bandwidthLimitUp": 0,
 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					        "clientBandwidthLimitDown": 0,
 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					        "clientBandwidthLimitUp": 0,
 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					        "videoTrafficOnly": false,
 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					        "radioBasedConfigs": {
 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					            "is5GHzU": {
 | 
				
			||||||
				"is5GHzL": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
				"is2dot4GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHz": {
 | 
				
			||||||
				"is5GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHzL": {
 | 
				
			||||||
				"is5GHzU": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            }
 | 
				
			||||||
				}
 | 
					        },
 | 
				
			||||||
			},
 | 
					        "bonjourGatewayProfileId": null,
 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					        "enable80211w": null,
 | 
				
			||||||
			"enable80211w": null,
 | 
					        "wepConfig": null,
 | 
				
			||||||
			"wepConfig": null,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
			"forwardMode": "BRIDGE",
 | 
					        "profileType": "ssid",
 | 
				
			||||||
			"profileType": "ssid"
 | 
					        "radiusClientConfiguration": {
 | 
				
			||||||
		},
 | 
					            "model_type": "RadiusNasConfiguration",
 | 
				
			||||||
		"createdTimestamp": 1606778369598,
 | 
					            "nasClientId": "DEFAULT",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369598,
 | 
					            "nasClientIp": "WAN_IP",
 | 
				
			||||||
		"childProfileIds": [
 | 
					            "userDefinedNasId": null,
 | 
				
			||||||
		]
 | 
					            "userDefinedNasIp": null,
 | 
				
			||||||
	},
 | 
					            "operatorId": null
 | 
				
			||||||
	{
 | 
					        }
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    },
 | 
				
			||||||
		"id": 15,
 | 
					    "createdTimestamp": 1612285248638,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "lastModifiedTimestamp": 1612285248638,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "childProfileIds": []
 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-access",
 | 
					}
 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-access",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is5GHzL",
 | 
					 | 
				
			||||||
				"is5GHzU"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "wpa2PSK",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": "testing123",
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369943,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370811,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			24
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 16,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "ssid",
 | 
					 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is2dot4GHz"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "open",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": null,
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369944,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370352,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			19,
 | 
					 | 
				
			||||||
			20
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,43 +1,42 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 18,
 | 
					    "id": 33,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_venue",
 | 
					    "profileType": "passpoint_venue",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Venue",
 | 
					    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointVenueProfile",
 | 
					        "model_type": "PasspointVenueProfile",
 | 
				
			||||||
			"venueNameSet": [
 | 
					        "venueNameSet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Exemple de lieu",
 | 
					                "dupleName": "Exemple de lieu",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-fra",
 | 
					                "venueUrl": "http://www.example.com/info-fra",
 | 
				
			||||||
					"asDuple": "fra:Exemple de lieu"
 | 
					                "asDuple": "fra:Exemple de lieu"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Example passpoint_venue",
 | 
					                "dupleName": "Example passpoint_venue",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-eng",
 | 
					                "venueUrl": "http://www.example.com/info-eng",
 | 
				
			||||||
					"asDuple": "eng:Example passpoint_venue"
 | 
					                "asDuple": "eng:Example passpoint_venue"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"venueTypeAssignment": {
 | 
					        "venueTypeAssignment": {
 | 
				
			||||||
				"model_type": "PasspointVenueTypeAssignment",
 | 
					            "model_type": "PasspointVenueTypeAssignment",
 | 
				
			||||||
				"venueDescription": "Research and Development Facility",
 | 
					            "venueDescription": "Research and Development Facility",
 | 
				
			||||||
				"venueGroupId": 2,
 | 
					            "venueGroupId": 2,
 | 
				
			||||||
				"venueTypeId": 8
 | 
					            "venueTypeId": 8
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"profileType": "passpoint_venue"
 | 
					        "profileType": "passpoint_venue"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778369950,
 | 
					    "createdTimestamp": 1611264538947,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369950,
 | 
					    "lastModifiedTimestamp": 1611264538947,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": []
 | 
				
			||||||
		]
 | 
					}
 | 
				
			||||||
	}
 | 
					]
 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -56,6 +56,8 @@ RESTAPI_PROPS+=" -Dserver.port=443"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SPRING_EXTRA_PROPS=" --add-opens java.base/java.lang=ALL-UNNAMED"
 | 
					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
 | 
					java $ALL_PROPS -jar app.jar
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-gateway-static-process</artifactId>
 | 
						<artifactId>opensync-gateway-static-process</artifactId>
 | 
				
			||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-ext-static</artifactId>
 | 
								<artifactId>opensync-ext-static</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,221 +1,472 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type": "Equipment",
 | 
					    "model_type": "Equipment",
 | 
				
			||||||
  "id": 51,
 | 
					    "id": 1,
 | 
				
			||||||
  "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "profileId": 12,
 | 
					    "profileId": 8,
 | 
				
			||||||
  "locationId": 8,
 | 
					    "locationId": 8,
 | 
				
			||||||
  "equipmentType": "AP",
 | 
					 | 
				
			||||||
  "inventoryId": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "name": "Test_Client_21P10C68818122",
 | 
					 | 
				
			||||||
  "details": {
 | 
					 | 
				
			||||||
    "model_type": "ApElementConfiguration",
 | 
					 | 
				
			||||||
    "equipmentModel": "EA8300-CA",
 | 
					 | 
				
			||||||
    "elementConfigVersion": "AP-V1",
 | 
					 | 
				
			||||||
    "equipmentType": "AP",
 | 
					    "equipmentType": "AP",
 | 
				
			||||||
    "deviceMode": "standaloneAP",
 | 
					    "inventoryId": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "gettingIP": "dhcp",
 | 
					    "name": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "staticIP": null,
 | 
					    "details": {
 | 
				
			||||||
    "staticIpMaskCidr": null,
 | 
					        "model_type": "ApElementConfiguration",
 | 
				
			||||||
    "staticIpGw": null,
 | 
					        "equipmentModel": "EA8300-CA",
 | 
				
			||||||
    "gettingDNS": "dhcp",
 | 
					        "elementConfigVersion": "AP-V1",
 | 
				
			||||||
    "staticDnsIp1": null,
 | 
					        "equipmentType": "AP",
 | 
				
			||||||
    "staticDnsIp2": null,
 | 
					        "deviceMode": "standaloneAP",
 | 
				
			||||||
    "peerInfoList": [],
 | 
					        "gettingIP": "dhcp",
 | 
				
			||||||
    "deviceName": "Default Device Name",
 | 
					        "staticIP": null,
 | 
				
			||||||
    "locationData": null,
 | 
					        "staticIpMaskCidr": null,
 | 
				
			||||||
    "locallyConfiguredMgmtVlan": 0,
 | 
					        "staticIpGw": null,
 | 
				
			||||||
    "locallyConfigured": false,
 | 
					        "gettingDNS": "dhcp",
 | 
				
			||||||
    "deploymentType": "CEILING",
 | 
					        "staticDnsIp1": null,
 | 
				
			||||||
    "syntheticClientEnabled": null,
 | 
					        "staticDnsIp2": null,
 | 
				
			||||||
    "frameReportThrottleEnabled": true,
 | 
					        "peerInfoList": [],
 | 
				
			||||||
    "antennaType": "OMNI",
 | 
					        "deviceName": "Open_AP_21P10C68818122",
 | 
				
			||||||
    "costSavingEventsEnabled": true,
 | 
					        "locationData": null,
 | 
				
			||||||
    "forwardMode": "BRIDGE",
 | 
					        "locallyConfiguredMgmtVlan": 0,
 | 
				
			||||||
    "radioMap": {
 | 
					        "locallyConfigured": false,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					        "deploymentType": "CEILING",
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					        "syntheticClientEnabled": null,
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "frameReportThrottleEnabled": true,
 | 
				
			||||||
        "channelNumber": 6,
 | 
					        "antennaType": "OMNI",
 | 
				
			||||||
        "manualChannelNumber": 6,
 | 
					        "costSavingEventsEnabled": true,
 | 
				
			||||||
        "backupChannelNumber": 11,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
        "bannedChannels": [],
 | 
					        "radioMap": {
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            "is5GHzU": {
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "model_type": "ElementRadioConfiguration",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
        "source": "auto",
 | 
					                "channelNumber": 149,
 | 
				
			||||||
          "value": -90
 | 
					                "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,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 11,
 | 
				
			||||||
 | 
					                "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": 1,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 2,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 3,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 4,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "model_type": "ChannelPowerLevel",
 | 
				
			||||||
 | 
					                        "channelNumber": 5,
 | 
				
			||||||
 | 
					                        "powerLevel": 18,
 | 
				
			||||||
 | 
					                        "dfs": false,
 | 
				
			||||||
 | 
					                        "channelWidth": 20
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        "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",
 | 
				
			||||||
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
 | 
					                "channelNumber": 36,
 | 
				
			||||||
 | 
					                "manualChannelNumber": 36,
 | 
				
			||||||
 | 
					                "backupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "manualBackupChannelNumber": 44,
 | 
				
			||||||
 | 
					                "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": 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
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					        "advancedRadioMap": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
        "source": "auto",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
          "value": -90
 | 
					                "radioType": "is2dot4GHz",
 | 
				
			||||||
        },
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
          "value": -90
 | 
					                "multicastRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "source": "profile",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "value": "auto"
 | 
				
			||||||
        	 "source": "auto",
 | 
					                },
 | 
				
			||||||
          "value": 32
 | 
					                "managementRate": {
 | 
				
			||||||
        },
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "source": "profile",
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "value": "auto"
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                },
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "activeChannel": 6
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
      },
 | 
					                    "source": "manual",
 | 
				
			||||||
      "is5GHzU": {
 | 
					                    "value": {
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "channelNumber": 149,
 | 
					                        "dropInSnrPercentage": 20,
 | 
				
			||||||
        "manualChannelNumber": 149,
 | 
					                        "minLoadFactor": 50
 | 
				
			||||||
        "backupChannelNumber": 154,
 | 
					                    }
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                },
 | 
				
			||||||
        "allowedChannels": [],
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        	 "source": "auto",
 | 
					            },
 | 
				
			||||||
          "value": -90
 | 
					            "is5GHzU": {
 | 
				
			||||||
        },
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "radioType": "is5GHzU",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
          "value": -90
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
        },
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                "multicastRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": -90
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                "managementRate": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                    "source": "profile",
 | 
				
			||||||
          "value": 32
 | 
					                    "value": "auto"
 | 
				
			||||||
        },
 | 
					                },
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                "bestApSettings": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                    "source": "manual",
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                    "value": {
 | 
				
			||||||
        "activeChannel": 149
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
      },
 | 
					                        "mlComputed": true,
 | 
				
			||||||
      "is5GHzL": {
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "model_type": "ElementRadioConfiguration",
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					                    }
 | 
				
			||||||
        "channelNumber": 36,
 | 
					                },
 | 
				
			||||||
        "manualChannelNumber": 36,
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
        "backupChannelNumber": 44,
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
        "bannedChannels": [],
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
        "allowedChannels": [],
 | 
					            },
 | 
				
			||||||
        "rxCellSizeDb": {
 | 
					            "is5GHzL": {
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "model_type": "RadioConfiguration",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "radioType": "is5GHzL",
 | 
				
			||||||
          "value": -90
 | 
					                "radioAdminState": "enabled",
 | 
				
			||||||
        },
 | 
					                "fragmentationThresholdBytes": 2346,
 | 
				
			||||||
        "probeResponseThresholdDb": {
 | 
					                "uapsdState": "enabled",
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                "stationIsolation": "disabled",
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "multicastRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionMulticast",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "clientDisconnectThresholdDb": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "managementRate": {
 | 
				
			||||||
          "value": -90
 | 
					                    "model_type": "SourceSelectionManagement",
 | 
				
			||||||
        },
 | 
					                    "source": "profile",
 | 
				
			||||||
        "eirpTxPower": {
 | 
					                    "value": "auto"
 | 
				
			||||||
          "model_type": "SourceSelectionValue",
 | 
					                },
 | 
				
			||||||
        	 "source": "auto",
 | 
					                "bestApSettings": {
 | 
				
			||||||
          "value": 32
 | 
					                    "model_type": "SourceSelectionSteering",
 | 
				
			||||||
        },
 | 
					                    "source": "manual",
 | 
				
			||||||
        "perimeterDetectionEnabled": true,
 | 
					                    "value": {
 | 
				
			||||||
        "bestAPSteerType": "both",
 | 
					                        "model_type": "RadioBestApSettings",
 | 
				
			||||||
        "deauthAttackDetection": null,
 | 
					                        "mlComputed": true,
 | 
				
			||||||
        "allowedChannelsPowerLevels": [],
 | 
					                        "dropInSnrPercentage": 30,
 | 
				
			||||||
        "activeChannel": 36
 | 
					                        "minLoadFactor": 40
 | 
				
			||||||
      }
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "legacyBSSRate": "enabled",
 | 
				
			||||||
 | 
					                "dtimPeriod": 2,
 | 
				
			||||||
 | 
					                "deauthAttackDetection": null
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "advancedRadioMap": {
 | 
					    "latitude": null,
 | 
				
			||||||
      "is2dot4GHz": {
 | 
					    "longitude": null,
 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					    "baseMacAddress": {
 | 
				
			||||||
        "radioType": "is2dot4GHz",
 | 
					        "model_type": "MacAddress",
 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					        "address": "JPWi7y5T",
 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					        "addressAsString": "24:f5:a2:ef:2e:53"
 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					    },
 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					    "serial": "21P10C68818122",
 | 
				
			||||||
        "managementRate": {
 | 
					    "createdTimestamp": 1612285288821,
 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					    "lastModifiedTimestamp": 1612285293922
 | 
				
			||||||
          "source": "auto",
 | 
					}
 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzU": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzU",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "is5GHzL": {
 | 
					 | 
				
			||||||
        "model_type": "RadioConfiguration",
 | 
					 | 
				
			||||||
        "radioType": "is5GHzL",
 | 
					 | 
				
			||||||
        "radioAdminState": "enabled",
 | 
					 | 
				
			||||||
        "fragmentationThresholdBytes": 2346,
 | 
					 | 
				
			||||||
        "uapsdState": "enabled",
 | 
					 | 
				
			||||||
        "stationIsolation": "disabled",
 | 
					 | 
				
			||||||
        "managementRate": {
 | 
					 | 
				
			||||||
          "model_type": "SourceSelectionManagement",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": "auto"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "bestApSettings": {
 | 
					 | 
				
			||||||
        "model_type": "SourceSelectionSteering",
 | 
					 | 
				
			||||||
          "source": "auto",
 | 
					 | 
				
			||||||
          "value": {
 | 
					 | 
				
			||||||
	          "model_type": "RadioBestApSettings",
 | 
					 | 
				
			||||||
	          "mlComputed": true,
 | 
					 | 
				
			||||||
	          "dropInSnrPercentage": 30,
 | 
					 | 
				
			||||||
	          "minLoadFactor": 40
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "legacyBSSRate": "enabled",
 | 
					 | 
				
			||||||
        "deauthAttackDetection": null
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "latitude": null,
 | 
					 | 
				
			||||||
  "longitude": null,
 | 
					 | 
				
			||||||
  "serial": "21P10C68818122",
 | 
					 | 
				
			||||||
  "createdTimestamp": 1591653239821,
 | 
					 | 
				
			||||||
  "lastModifiedTimestamp": 1591653241398
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,60 +1,61 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "model_type" : "Location",
 | 
					    "model_type": "Location",
 | 
				
			||||||
  "id" : 8,
 | 
					    "id": 8,
 | 
				
			||||||
  "parentId" : 0,
 | 
					    "parentId": 0,
 | 
				
			||||||
  "locationType" : "SITE",
 | 
					    "locationType": "SITE",
 | 
				
			||||||
  "customerId" : 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
  "name" : "Ottawa",
 | 
					    "name": "Ottawa",
 | 
				
			||||||
  "details" : {
 | 
					    "details": {
 | 
				
			||||||
    "model_type" : "LocationDetails",
 | 
					        "model_type": "LocationDetails",
 | 
				
			||||||
    "countryCode" : "ca",
 | 
					        "countryCode": "CA",
 | 
				
			||||||
    "maintenanceWindow" : null,
 | 
					        "dailyActivityDetails": {
 | 
				
			||||||
    "rrmEnabled" : true,
 | 
					            "SUNDAY": {
 | 
				
			||||||
    "dailyActivityDetails" : {
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SUNDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "MONDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "MONDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "TUESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "TUESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "WEDNESDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "WEDNESDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "THURSDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "THURSDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "FRIDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "FRIDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            },
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					            "SATURDAY": {
 | 
				
			||||||
      },
 | 
					                "model_type": "LocationActivityDetails",
 | 
				
			||||||
      "SATURDAY" : {
 | 
					                "busyTime": "13:30",
 | 
				
			||||||
        "model_type" : "LocationActivityDetails",
 | 
					                "quietTime": "3:00",
 | 
				
			||||||
        "busyTime" : "13:30",
 | 
					                "timezone": "US/Eastern"
 | 
				
			||||||
        "quietTime" : "3:30",
 | 
					            }
 | 
				
			||||||
        "timezone" : "US/Eastern"
 | 
					        },
 | 
				
			||||||
      }
 | 
					        "maintenanceWindow": null,
 | 
				
			||||||
    }
 | 
					        "rrmEnabled": true,
 | 
				
			||||||
  },
 | 
					        "timezone": "US/Eastern"
 | 
				
			||||||
  "createdTimestamp" : 1590607043540,
 | 
					    },
 | 
				
			||||||
  "lastModifiedTimestamp" : 1590607043540
 | 
					    "createdTimestamp": 1612285243534,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1612285243534
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 12,
 | 
					    "id": 8,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "equipment_ap",
 | 
					    "profileType": "equipment_ap",
 | 
				
			||||||
    "name": "ApProfile-3-radios",
 | 
					    "name": "ApProfile-3-radios",
 | 
				
			||||||
@@ -20,11 +20,6 @@
 | 
				
			|||||||
        "syntheticClientEnabled": true,
 | 
					        "syntheticClientEnabled": true,
 | 
				
			||||||
        "ledControlEnabled": true,
 | 
					        "ledControlEnabled": true,
 | 
				
			||||||
        "equipmentDiscovery": false,
 | 
					        "equipmentDiscovery": false,
 | 
				
			||||||
        "greTunnelName": null,
 | 
					 | 
				
			||||||
        "greParentIfName": null,
 | 
					 | 
				
			||||||
        "greLocalInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteInetAddr": null,
 | 
					 | 
				
			||||||
        "greRemoteMacAddr": null,
 | 
					 | 
				
			||||||
        "radioMap": {
 | 
					        "radioMap": {
 | 
				
			||||||
            "is2dot4GHz": {
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
                "model_type": "RadioProfileConfiguration",
 | 
					                "model_type": "RadioProfileConfiguration",
 | 
				
			||||||
@@ -42,15 +37,22 @@
 | 
				
			|||||||
                "bestAPSteerType": "both"
 | 
					                "bestAPSteerType": "both"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        "greTunnelConfigurations": [
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                "model_type": "GreTunnelConfiguration",
 | 
				
			||||||
 | 
					                "greTunnelName": "gre1",
 | 
				
			||||||
 | 
					                "greRemoteInetAddr": "192.168.1.101",
 | 
				
			||||||
 | 
					                "vlanIdsInGreTunnel": [
 | 
				
			||||||
 | 
					                    100
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
        "profileType": "equipment_ap"
 | 
					        "profileType": "equipment_ap"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369934,
 | 
					    "createdTimestamp": 1612285248925,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778443413,
 | 
					    "lastModifiedTimestamp": 1612285628377,
 | 
				
			||||||
    "childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
        16,
 | 
					        2,
 | 
				
			||||||
        5,
 | 
					        4
 | 
				
			||||||
        10,
 | 
					 | 
				
			||||||
        11,
 | 
					 | 
				
			||||||
        15
 | 
					 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,135 +1,58 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
{
 | 
					  {
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 14,
 | 
					    "id": 5,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "captive_portal",
 | 
					    "profileType": "captive_portal",
 | 
				
			||||||
    "name": "Captive-portal",
 | 
					    "name": "Captive-portal",
 | 
				
			||||||
    "details": {
 | 
					    "details": {
 | 
				
			||||||
        "model_type": "CaptivePortalConfiguration",
 | 
					      "model_type": "CaptivePortalConfiguration",
 | 
				
			||||||
        "name": "Captive-portal",
 | 
					      "name": "Default",
 | 
				
			||||||
        "browserTitle": "Access the network as Guest",
 | 
					      "browserTitle": "Captive-portal",
 | 
				
			||||||
        "headerContent": "Captive Portal",
 | 
					      "headerContent": "Captive Portal",
 | 
				
			||||||
        "userAcceptancePolicy": "Use this network at your own risk. No warranty of any kind.",
 | 
					      "userAcceptancePolicy": "Please agree to the following terms for using this network:",
 | 
				
			||||||
        "successPageMarkdownText": "Welcome to the network",
 | 
					      "successPageMarkdownText": "You are now authorized and connected to the network.",
 | 
				
			||||||
        "redirectURL": "",
 | 
					      "redirectURL": "https://www.google.com",
 | 
				
			||||||
        "externalCaptivePortalURL": null,
 | 
					      "externalCaptivePortalURL": null,
 | 
				
			||||||
        "sessionTimeoutInMinutes": 60,
 | 
					      "sessionTimeoutInMinutes": 10,
 | 
				
			||||||
        "logoFile": null,
 | 
					      "logoFile": {
 | 
				
			||||||
        "backgroundFile": null,
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        "walledGardenAllowlist": [],
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "usernamePasswordFile": {
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
            "model_type": "ManagedFileInfo",
 | 
					        "apExportUrl": "/filestore/tip-logo-mobile",
 | 
				
			||||||
            "md5checksum": null,
 | 
					        "fileCategory": "CaptivePortalLogo",
 | 
				
			||||||
            "lastModifiedTimestamp": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
            "apExportUrl": "userList",
 | 
					        "altSlot": false
 | 
				
			||||||
            "fileCategory": "UsernamePasswordList",
 | 
					      },
 | 
				
			||||||
            "fileType": "TEXT",
 | 
					      "backgroundFile": {
 | 
				
			||||||
            "altSlot": true
 | 
					        "model_type": "ManagedFileInfo",
 | 
				
			||||||
        },
 | 
					        "md5checksum": null,
 | 
				
			||||||
        "authenticationType": "guest",
 | 
					        "lastModifiedTimestamp": null,
 | 
				
			||||||
        "radiusAuthMethod": "CHAP",
 | 
					        "apExportUrl": "/filestore/tip-logo",
 | 
				
			||||||
        "maxUsersWithSameCredentials": 42,
 | 
					        "fileCategory": "CaptivePortalBackground",
 | 
				
			||||||
        "externalPolicyFile": null,
 | 
					        "fileType": "PNG",
 | 
				
			||||||
        "backgroundPosition": "left_top",
 | 
					        "altSlot": false
 | 
				
			||||||
        "backgroundRepeat": "no_repeat",
 | 
					      },
 | 
				
			||||||
        "radiusServiceName": null,
 | 
					      "walledGardenAllowlist": [
 | 
				
			||||||
        "expiryType": "unlimited",
 | 
					      ],
 | 
				
			||||||
        "userList": [
 | 
					      "usernamePasswordFile": null,
 | 
				
			||||||
            {
 | 
					      "authenticationType": "guest",
 | 
				
			||||||
                "model_type": "TimedAccessUserRecord",
 | 
					      "radiusAuthMethod": "CHAP",
 | 
				
			||||||
                "username": "customer",
 | 
					      "maxUsersWithSameCredentials": 3,
 | 
				
			||||||
                "password": "testing123",
 | 
					      "externalPolicyFile": null,
 | 
				
			||||||
                "activationTime": 1602183994956,
 | 
					      "backgroundPosition": "left_top",
 | 
				
			||||||
                "expirationTime": 1602212794956,
 | 
					      "backgroundRepeat": "no_repeat",
 | 
				
			||||||
                "numDevices": 1,
 | 
					      "radiusServiceId": 0,
 | 
				
			||||||
                "userDetails": {
 | 
					      "expiryType": "time_limited",
 | 
				
			||||||
                    "model_type": "TimedAccessUserDetails",
 | 
					      "userList": [
 | 
				
			||||||
                    "firstName": "Pac",
 | 
					      ],
 | 
				
			||||||
                    "lastName": "Man",
 | 
					      "macAllowList": [
 | 
				
			||||||
                    "passwordNeedsReset": false
 | 
					      ],
 | 
				
			||||||
                },
 | 
					      "profileType": "captive_portal"
 | 
				
			||||||
                "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"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
                "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,
 | 
					    "createdTimestamp": 1611857459118,
 | 
				
			||||||
    "lastModifiedTimestamp": 1602183994959,
 | 
					    "lastModifiedTimestamp": 1611857459118,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": [
 | 
				
			||||||
}
 | 
					    ]
 | 
				
			||||||
]
 | 
					  }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,71 +1,71 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 24,
 | 
					    "id": 37,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint",
 | 
					    "profileType": "passpoint",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Config",
 | 
					    "name": "hotspot20-profile-2021-01-21T21:28:59.171Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointProfile",
 | 
					        "model_type": "PasspointProfile",
 | 
				
			||||||
			"enableInterworkingAndHs20": true,
 | 
					        "enableInterworkingAndHs20": true,
 | 
				
			||||||
			"hessid": null,
 | 
					        "hessid": null,
 | 
				
			||||||
			"passpointAccessNetworkType": "free_public_network",
 | 
					        "passpointAccessNetworkType": "free_public_network",
 | 
				
			||||||
			"passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"additionalStepsRequiredForAccess": 0,
 | 
					        "additionalStepsRequiredForAccess": 0,
 | 
				
			||||||
			"deauthRequestTimeout": 0,
 | 
					        "deauthRequestTimeout": 0,
 | 
				
			||||||
			"operatingClass": 0,
 | 
					        "operatingClass": 0,
 | 
				
			||||||
			"termsAndConditionsFile": {
 | 
					        "termsAndConditionsFile": {
 | 
				
			||||||
				"model_type": "ManagedFileInfo",
 | 
					            "model_type": "ManagedFileInfo",
 | 
				
			||||||
				"md5checksum": null,
 | 
					            "md5checksum": null,
 | 
				
			||||||
				"lastModifiedTimestamp": null,
 | 
					            "lastModifiedTimestamp": null,
 | 
				
			||||||
				"apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
					            "apExportUrl": "https://localhost:9091/filestore/termsAndConditions",
 | 
				
			||||||
				"fileCategory": "ExternalPolicyConfiguration",
 | 
					            "fileCategory": "ExternalPolicyConfiguration",
 | 
				
			||||||
				"fileType": "TEXT",
 | 
					            "fileType": "TEXT",
 | 
				
			||||||
				"altSlot": false
 | 
					            "altSlot": false
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"whitelistDomain": null,
 | 
					        "whitelistDomain": null,
 | 
				
			||||||
			"emergencyServicesReachable": true,
 | 
					        "emergencyServicesReachable": true,
 | 
				
			||||||
			"unauthenticatedEmergencyServiceAccessible": false,
 | 
					        "unauthenticatedEmergencyServiceAccessible": false,
 | 
				
			||||||
			"internetConnectivity": true,
 | 
					        "internetConnectivity": true,
 | 
				
			||||||
			"connectionCapabilitySet": [
 | 
					        "connectionCapabilitySet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointConnectionCapability",
 | 
					                "model_type": "PasspointConnectionCapability",
 | 
				
			||||||
					"connectionCapabilitiesPortNumber": 8888,
 | 
					                "connectionCapabilitiesPortNumber": 8888,
 | 
				
			||||||
					"connectionCapabilitiesStatus": "open",
 | 
					                "connectionCapabilitiesIpProtocol": "TCP",
 | 
				
			||||||
					"connectionCapabilitiesIpProtocol": "TCP"
 | 
					                "connectionCapabilitiesStatus": "open"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
					        "ipAddressTypeAvailability": "public_IPv4_address_available",
 | 
				
			||||||
			"qosMapSetConfiguration": null,
 | 
					        "qosMapSetConfiguration": null,
 | 
				
			||||||
			"apGeospatialLocation": null,
 | 
					        "apGeospatialLocation": null,
 | 
				
			||||||
			"apCivicLocation": null,
 | 
					        "apCivicLocation": null,
 | 
				
			||||||
			"apPublicLocationIdUri": null,
 | 
					        "apPublicLocationIdUri": null,
 | 
				
			||||||
			"gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
					        "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest",
 | 
				
			||||||
			"anqpDomainId": 1234,
 | 
					        "anqpDomainId": 1234,
 | 
				
			||||||
			"disableDownstreamGroupAddressedForwarding": false,
 | 
					        "disableDownstreamGroupAddressedForwarding": false,
 | 
				
			||||||
			"enable2pt4GHz": true,
 | 
					        "enable2pt4GHz": true,
 | 
				
			||||||
			"enable5GHz": true,
 | 
					        "enable5GHz": true,
 | 
				
			||||||
			"associatedAccessSsidProfileIds": [
 | 
					        "associatedAccessSsidProfileIds": [
 | 
				
			||||||
				15
 | 
					            32
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"osuSsidProfileId": 16,
 | 
					        "osuSsidProfileId": 31,
 | 
				
			||||||
			"passpointOperatorProfileId": 17,
 | 
					        "passpointOperatorProfileId": 34,
 | 
				
			||||||
			"passpointVenueProfileId": 18,
 | 
					        "passpointVenueProfileId": 33,
 | 
				
			||||||
			"passpointOsuProviderProfileIds": [
 | 
					        "passpointOsuProviderProfileIds": [
 | 
				
			||||||
				19,
 | 
					            35,
 | 
				
			||||||
				20
 | 
					            36
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"accessNetworkType": "free_public_network",
 | 
					        "accessNetworkType": "free_public_network",
 | 
				
			||||||
			"networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
					        "networkAuthenticationType": "acceptance_of_terms_and_conditions",
 | 
				
			||||||
			"profileType": "passpoint"
 | 
					        "profileType": "passpoint"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778370807,
 | 
					    "createdTimestamp": 0,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370807,
 | 
					    "lastModifiedTimestamp": 1611264539331,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": [
 | 
				
			||||||
			17,
 | 
					        33,
 | 
				
			||||||
			18,
 | 
					        34,
 | 
				
			||||||
			19,
 | 
					        35,
 | 
				
			||||||
			20
 | 
					        36
 | 
				
			||||||
		]
 | 
					    ]
 | 
				
			||||||
	}
 | 
					}
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,270 +1,263 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		"id": 19,
 | 
					        "id": 35,
 | 
				
			||||||
		"customerId": 2,
 | 
					        "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider",
 | 
					        "name": "provider1-profile-2021-01-21T21:28:59.057Z",
 | 
				
			||||||
		"details": {
 | 
					        "details": {
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
			"domainName": "rogers.com",
 | 
					            "mccMncList": [
 | 
				
			||||||
			"mccMncList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "mcc": 302,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "mnc": 720,
 | 
				
			||||||
					"mnc": 720,
 | 
					                    "iso": "ca",
 | 
				
			||||||
					"iso": "ca",
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"country": "Canada",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"countryCode": 1,
 | 
					                    "network": "Rogers AT&T Wireless",
 | 
				
			||||||
					"network": "Rogers AT&T Wireless",
 | 
					                    "mccMncPairing": "302,720"
 | 
				
			||||||
					"mccMncPairing": "302,720"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "naiRealmList": [
 | 
				
			||||||
			"naiRealmList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "naiRealms": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "rogers.com"
 | 
				
			||||||
						"rogers.com"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                    ],
 | 
				
			||||||
					],
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
							"Credential Type:username/password",
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
							"Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
					                        ],
 | 
				
			||||||
						],
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TLS with certificate": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"Credential Type:Certificate"
 | 
					                        ]
 | 
				
			||||||
						]
 | 
					                    }
 | 
				
			||||||
					}
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuIconList": [
 | 
				
			||||||
			"osuIconList": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServerUri": "https://example.com/osu/rogers",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/rogers",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example provider rogers",
 | 
				
			||||||
					"dupleName": "Example provider rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example provider rogers"
 | 
				
			||||||
					"asDuple": "eng:Example provider rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemple de fournisseur rogers",
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemple de fournisseur rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuNaiStandalone": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@rogers.com",
 | 
					            "osuNaiShared": "anonymous@rogers.com",
 | 
				
			||||||
			"osuNaiShared": "anonymous@rogers.com",
 | 
					            "osuMethodList": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                1,
 | 
				
			||||||
				1,
 | 
					                0
 | 
				
			||||||
				0
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "eng",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                    "dupleName": "Example services rogers",
 | 
				
			||||||
					"dupleName": "Example services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "eng:Example services rogers"
 | 
				
			||||||
					"asDuple": "eng:Example services rogers"
 | 
					                },
 | 
				
			||||||
				},
 | 
					                {
 | 
				
			||||||
				{
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                    "dupleName": "Exemples de services rogers",
 | 
				
			||||||
					"dupleName": "Exemples de services rogers",
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "asDuple": "fra:Exemples de services rogers"
 | 
				
			||||||
					"asDuple": "fra:Exemples de services rogers"
 | 
					                }
 | 
				
			||||||
				}
 | 
					            ],
 | 
				
			||||||
			],
 | 
					            "roamingOi": [
 | 
				
			||||||
			"roamingOi": [
 | 
					                "BAA2D00100",
 | 
				
			||||||
				1,
 | 
					                "BAA2D00000"
 | 
				
			||||||
				2,
 | 
					            ],
 | 
				
			||||||
				3,
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				4
 | 
					        },
 | 
				
			||||||
			],
 | 
					        "createdTimestamp": 1611264539070,
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					        "lastModifiedTimestamp": 1611264539070,
 | 
				
			||||||
		},
 | 
					        "childProfileIds": []
 | 
				
			||||||
		"createdTimestamp": 1606778370345,
 | 
					    },
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370345,
 | 
					    {
 | 
				
			||||||
		"childProfileIds": [
 | 
					        "model_type": "Profile",
 | 
				
			||||||
		]
 | 
					        "id": 36,
 | 
				
			||||||
	},
 | 
					        "customerId": 2,
 | 
				
			||||||
	{
 | 
					        "profileType": "passpoint_osu_id_provider",
 | 
				
			||||||
		"model_type": "Profile",
 | 
					        "name": "provider2-profile-2021-01-21T21:28:59.118Z",
 | 
				
			||||||
		"id": 20,
 | 
					        "details": {
 | 
				
			||||||
		"customerId": 2,
 | 
					            "model_type": "PasspointOsuProviderProfile",
 | 
				
			||||||
		"profileType": "passpoint_osu_id_provider",
 | 
					            "mccMncList": [
 | 
				
			||||||
		"name": "TipWlan-Passpoint-OSU-Provider-2",
 | 
					                {
 | 
				
			||||||
		"details": {
 | 
					                    "model_type": "PasspointMccMnc",
 | 
				
			||||||
			"model_type": "PasspointOsuProviderProfile",
 | 
					                    "mcc": 302,
 | 
				
			||||||
			"domainName": "telus.com",
 | 
					                    "mnc": 220,
 | 
				
			||||||
			"mccMncList": [
 | 
					                    "iso": "ca",
 | 
				
			||||||
				{
 | 
					                    "country": "Canada",
 | 
				
			||||||
					"model_type": "PasspointMccMnc",
 | 
					                    "countryCode": 1,
 | 
				
			||||||
					"mcc": 302,
 | 
					                    "network": "Telus Mobility",
 | 
				
			||||||
					"mnc": 220,
 | 
					                    "mccMncPairing": "302,220"
 | 
				
			||||||
					"iso": "ca",
 | 
					                }
 | 
				
			||||||
					"country": "Canada",
 | 
					            ],
 | 
				
			||||||
					"countryCode": 1,
 | 
					            "naiRealmList": [
 | 
				
			||||||
					"network": "Telus Mobility",
 | 
					                {
 | 
				
			||||||
					"mccMncPairing": "302,220"
 | 
					                    "model_type": "PasspointNaiRealmInformation",
 | 
				
			||||||
				}
 | 
					                    "naiRealms": [
 | 
				
			||||||
			],
 | 
					                        "telus.com"
 | 
				
			||||||
			"naiRealmList": [
 | 
					                    ],
 | 
				
			||||||
				{
 | 
					                    "encoding": 0,
 | 
				
			||||||
					"model_type": "PasspointNaiRealmInformation",
 | 
					                    "eapMethods": [
 | 
				
			||||||
					"naiRealms": [
 | 
					                        "EAP-TTLS with username/password",
 | 
				
			||||||
						"telus.com"
 | 
					                        "EAP-TLS with certificate"
 | 
				
			||||||
					],
 | 
					                    ],
 | 
				
			||||||
					"encoding": 0,
 | 
					                    "eapMap": {
 | 
				
			||||||
					"eapMethods": [
 | 
					                        "EAP-TTLS with username/password": [
 | 
				
			||||||
						"EAP-TTLS with username/password",
 | 
					                            "Credential Type:username/password",
 | 
				
			||||||
						"EAP-TLS with certificate"
 | 
					                            "Non-EAP Inner Authentication Type:MSCHAPV2"
 | 
				
			||||||
					],
 | 
					                        ],
 | 
				
			||||||
					"eapMap": {
 | 
					                        "EAP-TLS with certificate": [
 | 
				
			||||||
						"EAP-TTLS with username/password": [
 | 
					                            "Credential Type:Certificate"
 | 
				
			||||||
							"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,
 | 
				
			||||||
			"osuIconList": [
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32eng",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32eng.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32eng.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
				
			||||||
					"iconLocale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32eng",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32eng.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32eng.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "fra",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "fr_CA",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32fra",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32fra.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32fra.png",
 | 
				
			||||||
					"languageCode": "fra",
 | 
					                    "hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
				
			||||||
					"iconLocale": "fr_CA",
 | 
					                },
 | 
				
			||||||
					"iconName": "icon32fra",
 | 
					                {
 | 
				
			||||||
					"filePath": "/tmp/icon32fra.png",
 | 
					                    "model_type": "PasspointOsuIcon",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32fra.png",
 | 
					                    "iconWidth": 32,
 | 
				
			||||||
					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png"
 | 
					                    "iconHeight": 32,
 | 
				
			||||||
				},
 | 
					                    "languageCode": "eng",
 | 
				
			||||||
				{
 | 
					                    "iconLocale": "en_US",
 | 
				
			||||||
					"model_type": "PasspointOsuIcon",
 | 
					                    "iconName": "icon32usa",
 | 
				
			||||||
					"iconWidth": 32,
 | 
					                    "filePath": "/tmp/icon32usa.png",
 | 
				
			||||||
					"iconHeight": 32,
 | 
					                    "imageUrl": "https://localhost:9096/icon32usa.png",
 | 
				
			||||||
					"languageCode": "eng",
 | 
					                    "hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
				
			||||||
					"iconLocale": "en_US",
 | 
					                }
 | 
				
			||||||
					"iconName": "icon32usa",
 | 
					            ],
 | 
				
			||||||
					"filePath": "/tmp/icon32usa.png",
 | 
					            "osuServerUri": "https://example.com/osu/telus",
 | 
				
			||||||
					"imageUrl": "https://localhost:9096/icon32usa.png",
 | 
					            "osuFriendlyName": [
 | 
				
			||||||
					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png"
 | 
					                {
 | 
				
			||||||
				}
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
			],
 | 
					                    "locale": "eng",
 | 
				
			||||||
			"osuServerUri": "https://example.com/osu/telus",
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuFriendlyName": [
 | 
					                    "dupleName": "Example provider telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example provider telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example provider telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example provider telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemple de fournisseur telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemple de fournisseur telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemple de fournisseur telus",
 | 
					            "osuNaiStandalone": "anonymous@telus.com",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					            "osuNaiShared": "anonymous@telus.com",
 | 
				
			||||||
					"asDuple": "fra:Exemple de fournisseur telus"
 | 
					            "osuMethodList": [
 | 
				
			||||||
				}
 | 
					                1,
 | 
				
			||||||
			],
 | 
					                0
 | 
				
			||||||
			"osuNaiStandalone": "anonymous@telus.com",
 | 
					            ],
 | 
				
			||||||
			"osuNaiShared": "anonymous@telus.com",
 | 
					            "osuServiceDescription": [
 | 
				
			||||||
			"osuMethodList": [
 | 
					                {
 | 
				
			||||||
				1,
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
				0
 | 
					                    "locale": "eng",
 | 
				
			||||||
			],
 | 
					                    "dupleIso3Language": "eng",
 | 
				
			||||||
			"osuServiceDescription": [
 | 
					                    "dupleName": "Example services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "eng:Example services telus"
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                },
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                {
 | 
				
			||||||
					"dupleName": "Example services telus",
 | 
					                    "model_type": "PasspointDuple",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                    "locale": "fra",
 | 
				
			||||||
					"asDuple": "eng:Example services telus"
 | 
					                    "dupleIso3Language": "fra",
 | 
				
			||||||
				},
 | 
					                    "dupleName": "Exemples de services telus",
 | 
				
			||||||
				{
 | 
					                    "defaultDupleSeparator": ":",
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                    "asDuple": "fra:Exemples de services telus"
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                }
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					            ],
 | 
				
			||||||
					"dupleName": "Exemples de services telus",
 | 
					            "roamingOi": [
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "004096",
 | 
				
			||||||
					"asDuple": "fra:Exemples de services telus"
 | 
					                "005014",
 | 
				
			||||||
				}
 | 
					                "F4F5E8F5F4"
 | 
				
			||||||
			],
 | 
					            ],
 | 
				
			||||||
			"roamingOi": [
 | 
					            "profileType": "passpoint_osu_id_provider"
 | 
				
			||||||
				1,
 | 
					        },
 | 
				
			||||||
				2,
 | 
					        "createdTimestamp": 1611264539131,
 | 
				
			||||||
				3,
 | 
					        "lastModifiedTimestamp": 1611264539131,
 | 
				
			||||||
				4
 | 
					        "childProfileIds": []
 | 
				
			||||||
			],
 | 
					    }
 | 
				
			||||||
			"profileType": "passpoint_osu_id_provider"
 | 
					]
 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370351,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,37 +1,41 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 17,
 | 
					    "id": 34,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_operator",
 | 
					    "profileType": "passpoint_operator",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Operator",
 | 
					    "name": "operator-profile-2021-01-21T21:28:58.994Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointOperatorProfile",
 | 
					        "model_type": "PasspointOperatorProfile",
 | 
				
			||||||
			"serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
					        "serverOnlyAuthenticatedL2EncryptionNetwork": false,
 | 
				
			||||||
			"x509CertificateLocation": "/etc/ca.pem",
 | 
					        "x509CertificateLocation": "/etc/ca.pem",
 | 
				
			||||||
			"operatorFriendlyName": [
 | 
					        "operatorFriendlyName": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Default friendly passpoint_operator name",
 | 
					                "dupleName": "Nom de l'opérateur convivial par défaut",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "eng:Default friendly passpoint_operator name"
 | 
					                "asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointDuple",
 | 
					                "model_type": "PasspointDuple",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Nom de l'opérateur convivial par défaut",
 | 
					                "dupleName": "Default friendly passpoint_operator name",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"asDuple": "fra:Nom de l'opérateur convivial par défaut"
 | 
					                "asDuple": "eng:Default friendly passpoint_operator name"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"profileType": "passpoint_operator"
 | 
					        "domainNameList": [
 | 
				
			||||||
		},
 | 
					            "bell.ca",
 | 
				
			||||||
		"createdTimestamp": 1606778369945,
 | 
					            "telus.com",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369945,
 | 
					            "rogers.com"
 | 
				
			||||||
		"childProfileIds": [
 | 
					        ],
 | 
				
			||||||
		]
 | 
					        "profileType": "passpoint_operator"
 | 
				
			||||||
	}
 | 
					    },
 | 
				
			||||||
]
 | 
					    "createdTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "lastModifiedTimestamp": 1611264539004,
 | 
				
			||||||
 | 
					    "childProfileIds": []
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
@@ -1,34 +1,24 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
        {
 | 
					  {
 | 
				
			||||||
            "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
            "id": 1,
 | 
					    "id": 1,
 | 
				
			||||||
            "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
            "profileType": "radius",
 | 
					    "profileType": "radius",
 | 
				
			||||||
            "name": "Radius-Profile",
 | 
					    "name": "Radius-Profile",
 | 
				
			||||||
            "details": {
 | 
					    "details": {
 | 
				
			||||||
                "model_type": "RadiusProfile",
 | 
					      "model_type": "RadiusProfile",
 | 
				
			||||||
                "subnetConfiguration": null,
 | 
					      "primaryRadiusAuthServer": {
 | 
				
			||||||
                "serviceRegionMap": {
 | 
					        "model_type": "RadiusServer",
 | 
				
			||||||
                    "Ottawa": {
 | 
					        "ipAddress": "192.168.0.1",
 | 
				
			||||||
                        "model_type": "RadiusServiceRegion",
 | 
					        "secret": "testing123",
 | 
				
			||||||
                        "serverMap": {
 | 
					        "port": 1812,
 | 
				
			||||||
                            "Radius-Profile": [
 | 
					        "timeout": null
 | 
				
			||||||
                                {
 | 
					      },
 | 
				
			||||||
                                    "model_type": "RadiusServer",
 | 
					      "profileType": "radius"
 | 
				
			||||||
                                    "ipAddress": "192.168.0.1",
 | 
					    },
 | 
				
			||||||
                                    "secret": "testing123",
 | 
					    "createdTimestamp": 1611262628767,
 | 
				
			||||||
                                    "authPort": 1812,
 | 
					    "lastModifiedTimestamp": 1611262628767,
 | 
				
			||||||
                                    "timeout": null
 | 
					    "childProfileIds": [
 | 
				
			||||||
                                }
 | 
					    ]
 | 
				
			||||||
                            ]
 | 
					  }
 | 
				
			||||||
                        },
 | 
					]
 | 
				
			||||||
                        "regionName": "Ottawa"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "profileType": "radius"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "createdTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "lastModifiedTimestamp": 1601961451668,
 | 
					 | 
				
			||||||
            "childProfileIds": []
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
    "id": 11,
 | 
					    "id": 4,
 | 
				
			||||||
    "customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
    "profileType": "rf",
 | 
					    "profileType": "rf",
 | 
				
			||||||
    "name": "TipWlan-rf",
 | 
					    "name": "TipWlan-rf",
 | 
				
			||||||
@@ -198,7 +198,7 @@
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "profileType": "rf"
 | 
					        "profileType": "rf"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "createdTimestamp": 1606778369933,
 | 
					    "createdTimestamp": 1612285248650,
 | 
				
			||||||
    "lastModifiedTimestamp": 1606778369933,
 | 
					    "lastModifiedTimestamp": 1612285248650,
 | 
				
			||||||
    "childProfileIds": []
 | 
					    "childProfileIds": []
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,203 +1,75 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 5,
 | 
					    "id": 2,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "profileType": "ssid",
 | 
				
			||||||
		"name": "TipWlan-cloud-3-radios",
 | 
					    "name": "TipWlan-cloud-3-radios",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					        "model_type": "SsidConfiguration",
 | 
				
			||||||
			"ssid": "TipWlan-cloud-3-radios",
 | 
					        "ssid": "TipWlan-cloud-3-radios",
 | 
				
			||||||
			"appliedRadios": [
 | 
					        "appliedRadios": [
 | 
				
			||||||
				"is5GHzL",
 | 
					            "is5GHzU",
 | 
				
			||||||
				"is2dot4GHz",
 | 
					            "is2dot4GHz",
 | 
				
			||||||
				"is5GHzU"
 | 
					            "is5GHzL"
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					        "ssidAdminState": "enabled",
 | 
				
			||||||
			"secureMode": "wpa2OnlyPSK",
 | 
					        "secureMode": "wpa2OnlyPSK",
 | 
				
			||||||
			"vlanId": 1,
 | 
					        "vlanId": 1,
 | 
				
			||||||
			"keyStr": "openwifi",
 | 
					        "keyStr": "openwifi",
 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					        "broadcastSsid": "enabled",
 | 
				
			||||||
			"keyRefresh": 0,
 | 
					        "keyRefresh": 0,
 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					        "noLocalSubnets": false,
 | 
				
			||||||
			"radiusServiceName": null,
 | 
					        "radiusServiceId": 0,
 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					        "radiusAcountingServiceInterval": 60,
 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					        "captivePortalId": null,
 | 
				
			||||||
			"captivePortalId": null,
 | 
					        "bandwidthLimitDown": 0,
 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					        "bandwidthLimitUp": 0,
 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					        "clientBandwidthLimitDown": 0,
 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					        "clientBandwidthLimitUp": 0,
 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					        "videoTrafficOnly": false,
 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					        "radioBasedConfigs": {
 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					            "is5GHzU": {
 | 
				
			||||||
				"is5GHzL": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is2dot4GHz": {
 | 
				
			||||||
				"is2dot4GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHz": {
 | 
				
			||||||
				"is5GHz": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            },
 | 
				
			||||||
				},
 | 
					            "is5GHzL": {
 | 
				
			||||||
				"is5GHzU": {
 | 
					                "model_type": "RadioBasedSsidConfiguration",
 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					                "enable80211r": null,
 | 
				
			||||||
					"enable80211r": null,
 | 
					                "enable80211k": null,
 | 
				
			||||||
					"enable80211k": null,
 | 
					                "enable80211v": null
 | 
				
			||||||
					"enable80211v": null
 | 
					            }
 | 
				
			||||||
				}
 | 
					        },
 | 
				
			||||||
			},
 | 
					        "bonjourGatewayProfileId": null,
 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					        "enable80211w": null,
 | 
				
			||||||
			"enable80211w": null,
 | 
					        "wepConfig": null,
 | 
				
			||||||
			"wepConfig": null,
 | 
					        "forwardMode": "BRIDGE",
 | 
				
			||||||
			"forwardMode": "BRIDGE",
 | 
					        "profileType": "ssid",
 | 
				
			||||||
			"profileType": "ssid"
 | 
					        "radiusClientConfiguration": {
 | 
				
			||||||
		},
 | 
					            "model_type": "RadiusNasConfiguration",
 | 
				
			||||||
		"createdTimestamp": 1606778369598,
 | 
					            "nasClientId": "DEFAULT",
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369598,
 | 
					            "nasClientIp": "WAN_IP",
 | 
				
			||||||
		"childProfileIds": [
 | 
					            "userDefinedNasId": null,
 | 
				
			||||||
		]
 | 
					            "userDefinedNasIp": null,
 | 
				
			||||||
	},
 | 
					            "operatorId": null
 | 
				
			||||||
	{
 | 
					        }
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    },
 | 
				
			||||||
		"id": 15,
 | 
					    "createdTimestamp": 1612285248638,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "lastModifiedTimestamp": 1612285248638,
 | 
				
			||||||
		"profileType": "ssid",
 | 
					    "childProfileIds": []
 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-access",
 | 
					}
 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-access",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is5GHzL",
 | 
					 | 
				
			||||||
				"is5GHzU"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "wpa2PSK",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": "testing123",
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369943,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370811,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			24
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		"model_type": "Profile",
 | 
					 | 
				
			||||||
		"id": 16,
 | 
					 | 
				
			||||||
		"customerId": 2,
 | 
					 | 
				
			||||||
		"profileType": "ssid",
 | 
					 | 
				
			||||||
		"name": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
		"details": {
 | 
					 | 
				
			||||||
			"model_type": "SsidConfiguration",
 | 
					 | 
				
			||||||
			"ssid": "TipWlan-cloud-passpoint-osu",
 | 
					 | 
				
			||||||
			"appliedRadios": [
 | 
					 | 
				
			||||||
				"is2dot4GHz"
 | 
					 | 
				
			||||||
			],
 | 
					 | 
				
			||||||
			"ssidAdminState": "enabled",
 | 
					 | 
				
			||||||
			"secureMode": "open",
 | 
					 | 
				
			||||||
			"vlanId": 1,
 | 
					 | 
				
			||||||
			"keyStr": null,
 | 
					 | 
				
			||||||
			"broadcastSsid": "enabled",
 | 
					 | 
				
			||||||
			"keyRefresh": 0,
 | 
					 | 
				
			||||||
			"noLocalSubnets": false,
 | 
					 | 
				
			||||||
			"radiusServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAccountingServiceName": null,
 | 
					 | 
				
			||||||
			"radiusAcountingServiceInterval": null,
 | 
					 | 
				
			||||||
			"captivePortalId": null,
 | 
					 | 
				
			||||||
			"bandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"bandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitDown": 0,
 | 
					 | 
				
			||||||
			"clientBandwidthLimitUp": 0,
 | 
					 | 
				
			||||||
			"videoTrafficOnly": false,
 | 
					 | 
				
			||||||
			"radioBasedConfigs": {
 | 
					 | 
				
			||||||
				"is5GHzL": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is2dot4GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHz": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				"is5GHzU": {
 | 
					 | 
				
			||||||
					"model_type": "RadioBasedSsidConfiguration",
 | 
					 | 
				
			||||||
					"enable80211r": null,
 | 
					 | 
				
			||||||
					"enable80211k": null,
 | 
					 | 
				
			||||||
					"enable80211v": null
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			"bonjourGatewayProfileId": null,
 | 
					 | 
				
			||||||
			"enable80211w": null,
 | 
					 | 
				
			||||||
			"wepConfig": null,
 | 
					 | 
				
			||||||
			"forwardMode": null,
 | 
					 | 
				
			||||||
			"profileType": "ssid"
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		"createdTimestamp": 1606778369944,
 | 
					 | 
				
			||||||
		"lastModifiedTimestamp": 1606778370352,
 | 
					 | 
				
			||||||
		"childProfileIds": [
 | 
					 | 
				
			||||||
			19,
 | 
					 | 
				
			||||||
			20
 | 
					 | 
				
			||||||
		]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,43 +1,42 @@
 | 
				
			|||||||
[
 | 
					[
 | 
				
			||||||
	{
 | 
					{
 | 
				
			||||||
		"model_type": "Profile",
 | 
					    "model_type": "Profile",
 | 
				
			||||||
		"id": 18,
 | 
					    "id": 33,
 | 
				
			||||||
		"customerId": 2,
 | 
					    "customerId": 2,
 | 
				
			||||||
		"profileType": "passpoint_venue",
 | 
					    "profileType": "passpoint_venue",
 | 
				
			||||||
		"name": "TipWlan-Passpoint-Venue",
 | 
					    "name": "venue-profile-2021-01-21T21:28:58.934Z",
 | 
				
			||||||
		"details": {
 | 
					    "details": {
 | 
				
			||||||
			"model_type": "PasspointVenueProfile",
 | 
					        "model_type": "PasspointVenueProfile",
 | 
				
			||||||
			"venueNameSet": [
 | 
					        "venueNameSet": [
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "fr_CA",
 | 
					                "locale": "fra",
 | 
				
			||||||
					"dupleIso3Language": "fra",
 | 
					                "dupleIso3Language": "fra",
 | 
				
			||||||
					"dupleName": "Exemple de lieu",
 | 
					                "dupleName": "Exemple de lieu",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-fra",
 | 
					                "venueUrl": "http://www.example.com/info-fra",
 | 
				
			||||||
					"asDuple": "fra:Exemple de lieu"
 | 
					                "asDuple": "fra:Exemple de lieu"
 | 
				
			||||||
				},
 | 
					            },
 | 
				
			||||||
				{
 | 
					            {
 | 
				
			||||||
					"model_type": "PasspointVenueName",
 | 
					                "model_type": "PasspointVenueName",
 | 
				
			||||||
					"locale": "en_CA",
 | 
					                "locale": "eng",
 | 
				
			||||||
					"dupleIso3Language": "eng",
 | 
					                "dupleIso3Language": "eng",
 | 
				
			||||||
					"dupleName": "Example passpoint_venue",
 | 
					                "dupleName": "Example passpoint_venue",
 | 
				
			||||||
					"defaultDupleSeparator": ":",
 | 
					                "defaultDupleSeparator": ":",
 | 
				
			||||||
					"venueUrl": "http://www.example.com/info-eng",
 | 
					                "venueUrl": "http://www.example.com/info-eng",
 | 
				
			||||||
					"asDuple": "eng:Example passpoint_venue"
 | 
					                "asDuple": "eng:Example passpoint_venue"
 | 
				
			||||||
				}
 | 
					            }
 | 
				
			||||||
			],
 | 
					        ],
 | 
				
			||||||
			"venueTypeAssignment": {
 | 
					        "venueTypeAssignment": {
 | 
				
			||||||
				"model_type": "PasspointVenueTypeAssignment",
 | 
					            "model_type": "PasspointVenueTypeAssignment",
 | 
				
			||||||
				"venueDescription": "Research and Development Facility",
 | 
					            "venueDescription": "Research and Development Facility",
 | 
				
			||||||
				"venueGroupId": 2,
 | 
					            "venueGroupId": 2,
 | 
				
			||||||
				"venueTypeId": 8
 | 
					            "venueTypeId": 8
 | 
				
			||||||
			},
 | 
					        },
 | 
				
			||||||
			"profileType": "passpoint_venue"
 | 
					        "profileType": "passpoint_venue"
 | 
				
			||||||
		},
 | 
					    },
 | 
				
			||||||
		"createdTimestamp": 1606778369950,
 | 
					    "createdTimestamp": 1611264538947,
 | 
				
			||||||
		"lastModifiedTimestamp": 1606778369950,
 | 
					    "lastModifiedTimestamp": 1611264538947,
 | 
				
			||||||
		"childProfileIds": [
 | 
					    "childProfileIds": []
 | 
				
			||||||
		]
 | 
					}
 | 
				
			||||||
	}
 | 
					]
 | 
				
			||||||
]
 | 
					 | 
				
			||||||
@@ -1,11 +1,9 @@
 | 
				
			|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
					<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">
 | 
				
			||||||
	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>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<parent>
 | 
						<parent>
 | 
				
			||||||
		<groupId>com.telecominfraproject.wlan</groupId>
 | 
							<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
		<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
							<artifactId>tip-wlan-cloud-root-pom</artifactId>
 | 
				
			||||||
		<version>0.0.1-SNAPSHOT</version>
 | 
							<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		<relativePath>../../wlan-cloud-root</relativePath>
 | 
							<relativePath>../../wlan-cloud-root</relativePath>
 | 
				
			||||||
	</parent>
 | 
						</parent>
 | 
				
			||||||
	<artifactId>opensync-gateway</artifactId>
 | 
						<artifactId>opensync-gateway</artifactId>
 | 
				
			||||||
@@ -16,22 +14,22 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>base-container</artifactId>
 | 
								<artifactId>base-container</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<artifactId>opensync-ext-interface</artifactId>
 | 
								<artifactId>opensync-ext-interface</artifactId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>client-models</artifactId>
 | 
								<artifactId>client-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>customer-models</artifactId>
 | 
								<artifactId>customer-models</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>com.vmware.ovsdb</groupId>
 | 
								<groupId>com.vmware.ovsdb</groupId>
 | 
				
			||||||
@@ -49,13 +47,13 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>service-metric-service-interface</artifactId>
 | 
								<artifactId>service-metric-service-interface</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<artifactId>status-service-interface</artifactId>
 | 
								<artifactId>status-service-interface</artifactId>
 | 
				
			||||||
			<groupId>com.telecominfraproject.wlan</groupId>
 | 
								<groupId>com.telecominfraproject.wlan</groupId>
 | 
				
			||||||
			<version>${tip-wlan-cloud.release.version}</version>
 | 
								<version>1.1.0-SNAPSHOT</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->
 | 
							<!-- 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.MessageOrBuilder;
 | 
				
			||||||
import com.google.protobuf.util.JsonFormat;
 | 
					import com.google.protobuf.util.JsonFormat;
 | 
				
			||||||
import com.google.protobuf.util.JsonFormat.TypeRegistry;
 | 
					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.external.integration.OpensyncExternalIntegrationInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
 | 
					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");
 | 
					    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
 | 
					    @Autowired
 | 
				
			||||||
    private OpensyncExternalIntegrationInterface extIntegrationInterface;
 | 
					    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
 | 
					    // 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("#", QoS.AT_LEAST_ONCE),
 | 
				
			||||||
                        // new Topic("test/#", QoS.EXACTLY_ONCE),
 | 
					                        // new Topic("test/#", QoS.EXACTLY_ONCE),
 | 
				
			||||||
                        // new Topic("foo/+/bar", QoS.AT_LEAST_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);
 | 
					                        futureConnection.subscribe(topics);
 | 
				
			||||||
                        LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
 | 
					                        LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
 | 
				
			||||||
@@ -180,6 +210,10 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                            // queue
 | 
					                            // queue
 | 
				
			||||||
                            mqttMsg.ack();
 | 
					                            mqttMsg.ack();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            messagesReceived.increment();
 | 
				
			||||||
 | 
					                            messageBytesReceived.increment(payload.length);
 | 
				
			||||||
 | 
					                            Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
                            LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
 | 
					                            LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            if (payload[0] == 0x78) {
 | 
					                            if (payload[0] == 0x78) {
 | 
				
			||||||
@@ -189,6 +223,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                                payload = ZlibUtil.decompress(payload);
 | 
					                                payload = ZlibUtil.decompress(payload);
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            // attempt to parse the message as protobuf
 | 
					                            // attempt to parse the message as protobuf
 | 
				
			||||||
                            MessageOrBuilder encodedMsg = null;
 | 
					                            MessageOrBuilder encodedMsg = null;
 | 
				
			||||||
                            try {
 | 
					                            try {
 | 
				
			||||||
@@ -198,7 +233,6 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                                MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
 | 
					                                MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
 | 
				
			||||||
                                        jsonPrinter.print(encodedMsg));
 | 
					                                        jsonPrinter.print(encodedMsg));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
                                extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
 | 
					                                extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            } catch (Exception e) {
 | 
					                            } catch (Exception e) {
 | 
				
			||||||
@@ -231,6 +265,8 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                                        MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
 | 
					                                        MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
 | 
				
			||||||
                                    }
 | 
					                                    }
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
 | 
					                            } finally {
 | 
				
			||||||
 | 
					                                stopwatchTimerMessageProcess.stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,24 @@
 | 
				
			|||||||
package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
					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.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.Logger;
 | 
				
			||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
import org.springframework.context.annotation.Bean;
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
import org.springframework.context.annotation.Configuration;
 | 
					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.OvsdbPassiveConnectionListener;
 | 
				
			||||||
import com.vmware.ovsdb.service.impl.OvsdbPassiveConnectionListenerImpl;
 | 
					import com.vmware.ovsdb.service.impl.OvsdbPassiveConnectionListenerImpl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,12 +27,68 @@ public class OvsdbListenerConfig {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final Logger LOG = LoggerFactory.getLogger(OvsdbListenerConfig.class);
 | 
					    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
 | 
					    @Bean
 | 
				
			||||||
    public OvsdbPassiveConnectionListener ovsdbPassiveConnectionListener(
 | 
					    public OvsdbPassiveConnectionListener ovsdbPassiveConnectionListener(
 | 
				
			||||||
            @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listener.threadPoolSize:10}")
 | 
					            @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listener.threadPoolSize:10}")
 | 
				
			||||||
            int threadPoolSize) {
 | 
					            int threadPoolSize) {
 | 
				
			||||||
        LOG.debug("Configuring OvsdbPassiveConnectionListener with thread pool size {}", 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);
 | 
					        OvsdbPassiveConnectionListener listener = new OvsdbPassiveConnectionListenerImpl(executorService);
 | 
				
			||||||
        return listener;
 | 
					        return listener;
 | 
				
			||||||
    }    
 | 
					    }    
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,21 @@
 | 
				
			|||||||
package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
					package com.telecominfraproject.wlan.opensync.ovsdb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.HashSet;
 | 
					import java.util.HashSet;
 | 
				
			||||||
import java.util.Set;
 | 
					 | 
				
			||||||
import java.util.Map.Entry;
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
import java.util.concurrent.ConcurrentHashMap;
 | 
					import java.util.concurrent.ConcurrentHashMap;
 | 
				
			||||||
 | 
					import java.util.concurrent.atomic.AtomicInteger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.slf4j.Logger;
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					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.OvsdbSession;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
				
			||||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
@@ -17,9 +24,23 @@ import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			|||||||
public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
					public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger LOG = LoggerFactory.getLogger(OvsdbSessionMap.class);
 | 
					    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<>();
 | 
					    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
 | 
					    @Override
 | 
				
			||||||
    public OvsdbSession getSession(String apId) {
 | 
					    public OvsdbSession getSession(String apId) {
 | 
				
			||||||
        LOG.info("Get session for AP {}", apId);
 | 
					        LOG.info("Get session for AP {}", apId);
 | 
				
			||||||
@@ -29,7 +50,11 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public OvsdbSession removeSession(String apId) { 
 | 
					    public OvsdbSession removeSession(String apId) { 
 | 
				
			||||||
        LOG.info("Removing session for AP {}", 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
 | 
					    @Override
 | 
				
			||||||
@@ -37,7 +62,7 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
				
			|||||||
        try {
 | 
					        try {
 | 
				
			||||||
            LOG.info("Close session for AP {}", apId);
 | 
					            LOG.info("Close session for AP {}", apId);
 | 
				
			||||||
            connectedClients.get(apId).getOvsdbClient().shutdown();
 | 
					            connectedClients.get(apId).getOvsdbClient().shutdown();
 | 
				
			||||||
            connectedClients.remove(apId);
 | 
					            removeSession(apId);
 | 
				
			||||||
            LOG.info("Closed ovsdb session for {}", apId);
 | 
					            LOG.info("Closed ovsdb session for {}", apId);
 | 
				
			||||||
        }catch (Exception e) {
 | 
					        }catch (Exception e) {
 | 
				
			||||||
            // do nothing
 | 
					            // do nothing
 | 
				
			||||||
@@ -58,6 +83,8 @@ public class OvsdbSessionMap implements OvsdbSessionMapInterface {
 | 
				
			|||||||
            }catch (Exception e) {
 | 
					            }catch (Exception e) {
 | 
				
			||||||
                // do nothing
 | 
					                // do nothing
 | 
				
			||||||
            }            
 | 
					            }            
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            totalEquipmentConnections.incrementAndGet();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        LOG.info("Created new ovsdb session for {}", apId);
 | 
					        LOG.info("Created new ovsdb session for {}", apId);
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -10,6 +10,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			|||||||
import org.springframework.context.annotation.Profile;
 | 
					import org.springframework.context.annotation.Profile;
 | 
				
			||||||
import org.springframework.stereotype.Component;
 | 
					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.ovsdb.dao.OvsdbDao;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
 | 
					import com.telecominfraproject.wlan.opensync.util.SslUtil;
 | 
				
			||||||
import com.vmware.ovsdb.callback.ConnectionCallback;
 | 
					import com.vmware.ovsdb.callback.ConnectionCallback;
 | 
				
			||||||
@@ -24,6 +31,20 @@ public class TipWlanOvsdbRedirector {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbRedirector.class);
 | 
					    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}")
 | 
					    @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.redirector.listenPort:6643}")
 | 
				
			||||||
    private int ovsdbRedirectorListenPort;
 | 
					    private int ovsdbRedirectorListenPort;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,10 +62,21 @@ public class TipWlanOvsdbRedirector {
 | 
				
			|||||||
        listenForConnections();
 | 
					        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() {
 | 
					    public void listenForConnections() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ConnectionCallback connectionCallback = new ConnectionCallback() {
 | 
					        ConnectionCallback connectionCallback = new ConnectionCallback() {
 | 
				
			||||||
            public void connected(OvsdbClient ovsdbClient) {
 | 
					            public void connected(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					                connectionsAttempted.increment();
 | 
				
			||||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
					                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
				
			||||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
					                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
				
			||||||
                String subjectDn = null;
 | 
					                String subjectDn = null;
 | 
				
			||||||
@@ -54,8 +86,9 @@ public class TipWlanOvsdbRedirector {
 | 
				
			|||||||
                    String clientCn = SslUtil.extractCN(subjectDn);
 | 
					                    String clientCn = SslUtil.extractCN(subjectDn);
 | 
				
			||||||
                    LOG.info("ovsdbClient redirector connected from {} on port {} clientCn {}", remoteHost, localPort, clientCn);                
 | 
					                    LOG.info("ovsdbClient redirector connected from {} on port {} clientCn {}", remoteHost, localPort, clientCn);                
 | 
				
			||||||
                    ovsdbDao.performRedirect(ovsdbClient, clientCn);
 | 
					                    ovsdbDao.performRedirect(ovsdbClient, clientCn);
 | 
				
			||||||
 | 
					                    connectionsCreated.increment();
 | 
				
			||||||
                } catch (Exception e) {
 | 
					                } catch (Exception e) {
 | 
				
			||||||
 | 
					                    connectionsFailed.increment();
 | 
				
			||||||
                    //something is wrong with the SSL or with the redirect
 | 
					                    //something is wrong with the SSL or with the redirect
 | 
				
			||||||
                    ovsdbClient.shutdown();
 | 
					                    ovsdbClient.shutdown();
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
@@ -63,6 +96,7 @@ public class TipWlanOvsdbRedirector {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            public void disconnected(OvsdbClient ovsdbClient) {
 | 
					            public void disconnected(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					                connectionsDropped.increment();
 | 
				
			||||||
                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
					                String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
 | 
				
			||||||
                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
					                int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
 | 
				
			||||||
                String subjectDn = null;
 | 
					                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,306 @@
 | 
				
			|||||||
 | 
					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 radiusConfigDbTable = "Radius_Proxy_Config";
 | 
				
			||||||
 | 
					    public static final String apcConfigDbTable = "APC_Config";
 | 
				
			||||||
 | 
					    public static final String apcStateDbTable = "APC_State";
 | 
				
			||||||
 | 
					    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;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultReportingIntervalSeconds:60}")
 | 
				
			||||||
 | 
					    public int defaultReportingIntervalSeconds;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultOffChannelReportingIntervalSeconds:120}")
 | 
				
			||||||
 | 
					    public int defaultOffChannelReportingIntervalSeconds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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,182 @@
 | 
				
			|||||||
 | 
					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.RadiusProxyConfigInfo;
 | 
				
			||||||
 | 
					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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Map<String, RadiusProxyConfigInfo> getProvisionedRadiusConfigs(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					        Map<String, RadiusProxyConfigInfo> ret = new HashMap<>();
 | 
				
			||||||
 | 
					        for (Row row : getOvsdbTableRowsForCondition(ovsdbClient, radiusConfigDbTable, null)) {
 | 
				
			||||||
 | 
					            RadiusProxyConfigInfo radiusProxyConfigInfo = new RadiusProxyConfigInfo(row);
 | 
				
			||||||
 | 
					            ret.put(radiusProxyConfigInfo.radiusConfigName, radiusProxyConfigInfo);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,872 @@
 | 
				
			|||||||
 | 
					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 (hs2Profile.getOsuSsidProfileId() != null) {
 | 
				
			||||||
 | 
					                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()));
 | 
				
			||||||
 | 
					                        if (hs2Profile.getTermsAndConditionsFile() != null) {
 | 
				
			||||||
 | 
					                            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()));
 | 
				
			||||||
 | 
					                        if (hs2Profile.getGasAddr3Behaviour() != null) {
 | 
				
			||||||
 | 
					                            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()));
 | 
				
			||||||
 | 
					                        rowColumns.put("asra", new Atom<>(hs2Profile.getAdditionalStepsRequiredForAccess() == 1 ? true:false));
 | 
				
			||||||
 | 
					                        rowColumns.put("disable_dgaf", new Atom<>(hs2Profile.isDisableDownstreamGroupAddressedForwarding()));
 | 
				
			||||||
 | 
					                        rowColumns.put("esr", new Atom<>(hs2Profile.isEmergencyServicesReachable()));
 | 
				
			||||||
 | 
					                        if (hs2Profile.getHessid() != null) {
 | 
				
			||||||
 | 
					                            rowColumns.put("hessid", new Atom<>(hs2Profile.getHessid().getAddressAsString()));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        rowColumns.put("internet", new Atom<>(hs2Profile.isInternetConnectivity()));
 | 
				
			||||||
 | 
					                        if (hs2Profile.getQosMapSetConfiguration() != null) {
 | 
				
			||||||
 | 
					                            rowColumns.put("qos_map_set", new Atom<>(String.join(",", hs2Profile.getQosMapSetConfiguration())));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        rowColumns.put("uesa", new Atom<>(hs2Profile.isUnauthenticatedEmergencyServiceAccessible()));
 | 
				
			||||||
 | 
					                        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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        // access_network_type to add when supported by AP
 | 
				
			||||||
 | 
					                        if (ovsdbClient.getSchema(ovsdbName).get().getTables().get(hotspot20ConfigDbTable).getColumns().containsKey("access_network_type")) {
 | 
				
			||||||
 | 
					                            if (hs2Profile.getAccessNetworkType() != null) {
 | 
				
			||||||
 | 
					                                rowColumns.put("access_network_type", new Atom<>(hs2Profile.getAccessNetworkType().getId()));
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        // # format: <1-octet encoded value as hex str>
 | 
				
			||||||
 | 
					                        // # (ipv4_type & 0x3f) << 2 | (ipv6_type & 0x3) 
 | 
				
			||||||
 | 
					                        // 0x3f = 63 in decimal
 | 
				
			||||||
 | 
					                        // 0x3 = 3 in decimal
 | 
				
			||||||
 | 
					                        if (PasspointIPv6AddressType.getByName(
 | 
				
			||||||
 | 
					                                hs2Profile.getIpAddressTypeAvailability()) != PasspointIPv6AddressType.UNSUPPORTED) {
 | 
				
			||||||
 | 
					                            int availability = PasspointIPv6AddressType
 | 
				
			||||||
 | 
					                                    .getByName(hs2Profile.getIpAddressTypeAvailability()).getId();
 | 
				
			||||||
 | 
					                            String hexString = String.format("%02x", (availability & 0x3));
 | 
				
			||||||
 | 
					                            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 = String.format("%02x", ((availability & 0x3f) << 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("osu_provider_name", Function.EQUALS,
 | 
				
			||||||
 | 
					                                    new Atom<>(apOsuProviderName)));
 | 
				
			||||||
 | 
					                            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,188 @@
 | 
				
			|||||||
 | 
					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.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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }   
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    Map<String, String> getAPCState(RowUpdate rowUpdate, String apId) {
 | 
				
			||||||
 | 
					        Map<String, String> ret = new HashMap<>();
 | 
				
			||||||
 | 
					        if (rowUpdate.getNew() != null) {
 | 
				
			||||||
 | 
					            Row row = rowUpdate.getNew();
 | 
				
			||||||
 | 
					            ret.put("designatedRouterIp", getSingleValueFromSet(row, "dr_addr"));
 | 
				
			||||||
 | 
					            ret.put("backupDesignatedRouterIp", getSingleValueFromSet(row, "bdr_addr"));
 | 
				
			||||||
 | 
					            ret.put("enabled", getSingleValueFromSet(row, "enabled").toString());
 | 
				
			||||||
 | 
					            ret.put("mode", getSingleValueFromSet(row, "mode"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,420 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					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.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.external.integration.models.ConnectNodeInfo;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
 | 
				
			||||||
 | 
					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.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.OperationResult;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.result.SelectResult;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component
 | 
				
			||||||
 | 
					public class OvsdbNode extends OvsdbDaoBase {
 | 
				
			||||||
 | 
					    String changeRedirectorAddress(OvsdbClient ovsdbClient, String apId, String newRedirectorAddress) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            updateColumns.put("redirector_addr", new Atom<>(newRedirectorAddress));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					                LOG.debug("Updated {} redirector_addr = {}", awlanNodeDbTable, newRedirectorAddress);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return newRedirectorAddress;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void fillInLanIpAddressAndMac(OvsdbClient ovsdbClient, ConnectNodeInfo connectNodeInfo, String ifType) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<String> columns = new ArrayList<>();
 | 
				
			||||||
 | 
					            // populate macAddress, ipV4Address from Wifi_Inet_State
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            columns.add("inet_addr");
 | 
				
			||||||
 | 
					            columns.add("hwaddr");
 | 
				
			||||||
 | 
					            columns.add("if_type");
 | 
				
			||||||
 | 
					            columns.add("if_name");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            conditions.add(new Condition("if_type", Function.EQUALS, new Atom<>(ifType)));
 | 
				
			||||||
 | 
					            conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(defaultLanInterfaceName)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            operations.add(new Select(wifiInetStateDbTable, conditions, columns));
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					                LOG.debug("Select from {}:", wifiInetStateDbTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Row row = null;
 | 
				
			||||||
 | 
					            if ((result != null) && (result.length > 0) && (result[0] instanceof SelectResult) && !((SelectResult) result[0]).getRows().isEmpty()) {
 | 
				
			||||||
 | 
					                row = ((SelectResult) result[0]).getRows().iterator().next();
 | 
				
			||||||
 | 
					                connectNodeInfo.lanIpV4Address = getSingleValueFromSet(row, "inet_addr");
 | 
				
			||||||
 | 
					                connectNodeInfo.lanIfName = row.getStringColumn("if_name");
 | 
				
			||||||
 | 
					                connectNodeInfo.lanIfType = getSingleValueFromSet(row, "if_type");
 | 
				
			||||||
 | 
					                connectNodeInfo.lanMacAddress = getSingleValueFromSet(row, "hwaddr");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            } else if ((result != null) && (result.length > 0) && (result[0] instanceof ErrorResult)) {
 | 
				
			||||||
 | 
					                LOG.warn("Error reading from {} table: {}", wifiInetStateDbTable, result[0]);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void fillInWanIpAddressAndMac(OvsdbClient ovsdbClient, ConnectNodeInfo connectNodeInfo, String ifType, String ifName) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<String> columns = new ArrayList<>();
 | 
				
			||||||
 | 
					            // populate macAddress, ipV4Address from Wifi_Inet_State
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            columns.add("inet_addr");
 | 
				
			||||||
 | 
					            columns.add("hwaddr");
 | 
				
			||||||
 | 
					            columns.add("if_name");
 | 
				
			||||||
 | 
					            columns.add("if_type");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            conditions.add(new Condition("if_type", Function.EQUALS, new Atom<>(ifType)));
 | 
				
			||||||
 | 
					            conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            operations.add(new Select(wifiInetStateDbTable, conditions, columns));
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					                LOG.debug("Select from {}:", wifiInetStateDbTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Row row = null;
 | 
				
			||||||
 | 
					            if ((result != null) && (result.length > 0) && (result[0] instanceof SelectResult) && !((SelectResult) result[0]).getRows().isEmpty()) {
 | 
				
			||||||
 | 
					                row = ((SelectResult) result[0]).getRows().iterator().next();
 | 
				
			||||||
 | 
					                connectNodeInfo.ipV4Address = getSingleValueFromSet(row, "inet_addr");
 | 
				
			||||||
 | 
					                connectNodeInfo.ifName = row.getStringColumn("if_name");
 | 
				
			||||||
 | 
					                connectNodeInfo.ifType = getSingleValueFromSet(row, "if_type");
 | 
				
			||||||
 | 
					                connectNodeInfo.macAddress = getSingleValueFromSet(row, "hwaddr");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ConnectNodeInfo getConnectNodeInfo(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ConnectNodeInfo ret = new ConnectNodeInfo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					            List<String> columns = new ArrayList<>();
 | 
				
			||||||
 | 
					            columns.add("mqtt_settings");
 | 
				
			||||||
 | 
					            columns.add("redirector_addr");
 | 
				
			||||||
 | 
					            columns.add("manager_addr");
 | 
				
			||||||
 | 
					            columns.add("sku_number");
 | 
				
			||||||
 | 
					            columns.add("serial_number");
 | 
				
			||||||
 | 
					            columns.add("model");
 | 
				
			||||||
 | 
					            columns.add("firmware_version");
 | 
				
			||||||
 | 
					            columns.add("platform_version");
 | 
				
			||||||
 | 
					            columns.add("revision");
 | 
				
			||||||
 | 
					            columns.add("version_matrix");
 | 
				
			||||||
 | 
					            columns.add("id");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            DatabaseSchema dbSchema = ovsdbClient.getSchema(ovsdbName).get();
 | 
				
			||||||
 | 
					            Set<String> keys = dbSchema.getTables().get(awlanNodeDbTable).getColumns().keySet();
 | 
				
			||||||
 | 
					            if (keys.containsAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
 | 
				
			||||||
 | 
					                    "certification_region"))) {
 | 
				
			||||||
 | 
					                columns.addAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
 | 
				
			||||||
 | 
					                        "certification_region"));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (keys.contains("qr_code")) {
 | 
				
			||||||
 | 
					                columns.add("qr_code");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            operations.add(new Select(awlanNodeDbTable, conditions, columns));
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					                LOG.debug("Select from {}:", awlanNodeDbTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Row row = null;
 | 
				
			||||||
 | 
					            if ((result != null) && (result.length > 0) && (result[0] instanceof SelectResult) && !((SelectResult) result[0]).getRows().isEmpty()) {
 | 
				
			||||||
 | 
					                row = ((SelectResult) result[0]).getRows().iterator().next();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ret.mqttSettings = row != null ? row.getMapColumn("mqtt_settings") : null;
 | 
				
			||||||
 | 
					            ret.versionMatrix = row != null ? row.getMapColumn("version_matrix") : null;
 | 
				
			||||||
 | 
					            ret.redirectorAddr = row != null ? row.getStringColumn("redirector_addr") : null;
 | 
				
			||||||
 | 
					            ret.managerAddr = row != null ? row.getStringColumn("manager_addr") : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ret.platformVersion = row != null ? row.getStringColumn("platform_version") : null;
 | 
				
			||||||
 | 
					            ret.firmwareVersion = row != null ? row.getStringColumn("firmware_version") : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ret.revision = row != null ? row.getStringColumn("revision") : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ret.skuNumber = getSingleValueFromSet(row, "sku_number");
 | 
				
			||||||
 | 
					            ret.serialNumber = getSingleValueFromSet(row, "serial_number");
 | 
				
			||||||
 | 
					            ret.model = getSingleValueFromSet(row, "model");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (keys.containsAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
 | 
				
			||||||
 | 
					                    "certification_region"))) {
 | 
				
			||||||
 | 
					                    ret.referenceDesign = row.getStringColumn("reference_design");
 | 
				
			||||||
 | 
					                    ret.modelDescription = row.getStringColumn("model_description");
 | 
				
			||||||
 | 
					                    ret.manufacturerUrl = row.getStringColumn("manufacturer_url");
 | 
				
			||||||
 | 
					                    ret.manufacturerName = row.getStringColumn("manufacturer_name");
 | 
				
			||||||
 | 
					                    ret.manufacturerDate =  row.getStringColumn("manufacturer_date");
 | 
				
			||||||
 | 
					                    ret.certificationRegion =  row.getStringColumn("certification_region");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (keys.contains("qr_code")) {
 | 
				
			||||||
 | 
					                ret.qrCode =  row.getMapColumn("qr_code");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            // now populate macAddress, ipV4Address from Wifi_Inet_State
 | 
				
			||||||
 | 
					            // first look them up for if_name = br-wan
 | 
				
			||||||
 | 
					            fillInWanIpAddressAndMac(ovsdbClient, ret, defaultWanInterfaceType, defaultWanInterfaceName);
 | 
				
			||||||
 | 
					            if ((ret.ipV4Address == null) || (ret.macAddress == null)) {
 | 
				
			||||||
 | 
					                // when not found - look them up for if_name = br-lan
 | 
				
			||||||
 | 
					                fillInWanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType, defaultLanInterfaceName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (ret.ipV4Address == null) {
 | 
				
			||||||
 | 
					                    throw new RuntimeException("Could not get inet address for Lan and Wan network interfaces. Node is not ready to connect.");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fillInRadioInterfaceNames(ovsdbClient, ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        LOG.debug("ConnectNodeInfo created {}", ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void performRedirect(OvsdbClient ovsdbClient, String clientCn) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					        List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					        List<String> columns = new ArrayList<>();
 | 
				
			||||||
 | 
					        columns.add("manager_addr");
 | 
				
			||||||
 | 
					        columns.add("sku_number");
 | 
				
			||||||
 | 
					        columns.add("serial_number");
 | 
				
			||||||
 | 
					        columns.add("model");
 | 
				
			||||||
 | 
					        columns.add("firmware_version");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            LOG.debug("Starting Redirect");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            operations.add(new Select(awlanNodeDbTable, conditions, columns));
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.debug("Select from AWLAN_Node:");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            String skuNumber = null;
 | 
				
			||||||
 | 
					            String serialNumber = null;
 | 
				
			||||||
 | 
					            String model = null;
 | 
				
			||||||
 | 
					            String firmwareVersion = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Row row = null;
 | 
				
			||||||
 | 
					            if ((result != null) && (result.length > 0) && !((SelectResult) result[0]).getRows().isEmpty()) {
 | 
				
			||||||
 | 
					                row = ((SelectResult) result[0]).getRows().iterator().next();
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            firmwareVersion = row != null ? row.getStringColumn("firmware_version") : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            skuNumber = getSingleValueFromSet(row, "sku_number");
 | 
				
			||||||
 | 
					            serialNumber = getSingleValueFromSet(row, "serial_number");
 | 
				
			||||||
 | 
					            model = getSingleValueFromSet(row, "model");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.info("Redirecting AP Node: clientCn {} serialNumber {} model {} firmwareVersion {} skuNumber {}", clientCn, serialNumber, model,
 | 
				
			||||||
 | 
					                    firmwareVersion, skuNumber);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Update table AWLAN_Node - set manager_addr
 | 
				
			||||||
 | 
					            operations.clear();
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            updateColumns.put("manager_addr", new Atom<>("ssl:" + managerIpAddr + ":" + ovsdbExternalPort));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            row = new Row(updateColumns);
 | 
				
			||||||
 | 
					            operations.add(new Update(awlanNodeDbTable, row));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.debug("Updated AWLAN_Node:");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.debug("Redirect Done");
 | 
				
			||||||
 | 
					        } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error when redirecting AP Node", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void rebootOrResetAp(OvsdbClient ovsdbClient, String desiredApAction) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            LOG.debug("rebootOrResetAp on AP perform {}, setting timer for {} seconds.", desiredApAction, rebootOrResetTimerSeconds);
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					            updateColumns.put("firmware_url", new Atom<>(desiredApAction));
 | 
				
			||||||
 | 
					            updateColumns.put("upgrade_timer", new Atom<>(rebootOrResetTimerSeconds));
 | 
				
			||||||
 | 
					            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 (OvsdbClientException e) {
 | 
				
			||||||
 | 
					            LOG.error("Could not trigger {}", desiredApAction, e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ConnectNodeInfo updateConnectNodeInfoOnConnect(OvsdbClient ovsdbClient, String clientCn, ConnectNodeInfo incomingConnectNodeInfo,
 | 
				
			||||||
 | 
					            boolean preventCnAlteration) {
 | 
				
			||||||
 | 
					        ConnectNodeInfo ret = incomingConnectNodeInfo.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // set device_mode = cloud - plume's APs do not use it
 | 
				
			||||||
 | 
					            // updateColumns.put("device_mode", new Atom<String>("cloud") );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // update sku_number if it was empty
 | 
				
			||||||
 | 
					            if (( ret.skuNumber == null) || ret.skuNumber.isEmpty()  || ret.skuNumber.equals("unknown") || ret.skuNumber.startsWith("tip.wlan_")) {              
 | 
				
			||||||
 | 
					                if ((ret.certificationRegion != null && !ret.certificationRegion.equals("unknown") ) && (ret.model != null && !ret.model.equals("unknown"))) {
 | 
				
			||||||
 | 
					                    if (ret.model.endsWith("-" + ret.certificationRegion)) {
 | 
				
			||||||
 | 
					                        updateColumns.put("sku_number", new Atom<>("TIP-" + ret.model));
 | 
				
			||||||
 | 
					                        ret.skuNumber = "TIP-" + ret.model;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        updateColumns.put("sku_number", new Atom<>("TIP-" + ret.model + "-" + ret.certificationRegion));
 | 
				
			||||||
 | 
					                        ret.skuNumber = "TIP-" + ret.model + "-" + ret.certificationRegion;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else if ((ret.country != null ) && (ret.model != null && !ret.model.equals("unknown"))) {
 | 
				
			||||||
 | 
					                    if (ret.model.endsWith("-" + ret.country)) {
 | 
				
			||||||
 | 
					                        updateColumns.put("sku_number", new Atom<>("TIP-" + ret.model));
 | 
				
			||||||
 | 
					                        ret.skuNumber = "TIP-" + ret.model;
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        updateColumns.put("sku_number", new Atom<>("TIP-" + ret.model + "-" + ret.country));
 | 
				
			||||||
 | 
					                        ret.skuNumber = "TIP-" + ret.model + "-" + ret.country;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else if (ret.model != null && !ret.model.equals("unknown")){
 | 
				
			||||||
 | 
					                    updateColumns.put("sku_number", new Atom<>("TIP-" + ret.model));
 | 
				
			||||||
 | 
					                    ret.skuNumber = "TIP-" + ret.model;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Configure the MQTT connection
 | 
				
			||||||
 | 
					            // ovsh u AWLAN_Node
 | 
				
			||||||
 | 
					            // mqtt_settings:ins:'["map",[["broker","testportal.123wlan.com"],["topics","/ap/dev-ap-0300/opensync"],["qos","0"],["port","1883"],["remote_log","1"]]]'
 | 
				
			||||||
 | 
					            Map<String, String> newMqttSettings = new HashMap<>();
 | 
				
			||||||
 | 
					            newMqttSettings.put("broker", mqttBrokerAddress);
 | 
				
			||||||
 | 
					            String mqttClientName = OvsdbToWlanCloudTypeMappingUtility.getAlteredClientCnIfRequired(clientCn, incomingConnectNodeInfo, preventCnAlteration);
 | 
				
			||||||
 | 
					            newMqttSettings.put("topics", "/ap/" + mqttClientName + "/opensync");
 | 
				
			||||||
 | 
					            newMqttSettings.put("port", "" + mqttBrokerExternalPort);
 | 
				
			||||||
 | 
					            newMqttSettings.put("compress", "zlib");
 | 
				
			||||||
 | 
					            newMqttSettings.put("qos", "0");
 | 
				
			||||||
 | 
					            newMqttSettings.put("remote_log", "1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if ((ret.mqttSettings == null) || !ret.mqttSettings.equals(newMqttSettings)) {
 | 
				
			||||||
 | 
					                @SuppressWarnings("unchecked")
 | 
				
			||||||
 | 
					                com.vmware.ovsdb.protocol.operation.notation.Map<String, String> mgttSettings =
 | 
				
			||||||
 | 
					                        com.vmware.ovsdb.protocol.operation.notation.Map.of(newMqttSettings);
 | 
				
			||||||
 | 
					                ret.mqttSettings = newMqttSettings;
 | 
				
			||||||
 | 
					                updateColumns.put("mqtt_settings", mgttSettings);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!updateColumns.isEmpty()) {
 | 
				
			||||||
 | 
					                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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					                    LOG.debug("Updated {}:", awlanNodeDbTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                        LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,122 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					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.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
 | 
				
			||||||
 | 
					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.OperationResult;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component
 | 
				
			||||||
 | 
					public class OvsdbNodeConfig extends OvsdbDaoBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    OvsdbGet ovsdbGet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
 | 
				
			||||||
 | 
					            if (apNetworkConfig.getNtpServer() == null || apNetworkConfig.getNtpServer().getValue() == null) {
 | 
				
			||||||
 | 
					                LOG.info("Cannot configure NTP server to null value. {}", apNetworkConfig);
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            LOG.debug("configureNtpServer update Node_Config to {}", apNetworkConfig.getNtpServer().getValue());
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					            updateColumns.put("value", new Atom<>(apNetworkConfig.getNtpServer().getValue()));
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					            operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp"))), new Row(updateColumns)));
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.debug("configureNtpServer result {}", res);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
 | 
				
			||||||
 | 
					        // /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4"
 | 
				
			||||||
 | 
					        // The format is a colon delimited list.  log_proto:log_ip:log_port:log_priority
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
 | 
				
			||||||
 | 
					            if (apNetworkConfig.getSyslogRelay() == null ) {
 | 
				
			||||||
 | 
					                LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (apNetworkConfig.getSyslogRelay().isEnabled()) {
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null
 | 
				
			||||||
 | 
					                    || apNetworkConfig.getSyslogRelay().getSeverity() == null) {
 | 
				
			||||||
 | 
					                    LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                LOG.debug("configureSyslog remote_logging to {}", apNetworkConfig.getSyslogRelay());
 | 
				
			||||||
 | 
					                Map<String, Value> columns = new HashMap<>();
 | 
				
			||||||
 | 
					                columns.put("key", new Atom<>("remote"));
 | 
				
			||||||
 | 
					                columns.put("module", new Atom<>("syslog"));
 | 
				
			||||||
 | 
					                String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String
 | 
				
			||||||
 | 
					                        .valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
 | 
				
			||||||
 | 
					                columns.put("value", new Atom<>(delimitedValue));
 | 
				
			||||||
 | 
					                List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					                operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns)));
 | 
				
			||||||
 | 
					                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					                long numUpdates = 0;
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    if (res instanceof UpdateResult) {
 | 
				
			||||||
 | 
					                        numUpdates += ((UpdateResult) res).getCount();
 | 
				
			||||||
 | 
					                        LOG.debug("configureSyslog update result {}", res);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (numUpdates == 0) {
 | 
				
			||||||
 | 
					                    // no records existed, insert the row instead
 | 
				
			||||||
 | 
					                    operations.clear();
 | 
				
			||||||
 | 
					                    operations.add(new Insert(nodeConfigTable, new Row(columns)));
 | 
				
			||||||
 | 
					                    fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					                    result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					                    for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                        LOG.debug("configureSyslog insert result {}", res);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                LOG.debug("Disable remote_logging", apNetworkConfig.getSyslogRelay());
 | 
				
			||||||
 | 
					                List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					                operations.add(new Delete(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog")))));
 | 
				
			||||||
 | 
					                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    if (res instanceof UpdateResult) {
 | 
				
			||||||
 | 
					                        LOG.debug("configureSyslog disabled remote_logging {}", res);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,309 @@
 | 
				
			|||||||
 | 
					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.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Component;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.ChannelBandwidth;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.SourceType;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.MimoMode;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.RadioConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.StateSetting;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.rf.models.RfElementConfiguration;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.exception.OvsdbClientException;
 | 
				
			||||||
 | 
					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.OperationResult;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component
 | 
				
			||||||
 | 
					public class OvsdbRadioConfig extends OvsdbDaoBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    OvsdbGet ovsdbGet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
 | 
				
			||||||
 | 
					        String country = opensyncAPConfig.getCountryCode(); // should be the
 | 
				
			||||||
 | 
					        ApElementConfiguration apElementConfiguration = (ApElementConfiguration) opensyncAPConfig.getCustomerEquipment()
 | 
				
			||||||
 | 
					                .getDetails();
 | 
				
			||||||
 | 
					        RfConfiguration rfConfig = (RfConfiguration) opensyncAPConfig.getRfProfile().getDetails();
 | 
				
			||||||
 | 
					        Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient);
 | 
				
			||||||
 | 
					        Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
 | 
				
			||||||
 | 
					        List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
 | 
				
			||||||
 | 
					            DatabaseSchema databaseSchema = cfDatabaseSchema.get();
 | 
				
			||||||
 | 
					            Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
 | 
				
			||||||
 | 
					                Map<String, String> hwConfig = new HashMap<>();
 | 
				
			||||||
 | 
					                ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
 | 
				
			||||||
 | 
					                RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
 | 
				
			||||||
 | 
					                boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
 | 
				
			||||||
 | 
					                int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
 | 
				
			||||||
 | 
					                LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
 | 
				
			||||||
 | 
					                        autoChannelSelection, channel, elementRadioConfig.getChannelNumber());
 | 
				
			||||||
 | 
					                ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
 | 
				
			||||||
 | 
					                String ht_mode = getBandwidth(bandwidth);
 | 
				
			||||||
 | 
					                RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
 | 
				
			||||||
 | 
					                int beaconInterval = rfElementConfig.getBeaconInterval();
 | 
				
			||||||
 | 
					                boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
 | 
				
			||||||
 | 
					                int txPower;
 | 
				
			||||||
 | 
					                if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
 | 
				
			||||||
 | 
					                    txPower = rfElementConfig.getEirpTxPower();
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    txPower = elementRadioConfig.getEirpTxPower().getValue();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                String hwMode = getHwMode(rfElementConfig);
 | 
				
			||||||
 | 
					                String freqBand = getHwConfigAndFreq(radioType, hwConfig);
 | 
				
			||||||
 | 
					                String radioName = null;
 | 
				
			||||||
 | 
					                for (String key : provisionedRadioConfigs.keySet()) {
 | 
				
			||||||
 | 
					                    if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
 | 
				
			||||||
 | 
					                        radioName = key;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (radioName == null) continue;
 | 
				
			||||||
 | 
					                String ifName = null; // for vifConfigs
 | 
				
			||||||
 | 
					                if (radioName.equals(radio0)) {
 | 
				
			||||||
 | 
					                    ifName = defaultRadio0;
 | 
				
			||||||
 | 
					                } else if (radioName.equals(radio1)) {
 | 
				
			||||||
 | 
					                    ifName = defaultRadio1;
 | 
				
			||||||
 | 
					                } else if (radioName.equals(radio2)) {
 | 
				
			||||||
 | 
					                    ifName = defaultRadio2;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (ifName == null) continue;
 | 
				
			||||||
 | 
					                Set<Uuid> vifUuidsForRadio = new HashSet<>();
 | 
				
			||||||
 | 
					                for (String key : vifConfigs.keySet()) {
 | 
				
			||||||
 | 
					                    if (key.contains(ifName))
 | 
				
			||||||
 | 
					                        vifUuidsForRadio.add(vifConfigs.get(key).uuid);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                int mimoMode = MimoMode.none.getId();
 | 
				
			||||||
 | 
					                if (rfElementConfig.getMimoMode() != null) {
 | 
				
			||||||
 | 
					                    mimoMode = rfElementConfig.getMimoMode().getId();
 | 
				
			||||||
 | 
					                }           
 | 
				
			||||||
 | 
					                int maxNumClients = 0;          
 | 
				
			||||||
 | 
					                if (rfElementConfig.getMaxNumClients() != null) {
 | 
				
			||||||
 | 
					                    maxNumClients = rfElementConfig.getMaxNumClients();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                    configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
 | 
				
			||||||
 | 
					                            enabled, hwMode, ht_mode, txPower, mimoMode, vifUuidsForRadio, operations, maxNumClients,columnNames);
 | 
				
			||||||
 | 
					                } catch (OvsdbClientException e) {
 | 
				
			||||||
 | 
					                    LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                } catch (TimeoutException e) {
 | 
				
			||||||
 | 
					                    LOG.error("ConfigureWifiRadios failed with Timeout.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                } catch (ExecutionException e) {
 | 
				
			||||||
 | 
					                    LOG.error("ConfigureWifiRadios excecution failed.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                } catch (InterruptedException e) {
 | 
				
			||||||
 | 
					                    LOG.error("ConfigureWifiRadios interrupted.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) {
 | 
				
			||||||
 | 
					            LOG.error("configureWifiRadios error", e); throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String getHwConfigAndFreq(RadioType radioType, Map<String, String> hwConfig) {
 | 
				
			||||||
 | 
					        switch (radioType) {
 | 
				
			||||||
 | 
					        case is2dot4GHz:
 | 
				
			||||||
 | 
					            return "2.4G";
 | 
				
			||||||
 | 
					        case is5GHz:
 | 
				
			||||||
 | 
					            // 802.11h dfs (Dynamic Frequency Selection) aka military
 | 
				
			||||||
 | 
					            // and
 | 
				
			||||||
 | 
					            // weather radar
 | 
				
			||||||
 | 
					            // avoidance protocol
 | 
				
			||||||
 | 
					            // Must not be disabled (by law)
 | 
				
			||||||
 | 
					            // NA for 2.4GHz
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_enable", "1");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_ignorecac", "0");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_usenol", "1");
 | 
				
			||||||
 | 
					            return "5G";
 | 
				
			||||||
 | 
					        case is5GHzL:
 | 
				
			||||||
 | 
					            // 802.11h dfs (Dynamic Frequency Selection) aka military
 | 
				
			||||||
 | 
					            // and
 | 
				
			||||||
 | 
					            // weather radar
 | 
				
			||||||
 | 
					            // avoidance protocol
 | 
				
			||||||
 | 
					            // Must not be disabled (by law)
 | 
				
			||||||
 | 
					            // NA for 2.4GHz
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_enable", "1");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_ignorecac", "0");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_usenol", "1");
 | 
				
			||||||
 | 
					            return "5GL";
 | 
				
			||||||
 | 
					        case is5GHzU:
 | 
				
			||||||
 | 
					            // 802.11h dfs (Dynamic Frequency Selection) aka military
 | 
				
			||||||
 | 
					            // and
 | 
				
			||||||
 | 
					            // weather radar
 | 
				
			||||||
 | 
					            // avoidance protocol
 | 
				
			||||||
 | 
					            // Must not be disabled (by law)
 | 
				
			||||||
 | 
					            // NA for 2.4GHz
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_enable", "1");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_ignorecac", "0");
 | 
				
			||||||
 | 
					            hwConfig.put("dfs_usenol", "1");
 | 
				
			||||||
 | 
					            return "5GU";
 | 
				
			||||||
 | 
					        default: // don't know this interface
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String getBandwidth(ChannelBandwidth bandwidth) {
 | 
				
			||||||
 | 
					        String ht_mode;
 | 
				
			||||||
 | 
					        switch (bandwidth) {
 | 
				
			||||||
 | 
					        case is20MHz:
 | 
				
			||||||
 | 
					            ht_mode = "HT20";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case is40MHz:
 | 
				
			||||||
 | 
					            ht_mode = "HT40";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case is80MHz:
 | 
				
			||||||
 | 
					            ht_mode = "HT80";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case is160MHz:
 | 
				
			||||||
 | 
					            ht_mode = "HT160";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case auto:
 | 
				
			||||||
 | 
					            ht_mode = "0";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            ht_mode = null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return ht_mode;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String getHwMode(RfElementConfiguration rfElementConfig) {
 | 
				
			||||||
 | 
					        String hwMode = null;
 | 
				
			||||||
 | 
					        switch (rfElementConfig.getRadioMode()) {
 | 
				
			||||||
 | 
					        case modeA:
 | 
				
			||||||
 | 
					            hwMode = "11a";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeAB:
 | 
				
			||||||
 | 
					            hwMode = "11ab";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeAC:
 | 
				
			||||||
 | 
					            hwMode = "11ac";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeB:
 | 
				
			||||||
 | 
					            hwMode = "11b";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeG:
 | 
				
			||||||
 | 
					            hwMode = "11g";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeAX:
 | 
				
			||||||
 | 
					            hwMode = "11ax";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        case modeN:
 | 
				
			||||||
 | 
					            hwMode = "11n";
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return hwMode;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig,
 | 
				
			||||||
 | 
					                             String country, int beaconInterval, boolean enabled, String hwMode, String ht_mode, int txPower,
 | 
				
			||||||
 | 
					                             int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
				
			||||||
 | 
					        Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					        List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					        conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
 | 
				
			||||||
 | 
					        updateColumns.put("channel", new Atom<>(channel));
 | 
				
			||||||
 | 
					        updateColumns.put("country", new Atom<>(country));
 | 
				
			||||||
 | 
					        @SuppressWarnings("unchecked")
 | 
				
			||||||
 | 
					        com.vmware.ovsdb.protocol.operation.notation.Map<String, String> hwConfigMap = com.vmware.ovsdb.protocol.operation.notation.Map
 | 
				
			||||||
 | 
					                .of(hwConfig);
 | 
				
			||||||
 | 
					        updateColumns.put("hw_config", hwConfigMap);
 | 
				
			||||||
 | 
					        updateColumns.put("bcn_int", new Atom<>(beaconInterval));
 | 
				
			||||||
 | 
					        updateColumns.put("enabled", new Atom<>(enabled));
 | 
				
			||||||
 | 
					        if ((ht_mode != null) && !ht_mode.equals("0")) {
 | 
				
			||||||
 | 
					            updateColumns.put("ht_mode", new Atom<>(ht_mode));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            updateColumns.put("ht_mode", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (txPower > 0) {
 | 
				
			||||||
 | 
					            updateColumns.put("tx_power", new Atom<>(txPower));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            updateColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (hwMode != null) {
 | 
				
			||||||
 | 
					            updateColumns.put("hw_mode", new Atom<>(hwMode));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        configureCustomOptionsMap(maxNumClients, updateColumns);
 | 
				
			||||||
 | 
					        setTxAndRxChainmask(mimoMode, updateColumns,tableColumns);
 | 
				
			||||||
 | 
					        if (vifUuidsForRadio.size() > 0) {
 | 
				
			||||||
 | 
					            com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set
 | 
				
			||||||
 | 
					                    .of(vifUuidsForRadio);
 | 
				
			||||||
 | 
					            updateColumns.put("vif_configs", vifConfigUuids);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					        operations.add(new Update(wifiRadioConfigDbTable, conditions, row));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureCustomOptionsMap(int maxNumClients, Map<String, Value> updateColumns) {
 | 
				
			||||||
 | 
					        Map<String,String> customOptions = new HashMap<>();
 | 
				
			||||||
 | 
					        customOptions.put("max_clients", String.valueOf(maxNumClients));
 | 
				
			||||||
 | 
					        @SuppressWarnings("unchecked")
 | 
				
			||||||
 | 
					        com.vmware.ovsdb.protocol.operation.notation.Map<String, String> customOptionsMap = com.vmware.ovsdb.protocol.operation.notation.Map
 | 
				
			||||||
 | 
					        .of(customOptions);           
 | 
				
			||||||
 | 
					        updateColumns.put("custom_options", customOptionsMap);           
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) {
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * Chainmask is a bitmask, so map mimo mode values accordingly
 | 
				
			||||||
 | 
					         * Note values 0, 1 remain unchanged
 | 
				
			||||||
 | 
					         * 
 | 
				
			||||||
 | 
					         * mimoMode bitmask
 | 
				
			||||||
 | 
					         * 0 0
 | 
				
			||||||
 | 
					         * 1 1
 | 
				
			||||||
 | 
					         * 2 3
 | 
				
			||||||
 | 
					         * 3 7
 | 
				
			||||||
 | 
					         * 4 15
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        if (mimoMode == 2) {
 | 
				
			||||||
 | 
					            mimoMode = 3;
 | 
				
			||||||
 | 
					        } else if (mimoMode == 3) {
 | 
				
			||||||
 | 
					            mimoMode = 7;
 | 
				
			||||||
 | 
					        } else if (mimoMode == 4) {
 | 
				
			||||||
 | 
					            mimoMode = 15;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        updateColumns.put("tx_chainmask", new Atom<>(mimoMode));
 | 
				
			||||||
 | 
					        if (tableColumns.contains("rx_chainmask")) {
 | 
				
			||||||
 | 
					            updateColumns.put("rx_chainmask", new Atom<>(mimoMode));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,139 @@
 | 
				
			|||||||
 | 
					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.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.network.models.RadiusProxyConfiguration;
 | 
				
			||||||
 | 
					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.Row;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.notation.Set;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.notation.Value;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
 | 
				
			||||||
 | 
					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 OvsdbRadiusProxyConfig extends OvsdbDaoBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    OvsdbGet getProvisionedData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureApc(OvsdbClient ovsdbClient, Boolean enable, List<Operation> operations) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            if (ovsdbClient.getSchema(ovsdbName).get().getTables().containsKey(apcConfigDbTable)) {
 | 
				
			||||||
 | 
					                Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					                updateColumns.put("enabled", new Atom<>(enable));
 | 
				
			||||||
 | 
					                Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					                Update update = new Update(apcConfigDbTable, row);
 | 
				
			||||||
 | 
					                if (!operations.contains(update)) {
 | 
				
			||||||
 | 
					                    // only need to do 1 update of this kind
 | 
				
			||||||
 | 
					                    operations.add(new Update(apcConfigDbTable, row));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (InterruptedException | ExecutionException | OvsdbClientException e) {
 | 
				
			||||||
 | 
					            LOG.error("Exception getting schema for ovsdb.", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureRadius(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig) {
 | 
				
			||||||
 | 
					        List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            if (ovsdbClient.getSchema(ovsdbName).get().getTables().containsKey(radiusConfigDbTable)) {
 | 
				
			||||||
 | 
					                configureRadiusServers(ovsdbClient, apConfig, operations);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
 | 
				
			||||||
 | 
					            LOG.error("Exception provisioning RadSecConfiguraitons.", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void configureRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig, List<Operation> operations)
 | 
				
			||||||
 | 
					            throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails())
 | 
				
			||||||
 | 
					                .getRadiusProxyConfigurations()) {
 | 
				
			||||||
 | 
					            Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					            updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
 | 
				
			||||||
 | 
					            getCertificateUrls(rsc, updateColumns);
 | 
				
			||||||
 | 
					            updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
 | 
				
			||||||
 | 
					            updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));          
 | 
				
			||||||
 | 
					            updateColumns.put("port", new Atom<>(rsc.getPort()));           
 | 
				
			||||||
 | 
					            updateColumns.put("realm", Set.of(rsc.getRealm()));
 | 
				
			||||||
 | 
					            updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec()));
 | 
				
			||||||
 | 
					            Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					            operations.add(new Insert(radiusConfigDbTable, row));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					        OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					        if (LOG.isDebugEnabled()) {
 | 
				
			||||||
 | 
					            LOG.debug("Insert into {}:", radiusConfigDbTable);
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void getCertificateUrls(RadiusProxyConfiguration rsc, Map<String, Value> updateColumns) {
 | 
				
			||||||
 | 
					        String clientCertFilestoreUrl = externalFileStoreURL + rsc.getClientCert().getApExportUrl();
 | 
				
			||||||
 | 
					        String clientKeyFilestoreUrl = externalFileStoreURL + rsc.getClientKey().getApExportUrl();
 | 
				
			||||||
 | 
					        String caCertFilestoreUrl = externalFileStoreURL + rsc.getCaCert().getApExportUrl();
 | 
				
			||||||
 | 
					        if (!clientCertFilestoreUrl.contains("filestore")) {
 | 
				
			||||||
 | 
					            clientCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getClientCert().getApExportUrl();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!clientKeyFilestoreUrl.contains("filestore")) {
 | 
				
			||||||
 | 
					            clientKeyFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getClientKey().getApExportUrl();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (!caCertFilestoreUrl.contains("filestore")) {
 | 
				
			||||||
 | 
					            caCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getCaCert().getApExportUrl();
 | 
				
			||||||
 | 
					        }           
 | 
				
			||||||
 | 
					        updateColumns.put("client_cert", new Atom<>(clientCertFilestoreUrl));
 | 
				
			||||||
 | 
					        updateColumns.put("client_key", new Atom<>(clientKeyFilestoreUrl));
 | 
				
			||||||
 | 
					        updateColumns.put("ca_cert", new Atom<>(caCertFilestoreUrl));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void removeRadiusConfigurations(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					        LOG.info("removeRadiusConfigurations from {}", radiusConfigDbTable);
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            if (ovsdbClient.getSchema(ovsdbName).get().getTables().containsKey(radiusConfigDbTable)) {
 | 
				
			||||||
 | 
					                List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					                operations.add(new Delete(radiusConfigDbTable));
 | 
				
			||||||
 | 
					                CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					                OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					                for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                    LOG.info("Op Result {}", res);
 | 
				
			||||||
 | 
					                    if (res instanceof UpdateResult) {
 | 
				
			||||||
 | 
					                        LOG.info("removeRadiusConfigurations {}", res.toString());
 | 
				
			||||||
 | 
					                    } else if (res instanceof ErrorResult) {
 | 
				
			||||||
 | 
					                        LOG.error("removeRadiusConfigurations error {}", (res));
 | 
				
			||||||
 | 
					                        throw new RuntimeException("removeRadiusConfigurations "
 | 
				
			||||||
 | 
					                                + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                LOG.info("Removed all radius and realm configurations");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in removeRadiusConfigurations", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,380 @@
 | 
				
			|||||||
 | 
					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.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.core.model.equipment.AutoOrManualValue;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.RadioBestApSettings;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.RadioType;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.core.model.equipment.SourceType;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.ManagementRate;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.MulticastRate;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.equipment.models.RadioConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.profile.rf.models.RfElementConfiguration;
 | 
				
			||||||
 | 
					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.protocol.schema.DatabaseSchema;
 | 
				
			||||||
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Component
 | 
				
			||||||
 | 
					public class OvsdbRrmConfig extends OvsdbDaoBase {
 | 
				
			||||||
 | 
					    void configureWifiRrm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment()
 | 
				
			||||||
 | 
					                .getDetails();
 | 
				
			||||||
 | 
					        RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails();
 | 
				
			||||||
 | 
					        for (RadioType radioType : apElementConfig.getRadioMap().keySet()) {
 | 
				
			||||||
 | 
					            String freqBand = null;
 | 
				
			||||||
 | 
					            if (radioType == RadioType.is2dot4GHz) {
 | 
				
			||||||
 | 
					                freqBand = "2.4G";
 | 
				
			||||||
 | 
					            } else if (radioType == RadioType.is5GHzL) {
 | 
				
			||||||
 | 
					                freqBand = "5GL";
 | 
				
			||||||
 | 
					            } else if (radioType == RadioType.is5GHzU) {
 | 
				
			||||||
 | 
					                freqBand = "5GU";
 | 
				
			||||||
 | 
					            } else if (radioType == RadioType.is5GHz) {
 | 
				
			||||||
 | 
					                freqBand = "5G";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (rfConfig == null) {
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ElementRadioConfiguration elementRadioConfig = apElementConfig.getRadioMap().get(radioType);
 | 
				
			||||||
 | 
					            RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
 | 
				
			||||||
 | 
					            if (elementRadioConfig == null || rfElementConfig == null) {
 | 
				
			||||||
 | 
					            	continue; // don't have a radio of this kind in the map
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
 | 
				
			||||||
 | 
					            int backupChannel = elementRadioConfig.getActiveBackupChannel(autoChannelSelection);
 | 
				
			||||||
 | 
					            LOG.debug("configureWifiRadios autoChannelSelection {} activeBackupChannel {}",
 | 
				
			||||||
 | 
					                    autoChannelSelection, backupChannel);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            AutoOrManualValue probeResponseThresholdDb = null;
 | 
				
			||||||
 | 
					            AutoOrManualValue clientDisconnectThresholdDb = null;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (elementRadioConfig.getProbeResponseThresholdDb() != null) {
 | 
				
			||||||
 | 
						            probeResponseThresholdDb = getSourcedValue(elementRadioConfig.getProbeResponseThresholdDb().getSource(),
 | 
				
			||||||
 | 
						                    rfElementConfig.getProbeResponseThresholdDb(),
 | 
				
			||||||
 | 
						                    elementRadioConfig.getProbeResponseThresholdDb().getValue());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (elementRadioConfig.getClientDisconnectThresholdDb() != null) {
 | 
				
			||||||
 | 
						            clientDisconnectThresholdDb = getSourcedValue(
 | 
				
			||||||
 | 
						                    elementRadioConfig.getClientDisconnectThresholdDb().getSource(),
 | 
				
			||||||
 | 
						                    rfElementConfig.getClientDisconnectThresholdDb(),
 | 
				
			||||||
 | 
						                    elementRadioConfig.getClientDisconnectThresholdDb().getValue());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            RadioConfiguration radioConfig = apElementConfig.getAdvancedRadioMap().get(radioType);
 | 
				
			||||||
 | 
					            MulticastRate multicastRate = null;
 | 
				
			||||||
 | 
					            ManagementRate managementRate = null;
 | 
				
			||||||
 | 
					            RadioBestApSettings bestApSettings = null;
 | 
				
			||||||
 | 
					            if (radioConfig != null) {
 | 
				
			||||||
 | 
					            	if (radioConfig.getMulticastRate() != null) {
 | 
				
			||||||
 | 
					            		multicastRate = radioConfig.getMulticastRate().getSource() == SourceType.profile
 | 
				
			||||||
 | 
					                        ? rfElementConfig.getMulticastRate()
 | 
				
			||||||
 | 
					                        : radioConfig.getMulticastRate().getValue();
 | 
				
			||||||
 | 
					            	}
 | 
				
			||||||
 | 
					            	
 | 
				
			||||||
 | 
					            	if (radioConfig.getManagementRate() != null) {
 | 
				
			||||||
 | 
					                	managementRate = radioConfig.getManagementRate().getSource() == SourceType.profile
 | 
				
			||||||
 | 
					                        ? rfElementConfig.getManagementRate()
 | 
				
			||||||
 | 
					                        : radioConfig.getManagementRate().getValue();
 | 
				
			||||||
 | 
					            	}
 | 
				
			||||||
 | 
					            	
 | 
				
			||||||
 | 
					            	if (radioConfig.getBestApSettings() != null) {
 | 
				
			||||||
 | 
					                	bestApSettings = radioConfig.getBestApSettings().getSource() == SourceType.profile
 | 
				
			||||||
 | 
					                        ? rfElementConfig.getBestApSettings()
 | 
				
			||||||
 | 
					                        : radioConfig.getBestApSettings().getValue();
 | 
				
			||||||
 | 
					            	}
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (freqBand != null) {
 | 
				
			||||||
 | 
					                try {
 | 
				
			||||||
 | 
					                    configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb, 
 | 
				
			||||||
 | 
					                    		clientDisconnectThresholdDb, managementRate, bestApSettings, multicastRate);
 | 
				
			||||||
 | 
					                } catch (OvsdbClientException e) {
 | 
				
			||||||
 | 
					                    LOG.error("configureRrm failed with OvsdbClient exception.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                } catch (TimeoutException e) {
 | 
				
			||||||
 | 
					                    LOG.error("configureRrm failed with Timeout.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                } catch (ExecutionException e) {
 | 
				
			||||||
 | 
					                    LOG.error("configureRrm excecution failed.", e);
 | 
				
			||||||
 | 
					                } catch (InterruptedException e) {
 | 
				
			||||||
 | 
					                    LOG.error("configureRrm interrupted.", e);
 | 
				
			||||||
 | 
					                    throw new RuntimeException(e);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
 | 
				
			||||||
 | 
					            AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
 | 
				
			||||||
 | 
					            ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
 | 
				
			||||||
 | 
					                    throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
 | 
				
			||||||
 | 
					        DatabaseSchema databaseSchema = cfDatabaseSchema.get();
 | 
				
			||||||
 | 
					        Set<String> columnNames = databaseSchema.getTables().get(wifiRrmConfigDbTable).getColumns().keySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					        Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        updateColumns.put("freq_band", new Atom<>(freqBand));
 | 
				
			||||||
 | 
					        updateColumns.put("backup_channel", new Atom<>(backupChannel));
 | 
				
			||||||
 | 
					        if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand));
 | 
				
			||||||
 | 
					        if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel));
 | 
				
			||||||
 | 
					        if (columnNames.contains("mcast_rate")) {
 | 
				
			||||||
 | 
					            if (multicastRate == null || multicastRate == MulticastRate.auto) {
 | 
				
			||||||
 | 
					                updateColumns.put("mcast_rate", new Atom<>(0));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (columnNames.contains("probe_resp_threshold")) {
 | 
				
			||||||
 | 
					            if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
 | 
				
			||||||
 | 
					                updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (columnNames.contains("client_disconnect_threshold")) {
 | 
				
			||||||
 | 
					            if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
 | 
				
			||||||
 | 
					                updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (columnNames.contains("beacon_rate")) {
 | 
				
			||||||
 | 
					            if (managementRate == null || managementRate == ManagementRate.auto) {
 | 
				
			||||||
 | 
					                updateColumns.put("beacon_rate", new Atom<>(0));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) {
 | 
				
			||||||
 | 
					            if (bestApSettings == null) {
 | 
				
			||||||
 | 
					                updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                if (bestApSettings.getDropInSnrPercentage() == null) {
 | 
				
			||||||
 | 
					                    updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (bestApSettings.getMinLoadFactor() == null) {
 | 
				
			||||||
 | 
					                    updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					        operations.add(new Insert(wifiRrmConfigDbTable, row));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					        OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LOG.debug("Provisioned rrm config with multicastRate {} Mbps for {}", multicastRate, freqBand);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (OperationResult res : result) {
 | 
				
			||||||
 | 
					            LOG.debug("Op Result {}", res);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (res instanceof InsertResult) {
 | 
				
			||||||
 | 
					                LOG.info("configureWifiRrm insert new row result {}", (res));
 | 
				
			||||||
 | 
					                // for insert, make sure it is actually in the table
 | 
				
			||||||
 | 
					                confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable);
 | 
				
			||||||
 | 
					            } else if (res instanceof ErrorResult) {
 | 
				
			||||||
 | 
					                LOG.error("configureWifiRrm error {}", (res));
 | 
				
			||||||
 | 
					                throw new RuntimeException("configureWifiRrm " + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AutoOrManualValue getSourcedValue(SourceType source, int profileValue, int equipmentValue) {
 | 
				
			||||||
 | 
					        if (source == SourceType.profile) {
 | 
				
			||||||
 | 
					            return AutoOrManualValue.createManualInstance(profileValue);
 | 
				
			||||||
 | 
					        } else if (source == SourceType.auto) {
 | 
				
			||||||
 | 
					            return AutoOrManualValue.createAutomaticInstance(equipmentValue);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return AutoOrManualValue.createManualInstance(equipmentValue);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void processNewChannelsRequest(OvsdbClient ovsdbClient, Map<RadioType, Integer> backupChannelMap,
 | 
				
			||||||
 | 
					            Map<RadioType, Integer> primaryChannelMap) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LOG.info("OvsdbDao::processNewChannelsRequest backup {} primary {}", backupChannelMap, primaryChannelMap);
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            backupChannelMap.entrySet().stream().forEach(c -> {
 | 
				
			||||||
 | 
					                String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey());
 | 
				
			||||||
 | 
					                List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					                conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
 | 
				
			||||||
 | 
					                Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					                updateColumns.put("backup_channel", new Atom<>(c.getValue()));
 | 
				
			||||||
 | 
					                Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					                operations.add(new Update(wifiRrmConfigDbTable, conditions, row));
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            primaryChannelMap.entrySet().stream().forEach(c -> {
 | 
				
			||||||
 | 
					                String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey());
 | 
				
			||||||
 | 
					                List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					                conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
 | 
				
			||||||
 | 
					                Map<String, Value> updateColumns = new HashMap<>();
 | 
				
			||||||
 | 
					                updateColumns.put("channel", new Atom<>(c.getValue()));
 | 
				
			||||||
 | 
					                Row row = new Row(updateColumns);
 | 
				
			||||||
 | 
					                operations.add(new Update(wifiRadioConfigDbTable, conditions, row));
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.info("Op Result {}", res);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.info("Updated ovsdb config for primary and backup channels.");
 | 
				
			||||||
 | 
					        } catch (ExecutionException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in processNewChannelsRequest", e);
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | InterruptedException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in processNewChannelsRequest", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributesMap) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        LOG.info("OvsdbDao::processCellSizeAttributesRequest cellSizeAttributes {}", cellSizeAttributesMap);
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            cellSizeAttributesMap.entrySet().stream().forEach(c -> {
 | 
				
			||||||
 | 
					                String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey());
 | 
				
			||||||
 | 
					                List<Condition> conditions = new ArrayList<>();
 | 
				
			||||||
 | 
					                conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
 | 
				
			||||||
 | 
					                Map<String, Value> updateRrmColumns = new HashMap<>();
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                CellSizeAttributes cellSizeAttributes = c.getValue();
 | 
				
			||||||
 | 
					                MulticastRate multicastRate = cellSizeAttributes.getMulticastRate();
 | 
				
			||||||
 | 
					                if (multicastRate == null || multicastRate == MulticastRate.auto) {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("mcast_rate", new Atom<>(0));
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("mcast_rate", new Atom<>(multicastRate.getId()));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                Integer probeResponseThreshold = cellSizeAttributes.getProbeResponseThresholdDb();
 | 
				
			||||||
 | 
					                if (probeResponseThreshold == null) {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                Integer clientDisconnectThreshold = cellSizeAttributes.getClientDisconnectThresholdDb();
 | 
				
			||||||
 | 
					                if (clientDisconnectThreshold == null) {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ManagementRate managementRate = cellSizeAttributes.getManagementRate();
 | 
				
			||||||
 | 
					                if (managementRate == null || managementRate == ManagementRate.auto) {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("beacon_rate", new Atom<>(0));
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateRrmColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                Row rowRrm = new Row(updateRrmColumns);
 | 
				
			||||||
 | 
					                operations.add(new Update(wifiRrmConfigDbTable, conditions, rowRrm));
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                Map<String, Value> updateRadioColumns = new HashMap<>();
 | 
				
			||||||
 | 
					                Integer txPower = cellSizeAttributes.getEirpTxPowerDb();
 | 
				
			||||||
 | 
					                if (txPower > 0) {
 | 
				
			||||||
 | 
					                    updateRadioColumns.put("tx_power", new Atom<>(txPower));
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    updateRadioColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                Row rowRadio = new Row(updateRadioColumns);
 | 
				
			||||||
 | 
					                operations.add(new Update(wifiRadioConfigDbTable, conditions, rowRadio));
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                LOG.info("Op Result {}", res);
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                if (res instanceof InsertResult) {
 | 
				
			||||||
 | 
					                    LOG.info("processCellSizeAttributesRequest insert new row result {}", (res));
 | 
				
			||||||
 | 
					                    // for insert, make sure it is actually in the table
 | 
				
			||||||
 | 
					                    confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable);
 | 
				
			||||||
 | 
					                } else if (res instanceof ErrorResult) {
 | 
				
			||||||
 | 
					                    LOG.error("processCellSizeAttributesRequest error {}", (res));
 | 
				
			||||||
 | 
					                    throw new RuntimeException("processCellSizeAttributesRequest " + ((ErrorResult) res).getError() +
 | 
				
			||||||
 | 
					                            " " + ((ErrorResult) res).getDetails());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.info("Updated ovsdb config for cell size attributes.");
 | 
				
			||||||
 | 
					        } catch (ExecutionException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in processCellSizeAttributesRequest", e);
 | 
				
			||||||
 | 
					        } catch (OvsdbClientException | TimeoutException | InterruptedException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in processCellSizeAttributesRequest", e);
 | 
				
			||||||
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void removeWifiRrm(OvsdbClient ovsdbClient) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Operation> operations = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            operations.add(new Delete(wifiRrmConfigDbTable));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
 | 
				
			||||||
 | 
					            OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            LOG.info("Removed rrm from {}:", wifiRrmConfigDbTable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (OperationResult res : result) {
 | 
				
			||||||
 | 
					                if (res instanceof UpdateResult) {
 | 
				
			||||||
 | 
					                    LOG.info("removeWifiRrm result {}", res);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        } catch (ExecutionException | OvsdbClientException | TimeoutException | InterruptedException e) {
 | 
				
			||||||
 | 
					            LOG.error("Error in removeRrm", 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