From 3690111d08b270829e0f83c8760d3962076322f2 Mon Sep 17 00:00:00 2001 From: Mike Hansen Date: Thu, 18 Jun 2020 15:39:22 -0400 Subject: [PATCH] FirmwareFlash and FirmwareDownload support in Dao and Gateway. Contingent on AP support, currently sends command but doesn't actually upgrade for download, and Flash doesn't have a trigger point on AP --- .../OpensyncCloudGatewayController.java | 20 ++++--- .../ConnectusOvsdbClientInterface.java | 15 ++++-- .../opensync/ovsdb/ConnectusOvsdbClient.java | 34 ++++++++++++ .../wlan/opensync/ovsdb/dao/OvsdbDao.java | 52 +++++++++++++++++++ 4 files changed, 109 insertions(+), 12 deletions(-) diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java index 12b4ebc..582329b 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java @@ -268,15 +268,21 @@ public class OpensyncCloudGatewayController { // TODO: after the demo introduce a specialized command for this! String newRedirectorAddress = ((CEGWStartDebugEngine) command).getGatewayHostname(); connectusOvsdbClient.changeRedirectorAddress(inventoryId, newRedirectorAddress); - //TODO: add support for additional commands below + // TODO: add support for additional commands below } else if (command instanceof CEGWFirmwareFlashRequest) { - response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, - "Received Command " + command.getCommandType() + " for " + inventoryId, command, - registeredGateway.getHostname(), registeredGateway.getPort()); + String firmwareVersion = ((CEGWFirmwareFlashRequest) command).getFirmwareVersion(); + connectusOvsdbClient.processFlashFirmware(inventoryId, firmwareVersion); + } else if (command instanceof CEGWFirmwareDownloadRequest) { - response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, - "Received Command " + command.getCommandType() + " for " + inventoryId, command, - registeredGateway.getHostname(), registeredGateway.getPort()); + + String filepath = ((CEGWFirmwareDownloadRequest) command).getFilePath(); + String firmwareVersion = ((CEGWFirmwareDownloadRequest) command).getFirmwareVersion(); + String username = ((CEGWFirmwareDownloadRequest) command).getUsername(); + String validationCode = ((CEGWFirmwareDownloadRequest) command).getUsername(); + + connectusOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, username, + validationCode); + } else if (command instanceof CEGWRadioResetRequest) { response = new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, "Received Command " + command.getCommandType() + " for " + inventoryId, command, diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/ConnectusOvsdbClientInterface.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/ConnectusOvsdbClientInterface.java index 791da81..863b62b 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/ConnectusOvsdbClientInterface.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/ConnectusOvsdbClientInterface.java @@ -4,11 +4,16 @@ import java.util.Set; public interface ConnectusOvsdbClientInterface { - Set getConnectedClientIds(); + Set getConnectedClientIds(); - String changeRedirectorAddress(String apId, String newRedirectorAddress); + String changeRedirectorAddress(String apId, String newRedirectorAddress); - void processConfigChanged(String apId); - - String closeSession(String apId); + void processConfigChanged(String apId); + + String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username, + String validationCode); + + String processFlashFirmware(String apId, String firmwareVersion); + + String closeSession(String apId); } 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 4cfd1f3..304cf00 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 @@ -416,4 +416,38 @@ public class ConnectusOvsdbClient implements ConnectusOvsdbClientInterface { LOG.debug("Closed session to " + apId); return "Closed session to " + apId; } + + @Override + public String processFirmwareDownload(String apId, String firmwareUrl, String firmwareVersion, String username, + String validationCode) { + try { + OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); + + ovsdbDao.configureFirmwareDownload(session.getOvsdbClient(), apId, firmwareUrl, firmwareVersion, username, + validationCode); + } catch (Exception e) { + LOG.error("Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage()); + return "Failed to initialize firmware download to " + apId + " " + e.getLocalizedMessage(); + + } + LOG.debug("Initialized firmware download to " + apId); + return "Initialized firmware download to " + apId; + } + + @Override + public String processFlashFirmware(String apId, String firmwareVersion) { + try { + OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); + + ovsdbDao.flashFirmware(session.getOvsdbClient(), apId, firmwareVersion); + + } catch (Exception e) { + LOG.error("Failed to flash firmware version {} on AP {} ", firmwareVersion, apId, e); + return "Failed to flash firmware version " + firmwareVersion + " on AP " + apId + "\n" + + e.getLocalizedMessage(); + + } + LOG.debug("Flashed firmware version {} on AP {}", firmwareVersion, apId); + return "Flashed firmware version " + firmwareVersion + " on AP " + apId; + } } 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 7f13a28..63f386e 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 @@ -65,6 +65,7 @@ import com.vmware.ovsdb.protocol.operation.notation.Value; import com.vmware.ovsdb.protocol.operation.result.InsertResult; import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.protocol.operation.result.SelectResult; +import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.service.OvsdbClient; @Component @@ -2721,4 +2722,55 @@ public class OvsdbDao { return newRedirectorAddress; } + 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); + + List operations = new ArrayList<>(); + Map 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)); + + Row row = new Row(updateColumns); + operations.add(new Update(awlanNodeDbTable, row)); + + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + for (OperationResult r : result) { + LOG.debug("Op Result {}", r); + + } + + } + + 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 + + // List operations = new ArrayList<>(); + // Map updateColumns = new HashMap<>(); + // + // updateColumns.put("firmware_version", new Atom<>(firmwareVersion)); + // Enabled. + // Row row = new Row(updateColumns); + // operations.add(new Update(awlanNodeDbTable, row)); + // + // + // CompletableFuture fResult = + // ovsdbClient.transact(ovsdbName, operations); + // OperationResult[] result = fResult.get(ovsdbTimeoutSec, + // TimeUnit.SECONDS); + // for (OperationResult r : result) { + // LOG.debug("Op Result {}", r); + // + // } + + } + }