net: add compat headers without rte prefix
[dpdk.git] / lib / librte_net / rte_ip_compat.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 1982, 1986, 1990, 1993
3  *      The Regents of the University of California.
4  * Copyright(c) 2010-2014 Intel Corporation.
5  * Copyright(c) 2014 6WIND S.A.
6  * All rights reserved.
7  */
8
9 #ifndef _RTE_IP_COMPAT_H_
10 #define _RTE_IP_COMPAT_H_
11
12 /**
13  * @file
14  *
15  * IP-related defines
16  */
17
18 #include <stdint.h>
19 #include <netinet/in.h>
20
21 #include <rte_byteorder.h>
22 #include <rte_mbuf.h>
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 /**
29  * IPv4 Header
30  */
31 struct ipv4_hdr {
32         uint8_t  version_ihl;           /**< version and header length */
33         uint8_t  type_of_service;       /**< type of service */
34         uint16_t total_length;          /**< length of packet */
35         uint16_t packet_id;             /**< packet ID */
36         uint16_t fragment_offset;       /**< fragmentation offset */
37         uint8_t  time_to_live;          /**< time to live */
38         uint8_t  next_proto_id;         /**< protocol ID */
39         uint16_t hdr_checksum;          /**< header checksum */
40         uint32_t src_addr;              /**< source address */
41         uint32_t dst_addr;              /**< destination address */
42 } __attribute__((__packed__));
43
44 /** Create IPv4 address */
45 #define IPv4(a,b,c,d) ((uint32_t)(((a) & 0xff) << 24) | \
46                                            (((b) & 0xff) << 16) | \
47                                            (((c) & 0xff) << 8)  | \
48                                            ((d) & 0xff))
49
50 /** Maximal IPv4 packet length (including a header) */
51 #define IPV4_MAX_PKT_LEN        65535
52
53 /** Internet header length mask for version_ihl field */
54 #define IPV4_HDR_IHL_MASK       (0x0f)
55 /**
56  * Internet header length field multiplier (IHL field specifies overall header
57  * length in number of 4-byte words)
58  */
59 #define IPV4_IHL_MULTIPLIER     (4)
60
61 /* Fragment Offset * Flags. */
62 #define IPV4_HDR_DF_SHIFT       14
63 #define IPV4_HDR_MF_SHIFT       13
64 #define IPV4_HDR_FO_SHIFT       3
65
66 #define IPV4_HDR_DF_FLAG        (1 << IPV4_HDR_DF_SHIFT)
67 #define IPV4_HDR_MF_FLAG        (1 << IPV4_HDR_MF_SHIFT)
68
69 #define IPV4_HDR_OFFSET_MASK    ((1 << IPV4_HDR_MF_SHIFT) - 1)
70
71 #define IPV4_HDR_OFFSET_UNITS   8
72
73 /*
74  * IPv4 address types
75  */
76 #define IPV4_ANY              ((uint32_t)0x00000000) /**< 0.0.0.0 */
77 #define IPV4_LOOPBACK         ((uint32_t)0x7f000001) /**< 127.0.0.1 */
78 #define IPV4_BROADCAST        ((uint32_t)0xe0000000) /**< 224.0.0.0 */
79 #define IPV4_ALLHOSTS_GROUP   ((uint32_t)0xe0000001) /**< 224.0.0.1 */
80 #define IPV4_ALLRTRS_GROUP    ((uint32_t)0xe0000002) /**< 224.0.0.2 */
81 #define IPV4_MAX_LOCAL_GROUP  ((uint32_t)0xe00000ff) /**< 224.0.0.255 */
82
83 /*
84  * IPv4 Multicast-related macros
85  */
86 #define IPV4_MIN_MCAST  IPv4(224, 0, 0, 0)          /**< Minimal IPv4-multicast address */
87 #define IPV4_MAX_MCAST  IPv4(239, 255, 255, 255)    /**< Maximum IPv4 multicast address */
88
89 #define IS_IPV4_MCAST(x) \
90         ((x) >= IPV4_MIN_MCAST && (x) <= IPV4_MAX_MCAST) /**< check if IPv4 address is multicast */
91
92 /**
93  * IPv6 Header
94  */
95 struct ipv6_hdr {
96         uint32_t vtc_flow;     /**< IP version, traffic class & flow label. */
97         uint16_t payload_len;  /**< IP packet length - includes sizeof(ip_header). */
98         uint8_t  proto;        /**< Protocol, next header. */
99         uint8_t  hop_limits;   /**< Hop limits. */
100         uint8_t  src_addr[16]; /**< IP address of source host. */
101         uint8_t  dst_addr[16]; /**< IP address of destination host(s). */
102 } __attribute__((__packed__));
103
104 /* IPv6 vtc_flow: IPv / TC / flow_label */
105 #define IPV6_HDR_FL_SHIFT 0
106 #define IPV6_HDR_TC_SHIFT 20
107 #define IPV6_HDR_FL_MASK ((1u << IPV6_HDR_TC_SHIFT) - 1)
108 #define IPV6_HDR_TC_MASK (0xf << IPV6_HDR_TC_SHIFT)
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif /* _RTE_IP_COMPAT_H_ */