ONE-2: Add new LISP dump API for lisp gpe
[vpp.git] / vnet / vnet / lisp-gpe / lisp_gpe.c
index 129bfc4..4c39bf9 100644 (file)
@@ -227,19 +227,24 @@ vnet_lisp_gpe_add_del_fwd_entry (vnet_lisp_gpe_add_del_fwd_entry_args_t * a,
   ip_prefix_t * dpref, * spref;
   uword * lookup_next_index, * lgpe_sw_if_index, * lnip;
   u8 ip_ver;
+
   /* treat negative fwd entries separately */
   if (a->is_negative)
     return add_del_negative_fwd_entry (lgm, a);
 
+  dpref = &gid_address_ippref(&a->deid);
+  spref = &gid_address_ippref(&a->seid);
+  ip_ver = ip_prefix_version(dpref);
+
+  a->next_protocol = ip_ver == IP4 ?
+      LISP_GPE_NEXT_PROTO_IP4 : LISP_GPE_NEXT_PROTO_IP6;
+  a->flags |= LISP_GPE_FLAGS_P;
+
   /* add/del tunnel to tunnels pool and prepares rewrite */
   rv = add_del_tunnel (a, &tun_index);
   if (rv)
     return rv;
 
-  dpref = &gid_address_ippref(&a->deid);
-  spref = &gid_address_ippref(&a->seid);
-  ip_ver = ip_prefix_version(dpref);
-
   /* setup adjacency for eid */
   memset (&adj, 0, sizeof(adj));
   adj.n_adj = 1;
@@ -440,6 +445,14 @@ VLIB_CLI_COMMAND (show_lisp_gpe_tunnel_command, static) = {
     .function = show_lisp_gpe_tunnel_command_fn,
 };
 
+u8
+vnet_lisp_gpe_enable_disable_status(void)
+{
+  lisp_gpe_main_t * lgm = &lisp_gpe_main;
+
+  return lgm->is_en;
+}
+
 clib_error_t *
 vnet_lisp_gpe_enable_disable (vnet_lisp_gpe_enable_disable_args_t * a)
 {
@@ -466,6 +479,8 @@ vnet_lisp_gpe_enable_disable (vnet_lisp_gpe_enable_disable_args_t * a)
         {
           /* ask cp to re-add ifaces and defaults */
         }
+
+      lgm->is_en = 1;
     }
   else
     {
@@ -484,7 +499,7 @@ vnet_lisp_gpe_enable_disable (vnet_lisp_gpe_enable_disable_args_t * a)
       vec_foreach(tunnel, tunnels) {
         memset(at, 0, sizeof(at[0]));
         at->is_add = 0;
-        gid_address_type(&at->deid) = IP_PREFIX;
+        gid_address_type(&at->deid) = GID_ADDR_IP_PREFIX;
         ip_prefix_copy(&gid_address_ippref(&at->deid), &tunnel->eid);
         ip_address_copy(&at->dlocator, &tunnel->dst_loc);
         vnet_lisp_gpe_add_del_fwd_entry (at, 0);
@@ -504,6 +519,7 @@ vnet_lisp_gpe_enable_disable (vnet_lisp_gpe_enable_disable_args_t * a)
         vnet_lisp_gpe_add_del_iface(ai, 0);
       }
       vec_free(table_ids);
+      lgm->is_en = 0;
     }
 
   return 0;
@@ -570,7 +586,7 @@ lisp_gpe_init (vlib_main_t *vm)
   udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe, 
                          lisp_gpe_ip4_input_node.index, 1 /* is_ip4 */);
   udp_register_dst_port (vm, UDP_DST_PORT_lisp_gpe6,
-                         lisp_gpe_ip4_input_node.index, 0 /* is_ip4 */);
+                         lisp_gpe_ip6_input_node.index, 0 /* is_ip4 */);
   return 0;
 }