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
35 changed files with 2520 additions and 1619 deletions

View File

@@ -4,136 +4,136 @@
<parent> <parent>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<artifactId>tip-wlan-cloud-root-pom</artifactId> <artifactId>tip-wlan-cloud-root-pom</artifactId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
<relativePath>../../wlan-cloud-root</relativePath> <relativePath>../../wlan-cloud-root</relativePath>
</parent> </parent>
<artifactId>opensync-ext-cloud</artifactId> <artifactId>opensync-ext-cloud</artifactId>
<name>opensync-ext-cloud</name> <name>opensync-ext-cloud</name>
<description>Configuration interface that provides config from the cloud services.</description> <description>Configuration interface that provides config from the cloud services.</description>
<dependencies> <dependencies>
<dependency> <!-- <dependency> -->
<groupId>com.telecominfraproject.wlan</groupId> <!-- <groupId>com.telecominfraproject.wlan</groupId> -->
<artifactId>opensync-ext-interface</artifactId> <!-- <artifactId>opensync-ext-interface</artifactId> -->
<version>1.2.0-SNAPSHOT</version> <!-- <version>0.0.1-SNAPSHOT</version> -->
</dependency> <!-- </dependency> -->
<dependency> <dependency>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway</artifactId> <artifactId>opensync-gateway</artifactId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>base-client</artifactId> <artifactId>base-client</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>equipment-gateway-models</artifactId> <artifactId>equipment-gateway-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>customer-service-interface</artifactId> <artifactId>customer-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>location-service-interface</artifactId> <artifactId>location-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>equipment-service-interface</artifactId> <artifactId>equipment-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>profile-service-interface</artifactId> <artifactId>profile-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>portal-user-service-interface</artifactId> <artifactId>portal-user-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>service-metric-service-interface</artifactId> <artifactId>service-metric-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>service-metric-models</artifactId> <artifactId>service-metric-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>system-event-service-interface</artifactId> <artifactId>system-event-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>system-event-models</artifactId> <artifactId>system-event-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>alarm-service-interface</artifactId> <artifactId>alarm-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>status-service-interface</artifactId> <artifactId>status-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>client-service-interface</artifactId> <artifactId>client-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>client-models</artifactId> <artifactId>client-models</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>routing-service-interface</artifactId> <artifactId>routing-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>firmware-service-interface</artifactId> <artifactId>firmware-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>manufacturer-service-interface</artifactId> <artifactId>manufacturer-service-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency> <dependency>
<artifactId>cloud-event-dispatcher-interface</artifactId> <artifactId>cloud-event-dispatcher-interface</artifactId>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<version>1.2.0-SNAPSHOT</version> <version>1.1.0-SNAPSHOT</version>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@@ -5,23 +5,14 @@ import java.net.Inet4Address;
import java.net.Inet6Address; import java.net.Inet6Address;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -34,10 +25,6 @@ import org.springframework.stereotype.Component;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists; 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.ClientServiceInterface;
import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails; import com.telecominfraproject.wlan.client.info.models.ClientInfoDetails;
import com.telecominfraproject.wlan.client.models.Client; import com.telecominfraproject.wlan.client.models.Client;
@@ -46,11 +33,11 @@ import com.telecominfraproject.wlan.client.session.models.AssociationState;
import com.telecominfraproject.wlan.client.session.models.ClientDhcpDetails; import com.telecominfraproject.wlan.client.session.models.ClientDhcpDetails;
import com.telecominfraproject.wlan.client.session.models.ClientSession; import com.telecominfraproject.wlan.client.session.models.ClientSession;
import com.telecominfraproject.wlan.client.session.models.ClientSessionDetails; import com.telecominfraproject.wlan.client.session.models.ClientSessionDetails;
import com.telecominfraproject.wlan.client.session.models.ClientSessionMetricDetails;
import com.telecominfraproject.wlan.core.model.entity.CountryCode; import com.telecominfraproject.wlan.core.model.entity.CountryCode;
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType; import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.WiFiSessionUtility;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext; import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.customer.models.Customer; import com.telecominfraproject.wlan.customer.models.Customer;
@@ -85,7 +72,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.models.Opensyn
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients;
import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface; import com.telecominfraproject.wlan.opensync.external.integration.utils.MqttStatsPublisher;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDeviceType; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDeviceType;
import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants; import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants;
import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility; import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
@@ -112,7 +99,6 @@ import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolSta
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState;
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState.FailureReason; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState.FailureReason;
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData;
import com.telecominfraproject.wlan.status.equipment.models.LedStatus;
import com.telecominfraproject.wlan.status.equipment.models.VLANStatusData; import com.telecominfraproject.wlan.status.equipment.models.VLANStatusData;
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID; 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.ActiveBSSIDs;
@@ -125,17 +111,16 @@ import com.telecominfraproject.wlan.status.models.StatusCode;
import com.telecominfraproject.wlan.status.models.StatusDataType; import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData; import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent; import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent.ApcMode;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType; import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
import traffic.NetworkMetadata.FlowReport;
import wc.stats.IpDnsTelemetry.WCStatsReport;
@org.springframework.context.annotation.Profile("opensync_cloud_config") @org.springframework.context.annotation.Profile("opensync_cloud_config")
@Component @Component
public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegrationInterface { public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegrationInterface {
protected static final String standard_linux_date_format = "EEE MMM dd HH:mm:ss zzz yyyy";
private static final Logger LOG = LoggerFactory.getLogger(OpensyncExternalIntegrationCloud.class); private static final Logger LOG = LoggerFactory.getLogger(OpensyncExternalIntegrationCloud.class);
@Autowired @Autowired
@@ -157,9 +142,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Autowired @Autowired
private FirmwareServiceInterface firmwareServiceInterface; private FirmwareServiceInterface firmwareServiceInterface;
@Autowired @Autowired
private StatsPublisherInterface statsPublisherInterface; private MqttStatsPublisher mqttMessageProcessor;
@Autowired
private AlarmServiceInterface alarmServiceInterface;
@Autowired @Autowired
private OpensyncCloudGatewayController gatewayController; private OpensyncCloudGatewayController gatewayController;
@@ -227,13 +210,14 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
&& customer.getDetails().getAutoProvisioning().isEnabled()) { && customer.getDetails().getAutoProvisioning().isEnabled()) {
locationId = customer.getDetails().getAutoProvisioning().getLocationId(); locationId = customer.getDetails().getAutoProvisioning().getLocationId();
} }
try { try {
Location location = locationServiceInterface.getOrNull(locationId); Location location = locationServiceInterface.get(locationId);
if (location != null) ce.setLocationId(location.getId());
ce.setLocationId(location.getId());
} catch (Exception e) { } catch (Exception e) {
LOG.error("Cannot auto-provision equipment because customer location with id {} cannot be found", locationId); LOG.error("Cannot auto-provision equipment because customer location with id {} cannot be found", locationId);
throw new IllegalStateException("Cannot auto-provision equipment because customer location cannot be found : " + locationId); throw new IllegalStateException("Cannot auto-provision equipment because customer location cannot be found : " + locationId);
} }
ce.setSerial(connectNodeInfo.serialNumber); ce.setSerial(connectNodeInfo.serialNumber);
@@ -262,6 +246,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
} }
if (!radioType.equals(RadioType.UNSUPPORTED)) { if (!radioType.equals(RadioType.UNSUPPORTED)) {
advancedRadioConfiguration = RadioConfiguration.createWithDefaults(radioType); advancedRadioConfiguration = RadioConfiguration.createWithDefaults(radioType);
advancedRadioMap.put(radioType, advancedRadioConfiguration); advancedRadioMap.put(radioType, advancedRadioConfiguration);
radioConfiguration = ElementRadioConfiguration.createWithDefaults(radioType); radioConfiguration = ElementRadioConfiguration.createWithDefaults(radioType);
radioMap.put(radioType, radioConfiguration); radioMap.put(radioType, radioConfiguration);
@@ -302,7 +287,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
// equipment already exists // equipment already exists
boolean needToUpdateEquipment = false; boolean needToUpdateEquipment = false;
MacAddress reportedMacAddress = null; MacAddress reportedMacAddress = null;
alarmServiceInterface.delete(ce.getCustomerId(), ce.getId());
try { try {
reportedMacAddress = MacAddress.valueOf(connectNodeInfo.macAddress); reportedMacAddress = MacAddress.valueOf(connectNodeInfo.macAddress);
} catch (RuntimeException e) { } catch (RuntimeException e) {
@@ -414,35 +398,21 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
ovsdbSession.setRoutingId(equipmentRoutingRecord.getId()); ovsdbSession.setRoutingId(equipmentRoutingRecord.getId());
ovsdbSession.setEquipmentId(ce.getId()); ovsdbSession.setEquipmentId(ce.getId());
ovsdbSession.setCustomerId(ce.getCustomerId());
LOG.debug("Equipment {}", ce); LOG.debug("Equipment {}", ce);
LOG.info("AP {} got connected to the gateway", apId); LOG.info("AP {} got connected to the gateway", apId);
LOG.info("ConnectNodeInfo {}", connectNodeInfo); LOG.info("ConnectNodeInfo {}", connectNodeInfo);
if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY) && connectNodeInfo.versionMatrix.containsKey("DATE")) { if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) {
// The AP uses standard linux date format. So the format would be: reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY), connectNodeInfo.model);
// root@OpenAp-0498b5:~# date
// Tue Aug 3 14:55:28 UTC 2021
DateFormat dateFormat = new SimpleDateFormat(standard_linux_date_format, Locale.ENGLISH);
String dateString = connectNodeInfo.versionMatrix.get("DATE").strip();
try {
Date date = dateFormat.parse(dateString);
reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY),
connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_INACTIVE_KEY), date.getTime(), connectNodeInfo.model,
connectNodeInfo.firmwareVersion);
} catch (java.text.ParseException p) {
LOG.info("Could not parse release date {} from AP fw, set date to EPOCH start value.", dateString, Instant.EPOCH);
reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY),
connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_INACTIVE_KEY), Instant.EPOCH.getLong(ChronoField.INSTANT_SECONDS), connectNodeInfo.model,
connectNodeInfo.firmwareVersion);
}
} else { } else {
LOG.info("Cloud based firmware upgrade is not supported for this AP"); LOG.info("Cloud based firmware upgrade is not supported for this AP");
} }
} catch (Exception e) { } catch (Exception e) {
LOG.error("Could not process connection from AP {}", apId, e); LOG.error("Could not process connection from AP {}", apId, e);
throw new RuntimeException(e); throw e;
} }
} }
@@ -523,6 +493,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private void updateApStatus(Equipment ce, ConnectNodeInfo connectNodeInfo) { private void updateApStatus(Equipment ce, ConnectNodeInfo connectNodeInfo) {
try { try {
Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_ADMIN); Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_ADMIN);
if (statusRecord == null) { if (statusRecord == null) {
statusRecord = new Status(); statusRecord = new Status();
@@ -533,9 +504,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
} }
((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal); ((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal);
if (((EquipmentAdminStatusData) statusRecord.getDetails()).getLedStatus() == null) {
((EquipmentAdminStatusData) statusRecord.getDetails()).setLedStatus(LedStatus.UNKNOWN);
}
// Update the equipment admin status // Update the equipment admin status
statusRecord = statusServiceInterface.update(statusRecord); statusRecord = statusServiceInterface.update(statusRecord);
@@ -574,12 +542,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress)); protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress));
protocolStatusData.setCloudCfgDataVersion(42L); protocolStatusData.setCloudCfgDataVersion(42L);
protocolStatusData.setReportedCfgDataVersion(42L); protocolStatusData.setReportedCfgDataVersion(42L);
CountryCode countryCode = Location.getCountryCode(locationServiceInterface.getOrNull(ce.getLocationId())); protocolStatusData.setCountryCode("CA");
if (countryCode != null) protocolStatusData.setReportedCC(CountryCode.CA);
protocolStatusData.setCountryCode(countryCode.getName());
if (connectNodeInfo.country != null) {
protocolStatusData.setReportedCC(CountryCode.getByName(connectNodeInfo.country));
}
protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion); protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion);
if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) { if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) {
protocolStatusData.setReportedSwVersion(connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)); protocolStatusData.setReportedSwVersion(connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY));
@@ -753,97 +717,102 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
} }
void reconcileFwVersionToTrack(Equipment ce, String activeFirmwareImageAp, String inactiveFirmwareImageAp, Long activeFwReleaseDate, String model, private void reconcileFwVersionToTrack(Equipment ce, String reportedFwVersionFromAp, String model) {
String firmwareVersion) {
LOG.debug("reconcileFwVersionToTrack for AP {} with active firmware version {} model {}", ce.getInventoryId(), reportedFwVersionFromAp, model);
Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.FIRMWARE);
LOG.debug("reconcileFwVersionToTrack for AP {} with active firmware version {} model {}", ce.getInventoryId(), activeFirmwareImageAp, model);
Status statusRecord = statusServiceInterface.getOrNull(autoProvisionedCustomerId, autoProvisionedCustomerId, StatusDataType.FIRMWARE);
if (statusRecord == null) {
statusRecord = new Status();
statusRecord.setCreatedTimestamp(System.currentTimeMillis());
statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId());
statusRecord.setStatusDataType(StatusDataType.FIRMWARE);
statusRecord.setDetails(new EquipmentUpgradeStatusData());
((EquipmentUpgradeStatusData) statusRecord.getDetails()).setActiveSwVersion(activeFirmwareImageAp);
if (inactiveFirmwareImageAp != null) {
((EquipmentUpgradeStatusData) statusRecord.getDetails()).setActiveSwVersion(inactiveFirmwareImageAp);
}
}
EquipmentUpgradeStatusData fwUpgradeStatusData = (EquipmentUpgradeStatusData) statusRecord.getDetails(); EquipmentUpgradeStatusData fwUpgradeStatusData = (EquipmentUpgradeStatusData) statusRecord.getDetails();
fwUpgradeStatusData.setActiveSwVersion(firmwareVersion);
fwUpgradeStatusData.setAlternateSwVersion(inactiveFirmwareImageAp);
// default track settings for firmware // default track settings for firmware
CustomerFirmwareTrackSettings trackSettings = firmwareServiceInterface.getDefaultCustomerTrackSetting(); CustomerFirmwareTrackSettings trackSettings = firmwareServiceInterface.getDefaultCustomerTrackSetting();
// check for updated/modified track settings for this customer // check for updated/modified track settings for this customer
CustomerFirmwareTrackRecord custFwTrackRecord = firmwareServiceInterface.getCustomerFirmwareTrackRecord(ce.getCustomerId()); CustomerFirmwareTrackRecord custFwTrackRecord = firmwareServiceInterface.getCustomerFirmwareTrackRecord(ce.getCustomerId());
if (custFwTrackRecord != null)
trackSettings = custFwTrackRecord.getSettings();
long trackRecordId = -1;
if (custFwTrackRecord != null) {
trackSettings = custFwTrackRecord.getSettings();
trackRecordId = custFwTrackRecord.getTrackRecordId();
}
// determine if AP requires FW upgrade before cloud // determine if AP requires FW upgrade before cloud
// connection/provision // connection/provision
if (trackSettings.getAutoUpgradeDeprecatedOnBind().equals(TrackFlag.ALWAYS) || trackSettings.getAutoUpgradeUnknownOnBind().equals(TrackFlag.ALWAYS)) { if (trackSettings.getAutoUpgradeDeprecatedOnBind().equals(TrackFlag.ALWAYS) || trackSettings.getAutoUpgradeUnknownOnBind().equals(TrackFlag.ALWAYS)) {
LOG.debug("reconcileFwVersionToTrack for AP {} track flag for auto-upgrade {}", ce.getInventoryId(), LOG.debug("reconcileFwVersionToTrack for AP {} track flag for auto-upgrade {}", ce.getInventoryId(),
trackSettings.getAutoUpgradeDeprecatedOnBind()); trackSettings.getAutoUpgradeDeprecatedOnBind());
// check the reported fw version for the AP, if it is < than // check the reported fw version for the AP, if it is < than
// the default version for the cloud, then download and // the default version for the cloud, then download and
// flash the firmware before proceeding. // flash the firmware before proceeding.
// then return; // then return;
FirmwareTrackRecord fwTrackRecord = null; FirmwareTrackRecord fwTrackRecord = null;
if (custFwTrackRecord == null) { if (trackRecordId == -1) {
// take the default // take the default
fwTrackRecord = firmwareServiceInterface.getFirmwareTrackByName(FirmwareTrackRecord.DEFAULT_TRACK_NAME); fwTrackRecord = firmwareServiceInterface.getFirmwareTrackByName(FirmwareTrackRecord.DEFAULT_TRACK_NAME);
} else { } else {
// there must be a customer one // there must be a customer one
fwTrackRecord = firmwareServiceInterface.getFirmwareTrackById(custFwTrackRecord.getTrackRecordId()); fwTrackRecord = firmwareServiceInterface.getFirmwareTrackById(trackRecordId);
} }
if (fwTrackRecord != null) { if (fwTrackRecord != null) {
LOG.debug("reconcileFwVersionToTrack for AP {} firmwareTrackRecord {}", ce.getInventoryId(), fwTrackRecord); LOG.debug("reconcileFwVersionToTrack for AP {} firmwareTrackRecord {}", ce.getInventoryId(), fwTrackRecord);
Optional<FirmwareTrackAssignmentDetails> assignmentDetails = firmwareServiceInterface.getFirmwareTrackAssignments(fwTrackRecord.getTrackName())
.stream().filter(new Predicate<FirmwareTrackAssignmentDetails>() { List<FirmwareTrackAssignmentDetails> fwTrackAssignmentDetails =
@Override firmwareServiceInterface.getFirmwareTrackAssignments(fwTrackRecord.getTrackName());
public boolean test(FirmwareTrackAssignmentDetails t) {
// AP may report type as UPPER case String targetFwVersionNameForTrack = null;
return model.equalsIgnoreCase(t.getModelId());
} if (fwTrackAssignmentDetails != null) {
}).findFirst(); for (FirmwareTrackAssignmentDetails details : fwTrackAssignmentDetails) {
if (assignmentDetails.isPresent()) { if (model.equalsIgnoreCase(details.getModelId())) {
FirmwareTrackAssignmentDetails targetFirmwareForTrack = assignmentDetails.get(); targetFwVersionNameForTrack = details.getVersionName();
if (activeFwReleaseDate == null) { break;
LOG.info("Active FW release date is unknown, firmware upgrade required."); }
fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName()); }
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date); }
statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord); if (targetFwVersionNameForTrack == null) {
triggerFwDownload(ce, fwUpgradeStatusData, trackSettings); LOG.info("No target FW version for this track {}", fwTrackRecord);
} else {
Date activeReleaseDate = new Date(activeFwReleaseDate); } else {
Date targetReleaseDate = new Date(targetFirmwareForTrack.getReleaseDate()); LOG.debug("reconcileFwVersionToTrack for AP {} targetFwVersion for track {}", ce.getInventoryId(), targetFwVersionNameForTrack);
if (activeReleaseDate.after(targetReleaseDate) || activeReleaseDate.equals(targetReleaseDate)) {
LOG.info("Active FW release date {} is more recent than or equal to the target firmware release date {}, no upgrade required.", if (reportedFwVersionFromAp != null) {
activeReleaseDate, targetReleaseDate); if (!targetFwVersionNameForTrack.equals(reportedFwVersionFromAp)) {
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date); LOG.debug(
fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName()); "reconcileFwVersionToTrack for AP {} targetFwVersion {} doesn't match reported fw version {}, triggering download and flash",
statusRecord.setDetails(fwUpgradeStatusData); ce.getInventoryId(), targetFwVersionNameForTrack, reportedFwVersionFromAp);
statusRecord = statusServiceInterface.update(statusRecord);
} else { fwUpgradeStatusData.setTargetSwVersion(targetFwVersionNameForTrack);
LOG.info("Active FW release date {} is earlier than target firmware release date {}, firmware upgrade required.", activeReleaseDate,
targetReleaseDate);
fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName());
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date); fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date);
statusRecord.setDetails(fwUpgradeStatusData); statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord); statusRecord = statusServiceInterface.update(statusRecord);
triggerFwDownload(ce, fwUpgradeStatusData, trackSettings); triggerFwDownload(ce, fwUpgradeStatusData, trackSettings);
} else if (targetFwVersionNameForTrack.equals(reportedFwVersionFromAp)) {
LOG.debug("reconcileFwVersionToTrack for AP {} targetFwVersion {} is active", ce.getInventoryId(), targetFwVersionNameForTrack);
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date);
fwUpgradeStatusData.setActiveSwVersion(targetFwVersionNameForTrack);
fwUpgradeStatusData.setAlternateSwVersion(targetFwVersionNameForTrack);
fwUpgradeStatusData.setTargetSwVersion(targetFwVersionNameForTrack);
statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord);
} }
} }
} else {
LOG.info("No firmware assignment present in track for AP model {}. Auto-upgrade of firmware is not possible for this node.", model);
} }
} }
} else {
LOG.info("Automatic firmware upgrade is not configured for track {}", trackSettings); } else
{
LOG.debug("Automatic firmware upgrade is not configured for track {}", trackSettings);
} }
} }
@@ -911,20 +880,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private void updateApDisconnectedStatus(String apId, Equipment ce) { private void updateApDisconnectedStatus(String apId, Equipment ce) {
LOG.info("updateApDisconnectedStatus disconnected AP {}", apId); LOG.info("updateApDisconnectedStatus disconnected AP {}", apId);
try { 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(); Status statusRecord = new Status();
statusRecord.setCustomerId(ce.getCustomerId()); statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId()); statusRecord.setEquipmentId(ce.getId());
@@ -989,11 +944,11 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (ovsdbSession == null) { if (ovsdbSession == null) {
throw new IllegalStateException("AP is not connected " + apId); throw new IllegalStateException("AP is not connected " + apId);
} }
int customerId = ovsdbSession.getCustomerId();
Equipment equipmentConfig = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment equipmentConfig = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (equipmentConfig == null) { if (equipmentConfig == null) {
throw new IllegalStateException("Cannot retrieve configuration for " + apId); throw new IllegalStateException("Cannot retrieve configuration for " + apId);
} }
int customerId = equipmentConfig.getCustomerId();
ret = new OpensyncAPConfig(); ret = new OpensyncAPConfig();
@@ -1069,7 +1024,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if ((blockedClients != null) && !blockedClients.isEmpty()) { if ((blockedClients != null) && !blockedClients.isEmpty()) {
blockedClients.forEach(client -> blockList.add(client.getMacAddress())); blockedClients.forEach(client -> blockList.add(client.getMacAddress()));
} }
ret.setBlockedClients(blockList); ret.setBlockedClients(blockList);
ret.setRadiusProfiles(new ArrayList<>(radiusSet)); ret.setRadiusProfiles(new ArrayList<>(radiusSet));
@@ -1082,6 +1037,21 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return ret; return ret;
} }
@Override
public void processMqttMessage(String topic, Report report) {
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 @Override
public void wifiVIFStateDbTableUpdate(List<OpensyncAPVIFState> vifStateTables, String apId) { public void wifiVIFStateDbTableUpdate(List<OpensyncAPVIFState> vifStateTables, String apId) {
LOG.debug("Received Wifi_VIF_State table update for AP {}", apId); LOG.debug("Received Wifi_VIF_State table update for AP {}", apId);
@@ -1093,22 +1063,20 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment apNode = equipmentServiceInterface.getOrNull(equipmentId); Equipment apNode = equipmentServiceInterface.getOrNull(equipmentId);
if (apNode == null) { if (apNode == null) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get EquipmentId for AP {}", apId); LOG.debug("wifiVIFStateDbTableUpdate::Cannot get EquipmentId for AP {}", apId);
return; // we don't have the required info to get the return; // we don't have the required info to get the
// radio type yet // radio type yet
} }
int customerId = apNode.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
ApElementConfiguration apElementConfig = (ApElementConfiguration) apNode.getDetails(); ApElementConfiguration apElementConfig = (ApElementConfiguration) apNode.getDetails();
ProfileContainer profileContainer = new ProfileContainer(profileServiceInterface.getProfileWithChildren(apNode.getProfileId())); ProfileContainer profileContainer = new ProfileContainer(profileServiceInterface.getProfileWithChildren(apNode.getProfileId()));
@@ -1232,16 +1200,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get Equipment for AP {}", apId); LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
int customerId = ce.getCustomerId(); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if ((customerId < 0) || (equipmentId < 0)) { if (ce == null) {
LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get Equipment for AP {}", apId);
return; return;
} }
@@ -1318,7 +1287,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("Protocol Status reportedCC {} radioStatus.getCountry {} radioStatus CountryCode fromName {}", protocolStatusData.getReportedCC(), LOG.debug("Protocol Status reportedCC {} radioStatus.getCountry {} radioStatus CountryCode fromName {}", protocolStatusData.getReportedCC(),
radioState.getCountry(), CountryCode.getByName((radioState.getCountry()))); radioState.getCountry(), CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setReportedCC(CountryCode.getByName((radioState.getCountry()))); protocolStatusData.setReportedCC(CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setCountryCode(radioState.getCountry());
protocolStatus.setDetails(protocolStatusData); protocolStatus.setDetails(protocolStatusData);
} else { } else {
@@ -1339,7 +1307,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
channelStatus.setDetails(channelStatusData); channelStatus.setDetails(channelStatusData);
} }
((EquipmentChannelStatusData) channelStatus.getDetails()).getChannelNumberStatusDataMap().put(radioState.getFreqBand(), radioState.getChannel()); ((EquipmentChannelStatusData) channelStatus.getDetails()).getChannelNumberStatusDataMap().put(radioState.getFreqBand(), radioState.getChannel());
((EquipmentChannelStatusData) channelStatus.getDetails()).getTxPowerDataMap().put(radioState.getFreqBand(), radioState.getTxPower());
return channelStatus; return channelStatus;
} }
@@ -1457,18 +1424,21 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiInetStateDbTableUpdate Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiInetStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiInetStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiInetStateDbTableUpdate Cannot get customer Equipment for {}", apId);
return;
}
Status lanStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.LANINFO); Status lanStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.LANINFO);
if (lanStatus == null) { if (lanStatus == null) {
lanStatus = new Status(); lanStatus = new Status();
@@ -1583,18 +1553,22 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get Session for AP {}", apId); LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiAssociatedClientsDbTableUpdate Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiAssociatedClientsDbTableUpdate Cannot get customer Equipment for {}", apId);
return;
}
if ((wifiAssociatedClients == null) || wifiAssociatedClients.isEmpty()) { if ((wifiAssociatedClients == null) || wifiAssociatedClients.isEmpty()) {
return; return;
} }
@@ -1611,13 +1585,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
MacAddress macAddress = MacAddress.valueOf(mMac); MacAddress macAddress = MacAddress.valueOf(mMac);
Client clientInstance = clientServiceInterface.getOrNull(customerId, macAddress); Client clientInstance = clientServiceInterface.getOrNull(customerId, macAddress);
boolean isReassociation = true;
if (clientInstance == null) { if (clientInstance == null) {
isReassociation = false; // new client
clientInstance = new Client(); clientInstance = new Client();
clientInstance.setCustomerId(customerId); clientInstance.setCustomerId(customerId);
clientInstance.setMacAddress(MacAddress.valueOf(mMac)); clientInstance.setMacAddress(MacAddress.valueOf(mMac));
clientInstance.setCreatedTimestamp(System.currentTimeMillis());
clientInstance.setDetails(new ClientInfoDetails()); clientInstance.setDetails(new ClientInfoDetails());
clientInstance = clientServiceInterface.create(clientInstance); clientInstance = clientServiceInterface.create(clientInstance);
LOG.info("Created client from Wifi_Associated_Clients ovsdb table change {}", clientInstance); LOG.info("Created client from Wifi_Associated_Clients ovsdb table change {}", clientInstance);
} }
@@ -1629,20 +1607,30 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
clientSession.setMacAddress(clientInstance.getMacAddress()); clientSession.setMacAddress(clientInstance.getMacAddress());
clientSession.setLocationId(ce.getLocationId()); clientSession.setLocationId(ce.getLocationId());
clientSession.setDetails(new ClientSessionDetails()); clientSession.setDetails(new ClientSessionDetails());
long derivedSessionId = WiFiSessionUtility.encodeWiFiAssociationId(timestamp / 1000, clientInstance.getMacAddress().getAddressAsLong()); clientSession.getDetails().setSessionId(clientInstance.getMacAddress().getAddressAsLong());
clientSession.getDetails().setSessionId(Long.toUnsignedString(derivedSessionId)); clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(clientInstance.getMacAddress().getAddressAsLong()));
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(Long.toUnsignedString(derivedSessionId))); clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated); clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated);
clientSession.getDetails().setIsReassociation(false);
clientSession.getDetails().setAssocTimestamp(timestamp); clientSession.getDetails().setAssocTimestamp(timestamp);
clientSessions.add(clientSession);
} else { } else {
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getLastEventTimestamp() == null || clientSession.getDetails().getLastEventTimestamp() < timestamp) {
clientSession.getDetails().setLastEventTimestamp(timestamp);
}
if (!clientSession.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) { if (!clientSession.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) {
clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated); clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated);
clientSession.getDetails().setAssocTimestamp(timestamp); clientSession.getDetails().setAssocTimestamp(timestamp);
clientSessions.add(clientSession);
} }
} }
clientSession.getDetails().setIsReassociation(isReassociation);
clientSessions.add(clientSession);
} }
if (clientSessions.size() > 0) { if (clientSessions.size() > 0) {
@@ -1662,17 +1650,19 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("awlanNodeDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.info("awlanNodeDbTableUpdate::Cannot find AP {}", apId); LOG.info("awlanNodeDbTableUpdate::Cannot find AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("awlanNodeDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
int upgradeStatusFromAp = node.getUpgradeStatus(); int upgradeStatusFromAp = node.getUpgradeStatus();
EquipmentUpgradeState fwUpgradeState = null; EquipmentUpgradeState fwUpgradeState = null;
@@ -1748,7 +1738,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (node.qrCode != null) { if (node.qrCode != null) {
if (node.qrCode.containsKey("DT")) { if (node.qrCode.containsKey("DT")) {
qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT"))); qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT")));
} }
qrCode.setVendorName(node.qrCode.get("VN")); qrCode.setVendorName(node.qrCode.get("VN"));
if (isValidMACAddress(node.qrCode.get("DM"))) { if (isValidMACAddress(node.qrCode.get("DM"))) {
qrCode.setDeviceMac(MacAddress.valueOf(node.qrCode.get("DM"))); qrCode.setDeviceMac(MacAddress.valueOf(node.qrCode.get("DM")));
@@ -1887,29 +1877,32 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.info("wifiVIFStateDbTableDelete for AP {} rows {}", apId, vifStateTables); LOG.info("wifiVIFStateDbTableDelete for AP {} rows {}", apId, vifStateTables);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) { if (ovsdbSession == null) {
LOG.debug("wifiVIFStateDbTableDelete::Cannot get Session for AP {}", apId); LOG.debug("wifiVIFStateDbTableDelete::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiVIFStateDbTableDelete Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiVIFStateDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Status activeBssidsStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.ACTIVE_BSSIDS); Status activeBssidsStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.ACTIVE_BSSIDS);
if (activeBssidsStatus == null) { if (activeBssidsStatus == null) {
return; // nothing to delete return; // nothing to delete
} }
ActiveBSSIDs statusDetails = (ActiveBSSIDs) activeBssidsStatus.getDetails(); ActiveBSSIDs statusDetails = (ActiveBSSIDs) activeBssidsStatus.getDetails();
List<ActiveBSSID> bssidList = statusDetails.getActiveBSSIDs(); List<ActiveBSSID> bssidList = statusDetails.getActiveBSSIDs();
List<ActiveBSSID> toBeDeleted = new ArrayList<>(); List<ActiveBSSID> toBeDeleted = new ArrayList<>();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
List<ClientSession> clientSessionsForCustomerAndEquipment = new ArrayList<>(); List<ClientSession> clientSessionsForCustomerAndEquipment = new ArrayList<>();
if (ce != null) { if (ce != null) {
PaginationResponse<ClientSession> clientSessions = clientServiceInterface.getSessionsForCustomer(customerId, ImmutableSet.of(equipmentId), PaginationResponse<ClientSession> clientSessions = clientServiceInterface.getSessionsForCustomer(customerId, ImmutableSet.of(equipmentId),
@@ -1952,17 +1945,15 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get Session for AP {}", apId); LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiAssociatedClientsDbTableDelete Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(deletedClientMac)); Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(deletedClientMac));
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(deletedClientMac)); ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(deletedClientMac));
@@ -1996,18 +1987,21 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get Equipment for AP {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("updateDhcpIpClientFingerprints::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get Equipment for AP {}", apId);
return;
}
long locationId = ce.getLocationId(); long locationId = ce.getLocationId();
if (rowUpdateOperation.equals(RowUpdateOperation.INSERT) || rowUpdateOperation.equals(RowUpdateOperation.MODIFY) if (rowUpdateOperation.equals(RowUpdateOperation.INSERT) || rowUpdateOperation.equals(RowUpdateOperation.MODIFY)
@@ -2035,8 +2029,31 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
// Create or update // Create or update
Client client = clientServiceInterface.getOrNull(customerId, clientMacAddress); Client client = clientServiceInterface.getOrNull(customerId, clientMacAddress);
if (client == null) { if (client == null) {
LOG.info("No client present for {}", clientMacAddress); LOG.info("Cannot find client instance for {}", clientMacAddress);
continue; 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 { } else {
LOG.info("Client {} already exists on the cloud, update client values", dhcpLeasedIps); LOG.info("Client {} already exists on the cloud, update client values", dhcpLeasedIps);
if (dhcpLeasedIps.containsKey("hostname")) { if (dhcpLeasedIps.containsKey("hostname")) {
@@ -2095,6 +2112,15 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (clientServiceInterface.getOrNull(customerId, clientMacAddress) != null) { if (clientServiceInterface.getOrNull(customerId, clientMacAddress) != null) {
LOG.info("Deleting invalid client {}", clientServiceInterface.delete(customerId, clientMacAddress)); LOG.info("Deleting invalid client {}", clientServiceInterface.delete(customerId, clientMacAddress));
} }
} else {
LOG.info("Client {} already exists on the cloud, delete the session for the client if it exists", dhcpLeasedIps);
// In this case, we might have a session, as the client
// already exists on the cloud, update if required
ClientSession session = clientServiceInterface.getSessionOrNull(customerId, equipmentId, clientMacAddress);
if (session != null) {
LOG.info("Delete clientSession that was removed from the Dhcp_Leased_IP table {}",
clientServiceInterface.deleteSession(customerId, equipmentId, clientMacAddress));
}
} }
} }
} }
@@ -2107,10 +2133,34 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
ClientSession session = clientServiceInterface.getSessionOrNull(customerId, equipmentId, clientMacAddress); ClientSession session = clientServiceInterface.getSessionOrNull(customerId, equipmentId, clientMacAddress);
if (session == null) { if (session == null) {
LOG.info("No session for client {} with for customer {} equipment {}", clientMacAddress, customerId, equipmentId); session = new ClientSession();
return null; 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());
}
if (session.getDetails().getPriorSessionId() == null) {
session.getDetails().setPriorSessionId(session.getDetails().getSessionId());
}
if (session.getDetails().getLastEventTimestamp() == null || session.getDetails().getLastEventTimestamp() < timestamp) {
session.getDetails().setLastEventTimestamp(timestamp);
}
if (!session.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) {
session.getDetails().setAssociationState(AssociationState._802_11_Associated);
session.getDetails().setAssocTimestamp(timestamp);
}
} }
if (dhcpLeasedIps.containsKey("fingerprint")) { if (dhcpLeasedIps.containsKey("fingerprint")) {
session.getDetails().setApFingerprint(dhcpLeasedIps.get("fingerprint")); session.getDetails().setApFingerprint(dhcpLeasedIps.get("fingerprint"));
} }
@@ -2165,7 +2215,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (dhcpLeasedIps.containsKey("lease_time")) { if (dhcpLeasedIps.containsKey("lease_time")) {
Integer leaseTime = Integer.valueOf(dhcpLeasedIps.get("lease_time")); Integer leaseTime = Integer.valueOf(dhcpLeasedIps.get("lease_time"));
session.getDetails().getDhcpDetails().setLeaseTimeInSeconds(leaseTime); session.getDetails().getDhcpDetails().setLeaseTimeInSeconds(leaseTime);
session.getDetails().getDhcpDetails().setLeaseStartTimestamp(session.getDetails().getAssocTimestamp());
} }
if (dhcpLeasedIps.containsKey("gateway")) { if (dhcpLeasedIps.containsKey("gateway")) {
@@ -2279,18 +2328,21 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("clearEquipmentStatus Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("clearEquipmentStatus::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("clearEquipmentStatus::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("clearEquipmentStatus Cannot get customer Equipment for {}", apId);
return;
}
List<Status> statusList = new ArrayList<>(); List<Status> statusList = new ArrayList<>();
Status status = new Status(); Status status = new Status();
@@ -2356,26 +2408,22 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Override @Override
public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, RowUpdateOperation rowUpdateOperation) { public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, RowUpdateOperation rowUpdateOperation) {
LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId, apcStateAttributes); LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId, apcStateAttributes);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) { if (ovsdbSession == null) {
LOG.info("apcStateDbTableUpdate::Cannot get Session for AP {}", apId); LOG.info("apcStateDbTableUpdate::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("apcStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.info("apcStateDbTableUpdate::Cannot get Equipment for AP {}", apId); LOG.info("apcStateDbTableUpdate::Cannot get Equipment for AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("apcStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
InetAddress drIpAddr = null; InetAddress drIpAddr = null;
InetAddress bdrIpAddr = null; InetAddress bdrIpAddr = null;
try { try {
@@ -2389,7 +2437,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.error("UnknownHost for designatedRouterIp", e); LOG.error("UnknownHost for designatedRouterIp", e);
} }
Status protocolStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.PROTOCOL); Status protocolStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.PROTOCOL);
String mode = apcStateAttributes.get("mode");
InetAddress localIpV4Addr = null; InetAddress localIpV4Addr = null;
if (protocolStatus != null) { if (protocolStatus != null) {
@@ -2398,76 +2445,13 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setLastApcUpdate(System.currentTimeMillis()); ((EquipmentProtocolStatusData) protocolStatus.getDetails()).setLastApcUpdate(System.currentTimeMillis());
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setReportedApcAddress(drIpAddr); ((EquipmentProtocolStatusData) protocolStatus.getDetails()).setReportedApcAddress(drIpAddr);
((EquipmentProtocolStatusData) protocolStatus.getDetails()).setRadiusProxyAddress(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); protocolStatus = statusServiceInterface.update(protocolStatus);
LOG.info("Protocol Status updated for APC_State table monitor change {}", protocolStatus); LOG.info("Protocol Status updated for APC_State table monitor change {}", protocolStatus);
} }
String mode = apcStateAttributes.get("mode");
ApcElectionEvent electionEvent = ApcElectionEvent electionEvent =
new ApcElectionEvent(drIpAddr, bdrIpAddr, localIpV4Addr, drIpAddr, mode, Boolean.valueOf(apcStateAttributes.get("enabled")), new ApcElectionEvent(drIpAddr, bdrIpAddr, localIpV4Addr, drIpAddr, mode, Boolean.valueOf(apcStateAttributes.get("enabled")),
RealTimeEventType.APC_Election_event, customerId, ce.getLocationId(), equipmentId, System.currentTimeMillis()); RealTimeEventType.APC_Election_event, customerId, ce.getLocationId(), equipmentId, System.currentTimeMillis());
statsPublisherInterface.publishSystemEventFromTableStateMonitor(electionEvent); mqttMessageProcessor.publishSystemEventFromTableStateMonitor(electionEvent);
}
@Override
public void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId) {
LOG.debug("start nodeStateDbTableUpdate for {}", apId);
if (LOG.isTraceEnabled())
LOG.trace("nodeStateDbTableUpdate tableAttributes {}", nodeStateAttributes);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) {
LOG.warn("nodeStateDbTableUpdate::Cannot get Session for AP {}", apId);
return;
}
long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) {
LOG.warn("nodeStateDbTableUpdate::Cannot get Equipment for AP {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.warn("nodeStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Status eqAdminStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.EQUIPMENT_ADMIN);
LedStatus ledStatus = null;
for (Map<String, String> nsa : nodeStateAttributes) {
if (nsa.get("module").equals("led")) {
if (nsa.get("key").equals("led_blink") && nsa.get("value").equals("on")) {
ledStatus = LedStatus.led_blink;
} else if (nsa.get("key").equals("led_off") && nsa.get("value").equals("off")) {
ledStatus = LedStatus.led_off;
} else {
ledStatus = LedStatus.UNKNOWN;
}
}
}
if (ledStatus != null) {
if (eqAdminStatus != null) {
if (((EquipmentAdminStatusData) eqAdminStatus.getDetails()).getLedStatus() == null
|| !((EquipmentAdminStatusData) eqAdminStatus.getDetails()).getLedStatus().equals(ledStatus)) {
((EquipmentAdminStatusData) eqAdminStatus.getDetails()).setLedStatus(ledStatus);
eqAdminStatus = statusServiceInterface.update(eqAdminStatus);
LOG.debug("nodeStateDbTableUpdate updated status {}", eqAdminStatus);
}
}
}
LOG.debug("finished nodeStateDbTableUpdate for {}", apId);
}
@Override
public void processMqttMessage(String topic, Report report) {
statsPublisherInterface.processMqttMessage(topic, report);
} }
} }

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.external.integration.controller; package com.telecominfraproject.wlan.opensync.external.integration.controller;
import java.util.ArrayList; import java.util.ArrayList;
@@ -25,7 +24,6 @@ import org.springframework.security.web.bind.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.telecominfraproject.wlan.core.client.PingClient; import com.telecominfraproject.wlan.core.client.PingClient;
@@ -51,7 +49,6 @@ import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStartDebugEngine; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStartDebugEngine;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStopDebugEngine; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStopDebugEngine;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGatewayCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommand; import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommandResponse; import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommandResponse;
import com.telecominfraproject.wlan.equipmentgateway.models.GatewayDefaults; import com.telecominfraproject.wlan.equipmentgateway.models.GatewayDefaults;
@@ -152,16 +149,19 @@ public class OpensyncCloudGatewayController {
String inventoryId = command.getInventoryId(); String inventoryId = command.getInventoryId();
if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) { if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) {
LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId, command); LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId,
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, "Unsupported value in command for " + inventoryId, command, command);
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort())); ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Unsupported value in command for " + inventoryId, command, registeredGateway.getHostname(),
registeredGateway.getPort()));
return; return;
} }
OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId); OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId);
if (session == null) { if (session == null) {
LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command); LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "No session found for " + inventoryId, command, ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort())); "No session found for " + inventoryId, command, registeredGateway.getHostname(),
registeredGateway.getPort()));
return; return;
} }
@@ -201,7 +201,8 @@ public class OpensyncCloudGatewayController {
ret.add(processRadioReboot(session, (CEGWRebootRequest) command)); ret.add(processRadioReboot(session, (CEGWRebootRequest) command));
break; break;
case ClientBlocklistChangeNotification: case ClientBlocklistChangeNotification:
ret.add(sendClientBlocklistChangeNotification(session, (CEGWClientBlocklistChangeNotification) command)); ret.add(sendClientBlocklistChangeNotification(session,
(CEGWClientBlocklistChangeNotification) command));
break; break;
case NewChannelRequest: case NewChannelRequest:
ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command)); ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
@@ -209,27 +210,24 @@ public class OpensyncCloudGatewayController {
case CellSizeAttributesRequest: case CellSizeAttributesRequest:
ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command)); ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command));
break; break;
// case MostRecentStatsTimestamp:
// ret.add(sendGetMostRecentStatsTimestampRequest(command, inventoryId));
// break;
default: default:
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command); LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, ret.add(new EquipmentCommandResponse(
"Invalid command type (" + command.getCommandType() + ") for equipment (" + inventoryId + ")", command, CEGWCommandResultCode.UnsupportedCommand, "Invalid command type ("
registeredGateway == null ? null : registeredGateway.getHostname(), + command.getCommandType() + ") for equipment (" + inventoryId + ")",
registeredGateway == null ? -1 : registeredGateway.getPort())); command, registeredGateway.getHostname(), registeredGateway.getPort()));
} }
} }
}); });
return ret; return ret;
} }
private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session, CEGWFirmwareDownloadRequest command) { private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session,
CEGWFirmwareDownloadRequest command) {
return sendMessage(session, command.getInventoryId(), command); return sendMessage(session, command.getInventoryId(), command);
} }
@@ -249,8 +247,6 @@ public class OpensyncCloudGatewayController {
public GatewayDefaults retrieveGatewayDefaults() { public GatewayDefaults retrieveGatewayDefaults() {
return new GatewayDefaults(); return new GatewayDefaults();
} }
/** /**
* Verify a route to customer equipment * Verify a route to customer equipment
@@ -263,18 +259,19 @@ public class OpensyncCloudGatewayController {
if (null != command.getRoutingId()) { if (null != command.getRoutingId()) {
if (!command.getRoutingId().equals(session.getRoutingId())) { if (!command.getRoutingId().equals(session.getRoutingId())) {
LOG.info("[E:{} R:{}] Stale routing entry ({}) detected", command.getInventoryId(), session.getRoutingId(), LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(),
command.getRoutingId()); command.getInventoryId(), session.getRoutingId(), command.getRoutingId());
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command, return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer",
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); command, registeredGateway.getHostname(), registeredGateway.getPort());
} }
} }
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Route active", command, 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); return sendMessage(session, command.getInventoryId(), command);
} }
@@ -284,24 +281,27 @@ public class OpensyncCloudGatewayController {
session.getOvsdbClient().shutdown(); session.getOvsdbClient().shutdown();
} catch (Exception e) { } catch (Exception e) {
LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage()); LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage());
return new EquipmentCommandResponse(CEGWCommandResultCode.FailedToSend, return new EquipmentCommandResponse(
"Failed to send command " + command.getCommandType() + " to " + command.getInventoryId() + ": " + e.getMessage(), command, CEGWCommandResultCode.FailedToSend, "Failed to send command " + command.getCommandType() + " to "
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); + command.getInventoryId() + ": " + e.getMessage(),
command, registeredGateway.getHostname(), registeredGateway.getPort());
} }
LOG.debug("[{}] Closed session to CE", command.getInventoryId()); LOG.debug("[{}] Closed session to CE", command.getInventoryId());
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Closed session to " + command.getInventoryId(), command, return new EquipmentCommandResponse(CEGWCommandResultCode.Success,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); "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); return sendMessage(session, command.getInventoryId(), command);
} }
private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) { private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) {
return sendMessage(session, command.getInventoryId(), command); return sendMessage(session, command.getInventoryId(), command);
} }
private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) { private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) {
return sendMessage(session, command.getInventoryId(), command); return sendMessage(session, command.getInventoryId(), command);
} }
@@ -317,17 +317,15 @@ public class OpensyncCloudGatewayController {
private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) { private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) {
LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId); LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId);
EquipmentCommandResponse response = EquipmentCommandResponse response = new EquipmentCommandResponse(CEGWCommandResultCode.Success,
new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Received Command " + command.getCommandType() + " for " + inventoryId, command, "Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); registeredGateway.getHostname(), registeredGateway.getPort());
if (command instanceof CEGWBlinkRequest) { if (command instanceof CEGWConfigChangeNotification) {
String resultDetails = tipwlanOvsdbClient.processBlinkRequest(inventoryId, ((CEGWBlinkRequest)command).getBlinkAllLEDs());
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWConfigChangeNotification) {
tipwlanOvsdbClient.processConfigChanged(inventoryId); tipwlanOvsdbClient.processConfigChanged(inventoryId);
} else if (command instanceof CEGWClientBlocklistChangeNotification) { } else if (command instanceof CEGWClientBlocklistChangeNotification) {
tipwlanOvsdbClient.processClientBlocklistChange(inventoryId, ((CEGWClientBlocklistChangeNotification) command).getBlockList()); tipwlanOvsdbClient.processClientBlocklistChange(inventoryId,
((CEGWClientBlocklistChangeNotification) command).getBlockList());
} else if (command instanceof CEGWChangeRedirectorHost) { } else if (command instanceof CEGWChangeRedirectorHost) {
String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost(); String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost();
tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress); tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress);
@@ -342,7 +340,7 @@ public class OpensyncCloudGatewayController {
Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels(); Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels(); Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels();
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels, newPrimaryChannels); String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels);
response.setResultDetail(resultDetails); response.setResultDetail(resultDetails);
} else if (command instanceof CEGWCellSizeAttributesRequest) { } else if (command instanceof CEGWCellSizeAttributesRequest) {
CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command; CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
@@ -359,7 +357,8 @@ public class OpensyncCloudGatewayController {
String firmwareVersion = dlRequest.getFirmwareVersion(); String firmwareVersion = dlRequest.getFirmwareVersion();
String username = dlRequest.getUsername(); String username = dlRequest.getUsername();
String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, username); String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
username);
response.setResultDetail(resultDetails); response.setResultDetail(resultDetails);
@@ -371,15 +370,15 @@ public class OpensyncCloudGatewayController {
flashRequest.getInventoryId(); flashRequest.getInventoryId();
flashRequest.getUsername(); flashRequest.getUsername();
String resultDetails = String resultDetails = tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(),
tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(), flashRequest.getFirmwareVersion(), flashRequest.getUsername()); flashRequest.getFirmwareVersion(), flashRequest.getUsername());
response.setResultDetail(resultDetails); response.setResultDetail(resultDetails);
} else if (command instanceof CEGWRadioResetRequest) { } else if (command instanceof CEGWRadioResetRequest) {
response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Received Command " + command.getCommandType() + " for " + inventoryId, command, "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) { } else if (command instanceof CEGWRebootRequest) {
CEGWRebootRequest rebootRequest = (CEGWRebootRequest) command; CEGWRebootRequest rebootRequest = (CEGWRebootRequest) command;
@@ -403,9 +402,10 @@ public class OpensyncCloudGatewayController {
default: default:
response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
"Received Command " + command.getCommandType() + " for " + inventoryId, command, "Received Command " + command.getCommandType() + " for " + inventoryId, command,
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()); registeredGateway.getHostname(), registeredGateway.getPort());
} }
} }
return response; return response;
@@ -423,14 +423,15 @@ public class OpensyncCloudGatewayController {
return sendMessage(session, command.getInventoryId(), command); return sendMessage(session, command.getInventoryId(), command);
} }
private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) { private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) {
return sendMessage(session, command.getInventoryId(), command); return sendMessage(session, command.getInventoryId(), command);
} }
@RequestMapping(value = "/commandWithUser", method = RequestMethod.POST) @RequestMapping(value = "/commandWithUser", method = RequestMethod.POST)
public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command, @AuthenticationPrincipal Object requestUser, public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command,
HttpServletRequest httpServletRequest) { @AuthenticationPrincipal Object requestUser, HttpServletRequest httpServletRequest) {
// use these properties to get address and port where request has // use these properties to get address and port where request has
// arrived // arrived
@@ -463,7 +464,8 @@ public class OpensyncCloudGatewayController {
} }
if (eqRoutingSvc == null) { 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(); cleanupStaleGwRecord();
@@ -479,11 +481,13 @@ public class OpensyncCloudGatewayController {
EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord); EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord);
registeredGwId = result.getId(); registeredGwId = result.getId();
registeredGateway = result; 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; registeredWithRoutingService = true;
} catch (RuntimeException e) { } catch (RuntimeException e) {
// failed // 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());
} }
} }
} }
@@ -508,7 +512,8 @@ public class OpensyncCloudGatewayController {
eqRoutingSvc.deleteGateway(eqpRec.getId()); eqRoutingSvc.deleteGateway(eqpRec.getId());
} catch (RuntimeException e) { } catch (RuntimeException e) {
// failed // 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 { } else {
LOG.debug("Gateway {} is reachable.", eqpRec.getHostname()); LOG.debug("Gateway {} is reachable.", eqpRec.getHostname());
@@ -519,8 +524,9 @@ public class OpensyncCloudGatewayController {
} }
} catch (Exception ex) { // Catching Exception to prevent crashing the } catch (Exception ex) { // Catching Exception to prevent crashing the
// register thread // register thread
LOG.debug("Generic Exception encountered when trying to cleanup " + "the stale not-reachable GateWays. Continuing to register the new Gateway." LOG.debug("Generic Exception encountered when trying to cleanup "
+ " Error: {} ", ex.getMessage()); + "the stale not-reachable GateWays. Continuing to register the new Gateway." + " Error: {} ",
ex.getMessage());
} }
} }
@@ -544,13 +550,14 @@ public class OpensyncCloudGatewayController {
if (registeredWithRoutingService) { if (registeredWithRoutingService) {
try { try {
eqRoutingSvc.deleteGateway(registeredGwId); 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; registeredGwId = -1;
registeredGateway = null; registeredGateway = null;
} catch (Exception e) { } catch (Exception e) {
// failed // failed
LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}", getGatewayName(), registeredGwId, LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}",
e.getLocalizedMessage()); getGatewayName(), registeredGwId, e.getLocalizedMessage());
} }
registeredWithRoutingService = false; registeredWithRoutingService = false;
} }
@@ -568,10 +575,12 @@ public class OpensyncCloudGatewayController {
* @param equipmentId * @param equipmentId
* @return associationId * @return associationId
*/ */
public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId, Long equipmentId) { public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId,
Long equipmentId) {
registerWithRoutingService(); registerWithRoutingService();
if (!registeredWithRoutingService) { 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; return null;
} }
// Clean up stale records // Clean up stale records
@@ -583,11 +592,13 @@ public class OpensyncCloudGatewayController {
try { try {
routingRecord = eqRoutingSvc.create(routingRecord); 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; return routingRecord;
} catch (Exception e) { } 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; return null;
} }
@@ -600,7 +611,7 @@ public class OpensyncCloudGatewayController {
* Gateway does not exist, delete the equipmentRouting entry. * Gateway does not exist, delete the equipmentRouting entry.
* *
* @param equipmentId: * @param equipmentId:
* Equipment's ID * Equipment's ID
*/ */
protected void cleanupStaleEqptRoutingRecord(Long equipmentId) { protected void cleanupStaleEqptRoutingRecord(Long equipmentId) {
LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId); LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId);
@@ -613,17 +624,20 @@ public class OpensyncCloudGatewayController {
if (gwRec != null) { if (gwRec != null) {
if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) { if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) {
// GW isn't reachable --> invoke unregister // 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); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
} else { } else {
LOG.debug("Gateway {} is reachable.", gwRec.getHostname()); LOG.debug("Gateway {} is reachable.", gwRec.getHostname());
} }
} else { } 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); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
} }
} catch (DsEntityNotFoundException entityNotFoundException) { } 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); deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
} }
} }
@@ -632,10 +646,9 @@ public class OpensyncCloudGatewayController {
} }
} catch (Exception genericException) { // Catching Exception to prevent } catch (Exception genericException) { // Catching Exception to prevent
// crashing the register thread // crashing the register thread
LOG.debug( LOG.debug("Generic Exception encountered when trying to cleanup "
"Generic Exception encountered when trying to cleanup " + "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord."
+ "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord." + " Error: {} ", + " Error: {} ", equipmentId, genericException.getMessage());
equipmentId, genericException.getMessage());
} }
} }
@@ -644,7 +657,8 @@ public class OpensyncCloudGatewayController {
eqRoutingSvc.delete(routingId); eqRoutingSvc.delete(routingId);
} catch (RuntimeException e) { } catch (RuntimeException e) {
// failed // 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 false;
} }
return true; return true;
@@ -652,16 +666,18 @@ public class OpensyncCloudGatewayController {
public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) { public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) {
if (!registeredWithRoutingService) { 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; return;
} }
try { 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); eqRoutingSvc.delete(routingId);
} catch (Exception e) { } catch (Exception e) {
LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName, equipmentId, routingId, LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName,
e.getLocalizedMessage()); equipmentId, routingId, e.getLocalizedMessage());
} }
} }

View File

@@ -10,8 +10,10 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.client.models.events.realtime.ClientConnectSuccessEvent;
import com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent.DisconnectFrameType; import com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent.DisconnectFrameType;
import com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent.DisconnectInitiator; import com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent.DisconnectInitiator;
import com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent.ClientTimeoutReason;
import com.telecominfraproject.wlan.client.models.events.utils.WlanReasonCode; import com.telecominfraproject.wlan.client.models.events.utils.WlanReasonCode;
import com.telecominfraproject.wlan.client.models.events.utils.WlanStatusCode; import com.telecominfraproject.wlan.client.models.events.utils.WlanStatusCode;
import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherInterface; import com.telecominfraproject.wlan.cloudeventdispatcher.CloudEventDispatcherInterface;
@@ -26,6 +28,7 @@ import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
import com.telecominfraproject.wlan.profile.models.ProfileContainer; import com.telecominfraproject.wlan.profile.models.ProfileContainer;
import com.telecominfraproject.wlan.profile.models.ProfileType; import com.telecominfraproject.wlan.profile.models.ProfileType;
import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration; import com.telecominfraproject.wlan.profile.rf.models.RfConfiguration;
import com.telecominfraproject.wlan.systemevent.equipment.BaseDhcpEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeChannelHopEvent; import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeChannelHopEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType; import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeSipCallReportEvent; import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeSipCallReportEvent;
@@ -40,6 +43,7 @@ import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
import sts.OpensyncStats; import sts.OpensyncStats;
import sts.OpensyncStats.AssocType; import sts.OpensyncStats.AssocType;
import sts.OpensyncStats.CTReasonType;
import sts.OpensyncStats.CallReport; import sts.OpensyncStats.CallReport;
import sts.OpensyncStats.CallStart; import sts.OpensyncStats.CallStart;
import sts.OpensyncStats.CallStop; import sts.OpensyncStats.CallStop;
@@ -48,8 +52,22 @@ import sts.OpensyncStats.DeviceType;
import sts.OpensyncStats.EventReport; import sts.OpensyncStats.EventReport;
import sts.OpensyncStats.EventReport.ClientAssocEvent; import sts.OpensyncStats.EventReport.ClientAssocEvent;
import sts.OpensyncStats.EventReport.ClientAuthEvent; import sts.OpensyncStats.EventReport.ClientAuthEvent;
import sts.OpensyncStats.EventReport.ClientConnectEvent;
import sts.OpensyncStats.EventReport.ClientDisconnectEvent; import sts.OpensyncStats.EventReport.ClientDisconnectEvent;
import sts.OpensyncStats.EventReport.ClientFailureEvent;
import sts.OpensyncStats.EventReport.ClientFirstDataEvent;
import sts.OpensyncStats.EventReport.ClientIdEvent;
import sts.OpensyncStats.EventReport.ClientIpEvent; import sts.OpensyncStats.EventReport.ClientIpEvent;
import sts.OpensyncStats.EventReport.ClientTimeoutEvent;
import sts.OpensyncStats.EventReport.DhcpAckEvent;
import sts.OpensyncStats.EventReport.DhcpCommonData;
import sts.OpensyncStats.EventReport.DhcpDeclineEvent;
import sts.OpensyncStats.EventReport.DhcpDiscoverEvent;
import sts.OpensyncStats.EventReport.DhcpInformEvent;
import sts.OpensyncStats.EventReport.DhcpNakEvent;
import sts.OpensyncStats.EventReport.DhcpOfferEvent;
import sts.OpensyncStats.EventReport.DhcpRequestEvent;
import sts.OpensyncStats.EventReport.DhcpTransaction;
import sts.OpensyncStats.FrameType; import sts.OpensyncStats.FrameType;
import sts.OpensyncStats.RtpFlowStats; import sts.OpensyncStats.RtpFlowStats;
import sts.OpensyncStats.StreamingVideoServerDetected; import sts.OpensyncStats.StreamingVideoServerDetected;
@@ -66,13 +84,12 @@ public class RealtimeEventPublisher {
@Autowired @Autowired
private EquipmentServiceInterface equipmentServiceInterface; private EquipmentServiceInterface equipmentServiceInterface;
@Autowired @Autowired
private ProfileServiceInterface profileServiceInterface; private ProfileServiceInterface profileServiceInterface;
private static final Logger LOG = LoggerFactory.getLogger(RealtimeEventPublisher.class); private static final Logger LOG = LoggerFactory.getLogger(RealtimeEventPublisher.class);
void publishChannelHopEvents(int customerId, long equipmentId, long locationId, EventReport e) { void publishChannelHopEvents(int customerId, long equipmentId, long locationId, EventReport e) {
LOG.info("publishChannelHopEvents for customerId {} equipmentId {}"); LOG.info("publishChannelHopEvents for customerId {} equipmentId {}");
@@ -161,7 +178,94 @@ public class RealtimeEventPublisher {
} }
} }
void publishClientConnectSuccessEvent(int customerId, long equipmentId, long locationId, ClientConnectEvent clientConnectEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientConnectEvent, customerId,
equipmentId);
ClientConnectSuccessEvent clientEvent = new ClientConnectSuccessEvent(clientConnectEvent.getTimestampMs());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientConnectEvent.getStaMac()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
.getRadioTypeFromOpensyncStatsRadioBandType(clientConnectEvent.getBand()));
clientEvent.setSsid(clientConnectEvent.getSsid());
clientEvent.setSessionId(clientConnectEvent.getSessionId());
if (clientConnectEvent.hasFbtUsed()) {
clientEvent.setFbtUsed(clientConnectEvent.getFbtUsed());
}
if (clientConnectEvent.hasEvTimeBootupInUsAssoc()) {
clientEvent.setAssocTs(clientConnectEvent.getEvTimeBootupInUsAssoc());
}
if (clientConnectEvent.hasEvTimeBootupInUsAuth()) {
clientEvent.setAuthTs(clientConnectEvent.getEvTimeBootupInUsAuth());
}
if (clientConnectEvent.hasEvTimeBootupInUsEapol()) {
clientEvent.setEapolTs(clientConnectEvent.getEvTimeBootupInUsEapol());
}
if (clientConnectEvent.hasEvTimeBootupInUsFirstRx()) {
clientEvent.setFirstDataRxTs(clientConnectEvent.getEvTimeBootupInUsFirstRx());
}
if (clientConnectEvent.hasEvTimeBootupInUsFirstTx()) {
clientEvent.setFirstDataTxTs(clientConnectEvent.getEvTimeBootupInUsFirstTx());
}
if (clientConnectEvent.hasEvTimeBootupInUsIp()) {
clientEvent.setIpAcquisitionTs(clientConnectEvent.getEvTimeBootupInUsIp());
}
if (clientConnectEvent.hasEvTimeBootupInUsPortEnable()) {
clientEvent.setPortEnabledTs(clientConnectEvent.getEvTimeBootupInUsPortEnable());
}
if (clientConnectEvent.hasCltId()) {
clientEvent.setHostName(clientConnectEvent.getCltId());
}
if (clientConnectEvent.hasSecType()) {
clientEvent.setSecurityType(OvsdbToWlanCloudTypeMappingUtility
.getCloudSecurityTypeFromOpensyncStats(clientConnectEvent.getSecType()));
}
if (clientConnectEvent.hasAssocType()) {
clientEvent.setReassociation(clientConnectEvent.getAssocType().equals(AssocType.REASSOC));
}
if (clientConnectEvent.hasAssocRssi()) {
clientEvent.setAssocRSSI(clientConnectEvent.getAssocRssi());
}
if (clientConnectEvent.hasUsing11K()) {
clientEvent.setUsing11k(clientConnectEvent.getUsing11K());
}
if (clientConnectEvent.hasUsing11R()) {
clientEvent.setUsing11r(clientConnectEvent.getUsing11R());
}
if (clientConnectEvent.hasUsing11V()) {
clientEvent.setUsing11v(clientConnectEvent.getUsing11V());
}
if (clientConnectEvent.hasIpAddr()) {
try {
clientEvent.setIpAddr(InetAddress.getByAddress(clientConnectEvent.getIpAddr().toByteArray()));
} catch (UnknownHostException e1) {
LOG.error("Invalid Ip Address for client {}", clientConnectEvent.getIpAddr(), e1);
}
}
clientEvent.setEventTimestamp(clientConnectEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
void publishClientDisconnectEvent(int customerId, long equipmentId, long locationId, ClientDisconnectEvent clientDisconnectEvent) { void publishClientDisconnectEvent(int customerId, long equipmentId, long locationId, ClientDisconnectEvent clientDisconnectEvent) {
@@ -171,7 +275,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent(
clientDisconnectEvent.getTimestampMs()); clientDisconnectEvent.getTimestampMs());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientDisconnectEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientDisconnectEvent.getStaMac()));
clientEvent.setSessionId(Long.toUnsignedString( clientDisconnectEvent.getSessionId())); clientEvent.setSessionId(clientDisconnectEvent.getSessionId());
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
.getRadioTypeFromOpensyncStatsRadioBandType(clientDisconnectEvent.getBand())); .getRadioTypeFromOpensyncStatsRadioBandType(clientDisconnectEvent.getBand()));
clientEvent.setSsid(clientDisconnectEvent.getSsid()); clientEvent.setSsid(clientDisconnectEvent.getSsid());
@@ -212,13 +316,13 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
void publishClientAuthSystemEvent(int customerId, long equipmentId, long locationId, ClientAuthEvent clientAuthEvent) { void publishClientAuthSystemEvent(int customerId, long equipmentId, long locationId, ClientAuthEvent clientAuthEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAuthEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAuthEvent, customerId, equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent(
clientAuthEvent.getTimestampMs()); clientAuthEvent.getTimestampMs());
clientEvent.setSessionId(Long.toUnsignedString( clientAuthEvent.getSessionId())); clientEvent.setSessionId(clientAuthEvent.getSessionId());
clientEvent.setSsid(clientAuthEvent.getSsid()); clientEvent.setSsid(clientAuthEvent.getSsid());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientAuthEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientAuthEvent.getStaMac()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
@@ -236,14 +340,14 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
void publishClientAssocEvent(int customerId, long equipmentId, long locationId, ClientAssocEvent clientAssocEvent) { void publishClientAssocEvent(int customerId, long equipmentId, long locationId, ClientAssocEvent clientAssocEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAssocEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAssocEvent, customerId, equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent(
clientAssocEvent.getTimestampMs()); clientAssocEvent.getTimestampMs());
clientEvent.setSessionId(Long.toUnsignedString( clientAssocEvent.getSessionId())); clientEvent.setSessionId(clientAssocEvent.getSessionId());
clientEvent.setSsid(clientAssocEvent.getSsid()); clientEvent.setSsid(clientAssocEvent.getSsid());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientAssocEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientAssocEvent.getStaMac()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
@@ -276,7 +380,7 @@ public class RealtimeEventPublisher {
if (clientAssocEvent.hasUsing11V()) { if (clientAssocEvent.hasUsing11V()) {
clientEvent.setUsing11v(clientAssocEvent.getUsing11V()); clientEvent.setUsing11v(clientAssocEvent.getUsing11V());
} }
clientEvent.setEventTimestamp(clientAssocEvent.getTimestampMs()); clientEvent.setEventTimestamp(clientAssocEvent.getTimestampMs());
clientEvent.setCustomerId(customerId); clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId); clientEvent.setEquipmentId(equipmentId);
@@ -286,7 +390,82 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
void publishClientFailureEvent(int customerId, long equipmentId, long locationId, ClientFailureEvent clientFailureEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFailureEvent, customerId,
equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent(
clientFailureEvent.getTimestampMs());
clientEvent.setSessionId(clientFailureEvent.getSessionId());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientFailureEvent.getStaMac()));
clientEvent.setSsid(clientFailureEvent.getSsid());
if (clientFailureEvent.hasReasonStr()) {
clientEvent.setReasonString(clientFailureEvent.getReasonStr());
}
if (clientFailureEvent.hasReasonCode()) {
clientEvent.setReasonCode(WlanReasonCode.getById(clientFailureEvent.getReasonCode()));
}
clientEvent.setEventTimestamp(clientFailureEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
void publishClientFirstDataEvent(int customerId, long equipmentId, long locationId, ClientFirstDataEvent clientFirstDataEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFirstDataEvent, customerId,
equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent(
clientFirstDataEvent.getTimestampMs());
clientEvent.setSessionId(clientFirstDataEvent.getSessionId());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientFirstDataEvent.getStaMac()));
if (clientFirstDataEvent.hasFdataTxUpTsInUs()) {
clientEvent.setFirstDataSentTs(clientFirstDataEvent.getFdataTxUpTsInUs());
}
if (clientFirstDataEvent.hasFdataRxUpTsInUs()) {
clientEvent.setFirstDataRcvdTs(clientFirstDataEvent.getFdataRxUpTsInUs());
}
clientEvent.setEventTimestamp(clientFirstDataEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
void publishClientIdEvent(int customerId, long equipmentId, long locationId, ClientIdEvent clientIdEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIdEvent, customerId, equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent(
clientIdEvent.getTimestampMs());
clientEvent.setSessionId(clientIdEvent.getSessionId());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientIdEvent.getCltMac()));
if (clientIdEvent.hasCltId()) {
clientEvent.setUserId(clientIdEvent.getCltId());
}
clientEvent.setEventTimestamp(clientIdEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
void publishClientIpEvent(int customerId, long equipmentId, long locationId, ClientIpEvent clientIpEvent) { void publishClientIpEvent(int customerId, long equipmentId, long locationId, ClientIpEvent clientIpEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIpEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIpEvent, customerId, equipmentId);
@@ -294,16 +473,11 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent(
clientIpEvent.getTimestampMs()); clientIpEvent.getTimestampMs());
clientEvent.setSessionId(Long.toUnsignedString( clientIpEvent.getSessionId())); clientEvent.setSessionId(clientIpEvent.getSessionId());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientIpEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientIpEvent.getStaMac()));
if (clientIpEvent.hasIpAddr()) { if (clientIpEvent.hasIpAddr()) {
try { clientEvent.setIpAddr(clientIpEvent.getIpAddr().toByteArray());
clientEvent.setIpAddr(InetAddress.getByAddress(clientIpEvent.getIpAddr().toByteArray()));
} catch (UnknownHostException e1) {
LOG.error("Invalid Client IP Address for equipmentId {}, clientIpEvent {}", equipmentId, clientIpEvent);
}
} }
clientEvent.setEventTimestamp(clientIpEvent.getTimestampMs()); clientEvent.setEventTimestamp(clientIpEvent.getTimestampMs());
clientEvent.setCustomerId(customerId); clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId); clientEvent.setEquipmentId(equipmentId);
@@ -312,7 +486,318 @@ public class RealtimeEventPublisher {
LOG.info("publishing client event {} to cloud", clientEvent); LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
void publishClientTimeoutEvent(int customerId, long equipmentId, long locationId, ClientTimeoutEvent clientTimeoutEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientTimeoutEvent, customerId,
equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent(
clientTimeoutEvent.getTimestampMs());
clientEvent.setSessionId(clientTimeoutEvent.getSessionId());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientTimeoutEvent.getStaMac()));
if (clientTimeoutEvent.hasRCode()) {
clientEvent.setTimeoutReason(clientTimeoutEvent.getRCode().equals(CTReasonType.CTR_IDLE_TOO_LONG)
? ClientTimeoutReason.IdleTooLong
: ClientTimeoutReason.FailedProbe);
}
if (clientTimeoutEvent.hasLastRcvUpTsInUs()) {
clientEvent.setLastRecvTime(clientTimeoutEvent.getLastRcvUpTsInUs());
}
if (clientTimeoutEvent.hasLastSentUpTsInUs()) {
clientEvent.setLastSentTime(clientTimeoutEvent.getLastSentUpTsInUs());
}
clientEvent.setEventTimestamp(clientTimeoutEvent.getTimestampMs());
clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent);
}
void publishDhcpTransactionEvents(int customerId, long equipmentId, long locationId, List<DhcpTransaction> dhcpTransactionList) {
LOG.info("Publish Dhcp Transaction Events for customer {} equipmentId {}", customerId, equipmentId);
List<SystemEvent> dhcpEventsList = new ArrayList<>();
for (DhcpTransaction dhcpTransaction : dhcpTransactionList) {
for (DhcpAckEvent ackEvent : dhcpTransaction.getDhcpAckEventList()) {
LOG.debug("DhcpAckEvent {}", ackEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpAckEvent cloudDhcpAck = new com.telecominfraproject.wlan.systemevent.equipment.DhcpAckEvent();
cloudDhcpAck.setCustomerId(customerId);
cloudDhcpAck.setEquipmentId(equipmentId);
cloudDhcpAck.setLocationId(locationId);
if (ackEvent.hasDhcpCommonData()) {
cloudDhcpAck = (com.telecominfraproject.wlan.systemevent.equipment.DhcpAckEvent) getDhcpCommonDataForEvent(
cloudDhcpAck, ackEvent.getDhcpCommonData());
} else {
cloudDhcpAck.setxId(dhcpTransaction.getXId());
}
if (ackEvent.hasGatewayIp()) {
try {
cloudDhcpAck.setGatewayIp(InetAddress.getByAddress(ackEvent.getGatewayIp().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid GatewayIP", e);
}
}
if (ackEvent.hasLeaseTime()) {
cloudDhcpAck.setLeaseTime(ackEvent.getLeaseTime());
}
if (ackEvent.hasPrimaryDns()) {
try {
cloudDhcpAck.setPrimaryDns(InetAddress.getByAddress(ackEvent.getPrimaryDns().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid PrimaryDNS", e);
}
}
if (ackEvent.hasSecondaryDns()) {
try {
cloudDhcpAck
.setSecondaryDns(InetAddress.getByAddress(ackEvent.getSecondaryDns().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid SecondaryDNS", e);
}
}
if (ackEvent.hasRebindingTime()) {
cloudDhcpAck.setRebindingTime(ackEvent.getRebindingTime());
}
if (ackEvent.hasRenewalTime()) {
cloudDhcpAck.setRenewalTime(ackEvent.getRenewalTime());
}
if (ackEvent.hasSubnetMask()) {
try {
cloudDhcpAck.setSubnetMask(InetAddress.getByAddress(ackEvent.getSubnetMask().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid SubnetMask", e);
}
}
if (ackEvent.hasTimeOffset()) {
cloudDhcpAck.setTimeOffset(ackEvent.getTimeOffset());
}
LOG.debug("Cloud DhcpAckEvent {}", cloudDhcpAck);
dhcpEventsList.add(cloudDhcpAck);
}
for (DhcpNakEvent nakEvent : dhcpTransaction.getDhcpNakEventList()) {
LOG.debug("DhcpNakEvent {}", nakEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpNakEvent cloudDhcpNak = new com.telecominfraproject.wlan.systemevent.equipment.DhcpNakEvent();
cloudDhcpNak.setCustomerId(customerId);
cloudDhcpNak.setEquipmentId(equipmentId);
cloudDhcpNak.setLocationId(locationId);
if (nakEvent.hasDhcpCommonData()) {
cloudDhcpNak = (com.telecominfraproject.wlan.systemevent.equipment.DhcpNakEvent) getDhcpCommonDataForEvent(
cloudDhcpNak, nakEvent.getDhcpCommonData());
} else {
cloudDhcpNak.setxId(dhcpTransaction.getXId());
}
if (nakEvent.hasFromInternal()) {
cloudDhcpNak.setFromInternal(nakEvent.getFromInternal());
}
LOG.debug("Cloud DhcpNakEvent {}", cloudDhcpNak);
dhcpEventsList.add(cloudDhcpNak);
}
for (DhcpOfferEvent offerEvent : dhcpTransaction.getDhcpOfferEventList()) {
LOG.debug("DhcpOfferEvent {}", offerEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpOfferEvent cloudDhcpOffer = new com.telecominfraproject.wlan.systemevent.equipment.DhcpOfferEvent();
cloudDhcpOffer.setCustomerId(customerId);
cloudDhcpOffer.setEquipmentId(equipmentId);
cloudDhcpOffer.setLocationId(locationId);
if (offerEvent.hasDhcpCommonData()) {
cloudDhcpOffer = (com.telecominfraproject.wlan.systemevent.equipment.DhcpOfferEvent) getDhcpCommonDataForEvent(
cloudDhcpOffer, offerEvent.getDhcpCommonData());
} else {
cloudDhcpOffer.setxId(dhcpTransaction.getXId());
}
if (offerEvent.hasFromInternal()) {
cloudDhcpOffer.setFromInternal(offerEvent.getFromInternal());
}
dhcpEventsList.add(cloudDhcpOffer);
}
for (DhcpInformEvent informEvent : dhcpTransaction.getDhcpInformEventList()) {
LOG.debug("DhcpInformEvent {}", informEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpInformEvent cloudDhcpInform = new com.telecominfraproject.wlan.systemevent.equipment.DhcpInformEvent();
cloudDhcpInform.setCustomerId(customerId);
cloudDhcpInform.setEquipmentId(equipmentId);
cloudDhcpInform.setLocationId(locationId);
if (informEvent.hasDhcpCommonData()) {
cloudDhcpInform = (com.telecominfraproject.wlan.systemevent.equipment.DhcpInformEvent) getDhcpCommonDataForEvent(
cloudDhcpInform, informEvent.getDhcpCommonData());
} else {
cloudDhcpInform.setxId(dhcpTransaction.getXId());
}
dhcpEventsList.add(cloudDhcpInform);
}
for (DhcpDeclineEvent declineEvent : dhcpTransaction.getDhcpDeclineEventList()) {
LOG.debug("DhcpDeclineEvent {}", declineEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpDeclineEvent cloudDhcpDecline = new com.telecominfraproject.wlan.systemevent.equipment.DhcpDeclineEvent();
cloudDhcpDecline.setCustomerId(customerId);
cloudDhcpDecline.setEquipmentId(equipmentId);
cloudDhcpDecline.setLocationId(locationId);
if (declineEvent.hasDhcpCommonData()) {
cloudDhcpDecline = (com.telecominfraproject.wlan.systemevent.equipment.DhcpDeclineEvent) getDhcpCommonDataForEvent(
cloudDhcpDecline, declineEvent.getDhcpCommonData());
} else {
cloudDhcpDecline.setxId(dhcpTransaction.getXId());
}
LOG.debug("Cloud DhcpDeclineEvent {}", cloudDhcpDecline);
dhcpEventsList.add(cloudDhcpDecline);
}
for (DhcpRequestEvent requestEvent : dhcpTransaction.getDhcpRequestEventList()) {
LOG.debug("DhcpRequestEvent {}", requestEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpRequestEvent cloudDhcpRequest = new com.telecominfraproject.wlan.systemevent.equipment.DhcpRequestEvent();
cloudDhcpRequest.setCustomerId(customerId);
cloudDhcpRequest.setEquipmentId(equipmentId);
cloudDhcpRequest.setLocationId(locationId);
if (requestEvent.hasDhcpCommonData()) {
cloudDhcpRequest = (com.telecominfraproject.wlan.systemevent.equipment.DhcpRequestEvent) getDhcpCommonDataForEvent(
cloudDhcpRequest, requestEvent.getDhcpCommonData());
} else {
cloudDhcpRequest.setxId(dhcpTransaction.getXId());
}
if (requestEvent.hasHostname()) {
cloudDhcpRequest.setHostName(requestEvent.getHostname());
}
LOG.debug("Cloud DhcpRequestEvent {}", cloudDhcpRequest);
dhcpEventsList.add(cloudDhcpRequest);
}
for (DhcpDiscoverEvent discoverEvent : dhcpTransaction.getDhcpDiscoverEventList()) {
LOG.debug("DhcpDiscoverEvent {}", discoverEvent);
com.telecominfraproject.wlan.systemevent.equipment.DhcpDiscoverEvent cloudDhcpDiscover = new com.telecominfraproject.wlan.systemevent.equipment.DhcpDiscoverEvent();
cloudDhcpDiscover.setCustomerId(customerId);
cloudDhcpDiscover.setEquipmentId(equipmentId);
cloudDhcpDiscover.setLocationId(locationId);
if (discoverEvent.hasDhcpCommonData()) {
cloudDhcpDiscover = (com.telecominfraproject.wlan.systemevent.equipment.DhcpDiscoverEvent) getDhcpCommonDataForEvent(
cloudDhcpDiscover, discoverEvent.getDhcpCommonData());
} else {
cloudDhcpDiscover.setxId(dhcpTransaction.getXId());
}
if (discoverEvent.hasHostname()) {
cloudDhcpDiscover.setHostName(discoverEvent.getHostname());
}
LOG.debug("Cloud DhcpDiscoverEvent {}", cloudDhcpDiscover);
dhcpEventsList.add(cloudDhcpDiscover);
}
}
if (dhcpEventsList.size() > 0) {
LOG.info("Publishing DhcpEvents {}", dhcpEventsList);
cloudEventDispatcherInterface.publishEventsBulk(dhcpEventsList);
}
}
BaseDhcpEvent getDhcpCommonDataForEvent(BaseDhcpEvent cloudDhcpEvent, DhcpCommonData dhcpCommonData) {
if (dhcpCommonData.hasXId()) {
cloudDhcpEvent.setxId(dhcpCommonData.getXId());
}
if (dhcpCommonData.hasVlanId()) {
cloudDhcpEvent.setVlanId(dhcpCommonData.getVlanId());
}
if (dhcpCommonData.hasDeviceMacAddress()) {
try {
cloudDhcpEvent.setClientMacAddress(MacAddress.valueOf(dhcpCommonData.getDeviceMacAddress()));
} catch (Exception e) {
LOG.error("Could not parse device_mac_address from DhcpCommonData ", dhcpCommonData, e);
}
}
if (dhcpCommonData.hasDhcpServerIp()) {
try {
cloudDhcpEvent
.setDhcpServerIp(InetAddress.getByAddress(dhcpCommonData.getDhcpServerIp().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid Dhcp Server IP", e);
}
}
if (dhcpCommonData.hasClientIp()) {
try {
cloudDhcpEvent.setClientIp(InetAddress.getByAddress(dhcpCommonData.getClientIp().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid Client IP", e);
}
}
if (dhcpCommonData.hasRelayIp()) {
try {
cloudDhcpEvent.setRelayIp(InetAddress.getByAddress(dhcpCommonData.getRelayIp().toByteArray()));
} catch (UnknownHostException e) {
LOG.error("Invalid Relay IP", e);
}
}
cloudDhcpEvent.setEventTimestamp(dhcpCommonData.getTimestampMs());
return cloudDhcpEvent;
}
void publishSipCallEvents(int customerId, long equipmentId, long locationId, List<VideoVoiceReport> sipCallReportList) { void publishSipCallEvents(int customerId, long equipmentId, long locationId, List<VideoVoiceReport> sipCallReportList) {
// only in case it is not there, we will just use the time when we // only in case it is not there, we will just use the time when we
// received the report/event // received the report/event
@@ -364,7 +849,7 @@ public class RealtimeEventPublisher {
cloudSipCallReportEvent.setEventType(RealTimeEventType.SipCallReport); cloudSipCallReportEvent.setEventType(RealTimeEventType.SipCallReport);
cloudSipCallReportEvent.setSipCallId(callReport.getWifiSessionId()); cloudSipCallReportEvent.setSipCallId(callReport.getWifiSessionId());
cloudSipCallReportEvent.setAssociationId(Long.toUnsignedString( callReport.getSessionId())); cloudSipCallReportEvent.setAssociationId(callReport.getSessionId());
if (callReport.hasReason()) { if (callReport.hasReason()) {
cloudSipCallReportEvent.setReportReason(getCallReportReason(callReport.getReason())); cloudSipCallReportEvent.setReportReason(getCallReportReason(callReport.getReason()));
@@ -430,11 +915,11 @@ public class RealtimeEventPublisher {
} }
if (apCallStart.hasSessionId()) { if (apCallStart.hasSessionId()) {
cloudSipCallStartEvent.setAssociationId(Long.toUnsignedString( apCallStart.getSessionId())); cloudSipCallStartEvent.setAssociationId(apCallStart.getSessionId());
} }
if (apCallStart.hasWifiSessionId()) { if (apCallStart.hasWifiSessionId()) {
cloudSipCallStartEvent.setAssociationId(Long.toUnsignedString( apCallStart.getWifiSessionId())); cloudSipCallStartEvent.setAssociationId(apCallStart.getWifiSessionId());
} }
if (apCallStart.getCodecsCount() > 0) { if (apCallStart.getCodecsCount() > 0) {
@@ -494,7 +979,7 @@ public class RealtimeEventPublisher {
if (apCallStop.hasSessionId()) { if (apCallStop.hasSessionId()) {
cloudSipCallStopEvent.setAssociationId(Long.toUnsignedString( apCallStop.getSessionId())); cloudSipCallStopEvent.setAssociationId(apCallStop.getSessionId());
} }
@@ -558,11 +1043,11 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoServer.hasSessionId()) { if (apStreamVideoServer.hasSessionId()) {
rtsStartEvent.setSessionId(Long.toUnsignedString( apStreamVideoServer.getSessionId())); rtsStartEvent.setSessionId(apStreamVideoServer.getSessionId());
} }
if (apStreamVideoServer.hasVideoSessionId()) { if (apStreamVideoServer.hasVideoSessionId()) {
rtsStartEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoServer.getVideoSessionId())); rtsStartEvent.setVideoSessionId(apStreamVideoServer.getVideoSessionId());
} }
eventsList.add(rtsStartEvent); eventsList.add(rtsStartEvent);
@@ -682,7 +1167,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoSessionStart.hasSessionId()) { if (apStreamVideoSessionStart.hasSessionId()) {
rtsStartSessionEvent.setSessionId(Long.toUnsignedString( apStreamVideoSessionStart.getSessionId())); rtsStartSessionEvent.setSessionId(apStreamVideoSessionStart.getSessionId());
} }
@@ -693,7 +1178,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoSessionStart.hasVideoSessionId()) { if (apStreamVideoSessionStart.hasVideoSessionId()) {
rtsStartSessionEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoSessionStart.getVideoSessionId())); rtsStartSessionEvent.setVideoSessionId(apStreamVideoSessionStart.getVideoSessionId());
} }
eventsList.add(rtsStartSessionEvent); eventsList.add(rtsStartSessionEvent);
} }
@@ -723,7 +1208,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoStop.hasSessionId()) { if (apStreamVideoStop.hasSessionId()) {
rtsStopEvent.setSessionId(Long.toUnsignedString( apStreamVideoStop.getSessionId())); rtsStopEvent.setSessionId(apStreamVideoStop.getSessionId());
} }
if (apStreamVideoStop.hasStreamingVideoType()) { if (apStreamVideoStop.hasStreamingVideoType()) {
@@ -738,7 +1223,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoStop.hasVideoSessionId()) { if (apStreamVideoStop.hasVideoSessionId()) {
rtsStopEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoStop.getVideoSessionId())); rtsStopEvent.setVideoSessionId(apStreamVideoStop.getVideoSessionId());
} }
eventsList.add(rtsStopEvent); eventsList.add(rtsStopEvent);

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.external.integration; package com.telecominfraproject.wlan.opensync.external.integration;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@@ -50,8 +49,6 @@ import com.telecominfraproject.wlan.core.model.entity.CountryCode;
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType; import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.customer.models.Customer; import com.telecominfraproject.wlan.customer.models.Customer;
import com.telecominfraproject.wlan.customer.models.CustomerDetails; import com.telecominfraproject.wlan.customer.models.CustomerDetails;
import com.telecominfraproject.wlan.customer.models.EquipmentAutoProvisioningSettings; import com.telecominfraproject.wlan.customer.models.EquipmentAutoProvisioningSettings;
@@ -98,9 +95,10 @@ import sts.OpensyncStats.RadioBandType;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@ActiveProfiles(profiles = {"integration_test",}) @ActiveProfiles(profiles = { "integration_test", })
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationCloudTest.class) @SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationCloudTest.class)
@Import(value = {AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class, OpensyncExternalIntegrationCloudTest.Config.class, @Import(value = { AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class,
OpensyncExternalIntegrationCloudTest.Config.class,
}) })
public class OpensyncExternalIntegrationCloudTest { public class OpensyncExternalIntegrationCloudTest {
@@ -135,6 +133,7 @@ public class OpensyncExternalIntegrationCloudTest {
@Autowired @Autowired
OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud; OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud;
MockitoSession mockito; MockitoSession mockito;
@Configuration @Configuration
@@ -171,12 +170,10 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults(); location.setDetails(LocationDetails.createWithDefaults());
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.getOrNull(Mockito.anyLong())).thenReturn(location);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
CustomerDetails customerDetails = new CustomerDetails(); CustomerDetails customerDetails = new CustomerDetails();
@@ -195,21 +192,25 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId())); apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId()));
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class)))
.thenAnswer(i -> i.getArguments()[0]);
// .thenReturn(ssidProfile); // .thenReturn(ssidProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class)))
.thenAnswer(i -> i.getArguments()[0]);
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE))) Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
.thenReturn(fwStatus); ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings()); Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting())
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord); Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt()))
.thenReturn(fwTrackRecord);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(2); equipment.setCustomerId(2);
@@ -221,18 +222,24 @@ public class OpensyncExternalIntegrationCloudTest {
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(equipment); Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class)))
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); .thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class)))
.thenAnswer(i -> i.getArguments()[0]);
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);
opensyncExternalIntegrationCloud.apConnected("Test_Client_21P10C68818122", createConnectNodeInfo()); opensyncExternalIntegrationCloud.apConnected("Test_Client_21P10C68818122", createConnectNodeInfo());
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting(); Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verify(locationServiceInterface).getOrNull(ArgumentMatchers.anyLong()); Mockito.verifyNoInteractions(locationServiceInterface);
} }
@@ -241,12 +248,11 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults(); location.setDetails(LocationDetails.createWithDefaults());
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.getOrNull(8L)).thenReturn(location);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
@@ -258,7 +264,7 @@ public class OpensyncExternalIntegrationCloudTest {
customer.setDetails(customerDetails); customer.setDetails(customerDetails);
Mockito.when(customerServiceInterface.getOrNull(ArgumentMatchers.anyInt())).thenReturn(customer); Mockito.when(customerServiceInterface.getOrNull(ArgumentMatchers.anyInt())).thenReturn(customer);
Profile rfProfile = new Profile(); Profile rfProfile = new Profile();
rfProfile.setId(1); rfProfile.setId(1);
rfProfile.setName("testRfProfile"); rfProfile.setName("testRfProfile");
@@ -273,20 +279,21 @@ public class OpensyncExternalIntegrationCloudTest {
Profile ssidProfile = new Profile(); Profile ssidProfile = new Profile();
ssidProfile.setId(2); ssidProfile.setId(2);
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
Set<Long> childProfileIds = new HashSet<>(); Set<Long> childProfileIds = new HashSet<>();
childProfileIds.add(rfProfile.getId()); childProfileIds.add(rfProfile.getId());
childProfileIds.add(ssidProfile.getId()); childProfileIds.add(ssidProfile.getId());
apProfile.setChildProfileIds(childProfileIds); apProfile.setChildProfileIds(childProfileIds);
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile).thenReturn(ssidProfile).thenReturn(rfProfile); Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile)
.thenReturn(ssidProfile).thenReturn(rfProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile); Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile);
List<Profile> profileList = new ArrayList<>(); List<Profile> profileList = new ArrayList<>();
profileList.add(apProfile); profileList.add(apProfile);
profileList.add(rfProfile); profileList.add(rfProfile);
profileList.add(ssidProfile); profileList.add(ssidProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList); Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
@@ -300,21 +307,27 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class)))
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); .thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(null); Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class)))
.thenAnswer(i -> i.getArguments()[0]);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(null);
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE))) Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
.thenReturn(fwStatus); ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings()); Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting())
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord); Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt()))
.thenReturn(fwTrackRecord);
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
@@ -326,7 +339,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.verify(customerServiceInterface).getOrNull(ArgumentMatchers.anyInt()); Mockito.verify(customerServiceInterface).getOrNull(ArgumentMatchers.anyInt());
Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull("Test_Client_21P10C68818122"); Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull("Test_Client_21P10C68818122");
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting(); Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verify(locationServiceInterface, Mockito.times(2)).getOrNull(ArgumentMatchers.anyLong()); Mockito.verify(locationServiceInterface).get(ArgumentMatchers.anyLong());
} }
@@ -339,19 +352,18 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId())); apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId()));
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class)))
.thenAnswer(i -> i.getArguments()[0]);
// .thenReturn(ssidProfile); // .thenReturn(ssidProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class)))
.thenAnswer(i -> i.getArguments()[0]);
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
LocationDetails details = LocationDetails.createWithDefaults(); location.setDetails(LocationDetails.createWithDefaults());
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(2); equipment.setCustomerId(2);
@@ -363,20 +375,26 @@ public class OpensyncExternalIntegrationCloudTest {
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE))) Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
.thenReturn(fwStatus); ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings()); Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting())
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord); Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt()))
.thenReturn(fwTrackRecord);
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class)))
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]); .thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(equipment); Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class)))
.thenAnswer(i -> i.getArguments()[0]);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(equipment);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
@@ -422,7 +440,8 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
List<Profile> profileWithChildren = ImmutableList.of(apProfile, ssidProfile); List<Profile> profileWithChildren = ImmutableList.of(apProfile, ssidProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileWithChildren); Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong()))
.thenReturn(profileWithChildren);
assertNotNull(opensyncExternalIntegrationCloud.getApConfig("Test_Client_21P10C68818122")); assertNotNull(opensyncExternalIntegrationCloud.getApConfig("Test_Client_21P10C68818122"));
@@ -448,7 +467,8 @@ public class OpensyncExternalIntegrationCloudTest {
@Test @Test
public void testProcessMqttMessageStringReport() { public void testProcessMqttMessageStringReport() {
Report report = Report.newBuilder().setNodeID("21P10C68818122").addAllClients(getOpensyncStatsClientReportsList()) Report report = Report.newBuilder().setNodeID("21P10C68818122")
.addAllClients(getOpensyncStatsClientReportsList())
.addAllEventReport(getOpensyncStatsEventReportsList()).build(); .addAllEventReport(getOpensyncStatsEventReportsList()).build();
String topic = "/ap/Test_Client_21P10C68818122/opensync"; String topic = "/ap/Test_Client_21P10C68818122/opensync";
@@ -461,8 +481,8 @@ public class OpensyncExternalIntegrationCloudTest {
activeBssidsDetails.setActiveBSSIDs(getActiveBssidList()); activeBssidsDetails.setActiveBSSIDs(getActiveBssidList());
bssidStatus.setDetails(activeBssidsDetails); bssidStatus.setDetails(activeBssidsDetails);
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))) Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
.thenReturn(bssidStatus); ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))).thenReturn(bssidStatus);
Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus); Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client(); com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
@@ -471,10 +491,12 @@ public class OpensyncExternalIntegrationCloudTest {
com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client(); com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69")); clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
clientInstance2.setDetails(new ClientInfoDetails()); clientInstance2.setDetails(new ClientInfoDetails());
Mockito.when(clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class))).thenReturn(clientInstance) Mockito.when(
.thenReturn(clientInstance2); clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class)))
Mockito.when(clientServiceInterface.update(ArgumentMatchers.any(com.telecominfraproject.wlan.client.models.Client.class))).thenReturn(clientInstance) .thenReturn(clientInstance).thenReturn(clientInstance2);
.thenReturn(clientInstance2); Mockito.when(clientServiceInterface
.update(ArgumentMatchers.any(com.telecominfraproject.wlan.client.models.Client.class)))
.thenReturn(clientInstance).thenReturn(clientInstance2);
ClientSession clientSession = new ClientSession(); ClientSession clientSession = new ClientSession();
clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D")); clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
@@ -482,10 +504,16 @@ public class OpensyncExternalIntegrationCloudTest {
ClientSession clientSession2 = new ClientSession(); ClientSession clientSession2 = new ClientSession();
clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69")); clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
clientSession2.setDetails(new ClientSessionDetails()); clientSession2.setDetails(new ClientSessionDetails());
Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.any(MacAddress.class))) Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
Mockito.when(clientServiceInterface.updateSession(ArgumentMatchers.any(ClientSession.class)))
.thenReturn(clientSession).thenReturn(clientSession2); .thenReturn(clientSession).thenReturn(clientSession2);
Mockito.when(clientServiceInterface.updateSession(ArgumentMatchers.any(ClientSession.class))).thenReturn(clientSession).thenReturn(clientSession2); opensyncExternalIntegrationCloud.processMqttMessage(topic, report);
Mockito.verify(opensyncExternalIntegrationMqttProcessor, Mockito.times(1)).processMqttMessage(topic, report);
} }
@Ignore @Ignore
@@ -553,10 +581,10 @@ public class OpensyncExternalIntegrationCloudTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(2); equipment.setCustomerId(1);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP); equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId); equipment.setInventoryId(apId);
equipment.setProfileId(1); equipment.setProfileId(1);
@@ -565,7 +593,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.get(equipment.getId())).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(equipment.getId())).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment);
Profile rfProfile = new Profile(); Profile rfProfile = new Profile();
rfProfile.setName("testRfProfile"); rfProfile.setName("testRfProfile");
rfProfile.setId(2); rfProfile.setId(2);
@@ -573,28 +601,30 @@ public class OpensyncExternalIntegrationCloudTest {
rfProfile.setProfileType(ProfileType.rf); rfProfile.setProfileType(ProfileType.rf);
Set<Long> childProfileIds = new HashSet<>(); Set<Long> childProfileIds = new HashSet<>();
childProfileIds.add(rfProfile.getId()); childProfileIds.add(rfProfile.getId());
Profile apProfile = new Profile(); Profile apProfile = new Profile();
apProfile.setName("testApProfile"); apProfile.setName("testApProfile");
apProfile.setId(1); apProfile.setId(1);
apProfile.setProfileType(ProfileType.equipment_ap); apProfile.setProfileType(ProfileType.equipment_ap);
apProfile.setChildProfileIds(childProfileIds); apProfile.setChildProfileIds(childProfileIds);
List<Profile> profileList = new ArrayList<>(); List<Profile> profileList = new ArrayList<>();
profileList.add(apProfile); profileList.add(apProfile);
profileList.add(rfProfile); profileList.add(rfProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList); Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud.wifiVIFStateDbTableUpdate(ImmutableList.of(vifState1, vifState2, vifState3), apId); opensyncExternalIntegrationCloud.wifiVIFStateDbTableUpdate(ImmutableList.of(vifState1, vifState2, vifState3),
apId);
Mockito.verify(session).getCustomerId();
Mockito.verify(session).getEquipmentId(); Mockito.verify(session).getEquipmentId();
Mockito.verify(ovsdbSessionMapInterface).getSession(apId); Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
Mockito.verify(equipmentServiceInterface).getOrNull(1L); Mockito.verify(equipmentServiceInterface).getOrNull(1L);
Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS);
Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS);
Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS); Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS);
Mockito.verify(statusServiceInterface).update(clientStatus); Mockito.verify(statusServiceInterface).update(clientStatus);
@@ -626,7 +656,8 @@ public class OpensyncExternalIntegrationCloudTest {
radioState3.setChannel(149); radioState3.setChannel(149);
radioState3.setVifStates(ImmutableSet.of(new Uuid(UUID.randomUUID()))); radioState3.setVifStates(ImmutableSet.of(new Uuid(UUID.randomUUID())));
radioState3.setFreqBand(RadioType.is5GHzL); radioState3.setFreqBand(RadioType.is5GHzL);
radioState3.setAllowedChannels(ImmutableSet.of(00, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165)); radioState3.setAllowedChannels(
ImmutableSet.of(00, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165));
radioState3.setTxPower(32); radioState3.setTxPower(32);
radioState3.setEnabled(true); radioState3.setEnabled(true);
radioState3.setCountry("CA"); radioState3.setCountry("CA");
@@ -649,7 +680,7 @@ public class OpensyncExternalIntegrationCloudTest {
protocolStatus.setStatusDataType(StatusDataType.PROTOCOL); protocolStatus.setStatusDataType(StatusDataType.PROTOCOL);
Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus); Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus);
Status channelStatus = new Status(); Status channelStatus = new Status();
channelStatus.setCustomerId(2); channelStatus.setCustomerId(2);
channelStatus.setEquipmentId(1L); channelStatus.setEquipmentId(1L);
@@ -687,18 +718,20 @@ public class OpensyncExternalIntegrationCloudTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud.wifiRadioStatusDbTableUpdate(ImmutableList.of(radioState1, radioState2, radioState3), apId); opensyncExternalIntegrationCloud
.wifiRadioStatusDbTableUpdate(ImmutableList.of(radioState1, radioState2, radioState3), apId);
Mockito.verify(session).getCustomerId();
Mockito.verify(session).getEquipmentId(); Mockito.verify(session).getEquipmentId();
Mockito.verify(ovsdbSessionMapInterface).getSession(apId); Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
Mockito.verify(equipmentServiceInterface, Mockito.times(1)).getByInventoryIdOrNull(apId); Mockito.verify(equipmentServiceInterface, Mockito.times(1)).getByInventoryIdOrNull(apId);
Mockito.verify(statusServiceInterface, Mockito.times(1)).getOrNull(1, 1L, StatusDataType.RADIO_CHANNEL);
Mockito.verify(statusServiceInterface, Mockito.times(3)).getOrNull(1, 1L, StatusDataType.PROTOCOL); Mockito.verify(statusServiceInterface, Mockito.times(3)).getOrNull(2, 1L, StatusDataType.PROTOCOL);
Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus); Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus);
} }
@@ -720,23 +753,6 @@ public class OpensyncExternalIntegrationCloudTest {
@Test @Test
public void testWifiVIFStateDbTableDelete() { public void testWifiVIFStateDbTableDelete() {
String apId = "Test_Client_21P10C68818122";
Equipment equipment = new Equipment();
equipment.setCustomerId(2);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId);
equipment.setProfileId(1);
equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(apId)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
OvsdbSession session = new OvsdbSession();
session.setApId(apId);
session.setEquipmentId(1L);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
Status bssidStatus = new Status(); Status bssidStatus = new Status();
bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS); bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS);
@@ -746,36 +762,16 @@ public class OpensyncExternalIntegrationCloudTest {
activeBssidsDetails.setActiveBSSIDs(getActiveBssidList()); activeBssidsDetails.setActiveBSSIDs(getActiveBssidList());
bssidStatus.setDetails(activeBssidsDetails); bssidStatus.setDetails(activeBssidsDetails);
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))) Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(),
.thenReturn(bssidStatus); ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))).thenReturn(bssidStatus);
PaginationResponse<ClientSession> pr = Mockito.mock(PaginationResponse.class,Mockito.RETURNS_MOCKS);
Mockito.when(clientServiceInterface.getSessionsForCustomer(Mockito.anyInt(), Mockito.anySet(),
Mockito.anySet(), Mockito.isNull(), Mockito.isNull(), Mockito.any())).thenReturn(pr);
opensyncExternalIntegrationCloud.wifiVIFStateDbTableDelete(ImmutableList.of(new OpensyncAPVIFState()), "apId");
opensyncExternalIntegrationCloud.wifiVIFStateDbTableDelete(ImmutableList.of(new OpensyncAPVIFState()), "Test_Client_21P10C68818122");
} }
@Test @Test
public void testWifiAssociatedClientsDbTableDelete() { public void testWifiAssociatedClientsDbTableDelete() {
String apId = "Test_Client_21P10C68818122";
Equipment equipment = new Equipment(); opensyncExternalIntegrationCloud.wifiAssociatedClientsDbTableDelete("7C:AB:60:E6:EA:4D", "apId");
equipment.setCustomerId(2);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId);
equipment.setProfileId(1);
equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(apId)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
OvsdbSession session = new OvsdbSession();
session.setApId(apId);
session.setEquipmentId(1L);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud.wifiAssociatedClientsDbTableDelete("7C:AB:60:E6:EA:4D", "Test_Client_21P10C68818122");
} }
// Helper methods // Helper methods
@@ -803,9 +799,11 @@ public class OpensyncExternalIntegrationCloudTest {
return bssidList; return bssidList;
} }
private List<EventReport> getOpensyncStatsEventReportsList() { private List<EventReport> getOpensyncStatsEventReportsList() {
sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent.getDefaultInstance().toBuilder(); sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent
.getDefaultInstance().toBuilder();
clientAssocBuilder.setAssocType(AssocType.ASSOC); clientAssocBuilder.setAssocType(AssocType.ASSOC);
clientAssocBuilder.setBand(RadioBandType.BAND5GU); clientAssocBuilder.setBand(RadioBandType.BAND5GU);
clientAssocBuilder.setRssi(-65); clientAssocBuilder.setRssi(-65);
@@ -833,26 +831,29 @@ public class OpensyncExternalIntegrationCloudTest {
eventReportList.add(eventReportBuilder.build()); eventReportList.add(eventReportBuilder.build());
return eventReportList; return eventReportList;
} }
private List<ClientReport> getOpensyncStatsClientReportsList() { private List<ClientReport> getOpensyncStatsClientReportsList() {
int rssi = Long.valueOf(4294967239L).intValue(); int rssi = Long.valueOf(4294967239L).intValue();
Client.Stats clientStats = Client.Stats.getDefaultInstance().toBuilder().setRssi(rssi).setRxBytes(225554786).setRxRate(24000.0).setTxBytes(1208133026) Client.Stats clientStats = Client.Stats.getDefaultInstance().toBuilder().setRssi(rssi).setRxBytes(225554786)
.setTxRate(433300.0).setRssi(758722570).setRxFrames(10000).setTxFrames(10000).setTxRate(24000.0).build(); .setRxRate(24000.0).setTxBytes(1208133026).setTxRate(433300.0).setRssi(758722570).setRxFrames(10000)
Client client2g = Client.getDefaultInstance().toBuilder().setMacAddress("7C:AB:60:E6:EA:4D").setSsid("ssid-1").setConnected(true).setDurationMs(59977) .setTxFrames(10000).setTxRate(24000.0).build();
.setStats(clientStats).build(); Client client2g = Client.getDefaultInstance().toBuilder().setMacAddress("7C:AB:60:E6:EA:4D").setSsid("ssid-1")
Client client5gu = Client.getDefaultInstance().toBuilder().setMacAddress("C0:9A:D0:76:A9:69").setSsid("ssid-3").setConnected(true).setDurationMs(298127) .setConnected(true).setDurationMs(59977).setStats(clientStats).build();
.setStats(clientStats).build(); Client client5gu = Client.getDefaultInstance().toBuilder().setMacAddress("C0:9A:D0:76:A9:69").setSsid("ssid-3")
.setConnected(true).setDurationMs(298127).setStats(clientStats).build();
ClientReport clientReport2g = ClientReport clientReport2g = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND2G)
ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND2G).setChannel(6).addAllClientList(ImmutableList.of(client2g)).build(); .setChannel(6).addAllClientList(ImmutableList.of(client2g)).build();
ClientReport clientReport5gl = ClientReport clientReport5gl = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GL)
ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GL).setChannel(36).addAllClientList(new ArrayList<Client>()).build(); .setChannel(36).addAllClientList(new ArrayList<Client>()).build();
ClientReport clientReport5gu = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GU).setChannel(157) ClientReport clientReport5gu = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GU)
.addAllClientList(ImmutableList.of(client5gu)).build(); .setChannel(157).addAllClientList(ImmutableList.of(client5gu)).build();
List<ClientReport> clients = new ArrayList<>(); List<ClientReport> clients = new ArrayList<>();
clients.add(clientReport2g); clients.add(clientReport2g);
@@ -881,7 +882,8 @@ public class OpensyncExternalIntegrationCloudTest {
connectNodeInfo.skuNumber = "connectus.ai_21P10C68818122"; connectNodeInfo.skuNumber = "connectus.ai_21P10C68818122";
connectNodeInfo.redirectorAddr = "ssl:opensync.zone1.art2wave.com:6643"; connectNodeInfo.redirectorAddr = "ssl:opensync.zone1.art2wave.com:6643";
connectNodeInfo.platformVersion = "OPENWRT_EA8300"; connectNodeInfo.platformVersion = "OPENWRT_EA8300";
connectNodeInfo.wifiRadioStates = ImmutableMap.of("2.4G", "home-ap-24", "5GL", "home-ap-l50", "5GU", "home-ap-u50"); connectNodeInfo.wifiRadioStates = ImmutableMap.of("2.4G", "home-ap-24", "5GL", "home-ap-l50", "5GU",
"home-ap-u50");
Map<String, String> versionMatrix = new HashMap<>(); Map<String, String> versionMatrix = new HashMap<>();
versionMatrix.put("DATE", "Thu Jul 16 18:52:06 UTC 2020"); versionMatrix.put("DATE", "Thu Jul 16 18:52:06 UTC 2020");

View File

@@ -116,7 +116,7 @@ public class MqttStatsPublisherTest {
static class Config { static class Config {
@Bean @Bean
public StatsPublisherInterface mqttStatsPublisher() { public MqttStatsPublisher mqttStatsPublisher() {
return new MqttStatsPublisher(); return new MqttStatsPublisher();
} }
@@ -125,7 +125,7 @@ public class MqttStatsPublisherTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.LENIENT).startMocking(); mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.STRICT_STUBS).startMocking();
} }
@@ -148,12 +148,8 @@ public class MqttStatsPublisherTest {
public void testExtractCustomerIdFromTopic() { public void testExtractCustomerIdFromTopic() {
String topic = "/ap/Test_Client_21P10C68818122/opensync"; String topic = "/ap/Test_Client_21P10C68818122/opensync";
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Equipment ce = Mockito.mock(Equipment.class); Mockito.when(session.getCustomerId()).thenReturn(2);
Mockito.when(ce.getCustomerId()).thenReturn(2);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(ce);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);
assertEquals(2, opensyncExternalIntegrationMqttProcessor.extractCustomerIdFromTopic(topic)); assertEquals(2, opensyncExternalIntegrationMqttProcessor.extractCustomerIdFromTopic(topic));
@@ -177,7 +173,8 @@ public class MqttStatsPublisherTest {
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
equipment.setId(1L); equipment.setCustomerId(2);
equipment.setId(1L);
Mockito.when( Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))) equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
@@ -196,6 +193,7 @@ public class MqttStatsPublisherTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);

View File

@@ -159,6 +159,130 @@ public class RealtimeEventPublisherTest {
// TODO: implement // TODO: implement
} }
@Test
public void testPublishDhcpTransactionEvents() throws Exception {
long timestamp = System.currentTimeMillis();
List<DhcpTransaction> dhcpTransactionList = new ArrayList<>();
DhcpAckEvent ackEvent = DhcpAckEvent.newBuilder()
.setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("c0:9a:d0:76:a9:69")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build())
.setGatewayIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setPrimaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.204").getAddress()))
.setSecondaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.198").getAddress()))
.setSubnetMask(ByteString.copyFrom(InetAddress.getByName("255.255.255.0").getAddress()))
.setLeaseTime(172800).setTimeOffset(10).build();
DhcpAckEvent ackEvent2 = DhcpAckEvent.newBuilder()
.setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("f6:f0:65:99:e2:33")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build())
.setGatewayIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setPrimaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.204").getAddress()))
.setSecondaryDns(ByteString.copyFrom(InetAddress.getByName("64.71.255.198").getAddress()))
.setSubnetMask(ByteString.copyFrom(InetAddress.getByName("255.255.255.0").getAddress()))
.setLeaseTime(172800).setTimeOffset(10).build();
List<DhcpAckEvent> ackEventList = List.of(ackEvent, ackEvent2);
DhcpNakEvent nakEvent1 = DhcpNakEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.129").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("24:f5:a2:ef:2e:53")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
List<DhcpNakEvent> nakEventList = List.of(nakEvent1);
DhcpOfferEvent offerEvent1 = DhcpOfferEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("c0:9a:d0:76:a9:69")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
DhcpOfferEvent offerEvent2 = DhcpOfferEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("f6:f0:65:99:e2:33")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setFromInternal(true).build();
List<DhcpOfferEvent> offerEventList = List.of(offerEvent1,offerEvent2);
DhcpDiscoverEvent discoverEvent1 = DhcpDiscoverEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("c0:9a:d0:76:a9:69")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPhone").build();
DhcpDiscoverEvent discoverEvent2 = DhcpDiscoverEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("f6:f0:65:99:e2:33")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPad").build();
List<DhcpDiscoverEvent> discoverEventList = List.of(discoverEvent1,discoverEvent2);
DhcpRequestEvent requestEvent1 = DhcpRequestEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("c0:9a:d0:76:a9:69")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPhone").build();
DhcpRequestEvent requestEvent2 = DhcpRequestEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.65").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("f6:f0:65:99:e2:33")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).setHostname("My-iPad").build();
List<DhcpRequestEvent> requestEventList = List.of(requestEvent1,requestEvent2);
DhcpInformEvent informEvent = DhcpInformEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.250").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("c0:9a:d0:76:a9:69")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).build();
List<DhcpInformEvent> informEventList = List.of(informEvent);
DhcpDeclineEvent declineEvent = DhcpDeclineEvent.newBuilder().setDhcpCommonData(DhcpCommonData.newBuilder(DhcpCommonData.getDefaultInstance())
.setClientIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.129").getAddress()))
.setDhcpServerIp(ByteString.copyFrom(InetAddress.getByName("10.0.0.1").getAddress()))
.setDeviceMacAddress("24:f5:a2:ef:2e:53")
.setXId(123456789)
.setTimestampMs(Long.valueOf(timestamp/1000).intValue()).build()).build();
List<DhcpDeclineEvent> declineEventList = List.of(declineEvent);
DhcpTransaction dhcpTransaction = DhcpTransaction.newBuilder(DhcpTransaction.getDefaultInstance())
.addAllDhcpAckEvent(ackEventList).addAllDhcpNakEvent(nakEventList).addAllDhcpOfferEvent(offerEventList)
.addAllDhcpInformEvent(informEventList).addAllDhcpDeclineEvent(declineEventList)
.addAllDhcpDiscoverEvent(discoverEventList).addAllDhcpRequestEvent(requestEventList).setXId(123456789)
.build();
dhcpTransactionList.add(dhcpTransaction);
realtimeEventPublisher.publishDhcpTransactionEvents(2, 1L, 0L, dhcpTransactionList);
Mockito.verify(cloudEventDispatcherInterface,Mockito.times(1)).publishEventsBulk(Mockito.anyList());
}
@Test @Test
public void testPublishSipCallEvents() throws Exception { public void testPublishSipCallEvents() throws Exception {

View File

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

View File

@@ -36,6 +36,12 @@ public interface OpensyncExternalIntegrationInterface {
void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId); void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId);
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 wifiAssociatedClientsDbTableUpdate(List<OpensyncWifiAssociatedClients> wifiAssociatedClients, String apId);
void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId); void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId);
@@ -50,10 +56,6 @@ public interface OpensyncExternalIntegrationInterface {
void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId,
RowUpdateOperation rowUpdateOperation); RowUpdateOperation rowUpdateOperation);
void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId);
void clearEquipmentStatus(String apId); void clearEquipmentStatus(String apId);
void processMqttMessage(String topic, Report report);
} }

View File

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

View File

@@ -7,6 +7,7 @@ public class OvsdbSession {
private String apId; private String apId;
private long routingId; private long routingId;
private long equipmentId; private long equipmentId;
private int customerId;
public OvsdbClient getOvsdbClient() { public OvsdbClient getOvsdbClient() {
return ovsdbClient; return ovsdbClient;
@@ -32,5 +33,12 @@ public class OvsdbSession {
public void setEquipmentId(long equipmentId) { public void setEquipmentId(long equipmentId) {
this.equipmentId = equipmentId; this.equipmentId = equipmentId;
} }
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
} }

View File

@@ -1,14 +0,0 @@
package com.telecominfraproject.wlan.opensync.external.integration.utils;
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
import sts.OpensyncStats.Report;
public interface StatsPublisherInterface {
void processMqttMessage(String topic, Report report);
void publishSystemEventFromTableStateMonitor(SystemEvent event);
}

View File

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

View File

@@ -207,9 +207,4 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
} }
@Override
public void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId) {
LOG.info("nodeStateDbTableUpdate for AP {}", apId);
}
} }

View File

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

View File

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

View File

@@ -30,22 +30,6 @@
</triggeringPolicy> </triggeringPolicy>
</appender> </appender>
<appender name="mqttMsgTracer" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/app/logs/mqttMsgTracer.log</file>
<append>true</append>
<encoder>
<pattern>%date %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/app/logs/mqttMsgTracer.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/app/logs/opensyncgw.log</file> <file>/app/logs/opensyncgw.log</file>
<append>true</append> <append>true</append>
@@ -83,7 +67,7 @@
<logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/> <logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/>
<logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/> <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
<logger name="MQTT_DATA" level="INFO" additivity="false"> <logger name="MQTT_DATA" level="DEBUG" additivity="false">
<appender-ref ref="mqttDataFile"/> <appender-ref ref="mqttDataFile"/>
</logger> </logger>

View File

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

View File

@@ -63,7 +63,7 @@
<logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/> <logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/>
<logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/> <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
<logger name="MQTT_DATA" level="INFO"/> <logger name="MQTT_DATA" level="DEBUG"/>
<!-- <!--
<logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/> <logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/>

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.mqtt; package com.telecominfraproject.wlan.opensync.mqtt;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@@ -6,7 +5,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; 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.MQTT;
import org.fusesource.mqtt.client.Message; import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS; import org.fusesource.mqtt.client.QoS;
@@ -21,8 +20,9 @@ import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.google.protobuf.Descriptors; import com.google.protobuf.Descriptors;
import com.google.protobuf.TypeRegistry; import com.google.protobuf.MessageOrBuilder;
import com.google.protobuf.util.JsonFormat; import com.google.protobuf.util.JsonFormat;
import com.google.protobuf.util.JsonFormat.TypeRegistry;
import com.netflix.servo.DefaultMonitorRegistry; import com.netflix.servo.DefaultMonitorRegistry;
import com.netflix.servo.monitor.BasicCounter; import com.netflix.servo.monitor.BasicCounter;
import com.netflix.servo.monitor.BasicTimer; import com.netflix.servo.monitor.BasicTimer;
@@ -33,11 +33,14 @@ import com.netflix.servo.monitor.Timer;
import com.netflix.servo.tag.TagList; import com.netflix.servo.tag.TagList;
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags; import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface; import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface;
import com.telecominfraproject.wlan.opensync.util.ZlibUtil; import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
import sts.OpensyncStats; import sts.OpensyncStats;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
import traffic.NetworkMetadata;
import traffic.NetworkMetadata.FlowReport;
import wc.stats.IpDnsTelemetry;
import wc.stats.IpDnsTelemetry.WCStatsReport;
@Profile("mqtt_receiver") @Profile("mqtt_receiver")
@Component @Component
@@ -51,14 +54,18 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
private final TagList tags = CloudMetricsTags.commonTags; 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 @Autowired
private OpensyncExternalIntegrationInterface opensyncExternalIntegrationInterface; private OpensyncExternalIntegrationInterface extIntegrationInterface;
// dtop: use anonymous constructor to ensure that the following code always // dtop: use anonymous constructor to ensure that the following code always
// get executed, // get executed,
@@ -78,7 +85,8 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
public OpensyncMqttClient(@Autowired io.netty.handler.ssl.SslContext sslContext, public OpensyncMqttClient(@Autowired io.netty.handler.ssl.SslContext sslContext,
@Value("${tip.wlan.mqttBroker.address.internal:testportal.123wlan.com}") String mqttBrokerAddress, @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("${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.keyStore:/opt/tip-wlan/certs/client_keystore.jks}") String jdkKeyStoreLocation,
@Value("${mqtt.javax.net.ssl.keyStorePassword:mypassword}") String jdkKeyStorePassword, @Value("${mqtt.javax.net.ssl.keyStorePassword:mypassword}") String jdkKeyStorePassword,
@@ -106,9 +114,9 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
@Override @Override
public void run() { public void run() {
while (keepReconnecting) { while (keepReconnecting) {
BlockingConnection blockingConnection = null; FutureConnection futureConnection = null;
try { try {
// Thread.sleep(5000); Thread.sleep(5000);
// Create a new MQTT connection to the broker. // Create a new MQTT connection to the broker.
/* /*
@@ -136,71 +144,139 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
*/ */
MQTT mqtt = new MQTT(); MQTT mqtt = new MQTT();
// mqtt.setHost("tcp://192.168.0.137:61616");
mqtt.setHost("tls://" + mqttBrokerAddress + ":" + mqttBrokerListenPort); mqtt.setHost("tls://" + mqttBrokerAddress + ":" + mqttBrokerListenPort);
LOG.info("Connecting to MQTT broker at {}", mqtt.getHost()); LOG.info("Connecting to MQTT broker at {}", mqtt.getHost());
mqtt.setClientId("opensync_mqtt"); mqtt.setClientId("opensync_mqtt");
mqtt.setUserName(username); mqtt.setUserName(username);
mqtt.setPassword(password); mqtt.setPassword(password);
blockingConnection = mqtt.blockingConnection(); // Note: the following does not work with the
blockingConnection.connect(); // serverContext,
// it has to be the
// clientContext
// mqtt.setSslContext(((JdkSslContext)
// sslContext).context());
// For now we'll rely on regular SSLContext from the JDK
LOG.debug("Connected to MQTT broker at {}", mqtt.getHost()); // TODO: revisit this blocking connection, change it to
// futureConnection
futureConnection = mqtt.futureConnection();
futureConnection.connect();
// NB. setting to AT_MOST_ONCE to match the APs message level LOG.info("Connected to MQTT broker at {}", mqtt.getHost());
Topic[] topics = {new Topic("/ap/#", QoS.AT_MOST_ONCE),};
blockingConnection.subscribe(topics); // Subscribe to topics:
//
// new Topic("mqtt/example/publish", QoS.AT_LEAST_ONCE),
// 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), };
futureConnection.subscribe(topics);
LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics)); LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
// prepare a JSONPrinter to format protobuf messages as // prepare a JSONPrinter to format protobuf messages as
// json // json
List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>(); List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes()); protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(IpDnsTelemetry.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(NetworkMetadata.getDescriptor().getMessageTypes());
TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build(); TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
JsonFormat.Printer jsonPrinter = JsonFormat.Printer jsonPrinter = JsonFormat.printer().includingDefaultValueFields()
JsonFormat.printer().includingDefaultValueFields().omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry); .omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry);
// main loop - receive messages // main loop - receive messages
while (true) { while (true) {
LOG.debug("{} awaiting mqtt message from broker",mqttClientThread.getName()); Message mqttMsg = futureConnection.receive().await();
Message mqttMsg = blockingConnection.receive();
if (mqttMsg == null) { if (mqttMsg == null) {
if (LOG.isTraceEnabled())
LOG.trace("NULL message received for blocking connection");
continue; continue;
} }
Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
try {
byte payload[] = mqttMsg.getPayload();
messagesReceived.increment();
messageBytesReceived.increment(payload.length);
if (payload[0] == 0x78) { LOG.debug("MQTT Topic {}", mqttMsg.getTopic());
// looks like zlib-compressed data, let's
// decompress byte payload[] = mqttMsg.getPayload();
// it before deserializing // we acknowledge right after receive because:
payload = ZlibUtil.decompress(payload); // a. none of the stats messages are so important
} // that
// Only supported protobuf on the TIP opensync APs is Report // we cannot skip one
Report statsReport = Report.parseFrom(payload); // b. if there's some kind of problem with the
mqttMsg.ack(); // message
MQTT_LOG.info("Topic {}\n{}", mqttMsg.getTopic(), jsonPrinter.print(statsReport)); // (decoding or processing)
opensyncExternalIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), statsReport); // - we want to move on as quickly as possible and
LOG.debug("Dispatched report for topic {} to backend for processing", mqttMsg.getTopic()); // 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) {
// looks like zlib-compressed data, let's
// decompress
// it before deserializing
payload = ZlibUtil.decompress(payload);
}
// attempt to parse the message as protobuf
MessageOrBuilder encodedMsg = null;
try {
encodedMsg = Report.parseFrom(payload);
MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg);
} catch (Exception e) { } catch (Exception e) {
LOG.error("Exception processing topic for message {}",mqttMsg, e); 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 { } finally {
stopwatchTimerMessageProcess.stop(); stopwatchTimerMessageProcess.stop();
} }
} }
} catch (Exception e) { } catch (Exception e) {
LOG.error("Exception in MQTT receiver", e); LOG.error("Exception in MQTT receiver", e);
} finally { } finally {
try { try {
if (blockingConnection != null) { if (futureConnection != null) {
blockingConnection.disconnect(); futureConnection.disconnect();
} }
} catch (Exception e1) { } catch (Exception e1) {
// do nothing // do nothing
@@ -226,5 +302,4 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
mqttClientThread.interrupt(); mqttClientThread.interrupt();
} }
} }
} }

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.ovsdb; package com.telecominfraproject.wlan.opensync.ovsdb;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@@ -28,7 +27,6 @@ import com.vmware.ovsdb.callback.ConnectionCallback;
import com.vmware.ovsdb.exception.OvsdbClientException; import com.vmware.ovsdb.exception.OvsdbClientException;
import com.vmware.ovsdb.protocol.methods.*; import com.vmware.ovsdb.protocol.methods.*;
import com.vmware.ovsdb.protocol.operation.notation.Row; import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener; import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContext;
@@ -52,13 +50,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private final TagList tags = CloudMetricsTags.commonTags; 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}") @org.springframework.beans.factory.annotation.Value("${tip.wlan.ovsdb.listenPort:6640}")
private int ovsdbListenPort; private int ovsdbListenPort;
@@ -125,7 +127,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
String subjectDn; String subjectDn;
try { try {
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()).getSubjectDN().getName(); subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
.getSubjectDN().getName();
String clientCn = SslUtil.extractCN(subjectDn); String clientCn = SslUtil.extractCN(subjectDn);
LOG.info("ovsdbClient connecting from {} on port {} clientCn {}", remoteHost, localPort, clientCn); LOG.info("ovsdbClient connecting from {} on port {} clientCn {}", remoteHost, localPort, clientCn);
@@ -186,7 +189,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
localPort = ovsdbClient.getConnectionInfo().getLocalPort(); localPort = ovsdbClient.getConnectionInfo().getLocalPort();
String subjectDn = null; String subjectDn = null;
try { try {
subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()).getSubjectDN().getName(); subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate())
.getSubjectDN().getName();
} catch (Exception e) { } catch (Exception e) {
// do nothing // do nothing
} }
@@ -200,7 +204,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
LOG.debug("Unable to process ap disconnect. {}", e.getMessage()); 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()); LOG.info("ovsdbClient connectedClients = {}", ovsdbSessionMapInterface.getNumSessions());
} finally { } finally {
try { try {
@@ -223,7 +228,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private void processConnectRequest(OvsdbClient ovsdbClient, String clientCn, ConnectNodeInfo connectNodeInfo) { private void processConnectRequest(OvsdbClient ovsdbClient, String clientCn, ConnectNodeInfo connectNodeInfo) {
LOG.debug("Starting Client connect"); 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 // successfully connected - register it in our
// connectedClients table // connectedClients table
@@ -260,7 +266,6 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
} }
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent); ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
} else { } else {
@@ -290,15 +295,6 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); 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 @Override
public void processConfigChanged(String apId) { public void processConfigChanged(String apId) {
LOG.debug("Starting processConfigChanged for {}", apId); LOG.debug("Starting processConfigChanged for {}", apId);
@@ -323,7 +319,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
ovsdbDao.removeRadsecRadiusAndRealmConfigs(ovsdbClient); ovsdbDao.removeRadsecRadiusAndRealmConfigs(ovsdbClient);
extIntegrationInterface.clearEquipmentStatus(apId); extIntegrationInterface.clearEquipmentStatus(apId);
ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig); ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
@@ -417,24 +413,27 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} catch (OvsdbClientException e) { } catch (OvsdbClientException e) {
LOG.debug("Could not enable monitor for Node_State table. {}", e.getMessage()); LOG.debug("Could not enable monitor for Node_State table. {}", e.getMessage());
} }
try { try {
if (ovsdbClient.getSchema(OvsdbDao.ovsdbName).get().getTables().containsKey("APC_State")) { if (ovsdbClient.getSchema(OvsdbDao.ovsdbName).get().getTables().containsKey("APC_State")) {
monitorAPCStateTable(ovsdbClient, key); monitorAPCStateTable(ovsdbClient, key);
} }
} catch (InterruptedException | ExecutionException | OvsdbClientException e) { } 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); LOG.debug("Finished (re)setting monitors for AP {}", key);
} }
private void monitorDhcpLeasedIpDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorDhcpLeasedIpDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.dhcpLeasedIpDbTable + "_" + key, CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), OvsdbDao.dhcpLeasedIpDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.dhcpLeasedIpDbTable,
new MonitorRequest(new MonitorSelect(true, true, true, true)))),
tableUpdates -> { tableUpdates -> {
try { 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>> insert = new ArrayList<>();
List<Map<String, String>> delete = new ArrayList<>(); List<Map<String, String>> delete = new ArrayList<>();
@@ -446,7 +445,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) { if (rowUpdate.getNew() == null) {
Map<String, String> rowMap = new HashMap<>(); Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); rowUpdate.getOld().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
delete.add(rowMap); delete.add(rowMap);
// delete // delete
@@ -454,7 +454,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// insert // insert
Map<String, String> rowMap = new HashMap<>(); Map<String, String> rowMap = new HashMap<>();
rowUpdate.getNew().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); rowUpdate.getNew().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
insert.add(rowMap); insert.add(rowMap);
} else { } else {
@@ -463,7 +464,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> rowMap = new HashMap<>(); Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
rowUpdate.getOld().getColumns().entrySet().forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap)); rowUpdate.getOld().getColumns().entrySet()
.forEach(c -> OvsdbDao.translateDhcpFpValueToString(c, rowMap));
update.add(rowMap); update.add(rowMap);
@@ -496,10 +498,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
private void monitorCommandStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorCommandStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.commandStateDbTable + "_" + key, CompletableFuture<TableUpdates> csCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())), tableUpdates -> { OvsdbDao.commandStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.commandStateDbTable, new MonitorRequest())),
tableUpdates -> {
try { 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>> insert = new ArrayList<>();
List<Map<String, String>> delete = new ArrayList<>(); List<Map<String, String>> delete = new ArrayList<>();
@@ -511,7 +516,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) { if (rowUpdate.getNew() == null) {
Map<String, String> rowMap = new HashMap<>(); Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString())); rowUpdate.getOld().getColumns()
.forEach((key1, value) -> rowMap.put(key1, value.toString()));
delete.add(rowMap); delete.add(rowMap);
// delete // delete
@@ -519,7 +525,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// insert // insert
Map<String, String> rowMap = new HashMap<>(); 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); insert.add(rowMap);
} else { } else {
@@ -528,7 +535,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> rowMap = new HashMap<>(); Map<String, String> rowMap = new HashMap<>();
rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns()); rowUpdate.getOld().getColumns().putAll(rowUpdate.getNew().getColumns());
rowUpdate.getOld().getColumns().forEach((key1, value) -> rowMap.put(key1, value.toString())); rowUpdate.getOld().getColumns()
.forEach((key1, value) -> rowMap.put(key1, value.toString()));
update.add(rowMap); update.add(rowMap);
@@ -560,27 +568,33 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} }
private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorAwlanNodeDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.awlanNodeDbTable + "_" + key, CompletableFuture<TableUpdates> awCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))), OvsdbDao.awlanNodeDbTable + "_" + key, new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable,
new MonitorRequest(new MonitorSelect(true, false, false, true)))),
tableUpdates -> { tableUpdates -> {
try { try {
LOG.info(OvsdbDao.awlanNodeDbTable + "_" + key + " monitor callback received {}", tableUpdates); 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) { } catch (Exception e) {
LOG.error("awlanNodeDbTableUpdate failed", 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 { private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiAssociatedClientsDbTable + "_" + key, CompletableFuture<TableUpdates> acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())), tableUpdates -> { OvsdbDao.wifiAssociatedClientsDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, new MonitorRequest())),
tableUpdates -> {
try { try {
LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}", tableUpdates); LOG.info(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
List<OpensyncWifiAssociatedClients> associatedClients = new ArrayList<>(); List<OpensyncWifiAssociatedClients> associatedClients = new ArrayList<>();
@@ -597,7 +611,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
// adding anyway. // adding anyway.
extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key); extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key);
} else { } else {
associatedClients.addAll(ovsdbDao.getOpensyncWifiAssociatedClients(rowUpdate, key, ovsdbClient)); associatedClients.addAll(
ovsdbDao.getOpensyncWifiAssociatedClients(rowUpdate, key, ovsdbClient));
} }
} }
@@ -611,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 { private void monitorWifiInetStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> isCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key, CompletableFuture<TableUpdates> isCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), OvsdbDao.wifiInetStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable,
new MonitorRequest(new MonitorSelect(true, true, true, true)))),
tableUpdates -> { tableUpdates -> {
try { 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> inetStateInsertOrUpdate = new ArrayList<>();
List<OpensyncAPInetState> inetStateDelete = new ArrayList<>(); List<OpensyncAPInetState> inetStateDelete = new ArrayList<>();
@@ -630,9 +649,11 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) {
if (rowUpdate.getNew() == null) { if (rowUpdate.getNew() == null) {
inetStateDelete.addAll(ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient)); inetStateDelete.addAll(
ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
} else { } else {
inetStateInsertOrUpdate.addAll(ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient)); inetStateInsertOrUpdate.addAll(
ovsdbDao.getOpensyncApInetStateForRowUpdate(rowUpdate, key, ovsdbClient));
} }
} }
@@ -649,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 { private void monitorWifiRadioStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiRadioStateDbTable + "_" + key, CompletableFuture<TableUpdates> rsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, new MonitorRequest(new MonitorSelect(true, false, false, true)))), OvsdbDao.wifiRadioStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable,
new MonitorRequest(new MonitorSelect(true, false, false, true)))),
tableUpdates -> { tableUpdates -> {
try { 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) { } catch (Exception e) {
LOG.error("wifiRadioStatusDbTableUpdate failed", 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 { private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiVifStateDbTable + "_" + key, CompletableFuture<TableUpdates> vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, new MonitorRequest(new MonitorSelect(false, true, true, true)))), OvsdbDao.wifiVifStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable,
new MonitorRequest(new MonitorSelect(false, true, true, true)))),
tableUpdates -> { tableUpdates -> {
try { 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> vifsToDelete = new ArrayList<>();
List<OpensyncAPVIFState> vifsToInsertOrUpdate = new ArrayList<>(); List<OpensyncAPVIFState> vifsToInsertOrUpdate = new ArrayList<>();
@@ -685,12 +715,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (rowUpdate.getNew() == null) { if (rowUpdate.getNew() == null) {
// this is a deletion // this is a deletion
vifsToDelete.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient)); vifsToDelete.addAll(
ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
} else { } else {
// either an insert or // either an insert or
// mutuate/update // mutuate/update
vifsToInsertOrUpdate.addAll(ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient)); vifsToInsertOrUpdate.addAll(
ovsdbDao.getOpensyncApVifStateForRowUpdate(rowUpdate, key, ovsdbClient));
} }
@@ -715,43 +747,32 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} }
private void monitorNodeStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorNodeStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.nodeStateTable + "_" + key, CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(
new MonitorRequests(ImmutableMap.of(OvsdbDao.nodeStateTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), tableUpdates -> { 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 {}"); LOG.info(OvsdbDao.nodeStateTable + "_" + key + " monitor callback received {}");
extIntegrationInterface.nodeStateDbTableUpdate(processNodeStateTableUpdate(key, tableUpdates), key); tableUpdates.getTableUpdates().forEach((key1, value) -> {
LOG.info("TableUpdate for {}", key1);
value.getRowUpdates().values().forEach(r -> {
if (r.getOld() != null) {
LOG.info("Node_State old row {}", r.getOld().getColumns());
}
if (r.getNew() != null) {
LOG.info("Node_State new row {}", r.getNew().getColumns());
}
});
});
}); });
extIntegrationInterface.nodeStateDbTableUpdate(processNodeStateTableUpdate(key, nsCf.join()), key); nsCf.join();
}
private List<Map<String,String>> processNodeStateTableUpdate(String key, TableUpdates tableUpdates) {
List<Map<String, String>> updates = new ArrayList<>();
tableUpdates.getTableUpdates().forEach((key1, value) -> {
LOG.info("TableUpdate for {}", key1);
value.getRowUpdates().values().forEach(r -> {
if (r.getOld() != null) {
LOG.info("Node_State old row {}", r.getOld().getColumns());
}
if (r.getNew() != null) {
LOG.info("Node_State new row {}", r.getNew().getColumns());
Map<String, Value> columns = r.getNew().getColumns();
Map<String, String> update = new HashMap<>();
update.put("key", columns.get("key").toString());
update.put("module", columns.get("module").toString());
update.put("persist", columns.get("persist").toString());
update.put("value", columns.get("value").toString());
updates.add(update);
}
});
});
return updates;
} }
private void monitorAPCStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorAPCStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.apcStateDbTable + "_" + key, CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(
new MonitorRequests(ImmutableMap.of(OvsdbDao.apcStateDbTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), tableUpdates -> { 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 {}"); LOG.info(OvsdbDao.apcStateDbTable + "_" + key + " monitor callback received {}");
tableUpdates.getTableUpdates().forEach((key1, value) -> { tableUpdates.getTableUpdates().forEach((key1, value) -> {
LOG.info("TableUpdate for {}", key1); LOG.info("TableUpdate for {}", key1);
@@ -759,19 +780,14 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> apcStateAttributes = ovsdbDao.getAPCState(r, key); Map<String, String> apcStateAttributes = ovsdbDao.getAPCState(r, key);
extIntegrationInterface.apcStateDbTableUpdate(apcStateAttributes, key, RowUpdateOperation.MODIFY); extIntegrationInterface.apcStateDbTableUpdate(apcStateAttributes, key,
RowUpdateOperation.MODIFY);
}); });
}); });
}); });
try { nsCf.join();
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);
}
} }
@Override @Override
@@ -821,7 +837,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
@Override @Override
public String startDebugEngine(String apId, String gatewayHostname, Integer gatewayPort) { 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 { try {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
@@ -829,14 +846,17 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
Map<String, String> payload = new HashMap<>(); Map<String, String> payload = new HashMap<>();
payload.put("gateway_hostname", gatewayHostname); payload.put("gateway_hostname", gatewayHostname);
payload.put("gateway_port", gatewayPort.toString()); payload.put("gateway_port", gatewayPort.toString());
ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L, defaultCommandDurationSec); ovsdbDao.configureCommands(ovsdbClient, OvsdbDao.StartDebugEngineApCommand, payload, 0L,
defaultCommandDurationSec);
LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort); LOG.debug("Started debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort);
return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort; return "Started debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort;
} catch (Exception e) { } catch (Exception e) {
LOG.error("TipWlanOvsdbClient::startDebugEngine Failed to start debug engine on AP {} with gateway {} port {}", apId, gatewayHostname, gatewayPort, LOG.error(
e); "TipWlanOvsdbClient::startDebugEngine Failed to start debug engine on AP {} with gateway {} port {}",
return "Failed to start debug engine on AP " + apId + " with gateway " + gatewayHostname + " port " + gatewayPort; apId, gatewayHostname, gatewayPort, e);
return "Failed to start debug engine on AP " + apId + " with gateway " + gatewayHostname + " port "
+ gatewayPort;
} }
} }
@@ -881,7 +901,8 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} }
} catch (Exception e) { } catch (Exception e) {
if (switchBanks) { 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; return "failed to trigger switch software bank on AP " + apId;
} else { } else {
LOG.error("TipWlanOvsdbClient::processRebootRequest failed to trigger reboot of AP {}", apId, e); LOG.error("TipWlanOvsdbClient::processRebootRequest failed to trigger reboot of AP {}", apId, e);
@@ -927,21 +948,25 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return key; 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); LOG.info("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId);
try { try {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
OvsdbClient ovsdbClient = session.getOvsdbClient(); OvsdbClient ovsdbClient = session.getOvsdbClient();
ovsdbDao.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap); 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; return " change backup and/or primary channels for AP " + apId;
} catch (Exception e) { } 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; return "failed to change backup and/or primary channels for AP " + apId;
} }
} }
public String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) { public String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) {
LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest for AP {}", apId); LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest for AP {}", apId);
@@ -949,10 +974,13 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
OvsdbClient ovsdbClient = session.getOvsdbClient(); OvsdbClient ovsdbClient = session.getOvsdbClient();
ovsdbDao.processCellSizeAttributesRequest(ovsdbClient, cellSizeAttributeMap); 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; return " change cell size attributes for AP " + apId;
} catch (Exception e) { } 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; return "failed to change cell size attributes for AP " + apId;
} }
} }

View File

@@ -9,7 +9,6 @@ import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes; import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
@@ -87,10 +86,7 @@ public class OvsdbDao extends OvsdbDaoBase {
} }
public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
configureNtpServer(ovsdbClient, opensyncAPConfig); configureNtpServer(ovsdbClient,opensyncAPConfig);configureSyslog(ovsdbClient, opensyncAPConfig);
configureSyslog(ovsdbClient, opensyncAPConfig);
processBlinkRequest(ovsdbClient, opensyncAPConfig.getCustomerEquipment().getInventoryId(),
((ApElementConfiguration) opensyncAPConfig.getCustomerEquipment().getDetails()).isBlinkAllLEDs());
} }
void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
@@ -241,8 +237,4 @@ public class OvsdbDao extends OvsdbDaoBase {
ovsdbStats.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent); 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 { try {
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
List<Condition> conditions = new ArrayList<>(); List<Condition> conditions = new ArrayList<>();
@@ -273,7 +273,6 @@ public class OvsdbDaoBase {
columns.add("freq_band"); columns.add("freq_band");
columns.add("if_name"); columns.add("if_name");
columns.add("country");
operations.add(new Select(wifiRadioStateDbTable, conditions, columns)); operations.add(new Select(wifiRadioStateDbTable, conditions, columns));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations); CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
@@ -293,7 +292,6 @@ public class OvsdbDaoBase {
for (Row row : ((SelectResult) result[0]).getRows()) { for (Row row : ((SelectResult) result[0]).getRows()) {
ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"), ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"),
getSingleValueFromSet(row, "if_name")); getSingleValueFromSet(row, "if_name"));
ret.country = getSingleValueFromSet(row, "country");
} }

View File

@@ -238,7 +238,7 @@ public class OvsdbNode extends OvsdbDaoBase {
} }
fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType); fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType);
fillInRadioInterfaceNamesAndCountry(ovsdbClient, ret); fillInRadioInterfaceNames(ovsdbClient, ret);
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
throw new RuntimeException(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.Function;
import com.vmware.ovsdb.protocol.operation.notation.Row; import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Value; 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.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
@@ -60,17 +59,18 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { 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" // /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 { try {
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails(); ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
if (apNetworkConfig.getSyslogRelay() == null) { if (apNetworkConfig.getSyslogRelay() == null ) {
LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig); LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
return; return;
} }
if (apNetworkConfig.getSyslogRelay().isEnabled()) { 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); LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
return; return;
} }
@@ -78,8 +78,8 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
Map<String, Value> columns = new HashMap<>(); Map<String, Value> columns = new HashMap<>();
columns.put("key", new Atom<>("remote")); columns.put("key", new Atom<>("remote"));
columns.put("module", new Atom<>("syslog")); columns.put("module", new Atom<>("syslog"));
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String.valueOf( String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String
apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" + String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId())); .valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
columns.put("value", new Atom<>(delimitedValue)); columns.put("value", new Atom<>(delimitedValue));
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns))); 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; 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.ChannelBandwidth;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; 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.external.integration.models.OpensyncAPConfig;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo;
@@ -12,20 +30,15 @@ import com.telecominfraproject.wlan.profile.rf.models.RfElementConfiguration;
import com.vmware.ovsdb.exception.OvsdbClientException; import com.vmware.ovsdb.exception.OvsdbClientException;
import com.vmware.ovsdb.protocol.operation.Operation; import com.vmware.ovsdb.protocol.operation.Operation;
import com.vmware.ovsdb.protocol.operation.Update; 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.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema; import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient; 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 @Component
public class OvsdbRadioConfig extends OvsdbDaoBase { public class OvsdbRadioConfig extends OvsdbDaoBase {
@@ -35,7 +48,8 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
String country = opensyncAPConfig.getCountryCode(); // should be the 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(); RfConfiguration rfConfig = (RfConfiguration) opensyncAPConfig.getRfProfile().getDetails();
Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient); Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient);
Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient); Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
@@ -44,29 +58,25 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName); CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get(); DatabaseSchema databaseSchema = cfDatabaseSchema.get();
Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet(); Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet();
for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) { for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
Map<String, String> hwConfig = new HashMap<>(); Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType); ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType); RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue;
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection(); boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection); int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
autoChannelSelection, channel, elementRadioConfig.getChannelNumber());
ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth(); ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
String ht_mode = getBandwidth(bandwidth); String ht_mode = getBandwidth(bandwidth);
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType); RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval(); int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled); boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection(); int txPower;
int txPower = 0; if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
if (autoCellSizeSelection) {
if (elementRadioConfig.getEirpTxPower() != null) {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
} else {
txPower = rfElementConfig.getEirpTxPower(); txPower = rfElementConfig.getEirpTxPower();
} else {
txPower = elementRadioConfig.getEirpTxPower().getValue();
} }
String hwMode = getHwMode(rfElementConfig); String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig); String freqBand = getHwConfigAndFreq(radioType, hwConfig);
@@ -77,12 +87,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
break; break;
} }
} }
LOG.debug( if (radioName == null) continue;
"configureWifiRadios for AP {} autoChannelSelection={} activeChannel={} getChannelNumber={} radioName={} freqBand={} hwMode={} txPower={} enabled={} adminStateSetting={} autoCellSizeSelection={}",
opensyncAPConfig.getCustomerEquipment().getInventoryId(), autoChannelSelection, channel, elementRadioConfig.getChannelNumber(), radioName, freqBand, hwMode, txPower,
enabled, radioConfig.getRadioAdminState(), autoCellSizeSelection);
if (radioName == null)
continue;
String ifName = null; // for vifConfigs String ifName = null; // for vifConfigs
if (radioName.equals(radio0)) { if (radioName.equals(radio0)) {
ifName = defaultRadio0; ifName = defaultRadio0;
@@ -91,8 +96,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
} else if (radioName.equals(radio2)) { } else if (radioName.equals(radio2)) {
ifName = defaultRadio2; ifName = defaultRadio2;
} }
if (ifName == null) if (ifName == null) continue;
continue;
Set<Uuid> vifUuidsForRadio = new HashSet<>(); Set<Uuid> vifUuidsForRadio = new HashSet<>();
for (String key : vifConfigs.keySet()) { for (String key : vifConfigs.keySet()) {
if (key.contains(ifName)) if (key.contains(ifName))
@@ -101,14 +105,14 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
int mimoMode = MimoMode.none.getId(); int mimoMode = MimoMode.none.getId();
if (rfElementConfig.getMimoMode() != null) { if (rfElementConfig.getMimoMode() != null) {
mimoMode = rfElementConfig.getMimoMode().getId(); mimoMode = rfElementConfig.getMimoMode().getId();
} }
int maxNumClients = 0; int maxNumClients = 0;
if (rfElementConfig.getMaxNumClients() != null) { if (rfElementConfig.getMaxNumClients() != null) {
maxNumClients = rfElementConfig.getMaxNumClients(); maxNumClients = rfElementConfig.getMaxNumClients();
} }
try { try {
configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval, enabled, hwMode, ht_mode, txPower, mimoMode, configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
vifUuidsForRadio, operations, maxNumClients,columnNames); enabled, hwMode, ht_mode, txPower, mimoMode, vifUuidsForRadio, operations, maxNumClients,columnNames);
} catch (OvsdbClientException e) { } catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e); LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -127,82 +131,76 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations); CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) { for (OperationResult res : result) {
LOG.trace("configureWifiRadios Op Result {}", res); LOG.debug("Op Result {}", res);
} }
ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient).entrySet().forEach(r -> {
LOG.debug("configureWifiRadios for AP {} Wifi_Radio_Config for if_name:{}\n{}", opensyncAPConfig.getCustomerEquipment().getInventoryId(), r.getKey(),r.getValue());
});
} catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) { } catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) {
LOG.error("configureWifiRadios error", e); LOG.error("configureWifiRadios error", e); throw new RuntimeException(e);
throw new RuntimeException(e);
} }
} }
String getHwConfigAndFreq(RadioType radioType, Map<String, String> hwConfig) { String getHwConfigAndFreq(RadioType radioType, Map<String, String> hwConfig) {
switch (radioType) { switch (radioType) {
case is2dot4GHz: case is2dot4GHz:
return "2.4G"; return "2.4G";
case is5GHz: case is5GHz:
// 802.11h dfs (Dynamic Frequency Selection) aka military // 802.11h dfs (Dynamic Frequency Selection) aka military
// and // and
// weather radar // weather radar
// avoidance protocol // avoidance protocol
// Must not be disabled (by law) // Must not be disabled (by law)
// NA for 2.4GHz // NA for 2.4GHz
hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1"); hwConfig.put("dfs_usenol", "1");
return "5G"; return "5G";
case is5GHzL: case is5GHzL:
// 802.11h dfs (Dynamic Frequency Selection) aka military // 802.11h dfs (Dynamic Frequency Selection) aka military
// and // and
// weather radar // weather radar
// avoidance protocol // avoidance protocol
// Must not be disabled (by law) // Must not be disabled (by law)
// NA for 2.4GHz // NA for 2.4GHz
hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1"); hwConfig.put("dfs_usenol", "1");
return "5GL"; return "5GL";
case is5GHzU: case is5GHzU:
// 802.11h dfs (Dynamic Frequency Selection) aka military // 802.11h dfs (Dynamic Frequency Selection) aka military
// and // and
// weather radar // weather radar
// avoidance protocol // avoidance protocol
// Must not be disabled (by law) // Must not be disabled (by law)
// NA for 2.4GHz // NA for 2.4GHz
hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_enable", "1");
hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_ignorecac", "0");
hwConfig.put("dfs_usenol", "1"); hwConfig.put("dfs_usenol", "1");
return "5GU"; return "5GU";
default: // don't know this interface default: // don't know this interface
return null; return null;
} }
} }
private String getBandwidth(ChannelBandwidth bandwidth) { private String getBandwidth(ChannelBandwidth bandwidth) {
String ht_mode; String ht_mode;
switch (bandwidth) { switch (bandwidth) {
case is20MHz: case is20MHz:
ht_mode = "HT20"; ht_mode = "HT20";
break; break;
case is40MHz: case is40MHz:
ht_mode = "HT40"; ht_mode = "HT40";
break; break;
case is80MHz: case is80MHz:
ht_mode = "HT80"; ht_mode = "HT80";
break; break;
case is160MHz: case is160MHz:
ht_mode = "HT160"; ht_mode = "HT160";
break; break;
case auto: case auto:
ht_mode = "0"; ht_mode = "0";
break; break;
default: default:
ht_mode = null; ht_mode = null;
} }
return ht_mode; return ht_mode;
} }
@@ -210,45 +208,43 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
String getHwMode(RfElementConfiguration rfElementConfig) { String getHwMode(RfElementConfiguration rfElementConfig) {
String hwMode = null; String hwMode = null;
switch (rfElementConfig.getRadioMode()) { switch (rfElementConfig.getRadioMode()) {
case modeA: case modeA:
hwMode = "11a"; hwMode = "11a";
break; break;
case modeAB: case modeAB:
hwMode = "11ab"; hwMode = "11ab";
break; break;
case modeAC: case modeAC:
hwMode = "11ac"; hwMode = "11ac";
break; break;
case modeB: case modeB:
hwMode = "11b"; hwMode = "11b";
break; break;
case modeG: case modeG:
hwMode = "11g"; hwMode = "11g";
break; break;
case modeAX: case modeAX:
hwMode = "11ax"; hwMode = "11ax";
break; break;
case modeN: case modeN:
hwMode = "11n"; hwMode = "11n";
break; break;
case auto: default:
hwMode = "auto";
break;
default:
} }
return hwMode; return hwMode;
} }
void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig, String country, int beaconInterval, boolean enabled, String hwMode, void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig,
String ht_mode, int txPower, int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns) String country, int beaconInterval, boolean enabled, String hwMode, String ht_mode, int txPower,
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
List<Condition> conditions = new ArrayList<>(); List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand))); conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
updateColumns.put("channel", new Atom<>(channel)); updateColumns.put("channel", new Atom<>(channel));
updateColumns.put("country", new Atom<>(country)); updateColumns.put("country", new Atom<>(country));
@SuppressWarnings("unchecked") @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("hw_config", hwConfigMap);
updateColumns.put("bcn_int", new Atom<>(beaconInterval)); updateColumns.put("bcn_int", new Atom<>(beaconInterval));
updateColumns.put("enabled", new Atom<>(enabled)); updateColumns.put("enabled", new Atom<>(enabled));
@@ -268,7 +264,8 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
configureCustomOptionsMap(maxNumClients, updateColumns); configureCustomOptionsMap(maxNumClients, updateColumns);
setTxAndRxChainmask(mimoMode, updateColumns,tableColumns); setTxAndRxChainmask(mimoMode, updateColumns,tableColumns);
if (vifUuidsForRadio.size() > 0) { 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); updateColumns.put("vif_configs", vifConfigUuids);
} }
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
@@ -276,11 +273,12 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
} }
void configureCustomOptionsMap(int maxNumClients, Map<String, Value> updateColumns) { 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)); customOptions.put("max_clients", String.valueOf(maxNumClients));
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
com.vmware.ovsdb.protocol.operation.notation.Map<String, String> customOptionsMap = com.vmware.ovsdb.protocol.operation.notation.Map.of(customOptions); com.vmware.ovsdb.protocol.operation.notation.Map<String, String> customOptionsMap = com.vmware.ovsdb.protocol.operation.notation.Map
updateColumns.put("custom_options", customOptionsMap); .of(customOptions);
updateColumns.put("custom_options", customOptionsMap);
} }
void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) { void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) {
@@ -289,42 +287,18 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
* Note values 0, 1 remain unchanged * Note values 0, 1 remain unchanged
* *
* mimoMode bitmask * mimoMode bitmask
* 0 0 * 0 0
* 1 1 1 * 1 1
* 2 3 2 * 2 3
* 3 7 4 * 3 7
* 4 15 8 * 4 15
* 5 31 16
* 6 63 32
* 7 127 64
* 8 255 128
*/ */
switch (mimoMode) { if (mimoMode == 2) {
case 0: // unchanged mimoMode = 3;
break; } else if (mimoMode == 3) {
case 1: // unchanged mimoMode = 7;
break; } else if (mimoMode == 4) {
case 2: mimoMode = 15;
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;
} }
updateColumns.put("tx_chainmask", new Atom<>(mimoMode)); updateColumns.put("tx_chainmask", new Atom<>(mimoMode));
if (tableColumns.contains("rx_chainmask")) { if (tableColumns.contains("rx_chainmask")) {

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.ovsdb.dao; package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import java.util.ArrayList; 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.ErrorResult;
import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
@Component @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) private void configureRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig, List<Operation> operations)
throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException { throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException {
// TODO: remove the schema check when AP load available for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails())
DatabaseSchema databaseSchema = ovsdbClient.getSchema(ovsdbName).get(); .getRadiusProxyConfigurations()) {
for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails()).getRadiusProxyConfigurations()) {
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
if (rsc.getServer() != null) updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress())); getCertificateUrls(rsc, updateColumns);
if (rsc.getName() != null) updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
updateColumns.put("radius_config_name", new Atom<>(rsc.getName())); updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));
if (rsc.getPort() != null) updateColumns.put("port", new Atom<>(rsc.getPort()));
updateColumns.put("port", new Atom<>(rsc.getPort())); updateColumns.put("realm", Set.of(rsc.getRealm()));
if (rsc.getRealm() != null) updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec()));
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));
}
}
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(radiusConfigDbTable, row)); operations.add(new Insert(radiusConfigDbTable, row));
} }
@@ -165,7 +104,7 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
} }
if (!caCertFilestoreUrl.contains("filestore")) { if (!caCertFilestoreUrl.contains("filestore")) {
caCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getCaCert().getApExportUrl(); caCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getCaCert().getApExportUrl();
} }
updateColumns.put("client_cert", new Atom<>(clientCertFilestoreUrl)); updateColumns.put("client_cert", new Atom<>(clientCertFilestoreUrl));
updateColumns.put("client_key", new Atom<>(clientKeyFilestoreUrl)); updateColumns.put("client_key", new Atom<>(clientKeyFilestoreUrl));
updateColumns.put("ca_cert", new Atom<>(caCertFilestoreUrl)); updateColumns.put("ca_cert", new Atom<>(caCertFilestoreUrl));
@@ -185,7 +124,8 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
LOG.info("removeRadiusConfigurations {}", res.toString()); LOG.info("removeRadiusConfigurations {}", res.toString());
} else if (res instanceof ErrorResult) { } else if (res instanceof ErrorResult) {
LOG.error("removeRadiusConfigurations error {}", (res)); 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"); LOG.info("Removed all radius and realm configurations");

View File

@@ -1,4 +1,3 @@
package com.telecominfraproject.wlan.opensync.ovsdb.dao; package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import java.util.ArrayList; import java.util.ArrayList;
@@ -14,7 +13,6 @@ import java.util.concurrent.TimeoutException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.AutoOrManualValue; 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.RadioBestApSettings;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.SourceType; import com.telecominfraproject.wlan.core.model.equipment.SourceType;
@@ -49,9 +47,9 @@ import com.vmware.ovsdb.service.OvsdbClient;
public class OvsdbRrmConfig extends OvsdbDaoBase { public class OvsdbRrmConfig extends OvsdbDaoBase {
void configureWifiRrm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) { void configureWifiRrm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment().getDetails(); ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment()
.getDetails();
RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails(); RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails();
for (RadioType radioType : apElementConfig.getRadioMap().keySet()) { for (RadioType radioType : apElementConfig.getRadioMap().keySet()) {
String freqBand = null; String freqBand = null;
if (radioType == RadioType.is2dot4GHz) { if (radioType == RadioType.is2dot4GHz) {
@@ -71,24 +69,28 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
ElementRadioConfiguration elementRadioConfig = apElementConfig.getRadioMap().get(radioType); ElementRadioConfiguration elementRadioConfig = apElementConfig.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType); RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) { 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(); boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int backupChannel = elementRadioConfig.getActiveBackupChannel(autoChannelSelection); int backupChannel = elementRadioConfig.getActiveBackupChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeBackupChannel {}",
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection(); autoChannelSelection, backupChannel);
Integer probeResponseThresholdDb = null;
Integer clientDisconnectThresholdDb = null; AutoOrManualValue probeResponseThresholdDb = null;
AutoOrManualValue clientDisconnectThresholdDb = null;
if (elementRadioConfig.getProbeResponseThresholdDb() != null) { if (elementRadioConfig.getProbeResponseThresholdDb() != null) {
probeResponseThresholdDb = getSourcedValue(autoCellSizeSelection, rfElementConfig.getProbeResponseThresholdDb(), probeResponseThresholdDb = getSourcedValue(elementRadioConfig.getProbeResponseThresholdDb().getSource(),
elementRadioConfig.getProbeResponseThresholdDb().getValue()); rfElementConfig.getProbeResponseThresholdDb(),
elementRadioConfig.getProbeResponseThresholdDb().getValue());
} }
if (elementRadioConfig.getClientDisconnectThresholdDb() != null) { if (elementRadioConfig.getClientDisconnectThresholdDb() != null) {
clientDisconnectThresholdDb = getSourcedValue(autoCellSizeSelection, rfElementConfig.getClientDisconnectThresholdDb(), clientDisconnectThresholdDb = getSourcedValue(
elementRadioConfig.getClientDisconnectThresholdDb().getValue()); elementRadioConfig.getClientDisconnectThresholdDb().getSource(),
rfElementConfig.getClientDisconnectThresholdDb(),
elementRadioConfig.getClientDisconnectThresholdDb().getValue());
} }
RadioConfiguration radioConfig = apElementConfig.getAdvancedRadioMap().get(radioType); RadioConfiguration radioConfig = apElementConfig.getAdvancedRadioMap().get(radioType);
@@ -96,30 +98,29 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
ManagementRate managementRate = null; ManagementRate managementRate = null;
RadioBestApSettings bestApSettings = null; RadioBestApSettings bestApSettings = null;
if (radioConfig != null) { if (radioConfig != null) {
if (radioConfig.getMulticastRate() != null) { if (radioConfig.getMulticastRate() != null) {
multicastRate = autoCellSizeSelection ? radioConfig.getMulticastRate().getValue() : rfElementConfig.getMulticastRate(); multicastRate = radioConfig.getMulticastRate().getSource() == SourceType.profile
} ? rfElementConfig.getMulticastRate()
: radioConfig.getMulticastRate().getValue();
if (radioConfig.getManagementRate() != null) { }
managementRate = autoCellSizeSelection ? radioConfig.getManagementRate().getValue() : rfElementConfig.getManagementRate();
} if (radioConfig.getManagementRate() != null) {
managementRate = radioConfig.getManagementRate().getSource() == SourceType.profile
if (radioConfig.getBestApSettings() != null) { ? rfElementConfig.getManagementRate()
bestApSettings = radioConfig.getBestApSettings().getSource() == SourceType.profile ? rfElementConfig.getBestApSettings() : radioConfig.getManagementRate().getValue();
: radioConfig.getBestApSettings().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) { if (freqBand != null) {
try { try {
configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb, clientDisconnectThresholdDb, managementRate, configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb,
bestApSettings, multicastRate, obssHopMode, noiseFloorThresholdInDB, noiseFloorThresholdTimeInSeconds, nonWifiThresholdInPercentage, clientDisconnectThresholdDb, managementRate, bestApSettings, multicastRate);
nonWifiThresholdTimeInSeconds);
} catch (OvsdbClientException e) { } catch (OvsdbClientException e) {
LOG.error("configureRrm failed with OvsdbClient exception.", e); LOG.error("configureRrm failed with OvsdbClient exception.", e);
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -136,10 +137,10 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} }
} }
void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel, Integer probeResponseThreshold, Integer clientDisconnectThreshold, void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate, OBSSHopMode obssHopMode, AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
int noiseFloorThresholdInDB, int noiseFloorThresholdTimeInSeconds, int nonWifiThresholdInPercentage, int nonWifiThresholdTimeInSeconds) ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName); CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get(); DatabaseSchema databaseSchema = cfDatabaseSchema.get();
@@ -148,28 +149,29 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("freq_band", new Atom<>(freqBand));
updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand)); if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand));
if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel)); if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (columnNames.contains("mcast_rate")) { if (columnNames.contains("mcast_rate")) {
if (multicastRate == null || multicastRate == MulticastRate.auto) { if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateColumns.put("mcast_rate", new Atom<>(0)); updateColumns.put("mcast_rate", new Atom<>(0));
} else { } else {
updateColumns.put("mcast_rate", new Atom<>(multicastRate.getId())); updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
} }
} }
if (columnNames.contains("probe_resp_threshold")) { if (columnNames.contains("probe_resp_threshold")) {
if (probeResponseThreshold == null) { if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else { } else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue())); updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
} }
} }
if (columnNames.contains("client_disconnect_threshold")) { if (columnNames.contains("client_disconnect_threshold")) {
if (clientDisconnectThreshold == null) { if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else { } else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue())); updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
} }
} }
if (columnNames.contains("beacon_rate")) { if (columnNames.contains("beacon_rate")) {
@@ -179,7 +181,6 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10)); updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
} }
} }
if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) { if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) {
if (bestApSettings == null) { if (bestApSettings == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
@@ -197,21 +198,6 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} }
} }
} }
if (obssHopMode != null && columnNames.contains("obss_hop_mode"))
{
updateColumns.put("obss_hop_mode", new Atom<>(obssHopMode.equals(OBSSHopMode.NON_WIFI) ? 1 : 2));
}
if (columnNames.contains("noise_floor_thresh"))
updateColumns.put("noise_floor_thresh", new Atom<>(noiseFloorThresholdInDB));
if (columnNames.contains("noise_floor_time"))
updateColumns.put("noise_floor_time", new Atom<>(noiseFloorThresholdTimeInSeconds));
if (columnNames.contains("non_wifi_thresh"))
updateColumns.put("non_wifi_thresh", new Atom<>(nonWifiThresholdInPercentage));
if (columnNames.contains("non_wifi_time"))
updateColumns.put("non_wifi_time", new Atom<>(nonWifiThresholdTimeInSeconds));
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(wifiRrmConfigDbTable, row)); operations.add(new Insert(wifiRrmConfigDbTable, row));
@@ -243,17 +229,8 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
return AutoOrManualValue.createManualInstance(equipmentValue); return AutoOrManualValue.createManualInstance(equipmentValue);
} }
// For cell size related attributes, the “manual" mode is not supported any more, void processNewChannelsRequest(OvsdbClient ovsdbClient, Map<RadioType, Integer> backupChannelMap,
// user can create a new RF profile with desired values to achieve it Map<RadioType, Integer> primaryChannelMap) {
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) {
LOG.info("OvsdbDao::processNewChannelsRequest backup {} primary {}", backupChannelMap, primaryChannelMap); LOG.info("OvsdbDao::processNewChannelsRequest backup {} primary {}", backupChannelMap, primaryChannelMap);
try { try {
@@ -295,7 +272,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} }
} }
void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributesMap) { void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributesMap) {
LOG.info("OvsdbDao::processCellSizeAttributesRequest cellSizeAttributes {}", cellSizeAttributesMap); LOG.info("OvsdbDao::processCellSizeAttributesRequest cellSizeAttributes {}", cellSizeAttributesMap);
@@ -307,7 +284,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
List<Condition> conditions = new ArrayList<>(); List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand))); conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
Map<String, Value> updateRrmColumns = new HashMap<>(); Map<String, Value> updateRrmColumns = new HashMap<>();
CellSizeAttributes cellSizeAttributes = c.getValue(); CellSizeAttributes cellSizeAttributes = c.getValue();
MulticastRate multicastRate = cellSizeAttributes.getMulticastRate(); MulticastRate multicastRate = cellSizeAttributes.getMulticastRate();
if (multicastRate == null || multicastRate == MulticastRate.auto) { if (multicastRate == null || multicastRate == MulticastRate.auto) {
@@ -322,7 +299,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} else { } else {
updateRrmColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue())); updateRrmColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
} }
Integer clientDisconnectThreshold = cellSizeAttributes.getClientDisconnectThresholdDb(); Integer clientDisconnectThreshold = cellSizeAttributes.getClientDisconnectThresholdDb();
if (clientDisconnectThreshold == null) { if (clientDisconnectThreshold == null) {
updateRrmColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateRrmColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
@@ -336,13 +313,13 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
} else { } else {
updateRrmColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10)); updateRrmColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
} }
Row rowRrm = new Row(updateRrmColumns); Row rowRrm = new Row(updateRrmColumns);
operations.add(new Update(wifiRrmConfigDbTable, conditions, rowRrm)); operations.add(new Update(wifiRrmConfigDbTable, conditions, rowRrm));
Map<String, Value> updateRadioColumns = new HashMap<>(); Map<String, Value> updateRadioColumns = new HashMap<>();
Integer txPower = cellSizeAttributes.getEirpTxPowerDb(); Integer txPower = cellSizeAttributes.getEirpTxPowerDb();
if (txPower != null && txPower > 0) { if (txPower > 0) {
updateRadioColumns.put("tx_power", new Atom<>(txPower)); updateRadioColumns.put("tx_power", new Atom<>(txPower));
} else { } else {
updateRadioColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateRadioColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
@@ -356,14 +333,15 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
for (OperationResult res : result) { for (OperationResult res : result) {
LOG.info("Op Result {}", res); LOG.info("Op Result {}", res);
if (res instanceof InsertResult) { if (res instanceof InsertResult) {
LOG.info("processCellSizeAttributesRequest insert new row result {}", (res)); LOG.info("processCellSizeAttributesRequest insert new row result {}", (res));
// for insert, make sure it is actually in the table // for insert, make sure it is actually in the table
confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable); confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable);
} else if (res instanceof ErrorResult) { } else if (res instanceof ErrorResult) {
LOG.error("processCellSizeAttributesRequest error {}", (res)); 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)); 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("radproxy", useRadiusProxy ? "1" : "0");
customOptions.put("proxy_arp", enableProxyArpForHotspot ? "1" : "0");
} }
/** /**
@@ -252,14 +251,13 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
* @param updateColumns * @param updateColumns
* @param dynamicVlan * @param dynamicVlan
* @param useRadiusProxy * @param useRadiusProxy
* @param enableProxyArpForHotspot TODO
*/ */
void configureCustomOptionsForSsid(OvsdbClient ovsdbClient, boolean enable80211k, boolean enable80211r, boolean rateLimitEnable, int ssidDlLimit, 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, 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<>(); Map<String, String> customOptions = new HashMap<>();
configureCustomOptionsForUseRadiusProxyAndHotspot(useRadiusProxy, enableProxyArpForHotspot, customOptions); configureCustomOptionsForUseRadiusProxy(useRadiusProxy, customOptions);
configureCustomOptionsForRatesAndLimits(rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold, 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, 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, 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, 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<>(); Map<String, Value> updateColumns = new HashMap<>();
// If we are doing a NAT SSID, no bridge, else yes // 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); com.vmware.ovsdb.protocol.operation.notation.Map<String, String> securityMap = com.vmware.ovsdb.protocol.operation.notation.Map.of(security);
updateColumns.put("security", securityMap); updateColumns.put("security", securityMap);
configureCustomOptionsForSsid(ovsdbClient, enable80211k, enable80211r, rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, 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); updateBlockList(updateColumns, macBlockList);
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(wifiVifConfigDbTable, row)); operations.add(new Insert(wifiVifConfigDbTable, row));
@@ -445,7 +443,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if (radioConfiguration != null) { if (radioConfiguration != null) {
dtimPeriod = radioConfiguration.getDtimPeriod(); dtimPeriod = radioConfiguration.getDtimPeriod();
uapsdEnabled = radioConfiguration.getUapsdState() == StateSetting.enabled; 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 String minHwMode = "11n"; // min_hw_mode is 11n
@@ -552,15 +550,11 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if (ssidConfig.getUseRadiusProxy() != null) { if (ssidConfig.getUseRadiusProxy() != null) {
useRadiusProxy = ssidConfig.getUseRadiusProxy(); useRadiusProxy = ssidConfig.getUseRadiusProxy();
} }
boolean enableProxyArpForHotspot = false;
if (ssidConfig.getEnableProxyArpForHotspot() != null) {
enableProxyArpForHotspot = ssidConfig.getEnableProxyArpForHotspot();
}
try { try {
configureSingleSsid(ovsdbClient, ifName, ssidConfig.getSsid(), ssidBroadcast, security, vlanId, rrmEnabled, enable80211r, mobilityDomain, configureSingleSsid(ovsdbClient, ifName, ssidConfig.getSsid(), ssidBroadcast, security, vlanId, rrmEnabled, enable80211r, mobilityDomain,
enable80211v, enable80211k, minHwMode, enabled, keyRefresh, uapsdEnabled, apBridge, ssidConfig.getForwardMode(), macBlockList, enable80211v, enable80211k, minHwMode, enabled, keyRefresh, uapsdEnabled, apBridge, ssidConfig.getForwardMode(), macBlockList,
rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold, dtimPeriod, captiveMap, 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); 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)) { if ((ssidConfig.getCaptivePortalId() == profileCaptive.getId()) && (profileCaptive.getDetails() != null)) {
CaptivePortalConfiguration captiveProfileDetails = ((CaptivePortalConfiguration) profileCaptive.getDetails()); CaptivePortalConfiguration captiveProfileDetails = ((CaptivePortalConfiguration) profileCaptive.getDetails());
// +#define SCHEMA_CONSTS_PAGE_TITLE "page_title"
if (captiveProfileDetails.getBrowserTitle() != null) { if (captiveProfileDetails.getBrowserTitle() != null) {
captiveMap.put("session_timeout", String.valueOf(captiveProfileDetails.getSessionTimeoutInMinutes())); captiveMap.put("session_timeout", String.valueOf(captiveProfileDetails.getSessionTimeoutInMinutes()));
captiveMap.put("page_title", captiveProfileDetails.getBrowserTitle());
} }
if (captiveProfileDetails.getAuthenticationType().equals(CaptivePortalAuthenticationType.radius)) { if (captiveProfileDetails.getAuthenticationType().equals(CaptivePortalAuthenticationType.radius)) {
Optional<Profile> optional = Optional<Profile> optional =
@@ -761,9 +757,6 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
case "wpa3MixedEAP": case "wpa3MixedEAP":
opensyncSecurityMode = "WPA3-EAP"; opensyncSecurityMode = "WPA3-EAP";
break; break;
case "wpa3OnlyEAP192":
opensyncSecurityMode = "WPA3-EAP-192";
break;
} }
return opensyncSecurityMode; return opensyncSecurityMode;
} }
@@ -782,10 +775,15 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails()); RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails());
RadiusServer rServer = profileDetails.getPrimaryRadiusAccountingServer(); RadiusServer rServer = profileDetails.getPrimaryRadiusAccountingServer();
if (rServer != null) { if (rServer != null) {
security.put("radius_acct_ip", rServer.getIpAddress() != null ? rServer.getIpAddress().getHostAddress() : null); if (ssidConfig.getUseRadiusProxy()) {
security.put("radius_acct_port", rServer.getPort() != null ? String.valueOf(rServer.getPort()) : null); security.put("radius_acct_ip", "127.0.0.1");
security.put("radius_acct_secret", rServer.getSecret()); 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 (ssidConfig.getRadiusAcountingServiceInterval() != null && ssidConfig.getRadiusAcountingServiceInterval() > 0) {
// if the value is present, use the // if the value is present, use the
// radius_acct_interval // radius_acct_interval
@@ -818,11 +816,18 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
Profile profileRadius = radiusProfileList.get(0); Profile profileRadius = radiusProfileList.get(0);
RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails()); RadiusProfile profileDetails = ((RadiusProfile) profileRadius.getDetails());
RadiusServer radiusServer = profileDetails.getPrimaryRadiusAuthServer(); RadiusServer radiusServer = profileDetails.getPrimaryRadiusAuthServer();
security.put("radius_server_ip", radiusServer.getIpAddress() != null ? radiusServer.getIpAddress().getHostAddress() : null); if (ssidConfig.getUseRadiusProxy()) {
security.put("radius_server_port", radiusServer.getPort() != null ? String.valueOf(radiusServer.getPort()) : null); security.put("radius_server_ip", "127.0.0.1");
security.put("radius_server_secret", radiusServer.getSecret()); 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"), 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")); security.get("radius_server_port"), security.get("radius_server_secret"));
} else { } else {
LOG.warn("Could not find radius profile {} in {}", ssidConfig.getRadiusServiceId(), opensyncApConfig.getRadiusProfiles()); LOG.warn("Could not find radius profile {} in {}", ssidConfig.getRadiusServiceId(), opensyncApConfig.getRadiusProfiles());
} }
@@ -865,41 +870,28 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
case "wpa2OnlyEAP": case "wpa2OnlyEAP":
case "wpa2OnlyRadius": case "wpa2OnlyRadius":
security.put("mode", "2"); security.put("mode", "2");
if (!ssidConfig.getUseRadiusProxy()) { getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusConfiguration(opensyncApConfig, ssidConfig, security); getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
break; break;
case "wpa3OnlyEAP": case "wpa3OnlyEAP":
security.put("mode", "3"); security.put("mode", "3");
if (!ssidConfig.getUseRadiusProxy()) { getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusConfiguration(opensyncApConfig, ssidConfig, security); getRadiusAccountingConfiguration(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);
}
break; break;
case "wpa2EAP": case "wpa2EAP":
case "wpa2Radius": case "wpa2Radius":
case "wpa3MixedEAP": case "wpa3MixedEAP":
security.put("mode", "mixed"); security.put("mode", "mixed");
if (!ssidConfig.getUseRadiusProxy()) { getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusConfiguration(opensyncApConfig, ssidConfig, security); getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
break; break;
case "wpaEAP": case "wpaEAP":
case "wpaRadius": case "wpaRadius":
security.put("mode", "1"); security.put("mode", "1");
if (!ssidConfig.getUseRadiusProxy()) { getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusConfiguration(opensyncApConfig, ssidConfig, security); getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
break; break;
} }
} }

View File

@@ -63,6 +63,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
provisionWifiStatsConfigClient(radioConfigs, ovsdbGet.getProvisionedWifiStatsConfigs(ovsdbClient), provisionWifiStatsConfigClient(radioConfigs, ovsdbGet.getProvisionedWifiStatsConfigs(ovsdbClient),
operations); operations);
if (!operations.isEmpty()) { if (!operations.isEmpty()) {
LOG.debug("Sending batch of operations : {} ", operations); LOG.debug("Sending batch of operations : {} ", operations);
@@ -77,7 +78,11 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
} }
} }
} }
// TODO: when schema support is added, these should be part of the
// bulk provisioning operation above.
provisionVideoVoiceStats(ovsdbClient); provisionVideoVoiceStats(ovsdbClient);
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -243,6 +248,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("report_type", new Atom<>("raw")); rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("sampling_interval", new Atom<>(10)); rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("stats_type", new Atom<>("client")); rowColumns.put("stats_type", new Atom<>("client"));
rowColumns.put("survey_interval_ms", new Atom<>(65));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -252,7 +258,6 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
} }
void provisionWifiStatsConfigNeighbor(Map<String, Set<Integer>> allowedChannels, void provisionWifiStatsConfigNeighbor(Map<String, Set<Integer>> allowedChannels,
Map<String, WifiRadioConfigInfo> radioConfigs, Map<String, WifiStatsConfigInfo> provisionedWifiStatsConfigs, Map<String, WifiRadioConfigInfo> radioConfigs, Map<String, WifiStatsConfigInfo> provisionedWifiStatsConfigs,
List<Operation> operations) { List<Operation> operations) {
@@ -275,7 +280,6 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds)); rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor")); rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("off-chan")); rowColumns.put("survey_type", new Atom<>("off-chan"));
rowColumns.put("survey_interval_ms", new Atom<>(10));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -295,7 +299,6 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds)); rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor")); rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("on-chan")); rowColumns.put("survey_type", new Atom<>("on-chan"));
rowColumns.put("survey_interval_ms", new Atom<>(0));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -351,8 +354,8 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("report_type", new Atom<>("raw")); rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("stats_type", new Atom<>("survey")); rowColumns.put("stats_type", new Atom<>("survey"));
rowColumns.put("survey_type", new Atom<>("off-chan")); rowColumns.put("survey_type", new Atom<>("off-chan"));
rowColumns.put("sampling_interval", new Atom<>(0)); rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("survey_interval_ms", new Atom<>(10)); rowColumns.put("survey_interval_ms", new Atom<>(50));
rowColumns.put("threshold", thresholds); rowColumns.put("threshold", thresholds);
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));

View File

@@ -13,7 +13,6 @@ public class OvsdbStringConstants {
public static final String FW_IMAGE_NAME_KEY = "FW_IMAGE_NAME"; public static final String FW_IMAGE_NAME_KEY = "FW_IMAGE_NAME";
public static final String FW_IMAGE_ACTIVE_KEY = "FW_IMAGE_ACTIVE"; public static final String FW_IMAGE_ACTIVE_KEY = "FW_IMAGE_ACTIVE";
public static final String FW_IMAGE_INACTIVE_KEY = "FW_IMAGE_INACTIVE"; public static final String FW_IMAGE_INACTIVE_KEY = "FW_IMAGE_INACTIVE";
public static final String FW_IMAGE_DATE = "DATE";
// AWLAN_Node values which can be placed in firmware_url column to trigger // AWLAN_Node values which can be placed in firmware_url column to trigger
// behavior other than firmware download/flash // behavior other than firmware download/flash