ipsec: IPSec protection for multi-point tunnel interfaces
[vpp.git] / src / vnet / lisp-gpe / lisp_gpe_tunnel.c
index 2ce4e8b..0373542 100644 (file)
@@ -50,8 +50,9 @@ lisp_gpe_tunnel_build_rewrite (const lisp_gpe_tunnel_t * lgt,
   lisp_gpe_header_t *lisp0;
   u8 *rw = 0;
   int len;
+  gpe_encap_mode_t encap_mode = vnet_gpe_get_encap_mode ();
 
-  if (IP4 == ip_addr_version (&lgt->key->lcl))
+  if (AF_IP4 == ip_addr_version (&lgt->key->lcl))
     {
       ip4_udp_lisp_gpe_header_t *h0;
       ip4_header_t *ip0;
@@ -111,6 +112,10 @@ lisp_gpe_tunnel_build_rewrite (const lisp_gpe_tunnel_t * lgt,
     }
 
   lisp0->flags = ladj->flags;
+  if (GPE_ENCAP_VXLAN == encap_mode)
+    /* unset P flag */
+    lisp0->flags &= ~LISP_GPE_FLAGS_P;
+
   lisp0->ver_res = 0;
   lisp0->res = 0;
   lisp0->next_protocol = payload_proto;
@@ -156,10 +161,10 @@ lisp_gpe_tunnel_find_or_create_and_lock (const locator_pair_t * pair,
   if (NULL == lgt)
     {
       pool_get (lisp_gpe_tunnel_pool, lgt);
-      memset (lgt, 0, sizeof (*lgt));
+      clib_memset (lgt, 0, sizeof (*lgt));
 
       lgt->key = clib_mem_alloc (sizeof (*lgt->key));
-      memset (lgt->key, 0, sizeof (*lgt->key));
+      clib_memset (lgt->key, 0, sizeof (*lgt->key));
 
       lgt->key->rmt = pair->rmt_loc;
       lgt->key->lcl = pair->lcl_loc;
@@ -174,10 +179,9 @@ lisp_gpe_tunnel_find_or_create_and_lock (const locator_pair_t * pair,
       lgt->fib_entry_index = fib_table_entry_special_add (rloc_fib_index,
                                                          &pfx,
                                                          FIB_SOURCE_RR,
-                                                         FIB_ENTRY_FLAG_NONE,
-                                                         ADJ_INDEX_INVALID);
+                                                         FIB_ENTRY_FLAG_NONE);
 
-      hash_set_mem (lisp_gpe_tunnel_db, &lgt->key,
+      hash_set_mem (lisp_gpe_tunnel_db, lgt->key,
                    (lgt - lisp_gpe_tunnel_pool));
     }
 
@@ -196,7 +200,7 @@ lisp_gpe_tunnel_unlock (index_t lgti)
 
   if (0 == lgt->locks)
     {
-      hash_unset_mem (lisp_gpe_tunnel_db, &lgt->key);
+      hash_unset_mem (lisp_gpe_tunnel_db, lgt->key);
       clib_mem_free (lgt->key);
       pool_put (lisp_gpe_tunnel_pool, lgt);
     }