Compare commits

..

11 Commits

Author SHA1 Message Date
Lynn Shi
ee1350fbe9 WIFI-2096 Add Portal support for cell size management, update comments 2021-05-06 11:08:40 -04:00
Lynn Shi
b7a3564153 WIFI-2096 Add Portal support for cell size management 2021-05-05 16:25:57 -04:00
Mike Hansen
e173e02eae Merge pull request #35 from Telecominfraproject/WIFI-2080
WIFI-2080 Add support for cell size attributes lightweight provisioni…
2021-05-04 13:03:35 -04:00
Lynn Shi
1fbc4e1dff WIFI-2080 update based on review comments 2021-04-30 14:00:32 -04:00
Mike Hansen
cd67fc15dd WIFI-2083: Fix Enum labels on Backend
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-04-30 12:12:31 -04:00
Lynn Shi
a98cca3d8c WIFI-2080 Add support for cell size attributes lightweight provisioning changes to AP 2021-04-29 18:21:59 -04:00
Mike Hansen
4552118b4e WIFI-2067: Enable setting default reporting interval for on and off-channel wifi stats as VM args 2021-04-26 12:29:01 -04:00
Mike Hansen
67abbc0bc7 WIFI-1730: Syslog configuration does't work 2021-04-23 15:00:16 -04:00
Mike Hansen
9d33afec93 WIFI-2043: CustomerPortalDashboardStatus counts incorrect. 2021-04-21 11:42:32 -04:00
Mike Hansen
1bdecada9b WIFI-2040: ECW5211, ECW5410, WF194C, WF188N in backoff after upgrade 2021-04-20 14:09:13 -04:00
norm-traxler
9b31e67822 Merge pull request #34 from Telecominfraproject/WIFI-2026
WIFI-2026 Changed pom versions from 0.0.1-SNAPSHOT to 1.1.0-SNAPSHOT
2021-04-16 17:09:14 -04:00
13 changed files with 520 additions and 333 deletions

View File

@@ -1736,7 +1736,9 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
EquipmentManufacturerQrCode qrCode = new EquipmentManufacturerQrCode();
if (node.qrCode != null) {
qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT")));
if (node.qrCode.containsKey("DT")) {
qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT")));
}
qrCode.setVendorName(node.qrCode.get("VN"));
if (isValidMACAddress(node.qrCode.get("DM"))) {
qrCode.setDeviceMac(MacAddress.valueOf(node.qrCode.get("DM")));

View File

@@ -32,6 +32,7 @@ import com.telecominfraproject.wlan.core.model.service.GatewayType;
import com.telecominfraproject.wlan.core.model.service.ServiceInstanceInformation;
import com.telecominfraproject.wlan.core.server.container.ConnectorProperties;
import com.telecominfraproject.wlan.datastore.exceptions.DsEntityNotFoundException;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBaseCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWBlinkRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWChangeRedirectorHost;
@@ -42,6 +43,7 @@ import com.telecominfraproject.wlan.equipmentgateway.models.CEGWConfigChangeNoti
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareDownloadRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWFirmwareFlashRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWNewChannelRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWCellSizeAttributesRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRadioResetRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck;
@@ -205,6 +207,9 @@ public class OpensyncCloudGatewayController {
case NewChannelRequest:
ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
break;
case CellSizeAttributesRequest:
ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command));
break;
default:
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
ret.add(new EquipmentCommandResponse(
@@ -296,6 +301,10 @@ public class OpensyncCloudGatewayController {
private EquipmentCommandResponse sendNewChannelRequest(OvsdbSession session, CEGWNewChannelRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
private EquipmentCommandResponse sendCellSizeRequest(OvsdbSession session, CEGWCellSizeAttributesRequest command) {
return sendMessage(session, command.getInventoryId(), command);
}
/**
* Deliver a message in payload to the CE
@@ -333,6 +342,12 @@ public class OpensyncCloudGatewayController {
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels);
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWCellSizeAttributesRequest) {
CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
Map<RadioType, CellSizeAttributes> cellSizeAttributeMap = request.getCellSizeAttributesMap();
String resultDetails = tipwlanOvsdbClient.processCellSizeAttributesRequest(inventoryId, cellSizeAttributeMap);
response.setResultDetail(resultDetails);
} else if (command instanceof CEGWFirmwareDownloadRequest) {

View File

@@ -194,17 +194,18 @@ public class MqttStatsPublisher {
// prepare a JSONPrinter to format protobuf messages as
// json
// List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
// protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
// TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
// JsonFormat.Printer jsonPrinter = JsonFormat.printer().preservingProtoFieldNames().includingDefaultValueFields().usingTypeRegistry(oldRegistry);
//
// try {
// LOG.trace(jsonPrinter.print(report));
//
// } catch (InvalidProtocolBufferException e1) {
// LOG.error("Couldn't parse OpensyncStats.report.", e1);
// }
// List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
// protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
// TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
// JsonFormat.Printer jsonPrinter =
// JsonFormat.printer().preservingProtoFieldNames().includingDefaultValueFields().usingTypeRegistry(oldRegistry);
//
// try {
// LOG.trace(jsonPrinter.print(report));
//
// } catch (InvalidProtocolBufferException e1) {
// LOG.error("Couldn't parse OpensyncStats.report.", e1);
// }
List<ServiceMetric> metricRecordList = new ArrayList<>();
@@ -215,6 +216,22 @@ public class MqttStatsPublisher {
populateChannelInfoReports(metricRecordList, report, customerId, equipmentId, locationId, profileId);
populateApSsidMetrics(metricRecordList, report, customerId, equipmentId, apId, locationId);
if (!metricRecordList.isEmpty()) {
long serviceMetricTimestamp = System.currentTimeMillis();
LOG.debug("Current timestamp for service metrics is {}", serviceMetricTimestamp);
metricRecordList.stream().forEach(smr -> {
smr.setCreatedTimestamp(serviceMetricTimestamp);
if (smr.getLocationId() == 0) smr.setLocationId(locationId);
if(smr.getCustomerId() == 0) smr.setCustomerId(customerId);
if (smr.getEquipmentId() == 0L) smr.setEquipmentId(equipmentId);
});
metricRecordList.stream().forEach(smr -> {
LOG.debug("ServiceMetric {}", smr);
});
cloudEventDispatcherInterface.publishMetrics(metricRecordList);
}
publishEvents(report, customerId, equipmentId, apId, locationId);
// handleRssiMetrics(metricRecordList, report, customerId,
// equipmentId, locationId);
@@ -223,11 +240,6 @@ public class MqttStatsPublisher {
LOG.error("Exception when processing stats messages from AP", e);
}
if (!metricRecordList.isEmpty()) {
LOG.debug("Publishing Metrics {}", metricRecordList);
cloudEventDispatcherInterface.publishMetrics(metricRecordList);
}
}
public void processMqttMessage(String topic, FlowReport flowReport) {
@@ -441,9 +453,9 @@ public class MqttStatsPublisher {
if (apClientEvent.hasIpAddr()) {
ByteString ipAddress = apClientEvent.getIpAddr();
if (ipAddress != null) {
try {
try {
InetAddress inetAddress = InetAddress.getByAddress(ipAddress.toByteArray());
LOG.info("ipAddr {} ", inetAddress);
LOG.info("ipAddr {} ", inetAddress);
if (inetAddress instanceof Inet4Address) {
LOG.info("IPv4 address {}", inetAddress);
clientSession.getDetails().setIpAddress(inetAddress);
@@ -661,248 +673,243 @@ public class MqttStatsPublisher {
protected void processClientFailureEvent(int customerId, long equipmentId, long locationId,
sts.OpensyncStats.EventReport.ClientSession apEventClientSession) {
ClientFailureEvent apClientEvent = apEventClientSession.getClientFailureEvent();
com.telecominfraproject.wlan.client.models.Client client =
clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
com.telecominfraproject.wlan.client.models.Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
clientSession.getDetails().setSsid(apClientEvent.getSsid());
ClientFailureDetails clientFailureDetails = new ClientFailureDetails();
if (apClientEvent.hasReasonStr()) {
clientFailureDetails.setReason(apClientEvent.getReasonStr());
}
if (apClientEvent.hasReasonCode()) {
clientFailureDetails.setReasonCode(apClientEvent.getReasonCode());
}
clientSession.getDetails().setLastFailureDetails(clientFailureDetails);
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
clientSession.getDetails().setSsid(apClientEvent.getSsid());
ClientFailureDetails clientFailureDetails = new ClientFailureDetails();
if (apClientEvent.hasReasonStr()) {
clientFailureDetails.setReason(apClientEvent.getReasonStr());
}
if (apClientEvent.hasReasonCode()) {
clientFailureDetails.setReasonCode(apClientEvent.getReasonCode());
}
clientSession.getDetails().setLastFailureDetails(clientFailureDetails);
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
protected void processClientFirstDataEvent(int customerId, long equipmentId, long locationId,
sts.OpensyncStats.EventReport.ClientSession apEventClientSession) {
ClientFirstDataEvent apClientEvent = apEventClientSession.getClientFirstDataEvent();
com.telecominfraproject.wlan.client.models.Client client =
clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
com.telecominfraproject.wlan.client.models.Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasFdataRxUpTsInUs()) {
clientSession.getDetails().setFirstDataRcvdTimestamp(apClientEvent.getFdataRxUpTsInUs());
}
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasFdataTxUpTsInUs()) {
clientSession.getDetails().setFirstDataSentTimestamp(apClientEvent.getFdataTxUpTsInUs());
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
if (apClientEvent.hasFdataRxUpTsInUs()) {
clientSession.getDetails().setFirstDataRcvdTimestamp(apClientEvent.getFdataRxUpTsInUs());
}
if (apClientEvent.hasFdataTxUpTsInUs()) {
clientSession.getDetails().setFirstDataSentTimestamp(apClientEvent.getFdataTxUpTsInUs());
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
protected void processClientIdEvent(int customerId, long equipmentId, long locationId, sts.OpensyncStats.EventReport.ClientSession apEventClientSession) {
ClientIdEvent apClientEvent = apEventClientSession.getClientIdEvent();
com.telecominfraproject.wlan.client.models.Client client =
clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getCltMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getCltMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
if (apClientEvent.hasCltId()) {
((ClientInfoDetails)client.getDetails()).setHostName(apClientEvent.getCltId());
}
client = clientServiceInterface.update(client);
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getCltMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getCltMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
com.telecominfraproject.wlan.client.models.Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getCltMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getCltMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
if (apClientEvent.hasCltId()) {
((ClientInfoDetails) client.getDetails()).setHostName(apClientEvent.getCltId());
}
client = clientServiceInterface.update(client);
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getCltMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getCltMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasCltId()) {
clientSession.getDetails().setHostname(apClientEvent.getCltId());
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasCltId()) {
clientSession.getDetails().setHostname(apClientEvent.getCltId());
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
protected void processClientIpEvent(int customerId, long equipmentId, long locationId, sts.OpensyncStats.EventReport.ClientSession apEventClientSession) {
ClientIpEvent apClientEvent = apEventClientSession.getClientIpEvent();
com.telecominfraproject.wlan.client.models.Client client =
clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
client = clientServiceInterface.update(client);
com.telecominfraproject.wlan.client.models.Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
client = clientServiceInterface.update(client);
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasIpAddr()) {
ByteString ipAddress = apClientEvent.getIpAddr();
if (ipAddress != null) {
try {
InetAddress inetAddress = InetAddress.getByAddress(ipAddress.toByteArray());
if (inetAddress instanceof Inet4Address) {
LOG.info("IPv4 address {}", inetAddress);
clientSession.getDetails().setIpAddress(inetAddress);
} else if (inetAddress instanceof Inet6Address) {
LOG.info("IPv6 address {}", inetAddress);
clientSession.getDetails().setIpAddress(inetAddress);
} else {
LOG.error("Invalid IP Address {}", ipAddress);
}
clientSession.getDetails().setIpTimestamp(apClientEvent.getTimestampMs());
} catch (UnknownHostException ex) {
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasIpAddr()) {
ByteString ipAddress = apClientEvent.getIpAddr();
if (ipAddress != null) {
try {
InetAddress inetAddress = InetAddress.getByAddress(ipAddress.toByteArray());
if (inetAddress instanceof Inet4Address) {
LOG.info("IPv4 address {}", inetAddress);
clientSession.getDetails().setIpAddress(inetAddress);
} else if (inetAddress instanceof Inet6Address) {
LOG.info("IPv6 address {}", inetAddress);
clientSession.getDetails().setIpAddress(inetAddress);
} else {
LOG.error("Invalid IP Address {}", ipAddress);
}
clientSession.getDetails().setIpTimestamp(apClientEvent.getTimestampMs());
} catch (UnknownHostException ex) {
}
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
protected void processClientTimeoutEvent(int customerId, long equipmentId, long locationId,
sts.OpensyncStats.EventReport.ClientSession apEventClientSession) {
ClientTimeoutEvent apClientEvent = apEventClientSession.getClientTimeoutEvent();
com.telecominfraproject.wlan.client.models.Client client =
clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
client = clientServiceInterface.update(client);
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
com.telecominfraproject.wlan.client.models.Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (client == null) {
client = new com.telecominfraproject.wlan.client.models.Client();
client.setCustomerId(customerId);
client.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
client.setDetails(new ClientInfoDetails());
client = clientServiceInterface.create(client);
}
client = clientServiceInterface.update(client);
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(apClientEvent.getStaMac()));
if (clientSession == null) {
clientSession = new ClientSession();
clientSession.setCustomerId(customerId);
clientSession.setEquipmentId(equipmentId);
clientSession.setMacAddress(MacAddress.valueOf(apClientEvent.getStaMac()));
clientSession.setLocationId(locationId);
clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(apEventClientSession.getSessionId()));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails());
}
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId())
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasLastRcvUpTsInUs()) {
clientSession.getDetails().setLastRxTimestamp(apClientEvent.getLastRcvUpTsInUs());
}
if (apClientEvent.hasLastSentUpTsInUs()) {
clientSession.getDetails().setLastTxTimestamp(apClientEvent.getLastSentUpTsInUs());
}
clientSession.getDetails().setTimeoutTimestamp(apClientEvent.getTimestampMs());
clientSession.getDetails().setAssociationState(AssociationState.AP_Timeout);
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
if (clientSession.getDetails().getSessionId() != apEventClientSession.getSessionId()) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
clientSession.getDetails().setSessionId(apEventClientSession.getSessionId());
if (apClientEvent.hasLastRcvUpTsInUs()) {
clientSession.getDetails().setLastRxTimestamp(apClientEvent.getLastRcvUpTsInUs());
}
if (apClientEvent.hasLastSentUpTsInUs()) {
clientSession.getDetails().setLastTxTimestamp(apClientEvent.getLastSentUpTsInUs());
}
clientSession.getDetails().setTimeoutTimestamp(apClientEvent.getTimestampMs());
clientSession.getDetails().setAssociationState(AssociationState.AP_Timeout);
clientSession.getDetails().setLastEventTimestamp(apClientEvent.getTimestampMs());
clientSession = clientServiceInterface.updateSession(clientSession);
}
void populateApNodeMetrics(List<ServiceMetric> metricRecordList, Report report, int customerId, long equipmentId, long locationId) {
@@ -922,8 +929,6 @@ public class MqttStatsPublisher {
ApPerformance apPerformance = new ApPerformance();
apNodeMetrics.setApPerformance(apPerformance);
smr.setCreatedTimestamp(deviceReport.getTimestampMs());
if (deviceReport.getRadioTempCount() > 0) {
float cpuTemperature = 0;
int numSamples = 0;
@@ -1087,8 +1092,9 @@ public class MqttStatsPublisher {
// populate it from report.survey
for (Survey survey : report.getSurveyList()) {
if (survey.getSurveyType().equals(SurveyType.ON_CHANNEL)) { // only interested in ON_CHANNEL for this Metrics Report
if (survey.getSurveyType().equals(SurveyType.ON_CHANNEL)) { // only interested in ON_CHANNEL for this
// Metrics Report
int busyRx = 0; /* Rx = Rx_obss + Rx_errr (self and obss errors) */
int busyTx = 0; /* Tx */
@@ -1194,7 +1200,6 @@ public class MqttStatsPublisher {
networkAdminStatus = new Status();
networkAdminStatus.setCustomerId(customerId);
networkAdminStatus.setEquipmentId(equipmentId);
networkAdminStatus.setCreatedTimestamp(System.currentTimeMillis());
networkAdminStatus.setStatusDataType(StatusDataType.NETWORK_ADMIN);
networkAdminStatus.setDetails(new NetworkAdminStatusData());
networkAdminStatus = statusServiceInterface.update(networkAdminStatus);
@@ -1383,7 +1388,6 @@ public class MqttStatsPublisher {
smr.setLocationId(locationId);
metricRecordList.add(smr);
smr.setCreatedTimestamp(clReport.getTimestampMs());
smr.setClientMac(MacAddress.valueOf(cl.getMacAddress()).getAddressAsLong());
// clReport.getChannel();
@@ -1475,7 +1479,6 @@ public class MqttStatsPublisher {
metricRecordList.add(smr);
NeighbourScanReports neighbourScanReports = new NeighbourScanReports();
smr.setDetails(neighbourScanReports);
smr.setCreatedTimestamp(neighbor.getTimestampMs());
List<NeighbourReport> neighbourReports = new ArrayList<>();
neighbourScanReports.setNeighbourReports(neighbourReports);
@@ -1516,7 +1519,7 @@ public class MqttStatsPublisher {
// some shifting
int rssi = nBss.getRssi();
nr.setRssi(rssi);
nr.setScanTimeInSeconds(neighbor.getTimestampMs()/1000L);
nr.setScanTimeInSeconds(neighbor.getTimestampMs() / 1000L);
nr.setSecureMode(DetectedAuthMode.WPA);
// nr.setSignal(signal);
nr.setSsid(nBss.getSsid());
@@ -1624,10 +1627,6 @@ public class MqttStatsPublisher {
LOG.debug("ClientReport for channel {} RadioBand {}", clientReport.getChannel(), clientReport.getBand());
if (smr.getCreatedTimestamp() < clientReport.getTimestampMs()) {
smr.setCreatedTimestamp(clientReport.getTimestampMs());
}
long txBytes = 0L;
long rxBytes = 0L;
long txFrames = 0L;
@@ -1833,8 +1832,7 @@ public class MqttStatsPublisher {
survey.getSurveyListList().stream().filter(t -> {
if (survey.getSurveyType().equals(SurveyType.ON_CHANNEL)) {
return t.hasDurationMs() && (t.getDurationMs() > 0) && t.hasChannel() &&
(t.hasBusy() || t.hasBusyTx() || t.hasBusySelf() || t.hasNoise());
return t.hasDurationMs() && (t.getDurationMs() > 0) && t.hasChannel() && (t.hasBusy() || t.hasBusyTx() || t.hasBusySelf() || t.hasNoise());
} else {
return t.hasDurationMs() && t.hasChannel();
}
@@ -1863,7 +1861,6 @@ public class MqttStatsPublisher {
if (!channelInfoMap.isEmpty()) {
channelInfoReports.setChannelInformationReportsPerRadio(channelInfoMap);
smr.setDetails(channelInfoReports);
smr.setCreatedTimestamp(survey.getTimestampMs());
metricRecordList.add(smr);
}

View File

@@ -6,6 +6,7 @@ import java.util.Set;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
public interface OvsdbClientInterface {
@@ -33,4 +34,6 @@ public interface OvsdbClientInterface {
String processNewChannelsRequest(String apId, Map<RadioType,Integer> backupChannelMap, Map<RadioType,Integer> primaryChannelMap);
String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap);
}

View File

@@ -22,6 +22,8 @@ FILE_STORE_DIRECTORY="${FILE_STORE_DIRECTORY_INTERNAL:=/tmp/filestore}"
FILE_STORE_EXTERNAL_URL="${FILE_STORE_URL}"
MQTT_BROKER_EXTERNAL_PORT="${MQTT_BROKER_EXTERNAL_PORT}"
OVSDB_EXTERNAL_PORT="${OVSDB_EXTERNAL_PORT}"
OFF_CHANNEL_REPORTING_INTERVAL_SECONDS="${OFF_CHANNEL_REPORTING_INTERVAL_SECONDS:=120}"
REPORTING_INTERVAL_SECONDS="${REPORTING_INTERVAL_SECONDS:=60}"
@@ -106,6 +108,8 @@ PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_wan_type=$DEFAULT_WAN_TYPE"
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_wan_name=$DEFAULT_WAN_NAME"
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_type=$DEFAULT_LAN_TYPE"
PROV_PROPS+=" -Dtip.wlan.ovsdb.wifi-iface.default_lan_name=$DEFAULT_LAN_NAME"
PROV_PROPS+=" -Dtip.wlan.defaultOffChannelReportingIntervalSeconds=$OFF_CHANNEL_REPORTING_INTERVAL_SECONDS"
PROV_PROPS+=" -Dtip.wlan.defaultReportingIntervalSeconds=$REPORTING_INTERVAL_SECONDS"
PROV_PROPS+=" -Dtip.wlan.ovsdb.autoProvisionedCustomerId=$AUTO_PROV_CUSTOMER_ID"

View File

@@ -10,6 +10,7 @@ import com.netflix.servo.tag.TagList;
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface.RowUpdateOperation;
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbClientInterface;
@@ -248,7 +249,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId);
if (opensyncAPConfig != null) {
ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig);
@@ -319,7 +320,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
extIntegrationInterface.clearEquipmentStatus(apId);
ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig);
ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig);
@@ -965,5 +966,23 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return "failed to change backup and/or primary channels for AP " + apId;
}
}
public String processCellSizeAttributesRequest(String apId, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) {
LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest for AP {}", apId);
try {
OvsdbSession session = ovsdbSessionMapInterface.getSession(apId);
OvsdbClient ovsdbClient = session.getOvsdbClient();
ovsdbDao.processCellSizeAttributesRequest(ovsdbClient, cellSizeAttributeMap);
LOG.info("TipWlanOvsdbClient::processCellSizeAttributesRequest change cellSizeAttributes for AP {}",
apId);
return " change cell size attributes for AP " + apId;
} catch (Exception e) {
LOG.error(
"TipWlanOvsdbClient::processCellSizeAttributesRequest failed to change cell size attributes for AP {}",
apId, e);
return "failed to change cell size attributes for AP " + apId;
}
}
}

View File

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState;
@@ -84,9 +85,17 @@ public class OvsdbDao extends OvsdbDaoBase {
ovsdbNetwork.configureInterfaces(ovsdbClient);
}
public void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
configureNtpServer(ovsdbClient,opensyncAPConfig);configureSyslog(ovsdbClient, opensyncAPConfig);
}
void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
ovsdbNodeConfig.configureNtpServer(ovsdbClient, opensyncAPConfig);
}
void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
ovsdbNodeConfig.configureSyslog(ovsdbClient, opensyncAPConfig);
}
public void configureRadsecRadiusAndRealm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
ovsdbRadiusProxyConfig.configureRadius(ovsdbClient, opensyncAPConfig);
@@ -180,6 +189,10 @@ public class OvsdbDao extends OvsdbDaoBase {
Map<RadioType, Integer> primaryChannelMap) {
ovsdbRrm.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap);
}
public void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributeMap) {
ovsdbRrm.processCellSizeAttributesRequest(ovsdbClient, cellSizeAttributeMap);
}
public void rebootOrResetAp(OvsdbClient ovsdbClient, String ovsdbAwlanApSwitchSoftwareBank) {
ovsdbNode.rebootOrResetAp(ovsdbClient, ovsdbAwlanApSwitchSoftwareBank);

View File

@@ -144,6 +144,12 @@ public class OvsdbDaoBase {
@org.springframework.beans.factory.annotation.Value("${tip.wlan.fileStoreDirectory:/tmp/tip-wlan-filestore}")
String fileStoreDirectoryName;
@org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultReportingIntervalSeconds:60}")
public int defaultReportingIntervalSeconds;
@org.springframework.beans.factory.annotation.Value("${tip.wlan.defaultOffChannelReportingIntervalSeconds:120}")
public int defaultOffChannelReportingIntervalSeconds;
public OvsdbDaoBase() {
}

View File

@@ -576,26 +576,25 @@ public class OvsdbHotspotConfig extends OvsdbDaoBase {
rowColumns.put("access_network_type", new Atom<>(hs2Profile.getAccessNetworkType().getId()));
}
}
// # format: <1-octet encoded value as hex str>
// # (ipv4_type & 0x3f) << 2 | (ipv6_type & 0x3) << 2
// # (ipv4_type & 0x3f) << 2 | (ipv6_type & 0x3)
// 0x3f = 63 in decimal
// 0x3 = 3 in decimal
if (PasspointIPv6AddressType.getByName(
hs2Profile.getIpAddressTypeAvailability()) != PasspointIPv6AddressType.UNSUPPORTED) {
int availability = PasspointIPv6AddressType
.getByName(hs2Profile.getIpAddressTypeAvailability()).getId();
String hexString = Integer.toHexString((availability & 3) << 2);
String hexString = String.format("%02x", (availability & 0x3));
rowColumns.put("ipaddr_type_availability", new Atom<>(hexString));
} else if (PasspointIPv4AddressType.getByName(
}else if (PasspointIPv4AddressType.getByName(
hs2Profile.getIpAddressTypeAvailability()) != PasspointIPv4AddressType.UNSUPPORTED) {
int availability = PasspointIPv4AddressType
.getByName(hs2Profile.getIpAddressTypeAvailability()).getId();
String hexString = Integer.toHexString((availability & 63) << 2);
String hexString = String.format("%02x", ((availability & 0x3f) << 2));
rowColumns.put("ipaddr_type_availability", new Atom<>(hexString));
}
}
Row row = new Row(rowColumns);
Insert newHs20Config = new Insert(hotspot20ConfigDbTable, row);
@@ -676,8 +675,8 @@ public class OvsdbHotspotConfig extends OvsdbDaoBase {
operations.add(newOsuProvider);
} else {
List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("server_uri", Function.EQUALS,
new Atom<>(providerProfile.getOsuServerUri())));
conditions.add(new Condition("osu_provider_name", Function.EQUALS,
new Atom<>(apOsuProviderName)));
Update updatedOsuProvider = new Update(hotspot20OsuProvidersDbTable, conditions, row);
operations.add(updatedOsuProvider);
}

View File

@@ -1,3 +1,4 @@
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import java.util.ArrayList;
@@ -15,6 +16,8 @@ import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
import com.vmware.ovsdb.exception.OvsdbClientException;
import com.vmware.ovsdb.protocol.operation.Delete;
import com.vmware.ovsdb.protocol.operation.Insert;
import com.vmware.ovsdb.protocol.operation.Operation;
import com.vmware.ovsdb.protocol.operation.Update;
import com.vmware.ovsdb.protocol.operation.notation.Atom;
@@ -23,6 +26,7 @@ import com.vmware.ovsdb.protocol.operation.notation.Function;
import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.service.OvsdbClient;
@Component
@@ -33,8 +37,7 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
public void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
try {
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile()
.getDetails();
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
if (apNetworkConfig.getNtpServer() == null || apNetworkConfig.getNtpServer().getValue() == null) {
LOG.info("Cannot configure NTP server to null value. {}", apNetworkConfig);
return;
@@ -43,8 +46,7 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("value", new Atom<>(apNetworkConfig.getNtpServer().getValue()));
List<Operation> operations = new ArrayList<>();
operations.add(new Update(nodeConfigTable,
List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp"))), new Row(updateColumns)));
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp"))), new Row(updateColumns)));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
@@ -54,4 +56,67 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
throw new RuntimeException(e);
}
}
public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
// /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4"
// The format is a colon delimited list. log_proto:log_ip:log_port:log_priority
try {
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
if (apNetworkConfig.getSyslogRelay() == null ) {
LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
return;
}
if (apNetworkConfig.getSyslogRelay().isEnabled()) {
if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null
|| apNetworkConfig.getSyslogRelay().getSeverity() == null) {
LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
return;
}
LOG.debug("configureSyslog remote_logging to {}", apNetworkConfig.getSyslogRelay());
Map<String, Value> columns = new HashMap<>();
columns.put("key", new Atom<>("remote"));
columns.put("module", new Atom<>("syslog"));
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String
.valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
columns.put("value", new Atom<>(delimitedValue));
List<Operation> operations = new ArrayList<>();
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns)));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
long numUpdates = 0;
for (OperationResult res : result) {
if (res instanceof UpdateResult) {
numUpdates += ((UpdateResult) res).getCount();
LOG.debug("configureSyslog update result {}", res);
}
}
if (numUpdates == 0) {
// no records existed, insert the row instead
operations.clear();
operations.add(new Insert(nodeConfigTable, new Row(columns)));
fResult = ovsdbClient.transact(ovsdbName, operations);
result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
LOG.debug("configureSyslog insert result {}", res);
}
}
} else {
LOG.debug("Disable remote_logging", apNetworkConfig.getSyslogRelay());
List<Operation> operations = new ArrayList<>();
operations.add(new Delete(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog")))));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
if (res instanceof UpdateResult) {
LOG.debug("configureSyslog disabled remote_logging {}", res);
}
}
}
} catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -2,7 +2,6 @@ package com.telecominfraproject.wlan.opensync.ovsdb.dao;
import com.telecominfraproject.wlan.core.model.equipment.ChannelBandwidth;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.SourceType;
import com.telecominfraproject.wlan.equipment.models.*;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.WifiRadioConfigInfo;
@@ -44,6 +43,9 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue;
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ",
@@ -53,11 +55,14 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
int txPower;
if (elementRadioConfig.getEirpTxPower().getSource() == SourceType.profile) {
txPower = rfElementConfig.getEirpTxPower();
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
int txPower = 0;
if (autoCellSizeSelection) {
if (elementRadioConfig.getEirpTxPower() != null) {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
} else {
txPower = elementRadioConfig.getEirpTxPower().getValue();
txPower = rfElementConfig.getEirpTxPower();
}
String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig);

View File

@@ -16,6 +16,7 @@ import com.telecominfraproject.wlan.core.model.equipment.RadioBestApSettings;
import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.SourceType;
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration;
import com.telecominfraproject.wlan.equipment.models.ManagementRate;
import com.telecominfraproject.wlan.equipment.models.MulticastRate;
@@ -71,21 +72,19 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int backupChannel = elementRadioConfig.getActiveBackupChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeBackupChannel {}",
autoChannelSelection, backupChannel);
AutoOrManualValue probeResponseThresholdDb = null;
AutoOrManualValue clientDisconnectThresholdDb = null;
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
Integer probeResponseThresholdDb = null;
Integer clientDisconnectThresholdDb = null;
if (elementRadioConfig.getProbeResponseThresholdDb() != null) {
probeResponseThresholdDb = getSourcedValue(elementRadioConfig.getProbeResponseThresholdDb().getSource(),
probeResponseThresholdDb = getSourcedValue(autoCellSizeSelection,
rfElementConfig.getProbeResponseThresholdDb(),
elementRadioConfig.getProbeResponseThresholdDb().getValue());
}
if (elementRadioConfig.getClientDisconnectThresholdDb() != null) {
clientDisconnectThresholdDb = getSourcedValue(
elementRadioConfig.getClientDisconnectThresholdDb().getSource(),
clientDisconnectThresholdDb = getSourcedValue(autoCellSizeSelection,
rfElementConfig.getClientDisconnectThresholdDb(),
elementRadioConfig.getClientDisconnectThresholdDb().getValue());
}
@@ -96,15 +95,13 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
RadioBestApSettings bestApSettings = null;
if (radioConfig != null) {
if (radioConfig.getMulticastRate() != null) {
multicastRate = radioConfig.getMulticastRate().getSource() == SourceType.profile
? rfElementConfig.getMulticastRate()
: radioConfig.getMulticastRate().getValue();
multicastRate = autoCellSizeSelection ?
radioConfig.getMulticastRate().getValue() : rfElementConfig.getMulticastRate();
}
if (radioConfig.getManagementRate() != null) {
managementRate = radioConfig.getManagementRate().getSource() == SourceType.profile
? rfElementConfig.getManagementRate()
: radioConfig.getManagementRate().getValue();
managementRate = autoCellSizeSelection ?
radioConfig.getManagementRate().getValue() : rfElementConfig.getManagementRate();
}
if (radioConfig.getBestApSettings() != null) {
@@ -114,43 +111,10 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
}
int multicastRateMbps = 0;
if (multicastRate != null) {
switch (multicastRate) {
case rate6mbps:
multicastRateMbps = 6;
break;
case rate9mbps:
multicastRateMbps = 9;
break;
case rate12mbps:
multicastRateMbps = 12;
break;
case rate18mbps:
multicastRateMbps = 18;
break;
case rate24mbps:
multicastRateMbps = 24;
break;
case rate36mbps:
multicastRateMbps = 36;
break;
case rate48mbps:
multicastRateMbps = 48;
break;
case rate54mbps:
multicastRateMbps = 54;
break;
case auto:
default:
multicastRateMbps = 0;
}
}
if (freqBand != null) {
try {
configureWifiRrm(ovsdbClient, freqBand, backupChannel, probeResponseThresholdDb,
clientDisconnectThresholdDb, managementRate, bestApSettings, multicastRateMbps);
clientDisconnectThresholdDb, managementRate, bestApSettings, multicastRate);
} catch (OvsdbClientException e) {
LOG.error("configureRrm failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
@@ -168,8 +132,8 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
ManagementRate managementRate, RadioBestApSettings bestApSettings, int multicastRate)
Integer probeResponseThreshold, Integer clientDisconnectThreshold,
ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
List<Operation> operations = new ArrayList<>();
@@ -178,18 +142,22 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
updateColumns.put("freq_band", new Atom<>(freqBand));
updateColumns.put("backup_channel", new Atom<>(backupChannel));
updateColumns.put("mcast_rate", new Atom<>(multicastRate));
if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateColumns.put("mcast_rate", new Atom<>(0));
} else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
updateColumns.put("mcast_rate", new Atom<>(multicastRate.getId()));
}
if (probeResponseThreshold == null || clientDisconnectThreshold.isAuto()) {
if (probeResponseThreshold == null) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
}
if (clientDisconnectThreshold == null) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
}
if (managementRate == null || managementRate == ManagementRate.auto) {
@@ -219,7 +187,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
LOG.debug("Provisioned rrm config with multicastRate {} Mbps for {}", multicastRate, freqBand);
for (OperationResult res : result) {
@@ -233,7 +201,6 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
LOG.error("configureWifiRrm error {}", (res));
throw new RuntimeException("configureWifiRrm " + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
}
}
}
@@ -245,6 +212,16 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
return AutoOrManualValue.createManualInstance(equipmentValue);
}
//For cell size related attributes, the “manual" mode is not supported any more,
//user can create a new RF profile with desired values to achieve it
int getSourcedValue(boolean autoCellSizeSelection, int profileValue, int equipmentValue) {
if (autoCellSizeSelection) {
return equipmentValue;
} else {
return profileValue;
}
}
void processNewChannelsRequest(OvsdbClient ovsdbClient, Map<RadioType, Integer> backupChannelMap,
Map<RadioType, Integer> primaryChannelMap) {
@@ -289,6 +266,88 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
}
}
void processCellSizeAttributesRequest(OvsdbClient ovsdbClient, Map<RadioType, CellSizeAttributes> cellSizeAttributesMap) {
LOG.info("OvsdbDao::processCellSizeAttributesRequest cellSizeAttributes {}", cellSizeAttributesMap);
try {
List<Operation> operations = new ArrayList<>();
cellSizeAttributesMap.entrySet().stream().forEach(c -> {
String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey());
List<Condition> conditions = new ArrayList<>();
conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand)));
Map<String, Value> updateRrmColumns = new HashMap<>();
CellSizeAttributes cellSizeAttributes = c.getValue();
MulticastRate multicastRate = cellSizeAttributes.getMulticastRate();
if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateRrmColumns.put("mcast_rate", new Atom<>(0));
} else {
updateRrmColumns.put("mcast_rate", new Atom<>(multicastRate.getId()));
}
Integer probeResponseThreshold = cellSizeAttributes.getProbeResponseThresholdDb();
if (probeResponseThreshold == null) {
updateRrmColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateRrmColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
}
Integer clientDisconnectThreshold = cellSizeAttributes.getClientDisconnectThresholdDb();
if (clientDisconnectThreshold == null) {
updateRrmColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateRrmColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
}
ManagementRate managementRate = cellSizeAttributes.getManagementRate();
if (managementRate == null || managementRate == ManagementRate.auto) {
updateRrmColumns.put("beacon_rate", new Atom<>(0));
} else {
updateRrmColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
}
Row rowRrm = new Row(updateRrmColumns);
operations.add(new Update(wifiRrmConfigDbTable, conditions, rowRrm));
Map<String, Value> updateRadioColumns = new HashMap<>();
Integer txPower = cellSizeAttributes.getEirpTxPowerDb();
if (txPower != null && txPower > 0) {
updateRadioColumns.put("tx_power", new Atom<>(txPower));
} else {
updateRadioColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
}
Row rowRadio = new Row(updateRadioColumns);
operations.add(new Update(wifiRadioConfigDbTable, conditions, rowRadio));
});
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) {
LOG.info("Op Result {}", res);
if (res instanceof InsertResult) {
LOG.info("processCellSizeAttributesRequest insert new row result {}", (res));
// for insert, make sure it is actually in the table
confirmRowExistsInTable(ovsdbClient, ((InsertResult) res).getUuid(), wifiRrmConfigDbTable);
} else if (res instanceof ErrorResult) {
LOG.error("processCellSizeAttributesRequest error {}", (res));
throw new RuntimeException("processCellSizeAttributesRequest " + ((ErrorResult) res).getError() +
" " + ((ErrorResult) res).getDetails());
}
}
LOG.info("Updated ovsdb config for cell size attributes.");
} catch (ExecutionException e) {
LOG.error("Error in processCellSizeAttributesRequest", e);
} catch (OvsdbClientException | TimeoutException | InterruptedException e) {
LOG.error("Error in processCellSizeAttributesRequest", e);
throw new RuntimeException(e);
}
}
void removeWifiRrm(OvsdbClient ovsdbClient) {
try {

View File

@@ -106,7 +106,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("reporting_interval", new Atom<>(60));
updateColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
updateColumns.put("radio_type", new Atom<>("2.4G"));
updateColumns.put("stats_type", new Atom<>("network_probe"));
@@ -197,7 +197,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
List<Operation> operations = new ArrayList<>();
Map<String, Value> rowColumns = new HashMap<>();
rowColumns.put("radio_type", new Atom<>("2.4G"));
rowColumns.put("reporting_interval", new Atom<>(60));
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("stats_type", new Atom<>("video_voice"));
@@ -244,7 +244,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
//
Map<String, Value> rowColumns = new HashMap<>();
rowColumns.put("radio_type", new Atom<>(rc.freqBand));
rowColumns.put("reporting_interval", new Atom<>(60));
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("stats_type", new Atom<>("client"));
@@ -277,7 +277,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("channel_list", channels);
rowColumns.put("radio_type", new Atom<>(rc.freqBand));
rowColumns.put("reporting_interval", new Atom<>(60));
rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("off-chan"));
@@ -296,7 +296,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
//
Map<String, Value> rowColumns = new HashMap<>();
rowColumns.put("radio_type", new Atom<>(rc.freqBand));
rowColumns.put("reporting_interval", new Atom<>(60));
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("on-chan"));
@@ -321,7 +321,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
Map<String, Value> rowColumns = new HashMap<>();
rowColumns.put("radio_type", new Atom<>(rc.freqBand));
rowColumns.put("reporting_interval", new Atom<>(60));
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("stats_type", new Atom<>("survey"));
@@ -350,7 +350,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("channel_list", channels);
rowColumns.put("radio_type", new Atom<>(rc.freqBand));
rowColumns.put("reporting_interval", new Atom<>(120));
rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds));
rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("stats_type", new Atom<>("survey"));
rowColumns.put("survey_type", new Atom<>("off-chan"));