xref: /dragonfly/sys/netinet/in.h (revision fa2d454495078dc1bdbe1325db0b6365723225fd)
1 /*
2  * Copyright (c) 1982, 1986, 1990, 1993
3  *        The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the University nor the names of its contributors
14  *    may be used to endorse or promote products derived from this software
15  *    without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  *        @(#)in.h  8.3 (Berkeley) 1/3/94
30  * $FreeBSD: src/sys/netinet/in.h,v 1.48.2.10 2003/08/24 08:24:38 hsu Exp $
31  */
32 
33 #ifndef _NETINET_IN_H_
34 #define   _NETINET_IN_H_
35 
36 #include <machine/stdint.h>
37 
38 #ifndef _KERNEL
39 #include <machine/endian.h>
40 #ifndef _BYTEORDER_FUNC_DEFINED
41 #define   _BYTEORDER_FUNC_DEFINED
42 #define   htonl(x)  __htonl(x)
43 #define   htons(x)  __htons(x)
44 #define   ntohl(x)  __ntohl(x)
45 #define   ntohs(x)  __ntohs(x)
46 #endif
47 #endif
48 
49 #ifndef _IN_ADDR_T_DECLARED
50 typedef   __uint32_t          in_addr_t;          /* base type for internet address */
51 #define   _IN_ADDR_T_DECLARED
52 #endif
53 
54 #ifndef _IN_PORT_T_DECLARED
55 typedef   __uint16_t          in_port_t;
56 #define   _IN_PORT_T_DECLARED
57 #endif
58 
59 #ifndef _SA_FAMILY_T_DECLARED
60 typedef   __uint8_t sa_family_t;
61 #define   _SA_FAMILY_T_DECLARED
62 #endif
63 
64 #ifndef _UINT8_T_DECLARED
65 typedef   __uint8_t uint8_t;
66 #define   _UINT8_T_DECLARED
67 #endif
68 #ifndef _UINT32_T_DECLARED
69 typedef   __uint32_t          uint32_t;
70 #define   _UINT32_T_DECLARED
71 #endif
72 
73 #ifndef _STRUCT_IN_ADDR_DECLARED
74 #define   _STRUCT_IN_ADDR_DECLARED
75 /*
76  * Internet address (a structure for historical reasons)
77  */
78 struct in_addr {
79           in_addr_t s_addr;
80 };
81 #endif
82 
83 /*
84  * Constants and structures defined by the internet system,
85  * Per RFC 790, September 1981, and numerous additions.
86  */
87 
88 /*
89  * Protocols (RFC 1700) that are part of standards
90  */
91 #define   IPPROTO_IP                    0                   /* dummy for IP */
92 #define   IPPROTO_ICMP                  1                   /* control message protocol */
93 #define   IPPROTO_TCP                   6                   /* tcp */
94 #define   IPPROTO_UDP                   17                  /* user datagram protocol */
95 #define   IPPROTO_IPV6                  41                  /* IP6 header */
96 #if __POSIX_VISIBLE >= 200112
97 #define   IPPROTO_RAW                   255                 /* raw IP packet */
98 #endif
99 
100 #if __BSD_VISIBLE
101 /*
102  * Protocols (RFC 1700)
103  */
104 #define   IPPROTO_HOPOPTS               0                   /* IP6 hop-by-hop options */
105 #define   IPPROTO_IGMP                  2                   /* group mgmt protocol */
106 #define   IPPROTO_GGP                   3                   /* gateway^2 (deprecated) */
107 #define   IPPROTO_IPV4                  4                   /* IPv4 encapsulation */
108 #define   IPPROTO_IPIP                  IPPROTO_IPV4        /* for compatibility */
109 #define   IPPROTO_ST                    7                   /* Stream protocol II */
110 #define   IPPROTO_EGP                   8                   /* exterior gateway protocol */
111 #define   IPPROTO_PIGP                  9                   /* private interior gateway */
112 #define   IPPROTO_RCCMON                10                  /* BBN RCC Monitoring */
113 #define   IPPROTO_NVPII                 11                  /* network voice protocol*/
114 #define   IPPROTO_PUP                   12                  /* pup */
115 #define   IPPROTO_ARGUS                 13                  /* Argus */
116 #define   IPPROTO_EMCON                 14                  /* EMCON */
117 #define   IPPROTO_XNET                  15                  /* Cross Net Debugger */
118 #define   IPPROTO_CHAOS                 16                  /* Chaos*/
119 #define   IPPROTO_MUX                   18                  /* Multiplexing */
120 #define   IPPROTO_MEAS                  19                  /* DCN Measurement Subsystems */
121 #define   IPPROTO_HMP                   20                  /* Host Monitoring */
122 #define   IPPROTO_PRM                   21                  /* Packet Radio Measurement */
123 #define   IPPROTO_IDP                   22                  /* xns idp */
124 #define   IPPROTO_TRUNK1                23                  /* Trunk-1 */
125 #define   IPPROTO_TRUNK2                24                  /* Trunk-2 */
126 #define   IPPROTO_LEAF1                 25                  /* Leaf-1 */
127 #define   IPPROTO_LEAF2                 26                  /* Leaf-2 */
128 #define   IPPROTO_RDP                   27                  /* Reliable Data */
129 #define   IPPROTO_IRTP                  28                  /* Reliable Transaction */
130 #define   IPPROTO_TP                    29                  /* tp-4 w/ class negotiation */
131 #define   IPPROTO_BLT                   30                  /* Bulk Data Transfer */
132 #define   IPPROTO_NSP                   31                  /* Network Services */
133 #define   IPPROTO_INP                   32                  /* Merit Internodal */
134 #define   IPPROTO_SEP                   33                  /* Sequential Exchange */
135 #define   IPPROTO_3PC                   34                  /* Third Party Connect */
136 #define   IPPROTO_IDPR                  35                  /* InterDomain Policy Routing */
137 #define   IPPROTO_XTP                   36                  /* XTP */
138 #define   IPPROTO_DDP                   37                  /* Datagram Delivery */
139 #define   IPPROTO_CMTP                  38                  /* Control Message Transport */
140 #define   IPPROTO_TPXX                  39                  /* TP++ Transport */
141 #define   IPPROTO_IL                    40                  /* IL transport protocol */
142 #define   IPPROTO_SDRP                  42                  /* Source Demand Routing */
143 #define   IPPROTO_ROUTING               43                  /* IP6 routing header */
144 #define   IPPROTO_FRAGMENT    44                  /* IP6 fragmentation header */
145 #define   IPPROTO_IDRP                  45                  /* InterDomain Routing*/
146 #define   IPPROTO_RSVP                  46                  /* resource reservation */
147 #define   IPPROTO_GRE                   47                  /* General Routing Encap. */
148 #define   IPPROTO_MHRP                  48                  /* Mobile Host Routing */
149 #define   IPPROTO_BHA                   49                  /* BHA */
150 #define   IPPROTO_ESP                   50                  /* IP6 Encap Sec. Payload */
151 #define   IPPROTO_AH                    51                  /* IP6 Auth Header */
152 #define   IPPROTO_INLSP                 52                  /* Integ. Net Layer Security */
153 #define   IPPROTO_SWIPE                 53                  /* IP with encryption */
154 #define   IPPROTO_NHRP                  54                  /* Next Hop Resolution */
155 #define   IPPROTO_MOBILE                55                  /* IP Mobility */
156 #define   IPPROTO_TLSP                  56                  /* Transport Layer Security */
157 #define   IPPROTO_SKIP                  57                  /* SKIP */
158 #define   IPPROTO_ICMPV6                58                  /* ICMP6 */
159 #define   IPPROTO_NONE                  59                  /* IP6 no next header */
160 #define   IPPROTO_DSTOPTS               60                  /* IP6 destination option */
161 #define   IPPROTO_AHIP                  61                  /* any host internal protocol */
162 #define   IPPROTO_CFTP                  62                  /* CFTP */
163 #define   IPPROTO_HELLO                 63                  /* "hello" routing protocol */
164 #define   IPPROTO_SATEXPAK    64                  /* SATNET/Backroom EXPAK */
165 #define   IPPROTO_KRYPTOLAN   65                  /* Kryptolan */
166 #define   IPPROTO_RVD                   66                  /* Remote Virtual Disk */
167 #define   IPPROTO_IPPC                  67                  /* Pluribus Packet Core */
168 #define   IPPROTO_ADFS                  68                  /* Any distributed FS */
169 #define   IPPROTO_SATMON                69                  /* Satnet Monitoring */
170 #define   IPPROTO_VISA                  70                  /* VISA Protocol */
171 #define   IPPROTO_IPCV                  71                  /* Packet Core Utility */
172 #define   IPPROTO_CPNX                  72                  /* Comp. Prot. Net. Executive */
173 #define   IPPROTO_CPHB                  73                  /* Comp. Prot. HeartBeat */
174 #define   IPPROTO_WSN                   74                  /* Wang Span Network */
175 #define   IPPROTO_PVP                   75                  /* Packet Video Protocol */
176 #define   IPPROTO_BRSATMON    76                  /* BackRoom SATNET Monitoring */
177 #define   IPPROTO_ND                    77                  /* Sun net disk proto (temp.) */
178 #define   IPPROTO_WBMON                 78                  /* WIDEBAND Monitoring */
179 #define   IPPROTO_WBEXPAK               79                  /* WIDEBAND EXPAK */
180 #define   IPPROTO_EON                   80                  /* ISO cnlp */
181 #define   IPPROTO_VMTP                  81                  /* VMTP */
182 #define   IPPROTO_SVMTP                 82                  /* Secure VMTP */
183 #define   IPPROTO_VINES                 83                  /* Banyon VINES */
184 #define   IPPROTO_TTP                   84                  /* TTP */
185 #define   IPPROTO_IGP                   85                  /* NSFNET-IGP */
186 #define   IPPROTO_DGP                   86                  /* dissimilar gateway prot. */
187 #define   IPPROTO_TCF                   87                  /* TCF */
188 #define   IPPROTO_IGRP                  88                  /* Cisco/GXS IGRP */
189 #define   IPPROTO_OSPFIGP               89                  /* OSPFIGP */
190 #define   IPPROTO_SRPC                  90                  /* Strite RPC protocol */
191 #define   IPPROTO_LARP                  91                  /* Locus Address Resoloution */
192 #define   IPPROTO_MTP                   92                  /* Multicast Transport */
193 #define   IPPROTO_AX25                  93                  /* AX.25 Frames */
194 #define   IPPROTO_IPEIP                 94                  /* IP encapsulated in IP */
195 #define   IPPROTO_MICP                  95                  /* Mobile Int.ing control */
196 #define   IPPROTO_SCCSP                 96                  /* Semaphore Comm. security */
197 #define   IPPROTO_ETHERIP               97                  /* Ethernet IP encapsulation */
198 #define   IPPROTO_ENCAP                 98                  /* encapsulation header */
199 #define   IPPROTO_APES                  99                  /* any private encr. scheme */
200 #define   IPPROTO_GMTP                  100                 /* GMTP*/
201 #define   IPPROTO_IPCOMP                108                 /* payload compression (IPComp) */
202 /* 101-254: Partly Unassigned */
203 #define   IPPROTO_PIM                   103                 /* Protocol Independent Mcast */
204 #define   IPPROTO_CARP                  112                 /* CARP */
205 #define   IPPROTO_PGM                   113                 /* PGM */
206 #define   IPPROTO_PFSYNC                240                 /* PFSYNC */
207 /* 255: Reserved */
208 /* BSD Private, local use, namespace incursion */
209 #define   IPPROTO_DIVERT                254                 /* divert pseudo-protocol */
210 #define   IPPROTO_MAX                   256
211 
212 /* last return value of *_input(), meaning "all job for this pkt is done".  */
213 #define   IPPROTO_DONE                  257
214 
215 /* Used by RSS: the layer3 protocol is unknown */
216 #define   IPPROTO_UNKNOWN               258
217 
218 /*
219  * Local port number conventions:
220  *
221  * When a user does a bind(2) or connect(2) with a port number of zero,
222  * a non-conflicting local port address is chosen.
223  * The default range is IPPORT_RESERVED through
224  * IPPORT_USERRESERVED, although that is settable by sysctl.
225  *
226  * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
227  * default assignment range.
228  *
229  * The value IP_PORTRANGE_DEFAULT causes the default behavior.
230  *
231  * The value IP_PORTRANGE_HIGH changes the range of candidate port numbers
232  * into the "high" range.  These are reserved for client outbound connections
233  * which do not want to be filtered by any firewalls.
234  *
235  * The value IP_PORTRANGE_LOW changes the range to the "low" are
236  * that is (by convention) restricted to privileged processes.  This
237  * convention is based on "vouchsafe" principles only.  It is only secure
238  * if you trust the remote host to restrict these ports.
239  *
240  * The default range of ports and the high range can be changed by
241  * sysctl(3).  (net.inet.ip.port{hi,low}{first,last}_auto)
242  *
243  * Changing those values has bad security implications if you are
244  * using a a stateless firewall that is allowing packets outside of that
245  * range in order to allow transparent outgoing connections.
246  *
247  * Such a firewall configuration will generally depend on the use of these
248  * default values.  If you change them, you may find your Security
249  * Administrator looking for you with a heavy object.
250  *
251  * For a slightly more orthodox text view on this:
252  *   ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers
253  *
254  *   port numbers are divided into three ranges:
255  *                  0 -  1023 Well Known Ports
256  *             1024 - 49151 Registered Ports
257  *            49152 - 65535 Dynamic and/or Private Ports
258  */
259 
260 /*
261  * Ports < IPPORT_RESERVED are reserved for
262  * privileged processes (e.g. root).  (IP_PORTRANGE_LOW)
263  * Ports > IPPORT_USERRESERVED are reserved
264  * for servers, not necessarily privileged.  (IP_PORTRANGE_DEFAULT)
265  */
266 #define   IPPORT_RESERVED               1024
267 #define   IPPORT_USERRESERVED 5000
268 
269 /*
270  * Default local port range to use by setting IP_PORTRANGE_HIGH
271  */
272 #define   IPPORT_HIFIRSTAUTO  49152
273 #define   IPPORT_HILASTAUTO   65535
274 
275 /*
276  * Scanning for a free reserved port return a value below IPPORT_RESERVED,
277  * but higher than IPPORT_RESERVEDSTART.  Traditionally the start value was
278  * 512, but that conflicts with some well-known-services that firewalls may
279  * have a fit if we use.
280  */
281 #define   IPPORT_RESERVEDSTART          600
282 
283 #define   IPPORT_MAX                    65535
284 
285 /*
286  * Definitions of bits in internet address integers.
287  * On subnets, the decomposition of addresses to host and net parts
288  * is done according to subnet mask, not the masks here.
289  */
290 #define   IN_CLASSA(i)                  (((uint32_t)(i) & 0x80000000) == 0)
291 #define   IN_CLASSA_NET                 0xff000000
292 #define   IN_CLASSA_NSHIFT    24
293 #define   IN_CLASSA_HOST                0x00ffffff
294 #define   IN_CLASSA_MAX                 128
295 
296 #define   IN_CLASSB(i)                  (((uint32_t)(i) & 0xc0000000) == 0x80000000)
297 #define   IN_CLASSB_NET                 0xffff0000
298 #define   IN_CLASSB_NSHIFT    16
299 #define   IN_CLASSB_HOST                0x0000ffff
300 #define   IN_CLASSB_MAX                 65536
301 
302 #define   IN_CLASSC(i)                  (((uint32_t)(i) & 0xe0000000) == 0xc0000000)
303 #define   IN_CLASSC_NET                 0xffffff00
304 #define   IN_CLASSC_NSHIFT    8
305 #define   IN_CLASSC_HOST                0x000000ff
306 
307 #define   IN_CLASSD(i)                  (((uint32_t)(i) & 0xf0000000) == 0xe0000000)
308 #define   IN_CLASSD_NET                 0xf0000000          /* These ones aren't really */
309 #define   IN_CLASSD_NSHIFT    28                  /* net and host fields, but */
310 #define   IN_CLASSD_HOST                0x0fffffff          /* routing needn't know.    */
311 #define   IN_MULTICAST(i)               IN_CLASSD(i)
312 
313 #define   IN_EXPERIMENTAL(i)  (((uint32_t)(i) & 0xf0000000) == 0xf0000000)
314 #define   IN_BADCLASS(i)                (((uint32_t)(i) & 0xf0000000) == 0xf0000000)
315 #endif /* __BSD_VISIBLE */
316 
317 #define   INADDR_ANY                    (uint32_t)0x00000000
318 #if __BSD_VISIBLE
319 #define   INADDR_LOOPBACK               (uint32_t)0x7f000001
320 #endif
321 #define   INADDR_BROADCAST    (uint32_t)0xffffffff          /* must be masked */
322 #ifndef _KERNEL
323 #define   INADDR_NONE                   0xffffffff                    /* -1 return */
324 #endif
325 
326 #if __BSD_VISIBLE
327 #define   INADDR_UNSPEC_GROUP (uint32_t)0xe0000000          /* 224.0.0.0 */
328 #define   INADDR_ALLHOSTS_GROUP         (uint32_t)0xe0000001          /* 224.0.0.1 */
329 #define   INADDR_ALLRTRS_GROUP          (uint32_t)0xe0000002          /* 224.0.0.2 */
330 #define   INADDR_CARP_GROUP       (uint32_t)0xe0000012      /* 224.0.0.18 */
331 #define   INADDR_PFSYNC_GROUP (uint32_t)0xe00000f0          /* 224.0.0.240 */
332 #define   INADDR_ALLMDNS_GROUP          (uint32_t)0xe00000fb          /* 224.0.0.251 */
333 #define   INADDR_MAX_LOCAL_GROUP        (uint32_t)0xe00000ff          /* 224.0.0.255 */
334 
335 #define   IN_LOOPBACKNET                127                           /* official! */
336 
337 #define   IN_RFC3021_MASK               (uint32_t)0xfffffffe
338 #endif
339 
340 /*
341  * Socket address, internet style.
342  */
343 struct sockaddr_in {
344           uint8_t             sin_len;
345           sa_family_t         sin_family;
346           in_port_t sin_port;
347           struct in_addr      sin_addr;
348           char                sin_zero[8];
349 };
350 
351 #define   INET_ADDRSTRLEN               16
352 
353 #if __BSD_VISIBLE
354 /*
355  * Options for use with [gs]etsockopt at the IP level.
356  * First word of comment is data type; bool is stored in int.
357  */
358 #define   IP_OPTIONS                    1    /* buf/ip_opts; set/get IP options */
359 #define   IP_HDRINCL                    2    /* int; header is included with data */
360 #define   IP_TOS                        3    /* int; IP type of service and preced. */
361 #define   IP_TTL                        4    /* int; IP time to live */
362 #define   IP_RECVOPTS                   5    /* bool; receive all IP opts w/dgram */
363 #define   IP_RECVRETOPTS                6    /* bool; receive IP opts for response */
364 #define   IP_RECVDSTADDR                7    /* bool; receive IP dst addr w/dgram */
365 #define   IP_SENDSRCADDR                IP_RECVDSTADDR /* cmsg_type to set src addr */
366 #define   IP_RETOPTS                    8    /* ip_opts; set/get IP options */
367 #define   IP_MULTICAST_IF               9    /* u_char; set/get IP multicast i/f  */
368 #define   IP_MULTICAST_TTL    10   /* u_char; set/get IP multicast ttl */
369 #define   IP_MULTICAST_LOOP   11   /* u_char; set/get IP multicast loopback */
370 #define   IP_ADD_MEMBERSHIP   12   /* ip_mreq; add an IP group membership */
371 #define   IP_DROP_MEMBERSHIP  13   /* ip_mreq; drop an IP group membership */
372 #define   IP_MULTICAST_VIF    14   /* set/get IP mcast virt. iface */
373 #define   IP_RSVP_ON                    15   /* enable RSVP in kernel */
374 #define   IP_RSVP_OFF                   16   /* disable RSVP in kernel */
375 #define   IP_RSVP_VIF_ON                17   /* set RSVP per-vif socket */
376 #define   IP_RSVP_VIF_OFF               18   /* unset RSVP per-vif socket */
377 #define   IP_PORTRANGE                  19   /* int; range to choose for unspec port */
378 #define   IP_RECVIF           20   /* bool; receive reception if w/dgram */
379 
380 #define   IP_FW_TBL_CREATE    40   /* create ipfw table */
381 #define   IP_FW_TBL_DESTROY   41   /* destroy ipfw table */
382 #define   IP_FW_TBL_ADD                 42   /* add network/host to ipfw table */
383 #define   IP_FW_TBL_DEL                 43   /* delete network/host from ipfw table */
384 #define   IP_FW_TBL_FLUSH               44   /* flush ipfw table */
385 #define   IP_FW_TBL_GET                 45   /* list/show ipfw table */
386 #define   IP_FW_TBL_ZERO                46   /* clear ipfw table counters */
387 #define   IP_FW_TBL_EXPIRE    47   /* expire addresses in ipfw table */
388 
389 #define   IP_FW_X                       49   /* ipfw3 firewall */
390 
391 #define   IP_FW_ADD           50   /* add a firewall rule to chain */
392 #define   IP_FW_DEL           51   /* delete a firewall rule from chain */
393 #define   IP_FW_FLUSH                   52   /* flush firewall rule chain */
394 #define   IP_FW_ZERO                    53   /* clear single/all firewall counter(s) */
395 #define   IP_FW_GET           54   /* get entire firewall rule chain */
396 #define   IP_FW_RESETLOG                55   /* reset logging counters */
397 
398 #define   IP_DUMMYNET_CONFIGURE         60   /* add/configure a dummynet pipe */
399 #define   IP_DUMMYNET_DEL               61   /* delete a dummynet pipe from chain */
400 #define   IP_DUMMYNET_FLUSH   62   /* flush dummynet */
401 #define   IP_DUMMYNET_GET               64   /* get entire dummynet pipes */
402 
403 #define   IP_RECVTTL                    65   /* bool; receive IP TTL w/dgram */
404 #define   IP_MINTTL           66   /* minimum TTL for packet or drop */
405 /* 67 IP_DONTFRAG */
406 #define   IP_RECVTOS                    68   /* bool; receive IP TOS w/dgram */
407 
408 /*
409  * Defaults and limits for options
410  */
411 #define   IP_DEFAULT_MULTICAST_TTL  1   /* normally limit m'casts to 1 hop  */
412 #define   IP_DEFAULT_MULTICAST_LOOP 1   /* normally hear sends if a member  */
413 #define   IP_MAX_MEMBERSHIPS  20        /* per socket */
414 
415 /*
416  * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
417  */
418 struct ip_mreq {
419           struct    in_addr imr_multiaddr;        /* IP multicast address of group */
420           struct    in_addr imr_interface;        /* local IP address of interface */
421 };
422 
423 /*
424  * Modified argument structure for IP_MULTICAST_IF and IP_ADD_MEMBERSHIP,
425  * obtained from Linux.  This is used to specify an interface index for
426  * multicast sends.
427  */
428 struct ip_mreqn {
429           struct    in_addr imr_multiaddr;        /* IP multicast address of group */
430           struct    in_addr imr_address;          /* local IP address of interface */
431           int                 imr_ifindex;        /* Interface index; cast to uint32_t */
432 };
433 
434 /*
435  * Argument for IP_PORTRANGE:
436  * - which range to search when port is unspecified at bind() or connect()
437  */
438 #define   IP_PORTRANGE_DEFAULT          0         /* default range */
439 #define   IP_PORTRANGE_HIGH   1         /* "high" - request firewall bypass */
440 #define   IP_PORTRANGE_LOW    2         /* "low" - vouchsafe security */
441 
442 /*
443  * Definitions for inet sysctl operations.
444  *
445  * Third level is protocol number.
446  * Fourth level is desired variable within that protocol.
447  */
448 #define   IPPROTO_MAXID       (IPPROTO_AH + 1)    /* don't list to IPPROTO_MAX */
449 
450 #define   CTL_IPPROTO_NAMES { \
451           { "ip", CTLTYPE_NODE }, \
452           { "icmp", CTLTYPE_NODE }, \
453           { "igmp", CTLTYPE_NODE }, \
454           { "ggp", CTLTYPE_NODE }, \
455           { 0, 0 }, \
456           { 0, 0 }, \
457           { "tcp", CTLTYPE_NODE }, \
458           { 0, 0 }, \
459           { "egp", CTLTYPE_NODE }, \
460           { 0, 0 }, \
461           { 0, 0 }, \
462           { 0, 0 }, \
463           { "pup", CTLTYPE_NODE }, \
464           { 0, 0 }, \
465           { 0, 0 }, \
466           { 0, 0 }, \
467           { 0, 0 }, \
468           { "udp", CTLTYPE_NODE }, \
469           { 0, 0 }, \
470           { 0, 0 }, \
471           { 0, 0 }, \
472           { 0, 0 }, \
473           { "idp", CTLTYPE_NODE }, \
474           { 0, 0 }, \
475           { 0, 0 }, \
476           { 0, 0 }, \
477           { 0, 0 }, \
478           { 0, 0 }, \
479           { 0, 0 }, \
480           { 0, 0 }, \
481           { 0, 0 }, \
482           { 0, 0 }, \
483           { 0, 0 }, \
484           { 0, 0 }, \
485           { 0, 0 }, \
486           { 0, 0 }, \
487           { 0, 0 }, \
488           { 0, 0 }, \
489           { 0, 0 }, \
490           { 0, 0 }, \
491           { 0, 0 }, \
492           { 0, 0 }, \
493           { 0, 0 }, \
494           { 0, 0 }, \
495           { 0, 0 }, \
496           { 0, 0 }, \
497           { 0, 0 }, \
498           { 0, 0 }, \
499           { 0, 0 }, \
500           { 0, 0 }, \
501           { 0, 0 }, \
502           { 0, 0 }, \
503           { 0, 0 }, \
504           { 0, 0 }, \
505           { 0, 0 }, \
506           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
507           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
508           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
509           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
510           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
511           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
512           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
513           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
514           { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
515           { 0, 0 }, \
516           { 0, 0 }, \
517           { 0, 0 }, \
518           { "pim", CTLTYPE_NODE }, \
519 }
520 
521 /*
522  * Names for IP sysctl objects
523  */
524 #define   IPCTL_FORWARDING    1         /* act as router */
525 #define   IPCTL_SENDREDIRECTS 2         /* may send redirects when forwarding */
526 #define   IPCTL_DEFTTL                  3         /* default TTL */
527 #ifdef notyet
528 #define   IPCTL_DEFMTU                  4         /* default MTU */
529 #endif
530 #define   IPCTL_RTEXPIRE                5         /* cloned route expiration time */
531 #define   IPCTL_RTMINEXPIRE   6         /* min value for expiration time */
532 #define   IPCTL_RTMAXCACHE    7         /* trigger level for dynamic expire */
533 #define   IPCTL_SOURCEROUTE   8         /* may perform source routes */
534 #define   IPCTL_DIRECTEDBROADCAST       9         /* may re-broadcast received packets */
535 #define   IPCTL_INTRQMAXLEN   10        /* max length of netisr queue */
536 #define   IPCTL_INTRQDROPS    11        /* number of netisr q drops */
537 #define   IPCTL_STATS                   12        /* ipstat structure */
538 #define   IPCTL_ACCEPTSOURCEROUTE       13        /* may accept source routed packets */
539 #define   IPCTL_FASTFORWARDING          14        /* use fast IP forwarding code */
540 #define   IPCTL_GIF_TTL                 16        /* default TTL for gif encap packet */
541 #define   IPCTL_MAXID                   17
542 
543 #define   IPCTL_NAMES { \
544           { 0, 0 }, \
545           { "forwarding", CTLTYPE_INT }, \
546           { "redirect", CTLTYPE_INT }, \
547           { "ttl", CTLTYPE_INT }, \
548           { "mtu", CTLTYPE_INT }, \
549           { "rtexpire", CTLTYPE_INT }, \
550           { "rtminexpire", CTLTYPE_INT }, \
551           { "rtmaxcache", CTLTYPE_INT }, \
552           { "sourceroute", CTLTYPE_INT }, \
553           { "directed-broadcast", CTLTYPE_INT }, \
554           { "intr-queue-maxlen", CTLTYPE_INT }, \
555           { "intr-queue-drops", CTLTYPE_INT }, \
556           { "stats", CTLTYPE_STRUCT }, \
557           { "accept_sourceroute", CTLTYPE_INT }, \
558           { "fastforwarding", CTLTYPE_INT }, \
559 }
560 #endif /* __BSD_VISIBLE */
561 
562 #ifdef _KERNEL
563 struct ifnet; struct mbuf;    /* forward declarations for Standard C */
564 #endif
565 
566 /* INET6 stuff */
567 #define   __KAME_NETINET_IN_H_INCLUDED_
568 #include <netinet6/in6.h>
569 #undef __KAME_NETINET_IN_H_INCLUDED_
570 
571 #ifdef _KERNEL
572 
573 struct thread;
574 
575 int        in_broadcast(struct in_addr, struct ifnet *);
576 int        in_canforward(struct in_addr);
577 int        in_localaddr(struct in_addr);
578 char      *kinet_ntoa(struct in_addr, char *); /* in libkern */
579 char      *inet_ntop(int, const void * __restrict, char * __restrict,
580               socklen_t); /* in libkern */
581 
582 #define   in_hosteq(s, t)     ((s).s_addr == (t).s_addr)
583 #define   in_nullhost(x)      ((x).s_addr == INADDR_ANY)
584 
585 #define   satosin(sa)         ((struct sockaddr_in *)(sa))
586 #define   sintosa(sin)        ((struct sockaddr *)(sin))
587 #define   ifatoia(ifa)        ((struct in_ifaddr *)(ifa))
588 
589 #endif
590 
591 #endif
592