Remove more __USE_SUN macros
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / bits / in.h
1 /* Copyright (C) 1991-1999, 2000, 2004, 2008 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 /* Linux version.  */
20
21 #ifndef _NETINET_IN_H
22 # error "Never use <bits/in.h> directly; include <netinet/in.h> instead."
23 #endif
24
25 /* Really these belong in the enum in netinet/in.h.  */
26 #define IPPROTO_GGP     3
27 #define IPPROTO_HELLO   63
28 #define IPPROTO_ND      77
29 #define IPPROTO_EON     80
30
31 #define IPPORT_CHARGEN  19
32
33 /* Options for use with `getsockopt' and `setsockopt' at the IP level.
34    The first word in the comment at the right is the data type used;
35    "bool" means a boolean value stored in an `int'.  */
36 #define        IP_OPTIONS      1       /* ip_opts; IP per-packet options.  */
37 #define        IP_HDRINCL      2       /* int; Header is included with data.  */
38 #define        IP_TOS          3       /* int; IP type of service and precedence.  */
39 #define        IP_TTL          4       /* int; IP time to live.  */
40 #define        IP_RECVOPTS     5       /* bool; Receive all IP options w/datagram.  */
41 #define        IP_RECVRETOPTS  6       /* bool; Receive IP options for response.  */
42 #define        IP_RECVDSTADDR  7       /* int; Receive IP dst addr w/datagram.  */
43 #define        IP_RETOPTS      8       /* ip_opts; Set/get IP per-packet options.  */
44 #define        IP_RECVIF       9       /* int; Receive the inbound interface index.  */
45 #define        IP_RECVSLLA     10      /* sockaddr_dl; Get source link layer address.  */
46 #define        IP_RECVTTL      11      /* u_char; Get TTL for inbound packet.  */
47 #define IP_MULTICAST_IF 16      /* in_addr; set/get IP multicast i/f */
48 #define IP_MULTICAST_TTL 17     /* u_char; set/get IP multicast ttl */
49 #define IP_MULTICAST_LOOP 18    /* i_char; set/get IP multicast loopback */
50 #define IP_ADD_MEMBERSHIP 19    /* ip_mreq; add an IP group membership */
51 #define IP_DROP_MEMBERSHIP 20   /* ip_mreq; drop an IP group membership */
52 #define IP_UNBLOCK_SOURCE 21    /* ip_mreq_source: unblock data from source */
53 #define IP_BLOCK_SOURCE 22      /* ip_mreq_source: block data from source */
54 #define IP_ADD_SOURCE_MEMBERSHIP 23 /* ip_mreq_source: join source group */
55 #define IP_DROP_SOURCE_MEMBERSHIP 24 /* ip_mreq_source: leave source group */
56 #define IP_NEXTHOP 25 /* send directly to next hop */
57 #define IP_PKTINFO 26 /* specify src address and/or index */
58 #define IP_RECVPKTINFO 26 /* recv dest/matched addr and index */
59 #define IP_SEC_OPT 34 /* used to set IPSEC options */
60
61 /* ipsec */
62 #define IPSEC_PREF_NEVER    0x01
63 #define IPSEC_PREF_REQUIRED 0x02
64 #define IPSEC_PREF_UNIQUE   0x04
65
66 typedef struct ipsec_req
67   {
68     unsigned int ipsr_ah_req; /* AH request */
69     unsigned int ipsr_esp_req; /* ESP request */
70     unsigned int ipsr_self_encap_req; /* Self-Encap request */
71     unsigned int ipsr_auth_alg; /* Auth algs for AH */
72     unsigned int ipsr_esp_alg; /* Encr algs for ESP */
73     unsigned int ipsr_esp_auth_alg; /* Auth algs for ESP */
74   }
75 ipsec_req_t;
76
77 #define MCAST_JOIN_GROUP 41     /* group_req: join any-source group */
78 #define MCAST_LEAVE_GROUP 42    /* group_req: leave any-source group */
79 #define MCAST_BLOCK_SOURCE 43   /* group_source_req: block from given group */
80 #define MCAST_UNBLOCK_SOURCE 44 /* group_source_req: unblock from given group*/
81 #define MCAST_JOIN_SOURCE_GROUP 45 /* group_source_req: join source-spec gr */
82 #define MCAST_LEAVE_SOURCE_GROUP 46 /* group_source_req: leave source-spec gr*/
83
84 #define MCAST_INCLUDE   1
85 #define MCAST_EXCLUDE   2
86
87 #define IP_BOUND_IF 65 /* bind socket to an ifindex */
88 #define IP_UNSPEC_SRC 66 /* use unspecified source address */
89 #define IP_BROADCAST_TTL 67 /* use specific TTL for broadcast */
90 #define IP_DONTFAILOVER_IF 68 /* no failover */
91 #define IP_DHCPINIT_IF 69 /* accept all unicast DHCP traffic */
92 #define IP_REUSEADDR 260
93 #define IP_DONTROUTE 261
94 #define IP_BROADCAST 262
95
96 #define IP_DEFAULT_MULTICAST_TTL        1
97 #define IP_DEFAULT_MULTICAST_LOOP       1
98 //#define IP_MAX_MEMBERSHIPS              20
99
100 /* Structure used for IP_PKTINFO.  */
101 struct in_pktinfo
102   {
103     unsigned int ipi_ifindex;                   /* Interface index  */
104     struct in_addr ipi_spec_dst;        /* Routing destination address  */
105     struct in_addr ipi_addr;            /* Header destination address  */
106   };
107
108 /* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
109    The first word in the comment at the right is the data type used;
110    "bool" means a boolean value stored in an `int'.  */
111 #define IPV6_UNICAST_HOPS       5
112 #define IPV6_MULTICAST_IF       6
113 #define IPV6_MULTICAST_HOPS     7
114 #define IPV6_MULTICAST_LOOP     8
115 #define IPV6_JOIN_GROUP         9
116 #define IPV6_LEAVE_GROUP        10
117 #define IPV6_ADD_MEMBERSHIP     IPV6_JOIN_GROUP
118 #define IPV6_DROP_MEMBERSHIP    IPV6_LEAVE_GROUP
119 #define IPV6_PKTINFO            11
120 #define IPV6_HOPLIMIT           12
121 #define IPV6_NEXTHOP            13
122 #define IPV6_HOPOPTS            14
123 #define IPV6_DSTOPTS            15
124 #define IPV6_RTHDR                      16
125 #define IPV6_RTHDRDSTOPTS       17
126 #define IPV6_RECVPKTINFO        18
127 #define IPV6_RECVHOPLIMIT       19
128 #define IPV6_RECVHOPOPTS        20
129
130 #define IPV6_RECVRTHDR          22
131 #define IPV6_RECVRTHDRDSTOPTS   23
132 #define IPV6_CHECKSUM           24
133 #define IPV6_RECVTCLASS         25
134
135 #define IPV6_USE_MIN_MTU        32
136 #define IPV6_DONTFRAG           33
137 #define IPV6_SEC_OPT            34
138 #define IPV6_SRC_PREFERENCES    35
139 #define IPV6_RECVPATHMTU        36
140 #define IPV6_PATHMTU            37
141 #define IPV6_TCLASS                     38
142 #define IPV6_V6ONLY                     39
143 #define IPV6_RECVDSTOPTS        40
144
145 /* IPV6_SRC_PREFERENCES */
146 #define IPV6_PREFER_SRC_HOME    0x01
147 #define IPV6_PREFER_SRC_COA             0x02
148 #define IPV6_PREFER_SRC_PUBLIC  0x04
149 #define IPV6_PREFER_SRC_TMP             0x08
150 #define IPV6_PREFER_SRC_NONCGA  0x10
151 #define IPV6_PREFER_SRC_CGA             0x20
152 #define IPV6_PREFER_SRC_MIPMASK (IPV6_PREFER_SRC_HOME | IPV6_PREFER_SRC_COA)
153 #define IPV6_PREFER_SRC_MIPDEFAULT  IPV6_PREFER_SRC_HOME
154 #define IPV6_PREFER_SRC_TMPMASK (IPV6_PREFER_SRC_PUBLIC | IPV6_PREFER_SRC_TMP)
155 #define IPV6_PREFER_SRC_TMPDEFAULT  IPV6_PREFER_SRC_PUBLIC
156 #define IPV6_PREFER_SRC_CGAMASK (IPV6_PREFER_SRC_NONCGA | IPV6_PREFER_SRC_CGA)
157 #define IPV6_PREFER_SRC_CGADEFAULT  IPV6_PREFER_SRC_NONCGA
158 #define IPV6_PREFER_SRC_MASK (IPV6_PREFER_SRC_MIPMASK |\
159         IPV6_PREFER_SRC_TMPMASK | IPV6_PREFER_SRC_CGAMASK)
160 #define IPV6_PREFER_SRC_DEFAULT (IPV6_PREFER_SRC_MIPDEFAULT |\
161         IPV6_PREFER_SRC_TMPDEFAULT | IPV6_PREFER_SRC_CGADEFAULT)
162
163 #define IPV6_BOUND_IF           65
164 #define IPV6_UNSPEC_SRC         66
165 #define IPV6_BOUND_PIF          67
166 #define IPV6_DONTFAILOVER_IF    68
167
168 #define IPV6_RTHDR_TYPE_0   0
169
170 #include <endian.h>
171
172 #if __BYTE_ORDER == __BIG_ENDIAN
173 # define IPV6_FLOWINFO_FLOWLABEL        0x000fffffU
174 # define IPV6_FLOWINFO_TCLASS           0x0ff00000U
175 #else
176 # define IPV6_FLOWINFO_FLOWLABEL        0xffff0f00U
177 # define IPV6_FLOWINFO_TCLASS           0x0000f00fU
178 #endif
179
180 typedef __uint32_t      ipaddr_t;
181 typedef struct in6_addr in6_addr_t;
182
183 #define IN_CLASSE(i)    IN_BADCLASS(i)
184 #define IN_CLASSE_NET   0xffffffffU
185
186 #define IN6_V4MAPPED_TO_INADDR(v6, v4) \
187         ((v4)->s_addr = (v6)->in6_u.u6_addr32[3])
188 #define IN6_V4MAPPED_TO_IPADDR(v6, v4) \
189         ((v4) = (v6)->in6_u.u6_addr32[3])
190
191 #ifdef __USE_MISC
192 # define _S6_un         in6_u
193 # define _S6_u32        u6_addr32
194 #endif