From cea96f49f351dda44c4f7de284b5389fcd00ede5 Mon Sep 17 00:00:00 2001 From: Mike Hansen Date: Wed, 27 Jan 2021 17:11:05 -0500 Subject: [PATCH] WIFI-1365: Add OSGW support to populate channelNumber and DFS in ElementRadioConfiguration->ChannelPowerLevel List --- .../OpensyncExternalIntegrationCloud.java | 69 ++++++++++++++++++- .../models/OpensyncAPRadioState.java | 3 + .../wlan/opensync/ovsdb/dao/OvsdbDao.java | 5 ++ 3 files changed, 75 insertions(+), 2 deletions(-) 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 3956a88..061aaca 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 @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -42,6 +43,7 @@ import com.telecominfraproject.wlan.customer.service.CustomerServiceInterface; import com.telecominfraproject.wlan.datastore.exceptions.DsConcurrentModificationException; import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface; import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration; +import com.telecominfraproject.wlan.equipment.models.ChannelPowerLevel; import com.telecominfraproject.wlan.equipment.models.ElementRadioConfiguration; import com.telecominfraproject.wlan.equipment.models.Equipment; import com.telecominfraproject.wlan.equipment.models.RadioConfiguration; @@ -366,7 +368,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra // remove radio configs from the DB that are no longer // present in the AP but still exist in DB - + for (RadioType radio : new ArrayList<>(advancedRadioMap.keySet())) { if (!radiosFromAp.contains(radio)) { advancedRadioMap.remove(radio); @@ -847,7 +849,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra } Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); if (ce != null) { - List deletedStatuses = statusServiceInterface.deleteOnEquipmentDisconnect(ce.getCustomerId(), ce.getId()); + List deletedStatuses = statusServiceInterface.deleteOnEquipmentDisconnect(ce.getCustomerId(), + ce.getId()); LOG.info("AP {} disconnected, deleted status records {}", apId, deletedStatuses); updateApDisconnectedStatus(apId, ce); disconnectClients(ce); @@ -1239,6 +1242,68 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra } + if (radioState.getChannels() != null) { + + if (apElementConfiguration.getRadioMap().containsKey(radioState.getFreqBand()) + && apElementConfiguration.getRadioMap().get(radioState.getFreqBand()) != null) { + + // private Set allowedChannelsPowerLevels + // = new HashSet<>(); + + Set channelPowerLevels = new HashSet<>(); + + radioState.getChannels().entrySet().stream().forEach(k -> { + if (k.getKey().equals("allowed") || k.getKey().equals("radar_detection")) { + + String[] channelNumbers = k.getValue().split(","); + for (String channel : channelNumbers) { + if (channel != null) { + ChannelPowerLevel cpl = new ChannelPowerLevel(); + cpl.setChannelNumber(Integer.parseInt(channel)); + cpl.setDfs(k.getKey().equals("radar_detection")); + if (radioState.getChannelMode() != null && radioState.getChannelMode().equals("auto")) { + cpl.setChannelWidth(-1); + } else { + switch (radioState.getHtMode()) { + case "HT20": + cpl.setChannelWidth(20); + break; + case "HT40": + case "HT40-": + case "HT40+": + cpl.setChannelWidth(40); + break; + case "HT80": + cpl.setChannelWidth(80); + break; + case "HT160": + cpl.setChannelWidth(160); + break; + default: + LOG.warn("Unrecognized channel HtMode {}", radioState.getHtMode()); + } + } + cpl.setPowerLevel(radioState.getTxPower()); + channelPowerLevels.add(cpl); + } + } + + } + }); + + if (!Objects.deepEquals(apElementConfiguration.getRadioMap().get(radioState.getFreqBand()) + .getAllowedChannelsPowerLevels(), channelPowerLevels)) { + apElementConfiguration.getRadioMap().get(radioState.getFreqBand()) + .setAllowedChannelsPowerLevels(channelPowerLevels); + } + apElementConfiguration.getRadioMap().get(radioState.getFreqBand()) + .setAllowedChannels(new ArrayList<>(radioState.getAllowedChannels())); + + LOG.debug("Updated AllowedChannels from Wifi_Radio_State table change for AP {}", apId); + } + + } + if (radioState.getTxPower() > 0) { if (apElementConfiguration.getRadioMap().containsKey(radioState.getFreqBand()) && apElementConfiguration.getRadioMap().get(radioState.getFreqBand()) != null) { diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioState.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioState.java index f96a315..75aa5a3 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioState.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAPRadioState.java @@ -307,4 +307,7 @@ public class OpensyncAPRadioState extends BaseJsonModel { this.version = version; } + + + } 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 75eb381..c8cca05 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 @@ -2174,6 +2174,11 @@ public class OvsdbDao { } tableState.setAllowedChannels(allowed); } + if (map.get("channels") != null) { + + Map channels = row.getMapColumn("channels"); + tableState.setChannels(channels); + } Set vifStates = row.getSetColumn("vif_states"); tableState.setVifStates(vifStates);