add IPTOS_CLASS_* macros to netinet/ip.h
[oweals/musl.git] / include / netinet / ip.h
1 #ifndef _NETINET_IP_H
2 #define _NETINET_IP_H
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 #include <stdint.h>
9 #include <netinet/in.h>
10 #include <endian.h>
11
12 struct timestamp {
13         uint8_t len;
14         uint8_t ptr;
15 #if __BYTE_ORDER == __LITTLE_ENDIAN
16         unsigned int flags:4;
17         unsigned int overflow:4;
18 #else
19         unsigned int overflow:4;
20         unsigned int flags:4;
21 #endif
22         uint32_t data[9];
23   };
24
25 struct iphdr {
26 #if __BYTE_ORDER == __LITTLE_ENDIAN
27         unsigned int ihl:4;
28         unsigned int version:4;
29 #else
30         unsigned int version:4;
31         unsigned int ihl:4;
32 #endif
33         uint8_t tos;
34         uint16_t tot_len;
35         uint16_t id;
36         uint16_t frag_off;
37         uint8_t ttl;
38         uint8_t protocol;
39         uint16_t check;
40         uint32_t saddr;
41         uint32_t daddr;
42 };
43
44 struct ip {
45 #if __BYTE_ORDER == __LITTLE_ENDIAN
46         unsigned int ip_hl:4;
47         unsigned int ip_v:4;
48 #else
49         unsigned int ip_v:4;
50         unsigned int ip_hl:4;
51 #endif
52         uint8_t ip_tos;
53         uint16_t ip_len;
54         uint16_t ip_id;
55         uint16_t ip_off;
56         uint8_t ip_ttl;
57         uint8_t ip_p;
58         uint16_t ip_sum;
59         struct in_addr ip_src, ip_dst;
60 };
61
62 #define IP_RF 0x8000
63 #define IP_DF 0x4000
64 #define IP_MF 0x2000
65 #define IP_OFFMASK 0x1fff
66
67 struct ip_timestamp {
68         uint8_t ipt_code;
69         uint8_t ipt_len;
70         uint8_t ipt_ptr;
71 #if __BYTE_ORDER == __LITTLE_ENDIAN
72         unsigned int ipt_flg:4;
73         unsigned int ipt_oflw:4;
74 #else
75         unsigned int ipt_oflw:4;
76         unsigned int ipt_flg:4;
77 #endif
78         uint32_t data[9];
79 };
80
81 #define IPVERSION       4
82 #define IP_MAXPACKET    65535
83
84 #define IPTOS_ECN_MASK          0x03
85 #define IPTOS_ECN(x)            ((x) & IPTOS_ECN_MASK)
86 #define IPTOS_ECN_NOT_ECT       0x00
87 #define IPTOS_ECN_ECT1          0x01
88 #define IPTOS_ECN_ECT0          0x02
89 #define IPTOS_ECN_CE            0x03
90
91 #define IPTOS_DSCP_MASK         0xfc
92 #define IPTOS_DSCP(x)           ((x) & IPTOS_DSCP_MASK)
93 #define IPTOS_DSCP_AF11         0x28
94 #define IPTOS_DSCP_AF12         0x30
95 #define IPTOS_DSCP_AF13         0x38
96 #define IPTOS_DSCP_AF21         0x48
97 #define IPTOS_DSCP_AF22         0x50
98 #define IPTOS_DSCP_AF23         0x58
99 #define IPTOS_DSCP_AF31         0x68
100 #define IPTOS_DSCP_AF32         0x70
101 #define IPTOS_DSCP_AF33         0x78
102 #define IPTOS_DSCP_AF41         0x88
103 #define IPTOS_DSCP_AF42         0x90
104 #define IPTOS_DSCP_AF43         0x98
105 #define IPTOS_DSCP_EF           0xb8
106
107 #define IPTOS_CLASS_MASK        0xe0
108 #define IPTOS_CLASS(x)          ((x) & IPTOS_CLASS_MASK)
109 #define IPTOS_CLASS_CS0         0x00
110 #define IPTOS_CLASS_CS1         0x20
111 #define IPTOS_CLASS_CS2         0x40
112 #define IPTOS_CLASS_CS3         0x60
113 #define IPTOS_CLASS_CS4         0x80
114 #define IPTOS_CLASS_CS5         0xa0
115 #define IPTOS_CLASS_CS6         0xc0
116 #define IPTOS_CLASS_CS7         0xe0
117 #define IPTOS_CLASS_DEFAULT     IPTOS_CLASS_CS0
118
119 #define IPTOS_TOS_MASK          0x1E
120 #define IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)
121 #define IPTOS_LOWDELAY          0x10
122 #define IPTOS_THROUGHPUT        0x08
123 #define IPTOS_RELIABILITY       0x04
124 #define IPTOS_LOWCOST           0x02
125 #define IPTOS_MINCOST           IPTOS_LOWCOST
126
127 #define IPTOS_PREC_MASK                 0xe0
128 #define IPTOS_PREC(tos)                ((tos) & IPTOS_PREC_MASK)
129 #define IPTOS_PREC_NETCONTROL           0xe0
130 #define IPTOS_PREC_INTERNETCONTROL      0xc0
131 #define IPTOS_PREC_CRITIC_ECP           0xa0
132 #define IPTOS_PREC_FLASHOVERRIDE        0x80
133 #define IPTOS_PREC_FLASH                0x60
134 #define IPTOS_PREC_IMMEDIATE            0x40
135 #define IPTOS_PREC_PRIORITY             0x20
136 #define IPTOS_PREC_ROUTINE              0x00
137
138 #define IPOPT_COPY              0x80
139 #define IPOPT_CLASS_MASK        0x60
140 #define IPOPT_NUMBER_MASK       0x1f
141
142 #define IPOPT_COPIED(o)         ((o) & IPOPT_COPY)
143 #define IPOPT_CLASS(o)          ((o) & IPOPT_CLASS_MASK)
144 #define IPOPT_NUMBER(o)         ((o) & IPOPT_NUMBER_MASK)
145
146 #define IPOPT_CONTROL           0x00
147 #define IPOPT_RESERVED1         0x20
148 #define IPOPT_DEBMEAS           0x40
149 #define IPOPT_MEASUREMENT       IPOPT_DEBMEAS
150 #define IPOPT_RESERVED2         0x60
151
152 #define IPOPT_EOL               0
153 #define IPOPT_END               IPOPT_EOL
154 #define IPOPT_NOP               1
155 #define IPOPT_NOOP              IPOPT_NOP
156
157 #define IPOPT_RR                7
158 #define IPOPT_TS                68
159 #define IPOPT_TIMESTAMP         IPOPT_TS
160 #define IPOPT_SECURITY          130
161 #define IPOPT_SEC               IPOPT_SECURITY
162 #define IPOPT_LSRR              131
163 #define IPOPT_SATID             136
164 #define IPOPT_SID               IPOPT_SATID
165 #define IPOPT_SSRR              137
166 #define IPOPT_RA                148
167
168 #define IPOPT_OPTVAL            0
169 #define IPOPT_OLEN              1
170 #define IPOPT_OFFSET            2
171 #define IPOPT_MINOFF            4
172
173 #define MAX_IPOPTLEN            40
174
175 #define IPOPT_TS_TSONLY         0
176 #define IPOPT_TS_TSANDADDR      1
177 #define IPOPT_TS_PRESPEC        3
178
179 #define IPOPT_SECUR_UNCLASS     0x0000
180 #define IPOPT_SECUR_CONFID      0xf135
181 #define IPOPT_SECUR_EFTO        0x789a
182 #define IPOPT_SECUR_MMMM        0xbc4d
183 #define IPOPT_SECUR_RESTR       0xaf13
184 #define IPOPT_SECUR_SECRET      0xd788
185 #define IPOPT_SECUR_TOPSECRET   0x6bc5
186
187 #define MAXTTL          255
188 #define IPDEFTTL        64
189 #define IPFRAGTTL       60
190 #define IPTTLDEC        1
191
192 #define IP_MSS          576
193
194 #ifdef __cplusplus
195 }
196 #endif
197
198 #endif