TW-208: Notified Table Status changes to ExternalInterfaceKDC

This commit is contained in:
Mike Hansen
2020-03-30 20:55:38 -04:00
parent 03e627fb26
commit fde8eabf91
4 changed files with 169 additions and 133 deletions

View File

@@ -2,6 +2,7 @@ package com.telecominfraproject.wlan.opensync.ovsdb;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
@@ -26,7 +27,6 @@ import com.vmware.ovsdb.callback.MonitorCallback;
import com.vmware.ovsdb.protocol.methods.RowUpdate;
import com.vmware.ovsdb.protocol.methods.TableUpdates;
import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.service.OvsdbClient;
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
@@ -66,15 +66,6 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
public void listenForConnections() {
// This class is only used here, therefore changed it back to an inner
// class,
// removed the package level class.
// All calling classes related to OVSDB are calling the MonitorCallback
// interface, so the implementation can remain
// hidden. This also gives handy access to the Autowired instances in
// the
// container class.
class ConnectusMonitorCallback implements MonitorCallback {
private String connectedClientId;
@@ -88,59 +79,56 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
Set<String> tableNames = tableUpdates.getTableUpdates().keySet();
for (String name : tableNames) {
LOG.trace("Receive update for table {}", name);
if (name.equals(OvsdbDao.wifiAssociatedClientsDbTable)) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
for (UUID id : updates.keySet()) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
Row row = updates.get(id).getNew();
for (UUID id : updates.keySet()) {
LOG.trace("Receive row update for uuid {}", id);
RowUpdate rowUpdate = updates.get(id);
Row newRow = rowUpdate.getNew();
if (newRow != null) {
Set<String> newRowColumns = newRow.getColumns().keySet();
Row oldRow = rowUpdate.getOld();
for (String column : newRowColumns) {
Value oldVal = null;
if (oldRow != null && oldRow.getColumns().containsKey(column))
oldVal = oldRow.getColumns().get(column);
Value newVal = newRow.getColumns().get(column);
}
if (row != null)
extIntegrationInterface.handleClientsChanged(row.getColumns(), connectedClientId);
}
} else if (name.equals(OvsdbDao.awlanNodeDbTable)) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
for (UUID id : updates.keySet()) {
Row row = updates.get(id).getNew();
if (row != null)
extIntegrationInterface.awlanChanged(row.getColumns(), connectedClientId);
}
} else if (name.equals(OvsdbDao.wifiVifStateDbTable)) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
for (UUID id : updates.keySet()) {
Row row = updates.get(id).getNew();
if (row != null)
extIntegrationInterface.wirelessStatusChanged(row.getColumns(), connectedClientId);
}
} else if (name.equals(OvsdbDao.wifiInetStateDbTable)) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
for (UUID id : updates.keySet()) {
Row row = updates.get(id).getNew();
if (row != null)
extIntegrationInterface.networkStatusChanged(row.getColumns(), connectedClientId);
}
} else if (name.equals(OvsdbDao.wifiRadioStateDbTable)) {
Map<UUID, RowUpdate> updates = tableUpdates.getTableUpdates().get(name).getRowUpdates();
for (UUID id : updates.keySet()) {
Row row = updates.get(id).getNew();
if (row != null)
extIntegrationInterface.deviceStatusChanged(row.getColumns(), connectedClientId);
}
}
}
// get session information for this client
// OvsdbSession ovsdbSession =
// ovsdbSessionMapInterface.getSession(connectedClientId);
// if (ovsdbSession == null) {
// throw new IllegalStateException("AP with id " +
// connectedClientId + " is not connected");
// }
//
// OvsdbClient ovsdbClient = ovsdbSession.getOvsdbClient();
// OpensyncAPConfig opensyncAPConfig =
// extIntegrationInterface.getApConfig(connectedClientId);
// TODO:
// example wifiVifStateDbTable get MAC ADDRESS via ovsdbClient
// from
// Wifi_Associated_Clients given the associated UUID for the
// client
// TODO:
// Changes from other Status (Wifi, Inet, etc.) tables?
// Updates to session etc.
// Needs to be reflected in the Cloud
}
}
@@ -181,10 +169,11 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
ovsdbDao.monitorInetState(ovsdbClient, new ConnectusMonitorCallback(key));
// monitor vif state
ovsdbDao.monitorVIFState(ovsdbClient, new ConnectusMonitorCallback(key));
// monitor Route state
ovsdbDao.monitorRouteState(ovsdbClient, new ConnectusMonitorCallback(key));
// monitor Master State
ovsdbDao.monitorMasterState(ovsdbClient, new ConnectusMonitorCallback(key));
// monitor AWLAN_Node
ovsdbDao.monitorAwlanNode(ovsdbClient, new ConnectusMonitorCallback(key));
// monitor Wifi_Associated_Clients
ovsdbDao.monitorAssociatedClients(ovsdbClient, new ConnectusMonitorCallback(key));
} catch (Exception e) {
LOG.error("ovsdbClient error", e);
// something is wrong with the SSL

View File

@@ -84,81 +84,39 @@ public class OvsdbDao {
public static final String wifiInetConfigDbTable = "Wifi_Inet_Config";
public static final String wifiInetStateDbTable = "Wifi_Inet_State";
public static final String wifiRouteStateDbTable = "Wifi_Route_State";
public static final String wifiMasterStateDbTable = "Wifi_Master_State";
public static final String wifiAssociatedClientsDbTable = "Wifi_Associated_Clients";
private static final String wifiRadioStateDbTableMonitorId = "Wifi_Radio_State_Monitor_Id";
private static final String wifiInetStateDbTableMonitorId = "Wifi_Inet_State_Monitor_Id";
private static final String wifiVifStateDbTableMonitorId = "Wifi_VIF_State_Monitor_Id";
private static final String wifiRouteStateDbTableMonitorId = "Wifi_Route_State_Monitor_Id";
private static final String wifiMasterStateDbTableMonitorId = "Wifi_Master_State_Monitor_Id";
public void monitorRouteState(OvsdbClient ovsdbClient, MonitorCallback monitorCallback) {
List<String> columns = new ArrayList<>();
columns.add("_uuid");
columns.add("_version");
columns.add("dest_addr");
columns.add("dest_mask");
columns.add("gateway");
columns.add("gateway_hwaddr");
columns.add("if_name");
private static final String wifiAwlanNodeDbTableMonitorId = "AWLAN_Node_Monitor_Id";
private static final String wifiAssociatedClientsDbTableMonitorId = "Wifi_Associated_Clients_Monitor_Id";
public void monitorAwlanNode(OvsdbClient ovsdbClient, MonitorCallback monitorCallback) {
MonitorRequest monitorRequest = new MonitorRequest();
MonitorRequests monitorRequests = new MonitorRequests(ImmutableMap.of(wifiRouteStateDbTable, monitorRequest));
try {
ovsdbClient.monitor(ovsdbName, wifiRouteStateDbTableMonitorId, monitorRequests, monitorCallback);
} catch (OvsdbClientException e) {
LOG.error("Unable to add Monitor to table " + wifiRouteStateDbTable, e);
}
MonitorRequests monitorRequests = new MonitorRequests(ImmutableMap.of(awlanNodeDbTable, monitorRequest));
try {
ovsdbClient.monitor(ovsdbName, wifiAwlanNodeDbTableMonitorId, monitorRequests, monitorCallback);
} catch (OvsdbClientException e) {
LOG.error("Unable to add Monitor to table " + awlanNodeDbTable, e);
}
}
public void monitorMasterState(OvsdbClient ovsdbClient, MonitorCallback monitorCallback) {
List<String> columns = new ArrayList<>();
columns.add("_uuid");
columns.add("_version");
columns.add("dhcpc");
columns.add("if_name");
columns.add("if_type");
columns.add("inet_addr");
columns.add("netmask");
columns.add("network_state");
columns.add("port_state");
public void monitorAssociatedClients(OvsdbClient ovsdbClient, MonitorCallback monitorCallback) {
MonitorRequest monitorRequest = new MonitorRequest();
MonitorRequests monitorRequests = new MonitorRequests(ImmutableMap.of(wifiMasterStateDbTable, monitorRequest));
MonitorRequests monitorRequests = new MonitorRequests(
ImmutableMap.of(wifiAssociatedClientsDbTable, monitorRequest));
try {
ovsdbClient.monitor(ovsdbName, wifiMasterStateDbTableMonitorId, monitorRequests, monitorCallback);
ovsdbClient.monitor(ovsdbName, wifiAssociatedClientsDbTableMonitorId, monitorRequests, monitorCallback);
} catch (OvsdbClientException e) {
LOG.error("Unable to add Monitor to table " + wifiMasterStateDbTable, e);
LOG.error("Unable to add Monitor to table " + wifiAssociatedClientsDbTable, e);
}
}
public void monitorVIFState(OvsdbClient ovsdbClient, MonitorCallback monitorCallback) {
List<String> columns = new ArrayList<>();
columns.add("_uuid");
columns.add("_version");
columns.add("ap_bridge");
columns.add("associated_clients");
columns.add("bridge");
columns.add("btm");
columns.add("channel");
columns.add("dynamic_beacon");
columns.add("enabled");
columns.add("group_rekey");
columns.add("if_name");
columns.add("mac");
columns.add("min_hw_mode");
columns.add("mode");
columns.add("rrm");
columns.add("security");
columns.add("ssid");
columns.add("ssid_broadcast");
columns.add("uapsd_enable");
columns.add("vif_config");
columns.add("vif_radio_idx");
MonitorRequest monitorRequest = new MonitorRequest();
MonitorRequests monitorRequests = new MonitorRequests(ImmutableMap.of(wifiVifStateDbTable, monitorRequest));
@@ -208,8 +166,8 @@ public class OvsdbDao {
ovsdbClient.cancelMonitor(wifiRadioStateDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiVifStateDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiInetStateDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiRouteStateDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiMasterStateDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiAssociatedClientsDbTableMonitorId);
ovsdbClient.cancelMonitor(wifiAwlanNodeDbTableMonitorId);
} catch (OvsdbClientException e) {
LOG.debug("Could not cancel Monitor. {}", e.getLocalizedMessage());
}
@@ -1560,7 +1518,7 @@ public class OvsdbDao {
updateColumns.put("sampling_interval", new Atom<>(0));
updateColumns.put("stats_type", new Atom<>("device"));
// updateColumns.put("survey_interval_ms", new Atom<>(10) );
// updateColumns.put("survey_type", new Atom<>("on-chan") );
updateColumns.put("survey_type", new Atom<>("on-chan"));
// updateColumns.put("threshold", thresholds );
row = new Row(updateColumns);
@@ -1641,11 +1599,13 @@ public class OvsdbDao {
updateColumns = new HashMap<>();
// updateColumns.put("channel_list", channels );
updateColumns.put("radio_type", new Atom<>("5GL"));
updateColumns.put("report_type", new Atom<>("average"));
updateColumns.put("reporting_interval", new Atom<>(60));
updateColumns.put("sampling_interval", new Atom<>(10));
updateColumns.put("stats_type", new Atom<>("client"));
// updateColumns.put("survey_interval_ms", new Atom<>(0) );
// updateColumns.put("survey_type", new Atom<>("on-chan") );
updateColumns.put("survey_type", new Atom<>("on-chan"));
// updateColumns.put("threshold", thresholds );
row = new Row(updateColumns);
@@ -1658,11 +1618,13 @@ public class OvsdbDao {
updateColumns = new HashMap<>();
// updateColumns.put("channel_list", channels );
updateColumns.put("radio_type", new Atom<>("5GU"));
updateColumns.put("report_type", new Atom<>("average"));
updateColumns.put("reporting_interval", new Atom<>(60));
updateColumns.put("sampling_interval", new Atom<>(10));
updateColumns.put("stats_type", new Atom<>("client"));
// updateColumns.put("survey_interval_ms", new Atom<>(0) );
// updateColumns.put("survey_type", new Atom<>("on-chan") );
updateColumns.put("survey_type", new Atom<>("on-chan"));
// updateColumns.put("threshold", thresholds );
row = new Row(updateColumns);
@@ -1692,11 +1654,13 @@ public class OvsdbDao {
updateColumns = new HashMap<>();
// updateColumns.put("channel_list", channels );
updateColumns.put("radio_type", new Atom<>("2.4G"));
updateColumns.put("report_type", new Atom<>("average"));
updateColumns.put("reporting_interval", new Atom<>(60));
updateColumns.put("sampling_interval", new Atom<>(10));
updateColumns.put("stats_type", new Atom<>("client"));
// updateColumns.put("survey_interval_ms", new Atom<>(0) );
// updateColumns.put("survey_type", new Atom<>("on-chan") );
updateColumns.put("survey_type", new Atom<>("on-chan"));
// updateColumns.put("threshold", thresholds );
row = new Row(updateColumns);
@@ -1759,12 +1723,13 @@ public class OvsdbDao {
updateColumns = new HashMap<>();
updateColumns.put("radio_type", new Atom<>(band));
updateColumns.put("reporting_interval", new Atom<>(120));
updateColumns.put("sampling_interval", new Atom<>(0));
updateColumns.put("sampling_interval", new Atom<>(10));
updateColumns.put("report_type", new Atom<>("average"));
updateColumns.put("stats_type", new Atom<>("rssi"));
updateColumns.put("survey_interval_ms", new Atom<>(0));
updateColumns.put("survey_type", new Atom<>("on-chan"));
row = new Row(updateColumns);
if (provisionedWifiStatsConfigs.containsKey(band + "_rssi_onChannel")) {
operations.add(new Update(wifiStatsConfigDbTable, row));
} else {