Carry information about source ONOS node in each route.

Change-Id: I4877a048771935e3dbe310272e0b82c77b8678af
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
index 0ae4952..31fe8b7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/routing/Route.java
@@ -18,6 +18,7 @@
 
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.NodeId;
 
 import java.util.Objects;
 
@@ -33,6 +34,8 @@
     private static final String VERSION_MISMATCH =
             "Prefix and next hop must be in the same address family";
 
+    private static final NodeId UNDEFINED = new NodeId("-");
+
     /**
      * Source of the route.
      */
@@ -61,15 +64,28 @@
     private final Source source;
     private final IpPrefix prefix;
     private final IpAddress nextHop;
+    private final NodeId sourceNode;
 
     /**
      * Creates a route.
      *
      * @param source route source
      * @param prefix IP prefix
-     * @param nextHop net hop IP address
+     * @param nextHop next hop IP address
      */
     public Route(Source source, IpPrefix prefix, IpAddress nextHop) {
+        this(source, prefix, nextHop, UNDEFINED);
+    }
+
+    /**
+     * Creates a route.
+     *
+     * @param source route source
+     * @param prefix IP prefix
+     * @param nextHop next hop IP address
+     * @param sourceNode ONOS node the route was sourced from
+     */
+    public Route(Source source, IpPrefix prefix, IpAddress nextHop, NodeId sourceNode) {
         checkNotNull(prefix);
         checkNotNull(nextHop);
         checkArgument(prefix.version().equals(nextHop.version()), VERSION_MISMATCH);
@@ -77,6 +93,7 @@
         this.source = checkNotNull(source);
         this.prefix = prefix;
         this.nextHop = nextHop;
+        this.sourceNode = checkNotNull(sourceNode);
     }
 
     /**
@@ -106,6 +123,15 @@
         return nextHop;
     }
 
+    /**
+     * Returns the ONOS node the route was sourced from.
+     *
+     * @return ONOS node ID
+     */
+    public NodeId sourceNode() {
+        return sourceNode;
+    }
+
     @Override
     public int hashCode() {
         return Objects.hash(prefix, nextHop);