diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java index c15fc3a..bcd4170 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java @@ -248,7 +248,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { OpensyncAPConfig opensyncAPConfig = extIntegrationInterface.getApConfig(apId); if (opensyncAPConfig != null) { - ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig); + ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig); ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig); @@ -319,7 +319,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { extIntegrationInterface.clearEquipmentStatus(apId); - ovsdbDao.configureNtpServer(ovsdbClient, opensyncAPConfig); + ovsdbDao.configureNode(ovsdbClient, opensyncAPConfig); ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig); ovsdbDao.configureGreTunnels(ovsdbClient, opensyncAPConfig); ovsdbDao.createVlanNetworkInterfaces(ovsdbClient, opensyncAPConfig); 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 f0437b3..3d11125 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 @@ -84,9 +84,17 @@ public class OvsdbDao extends OvsdbDaoBase { ovsdbNetwork.configureInterfaces(ovsdbClient); } - public void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { + public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { + configureNtpServer(ovsdbClient,opensyncAPConfig);configureSyslog(ovsdbClient, opensyncAPConfig); + } + + void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { ovsdbNodeConfig.configureNtpServer(ovsdbClient, opensyncAPConfig); } + + void configureSyslog(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { + ovsdbNodeConfig.configureSyslog(ovsdbClient, opensyncAPConfig); + } public void configureRadsecRadiusAndRealm(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { ovsdbRadiusProxyConfig.configureRadius(ovsdbClient, opensyncAPConfig); diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java index 1e97c9e..7b85c06 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNodeConfig.java @@ -1,3 +1,4 @@ + package com.telecominfraproject.wlan.opensync.ovsdb.dao; import java.util.ArrayList; @@ -15,6 +16,8 @@ import org.springframework.stereotype.Component; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration; import com.vmware.ovsdb.exception.OvsdbClientException; +import com.vmware.ovsdb.protocol.operation.Delete; +import com.vmware.ovsdb.protocol.operation.Insert; import com.vmware.ovsdb.protocol.operation.Operation; import com.vmware.ovsdb.protocol.operation.Update; import com.vmware.ovsdb.protocol.operation.notation.Atom; @@ -23,6 +26,7 @@ import com.vmware.ovsdb.protocol.operation.notation.Function; import com.vmware.ovsdb.protocol.operation.notation.Row; import com.vmware.ovsdb.protocol.operation.notation.Value; import com.vmware.ovsdb.protocol.operation.result.OperationResult; +import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.service.OvsdbClient; @Component @@ -33,8 +37,7 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { public void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { try { - ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile() - .getDetails(); + ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails(); if (apNetworkConfig.getNtpServer() == null || apNetworkConfig.getNtpServer().getValue() == null) { LOG.info("Cannot configure NTP server to null value. {}", apNetworkConfig); return; @@ -43,8 +46,7 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { Map updateColumns = new HashMap<>(); updateColumns.put("value", new Atom<>(apNetworkConfig.getNtpServer().getValue())); List operations = new ArrayList<>(); - operations.add(new Update(nodeConfigTable, - List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp"))), new Row(updateColumns))); + operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("ntp"))), new Row(updateColumns))); CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); for (OperationResult res : result) { @@ -54,4 +56,67 @@ public class OvsdbNodeConfig extends OvsdbDaoBase { throw new RuntimeException(e); } } + + 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" + // The format is a colon delimited list. log_proto:log_ip:log_port:log_priority + try { + ApNetworkConfiguration apNetworkConfig = (ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails(); + if (apNetworkConfig.getSyslogRelay() == null ) { + LOG.info("Cannot configure syslog to null value. {}", apNetworkConfig); + return; + } + + if (apNetworkConfig.getSyslogRelay().isEnabled()) { + + if (apNetworkConfig.getSyslogRelay().getSrvHostIp() == null + || apNetworkConfig.getSyslogRelay().getSeverity() == null) { + LOG.info("Cannot configure syslog remote_logging without SrvHostIp and Severity values. {}", apNetworkConfig); + return; + } + LOG.debug("configureSyslog remote_logging to {}", apNetworkConfig.getSyslogRelay()); + Map columns = new HashMap<>(); + columns.put("key", new Atom<>("remote")); + columns.put("module", new Atom<>("syslog")); + String delimitedValue = "udp:" + apNetworkConfig.getSyslogRelay().getSrvHostIp().getHostAddress() + ":" + String + .valueOf(apNetworkConfig.getSyslogRelay().getSrvHostPort() + ":" +String.valueOf(apNetworkConfig.getSyslogRelay().getSeverity().getId())); + columns.put("value", new Atom<>(delimitedValue)); + List operations = new ArrayList<>(); + operations.add(new Update(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))), new Row(columns))); + CompletableFuture 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("configureSyslog 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) { + LOG.debug("configureSyslog insert result {}", res); + } + } + } else { + LOG.debug("Disable remote_logging", apNetworkConfig.getSyslogRelay()); + List operations = new ArrayList<>(); + operations.add(new Delete(nodeConfigTable, List.of(new Condition("module", Function.EQUALS, new Atom<>("syslog"))))); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); + OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); + for (OperationResult res : result) { + if (res instanceof UpdateResult) { + LOG.debug("configureSyslog disabled remote_logging {}", res); + } + } + } + } catch (OvsdbClientException | InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException(e); + } + + } }