vom: Add support for redirect contracts in gbp
[vpp.git] / src / vlibapi / node_serialize.c
index 575de11..0774eea 100644 (file)
@@ -57,7 +57,7 @@ vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups, u8 * vector,
   u8 *namep;
   u32 name_bytes;
   uword i, j, k;
-  u64 l, v, c, d;
+  u64 l, v, c, d, pmc;
   state_string_enum_t state_code;
 
   serialize_open_vector (sm, vector);
@@ -77,6 +77,8 @@ vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups, u8 * vector,
          v = n->stats_total.vectors - n->stats_last_clear.vectors;
          c = n->stats_total.calls - n->stats_last_clear.calls;
          d = n->stats_total.suspends - n->stats_last_clear.suspends;
+         pmc = n->stats_total.perf_counter_ticks
+           - n->stats_last_clear.perf_counter_ticks;
 
          state_code = STATE_INTERNAL;
 
@@ -124,6 +126,7 @@ vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups, u8 * vector,
 
          serialize_likely_small_unsigned_integer (sm, (u64) state_code);
          serialize_likely_small_unsigned_integer (sm, n->type);
+         serialize_likely_small_unsigned_integer (sm, n->flags);
 
          if (include_nexts)
            {
@@ -148,11 +151,12 @@ vlib_node_serialize (vlib_main_t * vm, vlib_node_t *** node_dups, u8 * vector,
              serialize_integer (sm, v, 8);
              /* Total suspends */
              serialize_integer (sm, d, 8);
+             /* PMC counter */
+             serialize_integer (sm, pmc, 8);
            }
          else                  /* no stats */
            serialize_likely_small_unsigned_integer (sm, 0);
        }
-      vec_free (nodes);
     }
   return (serialize_close_vector (sm));
 }
@@ -167,7 +171,7 @@ vlib_node_unserialize (u8 * vector)
   vlib_node_t **nodes;
   vlib_node_t ***nodes_by_thread = 0;
   int i, j, k;
-  u64 l, v, c, d;
+  u64 l, v, c, d, pmc;
   state_string_enum_t state_code;
   int stats_present;
 
@@ -197,6 +201,7 @@ vlib_node_unserialize (u8 * vector)
          node->state_string = (u8 *) state_strings[state_code];
 
          node->type = unserialize_likely_small_unsigned_integer (sm);
+         node->flags = unserialize_likely_small_unsigned_integer (sm);
          nnexts = unserialize_likely_small_unsigned_integer (sm);
          if (nnexts > 0)
            vec_validate (node->next_nodes, nnexts - 1);
@@ -224,6 +229,9 @@ vlib_node_unserialize (u8 * vector)
              /* Total suspends */
              unserialize_integer (sm, &d, 8);
              node->stats_total.suspends = d;
+             /* PMC counter */
+             unserialize_integer (sm, &pmc, 8);
+             node->stats_total.perf_counter_ticks = pmc;
            }
        }
     }