-void serialize_vec_ip_adjacency (serialize_main_t * m, va_list * va)
-{
- ip_adjacency_t * a = va_arg (*va, ip_adjacency_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- for (i = 0; i < n; i++)
- {
- serialize_integer (m, a[i].heap_handle, sizeof (a[i].heap_handle));
- serialize_integer (m, a[i].n_adj, sizeof (a[i].n_adj));
- serialize_integer (m, a[i].lookup_next_index, sizeof (a[i].lookup_next_index_as_int));
- switch (a[i].lookup_next_index)
- {
- case IP_LOOKUP_NEXT_LOCAL:
- serialize_integer (m, a[i].if_address_index, sizeof (a[i].if_address_index));
- break;
-
- case IP_LOOKUP_NEXT_ARP:
- serialize_integer (m, a[i].if_address_index, sizeof (a[i].if_address_index));
- serialize_integer (m, a[i].rewrite_header.sw_if_index, sizeof (a[i].rewrite_header.sw_if_index));
- break;
-
- case IP_LOOKUP_NEXT_REWRITE:
- serialize (m, serialize_vnet_rewrite, &a[i].rewrite_header, sizeof (a[i].rewrite_data));
- break;
-
- default:
- /* nothing else to serialize. */
- break;
- }
- }
-}
-
-void unserialize_vec_ip_adjacency (serialize_main_t * m, va_list * va)
-{
- ip_adjacency_t * a = va_arg (*va, ip_adjacency_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- ip_poison_adjacencies (a, n);
- for (i = 0; i < n; i++)
- {
- unserialize_integer (m, &a[i].heap_handle, sizeof (a[i].heap_handle));
- unserialize_integer (m, &a[i].n_adj, sizeof (a[i].n_adj));
- unserialize_integer (m, &a[i].lookup_next_index_as_int, sizeof (a[i].lookup_next_index_as_int));
- switch (a[i].lookup_next_index)
- {
- case IP_LOOKUP_NEXT_LOCAL:
- unserialize_integer (m, &a[i].if_address_index, sizeof (a[i].if_address_index));
- break;
-
- case IP_LOOKUP_NEXT_ARP:
- unserialize_integer (m, &a[i].if_address_index, sizeof (a[i].if_address_index));
- unserialize_integer (m, &a[i].rewrite_header.sw_if_index, sizeof (a[i].rewrite_header.sw_if_index));
- break;
-
- case IP_LOOKUP_NEXT_REWRITE:
- unserialize (m, unserialize_vnet_rewrite, &a[i].rewrite_header, sizeof (a[i].rewrite_data));
- break;
-
- default:
- /* nothing else to unserialize. */
- break;
- }
- }
-}
-
-static void serialize_vec_ip_multipath_next_hop (serialize_main_t * m, va_list * va)
-{
- ip_multipath_next_hop_t * nh = va_arg (*va, ip_multipath_next_hop_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- for (i = 0; i < n; i++)
- {
- serialize_integer (m, nh[i].next_hop_adj_index, sizeof (nh[i].next_hop_adj_index));
- serialize_integer (m, nh[i].weight, sizeof (nh[i].weight));
- }
-}
-
-static void unserialize_vec_ip_multipath_next_hop (serialize_main_t * m, va_list * va)
-{
- ip_multipath_next_hop_t * nh = va_arg (*va, ip_multipath_next_hop_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- for (i = 0; i < n; i++)
- {
- unserialize_integer (m, &nh[i].next_hop_adj_index, sizeof (nh[i].next_hop_adj_index));
- unserialize_integer (m, &nh[i].weight, sizeof (nh[i].weight));
- }
-}
-
-static void serialize_vec_ip_multipath_adjacency (serialize_main_t * m, va_list * va)
-{
- ip_multipath_adjacency_t * a = va_arg (*va, ip_multipath_adjacency_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- for (i = 0; i < n; i++)
- {
-#define foreach_ip_multipath_adjacency_field \
- _ (adj_index) _ (n_adj_in_block) _ (reference_count) \
- _ (normalized_next_hops.count) \
- _ (normalized_next_hops.heap_offset) \
- _ (normalized_next_hops.heap_handle) \
- _ (unnormalized_next_hops.count) \
- _ (unnormalized_next_hops.heap_offset) \
- _ (unnormalized_next_hops.heap_handle)
-
-#define _(f) serialize_integer (m, a[i].f, sizeof (a[i].f));
- foreach_ip_multipath_adjacency_field;
-#undef _
- }
-}
-
-static void unserialize_vec_ip_multipath_adjacency (serialize_main_t * m, va_list * va)
-{
- ip_multipath_adjacency_t * a = va_arg (*va, ip_multipath_adjacency_t *);
- u32 n = va_arg (*va, u32);
- u32 i;
- for (i = 0; i < n; i++)
- {
-#define _(f) unserialize_integer (m, &a[i].f, sizeof (a[i].f));
- foreach_ip_multipath_adjacency_field;
-#undef _
- }
-}
-
-void serialize_ip_lookup_main (serialize_main_t * m, va_list * va)
-{
- ip_lookup_main_t * lm = va_arg (*va, ip_lookup_main_t *);
-
- /* If this isn't true you need to call e.g. ip4_maybe_remap_adjacencies
- to make it true. */
- ASSERT (lm->n_adjacency_remaps == 0);
-
- serialize (m, serialize_heap, lm->adjacency_heap, serialize_vec_ip_adjacency);
-
- serialize (m, serialize_heap, lm->next_hop_heap, serialize_vec_ip_multipath_next_hop);
- vec_serialize (m, lm->multipath_adjacencies, serialize_vec_ip_multipath_adjacency);
-
- /* Adjacency counters (FIXME disabled for now). */
- if (0)
- serialize (m, serialize_vlib_combined_counter_main, &lm->adjacency_counters, /* incremental */ 0);
-}
-
-void unserialize_ip_lookup_main (serialize_main_t * m, va_list * va)