ONOS-5784: Empty latitude/longitude in ONOS Web UI
- (part one)
- Enhanced HostManager to react to NetworkConfigEvents such that
it applies annotations to relevant host instances from the
config data.
- A little refactoring in DeviceManager.
- Updated topoModel.js to use updated field names latOrY/longOrX.
Change-Id: I06536a6b2279291ffe638549a80b56a9fe94f48a
(cherry picked from commit 78193fd06661a7fa524c8b3a8fa7ddb69d7437c9)
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index 8a3cf7d..06f3120 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -30,17 +30,16 @@
import org.onlab.util.Tools;
import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.incubator.net.intf.InterfaceService;
-import org.onosproject.net.edge.EdgePortService;
-import org.onosproject.net.provider.AbstractListenerProviderRegistry;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigService;
-import org.onosproject.net.config.basics.BasicHostConfig;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Host;
import org.onosproject.net.HostId;
+import org.onosproject.net.config.NetworkConfigEvent;
+import org.onosproject.net.config.NetworkConfigListener;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.BasicHostConfig;
import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.edge.EdgePortService;
import org.onosproject.net.host.HostAdminService;
import org.onosproject.net.host.HostDescription;
import org.onosproject.net.host.HostEvent;
@@ -52,6 +51,7 @@
import org.onosproject.net.host.HostStore;
import org.onosproject.net.host.HostStoreDelegate;
import org.onosproject.net.packet.PacketService;
+import org.onosproject.net.provider.AbstractListenerProviderRegistry;
import org.onosproject.net.provider.AbstractProviderService;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
@@ -64,8 +64,9 @@
import static org.onlab.packet.IPv6.getLinkLocalAddress;
import static org.onosproject.net.link.ProbedLinkProvider.DEFAULT_MAC;
import static org.onosproject.security.AppGuard.checkPermission;
+import static org.onosproject.security.AppPermission.Type.HOST_EVENT;
+import static org.onosproject.security.AppPermission.Type.HOST_READ;
import static org.slf4j.LoggerFactory.getLogger;
-import static org.onosproject.security.AppPermission.Type.*;
/**
* Provides basic implementation of the host SB & NB APIs.
@@ -149,7 +150,7 @@
}
@Modified
- public void modified(ComponentContext context) {
+ public void modified(ComponentContext context) {
boolean oldValue = monitorHosts;
readComponentConfiguration(context);
if (probeRate > 0) {
@@ -183,7 +184,7 @@
} else {
monitorHosts = flag;
log.info("Configured. monitorHosts {}",
- monitorHosts ? "enabled" : "disabled");
+ monitorHosts ? "enabled" : "disabled");
}
Long longValue = Tools.getLongProperty(properties, "probeRate");
@@ -217,24 +218,22 @@
/**
* Starts monitoring the hosts by IP Address.
- *
*/
private void startMonitoring() {
store.getHosts().forEach(host -> {
- host.ipAddresses().forEach(ip -> {
- monitor.addMonitoringFor(ip);
+ host.ipAddresses().forEach(ip -> {
+ monitor.addMonitoringFor(ip);
});
});
}
/**
* Stops monitoring the hosts by IP Address.
- *
*/
private void stopMonitoring() {
store.getHosts().forEach(host -> {
- host.ipAddresses().forEach(ip -> {
- monitor.stopMonitoring(ip);
+ host.ipAddresses().forEach(ip -> {
+ monitor.stopMonitoring(ip);
});
});
}
@@ -447,27 +446,49 @@
// links that the config does not allow
private class InternalNetworkConfigListener implements NetworkConfigListener {
@Override
+ public boolean isRelevant(NetworkConfigEvent event) {
+ return (event.type() == NetworkConfigEvent.Type.CONFIG_ADDED
+ || event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)
+ && (event.configClass().equals(BasicHostConfig.class));
+ }
+
+ @Override
public void event(NetworkConfigEvent event) {
- if ((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
- event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED) &&
- event.configClass().equals(BasicHostConfig.class)) {
- log.debug("Detected host network config event {}", event.type());
- kickOutBadHost(((HostId) event.subject()));
+ log.debug("Detected host network config event {}", event.type());
+ HostEvent he = null;
+
+ HostId hostId = (HostId) event.subject();
+ BasicHostConfig cfg =
+ networkConfigService.getConfig(hostId, BasicHostConfig.class);
+
+ if (!isAllowed(cfg)) {
+ kickOutBadHost(hostId);
+ } else {
+ Host host = getHost(hostId);
+ HostDescription desc =
+ (host == null) ? null : BasicHostOperator.descriptionOf(host);
+ desc = BasicHostOperator.combine(cfg, desc);
+ if (desc != null) {
+ he = store.createOrUpdateHost(host.providerId(), hostId, desc, false);
+ }
+ }
+
+ if (he != null) {
+ post(he);
}
}
}
- // checks if the specified host is allowed by the BasicHostConfig
- // and if not, removes it
+ // by default allowed, otherwise check flag
+ private boolean isAllowed(BasicHostConfig cfg) {
+ return (cfg == null || cfg.isAllowed());
+ }
+
+ // removes the specified host, if it exists
private void kickOutBadHost(HostId hostId) {
- BasicHostConfig cfg = networkConfigService.getConfig(hostId, BasicHostConfig.class);
- if (cfg != null && !cfg.isAllowed()) {
- Host badHost = getHost(hostId);
- if (badHost != null) {
- removeHost(hostId);
- } else {
- log.info("Failed removal: Host {} does not exist", hostId);
- }
+ Host badHost = getHost(hostId);
+ if (badHost != null) {
+ removeHost(hostId);
}
}
}