mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-24 22:05:11 +00:00
Firmware updates
This commit is contained in:
@@ -78,7 +78,7 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
ConnectionCallback connectionCallback = new ConnectionCallback() {
|
||||
@Override
|
||||
public void connected(OvsdbClient ovsdbClient) {
|
||||
|
||||
|
||||
String remoteHost = ovsdbClient.getConnectionInfo().getRemoteAddress().getHostAddress();
|
||||
int localPort = ovsdbClient.getConnectionInfo().getLocalPort();
|
||||
String subjectDn = null;
|
||||
@@ -164,20 +164,6 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
LOG.info("Manager waiting for connection on port {}...", ovsdbListenPort);
|
||||
}
|
||||
|
||||
private void cancelMonitors(OvsdbClient ovsdbClient, String key) {
|
||||
try {
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiRadioStateDbTable + "_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiVifStateDbTable + "_delete_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiVifStateDbTable + "_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiInetStateDbTable + "_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiAssociatedClientsDbTable + "_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.wifiAssociatedClientsDbTable + "_delete_" + key).join();
|
||||
ovsdbClient.cancelMonitor(OvsdbDao.awlanNodeDbTable + "_" + key).join();
|
||||
} catch (OvsdbClientException e) {
|
||||
LOG.debug("Unable to cancel monitor for state table. {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private ConnectNodeInfo processConnectRequest(OvsdbClient ovsdbClient, String clientCn,
|
||||
ConnectNodeInfo connectNodeInfo) {
|
||||
|
||||
@@ -313,7 +299,10 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
}
|
||||
|
||||
});
|
||||
awCf.join();
|
||||
|
||||
extIntegrationInterface.awlanNodeDbTableUpdate(ovsdbDao.getOpensyncAWLANNode(awCf.join(), key, ovsdbClient),
|
||||
key);
|
||||
|
||||
}
|
||||
|
||||
private void monitorWifiAssociatedClientsDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
|
||||
@@ -336,7 +325,10 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
}
|
||||
|
||||
});
|
||||
acCf.join();
|
||||
|
||||
extIntegrationInterface.wifiAssociatedClientsDbTableUpdate(
|
||||
ovsdbDao.getOpensyncWifiAssociatedClients(acCf.join(), key, ovsdbClient), key);
|
||||
|
||||
}
|
||||
|
||||
private void monitorWifiInetStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
|
||||
@@ -356,7 +348,9 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
}
|
||||
|
||||
});
|
||||
isCf.join();
|
||||
|
||||
extIntegrationInterface
|
||||
.wifiInetStateDbTableUpdate(ovsdbDao.getOpensyncAPInetState(isCf.join(), key, ovsdbClient), key);
|
||||
}
|
||||
|
||||
private void monitorWifiRadioStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
|
||||
@@ -375,7 +369,8 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
}
|
||||
|
||||
});
|
||||
rsCf.join();
|
||||
extIntegrationInterface
|
||||
.wifiRadioStatusDbTableUpdate(ovsdbDao.getOpensyncAPRadioState(rsCf.join(), key, ovsdbClient), key);
|
||||
}
|
||||
|
||||
private void monitorWifiVifStateDbTableDeletion(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
|
||||
@@ -476,7 +471,7 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
CompletableFuture<TableUpdates> vsCf = ovsdbClient
|
||||
.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiVifStateDbTable + "_" + key,
|
||||
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable,
|
||||
new MonitorRequest(new MonitorSelect(true, true, false, true)))),
|
||||
new MonitorRequest(new MonitorSelect(true, true, true, true)))),
|
||||
new MonitorCallback() {
|
||||
@Override
|
||||
public void update(TableUpdates tableUpdates) {
|
||||
@@ -489,7 +484,9 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface {
|
||||
|
||||
});
|
||||
|
||||
vsCf.join();
|
||||
extIntegrationInterface.wifiVIFStateDbTableUpdate(ovsdbDao.getOpensyncAPVIFState(vsCf.join(), key, ovsdbClient),
|
||||
key);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package com.telecominfraproject.wlan.opensync.ovsdb.dao;
|
||||
|
||||
import java.net.URL;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
@@ -115,6 +119,10 @@ public class OvsdbDao {
|
||||
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.awlan-node.upgrade_dl_timer:300}")
|
||||
public long upgradeDlTimer;
|
||||
@org.springframework.beans.factory.annotation.Value("${connectus.ovsdb.awlan-node.upgrade_timer:300}")
|
||||
public long upgradeTimer;
|
||||
|
||||
public static final String ovsdbName = "Open_vSwitch";
|
||||
public static final String awlanNodeDbTable = "AWLAN_Node";
|
||||
@@ -2840,18 +2848,103 @@ public class OvsdbDao {
|
||||
return newRedirectorAddress;
|
||||
}
|
||||
|
||||
private Row getAWLANNodeDbTableForFirmwareUpdate(OvsdbClient ovsdbClient) {
|
||||
Row row = null;
|
||||
|
||||
try {
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
List<Condition> conditions = new ArrayList<>();
|
||||
List<String> columns = new ArrayList<>();
|
||||
columns.add("firmware_version");
|
||||
columns.add("firmware_pass");
|
||||
columns.add("firmware_url");
|
||||
columns.add("version_matrix");
|
||||
columns.add("upgrade_timer");
|
||||
columns.add("upgrade_status");
|
||||
columns.add("upgrade_dl_timer");
|
||||
|
||||
operations.add(new Select(awlanNodeDbTable, conditions, columns));
|
||||
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("Select from {}:", awlanNodeDbTable);
|
||||
|
||||
for (OperationResult res : result) {
|
||||
LOG.debug("Op Result {}", res);
|
||||
}
|
||||
}
|
||||
|
||||
if ((result != null) && (result.length > 0) && !((SelectResult) result[0]).getRows().isEmpty()) {
|
||||
row = ((SelectResult) result[0]).getRows().iterator().next();
|
||||
}
|
||||
|
||||
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
LOG.debug("AWLAN_Node {}", row);
|
||||
|
||||
return row;
|
||||
}
|
||||
|
||||
public void configureFirmwareDownload(OvsdbClient ovsdbClient, String apId, String firmwareUrl,
|
||||
String firmwareVersion, String username, String validationCode) throws Exception {
|
||||
|
||||
LOG.debug("configureFirmwareDownload for {} to version {} url {}", apId, firmwareVersion, firmwareUrl);
|
||||
try {
|
||||
LOG.debug("configureFirmwareDownload for {} to version {} url {} validationCode {} username {}", apId,
|
||||
firmwareVersion, firmwareUrl, validationCode, username);
|
||||
|
||||
// get existing table info
|
||||
Row awlanNode = getAWLANNodeDbTableForFirmwareUpdate(ovsdbClient);
|
||||
|
||||
if (awlanNode == null) {
|
||||
LOG.error("Cannot update AWLAN_Node firmware information");
|
||||
return;
|
||||
}
|
||||
URL aURL = new URL(firmwareUrl);
|
||||
|
||||
Map<String, String> versionMap = awlanNode.getMapColumn("version_matrix");
|
||||
versionMap.put("vendor/ipq40xx", aURL.getPath().substring(0, aURL.getPath().lastIndexOf('/')));
|
||||
versionMap.put("FIRMWARE", firmwareVersion);
|
||||
versionMap.put("FW_VERSION", firmwareVersion.substring(0, firmwareVersion.indexOf('-')));
|
||||
versionMap.put("FW_BUILD",
|
||||
firmwareVersion.substring(firmwareVersion.indexOf('-') + 1, firmwareVersion.lastIndexOf('-')));
|
||||
versionMap.put("FW_COMMIT", firmwareVersion.substring(firmwareVersion.lastIndexOf('-') + 1));
|
||||
versionMap.put("HOST", aURL.getHost());
|
||||
versionMap.put("FW_PROFILE", firmwareVersion.substring(0, firmwareVersion.indexOf('-')));
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
|
||||
versionMap.put("DATE", sdf.format(new Date()));
|
||||
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
Map<String, Value> updateColumns = new HashMap<>();
|
||||
updateColumns.put("upgrade_dl_timer", new Atom<Long>(upgradeDlTimer));
|
||||
updateColumns.put("firmware_pass", new Atom<String>(validationCode));
|
||||
updateColumns.put("firmware_url", new Atom<String>(firmwareUrl));
|
||||
updateColumns.put("version_matrix", com.vmware.ovsdb.protocol.operation.notation.Map.of(versionMap));
|
||||
|
||||
Row row = new Row(updateColumns);
|
||||
operations.add(new Update(awlanNodeDbTable, row));
|
||||
|
||||
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||
for (OperationResult r : result) {
|
||||
LOG.debug("Op Result {}", r);
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LOG.error("Could not download firmware to AP", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void flashFirmware(OvsdbClient ovsdbClient, String apId, String firmwareVersion) throws Exception {
|
||||
|
||||
LOG.debug("flashFirmware for {} to version {}", apId, firmwareVersion);
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
Map<String, Value> updateColumns = new HashMap<>();
|
||||
|
||||
updateColumns.put("firmware_pass", new Atom<>(validationCode));
|
||||
updateColumns.put("firmware_version", new Atom<>(firmwareVersion));
|
||||
// Until AP enables Upgrade Manager this does nothing
|
||||
updateColumns.put("firmware_url", new Atom<>(firmwareUrl));
|
||||
updateColumns.put("upgrade_timer", new Atom<Long>(upgradeTimer));
|
||||
|
||||
Row row = new Row(updateColumns);
|
||||
operations.add(new Update(awlanNodeDbTable, row));
|
||||
@@ -2865,14 +2958,6 @@ public class OvsdbDao {
|
||||
|
||||
}
|
||||
|
||||
public void flashFirmware(OvsdbClient ovsdbClient, String apId, String firmwareVersion) throws Exception {
|
||||
|
||||
LOG.debug("flashFirmware for {} to version {}", apId, firmwareVersion);
|
||||
|
||||
// TODO: This needs to be implemented when the AP has Firmware Upgrade
|
||||
|
||||
}
|
||||
|
||||
public void removeAllStatsConfigs(OvsdbClient ovsdbClient) {
|
||||
|
||||
LOG.info("Remove existing Wifi_Stats_Config table entries");
|
||||
|
||||
Reference in New Issue
Block a user