mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-03 03:57:54 +00:00
WIFI-2638: Gateway: Support blink or turn off of LEDs on AP from CloudSDK BlinkRequest
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
package com.telecominfraproject.wlan.opensync.external.integration.controller;
|
package com.telecominfraproject.wlan.opensync.external.integration.controller;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -149,19 +150,16 @@ public class OpensyncCloudGatewayController {
|
|||||||
String inventoryId = command.getInventoryId();
|
String inventoryId = command.getInventoryId();
|
||||||
|
|
||||||
if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) {
|
if (com.telecominfraproject.wlan.core.model.json.BaseJsonModel.hasUnsupportedValue(command)) {
|
||||||
LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId,
|
LOG.error("[{}] Failed to deliver command {}, command contains unsupported value", inventoryId, command);
|
||||||
command);
|
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, "Unsupported value in command for " + inventoryId, command,
|
||||||
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()));
|
||||||
"Unsupported value in command for " + inventoryId, command, registeredGateway == null ? null : registeredGateway.getHostname(),
|
|
||||||
registeredGateway == null ? -1 : registeredGateway.getPort()));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId);
|
OvsdbSession session = ovsdbSessionMapInterface.getSession(inventoryId);
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command);
|
LOG.warn("[{}] Failed to deliver command {}, equipment session not found", inventoryId, command);
|
||||||
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE,
|
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "No session found for " + inventoryId, command,
|
||||||
"No session found for " + inventoryId, command, registeredGateway == null ? null : registeredGateway.getHostname(),
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()));
|
||||||
registeredGateway == null ? -1 : registeredGateway.getPort()));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,8 +199,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
ret.add(processRadioReboot(session, (CEGWRebootRequest) command));
|
ret.add(processRadioReboot(session, (CEGWRebootRequest) command));
|
||||||
break;
|
break;
|
||||||
case ClientBlocklistChangeNotification:
|
case ClientBlocklistChangeNotification:
|
||||||
ret.add(sendClientBlocklistChangeNotification(session,
|
ret.add(sendClientBlocklistChangeNotification(session, (CEGWClientBlocklistChangeNotification) command));
|
||||||
(CEGWClientBlocklistChangeNotification) command));
|
|
||||||
break;
|
break;
|
||||||
case NewChannelRequest:
|
case NewChannelRequest:
|
||||||
ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
|
ret.add(sendNewChannelRequest(session, (CEGWNewChannelRequest) command));
|
||||||
@@ -212,22 +209,20 @@ public class OpensyncCloudGatewayController {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
|
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
|
||||||
ret.add(new EquipmentCommandResponse(
|
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
|
||||||
CEGWCommandResultCode.UnsupportedCommand, "Invalid command type ("
|
"Invalid command type (" + command.getCommandType() + ") for equipment (" + inventoryId + ")", command,
|
||||||
+ command.getCommandType() + ") for equipment (" + inventoryId + ")",
|
registeredGateway == null ? null : registeredGateway.getHostname(),
|
||||||
command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort()));
|
registeredGateway == null ? -1 : registeredGateway.getPort()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session,
|
private EquipmentCommandResponse processFirmwareDownload(OvsdbSession session, CEGWFirmwareDownloadRequest command) {
|
||||||
CEGWFirmwareDownloadRequest command) {
|
|
||||||
return sendMessage(session, command.getInventoryId(), command);
|
return sendMessage(session, command.getInventoryId(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,19 +254,18 @@ public class OpensyncCloudGatewayController {
|
|||||||
if (null != command.getRoutingId()) {
|
if (null != command.getRoutingId()) {
|
||||||
if (!command.getRoutingId().equals(session.getRoutingId())) {
|
if (!command.getRoutingId().equals(session.getRoutingId())) {
|
||||||
|
|
||||||
LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(),
|
LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(), command.getInventoryId(), session.getRoutingId(),
|
||||||
command.getInventoryId(), session.getRoutingId(), command.getRoutingId());
|
command.getRoutingId());
|
||||||
|
|
||||||
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer",
|
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command,
|
||||||
command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Route active", command,
|
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Route active", command,
|
||||||
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session,
|
private EquipmentCommandResponse sendConfigChangeNotification(OvsdbSession session, CEGWConfigChangeNotification command) {
|
||||||
CEGWConfigChangeNotification command) {
|
|
||||||
|
|
||||||
return sendMessage(session, command.getInventoryId(), command);
|
return sendMessage(session, command.getInventoryId(), command);
|
||||||
}
|
}
|
||||||
@@ -281,20 +275,17 @@ public class OpensyncCloudGatewayController {
|
|||||||
session.getOvsdbClient().shutdown();
|
session.getOvsdbClient().shutdown();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage());
|
LOG.error("[{}] Failed to close session on CE: {}", command.getInventoryId(), e.getLocalizedMessage());
|
||||||
return new EquipmentCommandResponse(
|
return new EquipmentCommandResponse(CEGWCommandResultCode.FailedToSend,
|
||||||
CEGWCommandResultCode.FailedToSend, "Failed to send command " + command.getCommandType() + " to "
|
"Failed to send command " + command.getCommandType() + " to " + command.getInventoryId() + ": " + e.getMessage(), command,
|
||||||
+ command.getInventoryId() + ": " + e.getMessage(),
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
command, registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
|
||||||
}
|
}
|
||||||
LOG.debug("[{}] Closed session to CE", command.getInventoryId());
|
LOG.debug("[{}] Closed session to CE", command.getInventoryId());
|
||||||
return new EquipmentCommandResponse(CEGWCommandResultCode.Success,
|
return new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Closed session to " + command.getInventoryId(), command,
|
||||||
"Closed session to " + command.getInventoryId(), command, registeredGateway == null ? null : registeredGateway.getHostname(),
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
registeredGateway == null ? -1 : registeredGateway.getPort());
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session,
|
private EquipmentCommandResponse sendClientBlocklistChangeNotification(OvsdbSession session, CEGWClientBlocklistChangeNotification command) {
|
||||||
CEGWClientBlocklistChangeNotification command) {
|
|
||||||
return sendMessage(session, command.getInventoryId(), command);
|
return sendMessage(session, command.getInventoryId(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,15 +308,17 @@ public class OpensyncCloudGatewayController {
|
|||||||
private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) {
|
private EquipmentCommandResponse sendMessage(OvsdbSession session, String inventoryId, EquipmentCommand command) {
|
||||||
|
|
||||||
LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId);
|
LOG.debug("Received command {} for {}", command.getCommandType(), inventoryId);
|
||||||
EquipmentCommandResponse response = new EquipmentCommandResponse(CEGWCommandResultCode.Success,
|
EquipmentCommandResponse response =
|
||||||
"Received Command " + command.getCommandType() + " for " + inventoryId, command,
|
new EquipmentCommandResponse(CEGWCommandResultCode.Success, "Received Command " + command.getCommandType() + " for " + inventoryId, command,
|
||||||
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
|
|
||||||
if (command instanceof CEGWConfigChangeNotification) {
|
if (command instanceof CEGWBlinkRequest) {
|
||||||
|
String resultDetails = tipwlanOvsdbClient.processBlinkRequest(inventoryId, ((CEGWBlinkRequest)command).getBlinkAllLEDs());
|
||||||
|
response.setResultDetail(resultDetails);
|
||||||
|
} else if (command instanceof CEGWConfigChangeNotification) {
|
||||||
tipwlanOvsdbClient.processConfigChanged(inventoryId);
|
tipwlanOvsdbClient.processConfigChanged(inventoryId);
|
||||||
} else if (command instanceof CEGWClientBlocklistChangeNotification) {
|
} else if (command instanceof CEGWClientBlocklistChangeNotification) {
|
||||||
tipwlanOvsdbClient.processClientBlocklistChange(inventoryId,
|
tipwlanOvsdbClient.processClientBlocklistChange(inventoryId, ((CEGWClientBlocklistChangeNotification) command).getBlockList());
|
||||||
((CEGWClientBlocklistChangeNotification) command).getBlockList());
|
|
||||||
} else if (command instanceof CEGWChangeRedirectorHost) {
|
} else if (command instanceof CEGWChangeRedirectorHost) {
|
||||||
String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost();
|
String newRedirectorAddress = ((CEGWChangeRedirectorHost) command).getRedirectorHost();
|
||||||
tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress);
|
tipwlanOvsdbClient.changeRedirectorHost(inventoryId, newRedirectorAddress);
|
||||||
@@ -340,7 +333,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
|
Map<RadioType, Integer> newBackupChannels = request.getNewBackupChannels();
|
||||||
Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels();
|
Map<RadioType, Integer> newPrimaryChannels = request.getNewPrimaryChannels();
|
||||||
|
|
||||||
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels);
|
String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels, newPrimaryChannels);
|
||||||
response.setResultDetail(resultDetails);
|
response.setResultDetail(resultDetails);
|
||||||
} else if (command instanceof CEGWCellSizeAttributesRequest) {
|
} else if (command instanceof CEGWCellSizeAttributesRequest) {
|
||||||
CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
|
CEGWCellSizeAttributesRequest request = (CEGWCellSizeAttributesRequest) command;
|
||||||
@@ -357,8 +350,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
String firmwareVersion = dlRequest.getFirmwareVersion();
|
String firmwareVersion = dlRequest.getFirmwareVersion();
|
||||||
String username = dlRequest.getUsername();
|
String username = dlRequest.getUsername();
|
||||||
|
|
||||||
String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion,
|
String resultDetails = tipwlanOvsdbClient.processFirmwareDownload(inventoryId, filepath, firmwareVersion, username);
|
||||||
username);
|
|
||||||
|
|
||||||
response.setResultDetail(resultDetails);
|
response.setResultDetail(resultDetails);
|
||||||
|
|
||||||
@@ -370,8 +362,8 @@ public class OpensyncCloudGatewayController {
|
|||||||
flashRequest.getInventoryId();
|
flashRequest.getInventoryId();
|
||||||
flashRequest.getUsername();
|
flashRequest.getUsername();
|
||||||
|
|
||||||
String resultDetails = tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(),
|
String resultDetails =
|
||||||
flashRequest.getFirmwareVersion(), flashRequest.getUsername());
|
tipwlanOvsdbClient.processFirmwareFlash(flashRequest.getInventoryId(), flashRequest.getFirmwareVersion(), flashRequest.getUsername());
|
||||||
|
|
||||||
response.setResultDetail(resultDetails);
|
response.setResultDetail(resultDetails);
|
||||||
|
|
||||||
@@ -405,7 +397,6 @@ public class OpensyncCloudGatewayController {
|
|||||||
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
registeredGateway == null ? null : registeredGateway.getHostname(), registeredGateway == null ? -1 : registeredGateway.getPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
@@ -423,15 +414,14 @@ public class OpensyncCloudGatewayController {
|
|||||||
return sendMessage(session, command.getInventoryId(), command);
|
return sendMessage(session, command.getInventoryId(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) {
|
private EquipmentCommandResponse processBlinkRequest(OvsdbSession session, CEGWBlinkRequest command) {
|
||||||
|
|
||||||
return sendMessage(session, command.getInventoryId(), command);
|
return sendMessage(session, command.getInventoryId(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/commandWithUser", method = RequestMethod.POST)
|
@RequestMapping(value = "/commandWithUser", method = RequestMethod.POST)
|
||||||
public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command,
|
public EquipmentCommandResponse sendCommandWithAuthUser(@RequestBody EquipmentCommand command, @AuthenticationPrincipal Object requestUser,
|
||||||
@AuthenticationPrincipal Object requestUser, HttpServletRequest httpServletRequest) {
|
HttpServletRequest httpServletRequest) {
|
||||||
|
|
||||||
// use these properties to get address and port where request has
|
// use these properties to get address and port where request has
|
||||||
// arrived
|
// arrived
|
||||||
@@ -464,8 +454,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (eqRoutingSvc == null) {
|
if (eqRoutingSvc == null) {
|
||||||
throw new ConfigurationException(
|
throw new ConfigurationException("Unable to register gateway with routing service: routing service interface not initialized");
|
||||||
"Unable to register gateway with routing service: routing service interface not initialized");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanupStaleGwRecord();
|
cleanupStaleGwRecord();
|
||||||
@@ -481,13 +470,11 @@ public class OpensyncCloudGatewayController {
|
|||||||
EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord);
|
EquipmentGatewayRecord result = eqRoutingSvc.registerGateway(gwRecord);
|
||||||
registeredGwId = result.getId();
|
registeredGwId = result.getId();
|
||||||
registeredGateway = result;
|
registeredGateway = result;
|
||||||
LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(),
|
LOG.info("Successfully registered (name={}, id={}) with Routing Service", result.getHostname(), registeredGwId);
|
||||||
registeredGwId);
|
|
||||||
registeredWithRoutingService = true;
|
registeredWithRoutingService = true;
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// failed
|
// failed
|
||||||
LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}",
|
LOG.error("Failed to register Customer Equipment Gateway (name={}) with Routing Service : {}", getGatewayName(), e.getLocalizedMessage());
|
||||||
getGatewayName(), e.getLocalizedMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -512,8 +499,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
eqRoutingSvc.deleteGateway(eqpRec.getId());
|
eqRoutingSvc.deleteGateway(eqpRec.getId());
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// failed
|
// failed
|
||||||
LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}",
|
LOG.error("Failed to delete Equipment Gateway (name={}) from Routing Service: {}", eqpRec.getHostname(), e.getLocalizedMessage());
|
||||||
eqpRec.getHostname(), e.getLocalizedMessage());
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG.debug("Gateway {} is reachable.", eqpRec.getHostname());
|
LOG.debug("Gateway {} is reachable.", eqpRec.getHostname());
|
||||||
@@ -524,9 +510,8 @@ public class OpensyncCloudGatewayController {
|
|||||||
}
|
}
|
||||||
} catch (Exception ex) { // Catching Exception to prevent crashing the
|
} catch (Exception ex) { // Catching Exception to prevent crashing the
|
||||||
// register thread
|
// register thread
|
||||||
LOG.debug("Generic Exception encountered when trying to cleanup "
|
LOG.debug("Generic Exception encountered when trying to cleanup " + "the stale not-reachable GateWays. Continuing to register the new Gateway."
|
||||||
+ "the stale not-reachable GateWays. Continuing to register the new Gateway." + " Error: {} ",
|
+ " Error: {} ", ex.getMessage());
|
||||||
ex.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,14 +535,13 @@ public class OpensyncCloudGatewayController {
|
|||||||
if (registeredWithRoutingService) {
|
if (registeredWithRoutingService) {
|
||||||
try {
|
try {
|
||||||
eqRoutingSvc.deleteGateway(registeredGwId);
|
eqRoutingSvc.deleteGateway(registeredGwId);
|
||||||
LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service",
|
LOG.info("Deregistered Customer Equipment Gateway (name={},id={}) with Routing Service", getGatewayName(), registeredGwId);
|
||||||
getGatewayName(), registeredGwId);
|
|
||||||
registeredGwId = -1;
|
registeredGwId = -1;
|
||||||
registeredGateway = null;
|
registeredGateway = null;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// failed
|
// failed
|
||||||
LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}",
|
LOG.error("Failed to deregister Customer Equipment Gateway (name={},id={}) with Routing Service: {}", getGatewayName(), registeredGwId,
|
||||||
getGatewayName(), registeredGwId, e.getLocalizedMessage());
|
e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
registeredWithRoutingService = false;
|
registeredWithRoutingService = false;
|
||||||
}
|
}
|
||||||
@@ -575,12 +559,10 @@ public class OpensyncCloudGatewayController {
|
|||||||
* @param equipmentId
|
* @param equipmentId
|
||||||
* @return associationId
|
* @return associationId
|
||||||
*/
|
*/
|
||||||
public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId,
|
public EquipmentRoutingRecord registerCustomerEquipment(String equipmentName, Integer customerId, Long equipmentId) {
|
||||||
Long equipmentId) {
|
|
||||||
registerWithRoutingService();
|
registerWithRoutingService();
|
||||||
if (!registeredWithRoutingService) {
|
if (!registeredWithRoutingService) {
|
||||||
LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName,
|
LOG.error("Unable to register customer equipement (name={},id={}): gateway not registered.", equipmentName, equipmentId);
|
||||||
equipmentId);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// Clean up stale records
|
// Clean up stale records
|
||||||
@@ -592,13 +574,11 @@ public class OpensyncCloudGatewayController {
|
|||||||
try {
|
try {
|
||||||
routingRecord = eqRoutingSvc.create(routingRecord);
|
routingRecord = eqRoutingSvc.create(routingRecord);
|
||||||
|
|
||||||
LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId,
|
LOG.debug("Registered customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingRecord.getId());
|
||||||
routingRecord.getId());
|
|
||||||
return routingRecord;
|
return routingRecord;
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId,
|
LOG.error("Failed to register customer equipement (name={},id={}): {}", equipmentName, equipmentId, e.getLocalizedMessage());
|
||||||
e.getLocalizedMessage());
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -611,7 +591,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
* Gateway does not exist, delete the equipmentRouting entry.
|
* Gateway does not exist, delete the equipmentRouting entry.
|
||||||
*
|
*
|
||||||
* @param equipmentId:
|
* @param equipmentId:
|
||||||
* Equipment's ID
|
* Equipment's ID
|
||||||
*/
|
*/
|
||||||
protected void cleanupStaleEqptRoutingRecord(Long equipmentId) {
|
protected void cleanupStaleEqptRoutingRecord(Long equipmentId) {
|
||||||
LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId);
|
LOG.debug("In Clean Up stale Equipment Routing record for Equipment ID {}", equipmentId);
|
||||||
@@ -624,20 +604,17 @@ public class OpensyncCloudGatewayController {
|
|||||||
if (gwRec != null) {
|
if (gwRec != null) {
|
||||||
if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) {
|
if (!isGwReachable(gwRec.getIpAddr(), gwRec.getPort())) {
|
||||||
// GW isn't reachable --> invoke unregister
|
// GW isn't reachable --> invoke unregister
|
||||||
LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry",
|
LOG.debug("Gateway {} is not-reachable... Deleting the equipment routing entry", gwRec.getHostname());
|
||||||
gwRec.getHostname());
|
|
||||||
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
||||||
} else {
|
} else {
|
||||||
LOG.debug("Gateway {} is reachable.", gwRec.getHostname());
|
LOG.debug("Gateway {} is reachable.", gwRec.getHostname());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ",
|
LOG.debug("Gateway with ID {} not found. Deleting the equipment routing entry ", eqRouting.getGatewayId());
|
||||||
eqRouting.getGatewayId());
|
|
||||||
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
||||||
}
|
}
|
||||||
} catch (DsEntityNotFoundException entityNotFoundException) {
|
} catch (DsEntityNotFoundException entityNotFoundException) {
|
||||||
LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry",
|
LOG.debug("Gateway ID: {} not found... Deleting the equipment routing entry", eqRouting.getGatewayId());
|
||||||
eqRouting.getGatewayId());
|
|
||||||
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
deleteUnresponiveGwRoutingRecord(eqRouting.getId(), equipmentId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -646,9 +623,10 @@ public class OpensyncCloudGatewayController {
|
|||||||
}
|
}
|
||||||
} catch (Exception genericException) { // Catching Exception to prevent
|
} catch (Exception genericException) { // Catching Exception to prevent
|
||||||
// crashing the register thread
|
// crashing the register thread
|
||||||
LOG.debug("Generic Exception encountered when trying to cleanup "
|
LOG.debug(
|
||||||
+ "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord."
|
"Generic Exception encountered when trying to cleanup "
|
||||||
+ " Error: {} ", equipmentId, genericException.getMessage());
|
+ "the stale routing records for equipment ID: {}. Continuing to register the new RoutingRecord." + " Error: {} ",
|
||||||
|
equipmentId, genericException.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -657,8 +635,7 @@ public class OpensyncCloudGatewayController {
|
|||||||
eqRoutingSvc.delete(routingId);
|
eqRoutingSvc.delete(routingId);
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// failed
|
// failed
|
||||||
LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId,
|
LOG.error("Failed to delete Equipment routing record (ID={}) from Routing Service: {}", eqptId, e.getLocalizedMessage());
|
||||||
e.getLocalizedMessage());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -666,18 +643,16 @@ public class OpensyncCloudGatewayController {
|
|||||||
|
|
||||||
public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) {
|
public void deregisterCustomerEquipment(Long routingId, String equipmentName, Long equipmentId) {
|
||||||
if (!registeredWithRoutingService) {
|
if (!registeredWithRoutingService) {
|
||||||
LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName,
|
LOG.error("Unable to deregister customer equipement (name={},id={}): gateway not registered", equipmentName, equipmentId);
|
||||||
equipmentId);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId,
|
LOG.debug("Deregistering customer equipment (name={},id={}) with route id={}", equipmentName, equipmentId, routingId);
|
||||||
routingId);
|
|
||||||
|
|
||||||
eqRoutingSvc.delete(routingId);
|
eqRoutingSvc.delete(routingId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName,
|
LOG.error("Failed to deregister customer equipement (name={},id={}) with route id={}: {}", equipmentName, equipmentId, routingId,
|
||||||
equipmentId, routingId, e.getLocalizedMessage());
|
e.getLocalizedMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ public interface OvsdbClientInterface {
|
|||||||
|
|
||||||
String stopDebugEngine(String apId);
|
String stopDebugEngine(String apId);
|
||||||
|
|
||||||
|
String processBlinkRequest(String apId, boolean blinkAllLEDs);
|
||||||
|
|
||||||
void processConfigChanged(String apId);
|
void processConfigChanged(String apId);
|
||||||
|
|
||||||
void processClientBlocklistChange(String apId, List<MacAddress> blockList);
|
void processClientBlocklistChange(String apId, List<MacAddress> blockList);
|
||||||
|
|||||||
@@ -288,6 +288,15 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
|||||||
return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
|
return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String processBlinkRequest(String apId, boolean blinkAllLEDs) {
|
||||||
|
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
|
||||||
|
if (ovsdbSession == null) {
|
||||||
|
throw new IllegalStateException("AP with id " + apId + " is not connected");
|
||||||
|
}
|
||||||
|
|
||||||
|
return ovsdbDao.processBlinkRequest(ovsdbSession.getOvsdbClient(), apId, blinkAllLEDs);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void processConfigChanged(String apId) {
|
public void processConfigChanged(String apId) {
|
||||||
LOG.debug("Starting processConfigChanged for {}", apId);
|
LOG.debug("Starting processConfigChanged for {}", apId);
|
||||||
|
|||||||
@@ -237,4 +237,8 @@ public class OvsdbDao extends OvsdbDaoBase {
|
|||||||
ovsdbStats.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
|
ovsdbStats.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) {
|
||||||
|
return ovsdbNodeConfig.processBlinkRequest(ovsdbClient,apId,blinkAllLEDs);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.vmware.ovsdb.protocol.operation.notation.Condition;
|
|||||||
import com.vmware.ovsdb.protocol.operation.notation.Function;
|
import com.vmware.ovsdb.protocol.operation.notation.Function;
|
||||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
|
import com.vmware.ovsdb.protocol.operation.notation.Row;
|
||||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
|
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.OperationResult;
|
||||||
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
|
import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
|
||||||
import com.vmware.ovsdb.service.OvsdbClient;
|
import com.vmware.ovsdb.service.OvsdbClient;
|
||||||
@@ -59,18 +60,17 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
|
|||||||
|
|
||||||
public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
|
public void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
|
||||||
// /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4"
|
// /usr/opensync/tools/ovsh insert Node_Config module:="syslog" key:="remote" value:="udp:192.168.178.9:1000:4"
|
||||||
// The format is a colon delimited list. log_proto:log_ip:log_port:log_priority
|
// The format is a colon delimited list. log_proto:log_ip:log_port:log_priority
|
||||||
try {
|
try {
|
||||||
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
|
ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails();
|
||||||
if (apNetworkConfig.getSyslogRelay() == null ) {
|
if (apNetworkConfig.getSyslogRelay() == null) {
|
||||||
LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
|
LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (apNetworkConfig.getSyslogRelay().isEnabled()) {
|
if (apNetworkConfig.getSyslogRelay().isEnabled()) {
|
||||||
|
|
||||||
if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null
|
if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null || apNetworkConfig.getSyslogRelay().getSeverity() == null) {
|
||||||
|| apNetworkConfig.getSyslogRelay().getSeverity() == null) {
|
|
||||||
LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
|
LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -78,8 +78,8 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
|
|||||||
Map<String, Value> columns = new HashMap<>();
|
Map<String, Value> columns = new HashMap<>();
|
||||||
columns.put("key", new Atom<>("remote"));
|
columns.put("key", new Atom<>("remote"));
|
||||||
columns.put("module", new Atom<>("syslog"));
|
columns.put("module", new Atom<>("syslog"));
|
||||||
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String
|
String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String.valueOf(
|
||||||
.valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
|
apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" + String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId()));
|
||||||
columns.put("value", new Atom<>(delimitedValue));
|
columns.put("value", new Atom<>(delimitedValue));
|
||||||
List<Operation> operations = new ArrayList<>();
|
List<Operation> operations = new ArrayList<>();
|
||||||
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns)));
|
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns)));
|
||||||
@@ -119,4 +119,52 @@ public class OvsdbNodeConfig extends OvsdbDaoBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String processBlinkRequest(OvsdbClient ovsdbClient, String apId, boolean blinkAllLEDs) {
|
||||||
|
|
||||||
|
String ret = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
LOG.debug("processBlinkRequest set BlinkLEDs to {}", blinkAllLEDs);
|
||||||
|
Map<String, Value> columns = new HashMap<>();
|
||||||
|
if (blinkAllLEDs) {
|
||||||
|
columns.put("module", new Atom<>("led"));
|
||||||
|
columns.put("key", new Atom<>("led_blink"));
|
||||||
|
columns.put("value", new Atom<>("on"));
|
||||||
|
} else {
|
||||||
|
columns.put("module", new Atom<>("led"));
|
||||||
|
columns.put("key", new Atom<>("led_off"));
|
||||||
|
columns.put("value", new Atom<>("off"));
|
||||||
|
}
|
||||||
|
List<Operation> operations = new ArrayList<>();
|
||||||
|
operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("led"))), new Row(columns)));
|
||||||
|
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||||
|
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||||
|
long numUpdates = 0;
|
||||||
|
for (OperationResult res : result) {
|
||||||
|
if (res instanceof UpdateResult) {
|
||||||
|
numUpdates += ((UpdateResult) res).getCount();
|
||||||
|
LOG.debug("processBlinkRequest update result {}", res);
|
||||||
|
ret = "processBlinkRequest update result " + res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (numUpdates == 0) {
|
||||||
|
// no records existed, insert the row instead
|
||||||
|
operations.clear();
|
||||||
|
operations.add(new Insert(nodeConfigTable, new Row(columns)));
|
||||||
|
fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||||
|
result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||||
|
for (OperationResult res : result) {
|
||||||
|
if (res instanceof InsertResult) {
|
||||||
|
LOG.debug("processBlinkRequest insert result {}", res);
|
||||||
|
ret = "processBlinkRequest insert result " + res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
} catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user