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