diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java index 414c058..f841428 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java @@ -31,16 +31,13 @@ import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface; import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration; import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration; import com.telecominfraproject.wlan.equipment.models.Equipment; -import com.telecominfraproject.wlan.equipment.models.StateSetting; import com.telecominfraproject.wlan.location.models.Location; import com.telecominfraproject.wlan.location.service.LocationServiceInterface; import com.telecominfraproject.wlan.opensync.external.integration.controller.OpensyncCloudGatewayController; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState; -import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState; -import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPSsidConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients; @@ -67,6 +64,8 @@ import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolSta import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData; 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.ActiveBSSIDs; import com.telecominfraproject.wlan.status.models.Status; import com.telecominfraproject.wlan.status.models.StatusCode; import com.telecominfraproject.wlan.status.models.StatusDataType; @@ -164,15 +163,15 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra } try { - + if (ce == null) { - + ce = new Equipment(); ce.setCustomerId(autoProvisionedCustomerId); ce.setInventoryId(apId); ce.setEquipmentType(EquipmentType.AP); ce.setName(apId); - + ce.setSerial(connectNodeInfo.serialNumber); ApElementConfiguration apElementConfig = ApElementConfiguration.createWithDefaults(); apElementConfig.setDeviceName(apId); @@ -183,8 +182,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra ce = equipmentServiceInterface.create(ce); } - Profile apProfile = profileServiceInterface - .getOrNull(ce.getProfileId()); + Profile apProfile = profileServiceInterface.getOrNull(ce.getProfileId()); if (apProfile == null) { @@ -208,21 +206,20 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra apProfile = profileServiceInterface.create(apProfile); - //update AP only if the apProfile was missing + // update AP only if the apProfile was missing ce.setProfileId(apProfile.getId()); ce = equipmentServiceInterface.update(ce); } updateApStatus(ce, connectNodeInfo); - + // register equipment routing record EquipmentRoutingRecord equipmentRoutingRecord = new EquipmentRoutingRecord(); equipmentRoutingRecord.setGatewayId(gatewayController.getRegisteredGwId()); equipmentRoutingRecord.setCustomerId(ce.getCustomerId()); equipmentRoutingRecord.setEquipmentId(ce.getId()); equipmentRoutingRecord = routingServiceInterface.create(equipmentRoutingRecord); - - + gatewayController.registerCustomerEquipment(ce.getName(), ce.getCustomerId(), ce.getId()); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); @@ -242,133 +239,136 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra private void updateApStatus(Equipment ce, ConnectNodeInfo connectNodeInfo) { try { - - Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_ADMIN); - if (statusRecord == null) { - statusRecord = new Status(); - statusRecord.setCustomerId(ce.getCustomerId()); - statusRecord.setEquipmentId(ce.getId()); - - EquipmentAdminStatusData statusData = new EquipmentAdminStatusData(); - statusRecord.setDetails(statusData); - } - ((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal); - // Update the equipment admin status - statusRecord = statusServiceInterface.update(statusRecord); + Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), + StatusDataType.EQUIPMENT_ADMIN); + if (statusRecord == null) { + statusRecord = new Status(); + statusRecord.setCustomerId(ce.getCustomerId()); + statusRecord.setEquipmentId(ce.getId()); - // update LAN status - nothing to do here for now - statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.LANINFO); - if (statusRecord == null) { - statusRecord = new Status(); - statusRecord.setCustomerId(ce.getCustomerId()); - statusRecord.setEquipmentId(ce.getId()); - - EquipmentLANStatusData statusData = new EquipmentLANStatusData(); - statusRecord.setDetails(statusData); - } - - Map vlanStatusDataMap = new HashMap<>(); - ((EquipmentLANStatusData) statusRecord.getDetails()).setVlanStatusDataMap(vlanStatusDataMap); - - statusServiceInterface.update(statusRecord); - - // update protocol status - statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.PROTOCOL); - if (statusRecord == null) { - statusRecord = new Status(); - statusRecord.setCustomerId(ce.getCustomerId()); - statusRecord.setEquipmentId(ce.getId()); - - EquipmentProtocolStatusData statusData = new EquipmentProtocolStatusData(); - statusRecord.setDetails(statusData); - } - - EquipmentProtocolStatusData protocolStatusData = ((EquipmentProtocolStatusData) statusRecord - .getDetails()); - protocolStatusData.setPoweredOn(true); - protocolStatusData.setCloudProtocolVersion("1100"); - protocolStatusData.setProtocolState(EquipmentProtocolState.ready); - protocolStatusData.setBandPlan("FCC"); - protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress)); - protocolStatusData.setCloudCfgDataVersion(42L); - protocolStatusData.setReportedCfgDataVersion(42L); - protocolStatusData.setCountryCode("CA"); - protocolStatusData.setReportedCC(CountryCode.ca); - protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion); - protocolStatusData.setReportedSwVersion(connectNodeInfo.firmwareVersion); - protocolStatusData.setReportedSwAltVersion(connectNodeInfo.firmwareVersion); - try { + EquipmentAdminStatusData statusData = new EquipmentAdminStatusData(); + statusRecord.setDetails(statusData); + } + + ((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal); + // Update the equipment admin status + statusRecord = statusServiceInterface.update(statusRecord); + + // update LAN status - nothing to do here for now + statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.LANINFO); + if (statusRecord == null) { + statusRecord = new Status(); + statusRecord.setCustomerId(ce.getCustomerId()); + statusRecord.setEquipmentId(ce.getId()); + + EquipmentLANStatusData statusData = new EquipmentLANStatusData(); + statusRecord.setDetails(statusData); + } + + Map vlanStatusDataMap = new HashMap<>(); + ((EquipmentLANStatusData) statusRecord.getDetails()).setVlanStatusDataMap(vlanStatusDataMap); + + statusServiceInterface.update(statusRecord); + + // update protocol status + statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.PROTOCOL); + if (statusRecord == null) { + statusRecord = new Status(); + statusRecord.setCustomerId(ce.getCustomerId()); + statusRecord.setEquipmentId(ce.getId()); + + EquipmentProtocolStatusData statusData = new EquipmentProtocolStatusData(); + statusRecord.setDetails(statusData); + } + + EquipmentProtocolStatusData protocolStatusData = ((EquipmentProtocolStatusData) statusRecord.getDetails()); + protocolStatusData.setPoweredOn(true); + protocolStatusData.setCloudProtocolVersion("1100"); + protocolStatusData.setProtocolState(EquipmentProtocolState.ready); + protocolStatusData.setBandPlan("FCC"); + protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress)); + protocolStatusData.setCloudCfgDataVersion(42L); + protocolStatusData.setReportedCfgDataVersion(42L); + protocolStatusData.setCountryCode("CA"); + protocolStatusData.setReportedCC(CountryCode.ca); + protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion); + protocolStatusData.setReportedSwVersion(connectNodeInfo.firmwareVersion); + protocolStatusData.setReportedSwAltVersion(connectNodeInfo.firmwareVersion); + try { protocolStatusData.setReportedIpV4Addr(InetAddress.getByName(connectNodeInfo.ipV4Address)); } catch (UnknownHostException e) { // do nothing here } - if (connectNodeInfo.macAddress != null && MacAddress.valueOf(connectNodeInfo.macAddress) != null) { - protocolStatusData.setReportedMacAddr(MacAddress.valueOf(connectNodeInfo.macAddress)); - } - protocolStatusData.setReportedSku(connectNodeInfo.skuNumber); - protocolStatusData.setSerialNumber(connectNodeInfo.serialNumber); - protocolStatusData.setSystemName(connectNodeInfo.model); - - statusServiceInterface.update(statusRecord); - - statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.FIRMWARE); - if (statusRecord == null) { - statusRecord = new Status(); - statusRecord.setCustomerId(ce.getCustomerId()); - statusRecord.setEquipmentId(ce.getId()); - EquipmentUpgradeStatusData statusData = new EquipmentUpgradeStatusData(); - statusRecord.setDetails(statusData); - } - EquipmentUpgradeStatusData fwUpgradeStatusData = ((EquipmentUpgradeStatusData) statusRecord - .getDetails()); - fwUpgradeStatusData.setActiveSwVersion(connectNodeInfo.firmwareVersion); - fwUpgradeStatusData.setAlternateSwVersion(connectNodeInfo.firmwareVersion); - fwUpgradeStatusData.setTargetSwVersion(connectNodeInfo.firmwareVersion); - fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date); - - statusServiceInterface.update(statusRecord); - - // TODO: - // equipmentStatusInterface.updateNetworkAdminStatus(networkAdminStatusRecord); - // dtop: this one populates traffic capacity and usage dial on the - // main dashboard - // from APDemoMetric properties getPeriodLengthSec, getRxBytes2G, - // getTxBytes2G, getRxBytes5G, getTxBytes5G - Status networkAdminStatusRec = statusServiceInterface.getOrNull(ce.getCustomerId(), 0, StatusDataType.NETWORK_ADMIN); - if (networkAdminStatusRec == null) { - networkAdminStatusRec = new Status(); - networkAdminStatusRec.setCustomerId(ce.getCustomerId()); - networkAdminStatusRec.setEquipmentId(0); - NetworkAdminStatusData statusData = new NetworkAdminStatusData(); - networkAdminStatusRec.setDetails(statusData); - } - - NetworkAdminStatusData netAdminStatusData = (NetworkAdminStatusData) networkAdminStatusRec.getDetails(); - netAdminStatusData.setDhcpStatus(StatusCode.normal); - netAdminStatusData.setCloudLinkStatus(StatusCode.normal); - netAdminStatusData.setDnsStatus(StatusCode.normal); - networkAdminStatusRec.setDetails(netAdminStatusData); - - statusServiceInterface.update(networkAdminStatusRec); - - Status networkAggStatusRec = statusServiceInterface.getOrNull(ce.getCustomerId(), 0, StatusDataType.NETWORK_AGGREGATE); - if (networkAggStatusRec == null) { - networkAggStatusRec = new Status(); - networkAggStatusRec.setCustomerId(ce.getCustomerId()); - NetworkAggregateStatusData naStatusData = new NetworkAggregateStatusData(); - networkAggStatusRec.setDetails(naStatusData); - } - - UserDetails userDetails = ((NetworkAggregateStatusData) networkAggStatusRec.getDetails()).getUserDetails(); - LOG.debug("UserDetails {}", userDetails.toPrettyString()); - - statusServiceInterface.update(networkAggStatusRec); + if (connectNodeInfo.macAddress != null && MacAddress.valueOf(connectNodeInfo.macAddress) != null) { + protocolStatusData.setReportedMacAddr(MacAddress.valueOf(connectNodeInfo.macAddress)); + } + protocolStatusData.setReportedSku(connectNodeInfo.skuNumber); + protocolStatusData.setSerialNumber(connectNodeInfo.serialNumber); + protocolStatusData.setSystemName(connectNodeInfo.model); - } catch (Exception e) { - // do nothing - LOG.debug("Exception in updateApStatus", e); - } + statusServiceInterface.update(statusRecord); + + statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.FIRMWARE); + if (statusRecord == null) { + statusRecord = new Status(); + statusRecord.setCustomerId(ce.getCustomerId()); + statusRecord.setEquipmentId(ce.getId()); + EquipmentUpgradeStatusData statusData = new EquipmentUpgradeStatusData(); + statusRecord.setDetails(statusData); + } + EquipmentUpgradeStatusData fwUpgradeStatusData = ((EquipmentUpgradeStatusData) statusRecord.getDetails()); + fwUpgradeStatusData.setActiveSwVersion(connectNodeInfo.firmwareVersion); + fwUpgradeStatusData.setAlternateSwVersion(connectNodeInfo.firmwareVersion); + fwUpgradeStatusData.setTargetSwVersion(connectNodeInfo.firmwareVersion); + fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date); + + statusServiceInterface.update(statusRecord); + + // TODO: + // equipmentStatusInterface.updateNetworkAdminStatus(networkAdminStatusRecord); + // dtop: this one populates traffic capacity and usage dial on the + // main dashboard + // from APDemoMetric properties getPeriodLengthSec, getRxBytes2G, + // getTxBytes2G, getRxBytes5G, getTxBytes5G + Status networkAdminStatusRec = statusServiceInterface.getOrNull(ce.getCustomerId(), 0, + StatusDataType.NETWORK_ADMIN); + if (networkAdminStatusRec == null) { + networkAdminStatusRec = new Status(); + networkAdminStatusRec.setCustomerId(ce.getCustomerId()); + networkAdminStatusRec.setEquipmentId(ce.getId()); + NetworkAdminStatusData statusData = new NetworkAdminStatusData(); + networkAdminStatusRec.setDetails(statusData); + } + + NetworkAdminStatusData netAdminStatusData = (NetworkAdminStatusData) networkAdminStatusRec.getDetails(); + netAdminStatusData.setDhcpStatus(StatusCode.normal); + netAdminStatusData.setCloudLinkStatus(StatusCode.normal); + netAdminStatusData.setDnsStatus(StatusCode.normal); + + networkAdminStatusRec.setDetails(netAdminStatusData); + + statusServiceInterface.update(networkAdminStatusRec); + + Status networkAggStatusRec = statusServiceInterface.getOrNull(ce.getCustomerId(), 0, + StatusDataType.NETWORK_AGGREGATE); + if (networkAggStatusRec == null) { + networkAggStatusRec = new Status(); + networkAggStatusRec.setCustomerId(ce.getCustomerId()); + NetworkAggregateStatusData naStatusData = new NetworkAggregateStatusData(); + networkAggStatusRec.setDetails(naStatusData); + } + + UserDetails userDetails = ((NetworkAggregateStatusData) networkAggStatusRec.getDetails()).getUserDetails(); + if (userDetails != null) + LOG.debug("UserDetails {}", userDetails.toPrettyString()); + + statusServiceInterface.update(networkAggStatusRec); + + } catch (Exception e) { + // do nothing + LOG.debug("Exception in updateApStatus", e); + } } @@ -413,8 +413,12 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra ret = new OpensyncAPConfig(); + ret.setCustomerEquipment(equipmentConfig); + Location eqLocation = locationServiceInterface.get(equipmentConfig.getLocationId()); + ret.setEquipmentLocation(eqLocation); + // extract country, radio channels from resolvedEqCfg String country = "CA"; CountryCode countryCode = Location.getCountryCode(eqLocation); @@ -449,69 +453,49 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra } - LOG.debug("Channel erc24 {}", radioChannel24G); - LOG.debug("Channel erc5gl {}", radioChannel5LG); - LOG.debug("Channel erc5gh {}", radioChannel5HG); - - OpensyncAPRadioConfig radioConfig = new OpensyncAPRadioConfig(); - radioConfig.setCountry(country); - radioConfig.setRadioChannel24G(radioChannel24G); - radioConfig.setRadioChannel5LG(radioChannel5LG); - radioConfig.setRadioChannel5HG(radioChannel5HG); - - ret.setRadioConfig(radioConfig); - - // extract ssid parameters from resolvedEqCfg - List ssidConfigs = new ArrayList<>(); - com.telecominfraproject.wlan.profile.models.Profile apProfile = profileServiceInterface .getOrNull(equipmentConfig.getProfileId()); + ret.setApProfile(apProfile); + if (apProfile != null) { Set childProfileIds = apProfile.getChildProfileIds(); - + for (Long id : childProfileIds) { com.telecominfraproject.wlan.profile.models.Profile profile = profileServiceInterface.get(id); if (profile.getProfileType().equals(ProfileType.ssid)) { + SsidConfiguration ssidCfg = (SsidConfiguration) profile.getDetails(); + ssidCfg.setSsid(profile.getName()); for (RadioType radioType : ssidCfg.getAppliedRadios()) { - OpensyncAPSsidConfig osSsidCfg = new OpensyncAPSsidConfig(); - - osSsidCfg.setSsid(profile.getName()); - osSsidCfg.setRadioType(radioType); - osSsidCfg.setBroadcast(ssidCfg.getBroadcastSsid() == StateSetting.enabled); - if (ssidCfg.getSecureMode() == SecureMode.wpa2OnlyPSK || ssidCfg.getSecureMode() == SecureMode.wpa2PSK) { - osSsidCfg.setEncryption("WPA-PSK"); - osSsidCfg.setMode("2"); + + ssidCfg.setSecureMode(SecureMode.wpa2PSK); } else if (ssidCfg.getSecureMode() == SecureMode.wpaPSK) { - osSsidCfg.setEncryption("WPA-PSK"); - osSsidCfg.setMode("1"); + + ssidCfg.setSecureMode(SecureMode.wpaPSK); + } else { LOG.warn("Unsupported encryption mode {} - will use WPA-PSK instead", ssidCfg.getSecureMode()); - osSsidCfg.setEncryption("WPA-PSK"); - osSsidCfg.setMode("2"); + + ssidCfg.setSecureMode(SecureMode.wpa2PSK); } if (ssidCfg.getKeyStr() == null) { - osSsidCfg.setKey("12345678"); - } else { - osSsidCfg.setKey(ssidCfg.getKeyStr()); + ssidCfg.setKeyStr("12345678"); } - ssidConfigs.add(osSsidCfg); - } + profile.setDetails(ssidCfg); + ret.setSsidProfile(profile); } } } - ret.setSsidConfigs(ssidConfigs); - } catch (Exception e) { LOG.error("Cannot read config for AP {}", apId, e); } @@ -933,32 +917,99 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra public void wifiVIFStateDbTableUpdate(List vifStateTables, String apId) { if (vifStateTables == null || vifStateTables.isEmpty() || apId == null) return; + + Equipment ce = getCustomerEquipment(apId); + if (ce == null) { + LOG.debug("Cannot get equipmentId {} for apId {}", apId); + return; + } + + int customerId = ce.getCustomerId(); + long equipmentId = ce.getId(); + OpensyncNode osNode = null; synchronized (opensyncNodeMap) { if (opensyncNodeMap.containsKey(apId)) { + + Status activeBssids = statusServiceInterface.getOrNull(customerId, equipmentId, + StatusDataType.ACTIVE_BSSIDS); + if (activeBssids == null) { + activeBssids = new Status(); + activeBssids.setCustomerId(customerId); + activeBssids.setEquipmentId(equipmentId); + activeBssids.setStatusDataType(StatusDataType.ACTIVE_BSSIDS); + activeBssids.setDetails(new ActiveBSSIDs()); + statusServiceInterface.update(activeBssids); + } + ActiveBSSIDs bssids = (ActiveBSSIDs) activeBssids.getDetails(); + List bssidList = bssids.getActiveBSSIDs(); + osNode = opensyncNodeMap.get(apId); for (OpensyncAPVIFState vifState : vifStateTables) { - if (vifState.isEnabled()) + if (vifState.isEnabled()) { osNode.updateVifState(vifState); + String ssid = vifState.getSsid(); // ssid + if (ssid != null) { + int channel = vifState.getChannel(); // channel for this ssid + int numDevicesConnected = vifState.getAssociatedClients().size(); + if (channel > 0) { + OpensyncAPRadioState radioState = osNode.getRadioForChannel(channel); + if (radioState != null) { + String bssidAsMacString = radioState.getMac(); + RadioType radioType = null; + if (osNode.getRadioForChannel(channel).getFreqBand().equals("2.4G")) + radioType = RadioType.is2dot4GHz; + else if (osNode.getRadioForChannel(channel).getFreqBand().equals("5GL")) + radioType = RadioType.is5GHzL; + else if (osNode.getRadioForChannel(channel).getFreqBand().equals("5GU")) + radioType = RadioType.is5GHzU; + else if (osNode.getRadioForChannel(channel).getFreqBand().equals("5G")) + radioType = RadioType.is5GHz; + + if (bssidAsMacString != null && bssidAsMacString != "" && radioType != null) { + + boolean found = false; + for (ActiveBSSID activeBssid : bssidList) { + if (activeBssid.getBssid().equals(bssidAsMacString) + && activeBssid.getRadioType().equals(radioType)) { + found = true; + } + } + if (!found) { + ActiveBSSID newBssid = new ActiveBSSID(); + newBssid.setBssid(bssidAsMacString); + newBssid.setSsid(ssid); + newBssid.setRadioType(radioType); + newBssid.setNumDevicesConnected(numDevicesConnected); + bssidList.add(newBssid); + bssids.setActiveBSSIDs(bssidList); + activeBssids.setDetails(bssids); + statusServiceInterface.update(activeBssids); + + } + } + } + } + } + } } opensyncNodeMap.put(apId, osNode); // LOG.debug("Updated VIF States for AP to NodeMap {}", // opensyncNodeMap.get(apId).toPrettyString()); } else { - OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); - if (session != null) { - int customerId = session.getCustomerId(); - long equipmentId = session.getEquipmentId(); - osNode = new OpensyncNode(apId, null, customerId, equipmentId); - for (OpensyncAPVIFState vifState : vifStateTables) { - if (vifState.isEnabled()) - osNode.updateVifState(vifState); - } - opensyncNodeMap.put(apId, osNode); + // Do not add Status updates here as this is the only object in this map, and + // therefore it will not contain the required peer entities to do the status + // updates. These will be handled in subsequent table status updates. + + osNode = new OpensyncNode(apId, null, customerId, equipmentId); + for (OpensyncAPVIFState vifState : vifStateTables) { + if (vifState.isEnabled()) + osNode.updateVifState(vifState); } + opensyncNodeMap.put(apId, osNode); } osNode = opensyncNodeMap.get(apId); @@ -1111,14 +1162,16 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra @Override public void wifiVIFStateDbTableDelete(List vifStateTables, String apId) { - OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); - long equipmentId = session.getEquipmentId(); - if (equipmentId < 0L) { - LOG.debug("Cannot get equipmentId {} for session {}", equipmentId); + Equipment ce = getCustomerEquipment(apId); + if (ce == null) { + LOG.debug("Cannot get equipmentId {} for apId {}", apId); return; } + int customerId = ce.getCustomerId(); + long equipmentId = ce.getId(); + synchronized (opensyncNodeMap) { if (opensyncNodeMap.containsKey(apId)) { diff --git a/opensync-ext-interface/pom.xml b/opensync-ext-interface/pom.xml index a4f13e5..c44aded 100644 --- a/opensync-ext-interface/pom.xml +++ b/opensync-ext-interface/pom.xml @@ -1,37 +1,59 @@ - - 4.0.0 - - com.telecominfraproject.wlan - tip-wlan-cloud-root-pom - 0.0.1-SNAPSHOT - ../../wlan-cloud-root - - opensync-ext-interface - opensync-ext-interface - Interface that defines how opensync gateway gets the AP config - - - com.telecominfraproject.wlan - base-models - ${tip-wlan-cloud.release.version} - - - com.telecominfraproject.wlan - tip-wlan-opensync-protobuf - ${tip-wlan-cloud.release.version} - - - - com.vmware.ovsdb - ovsdb-client - 1.0.1 - - - slf4j-log4j12 - org.slf4j - - - - - + + 4.0.0 + + com.telecominfraproject.wlan + tip-wlan-cloud-root-pom + 0.0.1-SNAPSHOT + ../../wlan-cloud-root + + opensync-ext-interface + opensync-ext-interface + Interface that defines how opensync gateway gets the AP config + + + com.telecominfraproject.wlan + base-models + ${tip-wlan-cloud.release.version} + + + com.telecominfraproject.wlan + tip-wlan-opensync-protobuf + ${tip-wlan-cloud.release.version} + + + equipment-models + com.telecominfraproject.wlan + ${tip-wlan-cloud.release.version} + + + profile-models + com.telecominfraproject.wlan + ${tip-wlan-cloud.release.version} + + + location-models + com.telecominfraproject.wlan + ${tip-wlan-cloud.release.version} + + + routing-models + com.telecominfraproject.wlan + ${tip-wlan-cloud.release.version} + + + + com.vmware.ovsdb + ovsdb-client + 1.0.1 + + + slf4j-log4j12 + org.slf4j + + + + + diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPConfig.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPConfig.java index f3a2185..e27dd0d 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPConfig.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPConfig.java @@ -1,81 +1,97 @@ package com.telecominfraproject.wlan.opensync.external.integration.models; -import java.util.ArrayList; -import java.util.List; - -import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.json.BaseJsonModel; +import com.telecominfraproject.wlan.equipment.models.Equipment; +import com.telecominfraproject.wlan.location.models.Location; +import com.telecominfraproject.wlan.profile.models.Profile; +import com.telecominfraproject.wlan.routing.models.EquipmentGatewayRecord; +import com.telecominfraproject.wlan.routing.models.EquipmentRoutingRecord; public class OpensyncAPConfig extends BaseJsonModel { - private static final long serialVersionUID = 3917975477206236668L; + private static final long serialVersionUID = 3917975477206236668L; - private OpensyncAPRadioConfig radioConfig; - private List ssidConfigs; - - - public OpensyncAPRadioConfig getRadioConfig() { - return radioConfig; - } + private Equipment customerEquipment; + private Profile apProfile; + private Profile ssidProfile; + private Location equipmentLocation; + private EquipmentRoutingRecord equipmentRouting; + private EquipmentGatewayRecord equipmentGateway; + public EquipmentGatewayRecord getEquipmentGateway() { + return equipmentGateway; + } - public void setRadioConfig(OpensyncAPRadioConfig radioConfig) { - this.radioConfig = radioConfig; - } + public void setEquipmentGateway(EquipmentGatewayRecord equipmentGateway) { + this.equipmentGateway = equipmentGateway; + } + public EquipmentRoutingRecord getEquipmentRouting() { + return equipmentRouting; + } - public List getSsidConfigs() { - return ssidConfigs; - } + public void setEquipmentRouting(EquipmentRoutingRecord equipmentRouting) { + this.equipmentRouting = equipmentRouting; + } + public Equipment getCustomerEquipment() { + return customerEquipment; + } - public void setSsidConfigs(List ssidConfigs) { - this.ssidConfigs = ssidConfigs; - } + public void setCustomerEquipment(Equipment customerEquipment) { + this.customerEquipment = customerEquipment; + } + public Profile getApProfile() { + return apProfile; + } - @Override - public OpensyncAPConfig clone() { - OpensyncAPConfig ret = (OpensyncAPConfig)super.clone(); - if(radioConfig!=null) { - ret.radioConfig = radioConfig.clone(); - } - - if(ssidConfigs!=null) { - ret.ssidConfigs = new ArrayList(); - for(OpensyncAPSsidConfig s: ssidConfigs) { - ret.ssidConfigs.add(s.clone()); - } - } - - return ret; - } - - public static void main(String[] args) { - OpensyncAPConfig cfg = new OpensyncAPConfig(); - cfg.radioConfig = new OpensyncAPRadioConfig(); - cfg.ssidConfigs = new ArrayList(); - - cfg.radioConfig.setRadioChannel24G(1); - cfg.radioConfig.setRadioChannel5LG(44); - cfg.radioConfig.setRadioChannel5HG(108); + public void setApProfile(Profile apProfile) { + this.apProfile = apProfile; + } - OpensyncAPSsidConfig ssidCfg = new OpensyncAPSsidConfig(); - ssidCfg.setRadioType(RadioType.is2dot4GHz); - ssidCfg.setSsid("Connectus-standalone"); - ssidCfg.setEncryption("WPA-PSK"); - ssidCfg.setKey("12345678"); - ssidCfg.setMode("2"); - cfg.ssidConfigs.add(ssidCfg); + public Profile getSsidProfile() { + return ssidProfile; + } - ssidCfg = new OpensyncAPSsidConfig(); - ssidCfg.setRadioType(RadioType.is5GHz); - ssidCfg.setSsid("Connectus-standalone-5"); - ssidCfg.setEncryption("WPA-PSK"); - ssidCfg.setKey("12345678"); - ssidCfg.setMode("2"); - cfg.ssidConfigs.add(ssidCfg); + public void setSsidProfile(Profile ssidProfile) { + this.ssidProfile = ssidProfile; + } + + public Location getEquipmentLocation() { + return equipmentLocation; + } + + public void setEquipmentLocation(Location equipmentLocation) { + this.equipmentLocation = equipmentLocation; + } + + public String getCountryCode() { + return Location.getCountryCode(this.equipmentLocation).toString(); + } + + public static long getSerialversionuid() { + return serialVersionUID; + } + + @Override + public OpensyncAPConfig clone() { + OpensyncAPConfig ret = (OpensyncAPConfig) super.clone(); + + if (customerEquipment != null) + ret.customerEquipment = customerEquipment.clone(); + if (equipmentLocation != null) + ret.equipmentLocation = equipmentLocation.clone(); + if (ssidProfile != null) + ret.ssidProfile = ssidProfile.clone(); + if (apProfile != null) + ret.apProfile = apProfile.clone(); + if (equipmentRouting != null) + ret.equipmentRouting = equipmentRouting.clone(); + if (equipmentGateway != null) + ret.equipmentGateway = equipmentGateway.clone(); + + return ret; + } - System.out.println(cfg.toPrettyString()); - } } diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioConfig.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioConfig.java deleted file mode 100644 index ee1f722..0000000 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.telecominfraproject.wlan.opensync.external.integration.models; - -import com.telecominfraproject.wlan.core.model.json.BaseJsonModel; - -public class OpensyncAPRadioConfig extends BaseJsonModel { - - private static final long serialVersionUID = 5683558403622855381L; - - private String country; - private int radioChannel24G; - private int radioChannel5LG; - private int radioChannel5HG; - - public int getRadioChannel24G() { - return radioChannel24G; - } - - public void setRadioChannel24G(int radioChannel24G) { - this.radioChannel24G = radioChannel24G; - } - - public int getRadioChannel5LG() { - return radioChannel5LG; - } - - public void setRadioChannel5LG(int radioChannel5LG) { - this.radioChannel5LG = radioChannel5LG; - } - - public int getRadioChannel5HG() { - return radioChannel5HG; - } - - public void setRadioChannel5HG(int radioChannel5HG) { - this.radioChannel5HG = radioChannel5HG; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - @Override - public OpensyncAPRadioConfig clone() { - return (OpensyncAPRadioConfig)super.clone(); - } -} diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPSsidConfig.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPSsidConfig.java deleted file mode 100644 index 228adb6..0000000 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPSsidConfig.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.telecominfraproject.wlan.opensync.external.integration.models; - -import com.telecominfraproject.wlan.core.model.equipment.RadioType; -import com.telecominfraproject.wlan.core.model.json.BaseJsonModel; - -public class OpensyncAPSsidConfig extends BaseJsonModel { - - private static final long serialVersionUID = -8540144450360788799L; - - private RadioType radioType; - private String ssid; - private String encryption; - private String key; - private String mode; - private boolean broadcast; - - public RadioType getRadioType() { - return radioType; - } - - public void setRadioType(RadioType radioType) { - this.radioType = radioType; - } - - public String getSsid() { - return ssid; - } - - public void setSsid(String ssid) { - this.ssid = ssid; - } - - public String getEncryption() { - return encryption; - } - - public void setEncryption(String encryption) { - this.encryption = encryption; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getMode() { - return mode; - } - - public void setMode(String mode) { - this.mode = mode; - } - - public boolean isBroadcast() { - return broadcast; - } - - public void setBroadcast(boolean broadcast) { - this.broadcast = broadcast; - } - - @Override - public OpensyncAPSsidConfig clone() { - return (OpensyncAPSsidConfig)super.clone(); - } - -} diff --git a/opensync-ext-static/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationSimple.java b/opensync-ext-static/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationSimple.java index 3a0d783..5913dd1 100644 --- a/opensync-ext-static/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationSimple.java +++ b/opensync-ext-static/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationSimple.java @@ -11,6 +11,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; +import com.telecominfraproject.wlan.equipment.models.Equipment; +import com.telecominfraproject.wlan.location.models.Location; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState; @@ -29,8 +31,17 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr private static final Logger LOG = LoggerFactory.getLogger(OpensyncExternalIntegrationSimple.class); - @Value("${connectus.ovsdb.configFileName:/Users/dtop/Documents/TIP_WLAN_repos/opensync_wifi_controller/opensync_ext_static/src/main/resources/config_2_ssids.json}") - private String configFileName; + @Value("${connectus.ovsdb.customerEquipmentFileName:/Users/mikehansen/git/wlan-cloud-workspace/wlan-cloud-opensync-controller/opensync-ext-static/src/main/resources/EquipmentExample.json}") + private String customerEquipmentFileName; + + @Value("${connectus.ovsdb.apProfileFileName:/Users/mikehansen/git/wlan-cloud-workspace/wlan-cloud-opensync-controller/opensync-ext-static/src/main/resources/ProfileAPExample.json}") + private String apProfileFileName; + + @Value("${connectus.ovsdb.ssidProfileFileName:/Users/mikehansen/git/wlan-cloud-workspace/wlan-cloud-opensync-controller/opensync-ext-static/src/main/resources/ProfileSsid.json}") + private String ssidProfileFileName; + + @Value("${connectus.ovsdb.locationFileName:/Users/mikehansen/git/wlan-cloud-workspace/wlan-cloud-opensync-controller/opensync-ext-static/src/main/resources/LocationBuildingExample.json}") + private String locationFileName; @PostConstruct private void postCreate() { @@ -48,13 +59,28 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr } public OpensyncAPConfig getApConfig(String apId) { - LOG.info("Retrieving config for AP {} from file {}", apId, configFileName); + LOG.info("Retrieving config for AP {}", apId); OpensyncAPConfig ret = null; try { - ret = OpensyncAPConfig.fromFile(configFileName, OpensyncAPConfig.class); + + Equipment equipment = Equipment.fromFile(customerEquipmentFileName, Equipment.class); + equipment.setInventoryId(apId); + equipment.setName(apId); + + com.telecominfraproject.wlan.profile.models.Profile apProfile = com.telecominfraproject.wlan.profile.models.Profile.fromFile(apProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class); + com.telecominfraproject.wlan.profile.models.Profile ssidProfile = com.telecominfraproject.wlan.profile.models.Profile.fromFile(ssidProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class); + + Location location = Location.fromFile(locationFileName, Location.class); + + ret = new OpensyncAPConfig(); + ret.setCustomerEquipment(equipment); + ret.setApProfile(apProfile); + ret.setSsidProfile(ssidProfile); + ret.setEquipmentLocation(location); + } catch (IOException e) { - LOG.error("Cannot read config from {}", configFileName, e); + LOG.error("Cannot read config file", e); } LOG.debug("Config content : {}", ret); @@ -63,7 +89,7 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr } public void processMqttMessage(String topic, Report report) { - LOG.info("Received PlumeStatsReport on topic {} for ap {}\n{}", topic, report.getNodeID(),report); + LOG.info("Received PlumeStatsReport on topic {} for ap {}\n{}", topic, report.getNodeID(), report); } public void processMqttMessage(String topic, FlowReport flowReport) { @@ -106,16 +132,16 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr } - @Override - public void wifiVIFStateDbTableDelete(List vifStateTables, String apId) { - // TODO Auto-generated method stub - - } + @Override + public void wifiVIFStateDbTableDelete(List vifStateTables, String apId) { + // TODO Auto-generated method stub - @Override - public void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId) { - // TODO Auto-generated method stub - - } + } + + @Override + public void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId) { + // TODO Auto-generated method stub + + } } diff --git a/opensync-ext-static/src/main/resources/EquipmentExample.json b/opensync-ext-static/src/main/resources/EquipmentExample.json new file mode 100644 index 0000000..f504252 --- /dev/null +++ b/opensync-ext-static/src/main/resources/EquipmentExample.json @@ -0,0 +1,290 @@ +{ + "model_type" : "Equipment", + "id" : 50, + "customerId" : 2, + "profileId" : 2, + "locationId" : 8, + "equipmentType" : "AP", + "inventoryId" : "ap-50", + "name" : "AP 50", + "details" : { + "model_type" : "ApElementConfiguration", + "sampleDetailsStr" : null, + "elementConfigVersion" : "AP-V1", + "equipmentType" : "AP", + "deviceMode" : "standaloneAP", + "gettingIP" : "dhcp", + "staticIP" : null, + "staticIpMaskCidr" : null, + "staticIpGw" : null, + "gettingDNS" : "dhcp", + "staticDnsIp1" : null, + "staticDnsIp2" : null, + "peerInfoList" : [ ], + "deviceName" : "Default Device Name", + "locationData" : null, + "locallyConfiguredMgmtVlan" : 0, + "locallyConfigured" : false, + "deploymentType" : "CEILING", + "syntheticClientEnabled" : null, + "frameReportThrottleEnabled" : true, + "antennaType" : "OMNI", + "costSavingEventsEnabled" : true, + "forwardMode" : "BRIDGE", + "radioMap" : { + "is2dot4GHz" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is2dot4GHz", + "channelNumber" : 6, + "manualChannelNumber" : 6, + "backupChannelNumber" : 11, + "autoChannelSelection" : true, + "channelBandwidth" : "is20MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 6 + }, + "is5GHzL" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzL", + "channelNumber" : 36, + "manualChannelNumber" : 36, + "backupChannelNumber" : 44, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 36 + }, + "is5GHzU" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzU", + "channelNumber" : 108, + "manualChannelNumber" : 108, + "backupChannelNumber" : 116, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 108 + } + }, + "advancedRadioMap" : { + "is2dot4GHz" : { + "model_type" : "RadioConfiguration", + "radioType" : "is2dot4GHz", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeN", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 20, + "minLoadFactor" : 50 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzU" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzU", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzL" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzL", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + } + } + }, + "latitude" : null, + "longitude" : null, + "serial" : "serial-ap-50", + "createdTimestamp" : 1589915837067, + "lastModifiedTimestamp" : 1589915837067 +} \ No newline at end of file diff --git a/opensync-ext-static/src/main/resources/LocationBuildingExample.json b/opensync-ext-static/src/main/resources/LocationBuildingExample.json new file mode 100644 index 0000000..5bf6747 --- /dev/null +++ b/opensync-ext-static/src/main/resources/LocationBuildingExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 7, + "parentId" : 2, + "locationType" : "BUILDING", + "customerId" : 2, + "name" : "Building 2", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567347442, + "lastModifiedTimestamp" : 1589567347442 +} \ No newline at end of file diff --git a/opensync-ext-static/src/main/resources/LocationBuildingParentExample.json b/opensync-ext-static/src/main/resources/LocationBuildingParentExample.json new file mode 100644 index 0000000..559ca51 --- /dev/null +++ b/opensync-ext-static/src/main/resources/LocationBuildingParentExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 2, + "parentId" : 0, + "locationType" : "SITE", + "customerId" : 2, + "name" : "Menlo Park", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567474314, + "lastModifiedTimestamp" : 1589567474314 +} \ No newline at end of file diff --git a/opensync-ext-static/src/main/resources/ProfileAPExample.json b/opensync-ext-static/src/main/resources/ProfileAPExample.json new file mode 100644 index 0000000..dc2d19a --- /dev/null +++ b/opensync-ext-static/src/main/resources/ProfileAPExample.json @@ -0,0 +1,50 @@ +{ + "model_type" : "Profile", + "id" : 2, + "customerId" : 2, + "profileType" : "equipment_ap", + "name" : "ApProfile", + "details" : { + "model_type" : "ApNetworkConfiguration", + "sampleDetailsStr" : null, + "networkConfigVersion" : "AP-1", + "equipmentType" : "AP", + "vlanNative" : true, + "vlan" : 0, + "ntpServer" : { + "model_type" : "AutoOrManualString", + "auto" : true, + "value" : "pool.ntp.org" + }, + "syslogRelay" : null, + "rtlsSettings" : null, + "syntheticClientEnabled" : true, + "ledControlEnabled" : true, + "equipmentDiscovery" : false, + "radioMap" : { + "is5GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is2dot4GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzU" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzL" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + } + } + }, + "createdTimestamp" : 1589567037365, + "lastModifiedTimestamp" : 1589567037365, + "childProfileIds" : [ 1 ] +} \ No newline at end of file diff --git a/opensync-ext-static/src/main/resources/ProfileSsid.json b/opensync-ext-static/src/main/resources/ProfileSsid.json new file mode 100644 index 0000000..1012fcf --- /dev/null +++ b/opensync-ext-static/src/main/resources/ProfileSsid.json @@ -0,0 +1,58 @@ +{ + "model_type" : "Profile", + "id" : 1, + "customerId" : 2, + "profileType" : "ssid", + "name" : "Connectus-local", + "details" : { + "model_type" : "SsidConfiguration", + "sampleDetailsStr" : null, + "ssid" : "Connectus-local", + "appliedRadios" : [ "is5GHzL", "is5GHzU", "is2dot4GHz" ], + "ssidAdminState" : "enabled", + "secureMode" : "wpa2PSK", + "vlanId" : 1, + "keyStr" : "12345678", + "broadcastSsid" : "enabled", + "keyRefresh" : 0, + "noLocalSubnets" : false, + "radiusServiceName" : null, + "captivePortalId" : null, + "bandwidthLimitDown" : 0, + "bandwidthLimitUp" : 0, + "videoTrafficOnly" : false, + "radioBasedConfigs" : { + "is5GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is2dot4GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzU" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzL" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + } + }, + "bonjourGatewayProfileId" : null, + "enable80211w" : null, + "wepConfig" : null, + "forwardMode" : null + }, + "createdTimestamp" : 1589567130432, + "lastModifiedTimestamp" : 1589567130432, + "childProfileIds" : [ ] +} \ No newline at end of file diff --git a/opensync-ext-static/src/main/resources/config_2_ssids.json b/opensync-ext-static/src/main/resources/config_2_ssids.json index c28975d..401c918 100644 --- a/opensync-ext-static/src/main/resources/config_2_ssids.json +++ b/opensync-ext-static/src/main/resources/config_2_ssids.json @@ -3,7 +3,7 @@ "radioConfig" : { "model_type" : "OpensyncAPRadioConfig", "country" : "CA", - "radioChannel24G" : 1, + "radioChannel24G" : 6, "radioChannel5LG" : 44, "radioChannel5HG" : 108 }, diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/Dockerfile b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/Dockerfile index 477ab19..5f519d7 100644 --- a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/Dockerfile +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/Dockerfile @@ -22,7 +22,11 @@ RUN mkdir -p /app/logs /app/opensync /app/config COPY maven/app.jar /app COPY app/opensync/logback.xml /app/opensync/logback.xml COPY app/run.sh /app -COPY app/opensync/config_2_ssids.json /app/opensync/config_2_ssids.json +COPY app/opensync/EquipmentExample.json /app/opensync/EquipmentExample.json +COPY app/opensync/ProfileAPExample.json /app/opensync/ProfileAPExample.json +COPY app/opensync/ProfileSsid.json /app/opensync/ProfileSsid.json +COPY app/opensync/LocationBuildingExample.json /app/opensync/LocationBuildingExample.json + VOLUME ["/app/logs", "/app/config"] RUN chmod +x /app/run.sh diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/EquipmentExample.json b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/EquipmentExample.json new file mode 100644 index 0000000..f504252 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/EquipmentExample.json @@ -0,0 +1,290 @@ +{ + "model_type" : "Equipment", + "id" : 50, + "customerId" : 2, + "profileId" : 2, + "locationId" : 8, + "equipmentType" : "AP", + "inventoryId" : "ap-50", + "name" : "AP 50", + "details" : { + "model_type" : "ApElementConfiguration", + "sampleDetailsStr" : null, + "elementConfigVersion" : "AP-V1", + "equipmentType" : "AP", + "deviceMode" : "standaloneAP", + "gettingIP" : "dhcp", + "staticIP" : null, + "staticIpMaskCidr" : null, + "staticIpGw" : null, + "gettingDNS" : "dhcp", + "staticDnsIp1" : null, + "staticDnsIp2" : null, + "peerInfoList" : [ ], + "deviceName" : "Default Device Name", + "locationData" : null, + "locallyConfiguredMgmtVlan" : 0, + "locallyConfigured" : false, + "deploymentType" : "CEILING", + "syntheticClientEnabled" : null, + "frameReportThrottleEnabled" : true, + "antennaType" : "OMNI", + "costSavingEventsEnabled" : true, + "forwardMode" : "BRIDGE", + "radioMap" : { + "is2dot4GHz" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is2dot4GHz", + "channelNumber" : 6, + "manualChannelNumber" : 6, + "backupChannelNumber" : 11, + "autoChannelSelection" : true, + "channelBandwidth" : "is20MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 6 + }, + "is5GHzL" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzL", + "channelNumber" : 36, + "manualChannelNumber" : 36, + "backupChannelNumber" : 44, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 36 + }, + "is5GHzU" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzU", + "channelNumber" : 108, + "manualChannelNumber" : 108, + "backupChannelNumber" : 116, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 108 + } + }, + "advancedRadioMap" : { + "is2dot4GHz" : { + "model_type" : "RadioConfiguration", + "radioType" : "is2dot4GHz", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeN", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 20, + "minLoadFactor" : 50 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzU" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzU", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzL" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzL", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + } + } + }, + "latitude" : null, + "longitude" : null, + "serial" : "serial-ap-50", + "createdTimestamp" : 1589915837067, + "lastModifiedTimestamp" : 1589915837067 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingExample.json b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingExample.json new file mode 100644 index 0000000..5bf6747 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 7, + "parentId" : 2, + "locationType" : "BUILDING", + "customerId" : 2, + "name" : "Building 2", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567347442, + "lastModifiedTimestamp" : 1589567347442 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingParentExample.json b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingParentExample.json new file mode 100644 index 0000000..559ca51 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/LocationBuildingParentExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 2, + "parentId" : 0, + "locationType" : "SITE", + "customerId" : 2, + "name" : "Menlo Park", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567474314, + "lastModifiedTimestamp" : 1589567474314 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileAPExample.json b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileAPExample.json new file mode 100644 index 0000000..dc2d19a --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileAPExample.json @@ -0,0 +1,50 @@ +{ + "model_type" : "Profile", + "id" : 2, + "customerId" : 2, + "profileType" : "equipment_ap", + "name" : "ApProfile", + "details" : { + "model_type" : "ApNetworkConfiguration", + "sampleDetailsStr" : null, + "networkConfigVersion" : "AP-1", + "equipmentType" : "AP", + "vlanNative" : true, + "vlan" : 0, + "ntpServer" : { + "model_type" : "AutoOrManualString", + "auto" : true, + "value" : "pool.ntp.org" + }, + "syslogRelay" : null, + "rtlsSettings" : null, + "syntheticClientEnabled" : true, + "ledControlEnabled" : true, + "equipmentDiscovery" : false, + "radioMap" : { + "is5GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is2dot4GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzU" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzL" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + } + } + }, + "createdTimestamp" : 1589567037365, + "lastModifiedTimestamp" : 1589567037365, + "childProfileIds" : [ 1 ] +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileSsid.json b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileSsid.json new file mode 100644 index 0000000..1012fcf --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/opensync/ProfileSsid.json @@ -0,0 +1,58 @@ +{ + "model_type" : "Profile", + "id" : 1, + "customerId" : 2, + "profileType" : "ssid", + "name" : "Connectus-local", + "details" : { + "model_type" : "SsidConfiguration", + "sampleDetailsStr" : null, + "ssid" : "Connectus-local", + "appliedRadios" : [ "is5GHzL", "is5GHzU", "is2dot4GHz" ], + "ssidAdminState" : "enabled", + "secureMode" : "wpa2PSK", + "vlanId" : 1, + "keyStr" : "12345678", + "broadcastSsid" : "enabled", + "keyRefresh" : 0, + "noLocalSubnets" : false, + "radiusServiceName" : null, + "captivePortalId" : null, + "bandwidthLimitDown" : 0, + "bandwidthLimitUp" : 0, + "videoTrafficOnly" : false, + "radioBasedConfigs" : { + "is5GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is2dot4GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzU" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzL" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + } + }, + "bonjourGatewayProfileId" : null, + "enable80211w" : null, + "wepConfig" : null, + "forwardMode" : null + }, + "createdTimestamp" : 1589567130432, + "lastModifiedTimestamp" : 1589567130432, + "childProfileIds" : [ ] +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/run.sh b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/run.sh index 7777eb2..3cc97f2 100755 --- a/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/run.sh +++ b/opensync-gateway-static-docker/src/main/docker-opensync-gateway-and-mqtt/app/run.sh @@ -31,7 +31,11 @@ OVSDB_SERVER_KEYSTORE_FILE="${OVSDB_SERVER_KEYSTORE_FILE:=/opt/tip-wlan/certs/se OVSDB_SERVER_KEYSTORE_PASSWORD="${OVSDB_SERVER_KEYSTORE_PASSWORD:=mypassword}" OVSDB_SERVER_TRUSTSTORE_FILE="${OVSDB_SERVER_TRUSTSTORE_FILE:=/opt/tip-wlan/certs/truststore.jks}" OVSDB_SERVER_TRUSTSTORE_PASSWORD="${OVSDB_SERVER_TRUSTSTORE_PASSWORD:=mypassword}" -OVSDB_CONFIG_FILE="${OVSDB_CONFIG_FILE:=/app/opensync/config_2_ssids.json}" +OVSDB_EQUIPMENT_CONFIG_FILE="${OVSDB_EQUIPMENT_CONFIG_FILE:=/app/opensync/EquipmentExample.json}" +OVSDB_APPROFILE_CONFIG_FILE="${OVSDB_AP_PROFILE_CONFIG_FILE:=/app/opensync/ProfileAPExample.json}" +OVSDB_SSIDPROFILE_CONFIG_FILE="${OVSDB_SSIDPROFILE_CONFIG_FILE:=/app/opensync/ProfileSsid.json}" +OVSDB_LOCATION_CONFIG_FILE="${OVSDB_LOCATION_CONFIG_FILE:=/app/opensync/LocationBuildingExample.json}" + echo Reading AP configuration from $OVSDB_CONFIG_FILE @@ -104,7 +108,10 @@ OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.trustStore=$OVSDB_SERVER_TRUSTSTORE_ OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.trustStorePassword=$OVSDB_SERVER_TRUSTSTORE_PASSWORD" OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.keyStore=$OVSDB_SERVER_KEYSTORE_FILE" OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.keyStorePassword=$OVSDB_SERVER_KEYSTORE_PASSWORD" -OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.configFileName=$OVSDB_CONFIG_FILE" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.customerEquipmentFileName=$OVSDB_EQUIPMENT_CONFIG_FILE" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.apProfileFileName=$OVSDB_APPROFILE_CONFIG_FILE" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.ssidProfileFileName=$OVSDB_SSIDPROFILE_CONFIG_FILE" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.locationFileName=$OVSDB_LOCATION_CONFIG_FILE" MQTT_PROPS=" " MQTT_PROPS="$MQTT_PROPS -Dconnectus.mqttBroker.address=$MQTT_BROKER_HOST" diff --git a/opensync-gateway-static-docker/src/main/docker/Dockerfile b/opensync-gateway-static-docker/src/main/docker/Dockerfile index a686253..5db820c 100644 --- a/opensync-gateway-static-docker/src/main/docker/Dockerfile +++ b/opensync-gateway-static-docker/src/main/docker/Dockerfile @@ -9,7 +9,10 @@ RUN mkdir -p /opt/tip-wlan/certs COPY maven/app.jar /app COPY app/opensync/logback.xml /app/opensync/logback.xml COPY app/run.sh /app -COPY app/opensync/config_2_ssids.json /app/opensync/config_2_ssids.json +COPY app/opensync/EquipmentExample.json /app/opensync/EquipmentExample.json +COPY app/opensync/ProfileAPExample.json /app/opensync/ProfileAPExample.json +COPY app/opensync/ProfileSsid.json /app/opensync/ProfileSsid.json +COPY app/opensync/LocationBuildingExample.json /app/opensync/LocationBuildingExample.json RUN chmod +x /app/run.sh diff --git a/opensync-gateway-static-docker/src/main/docker/app/opensync/EquipmentExample.json b/opensync-gateway-static-docker/src/main/docker/app/opensync/EquipmentExample.json new file mode 100644 index 0000000..f504252 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker/app/opensync/EquipmentExample.json @@ -0,0 +1,290 @@ +{ + "model_type" : "Equipment", + "id" : 50, + "customerId" : 2, + "profileId" : 2, + "locationId" : 8, + "equipmentType" : "AP", + "inventoryId" : "ap-50", + "name" : "AP 50", + "details" : { + "model_type" : "ApElementConfiguration", + "sampleDetailsStr" : null, + "elementConfigVersion" : "AP-V1", + "equipmentType" : "AP", + "deviceMode" : "standaloneAP", + "gettingIP" : "dhcp", + "staticIP" : null, + "staticIpMaskCidr" : null, + "staticIpGw" : null, + "gettingDNS" : "dhcp", + "staticDnsIp1" : null, + "staticDnsIp2" : null, + "peerInfoList" : [ ], + "deviceName" : "Default Device Name", + "locationData" : null, + "locallyConfiguredMgmtVlan" : 0, + "locallyConfigured" : false, + "deploymentType" : "CEILING", + "syntheticClientEnabled" : null, + "frameReportThrottleEnabled" : true, + "antennaType" : "OMNI", + "costSavingEventsEnabled" : true, + "forwardMode" : "BRIDGE", + "radioMap" : { + "is2dot4GHz" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is2dot4GHz", + "channelNumber" : 6, + "manualChannelNumber" : 6, + "backupChannelNumber" : 11, + "autoChannelSelection" : true, + "channelBandwidth" : "is20MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 6 + }, + "is5GHzL" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzL", + "channelNumber" : 36, + "manualChannelNumber" : 36, + "backupChannelNumber" : 44, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 36 + }, + "is5GHzU" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzU", + "channelNumber" : 108, + "manualChannelNumber" : 108, + "backupChannelNumber" : 116, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 108 + } + }, + "advancedRadioMap" : { + "is2dot4GHz" : { + "model_type" : "RadioConfiguration", + "radioType" : "is2dot4GHz", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeN", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 20, + "minLoadFactor" : 50 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzU" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzU", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzL" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzL", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + } + } + }, + "latitude" : null, + "longitude" : null, + "serial" : "serial-ap-50", + "createdTimestamp" : 1589915837067, + "lastModifiedTimestamp" : 1589915837067 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingExample.json b/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingExample.json new file mode 100644 index 0000000..5bf6747 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 7, + "parentId" : 2, + "locationType" : "BUILDING", + "customerId" : 2, + "name" : "Building 2", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567347442, + "lastModifiedTimestamp" : 1589567347442 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingParentExample.json b/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingParentExample.json new file mode 100644 index 0000000..559ca51 --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker/app/opensync/LocationBuildingParentExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 2, + "parentId" : 0, + "locationType" : "SITE", + "customerId" : 2, + "name" : "Menlo Park", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567474314, + "lastModifiedTimestamp" : 1589567474314 +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileAPExample.json b/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileAPExample.json new file mode 100644 index 0000000..dc2d19a --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileAPExample.json @@ -0,0 +1,50 @@ +{ + "model_type" : "Profile", + "id" : 2, + "customerId" : 2, + "profileType" : "equipment_ap", + "name" : "ApProfile", + "details" : { + "model_type" : "ApNetworkConfiguration", + "sampleDetailsStr" : null, + "networkConfigVersion" : "AP-1", + "equipmentType" : "AP", + "vlanNative" : true, + "vlan" : 0, + "ntpServer" : { + "model_type" : "AutoOrManualString", + "auto" : true, + "value" : "pool.ntp.org" + }, + "syslogRelay" : null, + "rtlsSettings" : null, + "syntheticClientEnabled" : true, + "ledControlEnabled" : true, + "equipmentDiscovery" : false, + "radioMap" : { + "is5GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is2dot4GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzU" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzL" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + } + } + }, + "createdTimestamp" : 1589567037365, + "lastModifiedTimestamp" : 1589567037365, + "childProfileIds" : [ 1 ] +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileSsid.json b/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileSsid.json new file mode 100644 index 0000000..1012fcf --- /dev/null +++ b/opensync-gateway-static-docker/src/main/docker/app/opensync/ProfileSsid.json @@ -0,0 +1,58 @@ +{ + "model_type" : "Profile", + "id" : 1, + "customerId" : 2, + "profileType" : "ssid", + "name" : "Connectus-local", + "details" : { + "model_type" : "SsidConfiguration", + "sampleDetailsStr" : null, + "ssid" : "Connectus-local", + "appliedRadios" : [ "is5GHzL", "is5GHzU", "is2dot4GHz" ], + "ssidAdminState" : "enabled", + "secureMode" : "wpa2PSK", + "vlanId" : 1, + "keyStr" : "12345678", + "broadcastSsid" : "enabled", + "keyRefresh" : 0, + "noLocalSubnets" : false, + "radiusServiceName" : null, + "captivePortalId" : null, + "bandwidthLimitDown" : 0, + "bandwidthLimitUp" : 0, + "videoTrafficOnly" : false, + "radioBasedConfigs" : { + "is5GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is2dot4GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzU" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzL" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + } + }, + "bonjourGatewayProfileId" : null, + "enable80211w" : null, + "wepConfig" : null, + "forwardMode" : null + }, + "createdTimestamp" : 1589567130432, + "lastModifiedTimestamp" : 1589567130432, + "childProfileIds" : [ ] +} \ No newline at end of file diff --git a/opensync-gateway-static-docker/src/main/docker/app/run.sh b/opensync-gateway-static-docker/src/main/docker/app/run.sh index ed6b666..47c527a 100755 --- a/opensync-gateway-static-docker/src/main/docker/app/run.sh +++ b/opensync-gateway-static-docker/src/main/docker/app/run.sh @@ -19,7 +19,10 @@ OVSDB_PROPS+=" -Dconnectus.ovsdb.redirector.listenPort=6643" OVSDB_PROPS+=" -Dconnectus.ovsdb.timeoutSec=30" OVSDB_PROPS+=" -Dconnectus.ovsdb.trustStore=/opt/tip-wlan/certs/truststore.jks" OVSDB_PROPS+=" -Dconnectus.ovsdb.keyStore=/opt/tip-wlan/certs/server.pkcs12" -OVSDB_PROPS+=" -Dconnectus.ovsdb.configFileName=/app/opensync/config_2_ssids.json" +OVSDB_PROPS+=" -Dconnectus.ovsdb.customerEquipmentFileName=$OVSDB_EQUIPMENT_CONFIG_FILE" +OVSDB_PROPS+=" -Dconnectus.ovsdb.apProfileFileName=$OVSDB_APPROFILE_CONFIG_FILE" +OVSDB_PROPS+=" -Dconnectus.ovsdb.ssidProfileFileName=$OVSDB_SSIDPROFILE_CONFIG_FILE" +OVSDB_PROPS+=" -Dconnectus.ovsdb.locationFileName=$OVSDB_LOCATION_CONFIG_FILE" MQTT_PROPS=" " MQTT_PROPS+=" -Dconnectus.mqttBroker.address=tip-wlan-opensync-mqtt-broker" diff --git a/opensync-gateway-static-process/src/main/resources/app/opensync/EquipmentExample.json b/opensync-gateway-static-process/src/main/resources/app/opensync/EquipmentExample.json new file mode 100644 index 0000000..f504252 --- /dev/null +++ b/opensync-gateway-static-process/src/main/resources/app/opensync/EquipmentExample.json @@ -0,0 +1,290 @@ +{ + "model_type" : "Equipment", + "id" : 50, + "customerId" : 2, + "profileId" : 2, + "locationId" : 8, + "equipmentType" : "AP", + "inventoryId" : "ap-50", + "name" : "AP 50", + "details" : { + "model_type" : "ApElementConfiguration", + "sampleDetailsStr" : null, + "elementConfigVersion" : "AP-V1", + "equipmentType" : "AP", + "deviceMode" : "standaloneAP", + "gettingIP" : "dhcp", + "staticIP" : null, + "staticIpMaskCidr" : null, + "staticIpGw" : null, + "gettingDNS" : "dhcp", + "staticDnsIp1" : null, + "staticDnsIp2" : null, + "peerInfoList" : [ ], + "deviceName" : "Default Device Name", + "locationData" : null, + "locallyConfiguredMgmtVlan" : 0, + "locallyConfigured" : false, + "deploymentType" : "CEILING", + "syntheticClientEnabled" : null, + "frameReportThrottleEnabled" : true, + "antennaType" : "OMNI", + "costSavingEventsEnabled" : true, + "forwardMode" : "BRIDGE", + "radioMap" : { + "is2dot4GHz" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is2dot4GHz", + "channelNumber" : 6, + "manualChannelNumber" : 6, + "backupChannelNumber" : 11, + "autoChannelSelection" : true, + "channelBandwidth" : "is20MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 6 + }, + "is5GHzL" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzL", + "channelNumber" : 36, + "manualChannelNumber" : 36, + "backupChannelNumber" : 44, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 36 + }, + "is5GHzU" : { + "model_type" : "ElementRadioConfiguration", + "radioType" : "is5GHzU", + "channelNumber" : 108, + "manualChannelNumber" : 108, + "backupChannelNumber" : 116, + "autoChannelSelection" : true, + "channelBandwidth" : "is80MHz", + "bannedChannels" : [ ], + "rxCellSizeDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "probeResponseThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "clientDisconnectThresholdDb" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : -90 + }, + "eirpTxPower" : { + "model_type" : "AutoOrManualValue", + "auto" : true, + "value" : 18 + }, + "bestApEnabled" : null, + "neighbouringListApConfig" : { + "model_type" : "NeighbouringAPListConfiguration", + "minSignal" : -85, + "maxAps" : 25 + }, + "minAutoCellSize" : -80, + "perimeterDetectionEnabled" : true, + "bestAPSteerType" : "both", + "deauthAttackDetection" : null, + "allowedChannelsPowerLevels" : [ ], + "activeChannel" : 108 + } + }, + "advancedRadioMap" : { + "is2dot4GHz" : { + "model_type" : "RadioConfiguration", + "radioType" : "is2dot4GHz", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeN", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 20, + "minLoadFactor" : 50 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzU" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzU", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + }, + "is5GHzL" : { + "model_type" : "RadioConfiguration", + "radioType" : "is5GHzL", + "radioAdminState" : "enabled", + "fragmentationThresholdBytes" : 2346, + "rtsCtsThreshold" : 65535, + "autoChannelSelection" : "disabled", + "radioMode" : "modeAC", + "mimoMode" : "twoByTwo", + "wmmState" : "enabled", + "uapsdState" : "enabled", + "maxNumClients" : 100, + "stationIsolation" : "disabled", + "multicastRate" : "auto", + "managementRate" : "auto", + "activeScanSettings" : { + "model_type" : "ActiveScanSettings", + "enabled" : true, + "scanFrequencySeconds" : 10, + "scanDurationMillis" : 65 + }, + "channelHopSettings" : { + "model_type" : "ChannelHopSettings", + "noiseFloorThresholdInDB" : -75, + "noiseFloorThresholdTimeInSeconds" : 180, + "nonWifiThresholdInPercentage" : 50, + "nonWifiThresholdTimeInSeconds" : 180, + "obssHopMode" : "NON_WIFI" + }, + "bestApSettings" : { + "model_type" : "RadioBestApSettings", + "mlComputed" : true, + "dropInSnrPercentage" : 30, + "minLoadFactor" : 40 + }, + "forceScanDuringVoice" : "disabled", + "legacyBSSRate" : "enabled", + "beaconInterval" : 100, + "deauthAttackDetection" : null + } + } + }, + "latitude" : null, + "longitude" : null, + "serial" : "serial-ap-50", + "createdTimestamp" : 1589915837067, + "lastModifiedTimestamp" : 1589915837067 +} \ No newline at end of file diff --git a/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingExample.json b/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingExample.json new file mode 100644 index 0000000..5bf6747 --- /dev/null +++ b/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 7, + "parentId" : 2, + "locationType" : "BUILDING", + "customerId" : 2, + "name" : "Building 2", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567347442, + "lastModifiedTimestamp" : 1589567347442 +} \ No newline at end of file diff --git a/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingParentExample.json b/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingParentExample.json new file mode 100644 index 0000000..559ca51 --- /dev/null +++ b/opensync-gateway-static-process/src/main/resources/app/opensync/LocationBuildingParentExample.json @@ -0,0 +1,67 @@ +{ + "model_type" : "Location", + "id" : 2, + "parentId" : 0, + "locationType" : "SITE", + "customerId" : 2, + "name" : "Menlo Park", + "details" : { + "model_type" : "LocationDetails", + "countryCode" : "usa", + "maintenanceWindow" : null, + "rrmEnabled" : true, + "dailyRebalancingDetails" : { + "SUNDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "MONDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "TUESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "WEDNESDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "THURSDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "FRIDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + }, + "SATURDAY" : { + "model_type" : "LocationActivityDetails", + "busyTime" : "13:30", + "quietTime" : "3:30", + "timezone" : "US/Eastern", + "lastBusySnapshot" : 0 + } + } + }, + "createdTimestamp" : 1589567474314, + "lastModifiedTimestamp" : 1589567474314 +} \ No newline at end of file diff --git a/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileAPExample.json b/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileAPExample.json new file mode 100644 index 0000000..dc2d19a --- /dev/null +++ b/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileAPExample.json @@ -0,0 +1,50 @@ +{ + "model_type" : "Profile", + "id" : 2, + "customerId" : 2, + "profileType" : "equipment_ap", + "name" : "ApProfile", + "details" : { + "model_type" : "ApNetworkConfiguration", + "sampleDetailsStr" : null, + "networkConfigVersion" : "AP-1", + "equipmentType" : "AP", + "vlanNative" : true, + "vlan" : 0, + "ntpServer" : { + "model_type" : "AutoOrManualString", + "auto" : true, + "value" : "pool.ntp.org" + }, + "syslogRelay" : null, + "rtlsSettings" : null, + "syntheticClientEnabled" : true, + "ledControlEnabled" : true, + "equipmentDiscovery" : false, + "radioMap" : { + "is5GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is2dot4GHz" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzU" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + }, + "is5GHzL" : { + "model_type" : "RadioProfileConfiguration", + "bestApEnabled" : true, + "bestAPSteerType" : "both" + } + } + }, + "createdTimestamp" : 1589567037365, + "lastModifiedTimestamp" : 1589567037365, + "childProfileIds" : [ 1 ] +} \ No newline at end of file diff --git a/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileSsid.json b/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileSsid.json new file mode 100644 index 0000000..1012fcf --- /dev/null +++ b/opensync-gateway-static-process/src/main/resources/app/opensync/ProfileSsid.json @@ -0,0 +1,58 @@ +{ + "model_type" : "Profile", + "id" : 1, + "customerId" : 2, + "profileType" : "ssid", + "name" : "Connectus-local", + "details" : { + "model_type" : "SsidConfiguration", + "sampleDetailsStr" : null, + "ssid" : "Connectus-local", + "appliedRadios" : [ "is5GHzL", "is5GHzU", "is2dot4GHz" ], + "ssidAdminState" : "enabled", + "secureMode" : "wpa2PSK", + "vlanId" : 1, + "keyStr" : "12345678", + "broadcastSsid" : "enabled", + "keyRefresh" : 0, + "noLocalSubnets" : false, + "radiusServiceName" : null, + "captivePortalId" : null, + "bandwidthLimitDown" : 0, + "bandwidthLimitUp" : 0, + "videoTrafficOnly" : false, + "radioBasedConfigs" : { + "is5GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is2dot4GHz" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzU" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + }, + "is5GHzL" : { + "model_type" : "RadioBasedSsidConfiguration", + "enable80211r" : null, + "enable80211k" : null, + "enable80211v" : null + } + }, + "bonjourGatewayProfileId" : null, + "enable80211w" : null, + "wepConfig" : null, + "forwardMode" : null + }, + "createdTimestamp" : 1589567130432, + "lastModifiedTimestamp" : 1589567130432, + "childProfileIds" : [ ] +} \ No newline at end of file diff --git a/opensync-gateway-static-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) static.launch b/opensync-gateway-static-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) static.launch index b97c3bf..ee01d1d 100644 --- a/opensync-gateway-static-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) static.launch +++ b/opensync-gateway-static-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) static.launch @@ -13,5 +13,5 @@ - + diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/ConnectusOvsdbClient.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/ConnectusOvsdbClient.java index a7567ef..eab0662 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/ConnectusOvsdbClient.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/ConnectusOvsdbClient.java @@ -45,352 +45,353 @@ import io.netty.handler.ssl.SslContext; @Component public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { - private static final Logger LOG = LoggerFactory.getLogger(ConnectusOvsdbClient.class); - - @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.listenPort:6640}") - private int ovsdbListenPort; - - @org.springframework.beans.factory.annotation.Value("${connectus.manager.collectionIntervalSec.deviceStats:10}") - private long collectionIntervalSecDeviceStats; - - @Autowired - private SslContext sslContext; - - @Autowired - private OvsdbPassiveConnectionListener listener; - - @Autowired - private OvsdbDao ovsdbDao; - - @Autowired - private OpensyncExternalIntegrationInterface extIntegrationInterface; - - @Autowired - private OvsdbSessionMapInterface ovsdbSessionMapInterface; - - @PostConstruct - private void postCreate() { - listenForConnections(); - } - - public void listenForConnections() { - - ConnectionCallback connectionCallback = new ConnectionCallback() { - public void connected(OvsdbClient ovsdbClient) { - String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); - int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); - String subjectDn = null; - try { - subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) - .getSubjectDN().getName(); - - String clientCn = SslUtil.extractCN(subjectDn); - LOG.info("ovsdbClient connecting from {} on port {} clientCn {}", remoteHost, localPort, clientCn); - - ConnectNodeInfo connectNodeInfo = ovsdbDao.getConnectNodeInfo(ovsdbClient); - - // successfully connected - register it in our - // connectedClients table - // In Plume's environment clientCn is not unique that's why - // we are augmenting it - // with the serialNumber and using it as a key (equivalent - // of KDC unique qrCode) - String key = clientCn + "_" + connectNodeInfo.serialNumber; - ConnectusOvsdbClient.this.ovsdbSessionMapInterface.newSession(key, ovsdbClient); - extIntegrationInterface.apConnected(key, connectNodeInfo); - - // push configuration to AP - connectNodeInfo = processConnectRequest(ovsdbClient, clientCn, connectNodeInfo); - - LOG.info("ovsdbClient connected from {} on port {} key {} ", remoteHost, localPort, key); - LOG.info("ovsdbClient connectedClients = {}", - ConnectusOvsdbClient.this.ovsdbSessionMapInterface.getNumSessions()); - - monitorOvsdbStateTables(ovsdbClient, key); - - } catch (Exception e) { - LOG.error("ovsdbClient error", e); - // something is wrong with the SSL - ovsdbClient.shutdown(); - return; - } - - } - - public void disconnected(OvsdbClient ovsdbClient) { - String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); - int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); - String subjectDn = null; - try { - subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) - .getSubjectDN().getName(); - } catch (Exception e) { - // do nothing - } - - String clientCn = SslUtil.extractCN(subjectDn); - - // disconnected - deregister ovsdbClient from our - // connectedClients table - // unfortunately we only know clientCn at this point, but in - // Plume's environment - // they are not unique - // so we are doing a reverse lookup here, and then if we find - // the key we will - // remove the entry from the connectedClients. - String key = ConnectusOvsdbClient.this.ovsdbSessionMapInterface.lookupClientId(ovsdbClient); - - if (key != null) { - - // turn off monitor - try { - ovsdbClient.cancelMonitor(OvsdbDao.wifiRadioStateDbTable + "_" + key); - ovsdbClient.cancelMonitor(OvsdbDao.wifiVifStateDbTable + "_" + key); - ovsdbClient.cancelMonitor(OvsdbDao.wifiInetStateDbTable + "_" + key); - ovsdbClient.cancelMonitor(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key); - ovsdbClient.cancelMonitor(OvsdbDao.awlanNodeDbTable + "_" + key); - - } catch (OvsdbClientException e) { - LOG.warn("Could not cancel Monitor {}", e.getMessage()); - } - - extIntegrationInterface.apDisconnected(key); - ConnectusOvsdbClient.this.ovsdbSessionMapInterface.removeSession(key); - } - - ovsdbClient.shutdown(); - - LOG.info("ovsdbClient disconnected from {} on port {} clientCn {} key {} ", remoteHost, localPort, - clientCn, key); - LOG.info("ovsdbClient connectedClients = {}", - ConnectusOvsdbClient.this.ovsdbSessionMapInterface.getNumSessions()); - } - - }; - - listener.startListeningWithSsl(ovsdbListenPort, sslContext, connectionCallback).join(); - - LOG.debug("manager waiting for connection on port {}...", ovsdbListenPort); - } - - private ConnectNodeInfo processConnectRequest(OvsdbClient ovsdbClient, String clientCn, - ConnectNodeInfo connectNodeInfo) { - - LOG.debug("Starting Client connect"); - connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo); - - String apId = clientCn + "_" + connectNodeInfo.serialNumber; - OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); - - ovsdbDao.configureStats(ovsdbClient); - - // Check if device stats is configured in Wifi_Stats_Config table, - // provision it - // if needed - if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { - ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); - } - - ovsdbDao.provisionBridgePortInterface(ovsdbClient); - - ovsdbDao.removeAllSsids(ovsdbClient); - - if (opensyncAPConfig != null) { - ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig.getRadioConfig()); - ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig.getSsidConfigs()); - } - - ovsdbDao.configureWifiInet(ovsdbClient); - - LOG.debug("Client connect Done"); - return connectNodeInfo; - } - - public Set getConnectedClientIds() { - return ovsdbSessionMapInterface.getConnectedClientIds(); - } - - /** - * @param apId - * @param newRedirectorAddress - * @return updated value of the redirector - */ - public String changeRedirectorAddress(String apId, String newRedirectorAddress) { - OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); - if (ovsdbSession == null) { - throw new IllegalStateException("AP with id " + apId + " is not connected"); - } - - String ret = ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); - - return ret; - } - - @Override - public void processConfigChanged(String apId) { - LOG.debug("Starting processConfigChanged for {}", apId); - - OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); - if (ovsdbSession == null) { - throw new IllegalStateException("AP with id " + apId + " is not connected"); - } - - OvsdbClient ovsdbClient = ovsdbSession.getOvsdbClient(); - OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); - - if (opensyncAPConfig != null) { - ovsdbDao.removeAllSsids(ovsdbClient); - ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig.getRadioConfig()); - ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig.getSsidConfigs()); - } - - LOG.debug("Finished processConfigChanged for {}", apId); - } - - private void monitorOvsdbStateTables(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { - CompletableFuture rsCf = ovsdbClient - .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiRadioStateDbTable + "_" + key, - new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, - new MonitorRequest(new MonitorSelect(true, true, false, true)))), - new MonitorCallback() { - - @Override - public void update(TableUpdates tableUpdates) { - extIntegrationInterface.wifiRadioStatusDbTableUpdate( - ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key); - } - - }); - - extIntegrationInterface - .wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key); - - CompletableFuture isCf = ovsdbClient - .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key, - new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, - new MonitorRequest(new MonitorSelect(true, true, false, true)))), - new MonitorCallback() { - - @Override - public void update(TableUpdates tableUpdates) { - - extIntegrationInterface.wifiInetStateDbTableUpdate( - ovsdbDao.getOpensyncAPInetState(tableUpdates, key, ovsdbClient), key); - - } - - }); - - extIntegrationInterface - .wifiInetStateDbTableUpdate(ovsdbDao.getOpensyncAPInetState(isCf.join(), key, ovsdbClient), key); - - CompletableFuture vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, - OvsdbDao.wifiVifStateDbTable + "_" + key, - new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, - new MonitorRequest(new MonitorSelect(true, true, true, true)))), - new MonitorCallback() { - @Override - public void update(TableUpdates tableUpdates) { - // extIntegrationInterface.wifiVIFStateDbTableUpdate( - // ovsdbDao.getOpensyncAPVIFState(tableUpdates, - // key, ovsdbClient), key); - List vifsToDelete = new ArrayList(); - for (Entry tableUpdate : tableUpdates.getTableUpdates().entrySet()) { - - for (Entry rowUpdate : tableUpdate.getValue().getRowUpdates().entrySet()) { - if (rowUpdate.getValue().getOld() != null && rowUpdate.getValue().getNew() == null) { - Row row = rowUpdate.getValue().getOld(); - String ifName = null; - String ssid = null; - if (row.getColumns().get("ssid") != null && row.getColumns().get("ssid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - ssid = row.getStringColumn("ssid"); - } - if (row.getColumns().get("if_name") != null && row.getColumns().get("if_name").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - ifName = row.getStringColumn("if_name"); - } - if (ifName != null && ssid != null) { - OpensyncAPVIFState toBeDeleted = new OpensyncAPVIFState(); - toBeDeleted.setSsid(ssid); - toBeDeleted.setIfName(ifName); - vifsToDelete.add(toBeDeleted); - } - tableUpdate.getValue().getRowUpdates().remove(rowUpdate.getKey()); - } - - } - - if (tableUpdate.getValue().getRowUpdates().values().isEmpty()) { - tableUpdates.getTableUpdates().remove(tableUpdate.getKey()); - } - - } - - if (!vifsToDelete.isEmpty()) { - extIntegrationInterface.wifiVIFStateDbTableDelete(vifsToDelete, key); - } - if (tableUpdates.getTableUpdates().entrySet().isEmpty()) - extIntegrationInterface.wifiVIFStateDbTableUpdate( - ovsdbDao.getOpensyncAPVIFState(tableUpdates, key, ovsdbClient), key); - - } - - }); - - extIntegrationInterface.wifiVIFStateDbTableUpdate(ovsdbDao.getOpensyncAPVIFState(vsCf.join(), key, ovsdbClient), - key); - - CompletableFuture acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, - OvsdbDao.wifiAssociatedClientsDbTable + "_" + key, - new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, - new MonitorRequest(new MonitorSelect(true, true, true, true)))), - new MonitorCallback() { - - @Override - public void update(TableUpdates tableUpdates) { - - boolean insertOrModify = false; - for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { - - for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { - if (rowUpdate.getOld() != null && rowUpdate.getNew() == null) { - insertOrModify = false; - Row row = rowUpdate.getOld(); - String deletedClientMac = row.getStringColumn("mac"); - extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key); - } - } - - } - - if (insertOrModify) { - extIntegrationInterface.wifiAssociatedClientsDbTableUpdate( - ovsdbDao.getOpensyncWifiAssociatedClients(tableUpdates, key, ovsdbClient), key); - } - } - - }); - extIntegrationInterface.wifiAssociatedClientsDbTableUpdate( - ovsdbDao.getOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key); - - CompletableFuture awCf = ovsdbClient - .monitor(OvsdbDao.ovsdbName, OvsdbDao.awlanNodeDbTable + "_" + key, - new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, - new MonitorRequest(new MonitorSelect(true, false, false, true)))), - new MonitorCallback() { - - @Override - public void update(TableUpdates tableUpdates) { - extIntegrationInterface.awlanNodeDbTableUpdate( - ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key); - } - - }); - extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient), - key); - - } + private static final Logger LOG = LoggerFactory.getLogger(ConnectusOvsdbClient.class); + + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.listenPort:6640}") + private int ovsdbListenPort; + + @org.springframework.beans.factory.annotation.Value("${connectus.manager.collectionIntervalSec.deviceStats:10}") + private long collectionIntervalSecDeviceStats; + + @Autowired + private SslContext sslContext; + + @Autowired + private OvsdbPassiveConnectionListener listener; + + @Autowired + private OvsdbDao ovsdbDao; + + @Autowired + private OpensyncExternalIntegrationInterface extIntegrationInterface; + + @Autowired + private OvsdbSessionMapInterface ovsdbSessionMapInterface; + + @PostConstruct + private void postCreate() { + listenForConnections(); + } + + public void listenForConnections() { + + ConnectionCallback connectionCallback = new ConnectionCallback() { + public void connected(OvsdbClient ovsdbClient) { + String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); + int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); + String subjectDn = null; + try { + subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) + .getSubjectDN().getName(); + + String clientCn = SslUtil.extractCN(subjectDn); + LOG.info("ovsdbClient connecting from {} on port {} clientCn {}", remoteHost, localPort, clientCn); + + ConnectNodeInfo connectNodeInfo = ovsdbDao.getConnectNodeInfo(ovsdbClient); + + // successfully connected - register it in our + // connectedClients table + // In Plume's environment clientCn is not unique that's why + // we are augmenting it + // with the serialNumber and using it as a key (equivalent + // of KDC unique qrCode) + String key = clientCn + "_" + connectNodeInfo.serialNumber; + ConnectusOvsdbClient.this.ovsdbSessionMapInterface.newSession(key, ovsdbClient); + extIntegrationInterface.apConnected(key, connectNodeInfo); + + // push configuration to AP + connectNodeInfo = processConnectRequest(ovsdbClient, clientCn, connectNodeInfo); + + LOG.info("ovsdbClient connected from {} on port {} key {} ", remoteHost, localPort, key); + LOG.info("ovsdbClient connectedClients = {}", + ConnectusOvsdbClient.this.ovsdbSessionMapInterface.getNumSessions()); + + monitorOvsdbStateTables(ovsdbClient, key); + + } catch (Exception e) { + LOG.error("ovsdbClient error", e); + // something is wrong with the SSL + ovsdbClient.shutdown(); + return; + } + + } + + public void disconnected(OvsdbClient ovsdbClient) { + String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress(); + int localPort = ovsdbClient.getConnectionInfo().getLocalPort(); + String subjectDn = null; + try { + subjectDn = ((X509Certificate) ovsdbClient.getConnectionInfo().getRemoteCertificate()) + .getSubjectDN().getName(); + } catch (Exception e) { + // do nothing + } + + String clientCn = SslUtil.extractCN(subjectDn); + + // disconnected - deregister ovsdbClient from our + // connectedClients table + // unfortunately we only know clientCn at this point, but in + // Plume's environment + // they are not unique + // so we are doing a reverse lookup here, and then if we find + // the key we will + // remove the entry from the connectedClients. + String key = ConnectusOvsdbClient.this.ovsdbSessionMapInterface.lookupClientId(ovsdbClient); + + if (key != null) { + + // turn off monitor + try { + ovsdbClient.cancelMonitor(OvsdbDao.wifiRadioStateDbTable + "_" + key); + ovsdbClient.cancelMonitor(OvsdbDao.wifiVifStateDbTable + "_" + key); + ovsdbClient.cancelMonitor(OvsdbDao.wifiInetStateDbTable + "_" + key); + ovsdbClient.cancelMonitor(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key); + ovsdbClient.cancelMonitor(OvsdbDao.awlanNodeDbTable + "_" + key); + + } catch (OvsdbClientException e) { + LOG.warn("Could not cancel Monitor {}", e.getMessage()); + } + + extIntegrationInterface.apDisconnected(key); + ConnectusOvsdbClient.this.ovsdbSessionMapInterface.removeSession(key); + } + + ovsdbClient.shutdown(); + + LOG.info("ovsdbClient disconnected from {} on port {} clientCn {} key {} ", remoteHost, localPort, + clientCn, key); + LOG.info("ovsdbClient connectedClients = {}", + ConnectusOvsdbClient.this.ovsdbSessionMapInterface.getNumSessions()); + } + + }; + + listener.startListeningWithSsl(ovsdbListenPort, sslContext, connectionCallback).join(); + + LOG.debug("manager waiting for connection on port {}...", ovsdbListenPort); + } + + private ConnectNodeInfo processConnectRequest(OvsdbClient ovsdbClient, String clientCn, + ConnectNodeInfo connectNodeInfo) { + + LOG.debug("Starting Client connect"); + connectNodeInfo = ovsdbDao.updateConnectNodeInfoOnConnect(ovsdbClient, clientCn, connectNodeInfo); + + String apId = clientCn + "_" + connectNodeInfo.serialNumber; + OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); + + ovsdbDao.configureStats(ovsdbClient); + + // Check if device stats is configured in Wifi_Stats_Config table, + // provision it + // if needed + if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { + ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); + } + + ovsdbDao.provisionBridgePortInterface(ovsdbClient); + + ovsdbDao.removeAllSsids(ovsdbClient); + + if (opensyncAPConfig != null) { + ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); + ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); + } + + ovsdbDao.configureWifiInet(ovsdbClient); + + LOG.debug("Client connect Done"); + return connectNodeInfo; + } + + public Set getConnectedClientIds() { + return ovsdbSessionMapInterface.getConnectedClientIds(); + } + + /** + * @param apId + * @param newRedirectorAddress + * @return updated value of the redirector + */ + public String changeRedirectorAddress(String apId, String newRedirectorAddress) { + OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); + if (ovsdbSession == null) { + throw new IllegalStateException("AP with id " + apId + " is not connected"); + } + + String ret = ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); + + return ret; + } + + @Override + public void processConfigChanged(String apId) { + LOG.debug("Starting processConfigChanged for {}", apId); + + OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); + if (ovsdbSession == null) { + throw new IllegalStateException("AP with id " + apId + " is not connected"); + } + + OvsdbClient ovsdbClient = ovsdbSession.getOvsdbClient(); + OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); + + if (opensyncAPConfig != null) { + ovsdbDao.removeAllSsids(ovsdbClient); + ovsdbDao.configureWifiRadios(ovsdbClient, opensyncAPConfig); + ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); + } + + LOG.debug("Finished processConfigChanged for {}", apId); + } + + private void monitorOvsdbStateTables(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { + CompletableFuture rsCf = ovsdbClient + .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiRadioStateDbTable + "_" + key, + new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable, + new MonitorRequest(new MonitorSelect(true, true, false, true)))), + new MonitorCallback() { + + @Override + public void update(TableUpdates tableUpdates) { + extIntegrationInterface.wifiRadioStatusDbTableUpdate( + ovsdbDao.getOpensyncAPRadioState(tableUpdates, key, ovsdbClient), key); + } + + }); + + extIntegrationInterface + .wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key); + + CompletableFuture isCf = ovsdbClient + .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key, + new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable, + new MonitorRequest(new MonitorSelect(true, true, false, true)))), + new MonitorCallback() { + + @Override + public void update(TableUpdates tableUpdates) { + + extIntegrationInterface.wifiInetStateDbTableUpdate( + ovsdbDao.getOpensyncAPInetState(tableUpdates, key, ovsdbClient), key); + + } + + }); + + extIntegrationInterface + .wifiInetStateDbTableUpdate(ovsdbDao.getOpensyncAPInetState(isCf.join(), key, ovsdbClient), key); + + CompletableFuture vsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, + OvsdbDao.wifiVifStateDbTable + "_" + key, + new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable, + new MonitorRequest(new MonitorSelect(true, true, true, true)))), + new MonitorCallback() { + @Override + public void update(TableUpdates tableUpdates) { + // extIntegrationInterface.wifiVIFStateDbTableUpdate( + // ovsdbDao.getOpensyncAPVIFState(tableUpdates, + // key, ovsdbClient), key); + List vifsToDelete = new ArrayList(); + for (Entry tableUpdate : tableUpdates.getTableUpdates().entrySet()) { + + for (Entry rowUpdate : tableUpdate.getValue().getRowUpdates().entrySet()) { + if (rowUpdate.getValue().getOld() != null && rowUpdate.getValue().getNew() == null) { + Row row = rowUpdate.getValue().getOld(); + String ifName = null; + String ssid = null; + if (row.getColumns().get("ssid") != null && row.getColumns().get("ssid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + ssid = row.getStringColumn("ssid"); + } + if (row.getColumns().get("if_name") != null + && row.getColumns().get("if_name").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + ifName = row.getStringColumn("if_name"); + } + if (ifName != null && ssid != null) { + OpensyncAPVIFState toBeDeleted = new OpensyncAPVIFState(); + toBeDeleted.setSsid(ssid); + toBeDeleted.setIfName(ifName); + vifsToDelete.add(toBeDeleted); + } + tableUpdate.getValue().getRowUpdates().remove(rowUpdate.getKey()); + } + + } + + if (tableUpdate.getValue().getRowUpdates().values().isEmpty()) { + tableUpdates.getTableUpdates().remove(tableUpdate.getKey()); + } + + } + + if (!vifsToDelete.isEmpty()) { + extIntegrationInterface.wifiVIFStateDbTableDelete(vifsToDelete, key); + } + if (tableUpdates.getTableUpdates().entrySet().isEmpty()) + extIntegrationInterface.wifiVIFStateDbTableUpdate( + ovsdbDao.getOpensyncAPVIFState(tableUpdates, key, ovsdbClient), key); + + } + + }); + + extIntegrationInterface.wifiVIFStateDbTableUpdate(ovsdbDao.getOpensyncAPVIFState(vsCf.join(), key, ovsdbClient), + key); + + CompletableFuture acCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, + OvsdbDao.wifiAssociatedClientsDbTable + "_" + key, + new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiAssociatedClientsDbTable, + new MonitorRequest(new MonitorSelect(true, true, true, true)))), + new MonitorCallback() { + + @Override + public void update(TableUpdates tableUpdates) { + + boolean insertOrModify = false; + for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { + + for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { + if (rowUpdate.getOld() != null && rowUpdate.getNew() == null) { + insertOrModify = false; + Row row = rowUpdate.getOld(); + String deletedClientMac = row.getStringColumn("mac"); + extIntegrationInterface.wifiAssociatedClientsDbTableDelete(deletedClientMac, key); + } + } + + } + + if (insertOrModify) { + extIntegrationInterface.wifiAssociatedClientsDbTableUpdate( + ovsdbDao.getOpensyncWifiAssociatedClients(tableUpdates, key, ovsdbClient), key); + } + } + + }); + extIntegrationInterface.wifiAssociatedClientsDbTableUpdate( + ovsdbDao.getOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key); + + CompletableFuture awCf = ovsdbClient + .monitor(OvsdbDao.ovsdbName, OvsdbDao.awlanNodeDbTable + "_" + key, + new MonitorRequests(ImmutableMap.of(OvsdbDao.awlanNodeDbTable, + new MonitorRequest(new MonitorSelect(true, false, false, true)))), + new MonitorCallback() { + + @Override + public void update(TableUpdates tableUpdates) { + extIntegrationInterface.awlanNodeDbTableUpdate( + ovsdbDao.getOpensyncAWLANNode(tableUpdates, key, ovsdbClient), key); + } + + }); + extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient), + key); + + } @Override public String closeSession(String apId) { diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java index 95d9ee8..bc0f0f4 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java @@ -17,12 +17,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import com.telecominfraproject.wlan.core.model.equipment.ChannelBandwidth; +import com.telecominfraproject.wlan.core.model.equipment.DeploymentType; import com.telecominfraproject.wlan.core.model.equipment.RadioType; +import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration; +import com.telecominfraproject.wlan.equipment.models.DeviceMode; +import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration; +import com.telecominfraproject.wlan.equipment.models.RadioConfiguration; +import com.telecominfraproject.wlan.equipment.models.StateSetting; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; +import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState; -import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState; -import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPSsidConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients; @@ -33,6 +39,7 @@ import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiInetConfigInfo import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiStatsConfigInfo; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiVifConfigInfo; +import com.telecominfraproject.wlan.profile.ssid.models.SsidConfiguration; import com.vmware.ovsdb.exception.OvsdbClientException; import com.vmware.ovsdb.protocol.methods.RowUpdate; import com.vmware.ovsdb.protocol.methods.TableUpdate; @@ -55,2197 +62,2258 @@ import com.vmware.ovsdb.service.OvsdbClient; @Component public class OvsdbDao { - private static final Logger LOG = LoggerFactory.getLogger(OvsdbDao.class); + private static final Logger LOG = LoggerFactory.getLogger(OvsdbDao.class); - @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.managerAddr:3.88.149.10}") - private String managerIpAddr; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.managerAddr:3.88.149.10}") + private String managerIpAddr; - @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.listenPort:6640}") - private int ovsdbListenPort; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.listenPort:6640}") + private int ovsdbListenPort; - @org.springframework.beans.factory.annotation.Value("${connectus.mqttBroker.address:testportal.123wlan.com}") - private String mqttBrokerAddress; + @org.springframework.beans.factory.annotation.Value("${connectus.mqttBroker.address:testportal.123wlan.com}") + private String mqttBrokerAddress; - @org.springframework.beans.factory.annotation.Value("${connectus.mqttBroker.listenPort:1883}") - private int mqttBrokerListenPort; + @org.springframework.beans.factory.annotation.Value("${connectus.mqttBroker.listenPort:1883}") + private int mqttBrokerListenPort; - @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.timeoutSec:30}") - private int ovsdbTimeoutSec; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.timeoutSec:30}") + private int ovsdbTimeoutSec; - public static final String ovsdbName = "Open_vSwitch"; - public static final String awlanNodeDbTable = "AWLAN_Node"; - public static final String wifiStatsConfigDbTable = "Wifi_Stats_Config"; + public static final String ovsdbName = "Open_vSwitch"; + public static final String awlanNodeDbTable = "AWLAN_Node"; + public static final String wifiStatsConfigDbTable = "Wifi_Stats_Config"; - public static final String interfaceDbTable = "Interface"; - public static final String portDbTable = "Port"; - public static final String bridgeDbTable = "Bridge"; - - public static final String wifiRadioConfigDbTable = "Wifi_Radio_Config"; - public static final String wifiRadioStateDbTable = "Wifi_Radio_State"; - - public static final String wifiVifConfigDbTable = "Wifi_VIF_Config"; - public static final String wifiVifStateDbTable = "Wifi_VIF_State"; + public static final String interfaceDbTable = "Interface"; + public static final String portDbTable = "Port"; + public static final String bridgeDbTable = "Bridge"; + + public static final String wifiRadioConfigDbTable = "Wifi_Radio_Config"; + public static final String wifiRadioStateDbTable = "Wifi_Radio_State"; + + public static final String wifiVifConfigDbTable = "Wifi_VIF_Config"; + public static final String wifiVifStateDbTable = "Wifi_VIF_State"; - public static final String wifiInetConfigDbTable = "Wifi_Inet_Config"; - public static final String wifiInetStateDbTable = "Wifi_Inet_State"; + public static final String wifiInetConfigDbTable = "Wifi_Inet_Config"; + public static final String wifiInetStateDbTable = "Wifi_Inet_State"; - public static final String wifiAssociatedClientsDbTable = "Wifi_Associated_Clients"; + public static final String wifiAssociatedClientsDbTable = "Wifi_Associated_Clients"; - public ConnectNodeInfo getConnectNodeInfo(OvsdbClient ovsdbClient) { - ConnectNodeInfo ret = new ConnectNodeInfo(); + public ConnectNodeInfo getConnectNodeInfo(OvsdbClient ovsdbClient) { + ConnectNodeInfo ret = new ConnectNodeInfo(); - try { - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("mqtt_settings"); - columns.add("redirector_addr"); - columns.add("manager_addr"); - columns.add("sku_number"); - columns.add("serial_number"); - columns.add("model"); - columns.add("firmware_version"); - columns.add("platform_version"); - - operations.add(new Select(awlanNodeDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Select from {}:", awlanNodeDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - Row row = null; - if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { - row = ((SelectResult) result[0]).getRows().iterator().next(); - } - - ret.mqttSettings = (row != null) ? row.getMapColumn("mqtt_settings") : null; - ret.redirectorAddr = (row != null) ? row.getStringColumn("redirector_addr") : null; - ret.managerAddr = (row != null) ? row.getStringColumn("manager_addr") : null; - - ret.platformVersion = (row != null) ? row.getStringColumn("platform_version") : null; - ret.firmwareVersion = (row != null) ? row.getStringColumn("firmware_version") : null; - - ret.skuNumber = getSingleValueFromSet(row, "sku_number"); - ret.serialNumber = getSingleValueFromSet(row, "serial_number"); - ret.model = getSingleValueFromSet(row, "model"); - - // now populate macAddress, ipV4Address from Wifi_Inet_State - // first look them up for if_name = br-wan - fillInIpAddressAndMac(ovsdbClient, ret, "br-wan"); - if (ret.ipV4Address == null || ret.macAddress == null) { - // when not found - look them up for if_name = br-lan - fillInIpAddressAndMac(ovsdbClient, ret, "br-lan"); - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - return ret; - } - - public void fillInIpAddressAndMac(OvsdbClient ovsdbClient, ConnectNodeInfo connectNodeInfo, String ifName) { - try { - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - // populate macAddress, ipV4Address from Wifi_Inet_State - - columns.add("inet_addr"); - columns.add("hwaddr"); - - conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); - - operations.add(new Select(wifiInetStateDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Select from {}:", wifiInetStateDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - Row row = null; - if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { - row = ((SelectResult) result[0]).getRows().iterator().next(); - connectNodeInfo.ipV4Address = getSingleValueFromSet(row, "inet_addr"); - connectNodeInfo.macAddress = row.getStringColumn("hwaddr"); - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - } - - public ConnectNodeInfo updateConnectNodeInfoOnConnect(OvsdbClient ovsdbClient, String clientCn, - ConnectNodeInfo incomingConnectNodeInfo) { - ConnectNodeInfo ret = incomingConnectNodeInfo.clone(); - - try { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - - // set device_mode = cloud - plume's APs do not use it - // updateColumns.put("device_mode", new Atom("cloud") ); - - // update sku_number if it was empty - if (ret.skuNumber == null || ret.skuNumber.isEmpty()) { - ret.skuNumber = "connectus.ai_" + ret.serialNumber; - updateColumns.put("sku_number", new Atom(ret.skuNumber)); - } - - // Configure the MQTT connection - // ovsh u AWLAN_Node - // mqtt_settings:ins:'["map",[["broker","testportal.123wlan.com"],["topics","/ap/dev-ap-0300/opensync"],["qos","0"],["port","1883"],["remote_log","1"]]]' - Map newMqttSettings = new HashMap<>(); - newMqttSettings.put("broker", mqttBrokerAddress); - newMqttSettings.put("topics", "/ap/" + clientCn + "_" + ret.serialNumber + "/opensync"); - newMqttSettings.put("port", "" + mqttBrokerListenPort); - newMqttSettings.put("compress", "zlib"); - newMqttSettings.put("qos", "0"); - newMqttSettings.put("remote_log", "1"); - - if (ret.mqttSettings == null || !ret.mqttSettings.equals(newMqttSettings)) { - @SuppressWarnings("unchecked") - com.vmware.ovsdb.protocol.operation.notation.Map mgttSettings = com.vmware.ovsdb.protocol.operation.notation.Map - .of(newMqttSettings); - ret.mqttSettings = newMqttSettings; - updateColumns.put("mqtt_settings", mgttSettings); - } - - if (!updateColumns.isEmpty()) { - Row row = new Row(updateColumns); - operations.add(new Update(awlanNodeDbTable, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated {}:", awlanNodeDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - return ret; - } - - /** - * @param ovsdbClient - * @return value of reporting_interval column for the stats_type=device from - * the Wifi_Stats_Config table. If value is not provisioned then - * return -1. - */ - public long getDeviceStatsReportingInterval(OvsdbClient ovsdbClient) { - long ret = -1; - try { - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - - columns.add("reporting_interval"); - columns.add("stats_type"); - columns.add("radio_type"); - - conditions.add(new Condition("stats_type", Function.EQUALS, new Atom<>("device"))); - - operations.add(new Select(wifiStatsConfigDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Select from {}:", wifiStatsConfigDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - Row row = null; - if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { - row = ((SelectResult) result[0]).getRows().iterator().next(); - ret = row.getIntegerColumn("reporting_interval"); - LOG.info("Stats collection for stats_type=device is already configured with reporting_interval = {}", - ret); - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - return ret; - } - - /** - * @param ovsdbClient - * @param value - * of reporting_interval column for the stats_type=device from - * the Wifi_Stats_Config table. If value is not provisioned then - * return -1. - */ - public void updateDeviceStatsReportingInterval(OvsdbClient ovsdbClient, long newValue) { - try { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - - // turn on stats collection over MQTT: (reporting_interval is in - // seconds?) - // $ ovsh i Wifi_Stats_Config reporting_interval:=10 - // radio_type:="2.4G" stats_type:="device" - - updateColumns.put("reporting_interval", new Atom(10)); - updateColumns.put("radio_type", new Atom("2.4G")); - updateColumns.put("stats_type", new Atom("device")); - - Row row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated {}:", wifiStatsConfigDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - } - - public void performRedirect(OvsdbClient ovsdbClient, String clientCn) { - - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("manager_addr"); - columns.add("sku_number"); - columns.add("serial_number"); - columns.add("model"); - columns.add("firmware_version"); - - try { - LOG.debug("Starting Redirect"); - - operations.add(new Select(awlanNodeDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Select from AWLAN_Node:"); + try { + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("mqtt_settings"); + columns.add("redirector_addr"); + columns.add("manager_addr"); + columns.add("sku_number"); + columns.add("serial_number"); + columns.add("model"); + columns.add("firmware_version"); + columns.add("platform_version"); + + operations.add(new Select(awlanNodeDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Select from {}:", awlanNodeDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + Row row = null; + if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { + row = ((SelectResult) result[0]).getRows().iterator().next(); + } + + ret.mqttSettings = (row != null) ? row.getMapColumn("mqtt_settings") : null; + ret.redirectorAddr = (row != null) ? row.getStringColumn("redirector_addr") : null; + ret.managerAddr = (row != null) ? row.getStringColumn("manager_addr") : null; + + ret.platformVersion = (row != null) ? row.getStringColumn("platform_version") : null; + ret.firmwareVersion = (row != null) ? row.getStringColumn("firmware_version") : null; + + ret.skuNumber = getSingleValueFromSet(row, "sku_number"); + ret.serialNumber = getSingleValueFromSet(row, "serial_number"); + ret.model = getSingleValueFromSet(row, "model"); + + // now populate macAddress, ipV4Address from Wifi_Inet_State + // first look them up for if_name = br-wan + fillInIpAddressAndMac(ovsdbClient, ret, "br-wan"); + if (ret.ipV4Address == null || ret.macAddress == null) { + // when not found - look them up for if_name = br-lan + fillInIpAddressAndMac(ovsdbClient, ret, "br-lan"); + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + return ret; + } + + public void fillInIpAddressAndMac(OvsdbClient ovsdbClient, ConnectNodeInfo connectNodeInfo, String ifName) { + try { + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + // populate macAddress, ipV4Address from Wifi_Inet_State + + columns.add("inet_addr"); + columns.add("hwaddr"); + + conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); + + operations.add(new Select(wifiInetStateDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Select from {}:", wifiInetStateDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + Row row = null; + if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { + row = ((SelectResult) result[0]).getRows().iterator().next(); + connectNodeInfo.ipV4Address = getSingleValueFromSet(row, "inet_addr"); + connectNodeInfo.macAddress = row.getStringColumn("hwaddr"); + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + } + + public ConnectNodeInfo updateConnectNodeInfoOnConnect(OvsdbClient ovsdbClient, String clientCn, + ConnectNodeInfo incomingConnectNodeInfo) { + ConnectNodeInfo ret = incomingConnectNodeInfo.clone(); + + try { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + + // set device_mode = cloud - plume's APs do not use it + // updateColumns.put("device_mode", new Atom("cloud") ); + + // update sku_number if it was empty + if (ret.skuNumber == null || ret.skuNumber.isEmpty()) { + ret.skuNumber = "connectus.ai_" + ret.serialNumber; + updateColumns.put("sku_number", new Atom(ret.skuNumber)); + } + + // Configure the MQTT connection + // ovsh u AWLAN_Node + // mqtt_settings:ins:'["map",[["broker","testportal.123wlan.com"],["topics","/ap/dev-ap-0300/opensync"],["qos","0"],["port","1883"],["remote_log","1"]]]' + Map newMqttSettings = new HashMap<>(); + newMqttSettings.put("broker", mqttBrokerAddress); + newMqttSettings.put("topics", "/ap/" + clientCn + "_" + ret.serialNumber + "/opensync"); + newMqttSettings.put("port", "" + mqttBrokerListenPort); + newMqttSettings.put("compress", "zlib"); + newMqttSettings.put("qos", "0"); + newMqttSettings.put("remote_log", "1"); + + if (ret.mqttSettings == null || !ret.mqttSettings.equals(newMqttSettings)) { + @SuppressWarnings("unchecked") + com.vmware.ovsdb.protocol.operation.notation.Map mgttSettings = com.vmware.ovsdb.protocol.operation.notation.Map + .of(newMqttSettings); + ret.mqttSettings = newMqttSettings; + updateColumns.put("mqtt_settings", mgttSettings); + } + + if (!updateColumns.isEmpty()) { + Row row = new Row(updateColumns); + operations.add(new Update(awlanNodeDbTable, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated {}:", awlanNodeDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + return ret; + } + + /** + * @param ovsdbClient + * @return value of reporting_interval column for the stats_type=device from the + * Wifi_Stats_Config table. If value is not provisioned then return -1. + */ + public long getDeviceStatsReportingInterval(OvsdbClient ovsdbClient) { + long ret = -1; + try { + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + + columns.add("reporting_interval"); + columns.add("stats_type"); + columns.add("radio_type"); + + conditions.add(new Condition("stats_type", Function.EQUALS, new Atom<>("device"))); + + operations.add(new Select(wifiStatsConfigDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Select from {}:", wifiStatsConfigDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + Row row = null; + if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { + row = ((SelectResult) result[0]).getRows().iterator().next(); + ret = row.getIntegerColumn("reporting_interval"); + LOG.info("Stats collection for stats_type=device is already configured with reporting_interval = {}", + ret); + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + return ret; + } + + /** + * @param ovsdbClient + * @param value of reporting_interval column for the stats_type=device + * from the Wifi_Stats_Config table. If value is not + * provisioned then return -1. + */ + public void updateDeviceStatsReportingInterval(OvsdbClient ovsdbClient, long newValue) { + try { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + + // turn on stats collection over MQTT: (reporting_interval is in + // seconds?) + // $ ovsh i Wifi_Stats_Config reporting_interval:=10 + // radio_type:="2.4G" stats_type:="device" + + updateColumns.put("reporting_interval", new Atom(10)); + updateColumns.put("radio_type", new Atom("2.4G")); + updateColumns.put("stats_type", new Atom("device")); + + Row row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated {}:", wifiStatsConfigDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + } + + public void performRedirect(OvsdbClient ovsdbClient, String clientCn) { + + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("manager_addr"); + columns.add("sku_number"); + columns.add("serial_number"); + columns.add("model"); + columns.add("firmware_version"); + + try { + LOG.debug("Starting Redirect"); + + operations.add(new Select(awlanNodeDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Select from AWLAN_Node:"); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } - String skuNumber = null; - String serialNumber = null; - String model = null; - String firmwareVersion = null; + String skuNumber = null; + String serialNumber = null; + String model = null; + String firmwareVersion = null; - Row row = null; - if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { - row = ((SelectResult) result[0]).getRows().iterator().next(); - } + Row row = null; + if (result != null && result.length > 0 && !((SelectResult) result[0]).getRows().isEmpty()) { + row = ((SelectResult) result[0]).getRows().iterator().next(); + } - firmwareVersion = (row != null) ? row.getStringColumn("firmware_version") : null; + firmwareVersion = (row != null) ? row.getStringColumn("firmware_version") : null; - skuNumber = getSingleValueFromSet(row, "sku_number"); - serialNumber = getSingleValueFromSet(row, "serial_number"); - model = getSingleValueFromSet(row, "model"); + skuNumber = getSingleValueFromSet(row, "sku_number"); + serialNumber = getSingleValueFromSet(row, "serial_number"); + model = getSingleValueFromSet(row, "model"); - LOG.info("Redirecting AP Node: clientCn {} serialNumber {} model {} firmwareVersion {} skuNumber {}", - clientCn, serialNumber, model, firmwareVersion, skuNumber); + LOG.info("Redirecting AP Node: clientCn {} serialNumber {} model {} firmwareVersion {} skuNumber {}", + clientCn, serialNumber, model, firmwareVersion, skuNumber); - // Update table AWLAN_Node - set manager_addr - operations.clear(); - Map updateColumns = new HashMap<>(); + // Update table AWLAN_Node - set manager_addr + operations.clear(); + Map updateColumns = new HashMap<>(); - updateColumns.put("manager_addr", new Atom("ssl:" + managerIpAddr + ":" + ovsdbListenPort)); + updateColumns.put("manager_addr", new Atom("ssl:" + managerIpAddr + ":" + ovsdbListenPort)); - row = new Row(updateColumns); - operations.add(new Update(awlanNodeDbTable, row)); + row = new Row(updateColumns); + operations.add(new Update(awlanNodeDbTable, row)); - fResult = ovsdbClient.transact(ovsdbName, operations); - result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + fResult = ovsdbClient.transact(ovsdbName, operations); + result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - LOG.debug("Updated AWLAN_Node:"); + LOG.debug("Updated AWLAN_Node:"); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } - LOG.debug("Redirect Done"); - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error when redirecting AP Node", e); - throw new RuntimeException(e); - } + LOG.debug("Redirect Done"); + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error when redirecting AP Node", e); + throw new RuntimeException(e); + } - } + } - public T getSingleValueFromSet(Row row, String columnName) { + public T getSingleValueFromSet(Row row, String columnName) { - Set set = (row != null) ? row.getSetColumn(columnName) : null; - T ret = (set != null && !set.isEmpty()) ? set.iterator().next() : null; + Set set = (row != null) ? row.getSetColumn(columnName) : null; + T ret = (set != null && !set.isEmpty()) ? set.iterator().next() : null; - return ret; - } + return ret; + } - public Map getProvisionedInterfaces(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); + public Map getProvisionedInterfaces(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("name"); - columns.add("type"); - columns.add("options"); - columns.add("_uuid"); - columns.add("ofport"); - columns.add("mtu"); - columns.add("ifindex"); - columns.add("link_state"); - columns.add("admin_state"); + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("name"); + columns.add("type"); + columns.add("options"); + columns.add("_uuid"); + columns.add("ofport"); + columns.add("mtu"); + columns.add("ifindex"); + columns.add("link_state"); + columns.add("admin_state"); - try { - LOG.debug("Retrieving Interfaces:"); + try { + LOG.debug("Retrieving Interfaces:"); - operations.add(new Select(interfaceDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + operations.add(new Select(interfaceDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } - for (Row row : ((SelectResult) result[0]).getRows()) { + for (Row row : ((SelectResult) result[0]).getRows()) { - InterfaceInfo interfaceInfo = new InterfaceInfo(); - interfaceInfo.name = row.getStringColumn("name"); - interfaceInfo.type = row.getStringColumn("type"); - interfaceInfo.uuid = row.getUuidColumn("_uuid"); + InterfaceInfo interfaceInfo = new InterfaceInfo(); + interfaceInfo.name = row.getStringColumn("name"); + interfaceInfo.type = row.getStringColumn("type"); + interfaceInfo.uuid = row.getUuidColumn("_uuid"); - Long tmp = getSingleValueFromSet(row, "ofport"); - interfaceInfo.ofport = tmp != null ? tmp.intValue() : 0; + Long tmp = getSingleValueFromSet(row, "ofport"); + interfaceInfo.ofport = tmp != null ? tmp.intValue() : 0; - tmp = getSingleValueFromSet(row, "mtu"); - interfaceInfo.mtu = tmp != null ? tmp.intValue() : 0; + tmp = getSingleValueFromSet(row, "mtu"); + interfaceInfo.mtu = tmp != null ? tmp.intValue() : 0; - tmp = getSingleValueFromSet(row, "ifindex"); - interfaceInfo.ifIndex = tmp != null ? tmp.intValue() : 0; + tmp = getSingleValueFromSet(row, "ifindex"); + interfaceInfo.ifIndex = tmp != null ? tmp.intValue() : 0; - String tmpStr = getSingleValueFromSet(row, "link_state"); - interfaceInfo.linkState = tmpStr != null ? tmpStr : ""; + String tmpStr = getSingleValueFromSet(row, "link_state"); + interfaceInfo.linkState = tmpStr != null ? tmpStr : ""; - tmpStr = getSingleValueFromSet(row, "admin_state"); - interfaceInfo.adminState = tmpStr != null ? tmpStr : ""; + tmpStr = getSingleValueFromSet(row, "admin_state"); + interfaceInfo.adminState = tmpStr != null ? tmpStr : ""; - interfaceInfo.options = row.getMapColumn("options"); + interfaceInfo.options = row.getMapColumn("options"); - ret.put(interfaceInfo.name, interfaceInfo); - } + ret.put(interfaceInfo.name, interfaceInfo); + } - LOG.debug("Retrieved Interfaces: {}", ret); + LOG.debug("Retrieved Interfaces: {}", ret); - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedInterfaces", e); + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedInterfaces", e); - throw new RuntimeException(e); - } + throw new RuntimeException(e); + } - return ret; - } + return ret; + } - public Map getProvisionedPorts(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); + public Map getProvisionedPorts(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("name"); - columns.add("_uuid"); - columns.add("interfaces"); + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("name"); + columns.add("_uuid"); + columns.add("interfaces"); - try { - LOG.debug("Retrieving Ports:"); + try { + LOG.debug("Retrieving Ports:"); - operations.add(new Select(portDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + operations.add(new Select(portDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } - for (Row row : ((SelectResult) result[0]).getRows()) { + for (Row row : ((SelectResult) result[0]).getRows()) { - PortInfo portInfo = new PortInfo(); - portInfo.name = row.getStringColumn("name"); - portInfo.uuid = row.getUuidColumn("_uuid"); - portInfo.interfaceUuids = row.getSetColumn("interfaces"); + PortInfo portInfo = new PortInfo(); + portInfo.name = row.getStringColumn("name"); + portInfo.uuid = row.getUuidColumn("_uuid"); + portInfo.interfaceUuids = row.getSetColumn("interfaces"); - ret.put(portInfo.name, portInfo); - } + ret.put(portInfo.name, portInfo); + } - LOG.debug("Retrieved Ports: {}", ret); + LOG.debug("Retrieved Ports: {}", ret); - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedPorts", e); - throw new RuntimeException(e); - } + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedPorts", e); + throw new RuntimeException(e); + } - return ret; - } + return ret; + } - public Map getProvisionedBridges(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); + public Map getProvisionedBridges(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("name"); - columns.add("_uuid"); - columns.add("ports"); + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("name"); + columns.add("_uuid"); + columns.add("ports"); - try { - LOG.debug("Retrieving Bridges:"); + try { + LOG.debug("Retrieving Bridges:"); - operations.add(new Select(bridgeDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + operations.add(new Select(bridgeDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } - for (Row row : ((SelectResult) result[0]).getRows()) { - - BridgeInfo bridgeInfo = new BridgeInfo(); - bridgeInfo.name = row.getStringColumn("name"); - bridgeInfo.uuid = row.getUuidColumn("_uuid"); - bridgeInfo.portUuids = row.getSetColumn("ports"); - - ret.put(bridgeInfo.name, bridgeInfo); - } - - LOG.debug("Retrieved Bridges: {}", ret); - - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedBridges", e); - throw new RuntimeException(e); - } - - return ret; - } - - public Map getProvisionedWifiRadioConfigs(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); - - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - - columns.add("_uuid"); - columns.add("if_name"); - - columns.add("channel"); - columns.add("channel_mode"); - columns.add("country"); - columns.add("enabled"); - columns.add("ht_mode"); - columns.add("tx_power"); - columns.add("vif_configs"); - columns.add("freq_band"); - columns.add("hw_config"); - - try { - LOG.debug("Retrieving WifiRadioConfig:"); - - operations.add(new Select(wifiRadioConfigDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - for (Row row : ((SelectResult) result[0]).getRows()) { - - WifiRadioConfigInfo wifiRadioConfigInfo = new WifiRadioConfigInfo(); - wifiRadioConfigInfo.uuid = row.getUuidColumn("_uuid"); - wifiRadioConfigInfo.ifName = row.getStringColumn("if_name"); - Long channelTmp = getSingleValueFromSet(row, "channel"); - if (channelTmp == null) { - channelTmp = -1L; - } - wifiRadioConfigInfo.channel = channelTmp.intValue(); - wifiRadioConfigInfo.channelMode = getSingleValueFromSet(row, "channel_mode"); - wifiRadioConfigInfo.country = getSingleValueFromSet(row, "country"); - Boolean tmp = getSingleValueFromSet(row, "enabled"); - wifiRadioConfigInfo.enabled = tmp != null ? tmp : false; - wifiRadioConfigInfo.htMode = getSingleValueFromSet(row, "ht_mode"); - wifiRadioConfigInfo.txPower = getSingleValueFromSet(row, "txPower"); - wifiRadioConfigInfo.vifConfigUuids = row.getSetColumn("vif_configs"); - wifiRadioConfigInfo.freqBand = row.getStringColumn("freq_band"); - wifiRadioConfigInfo.hwConfig = row.getMapColumn("hw_config"); - - ret.put(wifiRadioConfigInfo.ifName, wifiRadioConfigInfo); - } - - LOG.debug("Retrieved WifiRadioConfig: {}", ret); - - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedWifiRadioConfigs", e); - throw new RuntimeException(e); - } - - return ret; - } - - public Map getProvisionedWifiVifConfigs(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); - - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("bridge"); - columns.add("_uuid"); - columns.add("btm"); - columns.add("enabled"); - columns.add("ft_psk"); - columns.add("group_rekey"); - columns.add("if_name"); - columns.add("mode"); - columns.add("rrm"); - columns.add("ssid"); - columns.add("ssid_broadcast"); - columns.add("uapsd_enable"); - columns.add("vif_radio_idx"); - columns.add("security"); - - try { - LOG.debug("Retrieving WifiVifConfig:"); - - operations.add(new Select(wifiVifConfigDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - for (Row row : ((SelectResult) result[0]).getRows()) { - - WifiVifConfigInfo wifiVifConfigInfo = new WifiVifConfigInfo(); - wifiVifConfigInfo.bridge = row.getStringColumn("bridge"); - wifiVifConfigInfo.uuid = row.getUuidColumn("_uuid"); - wifiVifConfigInfo.btm = row.getIntegerColumn("btm").intValue(); - wifiVifConfigInfo.enabled = row.getBooleanColumn("enabled"); - wifiVifConfigInfo.ftPsk = row.getIntegerColumn("ft_psk").intValue(); - wifiVifConfigInfo.groupRekey = row.getIntegerColumn("group_rekey").intValue(); - wifiVifConfigInfo.ifName = row.getStringColumn("if_name"); - wifiVifConfigInfo.mode = row.getStringColumn("mode"); - wifiVifConfigInfo.rrm = row.getIntegerColumn("rrm").intValue(); - wifiVifConfigInfo.ssid = row.getStringColumn("ssid"); - wifiVifConfigInfo.ssidBroadcast = row.getStringColumn("ssid_broadcast"); - wifiVifConfigInfo.uapsdEnable = row.getBooleanColumn("uapsd_enable"); - wifiVifConfigInfo.vifRadioIdx = row.getIntegerColumn("vif_radio_idx").intValue(); - wifiVifConfigInfo.security = row.getMapColumn("security"); - - ret.put(wifiVifConfigInfo.ifName + '_' + wifiVifConfigInfo.ssid, wifiVifConfigInfo); - } - - LOG.debug("Retrieved WifiVifConfigs: {}", ret); - - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedWifiVifConfigs", e); - throw new RuntimeException(e); - } - - return ret; - } - - public Map getProvisionedWifiInetConfigs(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); - - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("NAT"); - columns.add("_uuid"); - columns.add("enabled"); - columns.add("if_name"); - columns.add("if_type"); - columns.add("ip_assign_scheme"); - columns.add("network"); - - try { - LOG.debug("Retrieving WifiInetConfig:"); - - operations.add(new Select(wifiInetConfigDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - for (Row row : ((SelectResult) result[0]).getRows()) { - - WifiInetConfigInfo wifiInetConfigInfo = new WifiInetConfigInfo(); - Boolean natTmp = getSingleValueFromSet(row, "NAT"); - wifiInetConfigInfo.nat = natTmp != null ? natTmp : false; - - wifiInetConfigInfo.uuid = row.getUuidColumn("_uuid"); - wifiInetConfigInfo.enabled = row.getBooleanColumn("enabled"); - wifiInetConfigInfo.ifName = row.getStringColumn("if_name"); - wifiInetConfigInfo.ifType = row.getStringColumn("if_type"); - wifiInetConfigInfo.ipAssignScheme = row.getStringColumn("ip_assign_scheme"); - wifiInetConfigInfo.network = row.getBooleanColumn("network"); - - ret.put(wifiInetConfigInfo.ifName, wifiInetConfigInfo); - } - - LOG.debug("Retrieved WifiInetConfigs: {}", ret); - - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedWifiInetConfigs", e); - throw new RuntimeException(e); - } - - return ret; - } - - public Map getProvisionedWifiStatsConfigs(OvsdbClient ovsdbClient) { - Map ret = new HashMap<>(); - - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - List columns = new ArrayList<>(); - columns.add("channel_list"); - columns.add("radio_type"); - columns.add("reporting_interval"); - columns.add("sampling_interval"); - columns.add("stats_type"); - columns.add("survey_interval_ms"); - columns.add("survey_type"); - columns.add("threshold"); - columns.add("_uuid"); - - try { - LOG.debug("Retrieving WifiStatsConfigs:"); - - operations.add(new Select(wifiStatsConfigDbTable, conditions, columns)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - for (Row row : ((SelectResult) result[0]).getRows()) { - - WifiStatsConfigInfo wifiStatsConfigInfo = new WifiStatsConfigInfo(); - - wifiStatsConfigInfo.channelList = row.getSetColumn("channel_list"); - wifiStatsConfigInfo.radioType = row.getStringColumn("radio_type"); - wifiStatsConfigInfo.reportingInterval = row.getIntegerColumn("reporting_interval").intValue(); - wifiStatsConfigInfo.samplingInterval = row.getIntegerColumn("sampling_interval").intValue(); - wifiStatsConfigInfo.statsType = row.getStringColumn("stats_type"); - wifiStatsConfigInfo.surveyType = getSingleValueFromSet(row, "survey_type"); - Long tmp = getSingleValueFromSet(row, "survey_interval_ms"); - wifiStatsConfigInfo.surveyIntervalMs = tmp != null ? tmp.intValue() : 0; - wifiStatsConfigInfo.threshold = row.getMapColumn("threshold"); - wifiStatsConfigInfo.uuid = row.getUuidColumn("_uuid"); - - if (wifiStatsConfigInfo.surveyType == null) { - ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType, wifiStatsConfigInfo); - } else { - ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType + "_" - + wifiStatsConfigInfo.surveyType, wifiStatsConfigInfo); - } - } - - LOG.debug("Retrieved WifiStatsConfigs: {}", ret); - - } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { - LOG.error("Error in getProvisionedWifiStatsConfigs", e); - - throw new RuntimeException(e); - } - - return ret; - } - - public void provisionSingleBridgePortInterface(OvsdbClient ovsdbClient, String interfaceName, String bridgeName, - String interfaceType, Map interfaceOptions, - Map provisionedInterfaces, Map provisionedPorts, - Map provisionedBridges) - throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { - - if (!provisionedInterfaces.containsKey(interfaceName)) { - // Create this interface and link it to the port and the bridge - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - List conditions = new ArrayList<>(); - - updateColumns.put("name", new Atom<>(interfaceName)); - if (interfaceType != null) { - updateColumns.put("type", new Atom<>(interfaceType)); - } - // updateColumns.put("admin_state", new Atom("up") ); - // updateColumns.put("link_state", new Atom("up") ); - // updateColumns.put("ifindex", new Atom(ifIndex) ); - // updateColumns.put("mtu", new Atom(1500) ); - // updateColumns.put("ofport", new Atom(ofport) ); - - if (interfaceOptions != null) { - @SuppressWarnings("unchecked") - com.vmware.ovsdb.protocol.operation.notation.Map ifOptions = com.vmware.ovsdb.protocol.operation.notation.Map - .of(interfaceOptions); - updateColumns.put("options", ifOptions); - } - - Uuid interfaceUuid = null; - - Row row = new Row(updateColumns); - operations.add(new Insert(interfaceDbTable, row)); - - { - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Provisioned Interface for {}", interfaceName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - if (res instanceof InsertResult) { - interfaceUuid = ((InsertResult) res).getUuid(); - } - } - } - - if (interfaceUuid == null) { - throw new IllegalStateException("Interface entry was not created successfully"); - } - - Uuid portUuid = null; - operations = new ArrayList<>(); - // link the interface to the port, create port if necessary - if (!provisionedPorts.containsKey(interfaceName)) { - // need to create port - updateColumns = new HashMap<>(); - - // portUuid = new Uuid(new UUID(System.currentTimeMillis(), - // System.nanoTime())) ; - updateColumns.put("name", new Atom(interfaceName)); - // updateColumns.put("_uuid", new Atom(portUuid)); - - Set portInterfacesSet = new HashSet<>(); - portInterfacesSet.add(interfaceUuid); - com.vmware.ovsdb.protocol.operation.notation.Set portInterfaces = com.vmware.ovsdb.protocol.operation.notation.Set - .of(portInterfacesSet); - updateColumns.put("interfaces", portInterfaces); - - row = new Row(updateColumns); - operations.add(new Insert(portDbTable, row)); - - { - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Provisioned Port for {}", interfaceName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - if (res instanceof InsertResult) { - portUuid = ((InsertResult) res).getUuid(); - } - } - } - - } else { - // need to update port - PortInfo existingPort = provisionedPorts.get(interfaceName); - portUuid = existingPort.uuid; - - conditions = new ArrayList<>(); - updateColumns = new HashMap<>(); - - conditions.add(new Condition("name", Function.EQUALS, new Atom<>(interfaceName))); - - Set portInterfacesSet = new HashSet<>(); - if (existingPort.interfaceUuids != null) { - portInterfacesSet.addAll(existingPort.interfaceUuids); - } - portInterfacesSet.add(interfaceUuid); - com.vmware.ovsdb.protocol.operation.notation.Set portInterfaces = com.vmware.ovsdb.protocol.operation.notation.Set - .of(portInterfacesSet); - updateColumns.put("interfaces", portInterfaces); - - row = new Row(updateColumns); - operations.add(new Update(portDbTable, row)); - - { - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Updated Port for {}", interfaceName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - } - - if (portUuid == null) { - throw new IllegalStateException("Port entry was not created successfully"); - } + for (Row row : ((SelectResult) result[0]).getRows()) { + + BridgeInfo bridgeInfo = new BridgeInfo(); + bridgeInfo.name = row.getStringColumn("name"); + bridgeInfo.uuid = row.getUuidColumn("_uuid"); + bridgeInfo.portUuids = row.getSetColumn("ports"); + + ret.put(bridgeInfo.name, bridgeInfo); + } + + LOG.debug("Retrieved Bridges: {}", ret); + + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedBridges", e); + throw new RuntimeException(e); + } + + return ret; + } + + public Map getProvisionedWifiRadioConfigs(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); + + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + + columns.add("_uuid"); + columns.add("if_name"); + + columns.add("channel"); + columns.add("channel_mode"); + columns.add("country"); + columns.add("enabled"); + columns.add("ht_mode"); + columns.add("tx_power"); + columns.add("vif_configs"); + columns.add("freq_band"); + columns.add("hw_config"); + + try { + LOG.debug("Retrieving WifiRadioConfig:"); + + operations.add(new Select(wifiRadioConfigDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + for (Row row : ((SelectResult) result[0]).getRows()) { + + WifiRadioConfigInfo wifiRadioConfigInfo = new WifiRadioConfigInfo(); + wifiRadioConfigInfo.uuid = row.getUuidColumn("_uuid"); + wifiRadioConfigInfo.ifName = row.getStringColumn("if_name"); + Long channelTmp = getSingleValueFromSet(row, "channel"); + if (channelTmp == null) { + channelTmp = -1L; + } + wifiRadioConfigInfo.channel = channelTmp.intValue(); + wifiRadioConfigInfo.channelMode = getSingleValueFromSet(row, "channel_mode"); + wifiRadioConfigInfo.country = getSingleValueFromSet(row, "country"); + Boolean tmp = getSingleValueFromSet(row, "enabled"); + wifiRadioConfigInfo.enabled = tmp != null ? tmp : false; + wifiRadioConfigInfo.htMode = getSingleValueFromSet(row, "ht_mode"); + wifiRadioConfigInfo.txPower = getSingleValueFromSet(row, "txPower"); + wifiRadioConfigInfo.vifConfigUuids = row.getSetColumn("vif_configs"); + wifiRadioConfigInfo.freqBand = row.getStringColumn("freq_band"); + wifiRadioConfigInfo.hwConfig = row.getMapColumn("hw_config"); + + ret.put(wifiRadioConfigInfo.ifName, wifiRadioConfigInfo); + } + + LOG.debug("Retrieved WifiRadioConfig: {}", ret); + + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedWifiRadioConfigs", e); + throw new RuntimeException(e); + } + + return ret; + } + + public Map getProvisionedWifiVifConfigs(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); + + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("bridge"); + columns.add("_uuid"); + columns.add("btm"); + columns.add("enabled"); + columns.add("ft_psk"); + columns.add("group_rekey"); + columns.add("if_name"); + columns.add("mode"); + columns.add("rrm"); + columns.add("ssid"); + columns.add("ssid_broadcast"); + columns.add("uapsd_enable"); + columns.add("vif_radio_idx"); + columns.add("security"); + + try { + LOG.debug("Retrieving WifiVifConfig:"); + + operations.add(new Select(wifiVifConfigDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + for (Row row : ((SelectResult) result[0]).getRows()) { + + WifiVifConfigInfo wifiVifConfigInfo = new WifiVifConfigInfo(); + wifiVifConfigInfo.bridge = row.getStringColumn("bridge"); + wifiVifConfigInfo.uuid = row.getUuidColumn("_uuid"); + wifiVifConfigInfo.btm = row.getIntegerColumn("btm").intValue(); + wifiVifConfigInfo.enabled = row.getBooleanColumn("enabled"); + wifiVifConfigInfo.ftPsk = row.getIntegerColumn("ft_psk").intValue(); + wifiVifConfigInfo.groupRekey = row.getIntegerColumn("group_rekey").intValue(); + wifiVifConfigInfo.ifName = row.getStringColumn("if_name"); + wifiVifConfigInfo.mode = row.getStringColumn("mode"); + wifiVifConfigInfo.rrm = row.getIntegerColumn("rrm").intValue(); + wifiVifConfigInfo.ssid = row.getStringColumn("ssid"); + wifiVifConfigInfo.ssidBroadcast = row.getStringColumn("ssid_broadcast"); + wifiVifConfigInfo.uapsdEnable = row.getBooleanColumn("uapsd_enable"); + wifiVifConfigInfo.vifRadioIdx = row.getIntegerColumn("vif_radio_idx").intValue(); + wifiVifConfigInfo.security = row.getMapColumn("security"); + + ret.put(wifiVifConfigInfo.ifName + '_' + wifiVifConfigInfo.ssid, wifiVifConfigInfo); + } + + LOG.debug("Retrieved WifiVifConfigs: {}", ret); + + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedWifiVifConfigs", e); + throw new RuntimeException(e); + } + + return ret; + } + + public Map getProvisionedWifiInetConfigs(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); + + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("NAT"); + columns.add("_uuid"); + columns.add("enabled"); + columns.add("if_name"); + columns.add("if_type"); + columns.add("ip_assign_scheme"); + columns.add("network"); + + try { + LOG.debug("Retrieving WifiInetConfig:"); + + operations.add(new Select(wifiInetConfigDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + for (Row row : ((SelectResult) result[0]).getRows()) { + + WifiInetConfigInfo wifiInetConfigInfo = new WifiInetConfigInfo(); + Boolean natTmp = getSingleValueFromSet(row, "NAT"); + wifiInetConfigInfo.nat = natTmp != null ? natTmp : false; + + wifiInetConfigInfo.uuid = row.getUuidColumn("_uuid"); + wifiInetConfigInfo.enabled = row.getBooleanColumn("enabled"); + wifiInetConfigInfo.ifName = row.getStringColumn("if_name"); + wifiInetConfigInfo.ifType = row.getStringColumn("if_type"); + wifiInetConfigInfo.ipAssignScheme = row.getStringColumn("ip_assign_scheme"); + wifiInetConfigInfo.network = row.getBooleanColumn("network"); + + ret.put(wifiInetConfigInfo.ifName, wifiInetConfigInfo); + } + + LOG.debug("Retrieved WifiInetConfigs: {}", ret); + + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedWifiInetConfigs", e); + throw new RuntimeException(e); + } + + return ret; + } + + public Map getProvisionedWifiStatsConfigs(OvsdbClient ovsdbClient) { + Map ret = new HashMap<>(); + + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + List columns = new ArrayList<>(); + columns.add("channel_list"); + columns.add("radio_type"); + columns.add("reporting_interval"); + columns.add("sampling_interval"); + columns.add("stats_type"); + columns.add("survey_interval_ms"); + columns.add("survey_type"); + columns.add("threshold"); + columns.add("_uuid"); + + try { + LOG.debug("Retrieving WifiStatsConfigs:"); + + operations.add(new Select(wifiStatsConfigDbTable, conditions, columns)); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + for (Row row : ((SelectResult) result[0]).getRows()) { + + WifiStatsConfigInfo wifiStatsConfigInfo = new WifiStatsConfigInfo(); + + wifiStatsConfigInfo.channelList = row.getSetColumn("channel_list"); + wifiStatsConfigInfo.radioType = row.getStringColumn("radio_type"); + wifiStatsConfigInfo.reportingInterval = row.getIntegerColumn("reporting_interval").intValue(); + wifiStatsConfigInfo.samplingInterval = row.getIntegerColumn("sampling_interval").intValue(); + wifiStatsConfigInfo.statsType = row.getStringColumn("stats_type"); + wifiStatsConfigInfo.surveyType = getSingleValueFromSet(row, "survey_type"); + Long tmp = getSingleValueFromSet(row, "survey_interval_ms"); + wifiStatsConfigInfo.surveyIntervalMs = tmp != null ? tmp.intValue() : 0; + wifiStatsConfigInfo.threshold = row.getMapColumn("threshold"); + wifiStatsConfigInfo.uuid = row.getUuidColumn("_uuid"); + + if (wifiStatsConfigInfo.surveyType == null) { + ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType, wifiStatsConfigInfo); + } else { + ret.put(wifiStatsConfigInfo.radioType + "_" + wifiStatsConfigInfo.statsType + "_" + + wifiStatsConfigInfo.surveyType, wifiStatsConfigInfo); + } + } + + LOG.debug("Retrieved WifiStatsConfigs: {}", ret); + + } catch (ExecutionException | InterruptedException | OvsdbClientException | TimeoutException e) { + LOG.error("Error in getProvisionedWifiStatsConfigs", e); + + throw new RuntimeException(e); + } + + return ret; + } + + public void provisionSingleBridgePortInterface(OvsdbClient ovsdbClient, String interfaceName, String bridgeName, + String interfaceType, Map interfaceOptions, + Map provisionedInterfaces, Map provisionedPorts, + Map provisionedBridges) + throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { + + if (!provisionedInterfaces.containsKey(interfaceName)) { + // Create this interface and link it to the port and the bridge + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + List conditions = new ArrayList<>(); + + updateColumns.put("name", new Atom<>(interfaceName)); + if (interfaceType != null) { + updateColumns.put("type", new Atom<>(interfaceType)); + } + // updateColumns.put("admin_state", new Atom("up") ); + // updateColumns.put("link_state", new Atom("up") ); + // updateColumns.put("ifindex", new Atom(ifIndex) ); + // updateColumns.put("mtu", new Atom(1500) ); + // updateColumns.put("ofport", new Atom(ofport) ); + + if (interfaceOptions != null) { + @SuppressWarnings("unchecked") + com.vmware.ovsdb.protocol.operation.notation.Map ifOptions = com.vmware.ovsdb.protocol.operation.notation.Map + .of(interfaceOptions); + updateColumns.put("options", ifOptions); + } + + Uuid interfaceUuid = null; + + Row row = new Row(updateColumns); + operations.add(new Insert(interfaceDbTable, row)); + + { + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Provisioned Interface for {}", interfaceName); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + if (res instanceof InsertResult) { + interfaceUuid = ((InsertResult) res).getUuid(); + } + } + } + + if (interfaceUuid == null) { + throw new IllegalStateException("Interface entry was not created successfully"); + } + + Uuid portUuid = null; + operations = new ArrayList<>(); + // link the interface to the port, create port if necessary + if (!provisionedPorts.containsKey(interfaceName)) { + // need to create port + updateColumns = new HashMap<>(); + + // portUuid = new Uuid(new UUID(System.currentTimeMillis(), + // System.nanoTime())) ; + updateColumns.put("name", new Atom(interfaceName)); + // updateColumns.put("_uuid", new Atom(portUuid)); + + Set portInterfacesSet = new HashSet<>(); + portInterfacesSet.add(interfaceUuid); + com.vmware.ovsdb.protocol.operation.notation.Set portInterfaces = com.vmware.ovsdb.protocol.operation.notation.Set + .of(portInterfacesSet); + updateColumns.put("interfaces", portInterfaces); + + row = new Row(updateColumns); + operations.add(new Insert(portDbTable, row)); + + { + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Provisioned Port for {}", interfaceName); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + if (res instanceof InsertResult) { + portUuid = ((InsertResult) res).getUuid(); + } + } + } + + } else { + // need to update port + PortInfo existingPort = provisionedPorts.get(interfaceName); + portUuid = existingPort.uuid; + + conditions = new ArrayList<>(); + updateColumns = new HashMap<>(); + + conditions.add(new Condition("name", Function.EQUALS, new Atom<>(interfaceName))); + + Set portInterfacesSet = new HashSet<>(); + if (existingPort.interfaceUuids != null) { + portInterfacesSet.addAll(existingPort.interfaceUuids); + } + portInterfacesSet.add(interfaceUuid); + com.vmware.ovsdb.protocol.operation.notation.Set portInterfaces = com.vmware.ovsdb.protocol.operation.notation.Set + .of(portInterfacesSet); + updateColumns.put("interfaces", portInterfaces); + + row = new Row(updateColumns); + operations.add(new Update(portDbTable, row)); + + { + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Updated Port for {}", interfaceName); - operations = new ArrayList<>(); + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } - // link the port to the bridge - if (provisionedBridges.containsKey(bridgeName)) { - BridgeInfo existingBridge = provisionedBridges.get(bridgeName); + } - conditions = new ArrayList<>(); - updateColumns = new HashMap<>(); - - conditions.add(new Condition("name", Function.EQUALS, new Atom<>(bridgeName))); + if (portUuid == null) { + throw new IllegalStateException("Port entry was not created successfully"); + } - Set bridgePortsSet = new HashSet<>(); - if (existingBridge.portUuids != null) { - bridgePortsSet.addAll(existingBridge.portUuids); - } - - bridgePortsSet.add(portUuid); - com.vmware.ovsdb.protocol.operation.notation.Set bridgePorts = com.vmware.ovsdb.protocol.operation.notation.Set - .of(bridgePortsSet); - updateColumns.put("ports", bridgePorts); + operations = new ArrayList<>(); - row = new Row(updateColumns); - operations.add(new Update(bridgeDbTable, row)); + // link the port to the bridge + if (provisionedBridges.containsKey(bridgeName)) { + BridgeInfo existingBridge = provisionedBridges.get(bridgeName); - } else { - LOG.warn("provisionedBridges does not have bridge {} - {} - port will be dangling", bridgeName, - provisionedBridges.keySet()); - } + conditions = new ArrayList<>(); + updateColumns = new HashMap<>(); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + conditions.add(new Condition("name", Function.EQUALS, new Atom<>(bridgeName))); - if (LOG.isDebugEnabled()) { - LOG.debug("Finished provisioning Interface/port/bridge for {} / {}", interfaceName, bridgeName); + Set bridgePortsSet = new HashSet<>(); + if (existingBridge.portUuids != null) { + bridgePortsSet.addAll(existingBridge.portUuids); + } - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } + bridgePortsSet.add(portUuid); + com.vmware.ovsdb.protocol.operation.notation.Set bridgePorts = com.vmware.ovsdb.protocol.operation.notation.Set + .of(bridgePortsSet); + updateColumns.put("ports", bridgePorts); - } - } + row = new Row(updateColumns); + operations.add(new Update(bridgeDbTable, row)); - public static final String homeAp24 = "home-ap-24"; - public static final String homeApL50 = "home-ap-l50"; - public static final String homeApU50 = "home-ap-u50"; + } else { + LOG.warn("provisionedBridges does not have bridge {} - {} - port will be dangling", bridgeName, + provisionedBridges.keySet()); + } - public static final String brHome = "br-home"; - public static final String brWan = "br-wan"; + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - public static final String patchW2h = "patch-w2h"; - public static final String patchH2w = "patch-h2w"; + if (LOG.isDebugEnabled()) { + LOG.debug("Finished provisioning Interface/port/bridge for {} / {}", interfaceName, bridgeName); - public void provisionBridgePortInterface(OvsdbClient ovsdbClient) { - try { - Map provisionedInterfaces = getProvisionedInterfaces(ovsdbClient); - LOG.debug("Existing Interfaces: {}", provisionedInterfaces.keySet()); + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } - Map provisionedPorts = getProvisionedPorts(ovsdbClient); - LOG.debug("Existing Ports: {}", provisionedPorts.keySet()); + } + } - Map provisionedBridges = getProvisionedBridges(ovsdbClient); - LOG.debug("Existing Bridges: {}", provisionedBridges.keySet()); + public static final String homeAp24 = "home-ap-24"; + public static final String homeApL50 = "home-ap-l50"; + public static final String homeApU50 = "home-ap-u50"; - Map patchH2wOptions = new HashMap<>(); - patchH2wOptions.put("peer", "patch-w2h"); + public static final String brHome = "br-home"; + public static final String brWan = "br-wan"; - Map patchW2hOptions = new HashMap<>(); - patchH2wOptions.put("peer", "patch-h2w"); + public static final String patchW2h = "patch-w2h"; + public static final String patchH2w = "patch-h2w"; - provisionSingleBridgePortInterface(ovsdbClient, patchH2w, brHome, "patch", patchH2wOptions, - provisionedInterfaces, provisionedPorts, provisionedBridges); - provisionSingleBridgePortInterface(ovsdbClient, patchW2h, brWan, "patch", patchW2hOptions, - provisionedInterfaces, provisionedPorts, provisionedBridges); + public void provisionBridgePortInterface(OvsdbClient ovsdbClient) { + try { + Map provisionedInterfaces = getProvisionedInterfaces(ovsdbClient); + LOG.debug("Existing Interfaces: {}", provisionedInterfaces.keySet()); - provisionSingleBridgePortInterface(ovsdbClient, homeApU50, brHome, null, null, provisionedInterfaces, - provisionedPorts, provisionedBridges); - - provisionSingleBridgePortInterface(ovsdbClient, homeApL50, brHome, null, null, provisionedInterfaces, - provisionedPorts, provisionedBridges); - - provisionSingleBridgePortInterface(ovsdbClient, homeAp24, brHome, null, null, provisionedInterfaces, - provisionedPorts, provisionedBridges); + Map provisionedPorts = getProvisionedPorts(ovsdbClient); + LOG.debug("Existing Ports: {}", provisionedPorts.keySet()); - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in provisionBridgePortInterface", e); - throw new RuntimeException(e); - } + Map provisionedBridges = getProvisionedBridges(ovsdbClient); + LOG.debug("Existing Bridges: {}", provisionedBridges.keySet()); - } + Map patchH2wOptions = new HashMap<>(); + patchH2wOptions.put("peer", "patch-w2h"); - public void removeOnboardingSsids(OvsdbClient ovsdbClient) { - try { - List operations = new ArrayList<>(); - List conditions = new ArrayList<>(); - conditions.add(new Condition("ssid", Function.EQUALS, new Atom<>("opensync.onboard"))); + Map patchW2hOptions = new HashMap<>(); + patchH2wOptions.put("peer", "patch-h2w"); - operations.add(new Delete(wifiVifConfigDbTable, conditions)); + provisionSingleBridgePortInterface(ovsdbClient, patchH2w, brHome, "patch", patchH2wOptions, + provisionedInterfaces, provisionedPorts, provisionedBridges); + provisionSingleBridgePortInterface(ovsdbClient, patchW2h, brWan, "patch", patchW2hOptions, + provisionedInterfaces, provisionedPorts, provisionedBridges); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + provisionSingleBridgePortInterface(ovsdbClient, homeApU50, brHome, null, null, provisionedInterfaces, + provisionedPorts, provisionedBridges); - if (LOG.isDebugEnabled()) { - LOG.debug("Removed onboarding SSIDs from {}:", wifiVifConfigDbTable); + provisionSingleBridgePortInterface(ovsdbClient, homeApL50, brHome, null, null, provisionedInterfaces, + provisionedPorts, provisionedBridges); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } + provisionSingleBridgePortInterface(ovsdbClient, homeAp24, brHome, null, null, provisionedInterfaces, + provisionedPorts, provisionedBridges); - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in removeOnboardingSsids", e); - throw new RuntimeException(e); - } + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in provisionBridgePortInterface", e); + throw new RuntimeException(e); + } - } + } - public void removeAllSsids(OvsdbClient ovsdbClient) { - try { - List operations = new ArrayList<>(); + public void removeOnboardingSsids(OvsdbClient ovsdbClient) { + try { + List operations = new ArrayList<>(); + List conditions = new ArrayList<>(); + conditions.add(new Condition("ssid", Function.EQUALS, new Atom<>("opensync.onboard"))); - operations.add(new Delete(wifiVifConfigDbTable)); + operations.add(new Delete(wifiVifConfigDbTable, conditions)); - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - if (LOG.isDebugEnabled()) { - LOG.debug("Removed all existing SSIDs from {}:", wifiVifConfigDbTable); + if (LOG.isDebugEnabled()) { + LOG.debug("Removed onboarding SSIDs from {}:", wifiVifConfigDbTable); - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in removeOnboardingSsids", e); + throw new RuntimeException(e); + } + + } + + public void removeAllSsids(OvsdbClient ovsdbClient) { + try { + List operations = new ArrayList<>(); + + operations.add(new Delete(wifiVifConfigDbTable)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Removed all existing SSIDs from {}:", wifiVifConfigDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + // Now clean up references in the vif_configs columns + operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + Set vifConfigsSet = new HashSet<>(); + com.vmware.ovsdb.protocol.operation.notation.Set vifConfigs = com.vmware.ovsdb.protocol.operation.notation.Set + .of(vifConfigsSet); + updateColumns.put("vif_configs", vifConfigs); + + Row row = new Row(updateColumns); + operations.add(new Update(wifiRadioConfigDbTable, row)); + + fResult = ovsdbClient.transact(ovsdbName, operations); + result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated WifiRadioConfig "); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + LOG.info("Removed all ssids"); + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in removeAllSsids", e); + throw new RuntimeException(e); + } + + } + + public void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { + + Map provisionedWifiRadios = getProvisionedWifiRadioConfigs(ovsdbClient); + LOG.debug("Existing WifiRadioConfigs: {}", provisionedWifiRadios.keySet()); + + String country = opensyncAPConfig.getCountryCode(); // should be the same for all radios on this AP ;-) + + ApElementConfiguration apElementConfiguration = ((ApElementConfiguration) opensyncAPConfig + .getCustomerEquipment().getDetails()); + + for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) { + Map hwConfig = new HashMap<>(); + + ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType); + int channel = elementRadioConfig.getChannelNumber(); + ChannelBandwidth bandwidth = elementRadioConfig.getChannelBandwidth(); + String ht_mode = null; + switch (bandwidth) { + case is20MHz: + ht_mode = "HT20"; + break; + case is40MHz: + ht_mode = "HT40"; + break; + case is80MHz: + ht_mode = "HT80"; + break; + case is160MHz: + ht_mode = "HT160"; + break; + default: + ht_mode = "HT20"; + } + elementRadioConfig.getAutoChannelSelection(); + + RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType); + int beaconInterval = radioConfig.getBeaconInterval(); + String configName = null; + switch (radioType) { + case is2dot4GHz: + configName = "wifi0"; + break; + case is5GHz: + hwConfig.put("dfs_enable", "1"); + hwConfig.put("dfs_ignorecac", "0"); + hwConfig.put("dfs_usenol", "1"); + configName = "wifi1"; + break; + + case is5GHzL: + hwConfig.put("dfs_enable", "1"); + hwConfig.put("dfs_ignorecac", "0"); + hwConfig.put("dfs_usenol", "1"); + configName = "wifi1"; + break; + + case is5GHzU: + hwConfig.put("dfs_enable", "1"); + hwConfig.put("dfs_ignorecac", "0"); + hwConfig.put("dfs_usenol", "1"); + configName = "wifi2"; + break; + default: // don't know this interface + continue; + + } + + if (configName != null) { + try { + configureWifiRadios(ovsdbClient, configName, provisionedWifiRadios, channel, hwConfig, country, + beaconInterval, ht_mode); + } catch (OvsdbClientException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TimeoutException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ExecutionException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + } + + } + + public List getOpensyncAPRadioState(TableUpdates tableUpdates, String apId, + OvsdbClient ovsdbClient) { + + List ret = new ArrayList(); + + try { + + for (Entry tableUpdate : tableUpdates.getTableUpdates().entrySet()) { + + for (Entry rowUpdate : tableUpdate.getValue().getRowUpdates().entrySet()) { + + Row row = rowUpdate.getValue().getNew(); + // Row old = rowUpdate.getOld(); + + if (row != null) { + + OpensyncAPRadioState tableState = new OpensyncAPRadioState(); + + Map map = row.getColumns(); + + if (map.get("mac") != null && map.get("mac").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMac(row.getStringColumn("mac")); + } + if (map.get("channel") != null && map.get("channel").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setChannel(row.getIntegerColumn("channel").intValue()); + } + if (map.get("freq_band") != null && map.get("freq_band").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setFreqBand(row.getStringColumn("freq_band")); + } + if (map.get("if_name") != null && map.get("if_name").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setIfName(row.getStringColumn("if_name")); + } + if (map.get("channel_mode") != null && map.get("channel_mode").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setChannelMode(row.getStringColumn("channel_mode")); + } + if (map.get("country") != null && map.get("country").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setCountry(row.getStringColumn("country")); + } + if (map.get("enabled") != null && map.get("enabled").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setEnabled(row.getBooleanColumn("enabled")); + } + if (map.get("ht_mode") != null && map.get("ht_mode").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setHtMode(row.getStringColumn("ht_mode")); + } + if (map.get("tx_power") != null && map.get("tx_power").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setTxPower(row.getIntegerColumn("tx_power").intValue()); + } + if (map.get("hw_config") != null && map.get("hw_config").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Map.class)) { + tableState.setHwConfig(row.getMapColumn("hw_config")); + } + if (map.get("_version") != null && map.get("_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_version")); + } + if (map.get("_uuid") != null && map.get("_uuid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_uuid")); + } + + ret.add(tableState); + } + } + } + + ret.stream().forEach(wrs -> { + LOG.debug("Wifi_Radio_State row {}", wrs.toPrettyString()); + }); + + } catch (Exception e) { + LOG.error("Could not parse update for Wifi_Radio_State", e); + } + + return ret; + } + + public List getOpensyncAPInetState(TableUpdates tableUpdates, String apId, + OvsdbClient ovsdbClient) { + List ret = new ArrayList(); + + try { + + for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { + + for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { + + Row row = rowUpdate.getNew(); + // Row old = rowUpdate.getOld(); + + if (row != null) { + + OpensyncAPInetState tableState = new OpensyncAPInetState(); + Map map = row.getColumns(); + + if (map.get("NAT") != null && map.get("NAT").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setNat(row.getBooleanColumn("NAT")); + } + if (map.get("enabled") != null && map.get("enabled").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setEnabled(row.getBooleanColumn("enabled")); + } + if (map.get("if_name") != null && map.get("if_name").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setIfName(row.getStringColumn("if_name")); + } + if (map.get("if_type") != null && map.get("if_type").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setIfType(row.getStringColumn("if_type")); + } + if (map.get("ip_assign_scheme") != null && map.get("ip_assign_scheme").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setIpAssignScheme(row.getStringColumn("ip_assign_scheme")); + } + if (map.get("network") != null && map.get("network").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setNetwork(row.getBooleanColumn("network")); + } + if (map.get("hwaddr") != null && map.get("hwaddr").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setHwAddr(row.getStringColumn("hwaddr")); + } + if (map.get("_version") != null && map.get("_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_version")); + } + if (map.get("_uuid") != null && map.get("_uuid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_uuid")); + } + ret.add(tableState); + } + + } + } + + ret.stream().forEach(wrs -> { + LOG.debug("Wifi_Inet_State row {}", wrs.toPrettyString()); + }); + + } catch (Exception e) { + LOG.error("Could not parse update for Wifi_Inet_State", e); + } + return ret; + } + + public List getOpensyncAPVIFState(TableUpdates tableUpdates, String apId, + OvsdbClient ovsdbClient) { + List ret = new ArrayList(); + try { + + for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { + + for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { + + Row row = rowUpdate.getNew(); + // Row old = rowUpdate.getOld(); + + if (row != null) { + + OpensyncAPVIFState tableState = new OpensyncAPVIFState(); + + Map map = row.getColumns(); + + if (map.get("mac") != null && map.get("mac").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMac(row.getStringColumn("mac")); + } + if (map.get("bridge") != null && map.get("bridge").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setBridge(row.getStringColumn("bridge")); + } + if (map.get("btm") != null && map.get("btm").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setBtm(row.getIntegerColumn("btm").intValue()); + } + + if (map.get("channel") != null && map.get("channel").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setChannel(row.getIntegerColumn("channel").intValue()); + } + + if (map.get("enabled") != null && map.get("enabled").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setEnabled(row.getBooleanColumn("enabled")); + } + + if (map.get("group_rekey") != null && map.get("group_rekey").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setGroupRekey(row.getIntegerColumn("group_rekey").intValue()); + } + if (map.get("if_name") != null && map.get("if_name").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setIfName(row.getStringColumn("if_name")); + } + + if (map.get("mode") != null && map.get("mode").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMode(row.getStringColumn("mode")); + } + + if (map.get("rrm") != null && map.get("rrm").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setRrm(row.getIntegerColumn("rrm").intValue()); + } + if (map.get("ssid") != null && map.get("ssid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setSsid(row.getStringColumn("ssid")); + } + + if (map.get("ssid_broadcast") != null && map.get("ssid_broadcast").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setSsidBroadcast(row.getStringColumn("ssid_broadcast")); + } + if (map.get("uapsd_enable") != null && map.get("uapsd_enable").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setUapsdEnable(row.getBooleanColumn("uapsd_enable")); + } + if (map.get("vif_radio_idx") != null && map.get("vif_radio_idx").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVifRadioIdx(row.getIntegerColumn("vif_radio_idx").intValue()); + } + + if (map.get("associated_clients") != null) + tableState.setAssociatedClients(row.getSetColumn("associated_clients")); + + if (map.get("security") != null) + tableState.setSecurity(row.getMapColumn("security")); + + if (map.get("_version") != null && map.get("_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_version")); + } + if (map.get("_uuid") != null && map.get("_uuid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_uuid")); + } + + ret.add(tableState); + + } + + } + } + + ret.stream().forEach(wrs -> { + LOG.debug("Wifi_VIF_State row {}", wrs.toPrettyString()); + }); + + } catch (Exception e) { + LOG.error("Could not parse update for Wifi_VIF_State", e); + + } + return ret; + } + + public List getOpensyncWifiAssociatedClients(TableUpdates tableUpdates, String apId, + OvsdbClient ovsdbClient) { + List ret = new ArrayList(); + + try { + + for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { + + for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { + + Row row = rowUpdate.getNew(); + + if (row != null) { + + OpensyncWifiAssociatedClients tableState = new OpensyncWifiAssociatedClients(); + Map map = row.getColumns(); + + if (map.get("mac") != null && map.get("mac").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMac(row.getStringColumn("mac")); + } + if (row.getSetColumn("capabilities") != null) + tableState.setCapabilities(row.getSetColumn("capabilities")); + if (map.get("state") != null && map.get("state").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setState(row.getStringColumn("state")); + } + if (map.get("_version") != null && map.get("_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_version")); + } + if (map.get("_uuid") != null && map.get("_uuid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_uuid")); + } + + ret.add(tableState); + + } + } + } + ret.stream().forEach(wrs -> { + LOG.debug("Wifi_Associated_Clients row {}", wrs.toPrettyString()); + }); + } catch (Exception e) { + LOG.error("Could not get Wifi_Associated_Clients list from table update", e); + } + + return ret; + } + + public OpensyncAWLANNode getOpensyncAWLANNode(TableUpdates tableUpdates, String apId, OvsdbClient ovsdbClient) { + OpensyncAWLANNode tableState = new OpensyncAWLANNode(); + + try { + + for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { + + for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { + + Row row = rowUpdate.getNew(); + + if (row != null) { + + Map map = row.getColumns(); + + if (map.get("mqtt_settings") != null) { + tableState.setMqttSettings(row.getMapColumn("mqtt_settings")); + } + if (map.get("mqtt_headers") != null) { + tableState.setMqttHeaders(row.getMapColumn("mqtt_headers")); + } + if (map.get("mqtt_topics") != null) { + tableState.setMqttHeaders(row.getMapColumn("mqtt_topics")); + } + + if (map.get("model") != null && map.get("model").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setModel(row.getStringColumn("model")); + } + if (map.get("sku_number") != null && map.get("sku_number").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setSkuNumber(row.getStringColumn("sku_number")); + } + if (map.get("id") != null && map.get("id").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setId(row.getStringColumn("id")); + } + + if (map.get("version_matrix") != null) + tableState.setVersionMatrix(row.getMapColumn("version_matrix")); + if (map.get("firmware_version") != null && map.get("firmware_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setFirmwareVersion(row.getStringColumn("firmware_version")); + } + if (map.get("firmware_url") != null && map.get("firmware_url").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setFirmwareUrl(row.getStringColumn("firmware_url")); + } + + if (map.get("_uuid") != null && map.get("_uuid").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_uuid")); + } + if (map.get("upgrade_dl_timer") != null && map.get("upgrade_dl_timer").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setUpgradeDlTimer(row.getIntegerColumn("upgrade_dl_timer").intValue()); + } + if (map.get("platform_version") != null && map.get("platform_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setPlatformVersion(row.getStringColumn("platform_version")); + } + if (map.get("firmware_pass") != null && map.get("firmware_pass").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setFirmwarePass(row.getStringColumn("firmware_pass")); + } + if (map.get("upgrade_timer") != null && map.get("upgrade_timer").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setUpgradeTimer(row.getIntegerColumn("upgrade_timer").intValue()); + } + if (map.get("max_backoff") != null && map.get("max_backoff").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMaxBackoff(row.getIntegerColumn("max_backoff").intValue()); + } + if (map.get("led_config") != null) + tableState.setLedConfig(row.getMapColumn("led_config")); + if (map.get("redirector_addr") != null && map.get("redirector_addr").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setRedirectorAddr(row.getStringColumn("redirector_addr")); + } + if (map.get("serial_number") != null && map.get("serial_number").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setSerialNumber(row.getStringColumn("serial_number")); + } + if (map.get("_version") != null && map.get("_version").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setVersion(row.getUuidColumn("_version")); + } + if (map.get("upgrade_status") != null && map.get("upgrade_status").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setUpgradeTimer(row.getIntegerColumn("upgrade_status").intValue()); + } + if (map.get("device_mode") != null && map.get("device_mode").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setDeviceMode(row.getStringColumn("device_mode")); + } + if (map.get("min_backoff") != null && map.get("min_backoff").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setMinBackoff(row.getIntegerColumn("min_backoff").intValue()); + } + + if (map.get("revision") != null && map.get("revision").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setRevision(row.getStringColumn("revision")); + } + if (map.get("manager_addr") != null && map.get("manager_addr").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setManagerAddr(row.getStringColumn("manager_addr")); + } + if (map.get("factory_reset") != null && map.get("factory_reset").getClass() + .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { + tableState.setFactoryReset(row.getBooleanColumn("factory_reset")); + } + } + + } + + } + } catch (Exception e) { + LOG.error("Failed to handle AWLAN_Node update", e); + } + + return tableState; + + } + + public void configureWifiRadios(OvsdbClient ovsdbClient, String configName, + Map provisionedWifiRadios, int channel, Map hwConfig, + String country, int beaconInterval, String ht_mode) + throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { + + WifiRadioConfigInfo existingConfig = provisionedWifiRadios.get(configName); + + if (existingConfig == null) { + LOG.warn("There is no WifiRadioConfig {}", configName); + return; + } + + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + List conditions = new ArrayList<>(); + conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(configName))); + + updateColumns.put("channel", new Atom(channel)); + updateColumns.put("country", new Atom<>(country)); + @SuppressWarnings("unchecked") + com.vmware.ovsdb.protocol.operation.notation.Map hwConfigMap = com.vmware.ovsdb.protocol.operation.notation.Map + .of(hwConfig); + updateColumns.put("hw_config", hwConfigMap); + updateColumns.put("bcn_int", new Atom(beaconInterval)); + updateColumns.put("ht_mode", new Atom<>(ht_mode)); + + Row row = new Row(updateColumns); + operations.add(new Update(wifiRadioConfigDbTable, conditions, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Provisioned channel {} for {}", channel, configName); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + public void configureSingleSsid(OvsdbClient ovsdbClient, String bridge, String ifName, String ssid, + boolean ssidBroadcast, Map security, + Map provisionedWifiRadioConfigs, String radioIfName, int vlanId, + int vifRadioIdx) { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + + try { + updateColumns.put("bridge", new Atom<>(bridge)); + updateColumns.put("btm", new Atom<>(1)); + updateColumns.put("enabled", new Atom<>(true)); + updateColumns.put("ft_psk", new Atom<>(0)); + updateColumns.put("group_rekey", new Atom<>(86400)); + updateColumns.put("if_name", new Atom<>(ifName)); + updateColumns.put("mode", new Atom<>("ap")); + updateColumns.put("rrm", new Atom<>(1)); + updateColumns.put("ssid", new Atom<>(ssid)); + updateColumns.put("ssid_broadcast", new Atom<>(ssidBroadcast ? "enabled" : "disabled")); + updateColumns.put("uapsd_enable", new Atom<>(true)); + updateColumns.put("vif_radio_idx", new Atom<>(vifRadioIdx)); + updateColumns.put("vlan_id", new Atom<>(vlanId)); + + @SuppressWarnings("unchecked") + com.vmware.ovsdb.protocol.operation.notation.Map securityMap = com.vmware.ovsdb.protocol.operation.notation.Map + .of(security); + updateColumns.put("security", securityMap); + + Row row = new Row(updateColumns); + operations.add(new Insert(wifiVifConfigDbTable, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Provisioned SSID {} on {}", ssid, ifName); + + Uuid vifConfigUuid = null; + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + if (res instanceof InsertResult) { + vifConfigUuid = ((InsertResult) res).getUuid(); + } + } + + if (vifConfigUuid == null) { + throw new IllegalStateException("Wifi_VIF_Config entry was not created successfully"); + } + + // update Wifi_Radio_Config here - add vifConfigUuid + /// usr/plume/tools/ovsh u Wifi_Radio_Config + // vif_configs:='["set",[["uuid","98e42897-b567-4186-84a6-4a4e38a51e9d"],["uuid","4314920e-c4e6-42a6-93e3-261142ed9adf"]]]' + // --where if_name==wifi0 + updateColumns.clear(); + operations.clear(); + + WifiRadioConfigInfo wifiRadioConfigInfo = provisionedWifiRadioConfigs.get(radioIfName); + if (wifiRadioConfigInfo == null) { + throw new IllegalStateException("missing Wifi_Radio_Config entry " + radioIfName); + } + + Set vifConfigsSet = new HashSet<>(wifiRadioConfigInfo.vifConfigUuids); + vifConfigsSet.add(vifConfigUuid); + com.vmware.ovsdb.protocol.operation.notation.Set vifConfigs = com.vmware.ovsdb.protocol.operation.notation.Set + .of(vifConfigsSet); + updateColumns.put("vif_configs", vifConfigs); + + List conditions = new ArrayList<>(); + conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(radioIfName))); + + row = new Row(updateColumns); + operations.add(new Update(wifiRadioConfigDbTable, conditions, row)); + + fResult = ovsdbClient.transact(ovsdbName, operations); + result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated WifiRadioConfig {} for SSID {}:", radioIfName, ssid); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + LOG.info("Provisioned SSID {} on interface {} / {}", ssid, ifName, radioIfName); + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in configureSingleSsid", e); + throw new RuntimeException(e); + } + } + + public void configureSsids(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) { + + Map provisionedWifiVifConfigs = getProvisionedWifiVifConfigs(ovsdbClient); + Map provisionedWifiRadioConfigs = getProvisionedWifiRadioConfigs(ovsdbClient); + LOG.debug("Existing WifiVifConfigs: {}", provisionedWifiVifConfigs.keySet()); + + SsidConfiguration ssidConfig = (SsidConfiguration) opensyncApConfig.getSsidProfile().getDetails(); + + for (RadioType radioType : ssidConfig.getAppliedRadios()) { + + boolean ssidBroadcast = ssidConfig.getBroadcastSsid() == StateSetting.enabled; + Map security = new HashMap<>(); + + security.put("encryption", ssidConfig.getSecureMode().name()); + security.put("key", ssidConfig.getKeyStr()); + security.put("mode", Long.toString(ssidConfig.getSecureMode().getId())); + String bridge = brHome; + + String ifName = null; + String radioIfName = null; + int vifRadioIdx = -1; + + if (radioType == RadioType.is2dot4GHz) { + ifName = homeAp24; + radioIfName = "wifi0"; + vifRadioIdx = 0; + } else if (radioType == RadioType.is5GHzL) { + ifName = homeApL50; + radioIfName = "wifi1"; + vifRadioIdx = 1; + } else if (radioType == RadioType.is5GHzU) { + ifName = homeApU50; + radioIfName = "wifi2"; + vifRadioIdx = 2; + } + + if (vifRadioIdx == -1) { + LOG.debug("Cannot determine vif radio idx radioType {} skipping", radioType); + continue; + } + + if (!provisionedWifiVifConfigs.containsKey(ifName + "_" + ssidConfig.getSsid())) { + try { + configureSingleSsid(ovsdbClient, bridge, ifName, ssidConfig.getSsid(), ssidBroadcast, security, + provisionedWifiRadioConfigs, radioIfName, ssidConfig.getVlanId(), vifRadioIdx); + } catch (IllegalStateException e) { + // could not provision this SSID, but still can go on + LOG.warn("could not provision SSID {} on {}", ssidConfig.getSsid(), radioIfName); + } + } + + } + + } + + public void configureWifiInet(OvsdbClient ovsdbClient, Map provisionedWifiInetConfigs, + String ifName) { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + + try { + /// usr/plume/tools/ovsh i Wifi_Inet_Config NAT:=false enabled:=true + /// if_name:=home-ap-24 if_type:=vif ip_assign_scheme:=none + /// network:=true + + updateColumns.put("NAT", new Atom<>(false)); + updateColumns.put("enabled", new Atom<>(true)); + updateColumns.put("if_name", new Atom<>(ifName)); + updateColumns.put("if_type", new Atom<>("vif")); + updateColumns.put("ip_assign_scheme", new Atom<>("none")); + updateColumns.put("network", new Atom<>(true)); - // Now clean up references in the vif_configs columns - operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - Set vifConfigsSet = new HashSet<>(); - com.vmware.ovsdb.protocol.operation.notation.Set vifConfigs = com.vmware.ovsdb.protocol.operation.notation.Set - .of(vifConfigsSet); - updateColumns.put("vif_configs", vifConfigs); + Row row = new Row(updateColumns); + operations.add(new Insert(wifiInetConfigDbTable, row)); - Row row = new Row(updateColumns); - operations.add(new Update(wifiRadioConfigDbTable, row)); - - fResult = ovsdbClient.transact(ovsdbName, operations); - result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated WifiRadioConfig "); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - LOG.info("Removed all ssids"); - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in removeAllSsids", e); - throw new RuntimeException(e); - } - - } - - public void configureWifiRadios(OvsdbClient ovsdbClient, OpensyncAPRadioConfig opensyncAPRadioConfig) { - Map provisionedWifiRadios = getProvisionedWifiRadioConfigs(ovsdbClient); - LOG.debug("Existing WifiRadioConfigs: {}", provisionedWifiRadios.keySet()); - - try { - String country = opensyncAPRadioConfig.getCountry(); - String configName = "wifi0"; - int channel = opensyncAPRadioConfig.getRadioChannel24G(); - Map hwConfig = new HashMap<>(); - configureWifiRadios(ovsdbClient, configName, provisionedWifiRadios, channel, hwConfig, country); - - configName = "wifi1"; - channel = opensyncAPRadioConfig.getRadioChannel5LG(); - hwConfig = new HashMap<>(); - hwConfig.put("dfs_enable", "1"); - hwConfig.put("dfs_ignorecac", "0"); - hwConfig.put("dfs_usenol", "1"); - - configureWifiRadios(ovsdbClient, configName, provisionedWifiRadios, channel, hwConfig, country); - - configName = "wifi2"; - channel = opensyncAPRadioConfig.getRadioChannel5HG(); - hwConfig = new HashMap<>(); - hwConfig.put("dfs_enable", "1"); - hwConfig.put("dfs_ignorecac", "0"); - hwConfig.put("dfs_usenol", "1"); - - configureWifiRadios(ovsdbClient, configName, provisionedWifiRadios, channel, hwConfig, country); - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in configureWifiRadios", e); - throw new RuntimeException(e); - } - - } - - public List getOpensyncAPRadioState(TableUpdates tableUpdates, String apId, - OvsdbClient ovsdbClient) { - - List ret = new ArrayList(); - - try { - - for (Entry tableUpdate : tableUpdates.getTableUpdates().entrySet()) { - - for (Entry rowUpdate : tableUpdate.getValue().getRowUpdates().entrySet()) { - - Row row = rowUpdate.getValue().getNew(); - // Row old = rowUpdate.getOld(); - - if (row != null) { - - OpensyncAPRadioState tableState = new OpensyncAPRadioState(); - - Map map = row.getColumns(); - - if (map.get("mac") != null && map.get("mac").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMac(row.getStringColumn("mac")); - } - if (map.get("channel") != null && map.get("channel").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setChannel(row.getIntegerColumn("channel").intValue()); - } - if (map.get("freq_band") != null && map.get("freq_band").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setFreqBand(row.getStringColumn("freq_band")); - } - if (map.get("if_name") != null && map.get("if_name").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setIfName(row.getStringColumn("if_name")); - } - if (map.get("channel_mode") != null && map.get("channel_mode").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setChannelMode(row.getStringColumn("channel_mode")); - } - if (map.get("country") != null && map.get("country").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setCountry(row.getStringColumn("country")); - } - if (map.get("enabled") != null && map.get("enabled").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setEnabled(row.getBooleanColumn("enabled")); - } - if (map.get("ht_mode") != null && map.get("ht_mode").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setHtMode(row.getStringColumn("ht_mode")); - } - if (map.get("tx_power") != null && map.get("tx_power").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setTxPower(row.getIntegerColumn("tx_power").intValue()); - } - if (map.get("hw_config") != null && map.get("hw_config").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Map.class)) { - tableState.setHwConfig(row.getMapColumn("hw_config")); - } - if (map.get("_version") != null && map.get("_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_version")); - } - if (map.get("_uuid") != null && map.get("_uuid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_uuid")); - } - - ret.add(tableState); - } - } - } - - ret.stream().forEach(wrs -> { - LOG.debug("Wifi_Radio_State row {}", wrs.toPrettyString()); - }); - - } catch (Exception e) { - LOG.error("Could not parse update for Wifi_Radio_State", e); - } - - return ret; - } - - public List getOpensyncAPInetState(TableUpdates tableUpdates, String apId, - OvsdbClient ovsdbClient) { - List ret = new ArrayList(); - - try { - - for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { - - for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { - - Row row = rowUpdate.getNew(); - // Row old = rowUpdate.getOld(); - - if (row != null) { - - OpensyncAPInetState tableState = new OpensyncAPInetState(); - Map map = row.getColumns(); - - if (map.get("NAT") != null && map.get("NAT").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setNat(row.getBooleanColumn("NAT")); - } - if (map.get("enabled") != null && map.get("enabled").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setEnabled(row.getBooleanColumn("enabled")); - } - if (map.get("if_name") != null && map.get("if_name").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setIfName(row.getStringColumn("if_name")); - } - if (map.get("if_type") != null && map.get("if_type").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setIfType(row.getStringColumn("if_type")); - } - if (map.get("ip_assign_scheme") != null && map.get("ip_assign_scheme").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setIpAssignScheme(row.getStringColumn("ip_assign_scheme")); - } - if (map.get("network") != null && map.get("network").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setNetwork(row.getBooleanColumn("network")); - } - if (map.get("hwaddr") != null && map.get("hwaddr").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setHwAddr(row.getStringColumn("hwaddr")); - } - if (map.get("_version") != null && map.get("_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_version")); - } - if (map.get("_uuid") != null && map.get("_uuid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_uuid")); - } - ret.add(tableState); - } - - } - } - - ret.stream().forEach(wrs -> { - LOG.debug("Wifi_Inet_State row {}", wrs.toPrettyString()); - }); - - } catch (Exception e) { - LOG.error("Could not parse update for Wifi_Inet_State", e); - } - return ret; - } - - public List getOpensyncAPVIFState(TableUpdates tableUpdates, String apId, - OvsdbClient ovsdbClient) { - List ret = new ArrayList(); - try { - - for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { - - for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { - - Row row = rowUpdate.getNew(); - // Row old = rowUpdate.getOld(); - - if (row != null) { - - OpensyncAPVIFState tableState = new OpensyncAPVIFState(); - - Map map = row.getColumns(); - - if (map.get("mac") != null && map.get("mac").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMac(row.getStringColumn("mac")); - } - if (map.get("bridge") != null && map.get("bridge").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setBridge(row.getStringColumn("bridge")); - } - if (map.get("btm") != null && map.get("btm").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setBtm(row.getIntegerColumn("btm").intValue()); - } - - if (map.get("channel") != null && map.get("channel").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setChannel(row.getIntegerColumn("channel").intValue()); - } - - if (map.get("enabled") != null && map.get("enabled").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setEnabled(row.getBooleanColumn("enabled")); - } - - if (map.get("group_rekey") != null && map.get("group_rekey").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setGroupRekey(row.getIntegerColumn("group_rekey").intValue()); - } - if (map.get("if_name") != null && map.get("if_name").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setIfName(row.getStringColumn("if_name")); - } - - if (map.get("mode") != null && map.get("mode").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMode(row.getStringColumn("mode")); - } - - if (map.get("rrm") != null && map.get("rrm").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setRrm(row.getIntegerColumn("rrm").intValue()); - } - if (map.get("ssid") != null && map.get("ssid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setSsid(row.getStringColumn("ssid")); - } - - if (map.get("ssid_broadcast") != null && map.get("ssid_broadcast").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setSsidBroadcast(row.getStringColumn("ssid_broadcast")); - } - if (map.get("uapsd_enable") != null && map.get("uapsd_enable").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setUapsdEnable(row.getBooleanColumn("uapsd_enable")); - } - if (map.get("vif_radio_idx") != null && map.get("vif_radio_idx").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVifRadioIdx(row.getIntegerColumn("vif_radio_idx").intValue()); - } - - if (map.get("associated_clients") != null) - tableState.setAssociatedClients(row.getSetColumn("associated_clients")); - - if (map.get("security") != null) - tableState.setSecurity(row.getMapColumn("security")); - - if (map.get("_version") != null && map.get("_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_version")); - } - if (map.get("_uuid") != null && map.get("_uuid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_uuid")); - } - - ret.add(tableState); - - } - - } - } - - ret.stream().forEach(wrs -> { - LOG.debug("Wifi_VIF_State row {}", wrs.toPrettyString()); - }); - - } catch (Exception e) { - LOG.error("Could not parse update for Wifi_VIF_State", e); - - } - return ret; - } - - public List getOpensyncWifiAssociatedClients(TableUpdates tableUpdates, String apId, - OvsdbClient ovsdbClient) { - List ret = new ArrayList(); - - try { - - for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { - - for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { - - Row row = rowUpdate.getNew(); - - if (row != null) { - - OpensyncWifiAssociatedClients tableState = new OpensyncWifiAssociatedClients(); - Map map = row.getColumns(); - - if (map.get("mac") != null && map.get("mac").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMac(row.getStringColumn("mac")); - } - if (row.getSetColumn("capabilities") != null) - tableState.setCapabilities(row.getSetColumn("capabilities")); - if (map.get("state") != null && map.get("state").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setState(row.getStringColumn("state")); - } - if (map.get("_version") != null && map.get("_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_version")); - } - if (map.get("_uuid") != null && map.get("_uuid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_uuid")); - } - - ret.add(tableState); - - } - } - } - ret.stream().forEach(wrs -> { - LOG.debug("Wifi_Associated_Clients row {}", wrs.toPrettyString()); - }); - } catch (Exception e) { - LOG.error("Could not get Wifi_Associated_Clients list from table update", e); - } - - return ret; - } - - public OpensyncAWLANNode getOpensyncAWLANNode(TableUpdates tableUpdates, String apId, OvsdbClient ovsdbClient) { - OpensyncAWLANNode tableState = new OpensyncAWLANNode(); - - try { - - for (TableUpdate tableUpdate : tableUpdates.getTableUpdates().values()) { - - for (RowUpdate rowUpdate : tableUpdate.getRowUpdates().values()) { - - Row row = rowUpdate.getNew(); - - if (row != null) { - - Map map = row.getColumns(); - - if (map.get("mqtt_settings") != null) { - tableState.setMqttSettings(row.getMapColumn("mqtt_settings")); - } - if (map.get("mqtt_headers") != null) { - tableState.setMqttHeaders(row.getMapColumn("mqtt_headers")); - } - if (map.get("mqtt_topics") != null) { - tableState.setMqttHeaders(row.getMapColumn("mqtt_topics")); - } - - if (map.get("model") != null && map.get("model").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setModel(row.getStringColumn("model")); - } - if (map.get("sku_number") != null && map.get("sku_number").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setSkuNumber(row.getStringColumn("sku_number")); - } - if (map.get("id") != null && map.get("id").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setId(row.getStringColumn("id")); - } - - if (map.get("version_matrix") != null) - tableState.setVersionMatrix(row.getMapColumn("version_matrix")); - if (map.get("firmware_version") != null && map.get("firmware_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setFirmwareVersion(row.getStringColumn("firmware_version")); - } - if (map.get("firmware_url") != null && map.get("firmware_url").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setFirmwareUrl(row.getStringColumn("firmware_url")); - } - - if (map.get("_uuid") != null && map.get("_uuid").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_uuid")); - } - if (map.get("upgrade_dl_timer") != null && map.get("upgrade_dl_timer").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setUpgradeDlTimer(row.getIntegerColumn("upgrade_dl_timer").intValue()); - } - if (map.get("platform_version") != null && map.get("platform_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setPlatformVersion(row.getStringColumn("platform_version")); - } - if (map.get("firmware_pass") != null && map.get("firmware_pass").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setFirmwarePass(row.getStringColumn("firmware_pass")); - } - if (map.get("upgrade_timer") != null && map.get("upgrade_timer").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setUpgradeTimer(row.getIntegerColumn("upgrade_timer").intValue()); - } - if (map.get("max_backoff") != null && map.get("max_backoff").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMaxBackoff(row.getIntegerColumn("max_backoff").intValue()); - } - if (map.get("led_config") != null) - tableState.setLedConfig(row.getMapColumn("led_config")); - if (map.get("redirector_addr") != null && map.get("redirector_addr").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setRedirectorAddr(row.getStringColumn("redirector_addr")); - } - if (map.get("serial_number") != null && map.get("serial_number").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setSerialNumber(row.getStringColumn("serial_number")); - } - if (map.get("_version") != null && map.get("_version").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setVersion(row.getUuidColumn("_version")); - } - if (map.get("upgrade_status") != null && map.get("upgrade_status").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setUpgradeTimer(row.getIntegerColumn("upgrade_status").intValue()); - } - if (map.get("device_mode") != null && map.get("device_mode").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setDeviceMode(row.getStringColumn("device_mode")); - } - if (map.get("min_backoff") != null && map.get("min_backoff").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setMinBackoff(row.getIntegerColumn("min_backoff").intValue()); - } - - if (map.get("revision") != null && map.get("revision").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setRevision(row.getStringColumn("revision")); - } - if (map.get("manager_addr") != null && map.get("manager_addr").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setManagerAddr(row.getStringColumn("manager_addr")); - } - if (map.get("factory_reset") != null && map.get("factory_reset").getClass() - .equals(com.vmware.ovsdb.protocol.operation.notation.Atom.class)) { - tableState.setFactoryReset(row.getBooleanColumn("factory_reset")); - } - } - - } - - } - } catch (Exception e) { - LOG.error("Failed to handle AWLAN_Node update", e); - } - - return tableState; - - } - - public void configureWifiRadios(OvsdbClient ovsdbClient, String configName, - Map provisionedWifiRadios, int channel, Map hwConfig, - String country) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { - - WifiRadioConfigInfo existingConfig = provisionedWifiRadios.get(configName); - - if (existingConfig == null) { - LOG.warn("There is no WifiRadioConfig {}", configName); - return; - } - - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - List conditions = new ArrayList<>(); - conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(configName))); - - updateColumns.put("channel", new Atom(channel)); - updateColumns.put("country", new Atom<>(country)); - @SuppressWarnings("unchecked") - com.vmware.ovsdb.protocol.operation.notation.Map hwConfigMap = com.vmware.ovsdb.protocol.operation.notation.Map - .of(hwConfig); - updateColumns.put("hw_config", hwConfigMap); - - Row row = new Row(updateColumns); - operations.add(new Update(wifiRadioConfigDbTable, conditions, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Provisioned channel {} for {}", channel, configName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - public void configureSingleSsid(OvsdbClient ovsdbClient, String bridge, String ifName, String ssid, - boolean ssidBroadcast, Map security, - Map provisionedWifiRadioConfigs, String radioIfName) { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - - try { - /// usr/plume/tools/ovsh i Wifi_VIF_Config - // bridge:=br-home btm:=1 enabled:=true ft_psk:=0 group_rekey:=86400 - // if_name:=home-ap-24 mode:=ap rrm:=1 ssid:=ConnectUS-Plume - /// ssid_broadcast:=enabled - // uapsd_enable:=true vif_radio_idx:=2 - /// security:='["map",[["encryption","WPA-PSK"],["key","12345678"],["mode","2"]]]' - - updateColumns.put("bridge", new Atom<>(bridge)); - updateColumns.put("btm", new Atom<>(1)); - updateColumns.put("enabled", new Atom<>(true)); - updateColumns.put("ft_psk", new Atom<>(0)); - updateColumns.put("group_rekey", new Atom<>(86400)); - updateColumns.put("if_name", new Atom<>(ifName)); - updateColumns.put("mode", new Atom<>("ap")); - updateColumns.put("rrm", new Atom<>(1)); - updateColumns.put("ssid", new Atom<>(ssid)); - updateColumns.put("ssid_broadcast", new Atom<>(ssidBroadcast ? "enabled" : "disabled")); - updateColumns.put("uapsd_enable", new Atom<>(true)); - updateColumns.put("vif_radio_idx", new Atom<>(2)); - - @SuppressWarnings("unchecked") - com.vmware.ovsdb.protocol.operation.notation.Map securityMap = com.vmware.ovsdb.protocol.operation.notation.Map - .of(security); - updateColumns.put("security", securityMap); - - Row row = new Row(updateColumns); - operations.add(new Insert(wifiVifConfigDbTable, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Provisioned SSID {} on {}", ssid, ifName); - - Uuid vifConfigUuid = null; - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - if (res instanceof InsertResult) { - vifConfigUuid = ((InsertResult) res).getUuid(); - } - } - - if (vifConfigUuid == null) { - throw new IllegalStateException("Wifi_VIF_Config entry was not created successfully"); - } - - // update Wifi_Radio_Config here - add vifConfigUuid - /// usr/plume/tools/ovsh u Wifi_Radio_Config - // vif_configs:='["set",[["uuid","98e42897-b567-4186-84a6-4a4e38a51e9d"],["uuid","4314920e-c4e6-42a6-93e3-261142ed9adf"]]]' - // --where if_name==wifi0 - updateColumns.clear(); - operations.clear(); - - WifiRadioConfigInfo wifiRadioConfigInfo = provisionedWifiRadioConfigs.get(radioIfName); - if (wifiRadioConfigInfo == null) { - throw new IllegalStateException("missing Wifi_Radio_Config entry " + radioIfName); - } - - Set vifConfigsSet = new HashSet<>(wifiRadioConfigInfo.vifConfigUuids); - vifConfigsSet.add(vifConfigUuid); - com.vmware.ovsdb.protocol.operation.notation.Set vifConfigs = com.vmware.ovsdb.protocol.operation.notation.Set - .of(vifConfigsSet); - updateColumns.put("vif_configs", vifConfigs); - - List conditions = new ArrayList<>(); - conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(radioIfName))); - - row = new Row(updateColumns); - operations.add(new Update(wifiRadioConfigDbTable, conditions, row)); - - fResult = ovsdbClient.transact(ovsdbName, operations); - result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated WifiRadioConfig {} for SSID {}:", radioIfName, ssid); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - LOG.info("Provisioned SSID {} on interface {} / {}", ssid, ifName, radioIfName); - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in configureSingleSsid", e); - throw new RuntimeException(e); - } - } - - public void configureSsids(OvsdbClient ovsdbClient, List ssidConfigs) { - if (ssidConfigs == null || ssidConfigs.isEmpty()) { - LOG.debug("No SSIDs to configure"); - return; - } - - Map provisionedWifiVifConfigs = getProvisionedWifiVifConfigs(ovsdbClient); - Map provisionedWifiRadioConfigs = getProvisionedWifiRadioConfigs(ovsdbClient); - LOG.debug("Existing WifiVifConfigs: {}", provisionedWifiVifConfigs.keySet()); - - for (OpensyncAPSsidConfig ssidCfg : ssidConfigs) { - String bridge = brHome; - String ifName = null; - String radioIfName = null; - if (ssidCfg.getRadioType() == RadioType.is2dot4GHz) { - ifName = homeAp24; - radioIfName = "wifi0"; - } else if (ssidCfg.getRadioType() == RadioType.is5GHzL) { - ifName = homeApL50; - radioIfName = "wifi1"; - } else if (ssidCfg.getRadioType() == RadioType.is5GHzU) { - ifName = homeApU50; - radioIfName = "wifi2"; - } - String ssid = ssidCfg.getSsid(); - boolean ssidBroadcast = ssidCfg.isBroadcast(); - Map security = new HashMap<>(); - security.put("encryption", ssidCfg.getEncryption()); - security.put("key", ssidCfg.getKey()); - security.put("mode", ssidCfg.getMode()); - - if (!provisionedWifiVifConfigs.containsKey(ifName + "_" + ssid)) { - try { - configureSingleSsid(ovsdbClient, bridge, ifName, ssid, ssidBroadcast, security, - provisionedWifiRadioConfigs, radioIfName); - } catch (IllegalStateException e) { - // could not provision this SSID, but still can go on - LOG.warn("could not provision SSID {} on {}", ssid, radioIfName); - } - } - - } - - } - - public void configureWifiInet(OvsdbClient ovsdbClient, Map provisionedWifiInetConfigs, - String ifName) { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - - try { - /// usr/plume/tools/ovsh i Wifi_Inet_Config NAT:=false enabled:=true - /// if_name:=home-ap-24 if_type:=vif ip_assign_scheme:=none - /// network:=true - - updateColumns.put("NAT", new Atom<>(false)); - updateColumns.put("enabled", new Atom<>(true)); - updateColumns.put("if_name", new Atom<>(ifName)); - updateColumns.put("if_type", new Atom<>("vif")); - updateColumns.put("ip_assign_scheme", new Atom<>("none")); - updateColumns.put("network", new Atom<>(true)); - - Row row = new Row(updateColumns); - operations.add(new Insert(wifiInetConfigDbTable, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Provisioned WifiInetConfig {}", ifName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in configureWifiInet", e); - throw new RuntimeException(e); - } - - } - - public void configureWifiInetSetNetwork(OvsdbClient ovsdbClient, String ifName) { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - List conditions = new ArrayList<>(); - - try { - /// usr/plume/tools/ovsh u Wifi_Inet_Config -w if_name=="br-home" - /// network:=true - - conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); - updateColumns.put("network", new Atom<>(true)); - - Row row = new Row(updateColumns); - operations.add(new Update(wifiInetConfigDbTable, conditions, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - LOG.debug("Enabled network on WifiInetConfig {}", ifName); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - LOG.error("Error in configureWifiInetSetNetwork", e); - throw new RuntimeException(e); - } - - } - - public void configureWifiInet(OvsdbClient ovsdbClient) { - Map provisionedWifiInetConfigs = getProvisionedWifiInetConfigs(ovsdbClient); - LOG.debug("Existing WifiInetConfigs: {}", provisionedWifiInetConfigs.keySet()); - - String ifName = homeAp24; - if (!provisionedWifiInetConfigs.containsKey(ifName)) { - configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); - } - - ifName = homeApL50; - if (!provisionedWifiInetConfigs.containsKey(ifName)) { - configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); - } - - ifName = homeApU50; - if (!provisionedWifiInetConfigs.containsKey(ifName)) { - configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); - } - - if (!provisionedWifiInetConfigs.containsKey(brHome) || !provisionedWifiInetConfigs.get(brHome).network) { - // set network flag on brHome in wifiInetConfig table - configureWifiInetSetNetwork(ovsdbClient, brHome); - } - } - - public void configureStats(OvsdbClient ovsdbClient) { - - Map provisionedWifiStatsConfigs = getProvisionedWifiStatsConfigs(ovsdbClient); - - try { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - Map thresholdMap = new HashMap<>(); - thresholdMap.put("max_delay", 600); - thresholdMap.put("util", 10); - - @SuppressWarnings("unchecked") - com.vmware.ovsdb.protocol.operation.notation.Map thresholds = com.vmware.ovsdb.protocol.operation.notation.Map - .of(thresholdMap); - - provisionWifiStatsConfigDevice(provisionedWifiStatsConfigs, operations, updateColumns); - - provisionWifiStatsConfigSurvey(provisionedWifiStatsConfigs, operations, thresholds); - - provisionWifiStatsConfigNeighbor(provisionedWifiStatsConfigs, operations); - - provisionWifiStatsConfigClient(provisionedWifiStatsConfigs, operations); - - provisionWifiStatsRssi(provisionedWifiStatsConfigs, operations); - - if (!operations.isEmpty()) { - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated {}:", wifiStatsConfigDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - } - - private void provisionWifiStatsRssi(Map provisionedWifiStatsConfigs, - List operations) { - Map updateColumns; - Row row; - for (String band : new String[] { "2.4G", "5GL","5GU" }) { - if (!provisionedWifiStatsConfigs.containsKey(band + "_rssi_on-chan")) { - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>(band)); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("rssi")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - row = new Row(updateColumns); - - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - - } - } - - private void provisionWifiStatsConfigNeighbor(Map provisionedWifiStatsConfigs, - List operations) { - Map updateColumns; - Row row; - - Set channelSet2g = new HashSet<>(); - channelSet2g.add(1); - channelSet2g.add(6); - channelSet2g.add(11); - com.vmware.ovsdb.protocol.operation.notation.Set channels2g = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet2g); - - Set channelSet5gl = new HashSet<>(); - channelSet5gl.add(36); - channelSet5gl.add(44); - channelSet5gl.add(52); - com.vmware.ovsdb.protocol.operation.notation.Set channels5gl = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet5gl); - - Set channelSet5gu = new HashSet<>(); - channelSet5gu.add(100); - channelSet5gu.add(108); - channelSet5gu.add(116); - com.vmware.ovsdb.protocol.operation.notation.Set channels5gu = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet5gu); - - if (!provisionedWifiStatsConfigs.containsKey("2.4G_neighbor_off-chan")) { - - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels2g); - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_interval", new Atom<>(120)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_neighbor_off-chan")) { - - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels5gl); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_interval", new Atom<>(120)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_neighbor_off-chan")) { - - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels5gu); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_interval", new Atom<>(120)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_neighbor_on-chan")) { - // - updateColumns = new HashMap<>(); - // updateColumns.put("channel_list", channels ); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_neighbor_on-chan")) { - // - updateColumns = new HashMap<>(); - // updateColumns.put("channel_list", channels ); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("2.4G_neighbor_on-chan")) { - // - updateColumns = new HashMap<>(); - // updateColumns.put("channel_list", channels ); - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("neighbor")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - // updateColumns.put("threshold", thresholds ); - - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - } - - private void provisionWifiStatsConfigSurvey(Map provisionedWifiStatsConfigs, - List operations, com.vmware.ovsdb.protocol.operation.notation.Map thresholds) { - - Set channelSet2g = new HashSet<>(); - channelSet2g.add(1); - channelSet2g.add(6); - channelSet2g.add(11); - com.vmware.ovsdb.protocol.operation.notation.Set channels2g = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet2g); - - Set channelSet5gl = new HashSet<>(); - channelSet5gl.add(36); - channelSet5gl.add(44); - channelSet5gl.add(52); - com.vmware.ovsdb.protocol.operation.notation.Set channels5gl = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet5gl); - - Set channelSet5gu = new HashSet<>(); - channelSet5gu.add(100); - channelSet5gu.add(108); - channelSet5gu.add(116); - com.vmware.ovsdb.protocol.operation.notation.Set channels5gu = com.vmware.ovsdb.protocol.operation.notation.Set - .of(channelSet5gu); - - Map updateColumns; - Row row; - - if (!provisionedWifiStatsConfigs.containsKey("2.4G_survey_on-chan")) { - // - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_survey_on-chan")) { - // - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_survey_on-chan")) { - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(0)); - updateColumns.put("survey_type", new Atom<>("on-chan")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - - if (!provisionedWifiStatsConfigs.containsKey("2.4G_survey_off-chan")) { - // - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels2g); - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_interval", new Atom<>(0)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(10)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - updateColumns.put("threshold", thresholds); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_survey_off-chan")) { - // - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels5gl); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_interval", new Atom<>(0)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(10)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - updateColumns.put("threshold", thresholds); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_survey_off-chan")) { - // - updateColumns = new HashMap<>(); - updateColumns.put("channel_list", channels5gu); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_interval", new Atom<>(0)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("survey")); - updateColumns.put("survey_interval_ms", new Atom<>(10)); - updateColumns.put("survey_type", new Atom<>("off-chan")); - updateColumns.put("threshold", thresholds); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - // - } - - } - - private void provisionWifiStatsConfigDevice(Map provisionedWifiStatsConfigs, - List operations, Map updateColumns) { - Row row; - if (!provisionedWifiStatsConfigs.containsKey("2.4G_device")) { - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_interval", new Atom<>(900)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("device")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_device")) { - // updateColumns.put("channel_list", channels ); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_interval", new Atom<>(900)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("device")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_device")) { - // updateColumns.put("channel_list", channels ); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_interval", new Atom<>(900)); - updateColumns.put("sampling_interval", new Atom<>(0)); - updateColumns.put("stats_type", new Atom<>("device")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - } - - private void provisionWifiStatsConfigClient(Map provisionedWifiStatsConfigs, - List operations) { - Map updateColumns; - Row row; - if (!provisionedWifiStatsConfigs.containsKey("2.4G_client")) { - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("2.4G")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("client")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - - if (!provisionedWifiStatsConfigs.containsKey("5GL_client")) { - - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("5GL")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("client")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - - } - - if (!provisionedWifiStatsConfigs.containsKey("5GU_client")) { - - updateColumns = new HashMap<>(); - updateColumns.put("radio_type", new Atom<>("5GU")); - updateColumns.put("reporting_count", new Atom<>(0)); - updateColumns.put("reporting_interval", new Atom<>(60)); - updateColumns.put("sampling_interval", new Atom<>(10)); - updateColumns.put("stats_type", new Atom<>("client")); - row = new Row(updateColumns); - operations.add(new Insert(wifiStatsConfigDbTable, row)); - } - } - - public String changeRedirectorAddress(OvsdbClient ovsdbClient, String apId, String newRedirectorAddress) { - try { - List operations = new ArrayList<>(); - Map updateColumns = new HashMap<>(); - - updateColumns.put("redirector_addr", new Atom<>(newRedirectorAddress)); - - Row row = new Row(updateColumns); - operations.add(new Update(awlanNodeDbTable, row)); - - CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); - OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - - if (LOG.isDebugEnabled()) { - LOG.debug("Updated {} redirector_addr = {}", awlanNodeDbTable, newRedirectorAddress); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } - } - - } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { - throw new RuntimeException(e); - } - - return newRedirectorAddress; - } + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Provisioned WifiInetConfig {}", ifName); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in configureWifiInet", e); + throw new RuntimeException(e); + } + + } + + public void configureWifiInetSetNetwork(OvsdbClient ovsdbClient, String ifName) { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + List conditions = new ArrayList<>(); + + try { + /// usr/plume/tools/ovsh u Wifi_Inet_Config -w if_name=="br-home" + /// network:=true + + conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); + updateColumns.put("network", new Atom<>(true)); + + Row row = new Row(updateColumns); + operations.add(new Update(wifiInetConfigDbTable, conditions, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + LOG.debug("Enabled network on WifiInetConfig {}", ifName); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + LOG.error("Error in configureWifiInetSetNetwork", e); + throw new RuntimeException(e); + } + + } + + public void configureWifiInet(OvsdbClient ovsdbClient) { + Map provisionedWifiInetConfigs = getProvisionedWifiInetConfigs(ovsdbClient); + LOG.debug("Existing WifiInetConfigs: {}", provisionedWifiInetConfigs.keySet()); + + String ifName = homeAp24; + if (!provisionedWifiInetConfigs.containsKey(ifName)) { + configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); + } + + ifName = homeApL50; + if (!provisionedWifiInetConfigs.containsKey(ifName)) { + configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); + } + + ifName = homeApU50; + if (!provisionedWifiInetConfigs.containsKey(ifName)) { + configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); + } + + if (!provisionedWifiInetConfigs.containsKey(brHome) || !provisionedWifiInetConfigs.get(brHome).network) { + // set network flag on brHome in wifiInetConfig table + configureWifiInetSetNetwork(ovsdbClient, brHome); + } + } + + public void configureStats(OvsdbClient ovsdbClient) { + + Map provisionedWifiStatsConfigs = getProvisionedWifiStatsConfigs(ovsdbClient); + + try { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + Map thresholdMap = new HashMap<>(); + thresholdMap.put("max_delay", 600); + thresholdMap.put("util", 10); + + @SuppressWarnings("unchecked") + com.vmware.ovsdb.protocol.operation.notation.Map thresholds = com.vmware.ovsdb.protocol.operation.notation.Map + .of(thresholdMap); + + provisionWifiStatsConfigDevice(provisionedWifiStatsConfigs, operations, updateColumns); + + provisionWifiStatsConfigSurvey(provisionedWifiStatsConfigs, operations, thresholds); + + provisionWifiStatsConfigNeighbor(provisionedWifiStatsConfigs, operations); + + provisionWifiStatsConfigClient(provisionedWifiStatsConfigs, operations); + + provisionWifiStatsRssi(provisionedWifiStatsConfigs, operations); + + if (!operations.isEmpty()) { + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated {}:", wifiStatsConfigDbTable); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + } + + private void provisionWifiStatsRssi(Map provisionedWifiStatsConfigs, + List operations) { + Map updateColumns; + Row row; + for (String band : new String[] { "2.4G", "5GL", "5GU" }) { + if (!provisionedWifiStatsConfigs.containsKey(band + "_rssi_on-chan")) { + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>(band)); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("rssi")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + row = new Row(updateColumns); + + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + + } + } + + private void provisionWifiStatsConfigNeighbor(Map provisionedWifiStatsConfigs, + List operations) { + Map updateColumns; + Row row; + + Set channelSet2g = new HashSet<>(); + channelSet2g.add(1); + channelSet2g.add(6); + channelSet2g.add(11); + com.vmware.ovsdb.protocol.operation.notation.Set channels2g = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet2g); + + Set channelSet5gl = new HashSet<>(); + channelSet5gl.add(36); + channelSet5gl.add(44); + channelSet5gl.add(52); + com.vmware.ovsdb.protocol.operation.notation.Set channels5gl = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet5gl); + + Set channelSet5gu = new HashSet<>(); + channelSet5gu.add(100); + channelSet5gu.add(108); + channelSet5gu.add(116); + com.vmware.ovsdb.protocol.operation.notation.Set channels5gu = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet5gu); + + if (!provisionedWifiStatsConfigs.containsKey("2.4G_neighbor_off-chan")) { + + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels2g); + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_interval", new Atom<>(120)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_neighbor_off-chan")) { + + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels5gl); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_interval", new Atom<>(120)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_neighbor_off-chan")) { + + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels5gu); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_interval", new Atom<>(120)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_neighbor_on-chan")) { + // + updateColumns = new HashMap<>(); + // updateColumns.put("channel_list", channels ); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_neighbor_on-chan")) { + // + updateColumns = new HashMap<>(); + // updateColumns.put("channel_list", channels ); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("2.4G_neighbor_on-chan")) { + // + updateColumns = new HashMap<>(); + // updateColumns.put("channel_list", channels ); + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("neighbor")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + // updateColumns.put("threshold", thresholds ); + + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + } + + private void provisionWifiStatsConfigSurvey(Map provisionedWifiStatsConfigs, + List operations, com.vmware.ovsdb.protocol.operation.notation.Map thresholds) { + + Set channelSet2g = new HashSet<>(); + channelSet2g.add(1); + channelSet2g.add(6); + channelSet2g.add(11); + com.vmware.ovsdb.protocol.operation.notation.Set channels2g = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet2g); + + Set channelSet5gl = new HashSet<>(); + channelSet5gl.add(36); + channelSet5gl.add(44); + channelSet5gl.add(52); + com.vmware.ovsdb.protocol.operation.notation.Set channels5gl = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet5gl); + + Set channelSet5gu = new HashSet<>(); + channelSet5gu.add(100); + channelSet5gu.add(108); + channelSet5gu.add(116); + com.vmware.ovsdb.protocol.operation.notation.Set channels5gu = com.vmware.ovsdb.protocol.operation.notation.Set + .of(channelSet5gu); + + Map updateColumns; + Row row; + + if (!provisionedWifiStatsConfigs.containsKey("2.4G_survey_on-chan")) { + // + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_survey_on-chan")) { + // + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_survey_on-chan")) { + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(0)); + updateColumns.put("survey_type", new Atom<>("on-chan")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + + if (!provisionedWifiStatsConfigs.containsKey("2.4G_survey_off-chan")) { + // + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels2g); + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_interval", new Atom<>(0)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(10)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + updateColumns.put("threshold", thresholds); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_survey_off-chan")) { + // + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels5gl); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_interval", new Atom<>(0)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(10)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + updateColumns.put("threshold", thresholds); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_survey_off-chan")) { + // + updateColumns = new HashMap<>(); + updateColumns.put("channel_list", channels5gu); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_interval", new Atom<>(0)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("survey")); + updateColumns.put("survey_interval_ms", new Atom<>(10)); + updateColumns.put("survey_type", new Atom<>("off-chan")); + updateColumns.put("threshold", thresholds); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + // + } + + } + + private void provisionWifiStatsConfigDevice(Map provisionedWifiStatsConfigs, + List operations, Map updateColumns) { + Row row; + if (!provisionedWifiStatsConfigs.containsKey("2.4G_device")) { + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_interval", new Atom<>(900)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("device")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_device")) { + // updateColumns.put("channel_list", channels ); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_interval", new Atom<>(900)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("device")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_device")) { + // updateColumns.put("channel_list", channels ); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_interval", new Atom<>(900)); + updateColumns.put("sampling_interval", new Atom<>(0)); + updateColumns.put("stats_type", new Atom<>("device")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + } + + private void provisionWifiStatsConfigClient(Map provisionedWifiStatsConfigs, + List operations) { + Map updateColumns; + Row row; + if (!provisionedWifiStatsConfigs.containsKey("2.4G_client")) { + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("2.4G")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("client")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + + if (!provisionedWifiStatsConfigs.containsKey("5GL_client")) { + + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("5GL")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("client")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + + } + + if (!provisionedWifiStatsConfigs.containsKey("5GU_client")) { + + updateColumns = new HashMap<>(); + updateColumns.put("radio_type", new Atom<>("5GU")); + updateColumns.put("reporting_count", new Atom<>(0)); + updateColumns.put("reporting_interval", new Atom<>(60)); + updateColumns.put("sampling_interval", new Atom<>(10)); + updateColumns.put("stats_type", new Atom<>("client")); + row = new Row(updateColumns); + operations.add(new Insert(wifiStatsConfigDbTable, row)); + } + } + + public String changeRedirectorAddress(OvsdbClient ovsdbClient, String apId, String newRedirectorAddress) { + try { + List operations = new ArrayList<>(); + Map updateColumns = new HashMap<>(); + + updateColumns.put("redirector_addr", new Atom<>(newRedirectorAddress)); + + Row row = new Row(updateColumns); + operations.add(new Update(awlanNodeDbTable, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + + if (LOG.isDebugEnabled()) { + LOG.debug("Updated {} redirector_addr = {}", awlanNodeDbTable, newRedirectorAddress); + + for (OperationResult res : result) { + LOG.debug("Op Result {}", res); + } + } + + } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { + throw new RuntimeException(e); + } + + return newRedirectorAddress; + } } diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/models/WifiRadioConfigInfo.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/models/WifiRadioConfigInfo.java index 83fa8a6..365dbae 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/models/WifiRadioConfigInfo.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/models/WifiRadioConfigInfo.java @@ -7,45 +7,46 @@ import java.util.Set; import com.vmware.ovsdb.protocol.operation.notation.Uuid; -public class WifiRadioConfigInfo implements Cloneable{ - - public Set vifConfigUuids; - - public String freqBand; - public int channel; - public Integer txPower; - public String channelMode; - public boolean enabled; - public String htMode; - public Map hwConfig; - public String country; - - public String ifName; - public Uuid uuid; - - @Override - public WifiRadioConfigInfo clone() { - try { - WifiRadioConfigInfo ret = (WifiRadioConfigInfo)super.clone(); - if(vifConfigUuids!=null) { - ret.vifConfigUuids = new HashSet<>(this.vifConfigUuids); - } - - if(hwConfig!=null) { - ret.hwConfig = new HashMap<>(this.hwConfig); - } - return ret; - }catch(CloneNotSupportedException e) { - throw new IllegalStateException("Cannot clone ", e); - } - } +public class WifiRadioConfigInfo implements Cloneable { + + public Set vifConfigUuids; + + public String freqBand; + public int channel; + public Integer txPower; + public String channelMode; + public boolean enabled; + public String htMode; + public Map hwConfig; + public String country; + public int beaconInterval; + + public String ifName; + public Uuid uuid; + + @Override + public WifiRadioConfigInfo clone() { + try { + WifiRadioConfigInfo ret = (WifiRadioConfigInfo) super.clone(); + if (vifConfigUuids != null) { + ret.vifConfigUuids = new HashSet<>(this.vifConfigUuids); + } + + if (hwConfig != null) { + ret.hwConfig = new HashMap<>(this.hwConfig); + } + return ret; + } catch (CloneNotSupportedException e) { + throw new IllegalStateException("Cannot clone ", e); + } + } + + @Override + public String toString() { + return String.format( + "WifiRadioConfigInfo [vifConfigUuids=%s, freqBand=%s, channel=%s, txPower=%s, channelMode=%s, enabled=%s, htMode=%s, hwConfig=%s, country=%s, bcn_int=%s, ifName=%s, uuid=%s]", + vifConfigUuids, freqBand, channel, txPower, channelMode, enabled, htMode, hwConfig, country, + beaconInterval, ifName, uuid); + } - @Override - public String toString() { - return String.format( - "WifiRadioConfigInfo [vifConfigUuids=%s, freqBand=%s, channel=%s, txPower=%s, channelMode=%s, enabled=%s, htMode=%s, hwConfig=%s, country=%s, ifName=%s, uuid=%s]", - vifConfigUuids, freqBand, channel, txPower, channelMode, enabled, htMode, hwConfig, country, ifName, - uuid); - } - } \ No newline at end of file