Jonathan Hart
Committed by Brian O'Connor

Cleaned up SDN-IP config reader

Change-Id: I98100a77b7460eeba848c2b7016f51cdcfef072a
......@@ -143,7 +143,7 @@ public class Router implements RouteListener {
}
/**
* Starts the Router.
* Starts the router.
*/
public void start() {
bgpUpdatesExecutor.execute(new Runnable() {
......@@ -161,6 +161,14 @@ public class Router implements RouteListener {
});
}
/**
* Shuts the router down.
*/
public void shutdown() {
bgpUpdatesExecutor.shutdownNow();
bgpIntentsSynchronizerExecutor.shutdownNow();
}
//@Override TODO hook this up to something
public void leaderChanged(boolean isLeader) {
log.debug("Leader changed: {}", isLeader);
......
......@@ -90,6 +90,9 @@ public class SdnIp implements SdnIpService {
@Deactivate
protected void deactivate() {
bgpSessionManager.shutDown();
router.shutdown();
log.info("Stopped");
}
......
......@@ -16,6 +16,7 @@
package org.onlab.onos.sdnip.config;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
......@@ -40,12 +41,8 @@ public class SdnIpConfigReader implements SdnIpConfigService {
private static final String DEFAULT_CONFIG_FILE = "config/sdnip.json";
private String configFileName = DEFAULT_CONFIG_FILE;
//private Map<String, Interface> interfaces;
// We call the BGP routers in our SDN network the BGP speakers, and call
// the BGP routers outside our SDN network the BGP peers.
private Map<String, BgpSpeaker> bgpSpeakers;
private Map<IpAddress, BgpPeer> bgpPeers;
//private InvertedRadixTree<Interface> interfaceRoutes;
private Map<String, BgpSpeaker> bgpSpeakers = new ConcurrentHashMap<>();
private Map<IpAddress, BgpPeer> bgpPeers = new ConcurrentHashMap<>();
/**
* Reads the info contained in the configuration file.
......@@ -58,78 +55,25 @@ public class SdnIpConfigReader implements SdnIpConfigService {
try {
Configuration config = mapper.readValue(gatewaysFile, Configuration.class);
/*interfaces = new ConcurrentHashMap<>();
for (Interface intf : config.getInterfaces()) {
interfaces.put(intf.getName(), intf);
}*/
bgpSpeakers = new ConcurrentHashMap<>();
for (BgpSpeaker speaker : config.getBgpSpeakers()) {
bgpSpeakers.put(speaker.name(), speaker);
}
bgpPeers = new ConcurrentHashMap<>();
for (BgpPeer peer : config.getPeers()) {
bgpPeers.put(peer.ipAddress(), peer);
}
} catch (FileNotFoundException e) {
log.warn("Configuration file not found: {}", configFileName);
} catch (IOException e) {
log.error("Error reading JSON file", e);
//throw new ConfigurationRuntimeException("Error in JSON file", e);
}
// Populate the interface InvertedRadixTree
/*for (Interface intf : interfaces.values()) {
Ip4Prefix prefix = intf.getIp4Prefix();
String binaryString = RouteEntry.createBinaryString(prefix);
interfaceRoutes.put(binaryString, intf);
}*/
}
/*
* To find the Interface which has longest matchable IP prefix (sub-network
* prefix) to next hop IP address.
*
* @param address the IP address of next hop router
* @return the Interface which has longest matchable IP prefix
*/
/*private Interface longestInterfacePrefixMatch(IpAddress address) {
Ip4Prefix prefixToSearchFor =
new Ip4Prefix(address, (short) Ip4Address.BIT_LENGTH);
String binaryString = RouteEntry.createBinaryString(prefixToSearchFor);
Iterator<Interface> it =
interfaceRoutes.getValuesForKeysPrefixing(binaryString).iterator();
Interface intf = null;
// Find the last prefix, which will be the longest prefix
while (it.hasNext()) {
intf = it.next();
}
return intf;
}*/
/*@Override
public Interface getOutgoingInterface(IpAddress dstIpAddress) {
return longestInterfacePrefixMatch(dstIpAddress);
}*/
public void init() {
//interfaceRoutes = new ConcurrentInvertedRadixTree<>(
//new DefaultByteArrayNodeFactory());
// Reading config values
/*String configFilenameParameter = context.getConfigParams(this).get("configfile");
if (configFilenameParameter != null) {
currentConfigFilename = configFilenameParameter;
}*/
log.debug("Config file set to {}", configFileName);
readConfiguration(configFileName);
}
/*@Override
public Map<String, Interface> getInterfaces() {
return Collections.unmodifiableMap(interfaces);
}*/
@Override
public Map<String, BgpSpeaker> getBgpSpeakers() {
return Collections.unmodifiableMap(bgpSpeakers);
......