diff options
author | Ashlee Young <ashlee@wildernessvoice.com> | 2015-12-06 07:15:03 -0800 |
---|---|---|
committer | Ashlee Young <ashlee@wildernessvoice.com> | 2015-12-08 10:55:21 -0800 |
commit | 76dc892491948adae5e5e62cf94448967e8d865b (patch) | |
tree | 7a33ef05cc583946db21edad627060f280a53549 /framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config | |
parent | d333c63fdec8b064184b0a26f8d777f267577fde (diff) |
Fixes bad POM file with ONOS commit 8c68536972f63069c263635c9d9f4f31d7f3e9a2
Change-Id: I7adb5a2d3738d53dbc41db7577768b0e7ced5450
Signed-off-by: Ashlee Young <ashlee@wildernessvoice.com>
Diffstat (limited to 'framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config')
2 files changed, 170 insertions, 94 deletions
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java index 0ad00679..dbac596d 100644 --- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java +++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/DeviceConfiguration.java @@ -16,7 +16,6 @@ package org.onosproject.segmentrouting.config; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; import org.onlab.packet.Ip4Address; import org.onlab.packet.Ip4Prefix; import org.onlab.packet.MacAddress; @@ -26,7 +25,6 @@ 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.AdjacencySid; import org.onosproject.net.DeviceId; import org.onosproject.net.PortNumber; import org.slf4j.Logger; @@ -34,6 +32,7 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -60,7 +59,7 @@ public class DeviceConfiguration implements DeviceProperties { boolean isEdge; HashMap<PortNumber, Ip4Address> gatewayIps; HashMap<PortNumber, Ip4Prefix> subnets; - List<AdjacencySid> adjacencySids; + Map<Integer, Set<Integer>> adjacencySids; public SegmentRouterInfo() { this.gatewayIps = new HashMap<>(); @@ -83,11 +82,11 @@ public class DeviceConfiguration implements DeviceProperties { cfgService.getConfig(subject, SegmentRoutingConfig.class); SegmentRouterInfo info = new SegmentRouterInfo(); info.deviceId = subject; - info.nodeSid = config.getSid(); - info.ip = config.getIp(); - info.mac = config.getMac(); + info.nodeSid = config.nodeSid(); + info.ip = config.routerIp(); + info.mac = config.routerMac(); info.isEdge = config.isEdgeRouter(); - info.adjacencySids = config.getAdjacencySids(); + info.adjacencySids = config.adjacencySids(); this.deviceConfigMap.put(info.deviceId, info); this.allSegmentIds.add(info.nodeSid); @@ -410,19 +409,13 @@ public class DeviceConfiguration implements DeviceProperties { * * @param deviceId device identification of the router * @param sid adjacency Sid - * @return list of port numbers + * @return set of port numbers */ - public List<Integer> getPortsForAdjacencySid(DeviceId deviceId, int sid) { + public Set<Integer> getPortsForAdjacencySid(DeviceId deviceId, int sid) { SegmentRouterInfo srinfo = deviceConfigMap.get(deviceId); - if (srinfo != null) { - for (AdjacencySid asid : srinfo.adjacencySids) { - if (asid.getAsid() == sid) { - return asid.getPorts(); - } - } - } - - return Lists.newArrayList(); + return srinfo != null ? + ImmutableSet.copyOf(srinfo.adjacencySids.get(sid)) : + ImmutableSet.copyOf(new HashSet<>()); } /** @@ -435,20 +428,6 @@ public class DeviceConfiguration implements DeviceProperties { */ public boolean isAdjacencySid(DeviceId deviceId, int sid) { SegmentRouterInfo srinfo = deviceConfigMap.get(deviceId); - if (srinfo != null) { - if (srinfo.adjacencySids.isEmpty()) { - return false; - } else { - for (AdjacencySid asid: - srinfo.adjacencySids) { - if (asid.getAsid() == sid) { - return true; - } - } - return false; - } - } - - return false; + return srinfo != null && srinfo.adjacencySids.containsKey(sid); } }
\ No newline at end of file diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingConfig.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingConfig.java index 6dc3f0db..f788925c 100644 --- a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingConfig.java +++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/config/SegmentRoutingConfig.java @@ -16,113 +16,210 @@ package org.onosproject.segmentrouting.config; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.collect.ImmutableMap; import org.onlab.packet.Ip4Address; import org.onlab.packet.MacAddress; import org.onosproject.net.DeviceId; import org.onosproject.net.config.Config; -import org.onosproject.net.config.basics.BasicElementConfig; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Optional; +import java.util.Set; /** * Configuration object for Segment Routing Application. */ public class SegmentRoutingConfig extends Config<DeviceId> { - private static final String NAME = "name"; - private static final String IP = "routerIp"; - private static final String MAC = "routerMac"; - private static final String SID = "nodeSid"; - private static final String EDGE = "isEdgeRouter"; - private static final String ADJSID = "adjacencySids"; - - public Optional<String> getName() { + public static final String NAME = "name"; + public static final String IP = "routerIp"; + public static final String MAC = "routerMac"; + public static final String SID = "nodeSid"; + public static final String EDGE = "isEdgeRouter"; + public static final String ADJSIDS = "adjacencySids"; + public static final String ADJSID = "adjSid"; + public static final String PORTS = "ports"; + + @Override + public boolean isValid() { + return hasOnlyFields(NAME, IP, MAC, SID, EDGE, ADJSIDS, ADJSID, PORTS) && + this.name() != null && + this.routerIp() != null && + this.routerMac() != null && + this.nodeSid() != -1 && + this.isEdgeRouter() != null && + this.adjacencySids() != null; + } + + /** + * Gets the name of the router. + * + * @return Optional name of the router. May be empty if not configured. + */ + public Optional<String> name() { String name = get(NAME, null); return name != null ? Optional.of(name) : Optional.empty(); } - public BasicElementConfig setName(String name) { - return (BasicElementConfig) setOrClear(NAME, name); + /** + * Sets the name of the router. + * + * @param name name of the router. + * @return the config of the router. + */ + public SegmentRoutingConfig setName(String name) { + return (SegmentRoutingConfig) setOrClear(NAME, name); } - public Ip4Address getIp() { + /** + * Gets the IP address of the router. + * + * @return IP address of the router. Or null if not configured. + */ + public Ip4Address routerIp() { String ip = get(IP, null); return ip != null ? Ip4Address.valueOf(ip) : null; } - public BasicElementConfig setIp(String ip) { - return (BasicElementConfig) setOrClear(IP, ip); + /** + * Sets the IP address of the router. + * + * @param ip IP address of the router. + * @return the config of the router. + */ + public SegmentRoutingConfig setRouterIp(String ip) { + return (SegmentRoutingConfig) setOrClear(IP, ip); } - public MacAddress getMac() { + /** + * Gets the MAC address of the router. + * + * @return MAC address of the router. Or null if not configured. + */ + public MacAddress routerMac() { String mac = get(MAC, null); return mac != null ? MacAddress.valueOf(mac) : null; } - public BasicElementConfig setMac(String mac) { - return (BasicElementConfig) setOrClear(MAC, mac); + /** + * Sets the MAC address of the router. + * + * @param mac MAC address of the router. + * @return the config of the router. + */ + public SegmentRoutingConfig setRouterMac(String mac) { + return (SegmentRoutingConfig) setOrClear(MAC, mac); } - public int getSid() { + /** + * Gets the node SID of the router. + * + * @return node SID of the router. Or -1 if not configured. + */ + public int nodeSid() { return get(SID, -1); } - public BasicElementConfig setSid(int sid) { - return (BasicElementConfig) setOrClear(SID, sid); + /** + * Sets the node SID of the router. + * + * @param sid node SID of the router. + * @return the config of the router. + */ + public SegmentRoutingConfig setNodeSid(int sid) { + return (SegmentRoutingConfig) setOrClear(SID, sid); } - public boolean isEdgeRouter() { - return get(EDGE, false); + /** + * Checks if the router is an edge router. + * + * @return true if the router is an edge router. + * false if the router is not an edge router. + * null if the value is not configured. + */ + public Boolean isEdgeRouter() { + String isEdgeRouter = get(EDGE, null); + return isEdgeRouter != null ? + Boolean.valueOf(isEdgeRouter) : + null; } - public BasicElementConfig setEdgeRouter(boolean isEdgeRouter) { - return (BasicElementConfig) setOrClear(EDGE, isEdgeRouter); + /** + * Specifies if the router is an edge router. + * + * @param isEdgeRouter true if the router is an edge router. + * @return the config of the router. + */ + public SegmentRoutingConfig setIsEdgeRouter(boolean isEdgeRouter) { + return (SegmentRoutingConfig) setOrClear(EDGE, isEdgeRouter); } - public List<AdjacencySid> getAdjacencySids() { - ArrayList<AdjacencySid> adjacencySids = new ArrayList<>(); - - if (!object.has(ADJSID)) { - return adjacencySids; + /** + * Gets the adjacency SIDs of the router. + * + * @return adjacency SIDs of the router. Or null if not configured. + */ + public Map<Integer, Set<Integer>> adjacencySids() { + if (!object.has(ADJSIDS)) { + return null; } - ArrayNode adjacencySidNodes = (ArrayNode) object.path(ADJSID); - adjacencySidNodes.forEach(adjacencySidNode -> { - int asid = adjacencySidNode.path(AdjacencySid.ASID).asInt(); - - ArrayList<Integer> ports = new ArrayList<Integer>(); - ArrayNode portsNodes = (ArrayNode) adjacencySidNode.path(AdjacencySid.PORTS); - portsNodes.forEach(portNode -> { - ports.add(portNode.asInt()); - }); - - AdjacencySid adjacencySid = new AdjacencySid(asid, ports); - adjacencySids.add(adjacencySid); - }); + Map<Integer, Set<Integer>> adjacencySids = new HashMap<>(); + ArrayNode adjacencySidsNode = (ArrayNode) object.path(ADJSIDS); + for (JsonNode adjacencySidNode : adjacencySidsNode) { + int asid = adjacencySidNode.path(ADJSID).asInt(-1); + if (asid == -1) { + return null; + } + + HashSet<Integer> ports = new HashSet<>(); + ArrayNode portsNode = (ArrayNode) adjacencySidNode.path(PORTS); + for (JsonNode portNode : portsNode) { + int port = portNode.asInt(-1); + if (port == -1) { + return null; + } + ports.add(port); + } + adjacencySids.put(asid, ports); + } - return adjacencySids; + return ImmutableMap.copyOf(adjacencySids); } - public class AdjacencySid { - private static final String ASID = "adjSid"; - private static final String PORTS = "ports"; - - int asid; - List<Integer> ports; - - public AdjacencySid(int asid, List<Integer> ports) { - this.asid = asid; - this.ports = ports; - } + /** + * Sets the adjacency SIDs of the router. + * + * @param adjacencySids adjacency SIDs of the router. + * @return the config of the router. + */ + public SegmentRoutingConfig setAdjacencySids(Map<Integer, Set<Integer>> adjacencySids) { + if (adjacencySids == null) { + object.remove(ADJSIDS); + } else { + ArrayNode adjacencySidsNode = mapper.createArrayNode(); + + adjacencySids.forEach((sid, ports) -> { + ObjectNode adjacencySidNode = mapper.createObjectNode(); + + adjacencySidNode.put(ADJSID, sid); + + ArrayNode portsNode = mapper.createArrayNode(); + ports.forEach(port -> { + portsNode.add(port.toString()); + }); + adjacencySidNode.set(PORTS, portsNode); + + adjacencySidsNode.add(adjacencySidNode); + }); - public int getAsid() { - return asid; + object.set(ADJSIDS, adjacencySidsNode); } - public List<Integer> getPorts() { - return ports; - } + return this; } }
\ No newline at end of file |