diff options
Diffstat (limited to 'framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/NetworkConfigHandler.java')
-rw-r--r-- | framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/NetworkConfigHandler.java | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/NetworkConfigHandler.java b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/NetworkConfigHandler.java new file mode 100644 index 00000000..d3468178 --- /dev/null +++ b/framework/src/onos/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/NetworkConfigHandler.java @@ -0,0 +1,157 @@ +/* + * Copyright 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +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.net.DeviceId; +import org.onosproject.net.Link; +import org.onosproject.net.PortNumber; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.Set; + +/** + * This class is temporary class and used only for test. + * It will be replaced with "real" Network Config Manager. + * + * TODO: Knock off this wrapper and directly use DeviceConfiguration class + */ + +public class NetworkConfigHandler { + + private static Logger log = LoggerFactory.getLogger(NetworkConfigHandler.class); + private SegmentRoutingManager srManager; + private DeviceConfiguration deviceConfig; + + public NetworkConfigHandler(SegmentRoutingManager srManager, + DeviceConfiguration deviceConfig) { + this.srManager = srManager; + this.deviceConfig = deviceConfig; + } + + public List<Ip4Address> getGatewayIpAddress(DeviceId deviceId) { + return this.deviceConfig.getSubnetGatewayIps(deviceId); + } + + public IpPrefix getRouterIpAddress(DeviceId deviceId) { + return IpPrefix.valueOf(deviceConfig.getRouterIp(deviceId), 32); + } + + public MacAddress getRouterMacAddress(DeviceId deviceId) { + return deviceConfig.getDeviceMac(deviceId); + } + + public boolean inSameSubnet(DeviceId deviceId, Ip4Address destIp) { + + List<Ip4Prefix> subnets = getSubnetInfo(deviceId); + if (subnets == null) { + return false; + } + + return subnets.stream() + .anyMatch((subnet) -> subnet.contains(destIp)); + } + + public boolean inSameSubnet(Ip4Address address, int sid) { + DeviceId deviceId = deviceConfig.getDeviceId(sid); + if (deviceId == null) { + log.warn("Cannot find a device for SID {}", sid); + return false; + } + + return inSameSubnet(deviceId, address); + } + + public List<Ip4Prefix> getSubnetInfo(DeviceId deviceId) { + return deviceConfig.getSubnets(deviceId); + } + + public int getMplsId(DeviceId deviceId) { + return deviceConfig.getSegmentId(deviceId); + } + + public int getMplsId(MacAddress routerMac) { + return deviceConfig.getSegmentId(routerMac); + } + + public int getMplsId(Ip4Address routerIpAddress) { + return deviceConfig.getSegmentId(routerIpAddress); + } + + public boolean isEcmpNotSupportedInTransit(DeviceId deviceId) { + //TODO: temporarily changing to true to test with Dell + return true; + } + + public boolean isTransitRouter(DeviceId deviceId) { + return !(deviceConfig.isEdgeDevice(deviceId)); + } + + + public boolean isEdgeRouter(DeviceId deviceId) { + return deviceConfig.isEdgeDevice(deviceId); + } + + private List<PortNumber> getPortsToNeighbors(DeviceId deviceId, List<DeviceId> fwdSws) { + + List<PortNumber> portNumbers = Lists.newArrayList(); + + Set<Link> links = srManager.linkService.getDeviceEgressLinks(deviceId); + for (Link link: links) { + for (DeviceId swId: fwdSws) { + if (link.dst().deviceId().equals(swId)) { + portNumbers.add(link.src().port()); + break; + } + } + } + + return portNumbers; + } + + public List<PortNumber> getPortsToDevice(DeviceId deviceId) { + List<PortNumber> portNumbers = Lists.newArrayList(); + + Set<Link> links = srManager.linkService.getDeviceEgressLinks(deviceId); + for (Link link: links) { + if (link.dst().deviceId().equals(deviceId)) { + portNumbers.add(link.src().port()); + } + } + + return portNumbers; + } + + + public Ip4Address getDestinationRouterAddress(Ip4Address destIpAddress) { + return deviceConfig.getRouterIpAddressForASubnetHost(destIpAddress); + } + + public DeviceId getDeviceId(Ip4Address ip4Address) { + return deviceConfig.getDeviceId(ip4Address); + } + + public MacAddress getRouterMac(Ip4Address targetAddress) { + return deviceConfig.getRouterMacForAGatewayIp(targetAddress); + } +} |