xref: /dpdk/lib/net/rte_gre.h (revision fba9875559906e04eaeb74532f4cfd51194259a2)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2016 6WIND S.A.
3  */
4 
5 #ifndef _RTE_GRE_H_
6 #define _RTE_GRE_H_
7 
8 #include <stdint.h>
9 #include <rte_byteorder.h>
10 
11 /**
12  * @file
13  *
14  * GRE headers definition.
15  *
16  * Generic Routing Encapsulation (GRE) is a tunneling protocol
17  * that can encapsulate a wide variety of network layer protocols
18  * inside virtual point-to-point links or point-to-multipoint links
19  * over an Internet Protocol network.
20  */
21 
22 /**
23  * GRE Header
24  */
25 __extension__
26 struct __rte_packed_begin rte_gre_hdr {
27 #if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
28 	uint16_t res2:4; /**< Reserved */
29 	uint16_t s:1;    /**< Sequence Number Present bit */
30 	uint16_t k:1;    /**< Key Present bit */
31 	uint16_t res1:1; /**< Reserved */
32 	uint16_t c:1;    /**< Checksum Present bit */
33 	uint16_t ver:3;  /**< Version Number */
34 	uint16_t res3:5; /**< Reserved */
35 #elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
36 	uint16_t c:1;    /**< Checksum Present bit */
37 	uint16_t res1:1; /**< Reserved */
38 	uint16_t k:1;    /**< Key Present bit */
39 	uint16_t s:1;    /**< Sequence Number Present bit */
40 	uint16_t res2:4; /**< Reserved */
41 	uint16_t res3:5; /**< Reserved */
42 	uint16_t ver:3;  /**< Version Number */
43 #endif
44 	rte_be16_t proto;  /**< Protocol Type */
45 } __rte_packed_end;
46 
47 /**
48  * Optional field checksum in GRE header
49  */
50 struct __rte_packed_begin rte_gre_hdr_opt_checksum_rsvd {
51 	rte_be16_t checksum;
52 	rte_be16_t reserved1;
53 } __rte_packed_end;
54 
55 /**
56  * Optional field key in GRE header
57  */
58 struct __rte_packed_begin rte_gre_hdr_opt_key {
59 	rte_be32_t key;
60 } __rte_packed_end;
61 
62 /**
63  * Optional field sequence in GRE header
64  */
65 struct __rte_packed_begin rte_gre_hdr_opt_sequence {
66 	rte_be32_t sequence;
67 } __rte_packed_end;
68 
69 #endif /* RTE_GRE_H_ */
70