Fix vnet unit tests
[vpp.git] / src / vnet / lisp-cp / control.c
index 1ab3973..c009330 100644 (file)
@@ -44,13 +44,6 @@ typedef struct
   u8 smr_invoked;
 } map_request_args_t;
 
-typedef struct
-{
-  u64 nonce;
-  u8 is_rloc_probe;
-  mapping_t *mappings;
-} map_records_arg_t;
-
 u8
 vnet_lisp_get_map_request_mode (void)
 {
@@ -1515,6 +1508,10 @@ update_fwd_entries_by_locator_set (lisp_cp_main_t * lcm, u8 is_local,
 {
   u32 i, *map_indexp;
   u32 **eid_indexes;
+
+  if (vec_len (lcm->locator_set_to_eids) <= ls_index)
+    return;
+
   eid_indexes = vec_elt_at_index (lcm->locator_set_to_eids, ls_index);
 
   for (i = 0; i < vec_len (eid_indexes[0]); i++)
@@ -3481,7 +3478,7 @@ done:
   vec_free (itr_rlocs);
 }
 
-static map_records_arg_t *
+map_records_arg_t *
 parse_map_reply (vlib_buffer_t * b)
 {
   locator_t probed;
@@ -3497,6 +3494,11 @@ parse_map_reply (vlib_buffer_t * b)
   mrep_hdr = vlib_buffer_get_current (b);
   a->nonce = MREP_NONCE (mrep_hdr);
   a->is_rloc_probe = MREP_RLOC_PROBE (mrep_hdr);
+  if (!vlib_buffer_has_space (b, sizeof (*mrep_hdr)))
+    {
+      clib_mem_free (a);
+      return 0;
+    }
   vlib_buffer_pull (b, sizeof (*mrep_hdr));
 
   for (i = 0; i < MREP_REC_COUNT (mrep_hdr); i++)