Adding VLAN to PeerConnectivityManager

Change-Id: I695087c108dc4d9d2da61992019d8fa3d08c61c1
diff --git a/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java b/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
index dc1cc81..45cda26 100644
--- a/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
+++ b/apps/routing-api/src/main/java/org/onosproject/routing/config/BgpConfig.java
@@ -22,6 +22,7 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.Sets;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.VlanId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.config.Config;
@@ -41,6 +42,7 @@
     public static final String CONNECT_POINT = "connectPoint";
     public static final String NAME = "name";
     public static final String PEERS = "peers";
+    public static final String VLAN = "vlan";
 
     /**
      * Gets the set of configured BGP speakers.
@@ -69,7 +71,10 @@
                 name = Optional.of(jsonNode.get(NAME).asText());
             }
 
+            VlanId vlan = getVlan(jsonNode);
+
             speakers.add(new BgpSpeakerConfig(name,
+                    vlan,
                     ConnectPoint.deviceConnectPoint(jsonNode.path(CONNECT_POINT).asText()),
                     listenAddresses));
         });
@@ -77,6 +82,15 @@
         return speakers;
     }
 
+    // If configured, it retreives a VLAN Id from a BGP speaker node
+    private VlanId getVlan(JsonNode node) {
+        VlanId vlan = VlanId.NONE;
+        if (!node.path(VLAN).isMissingNode()) {
+            vlan = VlanId.vlanId(node.path(VLAN).asText());
+        }
+        return vlan;
+    }
+
     /**
      * Examines whether a name of BGP speaker exists in configuration.
      *
@@ -102,6 +116,8 @@
 
         speakerNode.put(NAME, speaker.name().get());
 
+        speakerNode.put(VLAN, speaker.vlan().toString());
+
         speakerNode.put(CONNECT_POINT, speaker.connectPoint().elementId().toString()
                 + "/" + speaker.connectPoint().port().toString());
 
@@ -157,8 +173,8 @@
     /**
      * Finds BGP speaker peering with a given external peer.
      *
-     * @param peerAddress peering address to be removed
-     * @return speaker
+     * @param peerAddress BGP peer address
+     * @return BGP speaker
      */
     public BgpSpeakerConfig getSpeakerFromPeer(IpAddress peerAddress) {
         for (BgpConfig.BgpSpeakerConfig speaker : bgpSpeakers()) {
@@ -207,12 +223,14 @@
     public static class BgpSpeakerConfig {
 
         private Optional<String> name;
+        private VlanId vlanId;
         private ConnectPoint connectPoint;
         private Set<IpAddress> peers;
 
-        public BgpSpeakerConfig(Optional<String> name, ConnectPoint connectPoint,
-                                Set<IpAddress> peers) {
+        public BgpSpeakerConfig(Optional<String> name, VlanId vlanId,
+                                ConnectPoint connectPoint, Set<IpAddress> peers) {
             this.name = checkNotNull(name);
+            this.vlanId = checkNotNull(vlanId);
             this.connectPoint = checkNotNull(connectPoint);
             this.peers = checkNotNull(peers);
         }
@@ -221,6 +239,10 @@
             return name;
         }
 
+        public VlanId vlan() {
+            return vlanId;
+        }
+
         public ConnectPoint connectPoint() {
             return connectPoint;
         }
@@ -252,6 +274,7 @@
             if (obj instanceof BgpSpeakerConfig) {
                 final BgpSpeakerConfig that = (BgpSpeakerConfig) obj;
                 return Objects.equals(this.name, that.name) &&
+                        Objects.equals(this.vlanId, that.vlanId) &&
                         Objects.equals(this.connectPoint, that.connectPoint) &&
                         Objects.equals(this.peers, that.peers);
             }
@@ -260,7 +283,7 @@
 
         @Override
         public int hashCode() {
-            return Objects.hash(name, connectPoint, peers);
+            return Objects.hash(name, vlanId, connectPoint, peers);
         }
     }
 }