Rename reused LISP interfaces 19/2019/2
authorFlorin Coras <fcoras@cisco.com>
Tue, 19 Jul 2016 14:27:08 +0000 (16:27 +0200)
committerChris Luke <chris_luke@comcast.com>
Thu, 21 Jul 2016 13:35:11 +0000 (13:35 +0000)
Change-Id: I0efb4c488ea18504a87c845f8fe399f0333d5be2
Signed-off-by: Florin Coras <fcoras@cisco.com>
vnet/vnet/lisp-gpe/interface.c

index c0371a6..566fe77 100644 (file)
@@ -482,7 +482,8 @@ vnet_lisp_gpe_add_del_iface (vnet_lisp_gpe_add_del_iface_args_t * a,
   vnet_main_t * vnm = lgm->vnet_main;
   vnet_hw_interface_t * hi;
   u32 hw_if_index = ~0, lookup_next_index4, lookup_next_index6, flen;
   vnet_main_t * vnm = lgm->vnet_main;
   vnet_hw_interface_t * hi;
   u32 hw_if_index = ~0, lookup_next_index4, lookup_next_index6, flen;
-  uword * hip, * vni;
+  uword * hip, * vni, * si;
+  u8 * new_name;
 
   if (vnet_lisp_gpe_enable_disable_status() == 0)
     {
 
   if (vnet_lisp_gpe_enable_disable_status() == 0)
     {
@@ -496,7 +497,14 @@ vnet_lisp_gpe_add_del_iface (vnet_lisp_gpe_add_del_iface_args_t * a,
     {
       if (hip)
         {
     {
       if (hip)
         {
-          clib_warning ("Interface for vrf %d already exists", a->table_id);
+          clib_warning ("vrf %d already mapped to a vni", a->table_id);
+          return -1;
+        }
+
+      si = hash_get(lgm->tunnel_term_sw_if_index_by_vni, a->vni);
+      if (si)
+        {
+          clib_warning ("Interface for vni %d already exists", a->vni);
           return -1;
         }
 
           return -1;
         }
 
@@ -509,6 +517,13 @@ vnet_lisp_gpe_add_del_iface (vnet_lisp_gpe_add_del_iface_args_t * a,
 
           hi = vnet_get_hw_interface (vnm, hw_if_index);
 
 
           hi = vnet_get_hw_interface (vnm, hw_if_index);
 
+          /* rename interface */
+          new_name = format (0, "%U", lisp_gpe_device_class.format_device_name,
+                             a->vni);
+          vec_add1(new_name, 0);
+          vnet_rename_interface (vnm, hw_if_index, (char *) new_name);
+          vec_free(new_name);
+
           /* clear old stats of freed interface before reuse */
           vnet_interface_main_t * im = &vnm->interface_main;
           vnet_interface_counter_lock (im);
           /* clear old stats of freed interface before reuse */
           vnet_interface_main_t * im = &vnm->interface_main;
           vnet_interface_counter_lock (im);
@@ -527,7 +542,7 @@ vnet_lisp_gpe_add_del_iface (vnet_lisp_gpe_add_del_iface_args_t * a,
         {
           hw_if_index = vnet_register_interface (vnm,
                                                  lisp_gpe_device_class.index,
         {
           hw_if_index = vnet_register_interface (vnm,
                                                  lisp_gpe_device_class.index,
-                                                 a->table_id,
+                                                 a->vni,
                                                  lisp_gpe_hw_class.index, 0);
           hi = vnet_get_hw_interface (vnm, hw_if_index);
         }
                                                  lisp_gpe_hw_class.index, 0);
           hi = vnet_get_hw_interface (vnm, hw_if_index);
         }