LISP: group mapping records in map-register message

Change-Id: I546c761acfbf880717163a035aa691b04337b7bf
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
This commit is contained in:
Filip Tehlar
2017-05-03 10:12:44 +02:00
committed by Florin Coras
parent 342089672d
commit cf121c8313

View File

@ -2454,7 +2454,7 @@ send_map_register (lisp_cp_main_t * lcm, u8 want_map_notif)
u64 nonce = 0;
u32 next_index, *to_next;
ip_address_t *ms = 0;
mapping_t *records, *r, *g;
mapping_t *records, *r, *group, *k;
// TODO: support multiple map servers and do election
if (0 == vec_len (lcm->map_servers))
@ -2481,12 +2481,25 @@ send_map_register (lisp_cp_main_t * lcm, u8 want_map_notif)
if (!key)
continue; /* no secret key -> map-register cannot be sent */
g = 0;
// TODO: group mappings that share common key
vec_add1 (g, r[0]);
b = build_map_register (lcm, &sloc, ms, &nonce, want_map_notif, g,
group = 0;
vec_add1 (group, r[0]);
/* group mappings that share common key */
for (k = r + 1; k < vec_end (records); k++)
{
if (k->key_id != r->key_id)
continue;
if (vec_is_equal (k->key, r->key))
{
vec_add1 (group, k[0]);
k->key = 0; /* don't process this mapping again */
}
}
b = build_map_register (lcm, &sloc, ms, &nonce, want_map_notif, group,
key_id, key, &bi);
vec_free (g);
vec_free (group);
if (!b)
continue;