Metadata / opaque formatting belongs in vpp
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) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ VPP graph node name ... ... | NULL octet |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Buffer Metadata ... ... | NULL octet |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Buffer Opaque ... ... | NULL octet |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Buffer Opaque 2 ... ... | 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. FWIW, the 32-bit buffer index is stored in big endian format.
As of this writing, major version = 1, minor version = 0. Nstrings
will be either 4 or 5.
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;
Example: VLIB_NODE_PROTO_HINT_IP6 means that the first octet of packet
data SHOULD be 0x60, and should begin an ipv6 packet header.
Change-Id: Idf310bad80cc0e4207394c80f18db5f77c378741
Signed-off-by: Dave Barach <dave@barachs.net>
This commit is contained in:
committed by
Florin Coras
parent
8861c1a1f2
commit
7fff3d2054
@@ -55,6 +55,17 @@ typedef uword (vlib_node_function_t) (struct vlib_main_t * vm,
|
||||
struct vlib_node_runtime_t * node,
|
||||
struct vlib_frame_t * frame);
|
||||
|
||||
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;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
/* An internal node on the call graph (could be output). */
|
||||
@@ -134,6 +145,9 @@ typedef struct _vlib_node_registration
|
||||
/* Node flags. */
|
||||
u16 flags;
|
||||
|
||||
/* protocol at b->data[b->current_data] upon entry to the dispatch fn */
|
||||
u8 protocol_hint;
|
||||
|
||||
/* Size of scalar and vector arguments in bytes. */
|
||||
u16 scalar_size, vector_size;
|
||||
|
||||
@@ -320,6 +334,9 @@ typedef struct vlib_node_t
|
||||
/* Number of bytes of run time data. */
|
||||
u8 runtime_data_bytes;
|
||||
|
||||
/* protocol at b->data[b->current_data] upon entry to the dispatch fn */
|
||||
u8 protocol_hint;
|
||||
|
||||
/* Number of error codes used by this node. */
|
||||
u16 n_errors;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user