mirror of
				https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
				synced 2025-11-01 02:57:49 +00:00 
			
		
		
		
	Compare commits
	
		
			157 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 | ||
|   | 6ece024535 | ||
|   | 4837b0e026 | ||
|   | 0eca082a4d | ||
|   | db4672a9a2 | ||
|   | 9e58a9d7b7 | ||
|   | f083c3488c | ||
|   | b28655a5bd | ||
|   | 124b6054b5 | ||
|   | d79917d20f | ||
|   | c0bb71aed2 | ||
|   | 5e32798159 | 
| @@ -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; | ||||||
| @@ -88,7 +91,6 @@ import sts.OpensyncStats.Client; | |||||||
| import sts.OpensyncStats.ClientReport; | import sts.OpensyncStats.ClientReport; | ||||||
| import sts.OpensyncStats.EventReport; | import sts.OpensyncStats.EventReport; | ||||||
| import sts.OpensyncStats.EventReport.ClientAssocEvent; | import sts.OpensyncStats.EventReport.ClientAssocEvent; | ||||||
| import sts.OpensyncStats.EventType; |  | ||||||
| import sts.OpensyncStats.RadioBandType; | import sts.OpensyncStats.RadioBandType; | ||||||
| import sts.OpensyncStats.Report; | import sts.OpensyncStats.Report; | ||||||
|  |  | ||||||
| @@ -126,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; | ||||||
| @@ -162,20 +164,6 @@ public class OpensyncExternalIntegrationCloudTest { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Test |  | ||||||
|     public void testGetCustomerEquipment() { |  | ||||||
|  |  | ||||||
|         Equipment equipment = new Equipment(); |  | ||||||
|         equipment.setDetails(ApElementConfiguration.createWithDefaults()); |  | ||||||
|  |  | ||||||
|         Mockito.when( |  | ||||||
|                 equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))) |  | ||||||
|                 .thenReturn(equipment); |  | ||||||
|         assertNotNull(opensyncExternalIntegrationCloud.getCustomerEquipment("Test_Client_21P10C68818122")); |  | ||||||
|         assertNull(opensyncExternalIntegrationCloud.getCustomerEquipment("Test_Client_21P10C68818133")); |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Test |     @Test | ||||||
|     public void testApConnected() { |     public void testApConnected() { | ||||||
|  |  | ||||||
| @@ -476,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() { | ||||||
|  |  | ||||||
| @@ -508,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))) | ||||||
| @@ -521,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); | ||||||
| @@ -612,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); | ||||||
|          |          | ||||||
| @@ -644,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); | ||||||
| @@ -702,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); | ||||||
| @@ -713,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); | ||||||
| @@ -726,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); | ||||||
| @@ -741,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); | ||||||
| @@ -814,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); | ||||||
| @@ -827,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(); | ||||||
| @@ -851,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; | ||||||
| @@ -39,8 +39,13 @@ 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.customer.service.CustomerServiceInterface; | import com.telecominfraproject.wlan.customer.service.CustomerServiceInterface; | ||||||
| import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface; | import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface; | ||||||
|  | import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration; | ||||||
|  | import com.telecominfraproject.wlan.equipment.models.Equipment; | ||||||
| import com.telecominfraproject.wlan.firmware.FirmwareServiceInterface; | import com.telecominfraproject.wlan.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.routing.RoutingServiceInterface; | import com.telecominfraproject.wlan.routing.RoutingServiceInterface; | ||||||
| @@ -53,26 +58,28 @@ import com.telecominfraproject.wlan.status.models.Status; | |||||||
| import com.telecominfraproject.wlan.status.models.StatusDataType; | import com.telecominfraproject.wlan.status.models.StatusDataType; | ||||||
| 
 | 
 | ||||||
| import sts.OpensyncStats.AssocType; | import sts.OpensyncStats.AssocType; | ||||||
|  | import sts.OpensyncStats.ChannelSwitchReason; | ||||||
| import sts.OpensyncStats.Client; | import sts.OpensyncStats.Client; | ||||||
| import sts.OpensyncStats.ClientReport; | import sts.OpensyncStats.ClientReport; | ||||||
| import sts.OpensyncStats.DNSProbeMetric; | import sts.OpensyncStats.DNSProbeMetric; | ||||||
| import sts.OpensyncStats.EventReport; | import sts.OpensyncStats.EventReport; | ||||||
|  | import sts.OpensyncStats.EventReport.ChannelSwitchEvent; | ||||||
|  | import sts.OpensyncStats.EventReport.ClientAssocEvent; | ||||||
| import sts.OpensyncStats.NetworkProbe; | import sts.OpensyncStats.NetworkProbe; | ||||||
| import sts.OpensyncStats.RADIUSMetrics; | import sts.OpensyncStats.RADIUSMetrics; | ||||||
| import sts.OpensyncStats.RadioBandType; | import sts.OpensyncStats.RadioBandType; | ||||||
| import sts.OpensyncStats.Report; | import sts.OpensyncStats.Report; | ||||||
| import sts.OpensyncStats.StateUpDown; | import sts.OpensyncStats.StateUpDown; | ||||||
| import sts.OpensyncStats.VLANMetrics; | import sts.OpensyncStats.VLANMetrics; | ||||||
| import sts.OpensyncStats.EventReport.ClientAssocEvent; |  | ||||||
| 
 | 
 | ||||||
| @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; | ||||||
| @@ -98,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; | ||||||
| 
 | 
 | ||||||
| @@ -108,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(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| @@ -127,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)); |  | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @@ -164,6 +170,20 @@ public class OpensyncExternalIntegrationMqttMessageProcessorTest { | |||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|     public void testProcessMqttMessageStringReport() { |     public void testProcessMqttMessageStringReport() { | ||||||
|  |         Equipment equipment = new Equipment(); | ||||||
|  | 
 | ||||||
|  |         equipment.setDetails(ApElementConfiguration.createWithDefaults()); | ||||||
|  | 
 | ||||||
|  |         equipment.setId(1L); | ||||||
|  | 
 | ||||||
|  |         Mockito.when( | ||||||
|  |                 equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))) | ||||||
|  |                 .thenReturn(equipment); | ||||||
|  | 
 | ||||||
|  |         equipment.setProfileId(0L); | ||||||
|  | 
 | ||||||
|  |         Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment); | ||||||
|  |         Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); | ||||||
| 
 | 
 | ||||||
|         Report report = Report.newBuilder().setNodeID("21P10C68818122") |         Report report = Report.newBuilder().setNodeID("21P10C68818122") | ||||||
|                 .addAllClients(getOpensyncStatsClientReportsList()) |                 .addAllClients(getOpensyncStatsClientReportsList()) | ||||||
| @@ -190,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))) | ||||||
| @@ -203,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); | ||||||
| @@ -296,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); | ||||||
| @@ -313,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<>(); | ||||||
| 
 | 
 | ||||||
| @@ -338,18 +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(); | ||||||
|  |         channelSwitchEventBuilder.setBand(RadioBandType.BAND5GL).setChannel(40) | ||||||
|  |                 .setReason(ChannelSwitchReason.high_interference).setTimestampMs(System.currentTimeMillis()); | ||||||
|  | 
 | ||||||
|  |         List<ChannelSwitchEvent> channelSwitchEventList = new ArrayList<>(); | ||||||
|  |         channelSwitchEventList.add(channelSwitchEventBuilder.build()); | ||||||
|  | 
 | ||||||
|         eventReportBuilder.addAllClientSession(clientSessionList); |         eventReportBuilder.addAllClientSession(clientSessionList); | ||||||
|  |         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": 5, |     "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,55 +1,58 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 23, |     "id": 8, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "equipment_ap", |     "profileType": "equipment_ap", | ||||||
| 	"name": "ApProfile-3-radios-passpoint", |     "name": "ApProfile-3-radios", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "ApNetworkConfiguration", |         "model_type": "ApNetworkConfiguration", | ||||||
| 		"networkConfigVersion": "AP-1", |         "networkConfigVersion": "AP-1", | ||||||
| 		"equipmentType": "AP", |         "equipmentType": "AP", | ||||||
| 		"vlanNative": true, |         "vlanNative": true, | ||||||
| 		"vlan": 0, |         "vlan": 0, | ||||||
| 		"ntpServer": { |         "ntpServer": { | ||||||
| 			"model_type": "AutoOrManualString", |             "model_type": "AutoOrManualString", | ||||||
| 			"auto": true, |             "auto": true, | ||||||
| 			"value": "pool.ntp.org" |             "value": "pool.ntp.org" | ||||||
| 		}, |         }, | ||||||
| 		"syslogRelay": null, |         "syslogRelay": null, | ||||||
| 		"rtlsSettings": null, |         "rtlsSettings": null, | ||||||
| 		"syntheticClientEnabled": true, |         "syntheticClientEnabled": true, | ||||||
| 		"ledControlEnabled": true, |         "ledControlEnabled": true, | ||||||
| 		"equipmentDiscovery": false, |         "equipmentDiscovery": false, | ||||||
| 		"greTunnelName": null, |         "radioMap": { | ||||||
| 		"greParentIfName": null, |             "is2dot4GHz": { | ||||||
| 		"greLocalInetAddr": null, |                 "model_type": "RadioProfileConfiguration", | ||||||
| 		"greRemoteInetAddr": null, |                 "bestApEnabled": true, | ||||||
| 		"greRemoteMacAddr": null, |                 "bestAPSteerType": "both" | ||||||
| 		"radioMap": { |             }, | ||||||
| 			"is2dot4GHz": { |             "is5GHzU": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzL": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             } | ||||||
| 			"is5GHzL": { |         }, | ||||||
| 				"model_type": "RadioProfileConfiguration", |         "greTunnelConfigurations": [ | ||||||
| 				"bestApEnabled": true, |             { | ||||||
| 				"bestAPSteerType": "both" |                 "model_type": "GreTunnelConfiguration", | ||||||
| 			} |                 "greTunnelName": "gre1", | ||||||
| 		}, |                 "greRemoteInetAddr": "192.168.1.101", | ||||||
| 		"profileType": "equipment_ap" |                 "vlanIdsInGreTunnel": [ | ||||||
| 	}, |                     100 | ||||||
| 	"createdTimestamp": 1605711197140, |                 ] | ||||||
| 	"lastModifiedTimestamp": 1605711197140, |             } | ||||||
| 	"childProfileIds": [ |         ], | ||||||
| 		16, |         "profileType": "equipment_ap" | ||||||
| 		21, |     }, | ||||||
| 		22, |     "createdTimestamp": 1612285248925, | ||||||
| 		15 |     "lastModifiedTimestamp": 1612285628377, | ||||||
| 	] |     "childProfileIds": [ | ||||||
| } |         2, | ||||||
|  |         4 | ||||||
|  |     ] | ||||||
|  | } | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| [ |  | ||||||
| { |  | ||||||
|     "model_type": "Profile", |  | ||||||
|     "id": 100, |  | ||||||
|     "customerId": 2, |  | ||||||
|     "profileType": "bonjour", |  | ||||||
|     "name": "Bonjour-gateway", |  | ||||||
|     "details": { |  | ||||||
|         "model_type": "BonjourGatewayProfile", |  | ||||||
|         "profileDescription": "Bonjour Gateway Configuration for Design Testing", |  | ||||||
|         "profileType": "bonjour", |  | ||||||
|         "bonjourServices": [ |  | ||||||
|             { |  | ||||||
|                 "model_type": "BonjourServiceSet", |  | ||||||
|                 "vlanId": 1, |  | ||||||
|                 "supportAllServices": false, |  | ||||||
|                 "serviceNames": [ |  | ||||||
|                     "AirPort", |  | ||||||
|                     "SFTP", |  | ||||||
|                     "SSH" |  | ||||||
|                 ] |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     "createdTimestamp": 1599234550774, |  | ||||||
|     "lastModifiedTimestamp": 1599234550774, |  | ||||||
|     "childProfileIds": [] |  | ||||||
| } |  | ||||||
| ] |  | ||||||
| @@ -1,135 +1,58 @@ | |||||||
| [ | [ | ||||||
| { |   { | ||||||
|     "model_type": "Profile", |     "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,72 +0,0 @@ | |||||||
| [ |  | ||||||
| { |  | ||||||
|         "model_type": "Profile", |  | ||||||
|         "id": 24, |  | ||||||
|         "customerId": 2, |  | ||||||
|         "profileType": "passpoint", |  | ||||||
|         "name": "TipWlan-Hotspot20-Config", |  | ||||||
|         "details": { |  | ||||||
|             "model_type": "PasspointProfile", |  | ||||||
|             "enableInterworkingAndHs20": true, |  | ||||||
|             "hessid": null, |  | ||||||
|             "additionalStepsRequiredForAccess": 0, |  | ||||||
|             "deauthRequestTimeout": 0, |  | ||||||
|             "operatingClass": 0, |  | ||||||
|             "termsAndConditionsFile": { |  | ||||||
|                 "model_type": "ManagedFileInfo", |  | ||||||
|                 "md5checksum": null, |  | ||||||
|                 "lastModifiedTimestamp": null, |  | ||||||
|                 "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", |  | ||||||
|                 "fileCategory": "ExternalPolicyConfiguration", |  | ||||||
|                 "fileType": "TEXT", |  | ||||||
|                 "altSlot": false |  | ||||||
|             }, |  | ||||||
|             "whitelistDomain": null, |  | ||||||
|             "emergencyServicesReachable": true, |  | ||||||
|             "unauthenticatedEmergencyServiceAccessible": false, |  | ||||||
|             "internetConnectivity": true, |  | ||||||
|             "connectionCapabilitySet": [ |  | ||||||
|                 { |  | ||||||
|                     "model_type": "PasspointConnectionCapability", |  | ||||||
|                     "connectionCapabilitiesPortNumber": 8888, |  | ||||||
|                     "connectionCapabilitiesIpProtocol": "TCP", |  | ||||||
|                     "connectionCapabilitiesStatus": "open" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "ipAddressTypeAvailability": "public_IPv4_address_available", |  | ||||||
|             "qosMapSetConfiguration": null, |  | ||||||
|             "apGeospatialLocation": null, |  | ||||||
|             "apCivicLocation": null, |  | ||||||
|             "apPublicLocationIdUri": null, |  | ||||||
|             "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", |  | ||||||
|             "anqpDomainId": 1234, |  | ||||||
|             "disableDownstreamGroupAddressedForwarding": false, |  | ||||||
|             "enable2pt4GHz": true, |  | ||||||
|             "enable5GHz": true, |  | ||||||
|             "associatedAccessSsidNames": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "osuSsidName": "TipWlan-cloud-hotspot-osu", |  | ||||||
|             "operatorProfileName": "TipWlan-Hotspot20-Operator", |  | ||||||
|             "venueProfileName": "TipWlan-Hotspot20-Venue", |  | ||||||
|             "idProviderProfileNames": [ |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider-2", |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider" |  | ||||||
|             ], |  | ||||||
|             "accessNetworkType": "free_public_network", |  | ||||||
|             "networkAuthenticationType": "acceptance_of_terms_and_conditions", |  | ||||||
|             "associatedSsids": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "profileType": "passpoint" |  | ||||||
|         }, |  | ||||||
|         "createdTimestamp": 1605711223339, |  | ||||||
|         "lastModifiedTimestamp": 1605711223339, |  | ||||||
|         "childProfileIds": [ |  | ||||||
|             17, |  | ||||||
|             18, |  | ||||||
|             19, |  | ||||||
|             20 |  | ||||||
|         ] |  | ||||||
|     } |  | ||||||
| ] |  | ||||||
| @@ -1,270 +0,0 @@ | |||||||
| [ |  | ||||||
| 	{ |  | ||||||
| 		"model_type": "Profile", |  | ||||||
| 		"id": 19, |  | ||||||
| 		"customerId": 2, |  | ||||||
| 		"profileType": "passpoint_osu_id_provider", |  | ||||||
| 		"name": "TipWlan-Hotspot20-OSU-Provider", |  | ||||||
| 		"details": { |  | ||||||
| 			"model_type": "PasspointOsuProviderProfile", |  | ||||||
| 			"domainName": "rogers.com", |  | ||||||
| 			"mccMncList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointMccMnc", |  | ||||||
| 					"mcc": 302, |  | ||||||
| 					"mnc": 720, |  | ||||||
| 					"iso": "ca", |  | ||||||
| 					"country": "Canada", |  | ||||||
| 					"countryCode": 1, |  | ||||||
| 					"network": "Rogers AT&T Wireless", |  | ||||||
| 					"mccMncPairing": "302,720" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"naiRealmList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointNaiRealmInformation", |  | ||||||
| 					"naiRealms": [ |  | ||||||
| 						"rogers.com" |  | ||||||
| 					], |  | ||||||
| 					"encoding": 0, |  | ||||||
| 					"eapMethods": [ |  | ||||||
| 						"EAP-TTLS with username/password", |  | ||||||
| 						"EAP-TLS with certificate" |  | ||||||
| 					], |  | ||||||
| 					"eapMap": { |  | ||||||
| 						"EAP-TTLS with username/password": [ |  | ||||||
| 							"Credential Type:username/password", |  | ||||||
| 							"Non-EAP Inner Authentication Type:MSCHAPV2" |  | ||||||
| 						], |  | ||||||
| 						"EAP-TLS with certificate": [ |  | ||||||
| 							"Credential Type:Certificate" |  | ||||||
| 						] |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuIconList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "eng", |  | ||||||
| 					"iconLocale": "en_CA", |  | ||||||
| 					"iconName": "icon32eng", |  | ||||||
| 					"filePath": "/tmp/icon32eng.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32eng.png", |  | ||||||
| 					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "fra", |  | ||||||
| 					"iconLocale": "fr_CA", |  | ||||||
| 					"iconName": "icon32fra", |  | ||||||
| 					"filePath": "/tmp/icon32fra.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32fra.png", |  | ||||||
| 					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "eng", |  | ||||||
| 					"iconLocale": "en_US", |  | ||||||
| 					"iconName": "icon32usa", |  | ||||||
| 					"filePath": "/tmp/icon32usa.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32usa.png", |  | ||||||
| 					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuServerUri": "https://example.com/osu/rogers", |  | ||||||
| 			"osuFriendlyName": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Example provider rogers", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "eng:Example provider rogers" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Exemple de fournisseur rogers", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "fra:Exemple de fournisseur rogers" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuNaiStandalone": "anonymous@rogers.com", |  | ||||||
| 			"osuNaiShared": "anonymous@rogers.com", |  | ||||||
| 			"osuMethodList": [ |  | ||||||
| 				1, |  | ||||||
| 				0 |  | ||||||
| 			], |  | ||||||
| 			"osuServiceDescription": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Example services rogers", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "eng:Example services rogers" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Exemples de services rogers", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "fra:Exemples de services rogers" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"roamingOi": [ |  | ||||||
| 				1, |  | ||||||
| 				2, |  | ||||||
| 				3, |  | ||||||
| 				4 |  | ||||||
| 			], |  | ||||||
| 			"profileType": "passpoint_osu_id_provider" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711165325, |  | ||||||
| 		"lastModifiedTimestamp": 1605711165325, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	}, |  | ||||||
| 	{ |  | ||||||
| 		"model_type": "Profile", |  | ||||||
| 		"id": 20, |  | ||||||
| 		"customerId": 2, |  | ||||||
| 		"profileType": "passpoint_osu_id_provider", |  | ||||||
| 		"name": "TipWlan-Hotspot20-OSU-Provider-2", |  | ||||||
| 		"details": { |  | ||||||
| 			"model_type": "PasspointOsuProviderProfile", |  | ||||||
| 			"domainName": "telus.com", |  | ||||||
| 			"mccMncList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointMccMnc", |  | ||||||
| 					"mcc": 302, |  | ||||||
| 					"mnc": 220, |  | ||||||
| 					"iso": "ca", |  | ||||||
| 					"country": "Canada", |  | ||||||
| 					"countryCode": 1, |  | ||||||
| 					"network": "Telus Mobility", |  | ||||||
| 					"mccMncPairing": "302,220" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"naiRealmList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointNaiRealmInformation", |  | ||||||
| 					"naiRealms": [ |  | ||||||
| 						"telus.com" |  | ||||||
| 					], |  | ||||||
| 					"encoding": 0, |  | ||||||
| 					"eapMethods": [ |  | ||||||
| 						"EAP-TTLS with username/password", |  | ||||||
| 						"EAP-TLS with certificate" |  | ||||||
| 					], |  | ||||||
| 					"eapMap": { |  | ||||||
| 						"EAP-TTLS with username/password": [ |  | ||||||
| 							"Credential Type:username/password", |  | ||||||
| 							"Non-EAP Inner Authentication Type:MSCHAPV2" |  | ||||||
| 						], |  | ||||||
| 						"EAP-TLS with certificate": [ |  | ||||||
| 							"Credential Type:Certificate" |  | ||||||
| 						] |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuIconList": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "eng", |  | ||||||
| 					"iconLocale": "en_CA", |  | ||||||
| 					"iconName": "icon32eng", |  | ||||||
| 					"filePath": "/tmp/icon32eng.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32eng.png", |  | ||||||
| 					"hs20IconString": "32:32:eng:image/png:icon32eng:/tmp/icon32eng.png" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "fra", |  | ||||||
| 					"iconLocale": "fr_CA", |  | ||||||
| 					"iconName": "icon32fra", |  | ||||||
| 					"filePath": "/tmp/icon32fra.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32fra.png", |  | ||||||
| 					"hs20IconString": "32:32:fra:image/png:icon32fra:/tmp/icon32fra.png" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointOsuIcon", |  | ||||||
| 					"iconWidth": 32, |  | ||||||
| 					"iconHeight": 32, |  | ||||||
| 					"languageCode": "eng", |  | ||||||
| 					"iconLocale": "en_US", |  | ||||||
| 					"iconName": "icon32usa", |  | ||||||
| 					"filePath": "/tmp/icon32usa.png", |  | ||||||
| 					"imageUrl": "https://localhost:9096/icon32usa.png", |  | ||||||
| 					"hs20IconString": "32:32:eng:image/png:icon32usa:/tmp/icon32usa.png" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuServerUri": "https://example.com/osu/telus", |  | ||||||
| 			"osuFriendlyName": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Example provider telus", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "eng:Example provider telus" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Exemple de fournisseur telus", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "fra:Exemple de fournisseur telus" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"osuNaiStandalone": "anonymous@telus.com", |  | ||||||
| 			"osuNaiShared": "anonymous@telus.com", |  | ||||||
| 			"osuMethodList": [ |  | ||||||
| 				1, |  | ||||||
| 				0 |  | ||||||
| 			], |  | ||||||
| 			"osuServiceDescription": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Example services telus", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "eng:Example services telus" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Exemples de services telus", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "fra:Exemples de services telus" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"roamingOi": [ |  | ||||||
| 				1, |  | ||||||
| 				2, |  | ||||||
| 				3, |  | ||||||
| 				4 |  | ||||||
| 			], |  | ||||||
| 			"profileType": "passpoint_osu_id_provider" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711165330, |  | ||||||
| 		"lastModifiedTimestamp": 1605711165330, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,299 +0,0 @@ | |||||||
| [ |  | ||||||
| 	{ |  | ||||||
| 		"model_type": "Profile", |  | ||||||
| 		"id": 22, |  | ||||||
| 		"customerId": 2, |  | ||||||
| 		"profileType": "service_metrics_collection_config", |  | ||||||
| 		"name": "Metrics-Profile-Passpoint", |  | ||||||
| 		"details": { |  | ||||||
| 			"model_type": "ServiceMetricsCollectionConfigProfile", |  | ||||||
| 			"radioTypes": [ |  | ||||||
| 				"is5GHzL", |  | ||||||
| 				"is2dot4GHz", |  | ||||||
| 				"is5GHzU" |  | ||||||
| 			], |  | ||||||
| 			"serviceMetricDataTypes": [ |  | ||||||
| 				"ApNode", |  | ||||||
| 				"ApSsid", |  | ||||||
| 				"Client", |  | ||||||
| 				"Channel", |  | ||||||
| 				"Neighbour" |  | ||||||
| 			], |  | ||||||
| 			"metricConfigParameterMap": { |  | ||||||
| 				"ApNode": [ |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					} |  | ||||||
| 				], |  | ||||||
| 				"ApSsid": [ |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					} |  | ||||||
| 				], |  | ||||||
| 				"Client": [ |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "Client" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Client" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Client" |  | ||||||
| 					} |  | ||||||
| 				], |  | ||||||
| 				"Channel": [ |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Channel", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					} |  | ||||||
| 				], |  | ||||||
| 				"Neighbour": [ |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					} |  | ||||||
| 				] |  | ||||||
| 			}, |  | ||||||
| 			"profileType": "service_metrics_collection_config" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711195528, |  | ||||||
| 		"lastModifiedTimestamp": 1605711195528, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,37 +0,0 @@ | |||||||
| [ |  | ||||||
| 	{ |  | ||||||
| 		"model_type": "Profile", |  | ||||||
| 		"id": 17, |  | ||||||
| 		"customerId": 2, |  | ||||||
| 		"profileType": "passpoint_operator", |  | ||||||
| 		"name": "TipWlan-Hotspot20-Operator", |  | ||||||
| 		"details": { |  | ||||||
| 			"model_type": "PasspointOperatorProfile", |  | ||||||
| 			"serverOnlyAuthenticatedL2EncryptionNetwork": false, |  | ||||||
| 			"x509CertificateLocation": "/etc/ca.pem", |  | ||||||
| 			"operatorFriendlyName": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Default friendly passpoint_operator name", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "eng:Default friendly passpoint_operator name" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointDuple", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Nom de l'opérateur convivial par défaut", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"asDuple": "fra:Nom de l'opérateur convivial par défaut" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"profileType": "passpoint_operator" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164952, |  | ||||||
| 		"lastModifiedTimestamp": 1605711164952, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| [ |  | ||||||
|         { |  | ||||||
|             "model_type": "Profile", |  | ||||||
|             "id": 1, |  | ||||||
|             "customerId": 2, |  | ||||||
|             "profileType": "radius", |  | ||||||
|             "name": "Radius-Profile", |  | ||||||
|             "details": { |  | ||||||
|                 "model_type": "RadiusProfile", |  | ||||||
|                 "subnetConfiguration": null, |  | ||||||
|                 "serviceRegionMap": { |  | ||||||
|                     "Ottawa": { |  | ||||||
|                         "model_type": "RadiusServiceRegion", |  | ||||||
|                         "serverMap": { |  | ||||||
|                             "Radius-Profile": [ |  | ||||||
|                                 { |  | ||||||
|                                     "model_type": "RadiusServer", |  | ||||||
|                                     "ipAddress": "192.168.0.1", |  | ||||||
|                                     "secret": "testing123", |  | ||||||
|                                     "authPort": 1812, |  | ||||||
|                                     "timeout": null |  | ||||||
|                                 } |  | ||||||
|                             ] |  | ||||||
|                         }, |  | ||||||
|                         "regionName": "Ottawa" |  | ||||||
|                     } |  | ||||||
|                 }, |  | ||||||
|                 "profileType": "radius" |  | ||||||
|             }, |  | ||||||
|             "createdTimestamp": 1601961451668, |  | ||||||
|             "lastModifiedTimestamp": 1601961451668, |  | ||||||
|             "childProfileIds": [] |  | ||||||
|         } |  | ||||||
| ] |  | ||||||
| @@ -1,205 +1,204 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 21, |     "id": 4, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "rf", |     "profileType": "rf", | ||||||
| 	"name": "TipWlan-rf-passpoint", |     "name": "TipWlan-rf", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "RfConfiguration", |         "model_type": "RfConfiguration", | ||||||
| 		"rfConfigMap": { |         "rfConfigMap": { | ||||||
| 			"is5GHz": { |             "is5GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHz", |                 "radioType": "is5GHz", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is2dot4GHz": { |             "is2dot4GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is2dot4GHz", |                 "radioType": "is2dot4GHz", | ||||||
| 				"radioMode": "modeN", |                 "radioMode": "modeN", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is20MHz", |                 "channelBandwidth": "is20MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 20, |                     "dropInSnrPercentage": 20, | ||||||
| 					"minLoadFactor": 50 |                     "minLoadFactor": 50 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzU": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzU", |                 "radioType": "is5GHzU", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzL": { |             "is5GHzL": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzL", |                 "radioType": "is5GHzL", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			} |             } | ||||||
| 		}, |         }, | ||||||
| 		"profileType": "rf" |         "profileType": "rf" | ||||||
| 	}, |     }, | ||||||
| 	"createdTimestamp": 1605711191976, |     "createdTimestamp": 1612285248650, | ||||||
| 	"lastModifiedTimestamp": 1605711191976, |     "lastModifiedTimestamp": 1612285248650, | ||||||
| 	"childProfileIds": [ |     "childProfileIds": [] | ||||||
| 	] | } | ||||||
| } |  | ||||||
| @@ -1,134 +1,75 @@ | |||||||
| [ | [ | ||||||
| 	{ | { | ||||||
| 		"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 		"id": 15, |     "id": 2, | ||||||
| 		"customerId": 2, |     "customerId": 2, | ||||||
| 		"profileType": "ssid", |     "profileType": "ssid", | ||||||
| 		"name": "TipWlan-cloud-hotspot-access", |     "name": "TipWlan-cloud-3-radios", | ||||||
| 		"details": { |     "details": { | ||||||
| 			"model_type": "SsidConfiguration", |         "model_type": "SsidConfiguration", | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-access", |         "ssid": "TipWlan-cloud-3-radios", | ||||||
| 			"appliedRadios": [ |         "appliedRadios": [ | ||||||
| 				"is5GHzL", |             "is5GHzU", | ||||||
| 				"is5GHzU" |             "is2dot4GHz", | ||||||
| 			], |             "is5GHzL" | ||||||
| 			"ssidAdminState": "enabled", |         ], | ||||||
| 			"secureMode": "wpa2PSK", |         "ssidAdminState": "enabled", | ||||||
| 			"vlanId": 1, |         "secureMode": "wpa2OnlyPSK", | ||||||
| 			"keyStr": "testing123", |         "vlanId": 1, | ||||||
| 			"broadcastSsid": "enabled", |         "keyStr": "openwifi", | ||||||
| 			"keyRefresh": 0, |         "broadcastSsid": "enabled", | ||||||
| 			"noLocalSubnets": false, |         "keyRefresh": 0, | ||||||
| 			"radiusServiceName": null, |         "noLocalSubnets": false, | ||||||
| 			"radiusAccountingServiceName": null, |         "radiusServiceId": 0, | ||||||
| 			"captivePortalId": null, |         "radiusAcountingServiceInterval": 60, | ||||||
| 			"bandwidthLimitDown": 0, |         "captivePortalId": null, | ||||||
| 			"bandwidthLimitUp": 0, |         "bandwidthLimitDown": 0, | ||||||
| 			"clientBandwidthLimitDown": 0, |         "bandwidthLimitUp": 0, | ||||||
| 			"clientBandwidthLimitUp": 0, |         "clientBandwidthLimitDown": 0, | ||||||
| 			"videoTrafficOnly": false, |         "clientBandwidthLimitUp": 0, | ||||||
| 			"radioBasedConfigs": { |         "videoTrafficOnly": false, | ||||||
| 				"is5GHz": { |         "radioBasedConfigs": { | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzU": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is2dot4GHz": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is2dot4GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzU": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzL": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzL": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				} |                 "enable80211v": null | ||||||
| 			}, |             } | ||||||
| 			"bonjourGatewayProfileId": null, |         }, | ||||||
| 			"enable80211w": null, |         "bonjourGatewayProfileId": null, | ||||||
| 			"wepConfig": null, |         "enable80211w": null, | ||||||
| 			"forwardMode": null, |         "wepConfig": null, | ||||||
| 			"profileType": "ssid" |         "forwardMode": "BRIDGE", | ||||||
| 		}, |         "profileType": "ssid", | ||||||
| 		"createdTimestamp": 1605711164949, |         "radiusClientConfiguration": { | ||||||
| 		"lastModifiedTimestamp": 1605711223372, |             "model_type": "RadiusNasConfiguration", | ||||||
| 		"childProfileIds": [ |             "nasClientId": "DEFAULT", | ||||||
| 			24 |             "nasClientIp": "WAN_IP", | ||||||
| 		] |             "userDefinedNasId": null, | ||||||
| 	}, |             "userDefinedNasIp": null, | ||||||
| 	{ |             "operatorId": null | ||||||
| 		"model_type": "Profile", |         } | ||||||
| 		"id": 16, |     }, | ||||||
| 		"customerId": 2, |     "createdTimestamp": 1612285248638, | ||||||
| 		"profileType": "ssid", |     "lastModifiedTimestamp": 1612285248638, | ||||||
| 		"name": "TipWlan-cloud-hotspot-osu", |     "childProfileIds": [] | ||||||
| 		"details": { | } | ||||||
| 			"model_type": "SsidConfiguration", |  | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-osu", |  | ||||||
| 			"appliedRadios": [ |  | ||||||
| 				"is2dot4GHz" |  | ||||||
| 			], |  | ||||||
| 			"ssidAdminState": "enabled", |  | ||||||
| 			"secureMode": "open", |  | ||||||
| 			"vlanId": 1, |  | ||||||
| 			"keyStr": null, |  | ||||||
| 			"broadcastSsid": "enabled", |  | ||||||
| 			"keyRefresh": 0, |  | ||||||
| 			"noLocalSubnets": false, |  | ||||||
| 			"radiusServiceName": null, |  | ||||||
| 			"radiusAccountingServiceName": null, |  | ||||||
| 			"captivePortalId": null, |  | ||||||
| 			"bandwidthLimitDown": 0, |  | ||||||
| 			"bandwidthLimitUp": 0, |  | ||||||
| 			"clientBandwidthLimitDown": 0, |  | ||||||
| 			"clientBandwidthLimitUp": 0, |  | ||||||
| 			"videoTrafficOnly": false, |  | ||||||
| 			"radioBasedConfigs": { |  | ||||||
| 				"is5GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is2dot4GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzU": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzL": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			"bonjourGatewayProfileId": null, |  | ||||||
| 			"enable80211w": null, |  | ||||||
| 			"wepConfig": null, |  | ||||||
| 			"forwardMode": null, |  | ||||||
| 			"profileType": "ssid" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164950, |  | ||||||
| 		"lastModifiedTimestamp": 1605711171732, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 			19, |  | ||||||
| 			20 |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -1,43 +0,0 @@ | |||||||
| [ |  | ||||||
| 	{ |  | ||||||
| 		"model_type": "Profile", |  | ||||||
| 		"id": 18, |  | ||||||
| 		"customerId": 2, |  | ||||||
| 		"profileType": "passpoint_venue", |  | ||||||
| 		"name": "TipWlan-Hotspot20-Venue", |  | ||||||
| 		"details": { |  | ||||||
| 			"model_type": "PasspointVenueProfile", |  | ||||||
| 			"venueNameSet": [ |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointVenueName", |  | ||||||
| 					"locale": "fr_CA", |  | ||||||
| 					"dupleIso3Language": "fra", |  | ||||||
| 					"dupleName": "Exemple de lieu", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"venueUrl": "http://www.example.com/info-fra", |  | ||||||
| 					"asDuple": "fra:Exemple de lieu" |  | ||||||
| 				}, |  | ||||||
| 				{ |  | ||||||
| 					"model_type": "PasspointVenueName", |  | ||||||
| 					"locale": "en_CA", |  | ||||||
| 					"dupleIso3Language": "eng", |  | ||||||
| 					"dupleName": "Example passpoint_venue", |  | ||||||
| 					"defaultDupleSeparator": ":", |  | ||||||
| 					"venueUrl": "http://www.example.com/info-eng", |  | ||||||
| 					"asDuple": "eng:Example passpoint_venue" |  | ||||||
| 				} |  | ||||||
| 			], |  | ||||||
| 			"venueTypeAssignment": { |  | ||||||
| 				"model_type": "ProfileVenueTypeAssignment", |  | ||||||
| 				"venueDescription": "Research and Development Facility", |  | ||||||
| 				"venueGroupId": 2, |  | ||||||
| 				"venueTypeId": 8 |  | ||||||
| 			}, |  | ||||||
| 			"profileType": "passpoint_venue" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164956, |  | ||||||
| 		"lastModifiedTimestamp": 1605711164956, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -3,7 +3,7 @@ | |||||||
|   <parent> |   <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 | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
|         <listEntry value="1"/> |         <listEntry value="1"/> | ||||||
|     </listAttribute> |     </listAttribute> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> | ||||||
|  |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> | ||||||
|     <listAttribute key="org.eclipse.jdt.launching.CLASSPATH"> |     <listAttribute key="org.eclipse.jdt.launching.CLASSPATH"> | ||||||
|   | |||||||
| @@ -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": 5, |     "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,55 +1,58 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 23, |     "id": 8, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "equipment_ap", |     "profileType": "equipment_ap", | ||||||
| 	"name": "ApProfile-3-radios-passpoint", |     "name": "ApProfile-3-radios", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "ApNetworkConfiguration", |         "model_type": "ApNetworkConfiguration", | ||||||
| 		"networkConfigVersion": "AP-1", |         "networkConfigVersion": "AP-1", | ||||||
| 		"equipmentType": "AP", |         "equipmentType": "AP", | ||||||
| 		"vlanNative": true, |         "vlanNative": true, | ||||||
| 		"vlan": 0, |         "vlan": 0, | ||||||
| 		"ntpServer": { |         "ntpServer": { | ||||||
| 			"model_type": "AutoOrManualString", |             "model_type": "AutoOrManualString", | ||||||
| 			"auto": true, |             "auto": true, | ||||||
| 			"value": "pool.ntp.org" |             "value": "pool.ntp.org" | ||||||
| 		}, |         }, | ||||||
| 		"syslogRelay": null, |         "syslogRelay": null, | ||||||
| 		"rtlsSettings": null, |         "rtlsSettings": null, | ||||||
| 		"syntheticClientEnabled": true, |         "syntheticClientEnabled": true, | ||||||
| 		"ledControlEnabled": true, |         "ledControlEnabled": true, | ||||||
| 		"equipmentDiscovery": false, |         "equipmentDiscovery": false, | ||||||
| 		"greTunnelName": null, |         "radioMap": { | ||||||
| 		"greParentIfName": null, |             "is2dot4GHz": { | ||||||
| 		"greLocalInetAddr": null, |                 "model_type": "RadioProfileConfiguration", | ||||||
| 		"greRemoteInetAddr": null, |                 "bestApEnabled": true, | ||||||
| 		"greRemoteMacAddr": null, |                 "bestAPSteerType": "both" | ||||||
| 		"radioMap": { |             }, | ||||||
| 			"is2dot4GHz": { |             "is5GHzU": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzL": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             } | ||||||
| 			"is5GHzL": { |         }, | ||||||
| 				"model_type": "RadioProfileConfiguration", |         "greTunnelConfigurations": [ | ||||||
| 				"bestApEnabled": true, |             { | ||||||
| 				"bestAPSteerType": "both" |                 "model_type": "GreTunnelConfiguration", | ||||||
| 			} |                 "greTunnelName": "gre1", | ||||||
| 		}, |                 "greRemoteInetAddr": "192.168.1.101", | ||||||
| 		"profileType": "equipment_ap" |                 "vlanIdsInGreTunnel": [ | ||||||
| 	}, |                     100 | ||||||
| 	"createdTimestamp": 1605711197140, |                 ] | ||||||
| 	"lastModifiedTimestamp": 1605711197140, |             } | ||||||
| 	"childProfileIds": [ |         ], | ||||||
| 		16, |         "profileType": "equipment_ap" | ||||||
| 		21, |     }, | ||||||
| 		22, |     "createdTimestamp": 1612285248925, | ||||||
| 		15 |     "lastModifiedTimestamp": 1612285628377, | ||||||
| 	] |     "childProfileIds": [ | ||||||
| } |         2, | ||||||
|  |         4 | ||||||
|  |     ] | ||||||
|  | } | ||||||
| @@ -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,72 +1,71 @@ | |||||||
| [ | [ | ||||||
| { | { | ||||||
|         "model_type": "Profile", |     "model_type": "Profile", | ||||||
|         "id": 24, |     "id": 37, | ||||||
|         "customerId": 2, |     "customerId": 2, | ||||||
|         "profileType": "passpoint", |     "profileType": "passpoint", | ||||||
|         "name": "TipWlan-Hotspot20-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, | ||||||
|             "additionalStepsRequiredForAccess": 0, |         "passpointAccessNetworkType": "free_public_network", | ||||||
|             "deauthRequestTimeout": 0, |         "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|             "operatingClass": 0, |         "additionalStepsRequiredForAccess": 0, | ||||||
|             "termsAndConditionsFile": { |         "deauthRequestTimeout": 0, | ||||||
|                 "model_type": "ManagedFileInfo", |         "operatingClass": 0, | ||||||
|                 "md5checksum": null, |         "termsAndConditionsFile": { | ||||||
|                 "lastModifiedTimestamp": null, |             "model_type": "ManagedFileInfo", | ||||||
|                 "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", |             "md5checksum": null, | ||||||
|                 "fileCategory": "ExternalPolicyConfiguration", |             "lastModifiedTimestamp": null, | ||||||
|                 "fileType": "TEXT", |             "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", | ||||||
|                 "altSlot": false |             "fileCategory": "ExternalPolicyConfiguration", | ||||||
|             }, |             "fileType": "TEXT", | ||||||
|             "whitelistDomain": null, |             "altSlot": false | ||||||
|             "emergencyServicesReachable": true, |  | ||||||
|             "unauthenticatedEmergencyServiceAccessible": false, |  | ||||||
|             "internetConnectivity": true, |  | ||||||
|             "connectionCapabilitySet": [ |  | ||||||
|                 { |  | ||||||
|                     "model_type": "PasspointConnectionCapability", |  | ||||||
|                     "connectionCapabilitiesPortNumber": 8888, |  | ||||||
|                     "connectionCapabilitiesIpProtocol": "TCP", |  | ||||||
|                     "connectionCapabilitiesStatus": "open" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "ipAddressTypeAvailability": "public_IPv4_address_available", |  | ||||||
|             "qosMapSetConfiguration": null, |  | ||||||
|             "apGeospatialLocation": null, |  | ||||||
|             "apCivicLocation": null, |  | ||||||
|             "apPublicLocationIdUri": null, |  | ||||||
|             "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", |  | ||||||
|             "anqpDomainId": 1234, |  | ||||||
|             "disableDownstreamGroupAddressedForwarding": false, |  | ||||||
|             "enable2pt4GHz": true, |  | ||||||
|             "enable5GHz": true, |  | ||||||
|             "associatedAccessSsidNames": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "osuSsidName": "TipWlan-cloud-hotspot-osu", |  | ||||||
|             "operatorProfileName": "TipWlan-Hotspot20-Operator", |  | ||||||
|             "venueProfileName": "TipWlan-Hotspot20-Venue", |  | ||||||
|             "idProviderProfileNames": [ |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider-2", |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider" |  | ||||||
|             ], |  | ||||||
|             "accessNetworkType": "free_public_network", |  | ||||||
|             "networkAuthenticationType": "acceptance_of_terms_and_conditions", |  | ||||||
|             "associatedSsids": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "profileType": "passpoint" |  | ||||||
|         }, |         }, | ||||||
|         "createdTimestamp": 1605711223339, |         "whitelistDomain": null, | ||||||
|         "lastModifiedTimestamp": 1605711223339, |         "emergencyServicesReachable": true, | ||||||
|         "childProfileIds": [ |         "unauthenticatedEmergencyServiceAccessible": false, | ||||||
|             17, |         "internetConnectivity": true, | ||||||
|             18, |         "connectionCapabilitySet": [ | ||||||
|             19, |             { | ||||||
|             20 |                 "model_type": "PasspointConnectionCapability", | ||||||
|         ] |                 "connectionCapabilitiesPortNumber": 8888, | ||||||
|     } |                 "connectionCapabilitiesIpProtocol": "TCP", | ||||||
|  |                 "connectionCapabilitiesStatus": "open" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "ipAddressTypeAvailability": "public_IPv4_address_available", | ||||||
|  |         "qosMapSetConfiguration": null, | ||||||
|  |         "apGeospatialLocation": null, | ||||||
|  |         "apCivicLocation": null, | ||||||
|  |         "apPublicLocationIdUri": null, | ||||||
|  |         "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", | ||||||
|  |         "anqpDomainId": 1234, | ||||||
|  |         "disableDownstreamGroupAddressedForwarding": false, | ||||||
|  |         "enable2pt4GHz": true, | ||||||
|  |         "enable5GHz": true, | ||||||
|  |         "associatedAccessSsidProfileIds": [ | ||||||
|  |             32 | ||||||
|  |         ], | ||||||
|  |         "osuSsidProfileId": 31, | ||||||
|  |         "passpointOperatorProfileId": 34, | ||||||
|  |         "passpointVenueProfileId": 33, | ||||||
|  |         "passpointOsuProviderProfileIds": [ | ||||||
|  |             35, | ||||||
|  |             36 | ||||||
|  |         ], | ||||||
|  |         "accessNetworkType": "free_public_network", | ||||||
|  |         "networkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|  |         "profileType": "passpoint" | ||||||
|  |     }, | ||||||
|  |     "createdTimestamp": 0, | ||||||
|  |     "lastModifiedTimestamp": 1611264539331, | ||||||
|  |     "childProfileIds": [ | ||||||
|  |         33, | ||||||
|  |         34, | ||||||
|  |         35, | ||||||
|  |         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-Hotspot20-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": 1605711165325, |     }, | ||||||
| 		"lastModifiedTimestamp": 1605711165325, |     { | ||||||
| 		"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-Hotspot20-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": 1605711165330, |  | ||||||
| 		"lastModifiedTimestamp": 1605711165330, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,10 +1,10 @@ | |||||||
| [ | [ | ||||||
| 	{ | 	{ | ||||||
| 		"model_type": "Profile", | 		"model_type": "Profile", | ||||||
| 		"id": 22, | 		"id": 10, | ||||||
| 		"customerId": 2, | 		"customerId": 2, | ||||||
| 		"profileType": "service_metrics_collection_config", | 		"profileType": "service_metrics_collection_config", | ||||||
| 		"name": "Metrics-Profile-Passpoint", | 		"name": "Metrics-Profile-3-Radios", | ||||||
| 		"details": { | 		"details": { | ||||||
| 			"model_type": "ServiceMetricsCollectionConfigProfile", | 			"model_type": "ServiceMetricsCollectionConfigProfile", | ||||||
| 			"radioTypes": [ | 			"radioTypes": [ | ||||||
| @@ -21,30 +21,6 @@ | |||||||
| 			], | 			], | ||||||
| 			"metricConfigParameterMap": { | 			"metricConfigParameterMap": { | ||||||
| 				"ApNode": [ | 				"ApNode": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -69,18 +45,6 @@ | |||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -92,9 +56,52 @@ | |||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"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": [ | 				"ApSsid": [ | ||||||
|  | 					{ | ||||||
|  | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
|  | 						"samplingInterval": 30, | ||||||
|  | 						"reportingIntervalSeconds": 60, | ||||||
|  | 						"radioType": "is5GHzU", | ||||||
|  | 						"serviceMetricDataType": "ApSsid" | ||||||
|  | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -108,13 +115,6 @@ | |||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApSsid" | 						"serviceMetricDataType": "ApSsid" | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Client": [ | 				"Client": [ | ||||||
| @@ -144,12 +144,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -168,12 +168,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -192,41 +192,29 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Neighbour": [ | 				"Neighbour": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -251,18 +239,6 @@ | |||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -286,13 +262,37 @@ | |||||||
| 						"radioType": "is5GHzU", | 						"radioType": "is5GHzU", | ||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"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" | 			"profileType": "service_metrics_collection_config" | ||||||
| 		}, | 		}, | ||||||
| 		"createdTimestamp": 1605711195528, | 		"createdTimestamp": 1606778369931, | ||||||
| 		"lastModifiedTimestamp": 1605711195528, | 		"lastModifiedTimestamp": 1606778369931, | ||||||
| 		"childProfileIds": [ | 		"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-Hotspot20-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": 1605711164952, |             "telus.com", | ||||||
| 		"lastModifiedTimestamp": 1605711164952, |             "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,205 +1,204 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 21, |     "id": 4, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "rf", |     "profileType": "rf", | ||||||
| 	"name": "TipWlan-rf-passpoint", |     "name": "TipWlan-rf", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "RfConfiguration", |         "model_type": "RfConfiguration", | ||||||
| 		"rfConfigMap": { |         "rfConfigMap": { | ||||||
| 			"is5GHz": { |             "is5GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHz", |                 "radioType": "is5GHz", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is2dot4GHz": { |             "is2dot4GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is2dot4GHz", |                 "radioType": "is2dot4GHz", | ||||||
| 				"radioMode": "modeN", |                 "radioMode": "modeN", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is20MHz", |                 "channelBandwidth": "is20MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 20, |                     "dropInSnrPercentage": 20, | ||||||
| 					"minLoadFactor": 50 |                     "minLoadFactor": 50 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzU": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzU", |                 "radioType": "is5GHzU", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzL": { |             "is5GHzL": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzL", |                 "radioType": "is5GHzL", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			} |             } | ||||||
| 		}, |         }, | ||||||
| 		"profileType": "rf" |         "profileType": "rf" | ||||||
| 	}, |     }, | ||||||
| 	"createdTimestamp": 1605711191976, |     "createdTimestamp": 1612285248650, | ||||||
| 	"lastModifiedTimestamp": 1605711191976, |     "lastModifiedTimestamp": 1612285248650, | ||||||
| 	"childProfileIds": [ |     "childProfileIds": [] | ||||||
| 	] | } | ||||||
| } |  | ||||||
| @@ -1,134 +1,75 @@ | |||||||
| [ | [ | ||||||
| 	{ | { | ||||||
| 		"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 		"id": 15, |     "id": 2, | ||||||
| 		"customerId": 2, |     "customerId": 2, | ||||||
| 		"profileType": "ssid", |     "profileType": "ssid", | ||||||
| 		"name": "TipWlan-cloud-hotspot-access", |     "name": "TipWlan-cloud-3-radios", | ||||||
| 		"details": { |     "details": { | ||||||
| 			"model_type": "SsidConfiguration", |         "model_type": "SsidConfiguration", | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-access", |         "ssid": "TipWlan-cloud-3-radios", | ||||||
| 			"appliedRadios": [ |         "appliedRadios": [ | ||||||
| 				"is5GHzL", |             "is5GHzU", | ||||||
| 				"is5GHzU" |             "is2dot4GHz", | ||||||
| 			], |             "is5GHzL" | ||||||
| 			"ssidAdminState": "enabled", |         ], | ||||||
| 			"secureMode": "wpa2PSK", |         "ssidAdminState": "enabled", | ||||||
| 			"vlanId": 1, |         "secureMode": "wpa2OnlyPSK", | ||||||
| 			"keyStr": "testing123", |         "vlanId": 1, | ||||||
| 			"broadcastSsid": "enabled", |         "keyStr": "openwifi", | ||||||
| 			"keyRefresh": 0, |         "broadcastSsid": "enabled", | ||||||
| 			"noLocalSubnets": false, |         "keyRefresh": 0, | ||||||
| 			"radiusServiceName": null, |         "noLocalSubnets": false, | ||||||
| 			"radiusAccountingServiceName": null, |         "radiusServiceId": 0, | ||||||
| 			"captivePortalId": null, |         "radiusAcountingServiceInterval": 60, | ||||||
| 			"bandwidthLimitDown": 0, |         "captivePortalId": null, | ||||||
| 			"bandwidthLimitUp": 0, |         "bandwidthLimitDown": 0, | ||||||
| 			"clientBandwidthLimitDown": 0, |         "bandwidthLimitUp": 0, | ||||||
| 			"clientBandwidthLimitUp": 0, |         "clientBandwidthLimitDown": 0, | ||||||
| 			"videoTrafficOnly": false, |         "clientBandwidthLimitUp": 0, | ||||||
| 			"radioBasedConfigs": { |         "videoTrafficOnly": false, | ||||||
| 				"is5GHz": { |         "radioBasedConfigs": { | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzU": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is2dot4GHz": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is2dot4GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzU": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzL": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzL": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				} |                 "enable80211v": null | ||||||
| 			}, |             } | ||||||
| 			"bonjourGatewayProfileId": null, |         }, | ||||||
| 			"enable80211w": null, |         "bonjourGatewayProfileId": null, | ||||||
| 			"wepConfig": null, |         "enable80211w": null, | ||||||
| 			"forwardMode": null, |         "wepConfig": null, | ||||||
| 			"profileType": "ssid" |         "forwardMode": "BRIDGE", | ||||||
| 		}, |         "profileType": "ssid", | ||||||
| 		"createdTimestamp": 1605711164949, |         "radiusClientConfiguration": { | ||||||
| 		"lastModifiedTimestamp": 1605711223372, |             "model_type": "RadiusNasConfiguration", | ||||||
| 		"childProfileIds": [ |             "nasClientId": "DEFAULT", | ||||||
| 			24 |             "nasClientIp": "WAN_IP", | ||||||
| 		] |             "userDefinedNasId": null, | ||||||
| 	}, |             "userDefinedNasIp": null, | ||||||
| 	{ |             "operatorId": null | ||||||
| 		"model_type": "Profile", |         } | ||||||
| 		"id": 16, |     }, | ||||||
| 		"customerId": 2, |     "createdTimestamp": 1612285248638, | ||||||
| 		"profileType": "ssid", |     "lastModifiedTimestamp": 1612285248638, | ||||||
| 		"name": "TipWlan-cloud-hotspot-osu", |     "childProfileIds": [] | ||||||
| 		"details": { | } | ||||||
| 			"model_type": "SsidConfiguration", |  | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-osu", |  | ||||||
| 			"appliedRadios": [ |  | ||||||
| 				"is2dot4GHz" |  | ||||||
| 			], |  | ||||||
| 			"ssidAdminState": "enabled", |  | ||||||
| 			"secureMode": "open", |  | ||||||
| 			"vlanId": 1, |  | ||||||
| 			"keyStr": null, |  | ||||||
| 			"broadcastSsid": "enabled", |  | ||||||
| 			"keyRefresh": 0, |  | ||||||
| 			"noLocalSubnets": false, |  | ||||||
| 			"radiusServiceName": null, |  | ||||||
| 			"radiusAccountingServiceName": null, |  | ||||||
| 			"captivePortalId": null, |  | ||||||
| 			"bandwidthLimitDown": 0, |  | ||||||
| 			"bandwidthLimitUp": 0, |  | ||||||
| 			"clientBandwidthLimitDown": 0, |  | ||||||
| 			"clientBandwidthLimitUp": 0, |  | ||||||
| 			"videoTrafficOnly": false, |  | ||||||
| 			"radioBasedConfigs": { |  | ||||||
| 				"is5GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is2dot4GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzU": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzL": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			"bonjourGatewayProfileId": null, |  | ||||||
| 			"enable80211w": null, |  | ||||||
| 			"wepConfig": null, |  | ||||||
| 			"forwardMode": null, |  | ||||||
| 			"profileType": "ssid" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164950, |  | ||||||
| 		"lastModifiedTimestamp": 1605711171732, |  | ||||||
| 		"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-Hotspot20-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": "ProfileVenueTypeAssignment", |             "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": 1605711164956, |     "createdTimestamp": 1611264538947, | ||||||
| 		"lastModifiedTimestamp": 1605711164956, |     "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": 5, |     "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,55 +1,58 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 23, |     "id": 8, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "equipment_ap", |     "profileType": "equipment_ap", | ||||||
| 	"name": "ApProfile-3-radios-passpoint", |     "name": "ApProfile-3-radios", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "ApNetworkConfiguration", |         "model_type": "ApNetworkConfiguration", | ||||||
| 		"networkConfigVersion": "AP-1", |         "networkConfigVersion": "AP-1", | ||||||
| 		"equipmentType": "AP", |         "equipmentType": "AP", | ||||||
| 		"vlanNative": true, |         "vlanNative": true, | ||||||
| 		"vlan": 0, |         "vlan": 0, | ||||||
| 		"ntpServer": { |         "ntpServer": { | ||||||
| 			"model_type": "AutoOrManualString", |             "model_type": "AutoOrManualString", | ||||||
| 			"auto": true, |             "auto": true, | ||||||
| 			"value": "pool.ntp.org" |             "value": "pool.ntp.org" | ||||||
| 		}, |         }, | ||||||
| 		"syslogRelay": null, |         "syslogRelay": null, | ||||||
| 		"rtlsSettings": null, |         "rtlsSettings": null, | ||||||
| 		"syntheticClientEnabled": true, |         "syntheticClientEnabled": true, | ||||||
| 		"ledControlEnabled": true, |         "ledControlEnabled": true, | ||||||
| 		"equipmentDiscovery": false, |         "equipmentDiscovery": false, | ||||||
| 		"greTunnelName": null, |         "radioMap": { | ||||||
| 		"greParentIfName": null, |             "is2dot4GHz": { | ||||||
| 		"greLocalInetAddr": null, |                 "model_type": "RadioProfileConfiguration", | ||||||
| 		"greRemoteInetAddr": null, |                 "bestApEnabled": true, | ||||||
| 		"greRemoteMacAddr": null, |                 "bestAPSteerType": "both" | ||||||
| 		"radioMap": { |             }, | ||||||
| 			"is2dot4GHz": { |             "is5GHzU": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzL": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             } | ||||||
| 			"is5GHzL": { |         }, | ||||||
| 				"model_type": "RadioProfileConfiguration", |         "greTunnelConfigurations": [ | ||||||
| 				"bestApEnabled": true, |             { | ||||||
| 				"bestAPSteerType": "both" |                 "model_type": "GreTunnelConfiguration", | ||||||
| 			} |                 "greTunnelName": "gre1", | ||||||
| 		}, |                 "greRemoteInetAddr": "192.168.1.101", | ||||||
| 		"profileType": "equipment_ap" |                 "vlanIdsInGreTunnel": [ | ||||||
| 	}, |                     100 | ||||||
| 	"createdTimestamp": 1605711197140, |                 ] | ||||||
| 	"lastModifiedTimestamp": 1605711197140, |             } | ||||||
| 	"childProfileIds": [ |         ], | ||||||
| 		16, |         "profileType": "equipment_ap" | ||||||
| 		21, |     }, | ||||||
| 		22, |     "createdTimestamp": 1612285248925, | ||||||
| 		15 |     "lastModifiedTimestamp": 1612285628377, | ||||||
| 	] |     "childProfileIds": [ | ||||||
| } |         2, | ||||||
|  |         4 | ||||||
|  |     ] | ||||||
|  | } | ||||||
| @@ -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,72 +1,71 @@ | |||||||
| [ | [ | ||||||
| { | { | ||||||
|         "model_type": "Profile", |     "model_type": "Profile", | ||||||
|         "id": 24, |     "id": 37, | ||||||
|         "customerId": 2, |     "customerId": 2, | ||||||
|         "profileType": "passpoint", |     "profileType": "passpoint", | ||||||
|         "name": "TipWlan-Hotspot20-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, | ||||||
|             "additionalStepsRequiredForAccess": 0, |         "passpointAccessNetworkType": "free_public_network", | ||||||
|             "deauthRequestTimeout": 0, |         "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|             "operatingClass": 0, |         "additionalStepsRequiredForAccess": 0, | ||||||
|             "termsAndConditionsFile": { |         "deauthRequestTimeout": 0, | ||||||
|                 "model_type": "ManagedFileInfo", |         "operatingClass": 0, | ||||||
|                 "md5checksum": null, |         "termsAndConditionsFile": { | ||||||
|                 "lastModifiedTimestamp": null, |             "model_type": "ManagedFileInfo", | ||||||
|                 "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", |             "md5checksum": null, | ||||||
|                 "fileCategory": "ExternalPolicyConfiguration", |             "lastModifiedTimestamp": null, | ||||||
|                 "fileType": "TEXT", |             "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", | ||||||
|                 "altSlot": false |             "fileCategory": "ExternalPolicyConfiguration", | ||||||
|             }, |             "fileType": "TEXT", | ||||||
|             "whitelistDomain": null, |             "altSlot": false | ||||||
|             "emergencyServicesReachable": true, |  | ||||||
|             "unauthenticatedEmergencyServiceAccessible": false, |  | ||||||
|             "internetConnectivity": true, |  | ||||||
|             "connectionCapabilitySet": [ |  | ||||||
|                 { |  | ||||||
|                     "model_type": "PasspointConnectionCapability", |  | ||||||
|                     "connectionCapabilitiesPortNumber": 8888, |  | ||||||
|                     "connectionCapabilitiesIpProtocol": "TCP", |  | ||||||
|                     "connectionCapabilitiesStatus": "open" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "ipAddressTypeAvailability": "public_IPv4_address_available", |  | ||||||
|             "qosMapSetConfiguration": null, |  | ||||||
|             "apGeospatialLocation": null, |  | ||||||
|             "apCivicLocation": null, |  | ||||||
|             "apPublicLocationIdUri": null, |  | ||||||
|             "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", |  | ||||||
|             "anqpDomainId": 1234, |  | ||||||
|             "disableDownstreamGroupAddressedForwarding": false, |  | ||||||
|             "enable2pt4GHz": true, |  | ||||||
|             "enable5GHz": true, |  | ||||||
|             "associatedAccessSsidNames": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "osuSsidName": "TipWlan-cloud-hotspot-osu", |  | ||||||
|             "operatorProfileName": "TipWlan-Hotspot20-Operator", |  | ||||||
|             "venueProfileName": "TipWlan-Hotspot20-Venue", |  | ||||||
|             "idProviderProfileNames": [ |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider-2", |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider" |  | ||||||
|             ], |  | ||||||
|             "accessNetworkType": "free_public_network", |  | ||||||
|             "networkAuthenticationType": "acceptance_of_terms_and_conditions", |  | ||||||
|             "associatedSsids": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "profileType": "passpoint" |  | ||||||
|         }, |         }, | ||||||
|         "createdTimestamp": 1605711223339, |         "whitelistDomain": null, | ||||||
|         "lastModifiedTimestamp": 1605711223339, |         "emergencyServicesReachable": true, | ||||||
|         "childProfileIds": [ |         "unauthenticatedEmergencyServiceAccessible": false, | ||||||
|             17, |         "internetConnectivity": true, | ||||||
|             18, |         "connectionCapabilitySet": [ | ||||||
|             19, |             { | ||||||
|             20 |                 "model_type": "PasspointConnectionCapability", | ||||||
|         ] |                 "connectionCapabilitiesPortNumber": 8888, | ||||||
|     } |                 "connectionCapabilitiesIpProtocol": "TCP", | ||||||
|  |                 "connectionCapabilitiesStatus": "open" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "ipAddressTypeAvailability": "public_IPv4_address_available", | ||||||
|  |         "qosMapSetConfiguration": null, | ||||||
|  |         "apGeospatialLocation": null, | ||||||
|  |         "apCivicLocation": null, | ||||||
|  |         "apPublicLocationIdUri": null, | ||||||
|  |         "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", | ||||||
|  |         "anqpDomainId": 1234, | ||||||
|  |         "disableDownstreamGroupAddressedForwarding": false, | ||||||
|  |         "enable2pt4GHz": true, | ||||||
|  |         "enable5GHz": true, | ||||||
|  |         "associatedAccessSsidProfileIds": [ | ||||||
|  |             32 | ||||||
|  |         ], | ||||||
|  |         "osuSsidProfileId": 31, | ||||||
|  |         "passpointOperatorProfileId": 34, | ||||||
|  |         "passpointVenueProfileId": 33, | ||||||
|  |         "passpointOsuProviderProfileIds": [ | ||||||
|  |             35, | ||||||
|  |             36 | ||||||
|  |         ], | ||||||
|  |         "accessNetworkType": "free_public_network", | ||||||
|  |         "networkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|  |         "profileType": "passpoint" | ||||||
|  |     }, | ||||||
|  |     "createdTimestamp": 0, | ||||||
|  |     "lastModifiedTimestamp": 1611264539331, | ||||||
|  |     "childProfileIds": [ | ||||||
|  |         33, | ||||||
|  |         34, | ||||||
|  |         35, | ||||||
|  |         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-Hotspot20-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": 1605711165325, |     }, | ||||||
| 		"lastModifiedTimestamp": 1605711165325, |     { | ||||||
| 		"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-Hotspot20-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": 1605711165330, |  | ||||||
| 		"lastModifiedTimestamp": 1605711165330, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,10 +1,10 @@ | |||||||
| [ | [ | ||||||
| 	{ | 	{ | ||||||
| 		"model_type": "Profile", | 		"model_type": "Profile", | ||||||
| 		"id": 22, | 		"id": 10, | ||||||
| 		"customerId": 2, | 		"customerId": 2, | ||||||
| 		"profileType": "service_metrics_collection_config", | 		"profileType": "service_metrics_collection_config", | ||||||
| 		"name": "Metrics-Profile-Passpoint", | 		"name": "Metrics-Profile-3-Radios", | ||||||
| 		"details": { | 		"details": { | ||||||
| 			"model_type": "ServiceMetricsCollectionConfigProfile", | 			"model_type": "ServiceMetricsCollectionConfigProfile", | ||||||
| 			"radioTypes": [ | 			"radioTypes": [ | ||||||
| @@ -21,30 +21,6 @@ | |||||||
| 			], | 			], | ||||||
| 			"metricConfigParameterMap": { | 			"metricConfigParameterMap": { | ||||||
| 				"ApNode": [ | 				"ApNode": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -69,18 +45,6 @@ | |||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -92,9 +56,52 @@ | |||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"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": [ | 				"ApSsid": [ | ||||||
|  | 					{ | ||||||
|  | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
|  | 						"samplingInterval": 30, | ||||||
|  | 						"reportingIntervalSeconds": 60, | ||||||
|  | 						"radioType": "is5GHzU", | ||||||
|  | 						"serviceMetricDataType": "ApSsid" | ||||||
|  | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -108,13 +115,6 @@ | |||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApSsid" | 						"serviceMetricDataType": "ApSsid" | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Client": [ | 				"Client": [ | ||||||
| @@ -144,12 +144,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -168,12 +168,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -192,41 +192,29 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Neighbour": [ | 				"Neighbour": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -251,18 +239,6 @@ | |||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -286,13 +262,37 @@ | |||||||
| 						"radioType": "is5GHzU", | 						"radioType": "is5GHzU", | ||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"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" | 			"profileType": "service_metrics_collection_config" | ||||||
| 		}, | 		}, | ||||||
| 		"createdTimestamp": 1605711195528, | 		"createdTimestamp": 1606778369931, | ||||||
| 		"lastModifiedTimestamp": 1605711195528, | 		"lastModifiedTimestamp": 1606778369931, | ||||||
| 		"childProfileIds": [ | 		"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-Hotspot20-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": 1605711164952, |             "telus.com", | ||||||
| 		"lastModifiedTimestamp": 1605711164952, |             "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,205 +1,204 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 21, |     "id": 4, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "rf", |     "profileType": "rf", | ||||||
| 	"name": "TipWlan-rf-passpoint", |     "name": "TipWlan-rf", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "RfConfiguration", |         "model_type": "RfConfiguration", | ||||||
| 		"rfConfigMap": { |         "rfConfigMap": { | ||||||
| 			"is5GHz": { |             "is5GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHz", |                 "radioType": "is5GHz", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is2dot4GHz": { |             "is2dot4GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is2dot4GHz", |                 "radioType": "is2dot4GHz", | ||||||
| 				"radioMode": "modeN", |                 "radioMode": "modeN", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is20MHz", |                 "channelBandwidth": "is20MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 20, |                     "dropInSnrPercentage": 20, | ||||||
| 					"minLoadFactor": 50 |                     "minLoadFactor": 50 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzU": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzU", |                 "radioType": "is5GHzU", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzL": { |             "is5GHzL": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzL", |                 "radioType": "is5GHzL", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			} |             } | ||||||
| 		}, |         }, | ||||||
| 		"profileType": "rf" |         "profileType": "rf" | ||||||
| 	}, |     }, | ||||||
| 	"createdTimestamp": 1605711191976, |     "createdTimestamp": 1612285248650, | ||||||
| 	"lastModifiedTimestamp": 1605711191976, |     "lastModifiedTimestamp": 1612285248650, | ||||||
| 	"childProfileIds": [ |     "childProfileIds": [] | ||||||
| 	] | } | ||||||
| } |  | ||||||
| @@ -1,134 +1,75 @@ | |||||||
| [ | [ | ||||||
| 	{ | { | ||||||
| 		"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 		"id": 15, |     "id": 2, | ||||||
| 		"customerId": 2, |     "customerId": 2, | ||||||
| 		"profileType": "ssid", |     "profileType": "ssid", | ||||||
| 		"name": "TipWlan-cloud-hotspot-access", |     "name": "TipWlan-cloud-3-radios", | ||||||
| 		"details": { |     "details": { | ||||||
| 			"model_type": "SsidConfiguration", |         "model_type": "SsidConfiguration", | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-access", |         "ssid": "TipWlan-cloud-3-radios", | ||||||
| 			"appliedRadios": [ |         "appliedRadios": [ | ||||||
| 				"is5GHzL", |             "is5GHzU", | ||||||
| 				"is5GHzU" |             "is2dot4GHz", | ||||||
| 			], |             "is5GHzL" | ||||||
| 			"ssidAdminState": "enabled", |         ], | ||||||
| 			"secureMode": "wpa2PSK", |         "ssidAdminState": "enabled", | ||||||
| 			"vlanId": 1, |         "secureMode": "wpa2OnlyPSK", | ||||||
| 			"keyStr": "testing123", |         "vlanId": 1, | ||||||
| 			"broadcastSsid": "enabled", |         "keyStr": "openwifi", | ||||||
| 			"keyRefresh": 0, |         "broadcastSsid": "enabled", | ||||||
| 			"noLocalSubnets": false, |         "keyRefresh": 0, | ||||||
| 			"radiusServiceName": null, |         "noLocalSubnets": false, | ||||||
| 			"radiusAccountingServiceName": null, |         "radiusServiceId": 0, | ||||||
| 			"captivePortalId": null, |         "radiusAcountingServiceInterval": 60, | ||||||
| 			"bandwidthLimitDown": 0, |         "captivePortalId": null, | ||||||
| 			"bandwidthLimitUp": 0, |         "bandwidthLimitDown": 0, | ||||||
| 			"clientBandwidthLimitDown": 0, |         "bandwidthLimitUp": 0, | ||||||
| 			"clientBandwidthLimitUp": 0, |         "clientBandwidthLimitDown": 0, | ||||||
| 			"videoTrafficOnly": false, |         "clientBandwidthLimitUp": 0, | ||||||
| 			"radioBasedConfigs": { |         "videoTrafficOnly": false, | ||||||
| 				"is5GHz": { |         "radioBasedConfigs": { | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzU": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is2dot4GHz": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is2dot4GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzU": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzL": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzL": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				} |                 "enable80211v": null | ||||||
| 			}, |             } | ||||||
| 			"bonjourGatewayProfileId": null, |         }, | ||||||
| 			"enable80211w": null, |         "bonjourGatewayProfileId": null, | ||||||
| 			"wepConfig": null, |         "enable80211w": null, | ||||||
| 			"forwardMode": null, |         "wepConfig": null, | ||||||
| 			"profileType": "ssid" |         "forwardMode": "BRIDGE", | ||||||
| 		}, |         "profileType": "ssid", | ||||||
| 		"createdTimestamp": 1605711164949, |         "radiusClientConfiguration": { | ||||||
| 		"lastModifiedTimestamp": 1605711223372, |             "model_type": "RadiusNasConfiguration", | ||||||
| 		"childProfileIds": [ |             "nasClientId": "DEFAULT", | ||||||
| 			24 |             "nasClientIp": "WAN_IP", | ||||||
| 		] |             "userDefinedNasId": null, | ||||||
| 	}, |             "userDefinedNasIp": null, | ||||||
| 	{ |             "operatorId": null | ||||||
| 		"model_type": "Profile", |         } | ||||||
| 		"id": 16, |     }, | ||||||
| 		"customerId": 2, |     "createdTimestamp": 1612285248638, | ||||||
| 		"profileType": "ssid", |     "lastModifiedTimestamp": 1612285248638, | ||||||
| 		"name": "TipWlan-cloud-hotspot-osu", |     "childProfileIds": [] | ||||||
| 		"details": { | } | ||||||
| 			"model_type": "SsidConfiguration", |  | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-osu", |  | ||||||
| 			"appliedRadios": [ |  | ||||||
| 				"is2dot4GHz" |  | ||||||
| 			], |  | ||||||
| 			"ssidAdminState": "enabled", |  | ||||||
| 			"secureMode": "open", |  | ||||||
| 			"vlanId": 1, |  | ||||||
| 			"keyStr": null, |  | ||||||
| 			"broadcastSsid": "enabled", |  | ||||||
| 			"keyRefresh": 0, |  | ||||||
| 			"noLocalSubnets": false, |  | ||||||
| 			"radiusServiceName": null, |  | ||||||
| 			"radiusAccountingServiceName": null, |  | ||||||
| 			"captivePortalId": null, |  | ||||||
| 			"bandwidthLimitDown": 0, |  | ||||||
| 			"bandwidthLimitUp": 0, |  | ||||||
| 			"clientBandwidthLimitDown": 0, |  | ||||||
| 			"clientBandwidthLimitUp": 0, |  | ||||||
| 			"videoTrafficOnly": false, |  | ||||||
| 			"radioBasedConfigs": { |  | ||||||
| 				"is5GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is2dot4GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzU": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzL": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			"bonjourGatewayProfileId": null, |  | ||||||
| 			"enable80211w": null, |  | ||||||
| 			"wepConfig": null, |  | ||||||
| 			"forwardMode": null, |  | ||||||
| 			"profileType": "ssid" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164950, |  | ||||||
| 		"lastModifiedTimestamp": 1605711171732, |  | ||||||
| 		"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-Hotspot20-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": "ProfileVenueTypeAssignment", |             "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": 1605711164956, |     "createdTimestamp": 1611264538947, | ||||||
| 		"lastModifiedTimestamp": 1605711164956, |     "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": 5, |     "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,55 +1,58 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 23, |     "id": 8, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "equipment_ap", |     "profileType": "equipment_ap", | ||||||
| 	"name": "ApProfile-3-radios-passpoint", |     "name": "ApProfile-3-radios", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "ApNetworkConfiguration", |         "model_type": "ApNetworkConfiguration", | ||||||
| 		"networkConfigVersion": "AP-1", |         "networkConfigVersion": "AP-1", | ||||||
| 		"equipmentType": "AP", |         "equipmentType": "AP", | ||||||
| 		"vlanNative": true, |         "vlanNative": true, | ||||||
| 		"vlan": 0, |         "vlan": 0, | ||||||
| 		"ntpServer": { |         "ntpServer": { | ||||||
| 			"model_type": "AutoOrManualString", |             "model_type": "AutoOrManualString", | ||||||
| 			"auto": true, |             "auto": true, | ||||||
| 			"value": "pool.ntp.org" |             "value": "pool.ntp.org" | ||||||
| 		}, |         }, | ||||||
| 		"syslogRelay": null, |         "syslogRelay": null, | ||||||
| 		"rtlsSettings": null, |         "rtlsSettings": null, | ||||||
| 		"syntheticClientEnabled": true, |         "syntheticClientEnabled": true, | ||||||
| 		"ledControlEnabled": true, |         "ledControlEnabled": true, | ||||||
| 		"equipmentDiscovery": false, |         "equipmentDiscovery": false, | ||||||
| 		"greTunnelName": null, |         "radioMap": { | ||||||
| 		"greParentIfName": null, |             "is2dot4GHz": { | ||||||
| 		"greLocalInetAddr": null, |                 "model_type": "RadioProfileConfiguration", | ||||||
| 		"greRemoteInetAddr": null, |                 "bestApEnabled": true, | ||||||
| 		"greRemoteMacAddr": null, |                 "bestAPSteerType": "both" | ||||||
| 		"radioMap": { |             }, | ||||||
| 			"is2dot4GHz": { |             "is5GHzU": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzL": { | ||||||
| 				"model_type": "RadioProfileConfiguration", |                 "model_type": "RadioProfileConfiguration", | ||||||
| 				"bestApEnabled": true, |                 "bestApEnabled": true, | ||||||
| 				"bestAPSteerType": "both" |                 "bestAPSteerType": "both" | ||||||
| 			}, |             } | ||||||
| 			"is5GHzL": { |         }, | ||||||
| 				"model_type": "RadioProfileConfiguration", |         "greTunnelConfigurations": [ | ||||||
| 				"bestApEnabled": true, |             { | ||||||
| 				"bestAPSteerType": "both" |                 "model_type": "GreTunnelConfiguration", | ||||||
| 			} |                 "greTunnelName": "gre1", | ||||||
| 		}, |                 "greRemoteInetAddr": "192.168.1.101", | ||||||
| 		"profileType": "equipment_ap" |                 "vlanIdsInGreTunnel": [ | ||||||
| 	}, |                     100 | ||||||
| 	"createdTimestamp": 1605711197140, |                 ] | ||||||
| 	"lastModifiedTimestamp": 1605711197140, |             } | ||||||
| 	"childProfileIds": [ |         ], | ||||||
| 		16, |         "profileType": "equipment_ap" | ||||||
| 		21, |     }, | ||||||
| 		22, |     "createdTimestamp": 1612285248925, | ||||||
| 		15 |     "lastModifiedTimestamp": 1612285628377, | ||||||
| 	] |     "childProfileIds": [ | ||||||
| } |         2, | ||||||
|  |         4 | ||||||
|  |     ] | ||||||
|  | } | ||||||
| @@ -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,72 +1,71 @@ | |||||||
| [ | [ | ||||||
| { | { | ||||||
|         "model_type": "Profile", |     "model_type": "Profile", | ||||||
|         "id": 24, |     "id": 37, | ||||||
|         "customerId": 2, |     "customerId": 2, | ||||||
|         "profileType": "passpoint", |     "profileType": "passpoint", | ||||||
|         "name": "TipWlan-Hotspot20-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, | ||||||
|             "additionalStepsRequiredForAccess": 0, |         "passpointAccessNetworkType": "free_public_network", | ||||||
|             "deauthRequestTimeout": 0, |         "passpointNetworkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|             "operatingClass": 0, |         "additionalStepsRequiredForAccess": 0, | ||||||
|             "termsAndConditionsFile": { |         "deauthRequestTimeout": 0, | ||||||
|                 "model_type": "ManagedFileInfo", |         "operatingClass": 0, | ||||||
|                 "md5checksum": null, |         "termsAndConditionsFile": { | ||||||
|                 "lastModifiedTimestamp": null, |             "model_type": "ManagedFileInfo", | ||||||
|                 "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", |             "md5checksum": null, | ||||||
|                 "fileCategory": "ExternalPolicyConfiguration", |             "lastModifiedTimestamp": null, | ||||||
|                 "fileType": "TEXT", |             "apExportUrl": "https://localhost:9091/filestore/termsAndConditions", | ||||||
|                 "altSlot": false |             "fileCategory": "ExternalPolicyConfiguration", | ||||||
|             }, |             "fileType": "TEXT", | ||||||
|             "whitelistDomain": null, |             "altSlot": false | ||||||
|             "emergencyServicesReachable": true, |  | ||||||
|             "unauthenticatedEmergencyServiceAccessible": false, |  | ||||||
|             "internetConnectivity": true, |  | ||||||
|             "connectionCapabilitySet": [ |  | ||||||
|                 { |  | ||||||
|                     "model_type": "PasspointConnectionCapability", |  | ||||||
|                     "connectionCapabilitiesPortNumber": 8888, |  | ||||||
|                     "connectionCapabilitiesIpProtocol": "TCP", |  | ||||||
|                     "connectionCapabilitiesStatus": "open" |  | ||||||
|                 } |  | ||||||
|             ], |  | ||||||
|             "ipAddressTypeAvailability": "public_IPv4_address_available", |  | ||||||
|             "qosMapSetConfiguration": null, |  | ||||||
|             "apGeospatialLocation": null, |  | ||||||
|             "apCivicLocation": null, |  | ||||||
|             "apPublicLocationIdUri": null, |  | ||||||
|             "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", |  | ||||||
|             "anqpDomainId": 1234, |  | ||||||
|             "disableDownstreamGroupAddressedForwarding": false, |  | ||||||
|             "enable2pt4GHz": true, |  | ||||||
|             "enable5GHz": true, |  | ||||||
|             "associatedAccessSsidNames": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "osuSsidName": "TipWlan-cloud-hotspot-osu", |  | ||||||
|             "operatorProfileName": "TipWlan-Hotspot20-Operator", |  | ||||||
|             "venueProfileName": "TipWlan-Hotspot20-Venue", |  | ||||||
|             "idProviderProfileNames": [ |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider-2", |  | ||||||
|                 "TipWlan-Hotspot20-OSU-Provider" |  | ||||||
|             ], |  | ||||||
|             "accessNetworkType": "free_public_network", |  | ||||||
|             "networkAuthenticationType": "acceptance_of_terms_and_conditions", |  | ||||||
|             "associatedSsids": [ |  | ||||||
|                 "TipWlan-cloud-hotspot-access" |  | ||||||
|             ], |  | ||||||
|             "profileType": "passpoint" |  | ||||||
|         }, |         }, | ||||||
|         "createdTimestamp": 1605711223339, |         "whitelistDomain": null, | ||||||
|         "lastModifiedTimestamp": 1605711223339, |         "emergencyServicesReachable": true, | ||||||
|         "childProfileIds": [ |         "unauthenticatedEmergencyServiceAccessible": false, | ||||||
|             17, |         "internetConnectivity": true, | ||||||
|             18, |         "connectionCapabilitySet": [ | ||||||
|             19, |             { | ||||||
|             20 |                 "model_type": "PasspointConnectionCapability", | ||||||
|         ] |                 "connectionCapabilitiesPortNumber": 8888, | ||||||
|     } |                 "connectionCapabilitiesIpProtocol": "TCP", | ||||||
|  |                 "connectionCapabilitiesStatus": "open" | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "ipAddressTypeAvailability": "public_IPv4_address_available", | ||||||
|  |         "qosMapSetConfiguration": null, | ||||||
|  |         "apGeospatialLocation": null, | ||||||
|  |         "apCivicLocation": null, | ||||||
|  |         "apPublicLocationIdUri": null, | ||||||
|  |         "gasAddr3Behaviour": "p2pSpecWorkaroundFromRequest", | ||||||
|  |         "anqpDomainId": 1234, | ||||||
|  |         "disableDownstreamGroupAddressedForwarding": false, | ||||||
|  |         "enable2pt4GHz": true, | ||||||
|  |         "enable5GHz": true, | ||||||
|  |         "associatedAccessSsidProfileIds": [ | ||||||
|  |             32 | ||||||
|  |         ], | ||||||
|  |         "osuSsidProfileId": 31, | ||||||
|  |         "passpointOperatorProfileId": 34, | ||||||
|  |         "passpointVenueProfileId": 33, | ||||||
|  |         "passpointOsuProviderProfileIds": [ | ||||||
|  |             35, | ||||||
|  |             36 | ||||||
|  |         ], | ||||||
|  |         "accessNetworkType": "free_public_network", | ||||||
|  |         "networkAuthenticationType": "acceptance_of_terms_and_conditions", | ||||||
|  |         "profileType": "passpoint" | ||||||
|  |     }, | ||||||
|  |     "createdTimestamp": 0, | ||||||
|  |     "lastModifiedTimestamp": 1611264539331, | ||||||
|  |     "childProfileIds": [ | ||||||
|  |         33, | ||||||
|  |         34, | ||||||
|  |         35, | ||||||
|  |         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-Hotspot20-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": 1605711165325, |     }, | ||||||
| 		"lastModifiedTimestamp": 1605711165325, |     { | ||||||
| 		"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-Hotspot20-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": 1605711165330, |  | ||||||
| 		"lastModifiedTimestamp": 1605711165330, |  | ||||||
| 		"childProfileIds": [ |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| ] |  | ||||||
| @@ -1,10 +1,10 @@ | |||||||
| [ | [ | ||||||
| 	{ | 	{ | ||||||
| 		"model_type": "Profile", | 		"model_type": "Profile", | ||||||
| 		"id": 22, | 		"id": 10, | ||||||
| 		"customerId": 2, | 		"customerId": 2, | ||||||
| 		"profileType": "service_metrics_collection_config", | 		"profileType": "service_metrics_collection_config", | ||||||
| 		"name": "Metrics-Profile-Passpoint", | 		"name": "Metrics-Profile-3-Radios", | ||||||
| 		"details": { | 		"details": { | ||||||
| 			"model_type": "ServiceMetricsCollectionConfigProfile", | 			"model_type": "ServiceMetricsCollectionConfigProfile", | ||||||
| 			"radioTypes": [ | 			"radioTypes": [ | ||||||
| @@ -21,30 +21,6 @@ | |||||||
| 			], | 			], | ||||||
| 			"metricConfigParameterMap": { | 			"metricConfigParameterMap": { | ||||||
| 				"ApNode": [ | 				"ApNode": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -69,18 +45,6 @@ | |||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "ApNode", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -92,9 +56,52 @@ | |||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApNode", | 						"serviceMetricDataType": "ApNode", | ||||||
| 						"statsReportFormat": "RAW" | 						"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": [ | 				"ApSsid": [ | ||||||
|  | 					{ | ||||||
|  | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
|  | 						"samplingInterval": 30, | ||||||
|  | 						"reportingIntervalSeconds": 60, | ||||||
|  | 						"radioType": "is5GHzU", | ||||||
|  | 						"serviceMetricDataType": "ApSsid" | ||||||
|  | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", | 						"model_type": "ServiceMetricRadioConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -108,13 +115,6 @@ | |||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "ApSsid" | 						"serviceMetricDataType": "ApSsid" | ||||||
| 					}, |  | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricRadioConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"radioType": "is5GHzU", |  | ||||||
| 						"serviceMetricDataType": "ApSsid" |  | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Client": [ | 				"Client": [ | ||||||
| @@ -144,12 +144,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -168,12 +168,12 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 60, | 						"reportingIntervalSeconds": 120, | ||||||
| 						"channelSurveyType": "ON_CHANNEL", | 						"channelSurveyType": "OFF_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| @@ -192,41 +192,29 @@ | |||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is5GHzL", | 						"radioType": "is2dot4GHz", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| 						"reportingIntervalSeconds": 120, | 						"reportingIntervalSeconds": 60, | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", | 						"channelSurveyType": "ON_CHANNEL", | ||||||
| 						"scanIntervalMillis": 0, | 						"scanIntervalMillis": 0, | ||||||
| 						"percentUtilizationThreshold": 10, | 						"percentUtilizationThreshold": 10, | ||||||
| 						"delayMillisecondsThreshold": 600, | 						"delayMillisecondsThreshold": 600, | ||||||
| 						"radioType": "is2dot4GHz", | 						"radioType": "is5GHzL", | ||||||
| 						"serviceMetricDataType": "Channel", | 						"serviceMetricDataType": "Channel", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					} | 					} | ||||||
| 				], | 				], | ||||||
| 				"Neighbour": [ | 				"Neighbour": [ | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 120, |  | ||||||
| 						"channelSurveyType": "OFF_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is5GHzL", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -251,18 +239,6 @@ | |||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"statsReportFormat": "RAW" | ||||||
| 					}, | 					}, | ||||||
| 					{ |  | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", |  | ||||||
| 						"samplingInterval": 30, |  | ||||||
| 						"reportingIntervalSeconds": 60, |  | ||||||
| 						"channelSurveyType": "ON_CHANNEL", |  | ||||||
| 						"scanIntervalMillis": 0, |  | ||||||
| 						"percentUtilizationThreshold": 10, |  | ||||||
| 						"delayMillisecondsThreshold": 600, |  | ||||||
| 						"radioType": "is2dot4GHz", |  | ||||||
| 						"serviceMetricDataType": "Neighbour", |  | ||||||
| 						"statsReportFormat": "RAW" |  | ||||||
| 					}, |  | ||||||
| 					{ | 					{ | ||||||
| 						"model_type": "ServiceMetricSurveyConfigParameters", | 						"model_type": "ServiceMetricSurveyConfigParameters", | ||||||
| 						"samplingInterval": 30, | 						"samplingInterval": 30, | ||||||
| @@ -286,13 +262,37 @@ | |||||||
| 						"radioType": "is5GHzU", | 						"radioType": "is5GHzU", | ||||||
| 						"serviceMetricDataType": "Neighbour", | 						"serviceMetricDataType": "Neighbour", | ||||||
| 						"statsReportFormat": "RAW" | 						"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" | 			"profileType": "service_metrics_collection_config" | ||||||
| 		}, | 		}, | ||||||
| 		"createdTimestamp": 1605711195528, | 		"createdTimestamp": 1606778369931, | ||||||
| 		"lastModifiedTimestamp": 1605711195528, | 		"lastModifiedTimestamp": 1606778369931, | ||||||
| 		"childProfileIds": [ | 		"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-Hotspot20-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": 1605711164952, |             "telus.com", | ||||||
| 		"lastModifiedTimestamp": 1605711164952, |             "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,205 +1,204 @@ | |||||||
| { | { | ||||||
| 	"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 	"id": 21, |     "id": 4, | ||||||
| 	"customerId": 2, |     "customerId": 2, | ||||||
| 	"profileType": "rf", |     "profileType": "rf", | ||||||
| 	"name": "TipWlan-rf-passpoint", |     "name": "TipWlan-rf", | ||||||
| 	"details": { |     "details": { | ||||||
| 		"model_type": "RfConfiguration", |         "model_type": "RfConfiguration", | ||||||
| 		"rfConfigMap": { |         "rfConfigMap": { | ||||||
| 			"is5GHz": { |             "is5GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHz", |                 "radioType": "is5GHz", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is2dot4GHz": { |             "is2dot4GHz": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is2dot4GHz", |                 "radioType": "is2dot4GHz", | ||||||
| 				"radioMode": "modeN", |                 "radioMode": "modeN", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is20MHz", |                 "channelBandwidth": "is20MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 20, |                     "dropInSnrPercentage": 20, | ||||||
| 					"minLoadFactor": 50 |                     "minLoadFactor": 50 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzU": { |             "is5GHzU": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzU", |                 "radioType": "is5GHzU", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			}, |             }, | ||||||
| 			"is5GHzL": { |             "is5GHzL": { | ||||||
| 				"model_type": "RfElementConfiguration", |                 "model_type": "RfElementConfiguration", | ||||||
| 				"radioType": "is5GHzL", |                 "radioType": "is5GHzL", | ||||||
| 				"radioMode": "modeAC", |                 "radioMode": "modeAC", | ||||||
| 				"rf": "TipWlan-rf-passpoint", |                 "rf": "TipWlan-rf", | ||||||
| 				"beaconInterval": 100, |                 "beaconInterval": 100, | ||||||
| 				"forceScanDuringVoice": "disabled", |                 "forceScanDuringVoice": "disabled", | ||||||
| 				"rtsCtsThreshold": 65535, |                 "rtsCtsThreshold": 65535, | ||||||
| 				"channelBandwidth": "is80MHz", |                 "channelBandwidth": "is80MHz", | ||||||
| 				"mimoMode": "twoByTwo", |                 "mimoMode": "twoByTwo", | ||||||
| 				"maxNumClients": 100, |                 "maxNumClients": 100, | ||||||
| 				"autoChannelSelection": false, |                 "autoChannelSelection": false, | ||||||
| 				"activeScanSettings": { |                 "activeScanSettings": { | ||||||
| 					"model_type": "ActiveScanSettings", |                     "model_type": "ActiveScanSettings", | ||||||
| 					"enabled": true, |                     "enabled": true, | ||||||
| 					"scanFrequencySeconds": 10, |                     "scanFrequencySeconds": 10, | ||||||
| 					"scanDurationMillis": 65 |                     "scanDurationMillis": 65 | ||||||
| 				}, |                 }, | ||||||
| 				"neighbouringListApConfig": { |                 "neighbouringListApConfig": { | ||||||
| 					"model_type": "NeighbouringAPListConfiguration", |                     "model_type": "NeighbouringAPListConfiguration", | ||||||
| 					"minSignal": -85, |                     "minSignal": -85, | ||||||
| 					"maxAps": 25 |                     "maxAps": 25 | ||||||
| 				}, |                 }, | ||||||
| 				"minAutoCellSize": -65, |                 "minAutoCellSize": -65, | ||||||
| 				"perimeterDetectionEnabled": true, |                 "perimeterDetectionEnabled": true, | ||||||
| 				"channelHopSettings": { |                 "channelHopSettings": { | ||||||
| 					"model_type": "ChannelHopSettings", |                     "model_type": "ChannelHopSettings", | ||||||
| 					"noiseFloorThresholdInDB": -75, |                     "noiseFloorThresholdInDB": -75, | ||||||
| 					"noiseFloorThresholdTimeInSeconds": 180, |                     "noiseFloorThresholdTimeInSeconds": 180, | ||||||
| 					"nonWifiThresholdInPercentage": 50, |                     "nonWifiThresholdInPercentage": 50, | ||||||
| 					"nonWifiThresholdTimeInSeconds": 180, |                     "nonWifiThresholdTimeInSeconds": 180, | ||||||
| 					"obssHopMode": "NON_WIFI" |                     "obssHopMode": "NON_WIFI" | ||||||
| 				}, |                 }, | ||||||
| 				"bestApEnabled": null, |                 "bestApEnabled": null, | ||||||
| 				"multicastRate": "auto", |                 "multicastRate": "auto", | ||||||
| 				"managementRate": "auto", |                 "managementRate": "auto", | ||||||
| 				"rxCellSizeDb": -90, |                 "rxCellSizeDb": -90, | ||||||
| 				"probeResponseThresholdDb": -90, |                 "probeResponseThresholdDb": -90, | ||||||
| 				"clientDisconnectThresholdDb": -90, |                 "clientDisconnectThresholdDb": -90, | ||||||
| 				"eirpTxPower": 18, |                 "eirpTxPower": 18, | ||||||
| 				"bestApSettings": { |                 "bestApSettings": { | ||||||
| 					"model_type": "RadioBestApSettings", |                     "model_type": "RadioBestApSettings", | ||||||
| 					"mlComputed": true, |                     "mlComputed": true, | ||||||
| 					"dropInSnrPercentage": 30, |                     "dropInSnrPercentage": 30, | ||||||
| 					"minLoadFactor": 40 |                     "minLoadFactor": 40 | ||||||
| 				} |                 } | ||||||
| 			} |             } | ||||||
| 		}, |         }, | ||||||
| 		"profileType": "rf" |         "profileType": "rf" | ||||||
| 	}, |     }, | ||||||
| 	"createdTimestamp": 1605711191976, |     "createdTimestamp": 1612285248650, | ||||||
| 	"lastModifiedTimestamp": 1605711191976, |     "lastModifiedTimestamp": 1612285248650, | ||||||
| 	"childProfileIds": [ |     "childProfileIds": [] | ||||||
| 	] | } | ||||||
| } |  | ||||||
| @@ -1,134 +1,75 @@ | |||||||
| [ | [ | ||||||
| 	{ | { | ||||||
| 		"model_type": "Profile", |     "model_type": "Profile", | ||||||
| 		"id": 15, |     "id": 2, | ||||||
| 		"customerId": 2, |     "customerId": 2, | ||||||
| 		"profileType": "ssid", |     "profileType": "ssid", | ||||||
| 		"name": "TipWlan-cloud-hotspot-access", |     "name": "TipWlan-cloud-3-radios", | ||||||
| 		"details": { |     "details": { | ||||||
| 			"model_type": "SsidConfiguration", |         "model_type": "SsidConfiguration", | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-access", |         "ssid": "TipWlan-cloud-3-radios", | ||||||
| 			"appliedRadios": [ |         "appliedRadios": [ | ||||||
| 				"is5GHzL", |             "is5GHzU", | ||||||
| 				"is5GHzU" |             "is2dot4GHz", | ||||||
| 			], |             "is5GHzL" | ||||||
| 			"ssidAdminState": "enabled", |         ], | ||||||
| 			"secureMode": "wpa2PSK", |         "ssidAdminState": "enabled", | ||||||
| 			"vlanId": 1, |         "secureMode": "wpa2OnlyPSK", | ||||||
| 			"keyStr": "testing123", |         "vlanId": 1, | ||||||
| 			"broadcastSsid": "enabled", |         "keyStr": "openwifi", | ||||||
| 			"keyRefresh": 0, |         "broadcastSsid": "enabled", | ||||||
| 			"noLocalSubnets": false, |         "keyRefresh": 0, | ||||||
| 			"radiusServiceName": null, |         "noLocalSubnets": false, | ||||||
| 			"radiusAccountingServiceName": null, |         "radiusServiceId": 0, | ||||||
| 			"captivePortalId": null, |         "radiusAcountingServiceInterval": 60, | ||||||
| 			"bandwidthLimitDown": 0, |         "captivePortalId": null, | ||||||
| 			"bandwidthLimitUp": 0, |         "bandwidthLimitDown": 0, | ||||||
| 			"clientBandwidthLimitDown": 0, |         "bandwidthLimitUp": 0, | ||||||
| 			"clientBandwidthLimitUp": 0, |         "clientBandwidthLimitDown": 0, | ||||||
| 			"videoTrafficOnly": false, |         "clientBandwidthLimitUp": 0, | ||||||
| 			"radioBasedConfigs": { |         "videoTrafficOnly": false, | ||||||
| 				"is5GHz": { |         "radioBasedConfigs": { | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzU": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is2dot4GHz": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is2dot4GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzU": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHz": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				}, |                 "enable80211v": null | ||||||
| 				"is5GHzL": { |             }, | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |             "is5GHzL": { | ||||||
| 					"enable80211r": null, |                 "model_type": "RadioBasedSsidConfiguration", | ||||||
| 					"enable80211k": null, |                 "enable80211r": null, | ||||||
| 					"enable80211v": null |                 "enable80211k": null, | ||||||
| 				} |                 "enable80211v": null | ||||||
| 			}, |             } | ||||||
| 			"bonjourGatewayProfileId": null, |         }, | ||||||
| 			"enable80211w": null, |         "bonjourGatewayProfileId": null, | ||||||
| 			"wepConfig": null, |         "enable80211w": null, | ||||||
| 			"forwardMode": null, |         "wepConfig": null, | ||||||
| 			"profileType": "ssid" |         "forwardMode": "BRIDGE", | ||||||
| 		}, |         "profileType": "ssid", | ||||||
| 		"createdTimestamp": 1605711164949, |         "radiusClientConfiguration": { | ||||||
| 		"lastModifiedTimestamp": 1605711223372, |             "model_type": "RadiusNasConfiguration", | ||||||
| 		"childProfileIds": [ |             "nasClientId": "DEFAULT", | ||||||
| 			24 |             "nasClientIp": "WAN_IP", | ||||||
| 		] |             "userDefinedNasId": null, | ||||||
| 	}, |             "userDefinedNasIp": null, | ||||||
| 	{ |             "operatorId": null | ||||||
| 		"model_type": "Profile", |         } | ||||||
| 		"id": 16, |     }, | ||||||
| 		"customerId": 2, |     "createdTimestamp": 1612285248638, | ||||||
| 		"profileType": "ssid", |     "lastModifiedTimestamp": 1612285248638, | ||||||
| 		"name": "TipWlan-cloud-hotspot-osu", |     "childProfileIds": [] | ||||||
| 		"details": { | } | ||||||
| 			"model_type": "SsidConfiguration", |  | ||||||
| 			"ssid": "TipWlan-cloud-hotspot-osu", |  | ||||||
| 			"appliedRadios": [ |  | ||||||
| 				"is2dot4GHz" |  | ||||||
| 			], |  | ||||||
| 			"ssidAdminState": "enabled", |  | ||||||
| 			"secureMode": "open", |  | ||||||
| 			"vlanId": 1, |  | ||||||
| 			"keyStr": null, |  | ||||||
| 			"broadcastSsid": "enabled", |  | ||||||
| 			"keyRefresh": 0, |  | ||||||
| 			"noLocalSubnets": false, |  | ||||||
| 			"radiusServiceName": null, |  | ||||||
| 			"radiusAccountingServiceName": null, |  | ||||||
| 			"captivePortalId": null, |  | ||||||
| 			"bandwidthLimitDown": 0, |  | ||||||
| 			"bandwidthLimitUp": 0, |  | ||||||
| 			"clientBandwidthLimitDown": 0, |  | ||||||
| 			"clientBandwidthLimitUp": 0, |  | ||||||
| 			"videoTrafficOnly": false, |  | ||||||
| 			"radioBasedConfigs": { |  | ||||||
| 				"is5GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is2dot4GHz": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzU": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				}, |  | ||||||
| 				"is5GHzL": { |  | ||||||
| 					"model_type": "RadioBasedSsidConfiguration", |  | ||||||
| 					"enable80211r": null, |  | ||||||
| 					"enable80211k": null, |  | ||||||
| 					"enable80211v": null |  | ||||||
| 				} |  | ||||||
| 			}, |  | ||||||
| 			"bonjourGatewayProfileId": null, |  | ||||||
| 			"enable80211w": null, |  | ||||||
| 			"wepConfig": null, |  | ||||||
| 			"forwardMode": null, |  | ||||||
| 			"profileType": "ssid" |  | ||||||
| 		}, |  | ||||||
| 		"createdTimestamp": 1605711164950, |  | ||||||
| 		"lastModifiedTimestamp": 1605711171732, |  | ||||||
| 		"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-Hotspot20-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": "ProfileVenueTypeAssignment", |             "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": 1605711164956, |     "createdTimestamp": 1611264538947, | ||||||
| 		"lastModifiedTimestamp": 1605711164956, |     "lastModifiedTimestamp": 1611264538947, | ||||||
| 		"childProfileIds": [ |     "childProfileIds": [] | ||||||
| 		] | } | ||||||
| 	} | ] | ||||||
| ] |  | ||||||
| @@ -7,6 +7,7 @@ | |||||||
|         <listEntry value="1"/> |         <listEntry value="1"/> | ||||||
|     </listAttribute> |     </listAttribute> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/> | ||||||
|  |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/> | ||||||
|     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> |     <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/> | ||||||
|     <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/> |     <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/> | ||||||
|   | |||||||
| @@ -1,11 +1,9 @@ | |||||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" | <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); | ||||||
|   | |||||||
| @@ -1,52 +1,46 @@ | |||||||
| package com.telecominfraproject.wlan.opensync.ovsdb; | package com.telecominfraproject.wlan.opensync.ovsdb; | ||||||
|  |  | ||||||
| import java.security.cert.X509Certificate; | import com.google.common.collect.ImmutableMap; | ||||||
| import java.util.ArrayList; | import com.netflix.servo.DefaultMonitorRegistry; | ||||||
| import java.util.HashMap; | import com.netflix.servo.monitor.BasicCounter; | ||||||
| import java.util.List; | import com.netflix.servo.monitor.Counter; | ||||||
| import java.util.Map; | import com.netflix.servo.monitor.MonitorConfig; | ||||||
| import java.util.Set; | import com.netflix.servo.monitor.Monitors; | ||||||
| import java.util.concurrent.CompletableFuture; | import com.netflix.servo.tag.TagList; | ||||||
|  | import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags; | ||||||
| import javax.annotation.PostConstruct; | import com.telecominfraproject.wlan.core.model.equipment.MacAddress; | ||||||
|  | import com.telecominfraproject.wlan.core.model.equipment.RadioType; | ||||||
|  | import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface.RowUpdateOperation; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.OvsdbClientInterface; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface; | ||||||
|  | import com.telecominfraproject.wlan.opensync.external.integration.models.*; | ||||||
|  | import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao; | ||||||
|  | import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbMonitor; | ||||||
|  | import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbClientWithMetrics; | ||||||
|  | import com.telecominfraproject.wlan.opensync.ovsdb.metrics.OvsdbMetrics; | ||||||
|  | import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants; | ||||||
|  | import com.telecominfraproject.wlan.opensync.util.SslUtil; | ||||||
|  | import com.vmware.ovsdb.callback.ConnectionCallback; | ||||||
|  | import com.vmware.ovsdb.exception.OvsdbClientException; | ||||||
|  | import com.vmware.ovsdb.protocol.methods.*; | ||||||
|  | import com.vmware.ovsdb.protocol.operation.notation.Row; | ||||||
|  | import com.vmware.ovsdb.service.OvsdbClient; | ||||||
|  | import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener; | ||||||
|  | import io.netty.handler.ssl.SslContext; | ||||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | 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.google.common.collect.ImmutableMap; | import javax.annotation.PostConstruct; | ||||||
| import com.telecominfraproject.wlan.core.model.equipment.MacAddress; | import java.security.cert.X509Certificate; | ||||||
| import com.telecominfraproject.wlan.core.model.equipment.RadioType; | import java.util.*; | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface; | import java.util.concurrent.CompletableFuture; | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface.RowUpdateOperation; | import java.util.concurrent.ExecutionException; | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.OvsdbClientInterface; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState; |  | ||||||
| import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients; |  | ||||||
| import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao; |  | ||||||
| import com.telecominfraproject.wlan.opensync.ovsdb.dao.utilities.OvsdbStringConstants; |  | ||||||
| import com.telecominfraproject.wlan.opensync.util.SslUtil; |  | ||||||
| import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration; |  | ||||||
| import com.vmware.ovsdb.callback.ConnectionCallback; |  | ||||||
| import com.vmware.ovsdb.callback.MonitorCallback; |  | ||||||
| import com.vmware.ovsdb.exception.OvsdbClientException; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.MonitorRequest; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.MonitorRequests; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.MonitorSelect; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.RowUpdate; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.TableUpdate; |  | ||||||
| import com.vmware.ovsdb.protocol.methods.TableUpdates; |  | ||||||
| import com.vmware.ovsdb.protocol.operation.notation.Row; |  | ||||||
| import com.vmware.ovsdb.service.OvsdbClient; |  | ||||||
| import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener; |  | ||||||
|  |  | ||||||
| import io.netty.handler.ssl.SslContext; |  | ||||||
|  |  | ||||||
| @Profile("ovsdb_manager") | @Profile("ovsdb_manager") | ||||||
| @Component | @Component | ||||||
| @@ -54,6 +48,20 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|     private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbClient.class); |     private static final Logger LOG = LoggerFactory.getLogger(TipWlanOvsdbClient.class); | ||||||
|  |  | ||||||
|  |     private final TagList tags = CloudMetricsTags.commonTags; | ||||||
|  |  | ||||||
|  |     private final Counter connectionsAttempted = new BasicCounter( | ||||||
|  |             MonitorConfig.builder("osgw-connectionsAttempted").withTags(tags).build()); | ||||||
|  |  | ||||||
|  |     private final Counter connectionsFailed = new BasicCounter( | ||||||
|  |             MonitorConfig.builder("osgw-connectionsFailed").withTags(tags).build()); | ||||||
|  |  | ||||||
|  |     private final Counter connectionsCreated = new BasicCounter( | ||||||
|  |             MonitorConfig.builder("osgw-connectionsCreated").withTags(tags).build()); | ||||||
|  |  | ||||||
|  |     private final Counter connectionsDropped = new BasicCounter( | ||||||
|  |             MonitorConfig.builder("osgw-connectionsDropped").withTags(tags).build()); | ||||||
|  |  | ||||||
|     @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}") |     @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}") | ||||||
|     private int ovsdbListenPort; |     private int ovsdbListenPort; | ||||||
|  |  | ||||||
| @@ -63,6 +71,9 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|     @org.springframework.beans.factory.annotation.Value("${tip.wlan.preventClientCnAlteration:false}") |     @org.springframework.beans.factory.annotation.Value("${tip.wlan.preventClientCnAlteration:false}") | ||||||
|     private boolean preventClientCnAlteration; |     private boolean preventClientCnAlteration; | ||||||
|  |  | ||||||
|  |     @org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultCommandDurationSec:3600}") | ||||||
|  |     private long defaultCommandDurationSec; | ||||||
|  |  | ||||||
|     @Autowired |     @Autowired | ||||||
|     private SslContext sslContext; |     private SslContext sslContext; | ||||||
|  |  | ||||||
| @@ -78,6 +89,22 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|     @Autowired |     @Autowired | ||||||
|     private OvsdbSessionMapInterface ovsdbSessionMapInterface; |     private OvsdbSessionMapInterface ovsdbSessionMapInterface; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private OvsdbMetrics ovsdbMetrics; | ||||||
|  |  | ||||||
|  |     @org.springframework.beans.factory.annotation.Value("${tip.wlan.manager.collectionIntervalSec.event:60}") | ||||||
|  |     private long collectionIntervalSecEvent; | ||||||
|  |  | ||||||
|  |     // dtop: use anonymous constructor to ensure that the following code always | ||||||
|  |     // get executed, | ||||||
|  |     // even when somebody adds another constructor in here | ||||||
|  |     { | ||||||
|  |         DefaultMonitorRegistry.getInstance().register(connectionsAttempted); | ||||||
|  |         DefaultMonitorRegistry.getInstance().register(connectionsCreated); | ||||||
|  |         DefaultMonitorRegistry.getInstance().register(connectionsDropped); | ||||||
|  |         DefaultMonitorRegistry.getInstance().register(connectionsFailed); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @PostConstruct |     @PostConstruct | ||||||
|     private void postCreate() { |     private void postCreate() { | ||||||
|         listenForConnections(); |         listenForConnections(); | ||||||
| @@ -90,9 +117,15 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|             @Override |             @Override | ||||||
|             public void connected(OvsdbClient ovsdbClient) { |             public void connected(OvsdbClient ovsdbClient) { | ||||||
|  |  | ||||||
|  |                 connectionsAttempted.increment(); | ||||||
|  |  | ||||||
|  |                 if (!(ovsdbClient instanceof OvsdbClientWithMetrics)) { | ||||||
|  |                     ovsdbClient = new OvsdbClientWithMetrics(ovsdbClient, ovsdbMetrics); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|                 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; | ||||||
|                 try { |                 try { | ||||||
|                     subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) |                     subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) | ||||||
|                             .getSubjectDN().getName(); |                             .getSubjectDN().getName(); | ||||||
| @@ -110,41 +143,36 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|                     extIntegrationInterface.apConnected(key, connectNodeInfo); |                     extIntegrationInterface.apConnected(key, connectNodeInfo); | ||||||
|  |  | ||||||
|                     // push configuration to AP |                     processConnectRequest(ovsdbClient, clientCn, connectNodeInfo); | ||||||
|                     connectNodeInfo = processConnectRequest(ovsdbClient, clientCn, connectNodeInfo); |  | ||||||
|  |  | ||||||
|                     monitorOvsdbStateTables(ovsdbClient, key); |                     monitorOvsdbStateTables(ovsdbClient, key); | ||||||
|  |  | ||||||
|  |                     connectionsCreated.increment(); | ||||||
|                     LOG.info("ovsdbClient connected from {} on port {} AP {} ", remoteHost, localPort, key); |                     LOG.info("ovsdbClient connected from {} on port {} AP {} ", remoteHost, localPort, key); | ||||||
|                     LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions()); |                     LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions()); | ||||||
|  |  | ||||||
|                 } catch (IllegalStateException e) { |                 } catch (IllegalStateException e) { | ||||||
|  |                     connectionsFailed.increment(); | ||||||
|                     LOG.error("autoprovisioning error {}", e.getMessage(), e); |                     LOG.error("autoprovisioning error {}", e.getMessage(), e); | ||||||
|                     // something is wrong with the SSL |                     // something is wrong with the SSL | ||||||
|                     ovsdbClient.shutdown(); |                     ovsdbClient.shutdown(); | ||||||
|                     return; |  | ||||||
|                 } catch (Exception e) { |                 } catch (Exception e) { | ||||||
|  |                     connectionsFailed.increment(); | ||||||
|                     LOG.error("ovsdbClient error", e); |                     LOG.error("ovsdbClient error", e); | ||||||
|                     // something is wrong with the SSL |                     // something is wrong with the SSL | ||||||
|                     ovsdbClient.shutdown(); |                     ovsdbClient.shutdown(); | ||||||
|                     return; |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             @Override |             @Override | ||||||
|             public void disconnected(OvsdbClient ovsdbClient) { |             public void disconnected(OvsdbClient ovsdbClient) { | ||||||
|                 String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); |  | ||||||
|                 int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); |  | ||||||
|                 String subjectDn = null; |  | ||||||
|                 try { |  | ||||||
|                     subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) |  | ||||||
|                             .getSubjectDN().getName(); |  | ||||||
|                 } catch (Exception e) { |  | ||||||
|                     // do nothing |  | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 String clientCn = SslUtil.extractCN(subjectDn); |                 connectionsDropped.increment(); | ||||||
|  |  | ||||||
|  |                 String remoteHost; | ||||||
|  |                 int localPort; | ||||||
|  |                 String clientCn; | ||||||
|  |  | ||||||
|                 // disconnected - deregister ovsdbClient from our |                 // disconnected - deregister ovsdbClient from our | ||||||
|                 // connectedClients table |                 // connectedClients table | ||||||
| @@ -154,22 +182,39 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                 // so we are doing a reverse lookup here, and then if we find |                 // so we are doing a reverse lookup here, and then if we find | ||||||
|                 // the key we will |                 // the key we will | ||||||
|                 // remove the entry from the connectedClients. |                 // remove the entry from the connectedClients. | ||||||
|                 String key = ovsdbSessionMapInterface.lookupClientId(ovsdbClient); |                 String key; | ||||||
|  |  | ||||||
|                 if (key != null) { |                 try { | ||||||
|  |                     remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); | ||||||
|  |                     localPort = ovsdbClient.getConnectionInfo().getLocalPort(); | ||||||
|  |                     String subjectDn = null; | ||||||
|                     try { |                     try { | ||||||
|                         extIntegrationInterface.apDisconnected(key); |                         subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) | ||||||
|                         ovsdbSessionMapInterface.removeSession(key); |                                 .getSubjectDN().getName(); | ||||||
|                     } catch (Exception e) { |                     } catch (Exception e) { | ||||||
|                         LOG.debug("Unable to process ap disconnect. {}", e.getMessage()); |                         // do nothing | ||||||
|                     } finally { |                     } | ||||||
|                         ovsdbClient.shutdown(); |                     clientCn = SslUtil.extractCN(subjectDn); | ||||||
|  |                     key = ovsdbSessionMapInterface.lookupClientId(ovsdbClient); | ||||||
|  |                     if (key != null) { | ||||||
|  |                         try { | ||||||
|  |                             extIntegrationInterface.apDisconnected(key); | ||||||
|  |                             ovsdbSessionMapInterface.removeSession(key); | ||||||
|  |                         } catch (Exception e) { | ||||||
|  |                             LOG.debug("Unable to process ap disconnect. {}", e.getMessage()); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                     LOG.info("ovsdbClient disconnected from {} on port {} clientCn {} AP {} ", remoteHost, localPort, | ||||||
|  |                             clientCn, key); | ||||||
|  |                     LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions()); | ||||||
|  |                 } finally { | ||||||
|  |                     try { | ||||||
|  |                         ovsdbClient.shutdown(); | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("Caught Exception shutting down ovsdb client, may have already been disconnected", e); | ||||||
|                     } |                     } | ||||||
|                 } |  | ||||||
|  |  | ||||||
|                 LOG.info("ovsdbClient disconnected from {} on port {} clientCn {} AP {} ", remoteHost, localPort, |                 } | ||||||
|                         clientCn, key); |  | ||||||
|                 LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions()); |  | ||||||
|  |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
| @@ -180,8 +225,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         LOG.info("Manager waiting for connection on port {}...", ovsdbListenPort); |         LOG.info("Manager waiting for connection on port {}...", ovsdbListenPort); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private ConnectNodeInfo processConnectRequest(OvsdbClient ovsdbClient, String clientCn, |     private void processConnectRequest(OvsdbClient ovsdbClient, String clientCn, ConnectNodeInfo connectNodeInfo) { | ||||||
|             ConnectNodeInfo connectNodeInfo) { |  | ||||||
|  |  | ||||||
|         LOG.debug("Starting Client connect"); |         LOG.debug("Starting Client connect"); | ||||||
|         connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo, |         connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo, | ||||||
| @@ -193,43 +237,42 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|         LOG.debug("Client {} connect for AP {}", clientCn, apId); |         LOG.debug("Client {} connect for AP {}", clientCn, apId); | ||||||
|  |  | ||||||
|  |         ovsdbDao.removeAllPasspointConfigs(ovsdbClient); | ||||||
|  |         ovsdbDao.removeAllSsids(ovsdbClient); // always | ||||||
|  |         ovsdbDao.removeAllInetConfigs(ovsdbClient); | ||||||
|  |         ovsdbDao.removeWifiRrm(ovsdbClient); | ||||||
|  |         ovsdbDao.removeRadsecRadiusAndRealmConfigs(ovsdbClient); | ||||||
|  |         ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always | ||||||
|  |  | ||||||
|  |         extIntegrationInterface.clearEquipmentStatus(apId); | ||||||
|  |  | ||||||
|         OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); |         OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); | ||||||
|  |  | ||||||
|         if (opensyncAPConfig != null) { |         if (opensyncAPConfig != null) { | ||||||
|             // cleanup existing |             ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig); | ||||||
|             ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always |  | ||||||
|             ovsdbDao.removeAllPasspointConfigs(ovsdbClient); |  | ||||||
|             ovsdbDao.removeWifiRrm(ovsdbClient); |  | ||||||
|             ovsdbDao.removeAllSsids(ovsdbClient, opensyncAPConfig); // always |  | ||||||
|             ovsdbDao.removeAllGreTunnels(ovsdbClient, opensyncAPConfig); |  | ||||||
|             // reconfigure |  | ||||||
|             ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); |  | ||||||
|             ovsdbDao.configureInterfaces(ovsdbClient); |  | ||||||
|             ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); |  | ||||||
|             ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); |  | ||||||
|             ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); |             ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); | ||||||
|  |             ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); | ||||||
|  |             ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig); | ||||||
|  |             ovsdbDao.configureRadsecRadiusAndRealm(ovsdbClient, opensyncAPConfig); | ||||||
|  |             ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); | ||||||
|             if (opensyncAPConfig.getHotspotConfig() != null) { |             if (opensyncAPConfig.getHotspotConfig() != null) { | ||||||
|                 ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig); |                 ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             ovsdbDao.configureInterfaces(ovsdbClient); | ||||||
|  |             ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); | ||||||
|  |  | ||||||
|             ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig); |             ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig); | ||||||
|             if (((ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails()).getSyntheticClientEnabled()) { |             if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { | ||||||
|                 ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient); |                 ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); | ||||||
|             } |             } | ||||||
|  |             ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent); | ||||||
|  |  | ||||||
|         } else { |         } else { | ||||||
|             ovsdbDao.removeAllPasspointConfigs(ovsdbClient); |             LOG.info("No Configuration available for {}", apId); | ||||||
|             ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always |  | ||||||
|             ovsdbDao.removeWifiRrm(ovsdbClient); |  | ||||||
|             ovsdbDao.removeAllSsids(ovsdbClient); // always |  | ||||||
|             ovsdbDao.removeAllGreTunnels(ovsdbClient, null); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { |  | ||||||
|             ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|          |  | ||||||
|         LOG.debug("Client connect Done"); |         LOG.debug("Client connect Done"); | ||||||
|         return connectNodeInfo; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -249,9 +292,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|             throw new IllegalStateException("AP with id " + apId + " is not connected"); |             throw new IllegalStateException("AP with id " + apId + " is not connected"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         String ret = ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); |         return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); | ||||||
|  |  | ||||||
|         return ret; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
| @@ -270,24 +311,27 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|             LOG.warn("AP with id " + apId + " does not have a config to apply."); |             LOG.warn("AP with id " + apId + " does not have a config to apply."); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always |  | ||||||
|         ovsdbDao.removeAllPasspointConfigs(ovsdbClient); |  | ||||||
|         ovsdbDao.removeWifiRrm(ovsdbClient); |  | ||||||
|         ovsdbDao.removeAllSsids(ovsdbClient, opensyncAPConfig); // always |  | ||||||
|         ovsdbDao.removeAllGreTunnels(ovsdbClient, opensyncAPConfig); |  | ||||||
|  |  | ||||||
|         ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); |         ovsdbDao.removeAllPasspointConfigs(ovsdbClient); | ||||||
|         ovsdbDao.configureInterfaces(ovsdbClient); |         ovsdbDao.removeAllSsids(ovsdbClient); // always | ||||||
|         ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); |         ovsdbDao.removeAllInetConfigs(ovsdbClient); | ||||||
|         ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); |         ovsdbDao.removeWifiRrm(ovsdbClient); | ||||||
|  |         ovsdbDao.removeRadsecRadiusAndRealmConfigs(ovsdbClient); | ||||||
|  |  | ||||||
|  |         extIntegrationInterface.clearEquipmentStatus(apId); | ||||||
|  |          | ||||||
|  |         ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig); | ||||||
|         ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); |         ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); | ||||||
|  |         ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); | ||||||
|  |         ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig); | ||||||
|  |         ovsdbDao.configureRadsecRadiusAndRealm(ovsdbClient, opensyncAPConfig); | ||||||
|  |         ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); | ||||||
|         if (opensyncAPConfig.getHotspotConfig() != null) { |         if (opensyncAPConfig.getHotspotConfig() != null) { | ||||||
|             ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig); |             ovsdbDao.configureHotspots(ovsdbClient, opensyncAPConfig); | ||||||
|         } |         } | ||||||
|         ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig); |  | ||||||
|         if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { |         ovsdbDao.configureInterfaces(ovsdbClient); | ||||||
|             ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); |         ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); | ||||||
|         } |  | ||||||
|         LOG.debug("Finished processConfigChanged for {}", apId); |         LOG.debug("Finished processConfigChanged for {}", apId); | ||||||
|  |  | ||||||
|     } |     } | ||||||
| @@ -323,17 +367,20 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         } catch (OvsdbClientException e) { |         } catch (OvsdbClientException e) { | ||||||
|             LOG.debug("Could not enable monitor for Wifi_Radio_State table. {}", e.getMessage()); |             LOG.debug("Could not enable monitor for Wifi_Radio_State table. {}", e.getMessage()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             monitorWifiInetStateDbTable(ovsdbClient, key); |             monitorWifiInetStateDbTable(ovsdbClient, key); | ||||||
|         } catch (OvsdbClientException e) { |         } catch (OvsdbClientException e) { | ||||||
|             LOG.debug("Could not enable monitor for Wifi_Inet_State table. {}", e.getMessage()); |             LOG.debug("Could not enable monitor for Wifi_Inet_State table. {}", e.getMessage()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             monitorWifiVifStateDbTable(ovsdbClient, key); |             monitorWifiVifStateDbTable(ovsdbClient, key); | ||||||
|         } catch (OvsdbClientException e) { |         } catch (OvsdbClientException e) { | ||||||
|             LOG.debug("Could not enable monitor for Wifi_VIF_State table. {}", e.getMessage()); |             LOG.debug("Could not enable monitor for Wifi_VIF_State table. {}", e.getMessage()); | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             monitorWifiAssociatedClientsDbTable(ovsdbClient, key); |             monitorWifiAssociatedClientsDbTable(ovsdbClient, key); | ||||||
|         } catch (OvsdbClientException e) { |         } catch (OvsdbClientException e) { | ||||||
| @@ -346,6 +393,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|             LOG.debug("Could not enable monitor for AWLAN_Node table. {}", e.getMessage()); |             LOG.debug("Could not enable monitor for AWLAN_Node table. {}", e.getMessage()); | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             monitorDhcpLeasedIpDbTable(ovsdbClient, key); |             monitorDhcpLeasedIpDbTable(ovsdbClient, key); | ||||||
|         } catch (OvsdbClientException e) { |         } catch (OvsdbClientException e) { | ||||||
| @@ -359,8 +407,21 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|             LOG.debug("Could not enable monitor for Command_State table. {}", e.getMessage()); |             LOG.debug("Could not enable monitor for Command_State table. {}", e.getMessage()); | ||||||
|  |  | ||||||
|         } |         } | ||||||
|         LOG.debug("Finished (re)setting monitors for AP {}", key); |  | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             monitorNodeStateTable(ovsdbClient, key); | ||||||
|  |         } catch (OvsdbClientException e) { | ||||||
|  |             LOG.debug("Could not enable monitor for Node_State table. {}", e.getMessage()); | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         try { | ||||||
|  |             if (ovsdbClient.getSchema(OvsdbDao.ovsdbName).get().getTables().containsKey("APC_State")) { | ||||||
|  |                 monitorAPCStateTable(ovsdbClient, key); | ||||||
|  |             } | ||||||
|  |         } catch (InterruptedException | ExecutionException | OvsdbClientException e) { | ||||||
|  |            LOG.debug("Could not enable monitor for APC_State table. {}", e); | ||||||
|  |         } | ||||||
|  |         LOG.debug("Finished (re)setting monitors for AP {}", key); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void monitorDhcpLeasedIpDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { |     private void monitorDhcpLeasedIpDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
| @@ -369,10 +430,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                 OvsdbDao.dhcpLeasedIpDbTable + "_" + key, |                 OvsdbDao.dhcpLeasedIpDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable, |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable, | ||||||
|                         new MonitorRequest(new MonitorSelect(true, true, true, true)))), |                         new MonitorRequest(new MonitorSelect(true, true, true, true)))), | ||||||
|                 new MonitorCallback() { |                 tableUpdates -> { | ||||||
|  |                     try { | ||||||
|                     @Override |  | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.dhcpLeasedIpDbTable + "_" + key + " monitor callback received {}", |                         LOG.info(OvsdbDao.dhcpLeasedIpDbTable + "_" + key + " monitor callback received {}", | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
| @@ -386,9 +445,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                 if (rowUpdate.getNew() == null) { |                                 if (rowUpdate.getNew() == null) { | ||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getOld().getColumns().entrySet() | ||||||
|                                         OvsdbDao.translateDhcpFpValueToString(c, rowMap); |                                             .forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     delete.add(rowMap); |                                     delete.add(rowMap); | ||||||
|                                     // delete |                                     // delete | ||||||
| @@ -396,9 +454,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                     // insert |                                     // insert | ||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getNew().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getNew().getColumns().entrySet() | ||||||
|                                         OvsdbDao.translateDhcpFpValueToString(c, rowMap); |                                             .forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     insert.add(rowMap); |                                     insert.add(rowMap); | ||||||
|                                 } else { |                                 } else { | ||||||
| @@ -407,9 +464,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); |                                     rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); | ||||||
|                                     rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getOld().getColumns().entrySet() | ||||||
|                                         OvsdbDao.translateDhcpFpValueToString(c, rowMap); |                                             .forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     update.add(rowMap); |                                     update.add(rowMap); | ||||||
|  |  | ||||||
| @@ -430,7 +486,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                             extIntegrationInterface.dhcpLeasedIpDbTableUpdate(update, key, RowUpdateOperation.MODIFY); |                             extIntegrationInterface.dhcpLeasedIpDbTableUpdate(update, key, RowUpdateOperation.MODIFY); | ||||||
|  |  | ||||||
|                         } |                         } | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("dhcpLeasedIpDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
| @@ -444,10 +501,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, |         CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, | ||||||
|                 OvsdbDao.commandStateDbTable + "_" + key, |                 OvsdbDao.commandStateDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())), |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())), | ||||||
|                 new MonitorCallback() { |                 tableUpdates -> { | ||||||
|  |                     try { | ||||||
|                     @Override |  | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.commandStateDbTable + "_" + key + " monitor callback received {}", |                         LOG.info(OvsdbDao.commandStateDbTable + "_" + key + " monitor callback received {}", | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
| @@ -461,9 +516,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                 if (rowUpdate.getNew() == null) { |                                 if (rowUpdate.getNew() == null) { | ||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getOld().getColumns() | ||||||
|                                         rowMap.put(c.getKey(), c.getValue().toString()); |                                             .forEach((key1, value) -> rowMap.put(key1, value.toString())); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     delete.add(rowMap); |                                     delete.add(rowMap); | ||||||
|                                     // delete |                                     // delete | ||||||
| @@ -471,9 +525,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                     // insert |                                     // insert | ||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getNew().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getNew().getColumns() | ||||||
|                                         rowMap.put(c.getKey(), c.getValue().toString()); |                                             .forEach((key1, value) -> rowMap.put(key1, value.toString())); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     insert.add(rowMap); |                                     insert.add(rowMap); | ||||||
|                                 } else { |                                 } else { | ||||||
| @@ -482,9 +535,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                     Map<String, String> rowMap = new HashMap<>(); |                                     Map<String, String> rowMap = new HashMap<>(); | ||||||
|  |  | ||||||
|                                     rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); |                                     rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); | ||||||
|                                     rowUpdate.getOld().getColumns().entrySet().stream().forEach(c -> { |                                     rowUpdate.getOld().getColumns() | ||||||
|                                         rowMap.put(c.getKey(), c.getValue().toString()); |                                             .forEach((key1, value) -> rowMap.put(key1, value.toString())); | ||||||
|                                     }); |  | ||||||
|  |  | ||||||
|                                     update.add(rowMap); |                                     update.add(rowMap); | ||||||
|  |  | ||||||
| @@ -505,7 +557,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                             extIntegrationInterface.commandStateDbTableUpdate(update, key, RowUpdateOperation.MODIFY); |                             extIntegrationInterface.commandStateDbTableUpdate(update, key, RowUpdateOperation.MODIFY); | ||||||
|  |  | ||||||
|                         } |                         } | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("commandStateDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
| @@ -516,33 +569,30 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|     private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { |     private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
|         CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, |         CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, | ||||||
|                 OvsdbDao.awlanNodeDbTable + "_" + key, |                 OvsdbDao.awlanNodeDbTable + "_" + key, new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))), |                         new MonitorRequest(new MonitorSelect(true, false, false, true)))), | ||||||
|                 new MonitorCallback() { |                 tableUpdates -> { | ||||||
|  |                     try { | ||||||
|                     @Override |  | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}", tableUpdates); |                         LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}", tableUpdates); | ||||||
|  |  | ||||||
|                         extIntegrationInterface.awlanNodeDbTableUpdate( |                         extIntegrationInterface.awlanNodeDbTableUpdate( | ||||||
|                                 ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key); |                                 ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key); | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("awlanNodeDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|         awCf.join(); |         extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient), | ||||||
|  |                 key); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { |     private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
|         CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, |         CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, | ||||||
|                 OvsdbDao.wifiAssociatedClientsDbTable + "_" + key, |                 OvsdbDao.wifiAssociatedClientsDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())), |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())), | ||||||
|                 new MonitorCallback() { |                 tableUpdates -> { | ||||||
|  |  | ||||||
|                     @Override |  | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|  |  | ||||||
|  |                     try { | ||||||
|                         LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}", |                         LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}", | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
| @@ -554,8 +604,10 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                                 if ((rowUpdate.getOld() != null) && (rowUpdate.getNew() == null)) { |                                 if ((rowUpdate.getOld() != null) && (rowUpdate.getNew() == null)) { | ||||||
|                                     Row row = rowUpdate.getOld(); |                                     Row row = rowUpdate.getOld(); | ||||||
|                                     String deletedClientMac = row.getStringColumn("mac"); |                                     String deletedClientMac = row.getStringColumn("mac"); | ||||||
|                                     // take care of the deletes as we go through |                                     // take care of the deletes as we go | ||||||
|                                     // the updates, as we want to delete before |                                     // through | ||||||
|  |                                     // the updates, as we want to delete | ||||||
|  |                                     // before | ||||||
|                                     // adding anyway. |                                     // adding anyway. | ||||||
|                                     extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key); |                                     extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key); | ||||||
|                                 } else { |                                 } else { | ||||||
| @@ -568,12 +620,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|                         // now address the update/add |                         // now address the update/add | ||||||
|                         extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(associatedClients, key); |                         extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(associatedClients, key); | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("wifiAssociatedClientsDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|         acCf.join(); |         extIntegrationInterface.wifiAssociatedClientsDbTableUpdate( | ||||||
|  |                 ovsdbDao.getInitialOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -582,12 +636,9 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                 OvsdbDao.wifiInetStateDbTable + "_" + key, |                 OvsdbDao.wifiInetStateDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, | ||||||
|                         new MonitorRequest(new MonitorSelect(true, true, true, true)))), |                         new MonitorRequest(new MonitorSelect(true, true, true, true)))), | ||||||
|                 new MonitorCallback() { |                 tableUpdates -> { | ||||||
|  |                     try { | ||||||
|                     @Override |                         LOG.info(OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}", | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.ovsdbName, |  | ||||||
|                                 OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}", |  | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
|                         List<OpensyncAPInetState> inetStateInsertOrUpdate = new ArrayList<>(); |                         List<OpensyncAPInetState> inetStateInsertOrUpdate = new ArrayList<>(); | ||||||
| @@ -613,11 +664,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|                         // now process updates and mutations |                         // now process updates and mutations | ||||||
|                         extIntegrationInterface.wifiInetStateDbTableUpdate(inetStateInsertOrUpdate, key); |                         extIntegrationInterface.wifiInetStateDbTableUpdate(inetStateInsertOrUpdate, key); | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("wifiInetStateDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
|         isCf.join(); |  | ||||||
|  |         extIntegrationInterface.wifiInetStateDbTableUpdate( | ||||||
|  |                 ovsdbDao.getInitialOpensyncApInetStateForRowUpdate(isCf.join(), key, ovsdbClient), key); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -625,32 +679,31 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|  |  | ||||||
|         CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, |         CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, | ||||||
|                 OvsdbDao.wifiRadioStateDbTable + "_" + key, |                 OvsdbDao.wifiRadioStateDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))), |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, | ||||||
|                 new MonitorCallback() { |                         new MonitorRequest(new MonitorSelect(true, false, false, true)))), | ||||||
|  |                 tableUpdates -> { | ||||||
|                     @Override |                     try { | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.wifiRadioStateDbTable + "_" + key + " monitor callback received {}", |                         LOG.info(OvsdbDao.wifiRadioStateDbTable + "_" + key + " monitor callback received {}", | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
|                         extIntegrationInterface.wifiRadioStatusDbTableUpdate( |                         extIntegrationInterface.wifiRadioStatusDbTableUpdate( | ||||||
|                                 ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key); |                                 ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key); | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("wifiRadioStatusDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
|         rsCf.join(); |         extIntegrationInterface | ||||||
|  |                 .wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { |     private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
|  |  | ||||||
|         CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, |         CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, | ||||||
|                 OvsdbDao.wifiVifStateDbTable + "_" + key, |                 OvsdbDao.wifiVifStateDbTable + "_" + key, | ||||||
|                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), |                 new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, | ||||||
|                 new MonitorCallback() { |                         new MonitorRequest(new MonitorSelect(false, true, true, true)))), | ||||||
|  |                 tableUpdates -> { | ||||||
|                     @Override |                     try { | ||||||
|                     public void update(TableUpdates tableUpdates) { |  | ||||||
|                         LOG.info(OvsdbDao.wifiVifStateDbTable + "_" + key + " monitor callback received {}", |                         LOG.info(OvsdbDao.wifiVifStateDbTable + "_" + key + " monitor callback received {}", | ||||||
|                                 tableUpdates); |                                 tableUpdates); | ||||||
|  |  | ||||||
| @@ -684,37 +737,81 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|                             } |                             } | ||||||
|  |  | ||||||
|                         } |                         } | ||||||
|  |                     } catch (Exception e) { | ||||||
|  |                         LOG.error("wifiVIFStateDbTableUpdate failed", e); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 }); |                 }); | ||||||
|  |  | ||||||
|         vsCf.join(); |         vsCf.join(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private void monitorNodeStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
|  |         CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor( | ||||||
|  |                 OvsdbDao.ovsdbName, OvsdbDao.nodeStateTable + "_" + key, new MonitorRequests(ImmutableMap | ||||||
|  |                         .of(OvsdbDao.nodeStateTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), | ||||||
|  |                 tableUpdates -> { | ||||||
|  |                     LOG.info(OvsdbDao.nodeStateTable + "_" + key + " monitor callback received {}"); | ||||||
|  |                     tableUpdates.getTableUpdates().forEach((key1, value) -> { | ||||||
|  |                         LOG.info("TableUpdate for {}", key1); | ||||||
|  |                         value.getRowUpdates().values().forEach(r -> { | ||||||
|  |                             if (r.getOld() != null) { | ||||||
|  |                                 LOG.info("Node_State old row {}", r.getOld().getColumns()); | ||||||
|  |                             } | ||||||
|  |                             if (r.getNew() != null) { | ||||||
|  |                                 LOG.info("Node_State new row {}", r.getNew().getColumns()); | ||||||
|  |                             } | ||||||
|  |                         }); | ||||||
|  |  | ||||||
|  |                     }); | ||||||
|  |                 }); | ||||||
|  |         nsCf.join(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void monitorAPCStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { | ||||||
|  |         CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor( | ||||||
|  |                 OvsdbDao.ovsdbName, OvsdbDao.apcStateDbTable + "_" + key, new MonitorRequests(ImmutableMap | ||||||
|  |                         .of(OvsdbDao.apcStateDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))), | ||||||
|  |                 tableUpdates -> { | ||||||
|  |                     LOG.info(OvsdbDao.apcStateDbTable + "_" + key + " monitor callback received {}"); | ||||||
|  |                     tableUpdates.getTableUpdates().forEach((key1, value) -> { | ||||||
|  |                         LOG.info("TableUpdate for {}", key1); | ||||||
|  |                         value.getRowUpdates().values().forEach(r -> { | ||||||
|  |  | ||||||
|  |                             Map<String, String> apcStateAttributes = ovsdbDao.getAPCState(r, key); | ||||||
|  |  | ||||||
|  |                             extIntegrationInterface.apcStateDbTableUpdate(apcStateAttributes, key, | ||||||
|  |                                     RowUpdateOperation.MODIFY); | ||||||
|  |  | ||||||
|  |                         }); | ||||||
|  |  | ||||||
|  |                     }); | ||||||
|  |                 }); | ||||||
|  |         nsCf.join(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public String closeSession(String apId) { |     public String closeSession(String apId) { | ||||||
|         OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); |         OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|         try { |         if (session != null) { | ||||||
|             session.getOvsdbClient().shutdown(); |             try { | ||||||
|         } catch (Exception e) { |                 session.getOvsdbClient().shutdown(); | ||||||
|             LOG.error("Failed to close session to " + apId + " " + e.getLocalizedMessage()); |             } catch (Exception e) { | ||||||
|             return "Failed to close session to " + apId + " " + e.getLocalizedMessage(); |                 LOG.error("Failed to close session to " + apId + " " + e.getLocalizedMessage()); | ||||||
|  |                 return "Failed to close session to " + apId + " " + e.getLocalizedMessage(); | ||||||
|  |  | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         LOG.debug("Closed session to " + apId); |         LOG.debug("Closed session to " + apId); | ||||||
|         return "Closed session to " + apId; |         return "Closed session to " + apId; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username, |     public String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username) { | ||||||
|             String validationCode) { |  | ||||||
|         try { |         try { | ||||||
|             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); |             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|  |  | ||||||
|             ovsdbDao.configureFirmwareDownload(session.getOvsdbClient(), apId, firmwareUrl, firmwareVersion, username, |             ovsdbDao.configureFirmwareDownload(session.getOvsdbClient(), apId, firmwareUrl, firmwareVersion, username); | ||||||
|                     validationCode); |  | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             LOG.error("Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage()); |             LOG.error("Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage()); | ||||||
|             return "Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage(); |             return "Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage(); | ||||||
| @@ -746,17 +843,11 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         try { |         try { | ||||||
|             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); |             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|             OvsdbClient ovsdbClient = session.getOvsdbClient(); |             OvsdbClient ovsdbClient = session.getOvsdbClient(); | ||||||
|  |  | ||||||
|             // TODO: need to establish what the command will be to start debug |  | ||||||
|             // logging, on the AP side |  | ||||||
|             // For now, use start_debug_engine |  | ||||||
|             // Map will have gateway_host and gateway_port for now |  | ||||||
|             // Delay/Duration TBD, just use 0s for now |  | ||||||
|             Map<String, String> payload = new HashMap<>(); |             Map<String, String> payload = new HashMap<>(); | ||||||
|             payload.put("gateway_hostname", gatewayHostname); |             payload.put("gateway_hostname", gatewayHostname); | ||||||
|             payload.put("gateway_port", gatewayPort.toString()); |             payload.put("gateway_port", gatewayPort.toString()); | ||||||
|             ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, Long.valueOf(0L), |             ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L, | ||||||
|                     Long.valueOf(0L)); |                     defaultCommandDurationSec); | ||||||
|  |  | ||||||
|             LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort); |             LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort); | ||||||
|             return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort; |             return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort; | ||||||
| @@ -776,10 +867,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         try { |         try { | ||||||
|             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); |             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|             OvsdbClient ovsdbClient = session.getOvsdbClient(); |             OvsdbClient ovsdbClient = session.getOvsdbClient(); | ||||||
|  |  | ||||||
|             Map<String, String> payload = new HashMap<>(); |             Map<String, String> payload = new HashMap<>(); | ||||||
|             ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StopDebugEngineApCommand, payload, Long.valueOf(0L), |             ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StopDebugEngineApCommand, payload, 0L, 0L); | ||||||
|                     Long.valueOf(0L)); |  | ||||||
|  |  | ||||||
|             LOG.debug("TipWlanOvsdbClient::stopDebugEngine Stop debug engine on AP  {}", apId); |             LOG.debug("TipWlanOvsdbClient::stopDebugEngine Stop debug engine on AP  {}", apId); | ||||||
|             return "Stop debug engine on AP " + apId; |             return "Stop debug engine on AP " + apId; | ||||||
| @@ -859,19 +948,40 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { | |||||||
|         return key; |         return key; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public String processNewChannelsRequest(String apId, Map<RadioType, Integer> channelMap) { |     public String processNewChannelsRequest(String apId, Map<RadioType, Integer> backupChannelMap, | ||||||
|         LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId); |             Map<RadioType, Integer> primaryChannelMap) { | ||||||
|  |         LOG.info("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId); | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); |             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|             OvsdbClient ovsdbClient = session.getOvsdbClient(); |             OvsdbClient ovsdbClient = session.getOvsdbClient(); | ||||||
|             ovsdbDao.processNewChannelsRequest(ovsdbClient, channelMap); |             ovsdbDao.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap); | ||||||
|             LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest change backup channels for AP   {}", apId); |             LOG.info("TipWlanOvsdbClient::processNewChannelsRequest change backup and/or primary channels for AP {}", | ||||||
|             return "Triggered a factory reset of AP  " + apId; |                     apId); | ||||||
|  |             return " change backup and/or primary channels for AP " + apId; | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             LOG.error("TipWlanOvsdbClient::processNewChannelsRequest failed to change backup channels for AP {}", apId, |             LOG.error( | ||||||
|                     e); |                     "TipWlanOvsdbClient::processNewChannelsRequest failed to change backup and/or primary channels for AP {}", | ||||||
|             return " failed to change backup channels for AP " + apId; |                     apId, e); | ||||||
|  |             return "failed to change backup and/or primary channels for AP " + apId; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |      | ||||||
|  |     public String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) { | ||||||
|  |         LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest for AP {}", apId); | ||||||
|  |  | ||||||
|  |         try { | ||||||
|  |             OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); | ||||||
|  |             OvsdbClient ovsdbClient = session.getOvsdbClient(); | ||||||
|  |             ovsdbDao.processCellSizeAttributesRequest(ovsdbClient, cellSizeAttributeMap); | ||||||
|  |             LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest change cellSizeAttributes for AP {}", | ||||||
|  |                     apId); | ||||||
|  |             return " change cell size attributes for AP " + apId; | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             LOG.error( | ||||||
|  |                     "TipWlanOvsdbClient::processCellSizeAttributesRequest failed to change cell size attributes for AP {}", | ||||||
|  |                     apId, e); | ||||||
|  |             return "failed to change cell size attributes for AP " + apId; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user