diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2017-05-03 10:12:44 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2017-05-04 07:26:08 +0000 |
commit | cf121c8313187819245e45f11fb49ba1e1ea53ef (patch) | |
tree | 0757f00f4d5750eab5721bacc7dcf6c266d98e47 /src | |
parent | 342089672d7bbbd10066b725345b466d62846f19 (diff) |
LISP: group mapping records in map-register message
Change-Id: I546c761acfbf880717163a035aa691b04337b7bf
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/vnet/lisp-cp/control.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/vnet/lisp-cp/control.c b/src/vnet/lisp-cp/control.c index c0093301..ddaa6f50 100644 --- a/src/vnet/lisp-cp/control.c +++ b/src/vnet/lisp-cp/control.c @@ -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; |