hc
2024-08-16 a24a44ff9ca902811b99aa9663d697cf452e08ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
/*
 * INET        An implementation of the TCP/IP protocol suite for the LINUX
 *        operating system.  INET is implemented using the  BSD Socket
 *        interface as the means of communication with the user level.
 *
 *        Definitions for the IP protocol.
 *
 * Version:    @(#)ip.h    1.0.2    04/28/93
 *
 * Authors:    Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 *
 *        This program is free software; you can redistribute it and/or
 *        modify it under the terms of the GNU General Public License
 *        as published by the Free Software Foundation; either version
 *        2 of the License, or (at your option) any later version.
 */
#ifndef _UAPI_LINUX_IP_H
#define _UAPI_LINUX_IP_H
#include <linux/types.h>
#include <asm/byteorder.h>
 
#define IPTOS_TOS_MASK        0x1E
#define IPTOS_TOS(tos)        ((tos)&IPTOS_TOS_MASK)
#define    IPTOS_LOWDELAY        0x10
#define    IPTOS_THROUGHPUT    0x08
#define    IPTOS_RELIABILITY    0x04
#define    IPTOS_MINCOST        0x02
 
#define IPTOS_PREC_MASK        0xE0
#define IPTOS_PREC(tos)        ((tos)&IPTOS_PREC_MASK)
#define IPTOS_PREC_NETCONTROL           0xe0
#define IPTOS_PREC_INTERNETCONTROL      0xc0
#define IPTOS_PREC_CRITIC_ECP           0xa0
#define IPTOS_PREC_FLASHOVERRIDE        0x80
#define IPTOS_PREC_FLASH                0x60
#define IPTOS_PREC_IMMEDIATE            0x40
#define IPTOS_PREC_PRIORITY             0x20
#define IPTOS_PREC_ROUTINE              0x00
 
 
/* IP options */
#define IPOPT_COPY        0x80
#define IPOPT_CLASS_MASK    0x60
#define IPOPT_NUMBER_MASK    0x1f
 
#define    IPOPT_COPIED(o)        ((o)&IPOPT_COPY)
#define    IPOPT_CLASS(o)        ((o)&IPOPT_CLASS_MASK)
#define    IPOPT_NUMBER(o)        ((o)&IPOPT_NUMBER_MASK)
 
#define    IPOPT_CONTROL        0x00
#define    IPOPT_RESERVED1        0x20
#define    IPOPT_MEASUREMENT    0x40
#define    IPOPT_RESERVED2        0x60
 
#define IPOPT_END    (0 |IPOPT_CONTROL)
#define IPOPT_NOOP    (1 |IPOPT_CONTROL)
#define IPOPT_SEC    (2 |IPOPT_CONTROL|IPOPT_COPY)
#define IPOPT_LSRR    (3 |IPOPT_CONTROL|IPOPT_COPY)
#define IPOPT_TIMESTAMP    (4 |IPOPT_MEASUREMENT)
#define IPOPT_CIPSO    (6 |IPOPT_CONTROL|IPOPT_COPY)
#define IPOPT_RR    (7 |IPOPT_CONTROL)
#define IPOPT_SID    (8 |IPOPT_CONTROL|IPOPT_COPY)
#define IPOPT_SSRR    (9 |IPOPT_CONTROL|IPOPT_COPY)
#define IPOPT_RA    (20|IPOPT_CONTROL|IPOPT_COPY)
 
#define IPVERSION    4
#define MAXTTL        255
#define IPDEFTTL    64
 
#define IPOPT_OPTVAL 0
#define IPOPT_OLEN   1
#define IPOPT_OFFSET 2
#define IPOPT_MINOFF 4
#define MAX_IPOPTLEN 40
#define IPOPT_NOP IPOPT_NOOP
#define IPOPT_EOL IPOPT_END
#define IPOPT_TS  IPOPT_TIMESTAMP
 
#define    IPOPT_TS_TSONLY        0        /* timestamps only */
#define    IPOPT_TS_TSANDADDR    1        /* timestamps and addresses */
#define    IPOPT_TS_PRESPEC    3        /* specified modules only */
 
#define IPV4_BEET_PHMAXLEN 8
 
struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
   __u8    ihl:4,
       version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
   __u8    version:4,
          ihl:4;
#else
#error    "Please fix <asm/byteorder.h>"
#endif
   __u8    tos;
   __be16    tot_len;
   __be16    id;
   __be16    frag_off;
   __u8    ttl;
   __u8    protocol;
   __sum16    check;
#ifndef __GENKSYMS__
   __struct_group(/* no tag */, addrs, /* no attrs */,
#endif
       __be32    saddr;
       __be32    daddr;
#ifndef __GENKSYMS__
   );
#endif
   /*The options start here. */
};
 
 
struct ip_auth_hdr {
   __u8  nexthdr;
   __u8  hdrlen;        /* This one is measured in 32 bit units! */
   __be16 reserved;
   __be32 spi;
   __be32 seq_no;        /* Sequence number */
   __u8  auth_data[0];    /* Variable len but >=4. Mind the 64 bit alignment! */
};
 
struct ip_esp_hdr {
   __be32 spi;
   __be32 seq_no;        /* Sequence number */
   __u8  enc_data[0];    /* Variable len but >=8. Mind the 64 bit alignment! */
};
 
struct ip_comp_hdr {
   __u8 nexthdr;
   __u8 flags;
   __be16 cpi;
};
 
struct ip_beet_phdr {
   __u8 nexthdr;
   __u8 hdrlen;
   __u8 padlen;
   __u8 reserved;
};
 
/* index values for the variables in ipv4_devconf */
enum
{
   IPV4_DEVCONF_FORWARDING=1,
   IPV4_DEVCONF_MC_FORWARDING,
   IPV4_DEVCONF_PROXY_ARP,
   IPV4_DEVCONF_ACCEPT_REDIRECTS,
   IPV4_DEVCONF_SECURE_REDIRECTS,
   IPV4_DEVCONF_SEND_REDIRECTS,
   IPV4_DEVCONF_SHARED_MEDIA,
   IPV4_DEVCONF_RP_FILTER,
   IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
   IPV4_DEVCONF_BOOTP_RELAY,
   IPV4_DEVCONF_LOG_MARTIANS,
   IPV4_DEVCONF_TAG,
   IPV4_DEVCONF_ARPFILTER,
   IPV4_DEVCONF_MEDIUM_ID,
   IPV4_DEVCONF_NOXFRM,
   IPV4_DEVCONF_NOPOLICY,
   IPV4_DEVCONF_FORCE_IGMP_VERSION,
   IPV4_DEVCONF_ARP_ANNOUNCE,
   IPV4_DEVCONF_ARP_IGNORE,
   IPV4_DEVCONF_PROMOTE_SECONDARIES,
   IPV4_DEVCONF_ARP_ACCEPT,
   IPV4_DEVCONF_ARP_NOTIFY,
   IPV4_DEVCONF_ACCEPT_LOCAL,
   IPV4_DEVCONF_SRC_VMARK,
   IPV4_DEVCONF_PROXY_ARP_PVLAN,
   IPV4_DEVCONF_ROUTE_LOCALNET,
   IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
   IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
   IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
   IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
   IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
   IPV4_DEVCONF_BC_FORWARDING,
   __IPV4_DEVCONF_MAX
};
 
#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
 
#endif /* _UAPI_LINUX_IP_H */