modernc.org/cc@v1.0.1/v2/headers/linux_386/usr/include/i386-linux-gnu/bits/in.h (about)

     1  /* Copyright (C) 1991-2018 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, see
    16     <http://www.gnu.org/licenses/>.  */
    17  
    18  /* Linux version.  */
    19  
    20  #ifndef _NETINET_IN_H
    21  # error "Never use <bits/in.h> directly; include <netinet/in.h> instead."
    22  #endif
    23  
    24  /* If the application has already included linux/in6.h from a linux-based
    25     kernel then we will not define the IPv6 IPPROTO_* defines, in6_addr (nor the
    26     defines), sockaddr_in6, or ipv6_mreq. Same for in6_ptkinfo or ip6_mtuinfo
    27     in linux/ipv6.h. The ABI used by the linux-kernel and glibc match exactly.
    28     Neither the linux kernel nor glibc should break this ABI without coordination.
    29     In upstream kernel 56c176c9 the _UAPI prefix was stripped so we need to check
    30     for _LINUX_IN6_H and _IPV6_H now, and keep checking the old versions for
    31     maximum backwards compatibility.  */
    32  #if defined _UAPI_LINUX_IN6_H \
    33      || defined _UAPI_IPV6_H \
    34      || defined _LINUX_IN6_H \
    35      || defined _IPV6_H
    36  /* This is not quite the same API since the kernel always defines s6_addr16 and
    37     s6_addr32. This is not a violation of POSIX since POSIX says "at least the
    38     following member" and that holds true.  */
    39  # define __USE_KERNEL_IPV6_DEFS 1
    40  #else
    41  # define __USE_KERNEL_IPV6_DEFS 0
    42  #endif
    43  
    44  /* Options for use with `getsockopt' and `setsockopt' at the IP level.
    45     The first word in the comment at the right is the data type used;
    46     "bool" means a boolean value stored in an `int'.  */
    47  #define        IP_OPTIONS      4	/* ip_opts; IP per-packet options.  */
    48  #define        IP_HDRINCL      3	/* int; Header is included with data.  */
    49  #define        IP_TOS          1	/* int; IP type of service and precedence.  */
    50  #define        IP_TTL          2	/* int; IP time to live.  */
    51  #define        IP_RECVOPTS     6	/* bool; Receive all IP options w/datagram.  */
    52  /* For BSD compatibility.  */
    53  #define        IP_RECVRETOPTS  IP_RETOPTS	/* bool; Receive IP options for response.  */
    54  #define        IP_RETOPTS      7	/* ip_opts; Set/get IP per-packet options.  */
    55  #define IP_MULTICAST_IF 32	/* in_addr; set/get IP multicast i/f */
    56  #define IP_MULTICAST_TTL 33	/* unsigned char; set/get IP multicast ttl */
    57  #define IP_MULTICAST_LOOP 34	/* bool; set/get IP multicast loopback */
    58  #define IP_ADD_MEMBERSHIP 35	/* ip_mreq; add an IP group membership */
    59  #define IP_DROP_MEMBERSHIP 36	/* ip_mreq; drop an IP group membership */
    60  #define IP_UNBLOCK_SOURCE 37	/* ip_mreq_source: unblock data from source */
    61  #define IP_BLOCK_SOURCE 38	/* ip_mreq_source: block data from source */
    62  #define IP_ADD_SOURCE_MEMBERSHIP 39	/* ip_mreq_source: join source group */
    63  #define IP_DROP_SOURCE_MEMBERSHIP 40	/* ip_mreq_source: leave source group */
    64  #define IP_MSFILTER 41
    65  #ifdef __USE_MISC
    66  # define MCAST_JOIN_GROUP 42	/* group_req: join any-source group */
    67  # define MCAST_BLOCK_SOURCE 43	/* group_source_req: block from given group */
    68  # define MCAST_UNBLOCK_SOURCE 44	/* group_source_req: unblock from given group */
    69  # define MCAST_LEAVE_GROUP 45	/* group_req: leave any-source group */
    70  # define MCAST_JOIN_SOURCE_GROUP 46	/* group_source_req: join source-spec gr */
    71  # define MCAST_LEAVE_SOURCE_GROUP 47	/* group_source_req: leave source-spec gr */
    72  # define MCAST_MSFILTER 48
    73  # define IP_MULTICAST_ALL 49
    74  # define IP_UNICAST_IF 50
    75  
    76  # define MCAST_EXCLUDE   0
    77  # define MCAST_INCLUDE   1
    78  #endif
    79  
    80  #define IP_ROUTER_ALERT	5	/* bool */
    81  #define IP_PKTINFO	8	/* bool */
    82  #define IP_PKTOPTIONS	9
    83  #define IP_PMTUDISC	10	/* obsolete name? */
    84  #define IP_MTU_DISCOVER	10	/* int; see below */
    85  #define IP_RECVERR	11	/* bool */
    86  #define IP_RECVTTL	12	/* bool */
    87  #define IP_RECVTOS	13	/* bool */
    88  #define IP_MTU		14	/* int */
    89  #define IP_FREEBIND	15
    90  #define IP_IPSEC_POLICY 16
    91  #define IP_XFRM_POLICY	17
    92  #define IP_PASSSEC	18
    93  #define IP_TRANSPARENT	19
    94  #define IP_MULTICAST_ALL 49	/* bool */
    95  
    96  /* TProxy original addresses */
    97  #define IP_ORIGDSTADDR       20
    98  #define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
    99  
   100  #define IP_MINTTL       21
   101  #define IP_NODEFRAG     22
   102  #define IP_CHECKSUM     23
   103  #define IP_BIND_ADDRESS_NO_PORT 24
   104  #define IP_RECVFRAGSIZE 25
   105  
   106  /* IP_MTU_DISCOVER arguments.  */
   107  #define IP_PMTUDISC_DONT   0	/* Never send DF frames.  */
   108  #define IP_PMTUDISC_WANT   1	/* Use per route hints.  */
   109  #define IP_PMTUDISC_DO     2	/* Always DF.  */
   110  #define IP_PMTUDISC_PROBE  3	/* Ignore dst pmtu.  */
   111  /* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
   112     Also incoming ICMP frag_needed notifications will be ignored on
   113     this socket to prevent accepting spoofed ones.  */
   114  #define IP_PMTUDISC_INTERFACE           4
   115  /* Like IP_PMTUDISC_INTERFACE but allow packets to be fragmented.  */
   116  #define IP_PMTUDISC_OMIT		5
   117  
   118  #define IP_MULTICAST_IF			32
   119  #define IP_MULTICAST_TTL 		33
   120  #define IP_MULTICAST_LOOP 		34
   121  #define IP_ADD_MEMBERSHIP		35
   122  #define IP_DROP_MEMBERSHIP		36
   123  #define IP_UNBLOCK_SOURCE		37
   124  #define IP_BLOCK_SOURCE			38
   125  #define IP_ADD_SOURCE_MEMBERSHIP	39
   126  #define IP_DROP_SOURCE_MEMBERSHIP	40
   127  #define IP_MSFILTER			41
   128  #define IP_MULTICAST_ALL		49
   129  #define IP_UNICAST_IF			50
   130  
   131  /* To select the IP level.  */
   132  #define SOL_IP	0
   133  
   134  #define IP_DEFAULT_MULTICAST_TTL        1
   135  #define IP_DEFAULT_MULTICAST_LOOP       1
   136  #define IP_MAX_MEMBERSHIPS              20
   137  
   138  #ifdef __USE_MISC
   139  /* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
   140     The `ip_dst' field is used for the first-hop gateway when using a
   141     source route (this gets put into the header proper).  */
   142  struct ip_opts {
   143  	struct in_addr ip_dst;	/* First hop; zero without source route.  */
   144  	char ip_opts[40];	/* Actually variable in size.  */
   145  };
   146  
   147  /* Like `struct ip_mreq' but including interface specification by index.  */
   148  struct ip_mreqn {
   149  	struct in_addr imr_multiaddr;	/* IP multicast address of group */
   150  	struct in_addr imr_address;	/* local IP address of interface */
   151  	int imr_ifindex;	/* Interface index */
   152  };
   153  
   154  /* Structure used for IP_PKTINFO.  */
   155  struct in_pktinfo {
   156  	int ipi_ifindex;	/* Interface index  */
   157  	struct in_addr ipi_spec_dst;	/* Routing destination address  */
   158  	struct in_addr ipi_addr;	/* Header destination address  */
   159  };
   160  #endif
   161  
   162  /* Options for use with `getsockopt' and `setsockopt' at the IPv6 level.
   163     The first word in the comment at the right is the data type used;
   164     "bool" means a boolean value stored in an `int'.  */
   165  #define IPV6_ADDRFORM		1
   166  #define IPV6_2292PKTINFO	2
   167  #define IPV6_2292HOPOPTS	3
   168  #define IPV6_2292DSTOPTS	4
   169  #define IPV6_2292RTHDR		5
   170  #define IPV6_2292PKTOPTIONS	6
   171  #define IPV6_CHECKSUM		7
   172  #define IPV6_2292HOPLIMIT	8
   173  
   174  #define SCM_SRCRT		IPV6_RXSRCRT
   175  
   176  #define IPV6_NEXTHOP		9
   177  #define IPV6_AUTHHDR		10
   178  #define IPV6_UNICAST_HOPS	16
   179  #define IPV6_MULTICAST_IF	17
   180  #define IPV6_MULTICAST_HOPS	18
   181  #define IPV6_MULTICAST_LOOP	19
   182  #define IPV6_JOIN_GROUP		20
   183  #define IPV6_LEAVE_GROUP	21
   184  #define IPV6_ROUTER_ALERT	22
   185  #define IPV6_MTU_DISCOVER	23
   186  #define IPV6_MTU		24
   187  #define IPV6_RECVERR		25
   188  #define IPV6_V6ONLY		26
   189  #define IPV6_JOIN_ANYCAST	27
   190  #define IPV6_LEAVE_ANYCAST	28
   191  #define IPV6_IPSEC_POLICY	34
   192  #define IPV6_XFRM_POLICY	35
   193  #define IPV6_HDRINCL		36
   194  
   195  /* Advanced API (RFC3542) (1).  */
   196  #define IPV6_RECVPKTINFO	49
   197  #define IPV6_PKTINFO		50
   198  #define IPV6_RECVHOPLIMIT	51
   199  #define IPV6_HOPLIMIT		52
   200  #define IPV6_RECVHOPOPTS	53
   201  #define IPV6_HOPOPTS		54
   202  #define IPV6_RTHDRDSTOPTS	55
   203  #define IPV6_RECVRTHDR		56
   204  #define IPV6_RTHDR		57
   205  #define IPV6_RECVDSTOPTS	58
   206  #define IPV6_DSTOPTS		59
   207  #define IPV6_RECVPATHMTU	60
   208  #define IPV6_PATHMTU		61
   209  #define IPV6_DONTFRAG		62
   210  
   211  /* Advanced API (RFC3542) (2).  */
   212  #define IPV6_RECVTCLASS		66
   213  #define IPV6_TCLASS		67
   214  
   215  #define IPV6_AUTOFLOWLABEL	70
   216  
   217  /* RFC5014.  */
   218  #define IPV6_ADDR_PREFERENCES	72
   219  
   220  /* RFC5082.  */
   221  #define IPV6_MINHOPCOUNT	73
   222  
   223  #define IPV6_ORIGDSTADDR	74
   224  #define IPV6_RECVORIGDSTADDR	IPV6_ORIGDSTADDR
   225  #define IPV6_TRANSPARENT	75
   226  #define IPV6_UNICAST_IF		76
   227  #define IPV6_RECVFRAGSIZE	77
   228  
   229  /* Obsolete synonyms for the above.  */
   230  #if !__USE_KERNEL_IPV6_DEFS
   231  # define IPV6_ADD_MEMBERSHIP	IPV6_JOIN_GROUP
   232  # define IPV6_DROP_MEMBERSHIP	IPV6_LEAVE_GROUP
   233  #endif
   234  #define IPV6_RXHOPOPTS		IPV6_HOPOPTS
   235  #define IPV6_RXDSTOPTS		IPV6_DSTOPTS
   236  
   237  /* IPV6_MTU_DISCOVER values.  */
   238  #define IPV6_PMTUDISC_DONT	0	/* Never send DF frames.  */
   239  #define IPV6_PMTUDISC_WANT	1	/* Use per route hints.  */
   240  #define IPV6_PMTUDISC_DO	2	/* Always DF.  */
   241  #define IPV6_PMTUDISC_PROBE	3	/* Ignore dst pmtu.  */
   242  #define IPV6_PMTUDISC_INTERFACE	4	/* See IP_PMTUDISC_INTERFACE.  */
   243  #define IPV6_PMTUDISC_OMIT	5	/* See IP_PMTUDISC_OMIT.  */
   244  
   245  /* Socket level values for IPv6.  */
   246  #define SOL_IPV6        41
   247  #define SOL_ICMPV6      58
   248  
   249  /* Routing header options for IPv6.  */
   250  #define IPV6_RTHDR_LOOSE	0	/* Hop doesn't need to be neighbour. */
   251  #define IPV6_RTHDR_STRICT	1	/* Hop must be a neighbour.  */
   252  
   253  #define IPV6_RTHDR_TYPE_0	0	/* IPv6 Routing header type 0.  */