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",