X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fgre%2Fpacket.h;h=bbd67d565c553c89ad424d4c7d389ef56cb43186;hb=8e22054209ae9c4f08dae16f1aff910d8c8d0b76;hp=64b39f2c40bd5a2496a6fb5a3302001ebdf0706a;hpb=9ff647a995ba43dcee898c1904d9ec8298b069c8;p=vpp.git diff --git a/src/vnet/gre/packet.h b/src/vnet/gre/packet.h index 64b39f2c40b..bbd67d565c5 100644 --- a/src/vnet/gre/packet.h +++ b/src/vnet/gre/packet.h @@ -24,6 +24,7 @@ _ (0x86DD, ip6) \ _ (0x6558, teb) \ _ (0x0806, arp) \ _ (0x8847, mpls_unicast) \ +_ (0x88BE, erspan) \ _ (0x894F, nsh) typedef enum @@ -54,6 +55,114 @@ typedef struct u16 protocol; } gre_header_t; +/* From draft-foschiano-erspan-03.txt + + Different frame variants known as "ERSPAN Types" can be + distinguished based on the GRE "Protocol Type" field value: Type I + and II's value is 0x88BE while Type III's is 0x22EB [ETYPES]. + + GRE header for ERSPAN Type II encapsulation (8 octets [34:41]) + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + |0|0|0|1|0|00000|000000000|00000| Protocol Type for ERSPAN | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Sequence Number (increments per packet per session) | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + Note that in the above GRE header [RFC1701] out of the C, R, K, S, + s, Recur, Flags, Version fields only S (bit 03) may be set to 1. The + other fields are always set to zero. + + ERSPAN Type II's frame format also adds a special 8-octet ERSPAN + "feature" header on top of the MAC/IPv4/GRE headers to enclose the + raw mirrored frames. + + The ERSPAN Type II feature header is described below: + + ERSPAN Type II header (8 octets [42:49]) + 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 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Ver | VLAN | COS | En|T| Session ID | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Reserved | Index | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + + The various fields of the above header are described in this table: + + Field Position Length Definition + [octet:bit] (bits) + + Ver [42:0] 4 ERSPAN Encapsulation version. + This indicates the version of + the ERSPAN encapsulation + specification. Set to 0x1 for + Type II. + + VLAN [42:4] 12 Original VLAN of the frame, + mirrored from the source. + If the En field is set to 11, + the value of VLAN is undefined. + + COS [44:0] 3 Original class of service of the + frame, mirrored from the source. + + En [44:3] 2 The trunk encapsulation type + associated with the ERSPAN source + port for ingress ERSPAN traffic. + + The possible values are: + 00-originally without VLAN tag + 01-originally ISL encapsulated + 10-originally 802.1Q encapsulated + 11-VLAN tag preserved in frame. + + T [44:5] 1 This bit indicates that the frame + copy encapsulated in the ERSPAN + packet has been truncated. This + occurs if the ERSPAN encapsulated + frame exceeds the configured MTU. + + Session ID [44:6] 10 Identification associated with + (ERSPAN ID) each ERSPAN session. Must be + unique between the source and the + receiver(s). (See section below.) + + Reserved [46:0] 12 All bits are set to zero + + Index [47:4] 20 A 20 bit index/port number + associated with the ERSPAN + traffic's port and + direction (ingress/egress). N.B.: + This field is platform dependent. +*/ + +/* *INDENT-OFF* */ +typedef CLIB_PACKED (struct { + u32 seq_num; + union + { + struct + { + u16 ver_vlan; + u16 cos_en_t_session; + u32 res_index; + } t2; + u64 t2_u64; + }; +}) erspan_t2_t; + +typedef CLIB_PACKED (struct { + gre_header_t gre; + erspan_t2_t erspan; +}) erspan_t2_header_t; + +/* *INDENT-ON* */ + +/* u64 template for ERSPAN type 2 header with both EN bits set */ +#define ERSPAN_HDR2 0x1000180000000000ul + #endif /* included_vnet_gre_packet_h */ /*