From 9b0dcd73f530b4292694cb216ce56e0db72022de Mon Sep 17 00:00:00 2001 From: Mike Hansen Date: Mon, 1 Jun 2020 13:25:28 -0400 Subject: [PATCH] SSID Config Support, Support Radio and VIF IF naming (removed static) --- ...yncProcess (local, KDC certs) cloud.launch | 2 +- .../app/run.sh | 22 +- .../src/main/docker/app/run.sh | 8 + .../opensync/ovsdb/ConnectusOvsdbClient.java | 13 +- .../wlan/opensync/ovsdb/dao/OvsdbDao.java | 192 +++++++++++------- 5 files changed, 161 insertions(+), 76 deletions(-) diff --git a/opensync-gateway-cloud-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) cloud.launch b/opensync-gateway-cloud-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) cloud.launch index 65b0ffc..2029a41 100644 --- a/opensync-gateway-cloud-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) cloud.launch +++ b/opensync-gateway-cloud-process/src/main/resources/launchers/OpenSyncProcess (local, KDC certs) cloud.launch @@ -20,5 +20,5 @@ - + 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 3cc97f2..1ed5095 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 @@ -35,7 +35,18 @@ OVSDB_EQUIPMENT_CONFIG_FILE="${OVSDB_EQUIPMENT_CONFIG_FILE:=/app/opensync/Equipm 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}" - +OVSDB_IF_DEFAULT_RADIO_0="${OVSDB_IF_DEFAULT_RADIO_0:=home-ap-u50}" +echo $OVSDB_IF_DEFAULT_RADIO_0 +OVSDB_IF_DEFAULT_RADIO_1="${OVSDB_IF_DEFAULT_RADIO_1:=home-ap-24}" +echo $OVSDB_IF_DEFAULT_RADIO_1 +OVSDB_IF_DEFAULT_RADIO_2="${OVSDB_IF_DEFAULT_RADIO_2:=home-ap-l50}" +echo $OVSDB_IF_DEFAULT_RADIO_2 +OVSDB_DEVICE_RADIO_0="${OVSDB_DEVICE_RADIO_0:=wifi2}" +echo $OVSDB_DEVICE_RADIO_0 +OVSDB_DEVICE_RADIO_1="${OVSDB_DEVICE_RADIO_1:=wifi0}" +echo $OVSDB_DEVICE_RADIO_1 +OVSDB_DEVICE_RADIO_2="${OVSDB_DEVICE_RADIO_2:=wifi1}" +echo $OVSDB_DEVICE_RADIO_2 echo Reading AP configuration from $OVSDB_CONFIG_FILE @@ -112,6 +123,15 @@ OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.customerEquipmentFileName=$OVSDB_EQU 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" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-iface.default_radio0=$OVSDB_IF_DEFAULT_RADIO_0" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-iface.default_radio1=$OVSDB_IF_DEFAULT_RADIO_1" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-iface.default_radio2=$OVSDB_IF_DEFAULT_RADIO_2" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1" +OVSDB_PROPS="$OVSDB_PROPS -Dconnectus.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2" + +echo OVSDB_PROPS $OVSDB_PROPS + MQTT_PROPS=" " MQTT_PROPS="$MQTT_PROPS -Dconnectus.mqttBroker.address=$MQTT_BROKER_HOST" 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 47c527a..edfc291 100755 --- a/opensync-gateway-static-docker/src/main/docker/app/run.sh +++ b/opensync-gateway-static-docker/src/main/docker/app/run.sh @@ -23,6 +23,14 @@ OVSDB_PROPS+=" -Dconnectus.ovsdb.customerEquipmentFileName=$OVSDB_EQUIPMENT_CONF 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" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-iface.default_radio0=$OVSDB_IF_DEFAULT_RADIO_0" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-iface.default_radio1=$OVSDB_IF_DEFAULT_RADIO_1" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-iface.default_radio2=$OVSDB_IF_DEFAULT_RADIO_2" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-device.radio0=$OVSDB_DEVICE_RADIO_0" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-device.radio1=$OVSDB_DEVICE_RADIO_1" +OVSDB_PROPS+="-Dconnectus.ovsdb.wifi-device.radio2=$OVSDB_DEVICE_RADIO_2" + +echo OVSDB_PROPS $OVSDB_PROPS MQTT_PROPS=" " MQTT_PROPS+=" -Dconnectus.mqttBroker.address=tip-wlan-opensync-mqtt-broker" 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 eab0662..1ae5186 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 @@ -52,7 +52,7 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { @org.springframework.beans.factory.annotation.Value("${connectus.manager.collectionIntervalSec.deviceStats:10}") private long collectionIntervalSecDeviceStats; - + @Autowired private SslContext sslContext; @@ -98,6 +98,7 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { String key = clientCn + "_" + connectNodeInfo.serialNumber; ConnectusOvsdbClient.this.ovsdbSessionMapInterface.newSession(key, ovsdbClient); extIntegrationInterface.apConnected(key, connectNodeInfo); + monitorOvsdbStateTables(ovsdbClient, key); // push configuration to AP connectNodeInfo = processConnectRequest(ovsdbClient, clientCn, connectNodeInfo); @@ -106,7 +107,6 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { LOG.info("ovsdbClient connectedClients = {}", ConnectusOvsdbClient.this.ovsdbSessionMapInterface.getNumSessions()); - monitorOvsdbStateTables(ovsdbClient, key); } catch (Exception e) { LOG.error("ovsdbClient error", e); @@ -191,7 +191,12 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); } - ovsdbDao.provisionBridgePortInterface(ovsdbClient); + try { + ovsdbDao.provisionBridgePortInterface(ovsdbClient); + } catch (Exception e) { + // TODO: for some AP configurations this 'may' not be necessary. + LOG.warn("Could not provision Bridge->Port->Interface mapping.", e); + } ovsdbDao.removeAllSsids(ovsdbClient); @@ -200,7 +205,7 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig); } - ovsdbDao.configureWifiInet(ovsdbClient); +// ovsdbDao.configureWifiInet(ovsdbClient); LOG.debug("Client connect Done"); return connectNodeInfo; 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 6b6b498..d9175d8 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 @@ -13,8 +13,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.checkerframework.checker.units.qual.K; -import org.elasticsearch.common.recycler.Recycler.V; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -84,6 +82,20 @@ public class OvsdbDao { @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.timeoutSec:30}") private int ovsdbTimeoutSec; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-iface.default_radio1:home-ap-24}") + public String ifName2pt4GHz; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-iface.default_radio2:home-ap-l50}") + public String ifName5GHzL; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-iface.default_radio0:home-ap-u50}") + public String ifName5GHzU; + + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-device.radio0:wifi2}") + public String radioName5GHzU; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-device.radio2:wifi1}") + public String radioName5GHzL; + @org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.wifi-device.radio1:wifi0}") + public String radioName2pt4GHz; + public static final String ovsdbName = "Open_vSwitch"; public static final String awlanNodeDbTable = "AWLAN_Node"; public static final String wifiStatsConfigDbTable = "Wifi_Stats_Config"; @@ -679,7 +691,7 @@ public class OvsdbDao { 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.vifRadioIdx = row.getIntegerColumn("vif_radio_idx").intValue(); wifiVifConfigInfo.security = row.getMapColumn("security"); if (row.getColumns().get("vlan_id") != null && row.getColumns().get("vlan_id").getClass() @@ -821,6 +833,8 @@ public class OvsdbDao { Map provisionedBridges) throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { + + LOG.debug("InterfaceName {} BridgeName {} InterfaceType {}", interfaceName, bridgeName, interfaceType); if (!provisionedInterfaces.containsKey(interfaceName)) { // Create this interface and link it to the port and the bridge List operations = new ArrayList<>(); @@ -984,9 +998,9 @@ public class OvsdbDao { } } - public static final String homeAp24 = "home-ap-24"; - public static final String homeApL50 = "home-ap-l50"; - public static final String homeApU50 = "home-ap-u50"; +// public static final String homeAp24 = "home-ap-24"; +// public static final String homeApL50 = "home-ap-l50"; +// public static final String homeApU50 = "home-ap-u50"; public static final String brHome = "br-home"; public static final String brWan = "br-wan"; @@ -1017,13 +1031,11 @@ public class OvsdbDao { provisionSingleBridgePortInterface(ovsdbClient, patchW2h, brWan, "patch", patchW2hOptions, provisionedInterfaces, provisionedPorts, provisionedBridges); - provisionSingleBridgePortInterface(ovsdbClient, homeApU50, brHome, null, null, provisionedInterfaces, + provisionSingleBridgePortInterface(ovsdbClient, ifName5GHzU, brHome, "vif", null, provisionedInterfaces, provisionedPorts, provisionedBridges); - - provisionSingleBridgePortInterface(ovsdbClient, homeApL50, brHome, null, null, provisionedInterfaces, + provisionSingleBridgePortInterface(ovsdbClient, ifName5GHzL, brHome, "vif", null, provisionedInterfaces, provisionedPorts, provisionedBridges); - - provisionSingleBridgePortInterface(ovsdbClient, homeAp24, brHome, null, null, provisionedInterfaces, + provisionSingleBridgePortInterface(ovsdbClient, ifName2pt4GHz, brHome, "vif", null, provisionedInterfaces, provisionedPorts, provisionedBridges); } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { @@ -1152,27 +1164,34 @@ public class OvsdbDao { String configName = null; switch (radioType) { case is2dot4GHz: - configName = "wifi0"; + configName = radioName2pt4GHz; break; case is5GHz: + // 802.11h dfs (Dynamic Frequency Selection) aka military and weather radar avoidance protocol + // Must not be disabled (by law) + // NA for 2.4GHz hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_usenol", "1"); - configName = "wifi1"; + configName = radioName5GHzU; break; - case is5GHzL: + // 802.11h dfs (Dynamic Frequency Selection) aka military and weather radar avoidance protocol + // Must not be disabled (by law) + // NA for 2.4GHz hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_usenol", "1"); - configName = "wifi1"; + configName = radioName5GHzL; break; - case is5GHzU: + // 802.11h dfs (Dynamic Frequency Selection) aka military and weather radar avoidance protocol + // Must not be disabled (by law) + // NA for 2.4GHz hwConfig.put("dfs_enable", "1"); hwConfig.put("dfs_ignorecac", "0"); hwConfig.put("dfs_usenol", "1"); - configName = "wifi2"; + configName = radioName5GHzU; break; default: // don't know this interface continue; @@ -1691,8 +1710,9 @@ public class OvsdbDao { public void configureSingleSsid(OvsdbClient ovsdbClient, String bridge, String ifName, String ssid, boolean ssidBroadcast, Map security, Map provisionedWifiRadioConfigs, String radioIfName, int vlanId, - int vifRadioIdx, boolean rrmEnabled, String minHwMode, boolean enabled, int keyRefresh, - boolean uapsdEnabled, boolean apBridge, NetworkForwardMode networkForwardMode, String gateway, String inet, Map dns, String ipAssignScheme) { + boolean rrmEnabled, String minHwMode, boolean enabled, int keyRefresh, boolean uapsdEnabled, + boolean apBridge, NetworkForwardMode networkForwardMode, String gateway, String inet, + Map dns, String ipAssignScheme) { List operations = new ArrayList<>(); Map updateColumns = new HashMap<>(); @@ -1708,7 +1728,7 @@ public class OvsdbDao { 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("vif_radio_idx", new Atom(vifRadioIdx)); updateColumns.put("min_hw_mode", new Atom<>(minHwMode)); updateColumns.put("vlan_id", new Atom(vlanId)); updateColumns.put("group_rekey", new Atom(keyRefresh)); @@ -1729,6 +1749,7 @@ public class OvsdbDao { LOG.debug("Provisioned SSID {} on {}", ssid, ifName); Uuid vifConfigUuid = null; + String vifIfName = null; for (OperationResult res : result) { LOG.debug("Op Result {}", res); if (res instanceof InsertResult) { @@ -1777,12 +1798,15 @@ public class OvsdbDao { Map inetConfigs = getProvisionedWifiInetConfigs(ovsdbClient); if (inetConfigs.containsKey(ifName)) updateWifiInetConfig(ovsdbClient, vlanId, ifName, enabled, - (networkForwardMode == NetworkForwardMode.NAT), "vif", gateway, inet, dns,ipAssignScheme); + (networkForwardMode == NetworkForwardMode.NAT), "vif", gateway, inet, dns, ipAssignScheme, + vifConfigUuid); else // do nothing for now LOG.debug("No corresponding WifiInetConfig for this Interface"); // TODO: should wait for the default config to take place - // insertWifiInetConfigForVif(ovsdbClient, vlanId, ifName, enabled); + insertWifiInetConfigForVif(ovsdbClient, vlanId, ifName, enabled, + (networkForwardMode == NetworkForwardMode.NAT), "vif", gateway, inet, dns, ipAssignScheme, + vifConfigUuid); LOG.info("Provisioned SSID {} on interface {} / {}", ssid, ifName, radioIfName); @@ -1825,14 +1849,16 @@ public class OvsdbDao { // ignored String gateway = null; String inet = null; - Map dns = null; + Map dns = null; if (apElementConfig.getStaticIP() != null) { ipAssignScheme = "static"; inet = apElementConfig.getStaticIP().getHostAddress(); gateway = apElementConfig.getStaticIpGw().getHostAddress(); - dns = new HashMap(); - dns.put(apElementConfig.getStaticDnsIp1().getHostName(), apElementConfig.getStaticDnsIp1().getHostAddress()); - dns.put(apElementConfig.getStaticDnsIp2().getHostName(), apElementConfig.getStaticDnsIp2().getHostAddress()); + dns = new HashMap(); + dns.put(apElementConfig.getStaticDnsIp1().getHostName(), + apElementConfig.getStaticDnsIp1().getHostAddress()); + dns.put(apElementConfig.getStaticDnsIp2().getHostName(), + apElementConfig.getStaticDnsIp2().getHostAddress()); } else if (apElementConfig.getGettingIP().equals(GettingIP.dhcp) || apElementConfig.getGettingDNS().equals(GettingDNS.dhcp)) { ipAssignScheme = "dhcp"; @@ -1867,33 +1893,33 @@ public class OvsdbDao { String ifName = null; String radioIfName = null; - int vifRadioIdx = -1; +// int vifRadioIdx = -1; if (radioType == RadioType.is2dot4GHz) { - ifName = homeAp24; - radioIfName = "wifi0"; - vifRadioIdx = 1; + ifName = ifName2pt4GHz; + radioIfName = radioName2pt4GHz; +// vifRadioIdx = 1; } else if (radioType == RadioType.is5GHzL) { - ifName = homeApL50; - radioIfName = "wifi1"; - vifRadioIdx = 2; + ifName = ifName5GHzL; + radioIfName = radioName5GHzL; +// vifRadioIdx = 2; } else if (radioType == RadioType.is5GHzU) { - ifName = homeApU50; - radioIfName = "wifi2"; - vifRadioIdx = 3; + ifName = ifName5GHzU; + radioIfName = radioName5GHzU; +// vifRadioIdx = 3; } - if (vifRadioIdx == -1) { - LOG.debug("Cannot determine vif radio idx radioType {} skipping", radioType); - continue; - } +// 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, - rrmEnabled, minHwMode, enabled, keyRefresh, uapsdEnabled, apBridge, - ssidConfig.getForwardMode(), gateway, inet, dns, ipAssignScheme); + provisionedWifiRadioConfigs, radioIfName, ssidConfig.getVlanId(), rrmEnabled, minHwMode, + enabled, keyRefresh, uapsdEnabled, apBridge, ssidConfig.getForwardMode(), gateway, inet, + dns, ipAssignScheme); } catch (IllegalStateException e) { // could not provision this SSID, but still can go on @@ -1906,26 +1932,53 @@ public class OvsdbDao { } - private void insertWifiInetConfigForVif(OvsdbClient ovsdbClient, int vlanId, String ifName, boolean enabled) { + private void updateWifiInetConfig(OvsdbClient ovsdbClient, int vlanId, String ifName, boolean enabled, + boolean isNAT, String ifType, String gateway, String inet, Map dns, String ipAssignScheme, + Uuid vifConfigUuid) { List operations = new ArrayList<>(); Map updateColumns = new HashMap<>(); + List conditions = new ArrayList<>(); + conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); 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(enabled)); +// dhcpd updateColumns.put("if_name", new Atom(ifName)); - updateColumns.put("if_type", new Atom<>("vif")); - updateColumns.put("ip_assign_scheme", new Atom<>("none")); + updateColumns.put("if_type", new Atom(ifType)); + updateColumns.put("if_uuid", new Atom(vifConfigUuid.toString())); + updateColumns.put("enabled", new Atom(enabled)); + updateColumns.put("NAT", new Atom(isNAT)); + +// mtu // specified in interface, should take that value when implemented + updateColumns.put("mtu", new Atom<>(1500)); updateColumns.put("network", new Atom<>(true)); - updateColumns.put("vlan_id", new Atom(vlanId)); + + updateColumns.put("ip_assign_scheme", new Atom<>(ipAssignScheme)); + + if (ipAssignScheme.equals("static")) { + updateColumns.put("dns", com.vmware.ovsdb.protocol.operation.notation.Map.of(dns)); + updateColumns.put("inet_addr", new Atom(inet)); + updateColumns.put("gateway", new Atom(gateway)); +// netmask +// broadcast + } + if (ipAssignScheme.equals("dhcp")) { + updateColumns.put("dhcp_sniff", new Atom(true)); + } else { + updateColumns.put("dhcp_sniff", new Atom(false)); + } + + if (ifType.equals("vlan")) { + updateColumns.put("vlan_id", new Atom(vlanId)); + } else { + updateColumns.put("vlan_id", new com.vmware.ovsdb.protocol.operation.notation.Set()); + } Row row = new Row(updateColumns); - operations.add(new Insert(wifiInetConfigDbTable, row)); + operations.add(new Update(wifiInetConfigDbTable, conditions, row)); CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); @@ -1943,27 +1996,28 @@ public class OvsdbDao { } - private void updateWifiInetConfig(OvsdbClient ovsdbClient, int vlanId, String ifName, boolean enabled, - boolean isNAT, String ifType, String gateway, String inet, Map dns, String ipAssignScheme) { + private void insertWifiInetConfigForVif(OvsdbClient ovsdbClient, int vlanId, String ifName, boolean enabled, + boolean isNAT, String ifType, String gateway, String inet, Map dns, String ipAssignScheme, + Uuid vifConfigUuid) { List operations = new ArrayList<>(); Map updateColumns = new HashMap<>(); - List conditions = new ArrayList<>(); - conditions.add(new Condition("if_name", Function.EQUALS, new Atom<>(ifName))); 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 // dhcpd + updateColumns.put("if_name", new Atom(ifName)); updateColumns.put("if_type", new Atom(ifType)); + updateColumns.put("if_uuid", new Atom(vifConfigUuid.toString())); updateColumns.put("enabled", new Atom(enabled)); updateColumns.put("NAT", new Atom(isNAT)); // mtu // specified in interface, should take that value when implemented updateColumns.put("mtu", new Atom<>(1500)); updateColumns.put("network", new Atom<>(true)); - + updateColumns.put("ip_assign_scheme", new Atom<>(ipAssignScheme)); if (ipAssignScheme.equals("static")) { @@ -1978,15 +2032,15 @@ public class OvsdbDao { } else { updateColumns.put("dhcp_sniff", new Atom(false)); } - + if (ifType.equals("vlan")) { - updateColumns.put("vlan_id",new Atom(vlanId)); + updateColumns.put("vlan_id", new Atom(vlanId)); } else { - updateColumns.put("vlan_id",new com.vmware.ovsdb.protocol.operation.notation.Set()); + updateColumns.put("vlan_id", new com.vmware.ovsdb.protocol.operation.notation.Set()); } Row row = new Row(updateColumns); - operations.add(new Update(wifiInetConfigDbTable, conditions, row)); + operations.add(new Insert(wifiInetConfigDbTable, row)); CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); @@ -2075,17 +2129,17 @@ public class OvsdbDao { Map provisionedWifiInetConfigs = getProvisionedWifiInetConfigs(ovsdbClient); LOG.debug("Existing WifiInetConfigs: {}", provisionedWifiInetConfigs.keySet()); - String ifName = homeAp24; + String ifName = ifName2pt4GHz; if (!provisionedWifiInetConfigs.containsKey(ifName)) { configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); } - ifName = homeApL50; + ifName = ifName5GHzL; if (!provisionedWifiInetConfigs.containsKey(ifName)) { configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); } - ifName = homeApU50; + ifName = ifName5GHzU; if (!provisionedWifiInetConfigs.containsKey(ifName)) { configureWifiInet(ovsdbClient, provisionedWifiInetConfigs, ifName); } @@ -2098,8 +2152,6 @@ public class OvsdbDao { public void configureStats(OvsdbClient ovsdbClient) { - Map provisionedWifiStatsConfigs = getProvisionedWifiStatsConfigs(ovsdbClient); - try { List operations = new ArrayList<>(); Map updateColumns = new HashMap<>(); @@ -2111,15 +2163,15 @@ public class OvsdbDao { com.vmware.ovsdb.protocol.operation.notation.Map thresholds = com.vmware.ovsdb.protocol.operation.notation.Map .of(thresholdMap); - provisionWifiStatsConfigDevice(provisionedWifiStatsConfigs, operations, updateColumns); + provisionWifiStatsConfigDevice(getProvisionedWifiStatsConfigs(ovsdbClient), operations, updateColumns); - provisionWifiStatsConfigSurvey(provisionedWifiStatsConfigs, operations, thresholds); + provisionWifiStatsConfigSurvey(getProvisionedWifiStatsConfigs(ovsdbClient), operations, thresholds); - provisionWifiStatsConfigNeighbor(provisionedWifiStatsConfigs, operations); + provisionWifiStatsConfigNeighbor(getProvisionedWifiStatsConfigs(ovsdbClient), operations); - provisionWifiStatsConfigClient(provisionedWifiStatsConfigs, operations); + provisionWifiStatsConfigClient(getProvisionedWifiStatsConfigs(ovsdbClient), operations); - provisionWifiStatsRssi(provisionedWifiStatsConfigs, operations); + provisionWifiStatsRssi(getProvisionedWifiStatsConfigs(ovsdbClient), operations); if (!operations.isEmpty()) { CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations);