github.com/cilium/cilium@v1.16.2/bpf/include/linux/in.h (about)

     1  /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
     2  /* Copyright Authors of the Linux kernel */
     3  /*
     4   * INET		An implementation of the TCP/IP protocol suite for the LINUX
     5   *		operating system.  INET is implemented using the  BSD Socket
     6   *		interface as the means of communication with the user level.
     7   *
     8   *		Definitions of the Internet Protocol.
     9   *
    10   * Version:	@(#)in.h	1.0.1	04/21/93
    11   *
    12   * Authors:	Original taken from the GNU Project <netinet/in.h> file.
    13   *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
    14   *
    15   *		This program is free software; you can redistribute it and/or
    16   *		modify it under the terms of the GNU General Public License
    17   *		as published by the Free Software Foundation; either version
    18   *		2 of the License, or (at your option) any later version.
    19   */
    20  #pragma once
    21  
    22  #include <linux/types.h>
    23  
    24  /* Standard well-defined IP protocols.  */
    25  enum {
    26    IPPROTO_IP = 0,		/* Dummy protocol for TCP		*/
    27  #define IPPROTO_IP		IPPROTO_IP
    28    IPPROTO_ICMP = 1,		/* Internet Control Message Protocol	*/
    29  #define IPPROTO_ICMP		IPPROTO_ICMP
    30    IPPROTO_IGMP = 2,		/* Internet Group Management Protocol	*/
    31  #define IPPROTO_IGMP		IPPROTO_IGMP
    32    IPPROTO_IPIP = 4,		/* IPIP tunnels (older KA9Q tunnels use 94) */
    33  #define IPPROTO_IPIP		IPPROTO_IPIP
    34    IPPROTO_TCP = 6,		/* Transmission Control Protocol	*/
    35  #define IPPROTO_TCP		IPPROTO_TCP
    36    IPPROTO_EGP = 8,		/* Exterior Gateway Protocol		*/
    37  #define IPPROTO_EGP		IPPROTO_EGP
    38    IPPROTO_PUP = 12,		/* PUP protocol				*/
    39  #define IPPROTO_PUP		IPPROTO_PUP
    40    IPPROTO_UDP = 17,		/* User Datagram Protocol		*/
    41  #define IPPROTO_UDP		IPPROTO_UDP
    42    IPPROTO_IDP = 22,		/* XNS IDP protocol			*/
    43  #define IPPROTO_IDP		IPPROTO_IDP
    44    IPPROTO_TP = 29,		/* SO Transport Protocol Class 4	*/
    45  #define IPPROTO_TP		IPPROTO_TP
    46    IPPROTO_DCCP = 33,		/* Datagram Congestion Control Protocol */
    47  #define IPPROTO_DCCP		IPPROTO_DCCP
    48    IPPROTO_IPV6 = 41,		/* IPv6-in-IPv4 tunnelling		*/
    49  #define IPPROTO_IPV6		IPPROTO_IPV6
    50    IPPROTO_RSVP = 46,		/* RSVP Protocol			*/
    51  #define IPPROTO_RSVP		IPPROTO_RSVP
    52    IPPROTO_GRE = 47,		/* Cisco GRE tunnels (rfc 1701,1702)	*/
    53  #define IPPROTO_GRE		IPPROTO_GRE
    54    IPPROTO_ESP = 50,		/* Encapsulation Security Payload protocol */
    55  #define IPPROTO_ESP		IPPROTO_ESP
    56    IPPROTO_AH = 51,		/* Authentication Header protocol	*/
    57  #define IPPROTO_AH		IPPROTO_AH
    58    IPPROTO_MTP = 92,		/* Multicast Transport Protocol		*/
    59  #define IPPROTO_MTP		IPPROTO_MTP
    60    IPPROTO_BEETPH = 94,		/* IP option pseudo header for BEET	*/
    61  #define IPPROTO_BEETPH		IPPROTO_BEETPH
    62    IPPROTO_ENCAP = 98,		/* Encapsulation Header			*/
    63  #define IPPROTO_ENCAP		IPPROTO_ENCAP
    64    IPPROTO_PIM = 103,		/* Protocol Independent Multicast	*/
    65  #define IPPROTO_PIM		IPPROTO_PIM
    66    IPPROTO_COMP = 108,		/* Compression Header Protocol		*/
    67  #define IPPROTO_COMP		IPPROTO_COMP
    68    IPPROTO_SCTP = 132,		/* Stream Control Transport Protocol	*/
    69  #define IPPROTO_SCTP		IPPROTO_SCTP
    70    IPPROTO_UDPLITE = 136,	/* UDP-Lite (RFC 3828)			*/
    71  #define IPPROTO_UDPLITE		IPPROTO_UDPLITE
    72    IPPROTO_MPLS = 137,		/* MPLS in IP (RFC 4023)		*/
    73  #define IPPROTO_MPLS		IPPROTO_MPLS
    74    IPPROTO_RAW = 255,		/* Raw IP packets			*/
    75  #define IPPROTO_RAW		IPPROTO_RAW
    76    IPPROTO_MAX
    77  };
    78  
    79  /* Internet address. */
    80  struct in_addr {
    81  	__be32	s_addr;
    82  };
    83  
    84  #define IP_TOS		1
    85  #define IP_TTL		2
    86  #define IP_HDRINCL	3
    87  #define IP_OPTIONS	4
    88  #define IP_ROUTER_ALERT	5
    89  #define IP_RECVOPTS	6
    90  #define IP_RETOPTS	7
    91  #define IP_PKTINFO	8
    92  #define IP_PKTOPTIONS	9
    93  #define IP_MTU_DISCOVER	10
    94  #define IP_RECVERR	11
    95  #define IP_RECVTTL	12
    96  #define	IP_RECVTOS	13
    97  #define IP_MTU		14
    98  #define IP_FREEBIND	15
    99  #define IP_IPSEC_POLICY	16
   100  #define IP_XFRM_POLICY	17
   101  #define IP_PASSSEC	18
   102  #define IP_TRANSPARENT	19
   103  
   104  /* BSD compatibility */
   105  #define IP_RECVRETOPTS	IP_RETOPTS
   106  
   107  /* TProxy original addresses */
   108  #define IP_ORIGDSTADDR       20
   109  #define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
   110  
   111  #define IP_MINTTL       21
   112  #define IP_NODEFRAG     22
   113  #define IP_CHECKSUM	23
   114  #define IP_BIND_ADDRESS_NO_PORT	24
   115  
   116  /* IP_MTU_DISCOVER values */
   117  #define IP_PMTUDISC_DONT		0	/* Never send DF frames */
   118  #define IP_PMTUDISC_WANT		1	/* Use per route hints	*/
   119  #define IP_PMTUDISC_DO			2	/* Always DF		*/
   120  #define IP_PMTUDISC_PROBE		3       /* Ignore dst pmtu      */
   121  /* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
   122   * Also incoming ICMP frag_needed notifications will be ignored on
   123   * this socket to prevent accepting spoofed ones.
   124   */
   125  #define IP_PMTUDISC_INTERFACE		4
   126  /* weaker version of IP_PMTUDISC_INTERFACE, which allos packets to get
   127   * fragmented if they exeed the interface mtu
   128   */
   129  #define IP_PMTUDISC_OMIT		5
   130  
   131  #define IP_MULTICAST_IF			32
   132  #define IP_MULTICAST_TTL 		33
   133  #define IP_MULTICAST_LOOP 		34
   134  #define IP_ADD_MEMBERSHIP		35
   135  #define IP_DROP_MEMBERSHIP		36
   136  #define IP_UNBLOCK_SOURCE		37
   137  #define IP_BLOCK_SOURCE			38
   138  #define IP_ADD_SOURCE_MEMBERSHIP	39
   139  #define IP_DROP_SOURCE_MEMBERSHIP	40
   140  #define IP_MSFILTER			41
   141  #define MCAST_JOIN_GROUP		42
   142  #define MCAST_BLOCK_SOURCE		43
   143  #define MCAST_UNBLOCK_SOURCE		44
   144  #define MCAST_LEAVE_GROUP		45
   145  #define MCAST_JOIN_SOURCE_GROUP		46
   146  #define MCAST_LEAVE_SOURCE_GROUP	47
   147  #define MCAST_MSFILTER			48
   148  #define IP_MULTICAST_ALL		49
   149  #define IP_UNICAST_IF			50
   150  
   151  #define MCAST_EXCLUDE	0
   152  #define MCAST_INCLUDE	1
   153  
   154  /* These need to appear somewhere around here */
   155  #define IP_DEFAULT_MULTICAST_TTL        1
   156  #define IP_DEFAULT_MULTICAST_LOOP       1
   157  
   158  /* Request struct for multicast socket ops */
   159  
   160  /*
   161   * Definitions of the bits in an Internet address integer.
   162   * On subnets, host and network parts are found according
   163   * to the subnet mask, not these masks.
   164   */
   165  #define	IN_CLASSA(a)		((((long int) (a)) & 0x80000000) == 0)
   166  #define	IN_CLASSA_NET		0xff000000
   167  #define	IN_CLASSA_NSHIFT	24
   168  #define	IN_CLASSA_HOST		(0xffffffff & ~IN_CLASSA_NET)
   169  #define	IN_CLASSA_MAX		128
   170  
   171  #define	IN_CLASSB(a)		((((long int) (a)) & 0xc0000000) == 0x80000000)
   172  #define	IN_CLASSB_NET		0xffff0000
   173  #define	IN_CLASSB_NSHIFT	16
   174  #define	IN_CLASSB_HOST		(0xffffffff & ~IN_CLASSB_NET)
   175  #define	IN_CLASSB_MAX		65536
   176  
   177  #define	IN_CLASSC(a)		((((long int) (a)) & 0xe0000000) == 0xc0000000)
   178  #define	IN_CLASSC_NET		0xffffff00
   179  #define	IN_CLASSC_NSHIFT	8
   180  #define	IN_CLASSC_HOST		(0xffffffff & ~IN_CLASSC_NET)
   181  
   182  #define	IN_CLASSD(a)		((((long int) (a)) & 0xf0000000) == 0xe0000000)
   183  #define	IN_MULTICAST(a)		IN_CLASSD(a)
   184  #define IN_MULTICAST_NET	0xF0000000
   185  
   186  #define	IN_EXPERIMENTAL(a)	((((long int) (a)) & 0xf0000000) == 0xf0000000)
   187  #define	IN_BADCLASS(a)		IN_EXPERIMENTAL((a))
   188  
   189  /* Address to accept any incoming messages. */
   190  #define	INADDR_ANY		((unsigned long int) 0x00000000)
   191  
   192  /* Address to send to all hosts. */
   193  #define	INADDR_BROADCAST	((unsigned long int) 0xffffffff)
   194  
   195  /* Address indicating an error return. */
   196  #define	INADDR_NONE		((unsigned long int) 0xffffffff)
   197  
   198  /* Network number for local host loopback. */
   199  #define	IN_LOOPBACKNET		127
   200  
   201  /* Address to loopback in software to local host.  */
   202  #define	INADDR_LOOPBACK		0x7f000001	/* 127.0.0.1   */
   203  #define	IN_LOOPBACK(a)		((((long int) (a)) & 0xff000000) == 0x7f000000)
   204  
   205  /* Defines for Multicast INADDR */
   206  #define INADDR_UNSPEC_GROUP   	0xe0000000U	/* 224.0.0.0   */
   207  #define INADDR_ALLHOSTS_GROUP 	0xe0000001U	/* 224.0.0.1   */
   208  #define INADDR_ALLRTRS_GROUP    0xe0000002U	/* 224.0.0.2 */
   209  #define INADDR_MAX_LOCAL_GROUP  0xe00000ffU	/* 224.0.0.255 */