blob: 17cfd9671220589c82ec22421fd340ee2d9c325b [file] [log] [blame]
package org.onosproject.segmentrouting;
import org.onlab.packet.Ip4Address;
import org.onlab.packet.MacAddress;
import org.onosproject.grouphandler.DeviceProperties;
import org.onosproject.net.DeviceId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DeviceConfiguration implements DeviceProperties {
private static final Logger log = LoggerFactory
.getLogger(DeviceConfiguration.class);
private final List<Integer> allSegmentIds =
Arrays.asList(101, 102, 103, 104, 105, 106);
private HashMap<DeviceId, Integer> deviceSegmentIdMap =
new HashMap<DeviceId, Integer>() {
{
put(DeviceId.deviceId("of:0000000000000001"), 101);
put(DeviceId.deviceId("of:0000000000000002"), 102);
put(DeviceId.deviceId("of:0000000000000003"), 103);
put(DeviceId.deviceId("of:0000000000000004"), 104);
put(DeviceId.deviceId("of:0000000000000005"), 105);
put(DeviceId.deviceId("of:0000000000000006"), 106);
}
};
private final HashMap<DeviceId, MacAddress> deviceMacMap =
new HashMap<DeviceId, MacAddress>() {
{
put(DeviceId.deviceId("of:0000000000000001"),
MacAddress.valueOf("00:00:00:00:00:01"));
put(DeviceId.deviceId("of:0000000000000002"),
MacAddress.valueOf("00:00:00:00:00:02"));
put(DeviceId.deviceId("of:0000000000000003"),
MacAddress.valueOf("00:00:00:00:00:03"));
put(DeviceId.deviceId("of:0000000000000004"),
MacAddress.valueOf("00:00:00:00:00:04"));
put(DeviceId.deviceId("of:0000000000000005"),
MacAddress.valueOf("00:00:00:00:00:05"));
put(DeviceId.deviceId("of:0000000000000006"),
MacAddress.valueOf("00:00:00:00:00:06"));
}
};
private final HashMap<DeviceId, Ip4Address> deviceIpMap =
new HashMap<DeviceId, Ip4Address>() {
{
put(DeviceId.deviceId("of:0000000000000001"),
Ip4Address.valueOf("192.168.0.1"));
put(DeviceId.deviceId("of:0000000000000002"),
Ip4Address.valueOf("192.168.0.2"));
put(DeviceId.deviceId("of:0000000000000003"),
Ip4Address.valueOf("192.168.0.3"));
put(DeviceId.deviceId("of:0000000000000004"),
Ip4Address.valueOf("192.168.0.4"));
put(DeviceId.deviceId("of:0000000000000005"),
Ip4Address.valueOf("192.168.0.5"));
put(DeviceId.deviceId("of:0000000000000006"),
Ip4Address.valueOf("192.168.0.6"));
}
};
@Override
public int getSegmentId(DeviceId deviceId) {
if (deviceSegmentIdMap.get(deviceId) != null) {
log.debug("getSegmentId for device{} is {}",
deviceId,
deviceSegmentIdMap.get(deviceId));
return deviceSegmentIdMap.get(deviceId);
} else {
throw new IllegalStateException();
}
}
@Override
public MacAddress getDeviceMac(DeviceId deviceId) {
if (deviceMacMap.get(deviceId) != null) {
log.debug("getDeviceMac for device{} is {}",
deviceId,
deviceMacMap.get(deviceId));
return deviceMacMap.get(deviceId);
} else {
throw new IllegalStateException();
}
}
@Override
public boolean isEdgeDevice(DeviceId deviceId) {
if (deviceId.equals(DeviceId.deviceId("of:0000000000000001"))
|| deviceId.equals(DeviceId.deviceId("of:0000000000000006"))) {
return true;
}
return false;
}
@Override
public List<Integer> getAllDeviceSegmentIds() {
return allSegmentIds;
}
/**
* Returns Segment ID for the router with the MAC address given.
*
* @param targetMac Mac address for the router
* @return Segment ID for the router with the MAC address
*/
public int getSegmentId(MacAddress targetMac) {
for (Map.Entry<DeviceId, MacAddress> entry: deviceMacMap.entrySet()) {
if (entry.getValue().equals(targetMac)) {
return deviceSegmentIdMap.get(entry.getKey());
}
}
return -1;
}
/**
* Returns Segment ID for the router withe IP address given.
*
* @param targetAddress IP address of the router
* @return Segment ID for the router with the IP address
*/
public int getSegmentId(Ip4Address targetAddress) {
for (Map.Entry<DeviceId, Ip4Address> entry: deviceIpMap.entrySet()) {
if (entry.getValue().equals(targetAddress)) {
return deviceSegmentIdMap.get(entry.getKey());
}
}
return -1;
}
/**
* Returns Router IP address for the router with the device ID given.
*
* @param deviceId device ID of the router
* @return IP address of the router
*/
public Ip4Address getRouterIp(DeviceId deviceId) {
if (deviceIpMap.get(deviceId) != null) {
log.debug("getDeviceIp for device{} is {}",
deviceId,
deviceIpMap.get(deviceId));
return deviceIpMap.get(deviceId);
} else {
throw new IllegalStateException();
}
}
/**
* Returns the Device ID of the router with the Segment ID given.
*
* @param sid Segment ID of the router
* @return Device ID of the router
*/
public DeviceId getDeviceId(int sid) {
for (Map.Entry<DeviceId, Integer> entry: deviceSegmentIdMap.entrySet()) {
if (entry.getValue() == sid) {
return entry.getKey();
}
}
return null;
}
/**
* Returns the Device ID of the router with the IP address given.
*
* @param ipAddress IP address of the router
* @return Device ID of the router
*/
public DeviceId getDeviceId(Ip4Address ipAddress) {
for (Map.Entry<DeviceId, Ip4Address> entry: deviceIpMap.entrySet()) {
if (entry.getValue().equals(ipAddress)) {
return entry.getKey();
}
}
return null;
}
}