github.com/cznic/cc@v0.0.0-20181122101902-d673e9b70d4d/v2/headers/linux_amd64/usr/include/bits/in.h (about)

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