On Nov 27, 2018, at 1:50 PM, Dave Barach (dbarach) <dbar...@cisco.com> wrote:

> After thinking about some of your feedback, I decided to move most of the 
> work back to the vpp side where it probably belonged in the first place.

        ...

> Anyhow, here's what I implemented. Take a look AYC and let me know what you 
> think.
> 
> VPP graph dispatch trace record description. 
> 
>    0                   1                   2                   3
>    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Major Version | Minor Version | NStrings      | ProtoHint     |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Buffer index (big endian FWIW)                                |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   + VPP graph node name ...     ...               | NULL octet    |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Buffer Metadata ASCII string ... ...          | NULL octet    |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Buffer Opaque ASCII string ... ...            | NULL octet    |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Buffer Opaque 2 ASCII string ... ...          | NULL octet    |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | VPP ASCII packet trace (if NStrings > 4) ...  | NULL octet    |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
>   | Packet data (up to 16K)                                       |
>   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
> 
> Graph dispatch records comprise a version stamp, an indication of how many 
> NULL-terminated strings will follow the record header, and a
> protocol hint.
> 
> The buffer index allows downstream consumers of these data to easily 
> filter/track single packets as they traverse the forwarding
> graph.

So does that mean that there might be multiple records in the file for the same 
packet, with all records for the same packet having the same buffer index?

> FWIW, the 32-bit buffer index is stored in big endian format.

If it's only to be used for matching purposes, presumably that means that

        1) its value has no numerical significance;

        2) the only comparisons done on that value are equality comparisons;

so it could be treated as a 4-byte opaque value, in which case the byte order 
doesn't matter.

> As of this writing, major version = 1, minor version = 0; Nstrings will be 
> either 4 or 5.

So smaller or larger values MAY (and probably SHOULD) be treated as errors.

> Here is the current set of protocol hints:
> 
> typedef enum
>  {
>    VLIB_NODE_PROTO_HINT_NONE = 0,
>    VLIB_NODE_PROTO_HINT_ETHERNET,
>    VLIB_NODE_PROTO_HINT_IP4,
>    VLIB_NODE_PROTO_HINT_IP6,
>    VLIB_NODE_PROTO_HINT_TCP,
>    VLIB_NODE_PROTO_HINT_UDP,
>    VLIB_NODE_N_PROTO_HINTS,
>  } vlib_node_proto_hint_t;

So a dissector MAY use that to indicate what the next protocol is.

> Example: VLIB_NODE_PROTO_HINT_IP6 means that the first octet of packet data 
> SHOULD be 0x60, and should begin an ipv6 packet header.

That's SHOULD, not MUST; is there anything else a dissector should do other 
than use the protocol hint for handoff?

_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Reply via email to