(root)/
glibc-2.38/
bits/
in.h
       1  /* Copyright (C) 1997-2023 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     <https://www.gnu.org/licenses/>.  */
      17  
      18  /* Generic version.  */
      19  
      20  #ifndef _NETINET_IN_H
      21  # error "Never use <bits/in.h> directly; include <netinet/in.h> instead."
      22  #endif
      23  
      24  /* This is the generic version, do not assume a linux-based kernel.  */
      25  #define __USE_KERNEL_IPV6_DEFS 0
      26  
      27  /* To select the IP level.  */
      28  #define SOL_IP		0
      29  
      30  /* Options for use with `getsockopt' and `setsockopt' at the IP level.
      31     The first word in the comment at the right is the data type used;
      32     "bool" means a boolean value stored in an `int'.  */
      33  #define	IP_OPTIONS	1	/* ip_opts; IP per-packet options.  */
      34  #define	IP_HDRINCL	2	/* int; Header is included with data.  */
      35  #define	IP_TOS		3	/* int; IP type of service and precedence.  */
      36  #define	IP_TTL		4	/* int; IP time to live.  */
      37  #define	IP_RECVOPTS	5	/* bool; Receive all IP options w/datagram.  */
      38  #define	IP_RECVRETOPTS	6	/* bool; Receive IP options for response.  */
      39  #define	IP_RECVDSTADDR	7	/* bool; Receive IP dst addr w/datagram.  */
      40  #define	IP_RETOPTS	8	/* ip_opts; Set/get IP per-packet options.  */
      41  #define IP_MULTICAST_IF 9	/* in_addr; set/get IP multicast i/f */
      42  #define IP_MULTICAST_TTL 10	/* unsigned char; set/get IP multicast ttl */
      43  #define IP_MULTICAST_LOOP 11	/* bool; set/get IP multicast loopback */
      44  #define IP_ADD_MEMBERSHIP 12	/* ip_mreq; add an IP group membership */
      45  #define IP_DROP_MEMBERSHIP 13	/* ip_mreq; drop an IP group membership */
      46  
      47  /* IP_MTU_DISCOVER arguments.  */
      48  #define IP_PMTUDISC_DONT   0	/* Never send DF frames.  */
      49  #define IP_PMTUDISC_WANT   1	/* Use per route hints.  */
      50  #define IP_PMTUDISC_DO     2	/* Always DF.  */
      51  #define IP_PMTUDISC_PROBE  3	/* Ignore dst pmtu.  */
      52  /* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
      53     Also incoming ICMP frag_needed notifications will be ignored on
      54     this socket to prevent accepting spoofed ones.  */
      55  #define IP_PMTUDISC_INTERFACE           4
      56  /* Like IP_PMTUDISC_INTERFACE but allow packets to be fragmented.  */
      57  #define IP_PMTUDISC_OMIT		5
      58  
      59  #ifdef __USE_MISC
      60  /* Structure used to describe IP options for IP_OPTIONS and IP_RETOPTS.
      61     The `ip_dst' field is used for the first-hop gateway when using a
      62     source route (this gets put into the header proper).  */
      63  struct ip_opts
      64    {
      65      struct in_addr ip_dst;	/* First hop; zero without source route.  */
      66      char ip_opts[40];		/* Actually variable in size.  */
      67    };
      68  #endif
      69  
      70  /* Socket-level values for IPv6.  */
      71  #define SOL_IPV6		41
      72  #define SOL_ICMPV6		58
      73  
      74  /* IPV6 socket options.  */
      75  #define IPV6_ADDRFORM		1
      76  #define IPV6_2292PKTINFO	2
      77  #define IPV6_2292HOPOPTS	3
      78  #define IPV6_2292DSTOPTS	4
      79  #define IPV6_2292RTHDR		5
      80  #define IPV6_2292PKTOPTIONS	6
      81  #define IPV6_CHECKSUM		7
      82  #define IPV6_2292HOPLIMIT	8
      83  
      84  #define IPV6_RXINFO		IPV6_2292PKTINFO
      85  #define IPV6_TXINFO		IPV6_RXINFO
      86  #define SCM_SRCINFO		IPV6_TXINFO
      87  #define SCM_SRCRT		IPV6_RXSRCRT
      88  
      89  #define IPV6_UNICAST_HOPS	16
      90  #define IPV6_MULTICAST_IF	17
      91  #define IPV6_MULTICAST_HOPS	18
      92  #define IPV6_MULTICAST_LOOP	19
      93  #define IPV6_JOIN_GROUP		20
      94  #define IPV6_LEAVE_GROUP	21
      95  #define IPV6_ROUTER_ALERT      22
      96  #define IPV6_MTU_DISCOVER      23
      97  #define IPV6_MTU               24
      98  #define IPV6_RECVERR           25
      99  #define IPV6_V6ONLY            26
     100  #define IPV6_JOIN_ANYCAST      27
     101  #define IPV6_LEAVE_ANYCAST     28
     102  
     103  /* IPV6_MTU_DISCOVER values.  */
     104  #define IPV6_PMTUDISC_DONT	0	/* Never send DF frames.  */
     105  #define IPV6_PMTUDISC_WANT	1	/* Use per route hints.  */
     106  #define IPV6_PMTUDISC_DO	2	/* Always DF.  */
     107  #define IPV6_PMTUDISC_PROBE	3	/* Ignore dst pmtu.  */
     108  #define IPV6_PMTUDISC_INTERFACE	4	/* See IP_PMTUDISC_INTERFACE.  */
     109  #define IPV6_PMTUDISC_OMIT	5	/* See IP_PMTUDISC_OMIT.  */
     110  
     111  /* Advanced API (RFC3542) (1).  */
     112  #define IPV6_RECVPKTINFO	49
     113  #define IPV6_PKTINFO		50
     114  #define IPV6_RECVHOPLIMIT	51
     115  #define IPV6_HOPLIMIT		52
     116  #define IPV6_RECVHOPOPTS	53
     117  #define IPV6_HOPOPTS		54
     118  #define IPV6_RTHDRDSTOPTS	55
     119  #define IPV6_RECVRTHDR		56
     120  #define IPV6_RTHDR		57
     121  #define IPV6_RECVDSTOPTS	58
     122  #define IPV6_DSTOPTS		59
     123  #define IPV6_RECVPATHMTU	60
     124  #define IPV6_PATHMTU		61
     125  #define IPV6_DONTFRAG		62
     126  
     127  /* Advanced API (RFC3542) (2).  */
     128  #define IPV6_RECVTCLASS		66
     129  #define IPV6_TCLASS		67
     130  
     131  /* RFC5014.  */
     132  #define IPV6_ADDR_PREFERENCES	72
     133  
     134  /* RFC5082.  */
     135  #define IPV6_MINHOPCOUNT	73
     136  
     137  /* Obsolete synonyms for the above.  */
     138  #define IPV6_ADD_MEMBERSHIP	IPV6_JOIN_GROUP
     139  #define IPV6_DROP_MEMBERSHIP	IPV6_LEAVE_GROUP
     140  #define IPV6_RXHOPOPTS		IPV6_2292HOPOPTS
     141  #define IPV6_RXDSTOPTS		IPV6_2292DSTOPTS
     142  
     143  /* Routing header options for IPv6.  */
     144  #define IPV6_RTHDR_LOOSE	0	/* Hop doesn't need to be neighbour. */
     145  #define IPV6_RTHDR_STRICT	1	/* Hop must be a neighbour.  */
     146  
     147  #define IPV6_RTHDR_TYPE_0	0	/* IPv6 Routing header type 0.  */