Compare commits

..

1 Commits

Author SHA1 Message Date
Mike Hansen
af604289cc WIFI-2988: Ovsdb schema check for Wifi_Radio_Config and Wifi_RRM_Config
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-13 15:17:50 -04:00
26 changed files with 943 additions and 936 deletions

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-ext-cloud</artifactId>
@@ -19,121 +19,121 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>base-client</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-gateway-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>customer-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>location-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>portal-user-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>service-metric-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>service-metric-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>system-event-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>system-event-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>status-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>client-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>client-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>routing-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>firmware-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>manufacturer-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -25,10 +25,6 @@ import org.springframework.stereotype.Component;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.telecominfraproject.wlan.alarm.AlarmServiceInterface;
import com.telecominfraproject.wlan.alarm.models.Alarm;
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
import com.telecominfraproject.wlan.client.ClientServiceInterface;
import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails;
import com.telecominfraproject.wlan.client.models.Client;
@@ -116,7 +112,6 @@ import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent.ApcMode;
import sts.OpensyncStats.Report;
import traffic.NetworkMetadata.FlowReport;
@@ -148,8 +143,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private FirmwareServiceInterface firmwareServiceInterface;
@Autowired
private MqttStatsPublisher mqttMessageProcessor;
@Autowired
private AlarmServiceInterface alarmServiceInterface;
@Autowired
private OpensyncCloudGatewayController gatewayController;
@@ -182,7 +175,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Override
public void apConnected(String apId, ConnectNodeInfo connectNodeInfo) {
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
try {
@@ -294,7 +287,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
// equipment already exists
boolean needToUpdateEquipment = false;
MacAddress reportedMacAddress = null;
alarmServiceInterface.delete(ce.getCustomerId(), ce.getId());
try {
reportedMacAddress = MacAddress.valueOf(connectNodeInfo.macAddress);
} catch (RuntimeException e) {
@@ -550,11 +542,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress));
protocolStatusData.setCloudCfgDataVersion(42L);
protocolStatusData.setReportedCfgDataVersion(42L);
CountryCode countryCode = Location.getCountryCode(locationServiceInterface.get(ce.getLocationId()));
protocolStatusData.setCountryCode(countryCode.getName());
if (connectNodeInfo.country != null) {
protocolStatusData.setReportedCC(CountryCode.getByName(connectNodeInfo.country));
}
protocolStatusData.setCountryCode("CA");
protocolStatusData.setReportedCC(CountryCode.CA);
protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion);
if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) {
protocolStatusData.setReportedSwVersion(connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY));
@@ -891,20 +880,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private void updateApDisconnectedStatus(String apId, Equipment ce) {
LOG.info("updateApDisconnectedStatus disconnected AP {}", apId);
try {
Alarm disconnectedAlarm = new Alarm();
disconnectedAlarm.setCustomerId(ce.getCustomerId());
disconnectedAlarm.setEquipmentId(ce.getId());
disconnectedAlarm.setAlarmCode(AlarmCode.Disconnected);
AlarmDetails alarmDetails = new AlarmDetails();
alarmDetails.setMessage(AlarmCode.Disconnected.getDescription());
alarmDetails.setAffectedEquipmentIds(List.of(ce.getId()));
alarmDetails.setGeneratedBy(apId);
disconnectedAlarm.setDetails(alarmDetails);
alarmServiceInterface.create(disconnectedAlarm);
Status statusRecord = new Status();
statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId());
@@ -1049,7 +1024,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if ((blockedClients != null) && !blockedClients.isEmpty()) {
blockedClients.forEach(client -> blockList.add(client.getMacAddress()));
}
ret.setBlockedClients(blockList);
ret.setRadiusProfiles(new ArrayList<>(radiusSet));
@@ -1067,6 +1042,16 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
mqttMessageProcessor.processMqttMessage(topic, report);
}
@Override
public void processMqttMessage(String topic, FlowReport flowReport) {
mqttMessageProcessor.processMqttMessage(topic, flowReport);
}
@Override
public void processMqttMessage(String topic, WCStatsReport wcStatsReport) {
mqttMessageProcessor.processMqttMessage(topic, wcStatsReport);
}
@Override
public void wifiVIFStateDbTableUpdate(List<OpensyncAPVIFState> vifStateTables, String apId) {
LOG.debug("Received Wifi_VIF_State table update for AP {}", apId);
@@ -1302,7 +1287,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("Protocol Status reportedCC {} radioStatus.getCountry {} radioStatus CountryCode fromName {}", protocolStatusData.getReportedCC(),
radioState.getCountry(), CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setReportedCC(CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setCountryCode(radioState.getCountry());
protocolStatus.setDetails(protocolStatusData);
} else {
@@ -1323,7 +1307,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
channelStatus.setDetails(channelStatusData);
}
((EquipmentChannelStatusData) channelStatus.getDetails()).getChannelNumberStatusDataMap().put(radioState.getFreqBand(), radioState.getChannel());
((EquipmentChannelStatusData) channelStatus.getDetails()).getTxPowerDataMap().put(radioState.getFreqBand(), radioState.getTxPower());
return channelStatus;
}
@@ -1755,7 +1738,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (node.qrCode != null) {
if (node.qrCode.containsKey("DT")) {
qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT")));
}
}
qrCode.setVendorName(node.qrCode.get("VN"));
if (isValidMACAddress(node.qrCode.get("DM"))) {
qrCode.setDeviceMac(MacAddress.valueOf(node.qrCode.get("DM")));
@@ -2046,8 +2029,31 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
// Create or update
Client client = clientServiceInterface.getOrNull(customerId, clientMacAddress);
if (client == null) {
LOG.info("No client present for {}", clientMacAddress);
continue;
LOG.info("Cannot find client instance for {}", clientMacAddress);
if (rowUpdateOperation.equals(RowUpdateOperation.INSERT)) {
client = new Client();
client.setCustomerId(customerId);
client.setMacAddress(clientMacAddress);
client.setDetails(new ClientInfoDetails());
if (dhcpLeasedIps.containsKey("hostname")) {
((ClientInfoDetails) client.getDetails()).setHostName(dhcpLeasedIps.get("hostname"));
}
if (dhcpLeasedIps.containsKey("fingerprint")) {
((ClientInfoDetails) client.getDetails()).setApFingerprint(dhcpLeasedIps.get("fingerprint"));
}
if (dhcpLeasedIps.containsKey("device_type")) {
DhcpFpDeviceType dhcpFpDeviceType = DhcpFpDeviceType.getByName(dhcpLeasedIps.get("device_type"));
ClientType clientType = OvsdbToWlanCloudTypeMappingUtility.getClientTypeForDhcpFpDeviceType(dhcpFpDeviceType);
LOG.debug("Translate from ovsdb {} to cloud {}", dhcpFpDeviceType, clientType);
((ClientInfoDetails) client.getDetails()).setClientType(clientType.getId());
}
client = clientServiceInterface.create(client);
LOG.info("Created client from DHCP_Leased_IP event {}.", client);
ClientSession session = updateClientSession(customerId, equipmentId, locationId, dhcpLeasedIps, clientMacAddress);
if (session != null) {
clientSessionList.add(session);
}
}
} else {
LOG.info("Client {} already exists on the cloud, update client values", dhcpLeasedIps);
if (dhcpLeasedIps.containsKey("hostname")) {
@@ -2127,8 +2133,19 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
ClientSession session = clientServiceInterface.getSessionOrNull(customerId, equipmentId, clientMacAddress);
if (session == null) {
LOG.info("No session for client {} with for customer {} equipment {}", clientMacAddress, customerId, equipmentId);
return null;
session = new ClientSession();
session.setCustomerId(customerId);
session.setEquipmentId(equipmentId);
session.setLocationId(locationId);
session.setMacAddress(clientMacAddress);
session.setDetails(new ClientSessionDetails());
session.getDetails().setSessionId(clientMacAddress.getAddressAsLong());
session.getDetails().setDhcpDetails(new ClientDhcpDetails(clientMacAddress.getAddressAsLong()));
session.getDetails().getDhcpDetails().setLeaseStartTimestamp(timestamp);
session.getDetails().setMetricDetails(new ClientSessionMetricDetails());
session.getDetails().setLastEventTimestamp(timestamp);
session.getDetails().setAssociationState(AssociationState._802_11_Associated);
session.getDetails().setAssocTimestamp(timestamp);
} else {
if (session.getDetails().getPriorEquipmentId() == null) {
session.getDetails().setPriorEquipmentId(session.getEquipmentId());
@@ -2420,7 +2437,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.error("UnknownHost for designatedRouterIp", e);
}
Status protocolStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.PROTOCOL);
String mode = apcStateAttributes.get("mode");
InetAddress localIpV4Addr = null;
if (protocolStatus != null) {
@@ -2429,13 +2445,10 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setLastApcUpdate(System.currentTimeMillis());
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setReportedApcAddress(drIpAddr);
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setRadiusProxyAddress(drIpAddr);
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setApcMode(ApcMode.valueOf(mode));
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setApcBackupDesignatedRouterIpAddress(bdrIpAddr);
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setApcDesignatedRouterIpAddress(drIpAddr);
protocolStatus = statusServiceInterface.update(protocolStatus);
LOG.info("Protocol Status updated for APC_State table monitor change {}", protocolStatus);
}
String mode = apcStateAttributes.get("mode");
ApcElectionEvent electionEvent =
new ApcElectionEvent(drIpAddr, bdrIpAddr, localIpV4Addr, drIpAddr, mode, Boolean.valueOf(apcStateAttributes.get("enabled")),
RealTimeEventType.APC_Election_event, customerId, ce.getLocationId(), equipmentId, System.currentTimeMillis());

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.external.integration.controller;
import java.util.ArrayList;
@@ -150,16 +149,19 @@ public class OpensyncCloudGatewayController {
String inventoryId = command.getInventoryId();
if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) {
LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, "Unsupported value in command for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()));
LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId,
command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Unsupported value in command for " + inventoryId, command, registeredGateway.getHostname(),
registeredGateway.getPort()));
return;
}
OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId);
if (session == null) {
LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "No session found for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()));
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE,
"No session found for " + inventoryId, command, registeredGateway.getHostname(),
registeredGateway.getPort()));
return;
}
@@ -199,7 +201,8 @@ public class OpensyncCloudGatewayController {
ret.add(processRadioReboot(session, (CEGWRebootRequest) command));
break;
case ClientBlocklistChangeNotification:
ret.add(sendClientBlocklistChangeNotification(session, (CEGWClientBlocklistChangeNotification) command));
ret.add(sendClientBlocklistChangeNotification(session,
(CEGWClientBlocklistChangeNotification) command));
break;
case NewChannelRequest:
ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
@@ -209,20 +212,22 @@ public class OpensyncCloudGatewayController {
break;
default:
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Invalid command type (" + command.getCommandType() + ") for equipment (" + inventoryId + ")", command,
registeredGateway == null ? null : registeredGateway.getHostname(),
registeredGateway == null ? -1 : registeredGateway.getPort()));
ret.add(new EquipmentCommandResponse(
CEGWCommandResultCode.UnsupportedCommand, "Invalid command type ("
+ command.getCommandType() + ") for equipment (" + inventoryId + ")",
command, registeredGateway.getHostname(), registeredGateway.getPort()));
}
}
});
return ret;
}
private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session, CEGWFirmwareDownloadRequest command) {
private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session,
CEGWFirmwareDownloadRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
@@ -254,18 +259,19 @@ public class OpensyncCloudGatewayController {
if (null != command.getRoutingId()) {
if (!command.getRoutingId().equals(session.getRoutingId())) {
LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(), command.getInventoryId(), session.getRoutingId(),
command.getRoutingId());
LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(),
command.getInventoryId(), session.getRoutingId(), command.getRoutingId());
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer",
command, registeredGateway.getHostname(), registeredGateway.getPort());
}
}
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Route active", command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
registeredGateway.getHostname(), registeredGateway.getPort());
}
private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session, CEGWConfigChangeNotification command) {
private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session,
CEGWConfigChangeNotification command) {
return sendMessage(session, command.getInventoryId(), command);
}
@@ -275,24 +281,27 @@ public class OpensyncCloudGatewayController {
session.getOvsdbClient().shutdown();
} catch (Exception e) {
LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage());
return new EquipmentCommandResponse(CEGWCommandResultCode.FailedToSend,
"Failed to send command " + command.getCommandType() + " to " + command.getInventoryId() + ": " + e.getMessage(), command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
return new EquipmentCommandResponse(
CEGWCommandResultCode.FailedToSend, "Failed to send command " + command.getCommandType() + " to "
+ command.getInventoryId() + ": " + e.getMessage(),
command, registeredGateway.getHostname(), registeredGateway.getPort());
}
LOG.debug("[{}] Closed session to CE", command.getInventoryId());
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Closed session to " + command.getInventoryId(), command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
return new EquipmentCommandResponse(CEGWCommandResultCode.Success,
"Closed session to " + command.getInventoryId(), command, registeredGateway.getHostname(),
registeredGateway.getPort());
}
private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session, CEGWClientBlocklistChangeNotification command) {
private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session,
CEGWClientBlocklistChangeNotification command) {
return sendMessage(session, command.getInventoryId(), command);
}
private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
@@ -308,17 +317,15 @@ public class OpensyncCloudGatewayController {
private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) {
LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId);
EquipmentCommandResponse response =
new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
EquipmentCommandResponse response = new EquipmentCommandResponse(CEGWCommandResultCode.Success,
"Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway.getHostname(), registeredGateway.getPort());
if (command instanceof CEGWBlinkRequest) {
String resultDetails = tipwlanOvsdbClient.processBlinkRequest(inventoryId, ((CEGWBlinkRequest)command).getBlinkAllLEDs());
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWConfigChangeNotification) {
if (command instanceof CEGWConfigChangeNotification) {
tipwlanOvsdbClient.processConfigChanged(inventoryId);
} else if (command instanceof CEGWClientBlocklistChangeNotification) {
tipwlanOvsdbClient.processClientBlocklistChange(inventoryId, ((CEGWClientBlocklistChangeNotification) command).getBlockList());
tipwlanOvsdbClient.processClientBlocklistChange(inventoryId,
((CEGWClientBlocklistChangeNotification) command).getBlockList());
} else if (command instanceof CEGWChangeRedirectorHost) {
String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost();
tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress);
@@ -333,7 +340,7 @@ public class OpensyncCloudGatewayController {
Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels();
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels, newPrimaryChannels);
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels);
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWCellSizeAttributesRequest) {
CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
@@ -350,7 +357,8 @@ public class OpensyncCloudGatewayController {
String firmwareVersion = dlRequest.getFirmwareVersion();
String username = dlRequest.getUsername();
String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, username);
String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
username);
response.setResultDetail(resultDetails);
@@ -362,15 +370,15 @@ public class OpensyncCloudGatewayController {
flashRequest.getInventoryId();
flashRequest.getUsername();
String resultDetails =
tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(), flashRequest.getFirmwareVersion(), flashRequest.getUsername());
String resultDetails = tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(),
flashRequest.getFirmwareVersion(), flashRequest.getUsername());
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWRadioResetRequest) {
response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
registeredGateway.getHostname(), registeredGateway.getPort());
} else if (command instanceof CEGWRebootRequest) {
CEGWRebootRequest rebootRequest = (CEGWRebootRequest) command;
@@ -394,9 +402,10 @@ public class OpensyncCloudGatewayController {
default:
response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
registeredGateway.getHostname(), registeredGateway.getPort());
}
}
return response;
@@ -414,14 +423,15 @@ public class OpensyncCloudGatewayController {
return sendMessage(session, command.getInventoryId(), command);
}
private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
@RequestMapping(value = "/commandWithUser", method = RequestMethod.POST)
public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command, @AuthenticationPrincipal Object requestUser,
HttpServletRequest httpServletRequest) {
public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command,
@AuthenticationPrincipal Object requestUser, HttpServletRequest httpServletRequest) {
// use these properties to get address and port where request has
// arrived
@@ -454,7 +464,8 @@ public class OpensyncCloudGatewayController {
}
if (eqRoutingSvc == null) {
throw new ConfigurationException("Unable to register gateway with routing service: routing service interface not initialized");
throw new ConfigurationException(
"Unable to register gateway with routing service: routing service interface not initialized");
}
cleanupStaleGwRecord();
@@ -470,11 +481,13 @@ public class OpensyncCloudGatewayController {
EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord);
registeredGwId = result.getId();
registeredGateway = result;
LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(), registeredGwId);
LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(),
registeredGwId);
registeredWithRoutingService = true;
} catch (RuntimeException e) {
// failed
LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}", getGatewayName(), e.getLocalizedMessage());
LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}",
getGatewayName(), e.getLocalizedMessage());
}
}
}
@@ -499,7 +512,8 @@ public class OpensyncCloudGatewayController {
eqRoutingSvc.deleteGateway(eqpRec.getId());
} catch (RuntimeException e) {
// failed
LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}", eqpRec.getHostname(), e.getLocalizedMessage());
LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}",
eqpRec.getHostname(), e.getLocalizedMessage());
}
} else {
LOG.debug("Gateway {} is reachable.", eqpRec.getHostname());
@@ -510,8 +524,9 @@ public class OpensyncCloudGatewayController {
}
} catch (Exception ex) { // Catching Exception to prevent crashing the
// register thread
LOG.debug("Generic Exception encountered when trying to cleanup " + "the stale not-reachable GateWays. Continuing to register the new Gateway."
+ " Error: {} ", ex.getMessage());
LOG.debug("Generic Exception encountered when trying to cleanup "
+ "the stale not-reachable GateWays. Continuing to register the new Gateway." + " Error: {} ",
ex.getMessage());
}
}
@@ -535,13 +550,14 @@ public class OpensyncCloudGatewayController {
if (registeredWithRoutingService) {
try {
eqRoutingSvc.deleteGateway(registeredGwId);
LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service", getGatewayName(), registeredGwId);
LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service",
getGatewayName(), registeredGwId);
registeredGwId = -1;
registeredGateway = null;
} catch (Exception e) {
// failed
LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}", getGatewayName(), registeredGwId,
e.getLocalizedMessage());
LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}",
getGatewayName(), registeredGwId, e.getLocalizedMessage());
}
registeredWithRoutingService = false;
}
@@ -559,10 +575,12 @@ public class OpensyncCloudGatewayController {
* @param equipmentId
* @return associationId
*/
public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId, Long equipmentId) {
public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId,
Long equipmentId) {
registerWithRoutingService();
if (!registeredWithRoutingService) {
LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName, equipmentId);
LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName,
equipmentId);
return null;
}
// Clean up stale records
@@ -574,11 +592,13 @@ public class OpensyncCloudGatewayController {
try {
routingRecord = eqRoutingSvc.create(routingRecord);
LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingRecord.getId());
LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId,
routingRecord.getId());
return routingRecord;
} catch (Exception e) {
LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId, e.getLocalizedMessage());
LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId,
e.getLocalizedMessage());
}
return null;
}
@@ -591,7 +611,7 @@ public class OpensyncCloudGatewayController {
* Gateway does not exist, delete the equipmentRouting entry.
*
* @param equipmentId:
* Equipment's ID
* Equipment's ID
*/
protected void cleanupStaleEqptRoutingRecord(Long equipmentId) {
LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId);
@@ -604,17 +624,20 @@ public class OpensyncCloudGatewayController {
if (gwRec != null) {
if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) {
// GW isn't reachable --> invoke unregister
LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry", gwRec.getHostname());
LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry",
gwRec.getHostname());
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
} else {
LOG.debug("Gateway {} is reachable.", gwRec.getHostname());
}
} else {
LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ", eqRouting.getGatewayId());
LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ",
eqRouting.getGatewayId());
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
}
} catch (DsEntityNotFoundException entityNotFoundException) {
LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry", eqRouting.getGatewayId());
LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry",
eqRouting.getGatewayId());
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
}
}
@@ -623,10 +646,9 @@ public class OpensyncCloudGatewayController {
}
} catch (Exception genericException) { // Catching Exception to prevent
// crashing the register thread
LOG.debug(
"Generic Exception encountered when trying to cleanup "
+ "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord." + " Error: {} ",
equipmentId, genericException.getMessage());
LOG.debug("Generic Exception encountered when trying to cleanup "
+ "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord."
+ " Error: {} ", equipmentId, genericException.getMessage());
}
}
@@ -635,7 +657,8 @@ public class OpensyncCloudGatewayController {
eqRoutingSvc.delete(routingId);
} catch (RuntimeException e) {
// failed
LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId, e.getLocalizedMessage());
LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId,
e.getLocalizedMessage());
return false;
}
return true;
@@ -643,16 +666,18 @@ public class OpensyncCloudGatewayController {
public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) {
if (!registeredWithRoutingService) {
LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName, equipmentId);
LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName,
equipmentId);
return;
}
try {
LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingId);
LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId,
routingId);
eqRoutingSvc.delete(routingId);
} catch (Exception e) {
LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName, equipmentId, routingId,
e.getLocalizedMessage());
LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName,
equipmentId, routingId, e.getLocalizedMessage());
}
}

View File

@@ -6,7 +6,6 @@ import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -17,7 +16,6 @@ import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.google.protobuf.ByteString;
@@ -25,12 +23,6 @@ import com.google.protobuf.Descriptors;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;
import com.google.protobuf.util.JsonFormat.TypeRegistry;
import com.telecominfraproject.wlan.alarm.AlarmServiceInterface;
import com.telecominfraproject.wlan.alarm.models.Alarm;
import com.telecominfraproject.wlan.alarm.models.AlarmCode;
import com.telecominfraproject.wlan.alarm.models.AlarmDetails;
import com.telecominfraproject.wlan.alarm.models.AlarmScopeType;
import com.telecominfraproject.wlan.alarm.models.OriginatorType;
import com.telecominfraproject.wlan.client.ClientServiceInterface;
import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails;
import com.telecominfraproject.wlan.client.session.models.AssociationState;
@@ -76,7 +68,6 @@ import com.telecominfraproject.wlan.servicemetric.models.ServiceMetric;
import com.telecominfraproject.wlan.servicemetric.neighbourscan.models.NeighbourReport;
import com.telecominfraproject.wlan.servicemetric.neighbourscan.models.NeighbourScanReports;
import com.telecominfraproject.wlan.status.StatusServiceInterface;
import com.telecominfraproject.wlan.status.equipment.models.EquipmentAdminStatusData;
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID;
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSIDs;
import com.telecominfraproject.wlan.status.equipment.report.models.EquipmentCapacityDetails;
@@ -142,17 +133,43 @@ public class MqttStatsPublisher {
private CloudEventDispatcherInterface cloudEventDispatcherInterface;
@Autowired
private RealtimeEventPublisher realtimeEventPublisher;
@Autowired
private AlarmServiceInterface alarmServiceInterface;
@Value("${tip.wlan.mqttStatsPublisher.temperatureThresholdInC:80}")
private int temperatureThresholdInC;
public void processMqttMessage(String topic, WCStatsReport wcStatsReport) {
LOG.info("Received WCStatsReport {}", wcStatsReport.toString());
@Value("${tip.wlan.mqttStatsPublisher.cpuUtilThresholdPct:80}")
private int cpuUtilThresholdPct;
LOG.debug("Received report on topic {}", topic);
int customerId = extractCustomerIdFromTopic(topic);
@Value("${tip.wlan.mqttStatsPublisher.memoryUtilThresholdPct:70}")
private int memoryUtilThresholdPct;
long equipmentId = extractEquipmentIdFromTopic(topic);
if ((equipmentId <= 0) || (customerId <= 0)) {
LOG.warn("Cannot determine equipment ids from topic {} - customerId {} equipmentId {}", topic, customerId, equipmentId);
return;
}
String apId = extractApIdFromTopic(topic);
if (apId == null) {
LOG.warn("Cannot determine AP id from topic {} - customerId {} equipmentId {} apId {}", topic, customerId, equipmentId, apId);
return;
}
if (LOG.isTraceEnabled()) {
// prepare a JSONPrinter to format protobuf messages as
// json
List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
protobufDescriptors.addAll(IpDnsTelemetry.getDescriptor().getMessageTypes());
TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
JsonFormat.Printer jsonPrinter = JsonFormat.printer().preservingProtoFieldNames().includingDefaultValueFields().usingTypeRegistry(oldRegistry);
try {
LOG.trace("MQTT IpDnsTelemetry.wcStatsReport = {}", jsonPrinter.print(wcStatsReport));
} catch (InvalidProtocolBufferException e1) {
LOG.error("Couldn't parse IpDnsTelemetry.wcStatsReport.", e1);
}
}
}
public void processMqttMessage(String topic, Report report) {
LOG.info("Received report on topic {} for ap {}", topic, report.getNodeID());
@@ -163,6 +180,9 @@ public class MqttStatsPublisher {
LOG.warn("Cannot determine equipment ids from topic {} - customerId {} equipmentId {}", topic, customerId, equipmentId);
return;
}
// gatewayController.updateActiveCustomer(customerId);
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.warn("Cannot read equipment {}", apId);
@@ -172,6 +192,21 @@ public class MqttStatsPublisher {
long locationId = ce.getLocationId();
long profileId = ce.getProfileId();
// prepare a JSONPrinter to format protobuf messages as
// json
// List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
// protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
// TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
// JsonFormat.Printer jsonPrinter =
// JsonFormat.printer().preservingProtoFieldNames().includingDefaultValueFields().usingTypeRegistry(oldRegistry);
//
// try {
// LOG.trace(jsonPrinter.print(report));
//
// } catch (InvalidProtocolBufferException e1) {
// LOG.error("Couldn't parse OpensyncStats.report.", e1);
// }
List<ServiceMetric> metricRecordList = new ArrayList<>();
try {
@@ -187,25 +222,62 @@ public class MqttStatsPublisher {
LOG.debug("Current timestamp for service metrics is {}", serviceMetricTimestamp);
metricRecordList.stream().forEach(smr -> {
smr.setCreatedTimestamp(serviceMetricTimestamp);
if (smr.getLocationId() == 0)
smr.setLocationId(locationId);
if (smr.getCustomerId() == 0)
smr.setCustomerId(customerId);
if (smr.getEquipmentId() == 0L)
smr.setEquipmentId(equipmentId);
if (smr.getLocationId() == 0) smr.setLocationId(locationId);
if(smr.getCustomerId() == 0) smr.setCustomerId(customerId);
if (smr.getEquipmentId() == 0L) smr.setEquipmentId(equipmentId);
});
metricRecordList.stream().forEach(smr -> {
LOG.debug("ServiceMetric {}", smr);
});
cloudEventDispatcherInterface.publishMetrics(metricRecordList);
}
publishEvents(report, customerId, equipmentId, apId, locationId);
// handleRssiMetrics(metricRecordList, report, customerId,
// equipmentId, locationId);
} catch (Exception e) {
LOG.error("Exception when processing stats messages from AP", e);
}
}
public void processMqttMessage(String topic, FlowReport flowReport) {
LOG.info("Received report on topic {}", topic);
int customerId = extractCustomerIdFromTopic(topic);
long equipmentId = extractEquipmentIdFromTopic(topic);
if ((equipmentId <= 0) || (customerId <= 0)) {
LOG.warn("Cannot determine equipment ids from topic {} - customerId {} equipmentId {}", topic, customerId, equipmentId);
return;
}
String apId = extractApIdFromTopic(topic);
if (apId == null) {
LOG.warn("Cannot determine AP id from topic {} - customerId {} equipmentId {} apId {}", topic, customerId, equipmentId, apId);
return;
}
if (LOG.isTraceEnabled()) {
// prepare a JSONPrinter to format protobuf messages as
// json
List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
protobufDescriptors.addAll(NetworkMetadata.getDescriptor().getMessageTypes());
TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
JsonFormat.Printer jsonPrinter = JsonFormat.printer().preservingProtoFieldNames().includingDefaultValueFields().usingTypeRegistry(oldRegistry);
try {
LOG.trace("MQTT NetworkMetadata.flowReport = {}", jsonPrinter.print(flowReport));
} catch (InvalidProtocolBufferException e1) {
LOG.error("Couldn't parse NetworkMetadata.flowReport.", e1);
}
}
}
public void publishSystemEventFromTableStateMonitor(SystemEvent event) {
LOG.info("Publishing SystemEvent received by TableStateMonitor {}", event);
cloudEventDispatcherInterface.publishEvent(event);
@@ -866,43 +938,22 @@ public class MqttStatsPublisher {
numSamples++;
}
}
if (numSamples > 0) {
avgRadioTemp = Math.round((cpuTemperature / numSamples));
apPerformance.setCpuTemperature(avgRadioTemp);
}
if (avgRadioTemp > temperatureThresholdInC) {
raiseDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.CPUTemperature, deviceReport.getTimestampMs());
} else {
// Clear any existing temperature alarms for this ap
clearDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.CPUTemperature);
}
}
if (deviceReport.hasCpuUtil() && deviceReport.getCpuUtil().hasCpuUtil()) {
Integer cpuUtilization = deviceReport.getCpuUtil().getCpuUtil();
apPerformance.setCpuUtilized(new int[] {cpuUtilization});
if (cpuUtilization > cpuUtilThresholdPct) {
raiseDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.CPUUtilization, deviceReport.getTimestampMs());
} else {
// Clear any existing cpuUtilization alarms
clearDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.CPUUtilization);
}
}
apPerformance.setEthLinkState(EthernetLinkState.UP1000_FULL_DUPLEX);
if (deviceReport.hasMemUtil() && deviceReport.getMemUtil().hasMemTotal() && deviceReport.getMemUtil().hasMemUsed()) {
apPerformance.setFreeMemory(deviceReport.getMemUtil().getMemTotal() - deviceReport.getMemUtil().getMemUsed());
double usedMemory = deviceReport.getMemUtil().getMemUsed();
double totalMemory = deviceReport.getMemUtil().getMemTotal();
if (usedMemory/totalMemory * 100 > memoryUtilThresholdPct) {
raiseDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.MemoryUtilization, deviceReport.getTimestampMs());
} else {
// Clear any existing cpuUtilization alarms
clearDeviceThresholdAlarm(customerId, equipmentId, AlarmCode.MemoryUtilization);
}
}
apPerformance.setUpTime((long) deviceReport.getUptime());
@@ -913,11 +964,9 @@ public class MqttStatsPublisher {
List<PerProcessUtilization> memPerProcess = new ArrayList<>();
deviceReport.getPsMemUtilList().stream().forEach(c -> memPerProcess.add(new PerProcessUtilization(c.getPid(), c.getCmd(), c.getUtil())));
apPerformance.setPsMemUtil(memPerProcess);
apPerformance.setSourceTimestampMs(deviceReport.getTimestampMs());
// The service metric report's sourceTimestamp will be the most recent timestamp from its contributing stats
if (apNodeMetrics.getSourceTimestampMs() < deviceReport.getTimestampMs())
apNodeMetrics.setSourceTimestampMs(deviceReport.getTimestampMs());
updateDeviceStatusForReport(customerId, equipmentId, deviceReport, avgRadioTemp);
}
// statusList.add(status);
@@ -1014,11 +1063,6 @@ public class MqttStatsPublisher {
radioStats.setNumRxDataFrames(rxFrames);
radioStats.setNumRxErr(rxErrors);
radioStats.setNumRxRetry(rxRetries);
radioStats.setSourceTimestampMs(clReport.getTimestampMs());
// The service metric report's sourceTimestamp will be the most recent timestamp from its contributing stats
if (apNodeMetrics.getSourceTimestampMs() < clReport.getTimestampMs())
apNodeMetrics.setSourceTimestampMs(clReport.getTimestampMs());
apNodeMetrics.setRadioStats(radioType, radioStats);
@@ -1079,13 +1123,6 @@ public class MqttStatsPublisher {
if (totalDurationMs > 0) {
RadioUtilization radioUtil = new RadioUtilization();
radioUtil.setTimestampSeconds((int) ((survey.getTimestampMs()) / 1000));
radioUtil.setSourceTimestampMs(survey.getTimestampMs());
// The service metric report's sourceTimestamp will be the most recent timestamp from its
// contributing stats
if (apNodeMetrics.getSourceTimestampMs() < survey.getTimestampMs())
apNodeMetrics.setSourceTimestampMs(survey.getTimestampMs());
int pctBusyTx = busyTx / totalDurationMs;
checkIfOutOfBound("pctBusyTx", pctBusyTx, survey, totalDurationMs, busyTx, busyRx, busy, busySelf);
@@ -1100,10 +1137,6 @@ public class MqttStatsPublisher {
checkIfOutOfBound("nonWifi", nonWifi, survey, totalDurationMs, busyTx, busyRx, busy, busySelf);
radioUtil.setNonWifi(nonWifi);
int pctOBSSAndSelfErrors = (busyRx - busySelf) / totalDurationMs;
checkIfOutOfBound("OBSSAndSelfErrors", pctOBSSAndSelfErrors, survey, totalDurationMs, busyTx, busyRx, busy, busySelf);
radioUtil.setUnassocClientRx(pctOBSSAndSelfErrors);
radioType = OvsdbToWlanCloudTypeMappingUtility.getRadioTypeFromOpensyncStatsRadioBandType(survey.getBand());
if (radioType != RadioType.UNSUPPORTED) {
if (apNodeMetrics.getRadioUtilization(radioType) == null) {
@@ -1146,35 +1179,6 @@ public class MqttStatsPublisher {
updateDeviceStatusRadioUtilizationReport(customerId, equipmentId, radioUtilizationReport);
}
void clearDeviceThresholdAlarm(int customerId, long equipmentId, AlarmCode alarmCode) {
alarmServiceInterface.get(customerId, Set.of(equipmentId), Set.of(alarmCode)).stream().forEach(a -> {
Alarm alarm = alarmServiceInterface.delete(customerId, equipmentId, a.getAlarmCode(), a.getCreatedTimestamp());
LOG.info("Cleared device threshold alarm {}", alarm);
});
}
void raiseDeviceThresholdAlarm(int customerId, long equipmentId, AlarmCode alarmCode, long timestampMs) {
// Raise an alarm for temperature
Alarm alarm = new Alarm();
alarm.setCustomerId(customerId);
alarm.setEquipmentId(equipmentId);
alarm.setAlarmCode(alarmCode);
alarm.setOriginatorType(OriginatorType.AP);
alarm.setSeverity(alarmCode.getSeverity());
alarm.setScopeType(AlarmScopeType.EQUIPMENT);
alarm.setScopeId("" + equipmentId);
alarm.setCreatedTimestamp(timestampMs);
AlarmDetails alarmDetails = new AlarmDetails();
alarmDetails.setMessage(alarmCode.getDescription());
alarmDetails.setAffectedEquipmentIds(Collections.singletonList(equipmentId));
alarm.setDetails(alarmDetails);
List<Alarm> alarms = alarmServiceInterface.get(customerId, Set.of(equipmentId), Set.of(alarmCode));
if (alarms.isEmpty()) {
alarm.setCreatedTimestamp(timestampMs);
alarm = alarmServiceInterface.create(alarm);
}
}
private void checkIfOutOfBound(String checkedType, int checkedValue, Survey survey, int totalDurationMs, int busyTx, int busyRx, int busy, int busySelf) {
if (checkedValue > 100 || checkedValue < 0) {
LOG.warn(
@@ -1276,8 +1280,6 @@ public class MqttStatsPublisher {
NetworkProbeMetrics networkProbeMetrics = new NetworkProbeMetrics();
networkProbeMetrics.setSourceTimestampMs(networkProbe.getTimestampMs());
List<DnsProbeMetric> dnsProbeResults = new ArrayList<>();
if (networkProbe.hasDnsProbe()) {
@@ -1369,8 +1371,6 @@ public class MqttStatsPublisher {
LOG.debug("updated status {}", status);
}
void populateApClientMetrics(List<ServiceMetric> metricRecordList, Report report, int customerId, long equipmentId, long locationId) {
LOG.info("populateApClientMetrics for Customer {} Equipment {}", customerId, equipmentId);
@@ -1393,7 +1393,6 @@ public class MqttStatsPublisher {
// clReport.getChannel();
ClientMetrics cMetrics = new ClientMetrics();
smr.setDetails(cMetrics);
cMetrics.setSourceTimestampMs(clReport.getTimestampMs());
Integer periodLengthSec = 60; // matches what's configured by
// OvsdbDao.configureStats(OvsdbClient)
@@ -1452,7 +1451,7 @@ public class MqttStatsPublisher {
cMetrics.setNumTxDropped((int) cl.getStats().getTxErrors());
}
if (cl.getStats().hasTxFrames()) {
if (cl.getStats().hasRxFrames()) {
cMetrics.setNumTxFramesTransmitted(cl.getStats().getTxFrames());
}
@@ -1476,10 +1475,10 @@ public class MqttStatsPublisher {
ServiceMetric smr = new ServiceMetric(customerId, equipmentId);
smr.setLocationId(locationId);
metricRecordList.add(smr);
NeighbourScanReports neighbourScanReports = new NeighbourScanReports();
smr.setDetails(neighbourScanReports);
neighbourScanReports.setSourceTimestampMs(neighbor.getTimestampMs());
List<NeighbourReport> neighbourReports = new ArrayList<>();
neighbourScanReports.setNeighbourReports(neighbourReports);
@@ -1595,7 +1594,7 @@ public class MqttStatsPublisher {
float rxBytesFv = Long.valueOf(client.getStats().getRxBytes()).floatValue();
float rxBytesToMb = rxBytesFv / 125000F;
float txBytesFv = Long.valueOf(client.getStats().getTxBytes()).floatValue();
float txBytesFv = Long.valueOf(client.getStats().getRxBytes()).floatValue();
float txBytesToMb = txBytesFv / 125000F;
if (LOG.isDebugEnabled())
@@ -1628,10 +1627,6 @@ public class MqttStatsPublisher {
LOG.debug("ClientReport for channel {} RadioBand {}", clientReport.getChannel(), clientReport.getBand());
// The service metric report's sourceTimestamp will be the most recent ClientReport timestamp
if (apSsidMetrics.getSourceTimestampMs() < clientReport.getTimestampMs())
apSsidMetrics.setSourceTimestampMs(clientReport.getTimestampMs());
long txBytes = 0L;
long rxBytes = 0L;
long txFrames = 0L;
@@ -1652,7 +1647,7 @@ public class MqttStatsPublisher {
SsidStatistics ssidStatistics = new SsidStatistics();
// GET the Radio IF MAC (BSSID) from the activeBSSIDs
ssidStatistics.setSourceTimestampMs(clientReport.getTimestampMs());
Status activeBssidsStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.ACTIVE_BSSIDS);
if (activeBssidsStatus != null && activeBssidsStatus.getDetails() != null
&& ((ActiveBSSIDs) activeBssidsStatus.getDetails()).getActiveBSSIDs() != null) {
@@ -1680,17 +1675,58 @@ public class MqttStatsPublisher {
rxBytes += client.getStats().getRxBytes();
txBytes += client.getStats().getTxBytes();
rxFrames += client.getStats().getRxFrames();
txFrames += client.getStats().getTxFrames();
txFrames += client.getStats().getRxFrames();
rxFrames += client.getStats().getTxFrames();
rxRetries += client.getStats().getRxRetries();
txRetries += client.getStats().getTxRetries();
rxErrors += client.getStats().getRxErrors();
txErrors += client.getStats().getTxErrors();
lastRssi = client.getStats().getRssi();
if (client.hasConnected() && client.getConnected() && client.hasMacAddress()) {
numConnectedClients += 1;
try {
if (client.hasConnected() && client.getConnected() && client.hasMacAddress()) {
// update service_metrics_collection_config for
// connected client
ClientSession session =
handleClientSessionMetricsUpdate(customerId, equipmentId, locationId, radioType, clientReport.getTimestampMs(), client);
if (session != null) {
numConnectedClients += 1;
}
} else {
// Make sure, if we have a session for this client,
// it
// shows disconnected.
// update any service_metrics_collection_config that
// need update if the
// disconnect occured during this window
if (client.hasMacAddress()) {
ClientSession session =
clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(client.getMacAddress()));
if (session != null) {
ClientSessionDetails latestSessionDetails = new ClientSessionDetails();
// could still be values from before
// disconnect occured.
latestSessionDetails.setMetricDetails(calculateClientSessionMetricDetails(client, clientReport.getTimestampMs()));
session.getDetails().mergeSession(latestSessionDetails);
clientServiceInterface.updateSession(session);
}
}
continue; // not connected
}
} catch (Exception e) {
LOG.error("Unabled to update client {}", client, e);
}
}
}
@@ -1778,9 +1814,8 @@ public class MqttStatsPublisher {
smr.setCustomerId(customerId);
smr.setEquipmentId(equipmentId);
smr.setLocationId(locationId);
ChannelInfoReports channelInfoReports = new ChannelInfoReports();
channelInfoReports.setSourceTimestampMs(survey.getTimestampMs());
ChannelInfoReports channelInfoReports = new ChannelInfoReports();
Map<RadioType, List<ChannelInfo>> channelInfoMap = channelInfoReports.getChannelInformationReportsPerRadio();
RadioType radioType = null;

View File

@@ -84,7 +84,7 @@ public class RealtimeEventPublisher {
@Autowired
private EquipmentServiceInterface equipmentServiceInterface;
@Autowired
private ProfileServiceInterface profileServiceInterface;
@@ -262,7 +262,7 @@ public class RealtimeEventPublisher {
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("Publishing client event {} to cloud", clientEvent);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
@@ -380,7 +380,7 @@ public class RealtimeEventPublisher {
if (clientAssocEvent.hasUsing11V()) {
clientEvent.setUsing11v(clientAssocEvent.getUsing11V());
}
clientEvent.setEventTimestamp(clientAssocEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);

View File

@@ -170,12 +170,10 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location();
location.setId(8L);
location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setDetails(LocationDetails.createWithDefaults());
location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Customer customer = new Customer();
customer.setId(2);
CustomerDetails customerDetails = new CustomerDetails();
@@ -241,7 +239,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verify(locationServiceInterface).get(8L);
Mockito.verifyNoInteractions(locationServiceInterface);
}
@@ -250,11 +248,10 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location();
location.setId(8L);
location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setDetails(LocationDetails.createWithDefaults());
location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Customer customer = new Customer();
@@ -342,7 +339,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.verify(customerServiceInterface).getOrNull(ArgumentMatchers.anyInt());
Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull("Test_Client_21P10C68818122");
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verify(locationServiceInterface, Mockito.times(2)).get(ArgumentMatchers.anyLong());
Mockito.verify(locationServiceInterface).get(ArgumentMatchers.anyLong());
}
@@ -364,12 +361,9 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location();
location.setId(8L);
location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setDetails(LocationDetails.createWithDefaults());
location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Equipment equipment = new Equipment();
equipment.setCustomerId(2);

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-ext-interface</artifactId>
@@ -13,33 +13,33 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>base-models</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-opensync-protobuf</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>location-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>routing-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>

View File

@@ -38,6 +38,10 @@ public interface OpensyncExternalIntegrationInterface {
void processMqttMessage(String topic, Report report);
void processMqttMessage(String topic, FlowReport flowReport);
void processMqttMessage(String topic, WCStatsReport wcStatsReport);
void wifiAssociatedClientsDbTableUpdate(List<OpensyncWifiAssociatedClients> wifiAssociatedClients, String apId);
void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId);

View File

@@ -17,8 +17,6 @@ public interface OvsdbClientInterface {
String startDebugEngine(String apId, String gatewayHostname, Integer gatewayPort);
String stopDebugEngine(String apId);
String processBlinkRequest(String apId, boolean blinkAllLEDs);
void processConfigChanged(String apId);

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-ext-static</artifactId>
@@ -13,7 +13,7 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway-build</artifactId>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway-cloud-docker</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway-cloud-process</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway-cloud-process</artifactId>
@@ -20,95 +20,95 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-ext-cloud</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>filestore-service</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>customer-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>location-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>equipment-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>profile-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>portal-user-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>service-metric-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>system-event-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>alarm-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>status-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>client-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>routing-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>firmware-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>manufacturer-service-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>cloud-event-dispatcher-remote</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway-static-docker</artifactId>
@@ -22,7 +22,7 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway-static-process</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway-static-process</artifactId>
@@ -18,7 +18,7 @@
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-ext-static</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
</dependencies>

View File

@@ -3,7 +3,7 @@
<parent>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath>
</parent>
<artifactId>opensync-gateway</artifactId>
@@ -14,22 +14,22 @@
<dependency>
<artifactId>base-container</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-ext-interface</artifactId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>client-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>customer-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.vmware.ovsdb</groupId>
@@ -47,13 +47,13 @@
<dependency>
<artifactId>service-metric-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>status-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java-util -->

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.mqtt;
import java.nio.charset.Charset;
@@ -6,15 +5,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.fusesource.mqtt.client.BlockingConnection;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS;
import org.fusesource.mqtt.client.Topic;
import org.fusesource.mqtt.client.Tracer;
import org.fusesource.mqtt.codec.MQTTFrame;
import org.fusesource.mqtt.codec.PINGREQ;
import org.fusesource.mqtt.codec.PINGRESP;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +37,10 @@ import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
import sts.OpensyncStats;
import sts.OpensyncStats.Report;
import traffic.NetworkMetadata;
import traffic.NetworkMetadata.FlowReport;
import wc.stats.IpDnsTelemetry;
import wc.stats.IpDnsTelemetry.WCStatsReport;
@Profile("mqtt_receiver")
@Component
@@ -55,11 +54,15 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
private final TagList tags = CloudMetricsTags.commonTags;
private final Counter messagesReceived = new BasicCounter(MonitorConfig.builder("osgw-mqtt-messagesReceived").withTags(tags).build());
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 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());
private final Timer timerMessageProcess = new BasicTimer(MonitorConfig.builder("osgw-mqtt-messageProcessTimer").withTags(tags).build());
@Autowired
private OpensyncExternalIntegrationInterface extIntegrationInterface;
@@ -82,7 +85,8 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
public OpensyncMqttClient(@Autowired io.netty.handler.ssl.SslContext sslContext,
@Value("${tip.wlan.mqttBroker.address.internal:testportal.123wlan.com}") String mqttBrokerAddress,
@Value("${tip.wlan.mqttBroker.listenPort:1883}") int mqttBrokerListenPort, @Value("${tip.wlan.mqttBroker.user:admin}") String username,
@Value("${tip.wlan.mqttBroker.listenPort:1883}") int mqttBrokerListenPort,
@Value("${tip.wlan.mqttBroker.user:admin}") String username,
@Value("${tip.wlan.mqttBroker.password:admin}") String password,
@Value("${mqtt.javax.net.ssl.keyStore:/opt/tip-wlan/certs/client_keystore.jks}") String jdkKeyStoreLocation,
@Value("${mqtt.javax.net.ssl.keyStorePassword:mypassword}") String jdkKeyStorePassword,
@@ -110,7 +114,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
@Override
public void run() {
while (keepReconnecting) {
BlockingConnection blockingConnection = null;
FutureConnection futureConnection = null;
try {
Thread.sleep(5000);
@@ -140,46 +144,24 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
*/
MQTT mqtt = new MQTT();
// mqtt.setHost("tcp://192.168.0.137:61616");
mqtt.setHost("tls://" + mqttBrokerAddress + ":" + mqttBrokerListenPort);
LOG.info("Connecting to MQTT broker at {}", mqtt.getHost());
mqtt.setClientId("opensync_mqtt");
mqtt.setUserName(username);
mqtt.setPassword(password);
mqtt.setTracer(new Tracer() {
@Override
public void onReceive(MQTTFrame frame) {
switch (frame.messageType()) {
case PINGREQ.TYPE:
case PINGRESP.TYPE:
// PINGs don't want to fill log
LOG.trace("MQTT Client Received: {}", frame);
break;
default:
LOG.debug("MQTT Client Received: {}", frame);
}
}
// Note: the following does not work with the
// serverContext,
// it has to be the
// clientContext
// mqtt.setSslContext(((JdkSslContext)
// sslContext).context());
// For now we'll rely on regular SSLContext from the JDK
@Override
public void onSend(MQTTFrame frame) {
switch (frame.messageType()) {
case PINGREQ.TYPE:
case PINGRESP.TYPE:
// PINGs don't want to fill log
LOG.trace("MQTT Client Sent: {}", frame);
break;
default:
LOG.debug("MQTT Client Sent: {}", frame);
}
}
@Override
public void debug(String message, Object... args) {
LOG.debug("MQTT Client debugging messages: {}", String.format(message, args));
}
});
blockingConnection = mqtt.blockingConnection();
blockingConnection.connect();
// TODO: revisit this blocking connection, change it to
// futureConnection
futureConnection = mqtt.futureConnection();
futureConnection.connect();
LOG.info("Connected to MQTT broker at {}", mqtt.getHost());
@@ -189,22 +171,24 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
// new Topic("#", QoS.AT_LEAST_ONCE),
// new Topic("test/#", QoS.EXACTLY_ONCE),
// new Topic("foo/+/bar", QoS.AT_LEAST_ONCE)
Topic[] topics = {new Topic("#", QoS.AT_LEAST_ONCE),};
Topic[] topics = { new Topic("#", QoS.AT_LEAST_ONCE), };
blockingConnection.subscribe(topics);
futureConnection.subscribe(topics);
LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
// prepare a JSONPrinter to format protobuf messages as
// json
List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(IpDnsTelemetry.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(NetworkMetadata.getDescriptor().getMessageTypes());
TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
JsonFormat.Printer jsonPrinter =
JsonFormat.printer().includingDefaultValueFields().omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry);
JsonFormat.Printer jsonPrinter = JsonFormat.printer().includingDefaultValueFields()
.omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry);
// main loop - receive messages
while (true) {
Message mqttMsg = blockingConnection.receive();
Message mqttMsg = futureConnection.receive().await();
if (mqttMsg == null) {
continue;
@@ -213,11 +197,23 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
LOG.debug("MQTT Topic {}", mqttMsg.getTopic());
byte payload[] = mqttMsg.getPayload();
// we acknowledge right after receive because:
// a. none of the stats messages are so important
// that
// we cannot skip one
// b. if there's some kind of problem with the
// message
// (decoding or processing)
// - we want to move on as quickly as possible and
// not
// let it get stuck in the
// queue
mqttMsg.ack();
messagesReceived.increment();
messageBytesReceived.increment(payload.length);
Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
if (payload[0] == 0x78) {
@@ -227,27 +223,60 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
payload = ZlibUtil.decompress(payload);
}
// attempt to parse the message as protobuf
MessageOrBuilder encodedMsg = null;
try {
// Only supported protobuf on the TIP opensync APs is Report
encodedMsg = Report.parseFrom(payload);
mqttMsg.ack();
MQTT_LOG.info("topic = {}\nReport = {}", mqttMsg.getTopic(), jsonPrinter.print(encodedMsg));
MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
} catch (Exception e) {
String msgStr = new String(mqttMsg.getPayload(), utf8);
LOG.warn("Could not process message topic = {}\nmessage = {}", mqttMsg.getTopic(), msgStr);
try {
// not a opensync_stats report, attempt to
// deserialize as network_metadata
encodedMsg = FlowReport.parseFrom(payload);
MQTT_LOG.info("topic = {} FlowReport = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(),
(FlowReport) encodedMsg);
} catch (Exception e1) {
try {
// not a opensync_stats report and not
// network_metadata report, attempt to
// deserialize as WCStatsReport
encodedMsg = WCStatsReport.parseFrom(payload);
MQTT_LOG.info("topic = {} IpDnsTelemetry = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(),
(WCStatsReport) encodedMsg);
} catch (Exception e2) {
String msgStr = new String(mqttMsg.getPayload(), utf8);
MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
}
}
} finally {
stopwatchTimerMessageProcess.stop();
}
}
} catch (Exception e) {
LOG.error("Exception in MQTT receiver", e);
} finally {
try {
if (blockingConnection != null) {
blockingConnection.disconnect();
if (futureConnection != null) {
futureConnection.disconnect();
}
} catch (Exception e1) {
// do nothing

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.ovsdb;
import com.google.common.collect.ImmutableMap;
@@ -51,13 +50,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private final TagList tags = CloudMetricsTags.commonTags;
private final Counter connectionsAttempted = new BasicCounter(MonitorConfig.builder("osgw-connectionsAttempted").withTags(tags).build());
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 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 connectionsCreated = new BasicCounter(
MonitorConfig.builder("osgw-connectionsCreated").withTags(tags).build());
private final Counter connectionsDropped = new BasicCounter(MonitorConfig.builder("osgw-connectionsDropped").withTags(tags).build());
private final Counter connectionsDropped = new BasicCounter(
MonitorConfig.builder("osgw-connectionsDropped").withTags(tags).build());
@org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}")
private int ovsdbListenPort;
@@ -124,7 +127,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
String subjectDn;
try {
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()).getSubjectDN().getName();
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
.getSubjectDN().getName();
String clientCn = SslUtil.extractCN(subjectDn);
LOG.info("ovsdbClient connecting from {} on port {} clientCn {}", remoteHost, localPort, clientCn);
@@ -185,7 +189,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
localPort = ovsdbClient.getConnectionInfo().getLocalPort();
String subjectDn = null;
try {
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()).getSubjectDN().getName();
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
.getSubjectDN().getName();
} catch (Exception e) {
// do nothing
}
@@ -199,7 +204,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
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 disconnected from {} on port {} clientCn {} AP {} ", remoteHost, localPort,
clientCn, key);
LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions());
} finally {
try {
@@ -222,7 +228,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private void processConnectRequest(OvsdbClient ovsdbClient, String clientCn, ConnectNodeInfo connectNodeInfo) {
LOG.debug("Starting Client connect");
connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo, preventClientCnAlteration);
connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo,
preventClientCnAlteration);
// successfully connected - register it in our
// connectedClients table
@@ -287,15 +294,6 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
}
public String processBlinkRequest(String apId, boolean blinkAllLEDs) {
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) {
throw new IllegalStateException("AP with id " + apId + " is not connected");
}
return ovsdbDao.processBlinkRequest(ovsdbSession.getOvsdbClient(), apId, blinkAllLEDs);
}
@Override
public void processConfigChanged(String apId) {
@@ -321,7 +319,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
ovsdbDao.removeRadsecRadiusAndRealmConfigs(ovsdbClient);
extIntegrationInterface.clearEquipmentStatus(apId);
ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
@@ -415,24 +413,27 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} 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("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 {
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.dhcpLeasedIpDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))),
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.dhcpLeasedIpDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable,
new MonitorRequest(new MonitorSelect(true, true, true, true)))),
tableUpdates -> {
try {
LOG.info(OvsdbDao.dhcpLeasedIpDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.dhcpLeasedIpDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<Map<String, String>> insert = new ArrayList<>();
List<Map<String, String>> delete = new ArrayList<>();
@@ -444,7 +445,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) {
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
rowUpdate.getOld().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
delete.add(rowMap);
// delete
@@ -452,7 +454,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// insert
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getNew().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
rowUpdate.getNew().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
insert.add(rowMap);
} else {
@@ -461,7 +464,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
rowUpdate.getOld().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
update.add(rowMap);
@@ -494,10 +498,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private void monitorCommandStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.commandStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())), tableUpdates -> {
CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.commandStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())),
tableUpdates -> {
try {
LOG.info(OvsdbDao.commandStateDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.commandStateDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<Map<String, String>> insert = new ArrayList<>();
List<Map<String, String>> delete = new ArrayList<>();
@@ -509,7 +516,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) {
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
rowUpdate.getOld().getColumns()
.forEach((key1, value) -> rowMap.put(key1, value.toString()));
delete.add(rowMap);
// delete
@@ -517,7 +525,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// insert
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getNew().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
rowUpdate.getNew().getColumns()
.forEach((key1, value) -> rowMap.put(key1, value.toString()));
insert.add(rowMap);
} else {
@@ -526,7 +535,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString()));
rowUpdate.getOld().getColumns()
.forEach((key1, value) -> rowMap.put(key1, value.toString()));
update.add(rowMap);
@@ -558,27 +568,33 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.awlanNodeDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))),
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.awlanNodeDbTable + "_" + key, new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable,
new MonitorRequest(new MonitorSelect(true, false, false, true)))),
tableUpdates -> {
try {
LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}", tableUpdates);
extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key);
extIntegrationInterface.awlanNodeDbTableUpdate(
ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key);
} catch (Exception e) {
LOG.error("awlanNodeDbTableUpdate failed", e);
}
});
extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient), key);
extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient),
key);
}
private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiAssociatedClientsDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())), tableUpdates -> {
CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.wifiAssociatedClientsDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())),
tableUpdates -> {
try {
LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<OpensyncWifiAssociatedClients> associatedClients = new ArrayList<>();
@@ -595,7 +611,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// adding anyway.
extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key);
} else {
associatedClients.addAll(ovsdbDao.getOpensyncWifiAssociatedClients(rowUpdate, key, ovsdbClient));
associatedClients.addAll(
ovsdbDao.getOpensyncWifiAssociatedClients(rowUpdate, key, ovsdbClient));
}
}
@@ -609,16 +626,20 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
});
extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(ovsdbDao.getInitialOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key);
extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(
ovsdbDao.getInitialOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key);
}
private void monitorWifiInetStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> isCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))),
CompletableFuture<TableUpdates> isCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.wifiInetStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable,
new MonitorRequest(new MonitorSelect(true, true, true, true)))),
tableUpdates -> {
try {
LOG.info(OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<OpensyncAPInetState> inetStateInsertOrUpdate = new ArrayList<>();
List<OpensyncAPInetState> inetStateDelete = new ArrayList<>();
@@ -628,9 +649,11 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
if (rowUpdate.getNew() == null) {
inetStateDelete.addAll(ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
inetStateDelete.addAll(
ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
} else {
inetStateInsertOrUpdate.addAll(ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
inetStateInsertOrUpdate.addAll(
ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
}
}
@@ -647,33 +670,42 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
});
extIntegrationInterface.wifiInetStateDbTableUpdate(ovsdbDao.getInitialOpensyncApInetStateForRowUpdate(isCf.join(), key, ovsdbClient), key);
extIntegrationInterface.wifiInetStateDbTableUpdate(
ovsdbDao.getInitialOpensyncApInetStateForRowUpdate(isCf.join(), key, ovsdbClient), key);
}
private void monitorWifiRadioStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiRadioStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))),
CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.wifiRadioStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable,
new MonitorRequest(new MonitorSelect(true, false, false, true)))),
tableUpdates -> {
try {
LOG.info(OvsdbDao.wifiRadioStateDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.wifiRadioStateDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
extIntegrationInterface.wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key);
extIntegrationInterface.wifiRadioStatusDbTableUpdate(
ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key);
} catch (Exception e) {
LOG.error("wifiRadioStatusDbTableUpdate failed", e);
}
});
extIntegrationInterface.wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key);
extIntegrationInterface
.wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key);
}
private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiVifStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, new MonitorRequest(new MonitorSelect(false, true, true, true)))),
CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
OvsdbDao.wifiVifStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable,
new MonitorRequest(new MonitorSelect(false, true, true, true)))),
tableUpdates -> {
try {
LOG.info(OvsdbDao.wifiVifStateDbTable + "_" + key + " monitor callback received {}", tableUpdates);
LOG.info(OvsdbDao.wifiVifStateDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<OpensyncAPVIFState> vifsToDelete = new ArrayList<>();
List<OpensyncAPVIFState> vifsToInsertOrUpdate = new ArrayList<>();
@@ -683,12 +715,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) {
// this is a deletion
vifsToDelete.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
vifsToDelete.addAll(
ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
} else {
// either an insert or
// mutuate/update
vifsToInsertOrUpdate.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
vifsToInsertOrUpdate.addAll(
ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
}
@@ -713,8 +747,10 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
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 -> {
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);
@@ -733,8 +769,10 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
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, true, true, true)))), tableUpdates -> {
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);
@@ -742,19 +780,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> apcStateAttributes = ovsdbDao.getAPCState(r, key);
extIntegrationInterface.apcStateDbTableUpdate(apcStateAttributes, key, RowUpdateOperation.MODIFY);
extIntegrationInterface.apcStateDbTableUpdate(apcStateAttributes, key,
RowUpdateOperation.MODIFY);
});
});
});
try {
extIntegrationInterface.apcStateDbTableUpdate(
ovsdbDao.getAPCState(nsCf.join().getTableUpdates().entrySet().iterator().next().getValue().getRowUpdates().values().iterator().next(), key),
key, RowUpdateOperation.INIT);
} catch (Exception e) {
LOG.error("Could not get INIT state for {}", OvsdbDao.apcStateDbTable, e);
}
nsCf.join();
}
@Override
@@ -804,7 +837,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
@Override
public String startDebugEngine(String apId, String gatewayHostname, Integer gatewayPort) {
LOG.debug("TipWlanOvsdbClient::startDebugEngine apId {} gatewayHostname {} gatewayPort {}", apId, gatewayHostname, gatewayPort);
LOG.debug("TipWlanOvsdbClient::startDebugEngine apId {} gatewayHostname {} gatewayPort {}", apId,
gatewayHostname, gatewayPort);
try {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
@@ -812,14 +846,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> payload = new HashMap<>();
payload.put("gateway_hostname", gatewayHostname);
payload.put("gateway_port", gatewayPort.toString());
ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L, defaultCommandDurationSec);
ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L,
defaultCommandDurationSec);
LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort);
return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort;
} catch (Exception e) {
LOG.error("TipWlanOvsdbClient::startDebugEngine Failed to start debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort,
e);
return "Failed to start debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort;
LOG.error(
"TipWlanOvsdbClient::startDebugEngine Failed to start debug engine on AP {} with gateway {} port {}",
apId, gatewayHostname, gatewayPort, e);
return "Failed to start debug engine on AP " + apId + " with gateway " + gatewayHostname + " port "
+ gatewayPort;
}
}
@@ -864,7 +901,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
} catch (Exception e) {
if (switchBanks) {
LOG.debug("TipWlanOvsdbClient::processRebootRequest failed to trigger switch software bank on AP {}", apId, e);
LOG.debug("TipWlanOvsdbClient::processRebootRequest failed to trigger switch software bank on AP {}",
apId, e);
return "failed to trigger switch software bank on AP " + apId;
} else {
LOG.error("TipWlanOvsdbClient::processRebootRequest failed to trigger reboot of AP {}", apId, e);
@@ -910,21 +948,25 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return key;
}
public String processNewChannelsRequest(String apId, Map<RadioType, Integer> backupChannelMap, Map<RadioType, Integer> primaryChannelMap) {
public String processNewChannelsRequest(String apId, Map<RadioType, Integer> backupChannelMap,
Map<RadioType, Integer> primaryChannelMap) {
LOG.info("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId);
try {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
OvsdbClient ovsdbClient = session.getOvsdbClient();
ovsdbDao.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap);
LOG.info("TipWlanOvsdbClient::processNewChannelsRequest change backup and/or primary channels for AP {}", apId);
LOG.info("TipWlanOvsdbClient::processNewChannelsRequest change backup and/or primary channels for AP {}",
apId);
return " change backup and/or primary channels for AP " + apId;
} catch (Exception e) {
LOG.error("TipWlanOvsdbClient::processNewChannelsRequest failed to change backup and/or primary channels for AP {}", apId, e);
LOG.error(
"TipWlanOvsdbClient::processNewChannelsRequest failed to change backup and/or primary channels for AP {}",
apId, e);
return "failed to change backup and/or primary channels for AP " + apId;
}
}
public String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) {
LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest for AP {}", apId);
@@ -932,10 +974,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
OvsdbClient ovsdbClient = session.getOvsdbClient();
ovsdbDao.processCellSizeAttributesRequest(ovsdbClient, cellSizeAttributeMap);
LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest change cellSizeAttributes for AP {}", apId);
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);
LOG.error(
"TipWlanOvsdbClient::processCellSizeAttributesRequest failed to change cell size attributes for AP {}",
apId, e);
return "failed to change cell size attributes for AP " + apId;
}
}

View File

@@ -237,8 +237,4 @@ public class OvsdbDao extends OvsdbDaoBase {
ovsdbStats.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
}
public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) {
return ovsdbNodeConfig.processBlinkRequest(ovsdbClient,apId,blinkAllLEDs);
}
}

View File

@@ -265,7 +265,7 @@ public class OvsdbDaoBase {
}
}
void fillInRadioInterfaceNamesAndCountry(OvsdbClient ovsdbClient, ConnectNodeInfo ret) {
void fillInRadioInterfaceNames(OvsdbClient ovsdbClient, ConnectNodeInfo ret) {
try {
List<Operation> operations = new ArrayList<>();
List<Condition> conditions = new ArrayList<>();
@@ -273,7 +273,6 @@ public class OvsdbDaoBase {
columns.add("freq_band");
columns.add("if_name");
columns.add("country");
operations.add(new Select(wifiRadioStateDbTable, conditions, columns));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
@@ -293,7 +292,6 @@ public class OvsdbDaoBase {
for (Row row : ((SelectResult) result[0]).getRows()) {
ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"),
getSingleValueFromSet(row, "if_name"));
ret.country = getSingleValueFromSet(row, "country");
}

View File

@@ -238,7 +238,7 @@ public class OvsdbNode extends OvsdbDaoBase {
}
fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType);
fillInRadioInterfaceNamesAndCountry(ovsdbClient, ret);
fillInRadioInterfaceNames(ovsdbClient, ret);
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
throw new RuntimeException(e);

View File

@@ -25,7 +25,6 @@ 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.InsertResult;
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.service.OvsdbClient;
@@ -60,17 +59,18 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
// /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4"
// The format is a colon delimited list. log_proto:log_ip:log_port:log_priority
// The format is a colon delimited list. log_proto:log_ip:log_port:log_priority
try {
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
if (apNetworkConfig.getSyslogRelay() == null) {
if (apNetworkConfig.getSyslogRelay() == null ) {
LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
return;
}
if (apNetworkConfig.getSyslogRelay().isEnabled()) {
if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null || apNetworkConfig.getSyslogRelay().getSeverity() == null) {
if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null
|| apNetworkConfig.getSyslogRelay().getSeverity() == null) {
LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
return;
}
@@ -78,8 +78,8 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
Map<String, Value> columns = new HashMap<>();
columns.put("key", new Atom<>("remote"));
columns.put("module", new Atom<>("syslog"));
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String.valueOf(
apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" + String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String
.valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
columns.put("value", new Atom<>(delimitedValue));
List<Operation> operations = new ArrayList<>();
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns)));
@@ -119,52 +119,4 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
}
}
public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) {
String ret = null;
try {
LOG.debug("processBlinkRequest set BlinkLEDs to {}", blinkAllLEDs);
Map<String, Value> columns = new HashMap<>();
if (blinkAllLEDs) {
columns.put("module", new Atom<>("led"));
columns.put("key", new Atom<>("led_blink"));
columns.put("value", new Atom<>("on"));
} else {
columns.put("module", new Atom<>("led"));
columns.put("key", new Atom<>("led_off"));
columns.put("value", new Atom<>("off"));
}
List<Operation> operations = new ArrayList<>();
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("led"))), new Row(columns)));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
long numUpdates = 0;
for (OperationResult res : result) {
if (res instanceof UpdateResult) {
numUpdates += ((UpdateResult) res).getCount();
LOG.debug("processBlinkRequest update result {}", res);
ret = "processBlinkRequest update result " + res;
}
}
if (numUpdates == 0) {
// no records existed, insert the row instead
operations.clear();
operations.add(new Insert(nodeConfigTable, new Row(columns)));
fResult = ovsdbClient.transact(ovsdbName, operations);
result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
if (res instanceof InsertResult) {
LOG.debug("processBlinkRequest insert result {}", res);
ret = "processBlinkRequest insert result " + res;
}
}
}
return ret;
} catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -1,9 +1,27 @@
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.ChannelBandwidth;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.*;
import com.telecominfraproject.wlan.core.model.equipment.SourceType;
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration;
import com.telecominfraproject.wlan.equipment.models.MimoMode;
import com.telecominfraproject.wlan.equipment.models.RadioConfiguration;
import com.telecominfraproject.wlan.equipment.models.StateSetting;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
@@ -12,19 +30,15 @@ import com.telecominfraproject.wlan.profile.rf.models.RfElementConfiguration;
import com.vmware.ovsdb.exception.OvsdbClientException;
import com.vmware.ovsdb.protocol.operation.Operation;
import com.vmware.ovsdb.protocol.operation.Update;
import com.vmware.ovsdb.protocol.operation.notation.*;
import com.vmware.ovsdb.protocol.operation.notation.Atom;
import com.vmware.ovsdb.protocol.operation.notation.Condition;
import com.vmware.ovsdb.protocol.operation.notation.Function;
import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
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;
@Component
public class OvsdbRadioConfig extends OvsdbDaoBase {
@@ -34,162 +48,159 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
String country = opensyncAPConfig.getCountryCode(); // should be the
ApElementConfiguration apElementConfiguration = (ApElementConfiguration) opensyncAPConfig.getCustomerEquipment().getDetails();
ApElementConfiguration apElementConfiguration = (ApElementConfiguration) opensyncAPConfig.getCustomerEquipment()
.getDetails();
RfConfiguration rfConfig = (RfConfiguration) opensyncAPConfig.getRfProfile().getDetails();
Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient);
Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
List<Operation> operations = new ArrayList<>();
for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue;
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ", autoChannelSelection, channel,
elementRadioConfig.getChannelNumber());
ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
String ht_mode = getBandwidth(bandwidth);
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
int txPower = 0;
if (autoCellSizeSelection) {
if (elementRadioConfig.getEirpTxPower() != null) {
try {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get();
Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet();
for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
autoChannelSelection, channel, elementRadioConfig.getChannelNumber());
ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
String ht_mode = getBandwidth(bandwidth);
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
int txPower;
if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
txPower = rfElementConfig.getEirpTxPower();
} else {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
} else {
txPower = rfElementConfig.getEirpTxPower();
}
String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig);
String radioName = null;
for (String key : provisionedRadioConfigs.keySet()) {
if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
radioName = key;
break;
String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig);
String radioName = null;
for (String key : provisionedRadioConfigs.keySet()) {
if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
radioName = key;
break;
}
}
if (radioName == null) continue;
String ifName = null; // for vifConfigs
if (radioName.equals(radio0)) {
ifName = defaultRadio0;
} else if (radioName.equals(radio1)) {
ifName = defaultRadio1;
} else if (radioName.equals(radio2)) {
ifName = defaultRadio2;
}
if (ifName == null) continue;
Set<Uuid> vifUuidsForRadio = new HashSet<>();
for (String key : vifConfigs.keySet()) {
if (key.contains(ifName))
vifUuidsForRadio.add(vifConfigs.get(key).uuid);
}
int mimoMode = MimoMode.none.getId();
if (rfElementConfig.getMimoMode() != null) {
mimoMode = rfElementConfig.getMimoMode().getId();
}
int maxNumClients = 0;
if (rfElementConfig.getMaxNumClients() != null) {
maxNumClients = rfElementConfig.getMaxNumClients();
}
try {
configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
enabled, hwMode, ht_mode, txPower, mimoMode, vifUuidsForRadio, operations, maxNumClients,columnNames);
} catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
} catch (TimeoutException e) {
LOG.error("ConfigureWifiRadios failed with Timeout.", e);
throw new RuntimeException(e);
} catch (ExecutionException e) {
LOG.error("ConfigureWifiRadios excecution failed.", e);
throw new RuntimeException(e);
} catch (InterruptedException e) {
LOG.error("ConfigureWifiRadios interrupted.", e);
throw new RuntimeException(e);
}
}
if (radioName == null)
continue;
String ifName = null; // for vifConfigs
if (radioName.equals(radio0)) {
ifName = defaultRadio0;
} else if (radioName.equals(radio1)) {
ifName = defaultRadio1;
} else if (radioName.equals(radio2)) {
ifName = defaultRadio2;
}
if (ifName == null)
continue;
Set<Uuid> vifUuidsForRadio = new HashSet<>();
for (String key : vifConfigs.keySet()) {
if (key.contains(ifName))
vifUuidsForRadio.add(vifConfigs.get(key).uuid);
}
int mimoMode = MimoMode.none.getId();
if (rfElementConfig.getMimoMode() != null) {
mimoMode = rfElementConfig.getMimoMode().getId();
}
int maxNumClients = 0;
if (rfElementConfig.getMaxNumClients() != null) {
maxNumClients = rfElementConfig.getMaxNumClients();
}
try {
configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval, enabled, hwMode, ht_mode, txPower, mimoMode,
vifUuidsForRadio, operations, maxNumClients);
} catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
} catch (TimeoutException e) {
LOG.error("ConfigureWifiRadios failed with Timeout.", e);
throw new RuntimeException(e);
} catch (ExecutionException e) {
LOG.error("ConfigureWifiRadios excecution failed.", e);
throw new RuntimeException(e);
} catch (InterruptedException e) {
LOG.error("ConfigureWifiRadios interrupted.", e);
throw new RuntimeException(e);
}
}
try {
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
LOG.debug("Op Result {}", res);
}
} catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) {
LOG.error("configureWifiRadios error", e);
throw new RuntimeException(e);
LOG.error("configureWifiRadios error", e); throw new RuntimeException(e);
}
}
String getHwConfigAndFreq(RadioType radioType, Map<String, String> hwConfig) {
switch (radioType) {
case is2dot4GHz:
return "2.4G";
case is5GHz:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5G";
case is5GHzL:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5GL";
case is5GHzU:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5GU";
default: // don't know this interface
return null;
case is2dot4GHz:
return "2.4G";
case is5GHz:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5G";
case is5GHzL:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5GL";
case is5GHzU:
// 802.11h dfs (Dynamic Frequency Selection) aka military
// and
// weather radar
// avoidance protocol
// Must not be disabled (by law)
// NA for 2.4GHz
hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1");
return "5GU";
default: // don't know this interface
return null;
}
}
private String getBandwidth(ChannelBandwidth bandwidth) {
String ht_mode;
switch (bandwidth) {
case is20MHz:
ht_mode = "HT20";
break;
case is40MHz:
ht_mode = "HT40";
break;
case is80MHz:
ht_mode = "HT80";
break;
case is160MHz:
ht_mode = "HT160";
break;
case auto:
ht_mode = "0";
break;
default:
ht_mode = null;
case is20MHz:
ht_mode = "HT20";
break;
case is40MHz:
ht_mode = "HT40";
break;
case is80MHz:
ht_mode = "HT80";
break;
case is160MHz:
ht_mode = "HT160";
break;
case auto:
ht_mode = "0";
break;
default:
ht_mode = null;
}
return ht_mode;
}
@@ -197,45 +208,43 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
String getHwMode(RfElementConfiguration rfElementConfig) {
String hwMode = null;
switch (rfElementConfig.getRadioMode()) {
case modeA:
hwMode = "11a";
break;
case modeAB:
hwMode = "11ab";
break;
case modeAC:
hwMode = "11ac";
break;
case modeB:
hwMode = "11b";
break;
case modeG:
hwMode = "11g";
break;
case modeAX:
hwMode = "11ax";
break;
case modeN:
hwMode = "11n";
break;
case auto:
hwMode = "auto";
break;
default:
case modeA:
hwMode = "11a";
break;
case modeAB:
hwMode = "11ab";
break;
case modeAC:
hwMode = "11ac";
break;
case modeB:
hwMode = "11b";
break;
case modeG:
hwMode = "11g";
break;
case modeAX:
hwMode = "11ax";
break;
case modeN:
hwMode = "11n";
break;
default:
}
return hwMode;
}
void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig, String country, int beaconInterval, boolean enabled, String hwMode,
String ht_mode, int txPower, int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig,
String country, int beaconInterval, boolean enabled, String hwMode, String ht_mode, int txPower,
int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
Map<String, Value> updateColumns = new HashMap<>();
List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
updateColumns.put("channel", new Atom<>(channel));
updateColumns.put("country", new Atom<>(country));
@SuppressWarnings("unchecked")
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> hwConfigMap = com.vmware.ovsdb.protocol.operation.notation.Map.of(hwConfig);
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> hwConfigMap = com.vmware.ovsdb.protocol.operation.notation.Map
.of(hwConfig);
updateColumns.put("hw_config", hwConfigMap);
updateColumns.put("bcn_int", new Atom<>(beaconInterval));
updateColumns.put("enabled", new Atom<>(enabled));
@@ -253,9 +262,10 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
updateColumns.put("hw_mode", new Atom<>(hwMode));
}
configureCustomOptionsMap(maxNumClients, updateColumns);
setTxAndRxChainmask(mimoMode, updateColumns);
setTxAndRxChainmask(mimoMode, updateColumns,tableColumns);
if (vifUuidsForRadio.size() > 0) {
com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set.of(vifUuidsForRadio);
com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set
.of(vifUuidsForRadio);
updateColumns.put("vif_configs", vifConfigUuids);
}
Row row = new Row(updateColumns);
@@ -263,58 +273,37 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
}
void configureCustomOptionsMap(int maxNumClients, Map<String, Value> updateColumns) {
Map<String, String> customOptions = new HashMap<>();
Map<String,String> customOptions = new HashMap<>();
customOptions.put("max_clients", String.valueOf(maxNumClients));
@SuppressWarnings("unchecked")
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> customOptionsMap = com.vmware.ovsdb.protocol.operation.notation.Map.of(customOptions);
updateColumns.put("custom_options", customOptionsMap);
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> customOptionsMap = com.vmware.ovsdb.protocol.operation.notation.Map
.of(customOptions);
updateColumns.put("custom_options", customOptionsMap);
}
void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns) {
void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) {
/*
* Chainmask is a bitmask, so map mimo mode values accordingly
* Note values 0, 1 remain unchanged
*
* mimoMode bitmask
* 0 0
* 1 1 1
* 2 3 2
* 3 7 4
* 4 15 8
* 5 31 16
* 6 63 32
* 7 127 64
* 8 255 128
* 0 0
* 1 1
* 2 3
* 3 7
* 4 15
*/
switch (mimoMode) {
case 0: // unchanged
break;
case 1: // unchanged
break;
case 2:
mimoMode = 3;
break;
case 3:
mimoMode = 7;
break;
case 4:
mimoMode = 15;
break;
case 5:
mimoMode = 31;
break;
case 6:
mimoMode = 63;
break;
case 7:
mimoMode = 127;
break;
case 8:
mimoMode = 255;
break;
if (mimoMode == 2) {
mimoMode = 3;
} else if (mimoMode == 3) {
mimoMode = 7;
} else if (mimoMode == 4) {
mimoMode = 15;
}
updateColumns.put("tx_chainmask", new Atom<>(mimoMode));
updateColumns.put("rx_chainmask", new Atom<>(mimoMode));
if (tableColumns.contains("rx_chainmask")) {
updateColumns.put("rx_chainmask", new Atom<>(mimoMode));
}
}
}

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import java.util.ArrayList;
@@ -28,7 +27,6 @@ import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient;
@Component
@@ -67,78 +65,19 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
}
}
/*
* root@OpenAp-ab1f4d:~# ovsdb-client list-columns Radius_Proxy_Config
*
* Column Type
* ------------------ ---------------------------------------------------------------
* realm {"key":{"maxLength":256,"type":"string"},"max":16,"min":0}
* radius_config_name "string"
* _uuid "uuid"
* acct_port {"key":"integer","min":0}
* client_key {"key":{"maxLength":256,"minLength":1,"type":"string"},"min":0}
* server "string"
* _version "uuid"
* port "integer"
* radsec "boolean"
* client_cert {"key":{"maxLength":256,"minLength":1,"type":"string"},"min":0}
* acct_server {"key":"string","min":0}
* passphrase {"key":{"maxLength":128,"type":"string"},"min":0}
* acct_secret {"key":"string","min":0}
* ca_cert {"key":{"maxLength":256,"minLength":1,"type":"string"},"min":0}
* auto_discover "boolean"
* secret "string"
*/
private void configureRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig, List<Operation> operations)
throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException {
// TODO: remove the schema check when AP load available
DatabaseSchema databaseSchema = ovsdbClient.getSchema(ovsdbName).get();
for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails()).getRadiusProxyConfigurations()) {
for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails())
.getRadiusProxyConfigurations()) {
Map<String, Value> updateColumns = new HashMap<>();
if (rsc.getServer() != null)
updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
if (rsc.getName() != null)
updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
if (rsc.getPort() != null)
updateColumns.put("port", new Atom<>(rsc.getPort()));
if (rsc.getRealm() != null)
updateColumns.put("realm", Set.of(rsc.getRealm()));
if (rsc.getUseRadSec() != null) {
updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec()));
if (rsc.getUseRadSec()) {
getCertificateUrls(rsc, updateColumns);
updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));
}
}
if (rsc.getSharedSecret() != null)
updateColumns.put("secret", new Atom<>(rsc.getSharedSecret()));
if (rsc.getAcctServer() != null) {
updateColumns.put("acct_server", new Atom<>(rsc.getAcctServer().getHostAddress()));
}
if (rsc.getSharedSecret() != null) {
updateColumns.put("acct_secret", new Atom<>(rsc.getSharedSecret()));
}
if (rsc.getAcctPort() != null) {
updateColumns.put("acct_port", new Atom<>(rsc.getAcctPort()));
}
if (databaseSchema.getTables().get(radiusConfigDbTable).getColumns().containsKey("auto_discover")) {
if (rsc.getUseRadSec() != null && rsc.getUseRadSec() && rsc.getDynamicDiscovery() != null && rsc.getDynamicDiscovery()) {
// if useRadSec && dynamicDiscovery enabled, do not send server information
updateColumns.put("auto_discover", new Atom<>(true));
updateColumns.remove("acct_server");
updateColumns.remove("acct_secret");
updateColumns.remove("acct_port");
updateColumns.remove("server");
updateColumns.remove("port");
updateColumns.remove("secret");
} else {
// if !useRadSec, auto_discover is false regardless of it's desired setting
// retain server information
updateColumns.put("auto_discover", new Atom<>(false));
}
}
updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
getCertificateUrls(rsc, updateColumns);
updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));
updateColumns.put("port", new Atom<>(rsc.getPort()));
updateColumns.put("realm", Set.of(rsc.getRealm()));
updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec()));
Row row = new Row(updateColumns);
operations.add(new Insert(radiusConfigDbTable, row));
}
@@ -165,7 +104,7 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
}
if (!caCertFilestoreUrl.contains("filestore")) {
caCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getCaCert().getApExportUrl();
}
}
updateColumns.put("client_cert", new Atom<>(clientCertFilestoreUrl));
updateColumns.put("client_key", new Atom<>(clientKeyFilestoreUrl));
updateColumns.put("ca_cert", new Atom<>(caCertFilestoreUrl));
@@ -185,7 +124,8 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
LOG.info("removeRadiusConfigurations {}", res.toString());
} else if (res instanceof ErrorResult) {
LOG.error("removeRadiusConfigurations error {}", (res));
throw new RuntimeException("removeRadiusConfigurations " + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
throw new RuntimeException("removeRadiusConfigurations "
+ ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
}
}
LOG.info("Removed all radius and realm configurations");

View File

@@ -1,10 +1,10 @@
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;
@@ -13,7 +13,6 @@ import java.util.concurrent.TimeoutException;
import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.AutoOrManualValue;
import com.telecominfraproject.wlan.core.model.equipment.OBSSHopMode;
import com.telecominfraproject.wlan.core.model.equipment.RadioBestApSettings;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.SourceType;
@@ -41,13 +40,15 @@ import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient;
@Component
public class OvsdbRrmConfig extends OvsdbDaoBase {
void configureWifiRrm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment().getDetails();
ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment()
.getDetails();
RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails();
for (RadioType radioType : apElementConfig.getRadioMap().keySet()) {
String freqBand = null;
@@ -68,24 +69,28 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
ElementRadioConfiguration elementRadioConfig = apElementConfig.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue; // don't have a radio of this kind in the map
continue; // don't have a radio of this kind in the map
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int backupChannel = elementRadioConfig.getActiveBackupChannel(autoChannelSelection);
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
Integer probeResponseThresholdDb = null;
Integer clientDisconnectThresholdDb = null;
LOG.debug("configureWifiRadios autoChannelSelection {} activeBackupChannel {}",
autoChannelSelection, backupChannel);
AutoOrManualValue probeResponseThresholdDb = null;
AutoOrManualValue clientDisconnectThresholdDb = null;
if (elementRadioConfig.getProbeResponseThresholdDb() != null) {
probeResponseThresholdDb = getSourcedValue(autoCellSizeSelection, rfElementConfig.getProbeResponseThresholdDb(),
elementRadioConfig.getProbeResponseThresholdDb().getValue());
probeResponseThresholdDb = getSourcedValue(elementRadioConfig.getProbeResponseThresholdDb().getSource(),
rfElementConfig.getProbeResponseThresholdDb(),
elementRadioConfig.getProbeResponseThresholdDb().getValue());
}
if (elementRadioConfig.getClientDisconnectThresholdDb() != null) {
clientDisconnectThresholdDb = getSourcedValue(autoCellSizeSelection, rfElementConfig.getClientDisconnectThresholdDb(),
elementRadioConfig.getClientDisconnectThresholdDb().getValue());
clientDisconnectThresholdDb = getSourcedValue(
elementRadioConfig.getClientDisconnectThresholdDb().getSource(),
rfElementConfig.getClientDisconnectThresholdDb(),
elementRadioConfig.getClientDisconnectThresholdDb().getValue());
}
RadioConfiguration radioConfig = apElementConfig.getAdvancedRadioMap().get(radioType);
@@ -93,30 +98,29 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
ManagementRate managementRate = null;
RadioBestApSettings bestApSettings = null;
if (radioConfig != null) {
if (radioConfig.getMulticastRate() != null) {
multicastRate = autoCellSizeSelection ? radioConfig.getMulticastRate().getValue() : rfElementConfig.getMulticastRate();
}
if (radioConfig.getManagementRate() != null) {
managementRate = autoCellSizeSelection ? radioConfig.getManagementRate().getValue() : rfElementConfig.getManagementRate();
}
if (radioConfig.getBestApSettings() != null) {
bestApSettings = radioConfig.getBestApSettings().getSource() == SourceType.profile ? rfElementConfig.getBestApSettings()
: radioConfig.getBestApSettings().getValue();
}
if (radioConfig.getMulticastRate() != null) {
multicastRate = radioConfig.getMulticastRate().getSource() == SourceType.profile
? rfElementConfig.getMulticastRate()
: radioConfig.getMulticastRate().getValue();
}
if (radioConfig.getManagementRate() != null) {
managementRate = radioConfig.getManagementRate().getSource() == SourceType.profile
? rfElementConfig.getManagementRate()
: radioConfig.getManagementRate().getValue();
}
if (radioConfig.getBestApSettings() != null) {
bestApSettings = radioConfig.getBestApSettings().getSource() == SourceType.profile
? rfElementConfig.getBestApSettings()
: radioConfig.getBestApSettings().getValue();
}
}
OBSSHopMode obssHopMode = rfElementConfig.getChannelHopSettings().getObssHopMode();
int noiseFloorThresholdInDB = rfElementConfig.getChannelHopSettings().getNoiseFloorThresholdInDB();
int noiseFloorThresholdTimeInSeconds = rfElementConfig.getChannelHopSettings().getNoiseFloorThresholdTimeInSeconds();
int nonWifiThresholdInPercentage = rfElementConfig.getChannelHopSettings().getNonWifiThresholdInPercentage();
int nonWifiThresholdTimeInSeconds = rfElementConfig.getChannelHopSettings().getNonWifiThresholdTimeInSeconds();
if (freqBand != null) {
try {
configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb, clientDisconnectThresholdDb, managementRate,
bestApSettings, multicastRate, obssHopMode, noiseFloorThresholdInDB, noiseFloorThresholdTimeInSeconds, nonWifiThresholdInPercentage,
nonWifiThresholdTimeInSeconds);
configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb,
clientDisconnectThresholdDb, managementRate, bestApSettings, multicastRate);
} catch (OvsdbClientException e) {
LOG.error("configureRrm failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
@@ -133,66 +137,67 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
}
void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel, Integer probeResponseThreshold, Integer clientDisconnectThreshold,
ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate, OBSSHopMode obssHopMode,
int noiseFloorThresholdInDB, int noiseFloorThresholdTimeInSeconds, int nonWifiThresholdInPercentage, int nonWifiThresholdTimeInSeconds)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get();
Set<String> columnNames = databaseSchema.getTables().get(wifiRrmConfigDbTable).getColumns().keySet();
List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("freq_band", new Atom<>(freqBand));
updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateColumns.put("mcast_rate", new Atom<>(0));
} else {
updateColumns.put("mcast_rate", new Atom<>(multicastRate.getId()));
if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand));
if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (columnNames.contains("mcast_rate")) {
if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateColumns.put("mcast_rate", new Atom<>(0));
} else {
updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
}
}
if (probeResponseThreshold == null) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
if (columnNames.contains("probe_resp_threshold")) {
if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
}
}
if (clientDisconnectThreshold == null) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
if (columnNames.contains("client_disconnect_threshold")) {
if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
}
}
if (managementRate == null || managementRate == ManagementRate.auto) {
updateColumns.put("beacon_rate", new Atom<>(0));
} else {
updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
if (columnNames.contains("beacon_rate")) {
if (managementRate == null || managementRate == ManagementRate.auto) {
updateColumns.put("beacon_rate", new Atom<>(0));
} else {
updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
}
}
if (bestApSettings == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
if (bestApSettings.getDropInSnrPercentage() == null) {
if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) {
if (bestApSettings == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
}
if (bestApSettings.getMinLoadFactor() == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
if (bestApSettings.getDropInSnrPercentage() == null) {
updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
}
if (bestApSettings.getMinLoadFactor() == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
}
}
}
if (obssHopMode != null) {
updateColumns.put("obss_hop_mode", new Atom<>(obssHopMode.equals(OBSSHopMode.NON_WIFI) ? 1 : 2));
}
updateColumns.put("noise_floor_thresh", new Atom<>(noiseFloorThresholdInDB));
updateColumns.put("noise_floor_time", new Atom<>(noiseFloorThresholdTimeInSeconds));
updateColumns.put("non_wifi_thresh", new Atom<>(nonWifiThresholdInPercentage));
updateColumns.put("non_wifi_time", new Atom<>(nonWifiThresholdTimeInSeconds));
Row row = new Row(updateColumns);
operations.add(new Insert(wifiRrmConfigDbTable, row));
@@ -224,17 +229,8 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
return AutoOrManualValue.createManualInstance(equipmentValue);
}
// For cell size related attributes, the “manual" mode is not supported any more,
// user can create a new RF profile with desired values to achieve it
int getSourcedValue(boolean autoCellSizeSelection, int profileValue, int equipmentValue) {
if (autoCellSizeSelection) {
return equipmentValue;
} else {
return profileValue;
}
}
void processNewChannelsRequest(OvsdbClient ovsdbClient, Map<RadioType, Integer> backupChannelMap, Map<RadioType, Integer> primaryChannelMap) {
void processNewChannelsRequest(OvsdbClient ovsdbClient, Map<RadioType, Integer> backupChannelMap,
Map<RadioType, Integer> primaryChannelMap) {
LOG.info("OvsdbDao::processNewChannelsRequest backup {} primary {}", backupChannelMap, primaryChannelMap);
try {
@@ -276,7 +272,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
}
void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributesMap) {
LOG.info("OvsdbDao::processCellSizeAttributesRequest cellSizeAttributes {}", cellSizeAttributesMap);
@@ -288,7 +284,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
Map<String, Value> updateRrmColumns = new HashMap<>();
CellSizeAttributes cellSizeAttributes = c.getValue();
MulticastRate multicastRate = cellSizeAttributes.getMulticastRate();
if (multicastRate == null || multicastRate == MulticastRate.auto) {
@@ -303,7 +299,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} else {
updateRrmColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
}
Integer clientDisconnectThreshold = cellSizeAttributes.getClientDisconnectThresholdDb();
if (clientDisconnectThreshold == null) {
updateRrmColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
@@ -317,13 +313,13 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} else {
updateRrmColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
}
Row rowRrm = new Row(updateRrmColumns);
operations.add(new Update(wifiRrmConfigDbTable, conditions, rowRrm));
Map<String, Value> updateRadioColumns = new HashMap<>();
Integer txPower = cellSizeAttributes.getEirpTxPowerDb();
if (txPower != null && txPower > 0) {
if (txPower > 0) {
updateRadioColumns.put("tx_power", new Atom<>(txPower));
} else {
updateRadioColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
@@ -337,14 +333,15 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
for (OperationResult res : result) {
LOG.info("Op Result {}", res);
if (res instanceof InsertResult) {
LOG.info("processCellSizeAttributesRequest insert new row result {}", (res));
// for insert, make sure it is actually in the table
confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable);
} else if (res instanceof ErrorResult) {
LOG.error("processCellSizeAttributesRequest error {}", (res));
throw new RuntimeException("processCellSizeAttributesRequest " + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
throw new RuntimeException("processCellSizeAttributesRequest " + ((ErrorResult) res).getError() +
" " + ((ErrorResult) res).getDetails());
}
}

View File

@@ -227,9 +227,8 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
customOptions.put("rts_threshold", String.valueOf(rtsCtsThreshold));
}
void configureCustomOptionsForUseRadiusProxyAndHotspot(boolean useRadiusProxy, boolean enableProxyArpForHotspot, Map<String, String> customOptions) {
void configureCustomOptionsForUseRadiusProxy(boolean useRadiusProxy, Map<String, String> customOptions) {
customOptions.put("radproxy", useRadiusProxy ? "1" : "0");
customOptions.put("proxy_arp", enableProxyArpForHotspot ? "1" : "0");
}
/**
@@ -252,14 +251,13 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
* @param updateColumns
* @param dynamicVlan
* @param useRadiusProxy
* @param enableProxyArpForHotspot TODO
*/
void configureCustomOptionsForSsid(OvsdbClient ovsdbClient, boolean enable80211k, boolean enable80211r, boolean rateLimitEnable, int ssidDlLimit,
int ssidUlLimit, int clientDlLimit, int clientUlLimit, int rtsCtsThreshold, int dtimPeriod, String radiusNasId, String radiusNasIp,
String radiusOperatorName, Map<String, Value> updateColumns, int dynamicVlan, Boolean useRadiusProxy, Boolean enableProxyArpForHotspot) {
String radiusOperatorName, Map<String, Value> updateColumns, int dynamicVlan, Boolean useRadiusProxy) {
Map<String, String> customOptions = new HashMap<>();
configureCustomOptionsForUseRadiusProxyAndHotspot(useRadiusProxy, enableProxyArpForHotspot, customOptions);
configureCustomOptionsForUseRadiusProxy(useRadiusProxy, customOptions);
configureCustomOptionsForRatesAndLimits(rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold, customOptions);
@@ -279,7 +277,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
int keyRefresh, boolean uapsdEnabled, boolean apBridge, NetworkForwardMode networkForwardMode, List<MacAddress> macBlockList,
boolean rateLimitEnable, int ssidDlLimit, int ssidUlLimit, int clientDlLimit, int clientUlLimit, int rtsCtsThreshold, int dtimPeriod,
Map<String, String> captiveMap, List<String> walledGardenAllowlist, String radiusNasId, String radiusNasIp, String radiusOperatorName,
String greTunnelName, int dynamicVlan, Boolean useRadiusProxy, List<Operation> operations, Boolean enableProxyArpForHotspot) {
String greTunnelName, int dynamicVlan, Boolean useRadiusProxy, List<Operation> operations) {
Map<String, Value> updateColumns = new HashMap<>();
// If we are doing a NAT SSID, no bridge, else yes
@@ -336,7 +334,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> securityMap = com.vmware.ovsdb.protocol.operation.notation.Map.of(security);
updateColumns.put("security", securityMap);
configureCustomOptionsForSsid(ovsdbClient, enable80211k, enable80211r, rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit,
rtsCtsThreshold, dtimPeriod, radiusNasId, radiusNasIp, radiusOperatorName, updateColumns, dynamicVlan, useRadiusProxy, enableProxyArpForHotspot);
rtsCtsThreshold, dtimPeriod, radiusNasId, radiusNasIp, radiusOperatorName, updateColumns, dynamicVlan, useRadiusProxy);
updateBlockList(updateColumns, macBlockList);
Row row = new Row(updateColumns);
operations.add(new Insert(wifiVifConfigDbTable, row));
@@ -445,7 +443,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if (radioConfiguration != null) {
dtimPeriod = radioConfiguration.getDtimPeriod();
uapsdEnabled = radioConfiguration.getUapsdState() == StateSetting.enabled;
if (ssidConfig.getNoLocalSubnets()) apBridge = false; // no local access
apBridge = radioConfiguration.getStationIsolation() == StateSetting.disabled; // stationIsolation
}
String minHwMode = "11n"; // min_hw_mode is 11n
@@ -552,15 +550,11 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if (ssidConfig.getUseRadiusProxy() != null) {
useRadiusProxy = ssidConfig.getUseRadiusProxy();
}
boolean enableProxyArpForHotspot = false;
if (ssidConfig.getEnableProxyArpForHotspot() != null) {
enableProxyArpForHotspot = false;
}
try {
configureSingleSsid(ovsdbClient, ifName, ssidConfig.getSsid(), ssidBroadcast, security, vlanId, rrmEnabled, enable80211r, mobilityDomain,
enable80211v, enable80211k, minHwMode, enabled, keyRefresh, uapsdEnabled, apBridge, ssidConfig.getForwardMode(), macBlockList,
rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold, dtimPeriod, captiveMap,
walledGardenAllowlist, radiusNasId, radiusNasIp, radiusOperName, greTunnelName, dynamicVlan, useRadiusProxy, operations, enableProxyArpForHotspot);
walledGardenAllowlist, radiusNasId, radiusNasIp, radiusOperName, greTunnelName, dynamicVlan, useRadiusProxy, operations);
networkConfig.configureInetVifInterface(ovsdbClient, ifName, enabled, ssidConfig.getForwardMode(), operations);
@@ -643,8 +637,10 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if ((ssidConfig.getCaptivePortalId() == profileCaptive.getId()) && (profileCaptive.getDetails() != null)) {
CaptivePortalConfiguration captiveProfileDetails = ((CaptivePortalConfiguration) profileCaptive.getDetails());
// +#define SCHEMA_CONSTS_PAGE_TITLE "page_title"
if (captiveProfileDetails.getBrowserTitle() != null) {
captiveMap.put("session_timeout", String.valueOf(captiveProfileDetails.getSessionTimeoutInMinutes()));
captiveMap.put("page_title", captiveProfileDetails.getBrowserTitle());
}
if (captiveProfileDetails.getAuthenticationType().equals(CaptivePortalAuthenticationType.radius)) {
Optional<Profile> optional =
@@ -761,9 +757,6 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
case "wpa3MixedEAP":
opensyncSecurityMode = "WPA3-EAP";
break;
case "wpa3OnlyEAP192":
opensyncSecurityMode = "WPA3-EAP-192";
break;
}
return opensyncSecurityMode;
}
@@ -782,10 +775,15 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails());
RadiusServer rServer = profileDetails.getPrimaryRadiusAccountingServer();
if (rServer != null) {
security.put("radius_acct_ip", rServer.getIpAddress() != null ? rServer.getIpAddress().getHostAddress() : null);
security.put("radius_acct_port", rServer.getPort() != null ? String.valueOf(rServer.getPort()) : null);
security.put("radius_acct_secret", rServer.getSecret());
if (ssidConfig.getUseRadiusProxy()) {
security.put("radius_acct_ip", "127.0.0.1");
security.put("radius_acct_port", rServer.getPort() != null ? String.valueOf(rServer.getPort()) : null);
security.put("radius_acct_secret", "secret");
} else {
security.put("radius_acct_ip", rServer.getIpAddress() != null ? rServer.getIpAddress().getHostAddress() : null);
security.put("radius_acct_port", rServer.getPort() != null ? String.valueOf(rServer.getPort()) : null);
security.put("radius_acct_secret", rServer.getSecret());
}
if (ssidConfig.getRadiusAcountingServiceInterval() != null && ssidConfig.getRadiusAcountingServiceInterval() > 0) {
// if the value is present, use the
// radius_acct_interval
@@ -818,11 +816,18 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
Profile profileRadius = radiusProfileList.get(0);
RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails());
RadiusServer radiusServer = profileDetails.getPrimaryRadiusAuthServer();
security.put("radius_server_ip", radiusServer.getIpAddress() != null ? radiusServer.getIpAddress().getHostAddress() : null);
security.put("radius_server_port", radiusServer.getPort() != null ? String.valueOf(radiusServer.getPort()) : null);
security.put("radius_server_secret", radiusServer.getSecret());
if (ssidConfig.getUseRadiusProxy()) {
security.put("radius_server_ip", "127.0.0.1");
security.put("radius_server_port", radiusServer.getPort() != null ? String.valueOf(radiusServer.getPort()) : null);
security.put("radius_server_secret", "secret");
} else {
security.put("radius_server_ip", radiusServer.getIpAddress() != null ? radiusServer.getIpAddress().getHostAddress() : null);
security.put("radius_server_port", radiusServer.getPort() != null ? String.valueOf(radiusServer.getPort()) : null);
security.put("radius_server_secret", radiusServer.getSecret());
}
LOG.info("set Radius server attributes radius_server_ip {} radius_server_port {} radius_server_secret {}", security.get("radius_server_ip"),
security.get("radius_server_port"), security.get("radius_server_secret"));
} else {
LOG.warn("Could not find radius profile {} in {}", ssidConfig.getRadiusServiceId(), opensyncApConfig.getRadiusProfiles());
}
@@ -865,41 +870,28 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
case "wpa2OnlyEAP":
case "wpa2OnlyRadius":
security.put("mode", "2");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
break;
case "wpa3OnlyEAP":
security.put("mode", "3");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
break;
case "wpa3OnlyEAP192":
security.put("mode", "3");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
break;
case "wpa2EAP":
case "wpa2Radius":
case "wpa3MixedEAP":
security.put("mode", "mixed");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
break;
case "wpaEAP":
case "wpaRadius":
security.put("mode", "1");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
break;
}
}