lib, zebra: add "vrf_id" into the "struct interface"

Later, an interface will belong to a specific VRF. Now we add a
property "vrf_id" to the "struct interface", and keep it as the
default value 0.

This property is shown when displaying interfaces information.
It is also added in some logs.

This is just the preparation to move the interace list into the
"struct vrf". The main logic is not changed.

Signed-off-by: Feng Lu <lu.feng@6wind.com>
Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
diff --git a/lib/if.c b/lib/if.c
index 3a1f9b4..f17e508 100644
--- a/lib/if.c
+++ b/lib/if.c
@@ -454,12 +454,12 @@
   struct connected *c __attribute__((unused));
 
   for (ALL_LIST_ELEMENTS_RO (ifp->connected, node, c))
-    zlog_info ("Interface %s index %d metric %d mtu %d "
+    zlog_info ("Interface %s vrf %u index %d metric %d mtu %d "
 #ifdef HAVE_IPV6
                "mtu6 %d "
 #endif /* HAVE_IPV6 */
                "%s",
-               ifp->name, ifp->ifindex, ifp->metric, ifp->mtu, 
+               ifp->name, ifp->vrf_id, ifp->ifindex, ifp->metric, ifp->mtu,
 #ifdef HAVE_IPV6
                ifp->mtu6,
 #endif /* HAVE_IPV6 */
@@ -675,8 +675,8 @@
   ifp = connected->ifp;
   p = connected->address;
 
-  snprintf (logbuf, BUFSIZ, "%s interface %s %s %s/%d ", 
-	    str, ifp->name, prefix_family_str (p),
+  snprintf (logbuf, BUFSIZ, "%s interface %s vrf %u %s %s/%d ",
+	    str, ifp->name, ifp->vrf_id, prefix_family_str (p),
 	    inet_ntop (p->family, &p->u.prefix, buf, BUFSIZ),
 	    p->prefixlen);
 
diff --git a/lib/if.h b/lib/if.h
index 8081be8..029f57f 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -139,6 +139,8 @@
 #ifdef HAVE_NET_RT_IFLIST
   struct if_data stats;
 #endif /* HAVE_NET_RT_IFLIST */
+
+  vrf_id_t vrf_id;
 };
 
 /* Connected address structure. */
diff --git a/zebra/interface.c b/zebra/interface.c
index 80eb6aa..49d40ba 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -381,21 +381,23 @@
       if (if_data && if_data->shutdown == IF_ZEBRA_SHUTDOWN_ON)
 	{
 	  if (IS_ZEBRA_DEBUG_KERNEL)
-	    zlog_debug ("interface %s index %d is shutdown. Won't wake it up.",
-			ifp->name, ifp->ifindex);
+	    zlog_debug ("interface %s vrf %u index %d is shutdown. "
+			"Won't wake it up.",
+			ifp->name, ifp->vrf_id, ifp->ifindex);
 	  return;
 	}
 
       if_addr_wakeup (ifp);
 
       if (IS_ZEBRA_DEBUG_KERNEL)
-	zlog_debug ("interface %s index %d becomes active.", 
-		    ifp->name, ifp->ifindex);
+	zlog_debug ("interface %s vrf %u index %d becomes active.",
+		    ifp->name, ifp->vrf_id, ifp->ifindex);
     }
   else
     {
       if (IS_ZEBRA_DEBUG_KERNEL)
-	zlog_debug ("interface %s index %d is added.", ifp->name, ifp->ifindex);
+	zlog_debug ("interface %s vrf %u index %d is added.",
+		    ifp->name, ifp->vrf_id, ifp->ifindex);
     }
 }
 
@@ -412,8 +414,8 @@
 
   if (if_is_up(ifp))
     {
-      zlog_err ("interface %s index %d is still up while being deleted.",
-	    ifp->name, ifp->ifindex);
+      zlog_err ("interface %s vrf %u index %d is still up while being deleted.",
+                ifp->name, ifp->vrf_id, ifp->ifindex);
       return;
     }
 
@@ -421,8 +423,8 @@
   UNSET_FLAG (ifp->status, ZEBRA_INTERFACE_ACTIVE);
   
   if (IS_ZEBRA_DEBUG_KERNEL)
-    zlog_debug ("interface %s index %d is now inactive.",
-	       ifp->name, ifp->ifindex);
+    zlog_debug ("interface %s vrf %u index %d is now inactive.",
+                ifp->name, ifp->vrf_id, ifp->ifindex);
 
   /* Delete connected routes from the kernel. */
   if (ifp->connected)
@@ -726,6 +728,8 @@
     vty_out (vty, "down%s", VTY_NEWLINE);
   }
 
+  vty_out (vty, "  vrf: %u%s", ifp->vrf_id, VTY_NEWLINE);
+
   if (ifp->desc)
     vty_out (vty, "  Description: %s%s", ifp->desc,
 	     VTY_NEWLINE);