Buffer metadata change tracker
The mdata plugin uses the vlib main loop “before” performance counter hook to snapshoot buffer metadata before calling the node dispatch function. Similarly, the plugin uses the main loop “after” hook to compare a vectors’ worth of buffer metadata after the fact.
The comparison function is a simple octet-by-octet A != B check. We accumulate changed octets per-node across the entire run, using a single spinlock-protected accumulator.
The “show buffer metadata” command produces a report of all fields whose values are changed by nodes visited during a given run.
Since many fields in the vnet_buffer_opaque_t are union members, it may appear that a certain node changes numerous fields. The entire point of the exercise is to warn developers that if a packet visits node N, data placed into opaque union field F will be affected.
One should never assume much about buffer metadata immutability across arbitrary subgraphs. This tool generates accurate reports, to the extent that one exercises the required subgraph trajectories.