Implemented VLAN-to-VLAN routing support for SDN-IP.
SDN-IP can now support peering and routing between hosts that are connected
on VLANs.
Changes include:
* Updated NetworkConfigReader app to read (optional) VLAN configuration
* Updated VlanId to support the 'VLAN present' value - in a match this means
that a VLAN tag must be present, but it can contain any value.
* Updated SDN-IP to set destination VLAN tag values if appropriate
* Updated FlowModBuilder and FlowEntryBuilder to support 'VLAN present' value
* Slew of test updates.
Change-Id: Ief48cede5c1fd50e1efa851da5a97fb4a8edda29
diff --git a/apps/config/src/main/java/org/onosproject/config/AddressEntry.java b/apps/config/src/main/java/org/onosproject/config/AddressEntry.java
index e1fe288..caaee6f 100644
--- a/apps/config/src/main/java/org/onosproject/config/AddressEntry.java
+++ b/apps/config/src/main/java/org/onosproject/config/AddressEntry.java
@@ -27,6 +27,7 @@
private long portNumber;
private List<String> ipAddresses;
private String macAddress;
+ private Short vlan;
public String getDpid() {
return dpid;
@@ -63,4 +64,13 @@
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}
+
+ public Short getVlan() {
+ return vlan;
+ }
+
+ @JsonProperty("vlan")
+ public void setVlan(short vlan) {
+ this.vlan = vlan;
+ }
}
diff --git a/apps/config/src/main/java/org/onosproject/config/NetworkConfigReader.java b/apps/config/src/main/java/org/onosproject/config/NetworkConfigReader.java
index ffddfea..1868a70 100644
--- a/apps/config/src/main/java/org/onosproject/config/NetworkConfigReader.java
+++ b/apps/config/src/main/java/org/onosproject/config/NetworkConfigReader.java
@@ -28,15 +28,16 @@
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.MacAddress;
+import org.onlab.packet.VlanId;
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
import org.onosproject.net.host.HostAdminService;
import org.onosproject.net.host.InterfaceIpAddress;
import org.onosproject.net.host.PortAddresses;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.IpPrefix;
-import org.onlab.packet.MacAddress;
import org.slf4j.Logger;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -115,7 +116,8 @@
try {
String[] splits = strIp.split("/");
if (splits.length != 2) {
- throw new IllegalArgumentException("Invalid IP address and prefix length format");
+ throw new IllegalArgumentException(
+ "Invalid IP address and prefix length format");
}
// NOTE: IpPrefix will mask-out the bits after the prefix length.
IpPrefix subnet = IpPrefix.valueOf(strIp);
@@ -138,8 +140,21 @@
}
}
+ VlanId vlan = null;
+ if (entry.getVlan() == null) {
+ vlan = VlanId.NONE;
+ } else {
+ try {
+ vlan = VlanId.vlanId(entry.getVlan());
+ } catch (IllegalArgumentException e) {
+ log.warn("Bad format for VLAN id in config: {}",
+ entry.getVlan());
+ vlan = VlanId.NONE;
+ }
+ }
+
PortAddresses addresses = new PortAddresses(cp,
- interfaceIpAddresses, macAddress);
+ interfaceIpAddresses, macAddress, vlan);
hostAdminService.bindAddressesToPort(addresses);
}
}
diff --git a/apps/config/src/main/resources/addresses.json b/apps/config/src/main/resources/addresses.json
index fa00eae..a88ed62 100644
--- a/apps/config/src/main/resources/addresses.json
+++ b/apps/config/src/main/resources/addresses.json
@@ -4,13 +4,15 @@
"dpid" : "00:00:00:00:00:00:00:a3",
"port" : "1",
"ips" : ["192.168.10.101/24"],
- "mac" : "00:00:00:00:00:01"
+ "mac" : "00:00:00:00:00:01",
+ "vlan" : "1"
},
{
"dpid" : "00:00:00:00:00:00:00:a5",
"port" : "1",
"ips" : ["192.168.20.101/24"],
- "mac" : "00:00:00:00:00:01"
+ "mac" : "00:00:00:00:00:01",
+ "vlan" : "2"
},
{
"dpid" : "00:00:00:00:00:00:00:a2",