mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2026-01-27 10:22:51 +00:00
WIFI-2080 Add support for cell size attributes lightweight provisioning changes to AP
This commit is contained in:
@@ -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.CEGWCellSizeRequest;
|
||||
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 CellSizeRequest:
|
||||
ret.add(sendCellSizeRequest(session, (CEGWCellSizeRequest) 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, CEGWCellSizeRequest 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 CEGWCellSizeRequest) {
|
||||
CEGWCellSizeRequest request = (CEGWCellSizeRequest) command;
|
||||
Map<RadioType, CellSizeAttributes> cellSizeAttributeMap = request.getCellSizeAttributesMap();
|
||||
|
||||
String resultDetails = tipwlanOvsdbClient.processCellSizeAttributesRequest(inventoryId, cellSizeAttributeMap);
|
||||
response.setResultDetail(resultDetails);
|
||||
|
||||
} else if (command instanceof CEGWFirmwareDownloadRequest) {
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -188,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);
|
||||
|
||||
@@ -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;
|
||||
@@ -114,43 +115,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);
|
||||
@@ -169,7 +137,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
|
||||
|
||||
void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
|
||||
AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold,
|
||||
ManagementRate managementRate, RadioBestApSettings bestApSettings, int multicastRate)
|
||||
ManagementRate managementRate, RadioBestApSettings bestApSettings, MulticastRate multicastRate)
|
||||
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
|
||||
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
@@ -178,7 +146,11 @@ 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 (multicastRate == null || multicastRate == MulticastRate.auto) {
|
||||
updateColumns.put("mcast_rate", new Atom<>(0));
|
||||
} else {
|
||||
updateColumns.put("mcast_rate", new Atom<>(managementRate.getId()));
|
||||
}
|
||||
|
||||
if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
|
||||
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
|
||||
@@ -186,7 +158,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
|
||||
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
|
||||
}
|
||||
|
||||
if (probeResponseThreshold == null || clientDisconnectThreshold.isAuto()) {
|
||||
if (clientDisconnectThreshold == null || clientDisconnectThreshold.isAuto()) {
|
||||
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
|
||||
} else {
|
||||
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
|
||||
@@ -219,7 +191,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 +205,6 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
|
||||
LOG.error("configureWifiRrm error {}", (res));
|
||||
throw new RuntimeException("configureWifiRrm " + ((ErrorResult) res).getError() + " " + ((ErrorResult) res).getDetails());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,6 +260,87 @@ 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 > 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("configureWifiRrm error {}", (res));
|
||||
throw new RuntimeException("configureWifiRrm " + ((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 {
|
||||
|
||||
Reference in New Issue
Block a user