aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java')
-rw-r--r--framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java105
1 files changed, 59 insertions, 46 deletions
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
index ef9d444a..8fdf81a2 100644
--- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
+++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/DeviceConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2014-2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,24 +18,26 @@ package org.onosproject.segmentrouting;
import com.google.common.collect.Lists;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.Ip4Prefix;
-import org.onlab.packet.IpPrefix;
import org.onlab.packet.MacAddress;
+import org.onosproject.incubator.net.config.basics.ConfigException;
+import org.onosproject.incubator.net.config.basics.InterfaceConfig;
+import org.onosproject.incubator.net.intf.Interface;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.host.InterfaceIpAddress;
+import org.onosproject.segmentrouting.config.SegmentRoutingConfig;
+import org.onosproject.segmentrouting.config.SegmentRoutingConfig.AdjacencySid;
import org.onosproject.segmentrouting.grouphandler.DeviceProperties;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
-import org.onosproject.segmentrouting.config.NetworkConfig.SwitchConfig;
-import org.onosproject.segmentrouting.config.NetworkConfigManager;
-import org.onosproject.segmentrouting.config.SegmentRouterConfig;
-import org.onosproject.segmentrouting.config.SegmentRouterConfig.Subnet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import static com.google.common.base.Preconditions.checkNotNull;
-
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* Segment Routing configuration component that reads the
@@ -50,7 +52,6 @@ public class DeviceConfiguration implements DeviceProperties {
.getLogger(DeviceConfiguration.class);
private final List<Integer> allSegmentIds = new ArrayList<>();
private final HashMap<DeviceId, SegmentRouterInfo> deviceConfigMap = new HashMap<>();
- private final NetworkConfigManager configService;
private class SegmentRouterInfo {
int nodeSid;
@@ -60,48 +61,60 @@ public class DeviceConfiguration implements DeviceProperties {
boolean isEdge;
HashMap<PortNumber, Ip4Address> gatewayIps;
HashMap<PortNumber, Ip4Prefix> subnets;
- List<SegmentRouterConfig.AdjacencySid> adjacencySids;
+ List<AdjacencySid> adjacencySids;
}
/**
* Constructor. Reads all the configuration for all devices of type
* Segment Router and organizes into various maps for easier access.
- *
- * @param configService handle to network configuration manager
- * component from where the relevant configuration is retrieved.
*/
- public DeviceConfiguration(NetworkConfigManager configService) {
- this.configService = checkNotNull(configService);
- List<SwitchConfig> allSwitchCfg =
- this.configService.getConfiguredAllowedSwitches();
- for (SwitchConfig cfg : allSwitchCfg) {
- if (!(cfg instanceof SegmentRouterConfig)) {
- continue;
- }
+ public DeviceConfiguration(NetworkConfigRegistry cfgService) {
+ // Read config from device subject, excluding gatewayIps and subnets.
+ Set<DeviceId> deviceSubjects =
+ cfgService.getSubjects(DeviceId.class, SegmentRoutingConfig.class);
+ deviceSubjects.forEach(subject -> {
+ SegmentRoutingConfig config =
+ cfgService.getConfig(subject, SegmentRoutingConfig.class);
SegmentRouterInfo info = new SegmentRouterInfo();
- info.nodeSid = ((SegmentRouterConfig) cfg).getNodeSid();
- info.deviceId = ((SegmentRouterConfig) cfg).getDpid();
- info.mac = MacAddress.valueOf(((
- SegmentRouterConfig) cfg).getRouterMac());
- String routerIp = ((SegmentRouterConfig) cfg).getRouterIp();
- Ip4Prefix prefix = checkNotNull(IpPrefix.valueOf(routerIp).getIp4Prefix());
- info.ip = prefix.address();
- info.isEdge = ((SegmentRouterConfig) cfg).isEdgeRouter();
- info.subnets = new HashMap<>();
+ info.deviceId = subject;
+ info.nodeSid = config.getSid();
+ info.ip = config.getIp();
+ info.mac = config.getMac();
+ info.isEdge = config.isEdgeRouter();
+ info.adjacencySids = config.getAdjacencySids();
info.gatewayIps = new HashMap<>();
- for (Subnet s: ((SegmentRouterConfig) cfg).getSubnets()) {
- info.subnets.put(PortNumber.portNumber(s.getPortNo()),
- Ip4Prefix.valueOf(s.getSubnetIp()));
- String gatewayIp = s.getSubnetIp().
- substring(0, s.getSubnetIp().indexOf('/'));
- info.gatewayIps.put(PortNumber.portNumber(s.getPortNo()),
- Ip4Address.valueOf(gatewayIp));
- }
- info.adjacencySids = ((SegmentRouterConfig) cfg).getAdjacencySids();
+ info.subnets = new HashMap<>();
+
this.deviceConfigMap.put(info.deviceId, info);
this.allSegmentIds.add(info.nodeSid);
-
- }
+ });
+
+ // Read gatewayIps and subnets from port subject.
+ Set<ConnectPoint> portSubjects =
+ cfgService.getSubjects(ConnectPoint.class, InterfaceConfig.class);
+ portSubjects.forEach(subject -> {
+ InterfaceConfig config =
+ cfgService.getConfig(subject, InterfaceConfig.class);
+ Set<Interface> networkInterfaces;
+ try {
+ networkInterfaces = config.getInterfaces();
+ } catch (ConfigException e) {
+ log.error("Error loading port configuration");
+ return;
+ }
+ networkInterfaces.forEach(networkInterface -> {
+ DeviceId dpid = networkInterface.connectPoint().deviceId();
+ PortNumber port = networkInterface.connectPoint().port();
+ SegmentRouterInfo info = this.deviceConfigMap.get(dpid);
+
+ Set<InterfaceIpAddress> interfaceAddresses = networkInterface.ipAddresses();
+ interfaceAddresses.forEach(interfaceAddress -> {
+ info.gatewayIps.put(port, interfaceAddress.ipAddress().getIp4Address());
+ info.subnets.put(port, interfaceAddress.subnetAddress().getIp4Prefix());
+ });
+ });
+
+ });
}
/**
@@ -379,8 +392,8 @@ public class DeviceConfiguration implements DeviceProperties {
*/
public List<Integer> getPortsForAdjacencySid(DeviceId deviceId, int sid) {
if (deviceConfigMap.get(deviceId) != null) {
- for (SegmentRouterConfig.AdjacencySid asid : deviceConfigMap.get(deviceId).adjacencySids) {
- if (asid.getAdjSid() == sid) {
+ for (AdjacencySid asid : deviceConfigMap.get(deviceId).adjacencySids) {
+ if (asid.getAsid() == sid) {
return asid.getPorts();
}
}
@@ -402,9 +415,9 @@ public class DeviceConfiguration implements DeviceProperties {
if (deviceConfigMap.get(deviceId).adjacencySids.isEmpty()) {
return false;
} else {
- for (SegmentRouterConfig.AdjacencySid asid:
+ for (AdjacencySid asid:
deviceConfigMap.get(deviceId).adjacencySids) {
- if (asid.getAdjSid() == sid) {
+ if (asid.getAsid() == sid) {
return true;
}
}
@@ -414,4 +427,4 @@ public class DeviceConfiguration implements DeviceProperties {
return false;
}
-}
+} \ No newline at end of file