VPP-330 Track pending map-requests with a fifo 03/2403/2
authorFlorin Coras <fcoras@cisco.com>
Mon, 15 Aug 2016 17:16:32 +0000 (19:16 +0200)
committerDave Barach <openvpp@barachs.net>
Tue, 16 Aug 2016 19:01:41 +0000 (19:01 +0000)
Change-Id: Icc64abb91047f756c955c880f6f85b26faef666a
Signed-off-by: Florin Coras <fcoras@cisco.com>
vnet/vnet/lisp-cp/control.c
vnet/vnet/lisp-cp/control.h

index 1b129d2..a6f2003 100644 (file)
@@ -2700,15 +2700,16 @@ _send_encapsulated_map_request (lisp_cp_main_t *lcm,
   if (duplicate_pmr)
     /* if there is a pending request already update it */
     {
-      if (vec_len (duplicate_pmr->nonces) >= PENDING_MREQ_QUEUE_LEN)
+      if (clib_fifo_elts(duplicate_pmr->nonces) >= PENDING_MREQ_QUEUE_LEN)
         {
           /* remove the oldest nonce */
-          u64 * nonce_del = vec_elt_at_index (duplicate_pmr->nonces, 0);
+          u64 CLIB_UNUSED(tmp), * nonce_del;
+          nonce_del = clib_fifo_head(duplicate_pmr->nonces);
           hash_unset (lcm->pending_map_requests_by_nonce, nonce_del[0]);
-          vec_del1 (duplicate_pmr->nonces, 0);
+          clib_fifo_sub1 (duplicate_pmr->nonces, tmp);
         }
 
-      vec_add1 (duplicate_pmr->nonces, nonce);
+      clib_fifo_add1 (duplicate_pmr->nonces, nonce);
       hash_set (lcm->pending_map_requests_by_nonce, nonce,
                 duplicate_pmr - lcm->pending_map_requests_pool);
     }
@@ -2719,7 +2720,7 @@ _send_encapsulated_map_request (lisp_cp_main_t *lcm,
       memset (pmr, 0, sizeof (*pmr));
       gid_address_copy (&pmr->src, seid);
       gid_address_copy (&pmr->dst, deid);
-      vec_add1 (pmr->nonces, nonce);
+      clib_fifo_add1 (pmr->nonces, nonce);
       pmr->is_smr_invoked = is_smr_invoked;
       reset_pending_mr_counters (pmr);
       hash_set (lcm->pending_map_requests_by_nonce, nonce,
@@ -3079,9 +3080,10 @@ process_map_reply (void * arg)
     }
 
   /* remove pending map request entry */
-  vec_foreach (noncep, pmr->nonces)
+  clib_fifo_foreach (noncep, pmr->nonces, ({
     hash_unset(lcm->pending_map_requests_by_nonce, noncep[0]);
-  vec_free(pmr->nonces);
+  }));
+  clib_fifo_free(pmr->nonces);
   pool_put(lcm->pending_map_requests_pool, pmr);
 
 done:
@@ -3366,8 +3368,9 @@ remove_dead_pending_map_requests (lisp_cp_main_t * lcm)
     ({
       if (pmr->to_be_removed)
         {
-          vec_foreach (nonce, pmr->nonces)
+          clib_fifo_foreach (nonce, pmr->nonces, ({
             hash_unset (lcm->pending_map_requests_by_nonce, nonce[0]);
+          }));
 
           vec_add1 (to_be_removed, pmr - lcm->pending_map_requests_pool);
         }
index 0dad64b..0193661 100644 (file)
@@ -22,7 +22,7 @@
 
 #define NUMBER_OF_RETRIES                   1
 #define PENDING_MREQ_EXPIRATION_TIME        3.0 /* seconds */
-#define PENDING_MREQ_QUEUE_LEN              2
+#define PENDING_MREQ_QUEUE_LEN              5
 
 typedef struct
 {