Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
0002 /*
0003  * INET     An implementation of the TCP/IP protocol suite for the LINUX
0004  *      operating system.  INET is implemented using the  BSD Socket
0005  *      interface as the means of communication with the user level.
0006  *
0007  *      Definitions of the Internet Protocol.
0008  *
0009  * Version: @(#)in.h    1.0.1   04/21/93
0010  *
0011  * Authors: Original taken from the GNU Project <netinet/in.h> file.
0012  *      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
0013  *
0014  *      This program is free software; you can redistribute it and/or
0015  *      modify it under the terms of the GNU General Public License
0016  *      as published by the Free Software Foundation; either version
0017  *      2 of the License, or (at your option) any later version.
0018  */
0019 #ifndef _UAPI_LINUX_IN_H
0020 #define _UAPI_LINUX_IN_H
0021 
0022 #include <linux/types.h>
0023 #include <linux/libc-compat.h>
0024 #include <linux/socket.h>
0025 
0026 #if __UAPI_DEF_IN_IPPROTO
0027 /* Standard well-defined IP protocols.  */
0028 enum {
0029   IPPROTO_IP = 0,       /* Dummy protocol for TCP       */
0030 #define IPPROTO_IP      IPPROTO_IP
0031   IPPROTO_ICMP = 1,     /* Internet Control Message Protocol    */
0032 #define IPPROTO_ICMP        IPPROTO_ICMP
0033   IPPROTO_IGMP = 2,     /* Internet Group Management Protocol   */
0034 #define IPPROTO_IGMP        IPPROTO_IGMP
0035   IPPROTO_IPIP = 4,     /* IPIP tunnels (older KA9Q tunnels use 94) */
0036 #define IPPROTO_IPIP        IPPROTO_IPIP
0037   IPPROTO_TCP = 6,      /* Transmission Control Protocol    */
0038 #define IPPROTO_TCP     IPPROTO_TCP
0039   IPPROTO_EGP = 8,      /* Exterior Gateway Protocol        */
0040 #define IPPROTO_EGP     IPPROTO_EGP
0041   IPPROTO_PUP = 12,     /* PUP protocol             */
0042 #define IPPROTO_PUP     IPPROTO_PUP
0043   IPPROTO_UDP = 17,     /* User Datagram Protocol       */
0044 #define IPPROTO_UDP     IPPROTO_UDP
0045   IPPROTO_IDP = 22,     /* XNS IDP protocol         */
0046 #define IPPROTO_IDP     IPPROTO_IDP
0047   IPPROTO_TP = 29,      /* SO Transport Protocol Class 4    */
0048 #define IPPROTO_TP      IPPROTO_TP
0049   IPPROTO_DCCP = 33,        /* Datagram Congestion Control Protocol */
0050 #define IPPROTO_DCCP        IPPROTO_DCCP
0051   IPPROTO_IPV6 = 41,        /* IPv6-in-IPv4 tunnelling      */
0052 #define IPPROTO_IPV6        IPPROTO_IPV6
0053   IPPROTO_RSVP = 46,        /* RSVP Protocol            */
0054 #define IPPROTO_RSVP        IPPROTO_RSVP
0055   IPPROTO_GRE = 47,     /* Cisco GRE tunnels (rfc 1701,1702)    */
0056 #define IPPROTO_GRE     IPPROTO_GRE
0057   IPPROTO_ESP = 50,     /* Encapsulation Security Payload protocol */
0058 #define IPPROTO_ESP     IPPROTO_ESP
0059   IPPROTO_AH = 51,      /* Authentication Header protocol   */
0060 #define IPPROTO_AH      IPPROTO_AH
0061   IPPROTO_MTP = 92,     /* Multicast Transport Protocol     */
0062 #define IPPROTO_MTP     IPPROTO_MTP
0063   IPPROTO_BEETPH = 94,      /* IP option pseudo header for BEET */
0064 #define IPPROTO_BEETPH      IPPROTO_BEETPH
0065   IPPROTO_ENCAP = 98,       /* Encapsulation Header         */
0066 #define IPPROTO_ENCAP       IPPROTO_ENCAP
0067   IPPROTO_PIM = 103,        /* Protocol Independent Multicast   */
0068 #define IPPROTO_PIM     IPPROTO_PIM
0069   IPPROTO_COMP = 108,       /* Compression Header Protocol      */
0070 #define IPPROTO_COMP        IPPROTO_COMP
0071   IPPROTO_SCTP = 132,       /* Stream Control Transport Protocol    */
0072 #define IPPROTO_SCTP        IPPROTO_SCTP
0073   IPPROTO_UDPLITE = 136,    /* UDP-Lite (RFC 3828)          */
0074 #define IPPROTO_UDPLITE     IPPROTO_UDPLITE
0075   IPPROTO_MPLS = 137,       /* MPLS in IP (RFC 4023)        */
0076 #define IPPROTO_MPLS        IPPROTO_MPLS
0077   IPPROTO_ETHERNET = 143,   /* Ethernet-within-IPv6 Encapsulation   */
0078 #define IPPROTO_ETHERNET    IPPROTO_ETHERNET
0079   IPPROTO_RAW = 255,        /* Raw IP packets           */
0080 #define IPPROTO_RAW     IPPROTO_RAW
0081   IPPROTO_MPTCP = 262,      /* Multipath TCP connection     */
0082 #define IPPROTO_MPTCP       IPPROTO_MPTCP
0083   IPPROTO_MAX
0084 };
0085 #endif
0086 
0087 #if __UAPI_DEF_IN_ADDR
0088 /* Internet address. */
0089 struct in_addr {
0090     __be32  s_addr;
0091 };
0092 #endif
0093 
0094 #define IP_TOS      1
0095 #define IP_TTL      2
0096 #define IP_HDRINCL  3
0097 #define IP_OPTIONS  4
0098 #define IP_ROUTER_ALERT 5
0099 #define IP_RECVOPTS 6
0100 #define IP_RETOPTS  7
0101 #define IP_PKTINFO  8
0102 #define IP_PKTOPTIONS   9
0103 #define IP_MTU_DISCOVER 10
0104 #define IP_RECVERR  11
0105 #define IP_RECVTTL  12
0106 #define IP_RECVTOS  13
0107 #define IP_MTU      14
0108 #define IP_FREEBIND 15
0109 #define IP_IPSEC_POLICY 16
0110 #define IP_XFRM_POLICY  17
0111 #define IP_PASSSEC  18
0112 #define IP_TRANSPARENT  19
0113 
0114 /* BSD compatibility */
0115 #define IP_RECVRETOPTS  IP_RETOPTS
0116 
0117 /* TProxy original addresses */
0118 #define IP_ORIGDSTADDR       20
0119 #define IP_RECVORIGDSTADDR   IP_ORIGDSTADDR
0120 
0121 #define IP_MINTTL       21
0122 #define IP_NODEFRAG     22
0123 #define IP_CHECKSUM 23
0124 #define IP_BIND_ADDRESS_NO_PORT 24
0125 #define IP_RECVFRAGSIZE 25
0126 #define IP_RECVERR_RFC4884  26
0127 
0128 /* IP_MTU_DISCOVER values */
0129 #define IP_PMTUDISC_DONT        0   /* Never send DF frames */
0130 #define IP_PMTUDISC_WANT        1   /* Use per route hints  */
0131 #define IP_PMTUDISC_DO          2   /* Always DF        */
0132 #define IP_PMTUDISC_PROBE       3       /* Ignore dst pmtu      */
0133 /* Always use interface mtu (ignores dst pmtu) but don't set DF flag.
0134  * Also incoming ICMP frag_needed notifications will be ignored on
0135  * this socket to prevent accepting spoofed ones.
0136  */
0137 #define IP_PMTUDISC_INTERFACE       4
0138 /* weaker version of IP_PMTUDISC_INTERFACE, which allows packets to get
0139  * fragmented if they exeed the interface mtu
0140  */
0141 #define IP_PMTUDISC_OMIT        5
0142 
0143 #define IP_MULTICAST_IF         32
0144 #define IP_MULTICAST_TTL        33
0145 #define IP_MULTICAST_LOOP       34
0146 #define IP_ADD_MEMBERSHIP       35
0147 #define IP_DROP_MEMBERSHIP      36
0148 #define IP_UNBLOCK_SOURCE       37
0149 #define IP_BLOCK_SOURCE         38
0150 #define IP_ADD_SOURCE_MEMBERSHIP    39
0151 #define IP_DROP_SOURCE_MEMBERSHIP   40
0152 #define IP_MSFILTER         41
0153 #define MCAST_JOIN_GROUP        42
0154 #define MCAST_BLOCK_SOURCE      43
0155 #define MCAST_UNBLOCK_SOURCE        44
0156 #define MCAST_LEAVE_GROUP       45
0157 #define MCAST_JOIN_SOURCE_GROUP     46
0158 #define MCAST_LEAVE_SOURCE_GROUP    47
0159 #define MCAST_MSFILTER          48
0160 #define IP_MULTICAST_ALL        49
0161 #define IP_UNICAST_IF           50
0162 
0163 #define MCAST_EXCLUDE   0
0164 #define MCAST_INCLUDE   1
0165 
0166 /* These need to appear somewhere around here */
0167 #define IP_DEFAULT_MULTICAST_TTL        1
0168 #define IP_DEFAULT_MULTICAST_LOOP       1
0169 
0170 /* Request struct for multicast socket ops */
0171 
0172 #if __UAPI_DEF_IP_MREQ
0173 struct ip_mreq  {
0174     struct in_addr imr_multiaddr;   /* IP multicast address of group */
0175     struct in_addr imr_interface;   /* local IP address of interface */
0176 };
0177 
0178 struct ip_mreqn {
0179     struct in_addr  imr_multiaddr;      /* IP multicast address of group */
0180     struct in_addr  imr_address;        /* local IP address of interface */
0181     int     imr_ifindex;        /* Interface index */
0182 };
0183 
0184 struct ip_mreq_source {
0185     __be32      imr_multiaddr;
0186     __be32      imr_interface;
0187     __be32      imr_sourceaddr;
0188 };
0189 
0190 struct ip_msfilter {
0191     union {
0192         struct {
0193             __be32      imsf_multiaddr_aux;
0194             __be32      imsf_interface_aux;
0195             __u32       imsf_fmode_aux;
0196             __u32       imsf_numsrc_aux;
0197             __be32      imsf_slist[1];
0198         };
0199         struct {
0200             __be32      imsf_multiaddr;
0201             __be32      imsf_interface;
0202             __u32       imsf_fmode;
0203             __u32       imsf_numsrc;
0204             __be32      imsf_slist_flex[];
0205         };
0206     };
0207 };
0208 
0209 #define IP_MSFILTER_SIZE(numsrc) \
0210     (sizeof(struct ip_msfilter) - sizeof(__u32) \
0211     + (numsrc) * sizeof(__u32))
0212 
0213 struct group_req {
0214     __u32                gr_interface;  /* interface index */
0215     struct __kernel_sockaddr_storage gr_group;  /* group address */
0216 };
0217 
0218 struct group_source_req {
0219     __u32                gsr_interface; /* interface index */
0220     struct __kernel_sockaddr_storage gsr_group; /* group address */
0221     struct __kernel_sockaddr_storage gsr_source;    /* source address */
0222 };
0223 
0224 struct group_filter {
0225     union {
0226         struct {
0227             __u32                gf_interface_aux; /* interface index */
0228             struct __kernel_sockaddr_storage gf_group_aux;     /* multicast address */
0229             __u32                gf_fmode_aux;     /* filter mode */
0230             __u32                gf_numsrc_aux;    /* number of sources */
0231             struct __kernel_sockaddr_storage gf_slist[1];      /* interface index */
0232         };
0233         struct {
0234             __u32                gf_interface;    /* interface index */
0235             struct __kernel_sockaddr_storage gf_group;    /* multicast address */
0236             __u32                gf_fmode;    /* filter mode */
0237             __u32                gf_numsrc;   /* number of sources */
0238             struct __kernel_sockaddr_storage gf_slist_flex[]; /* interface index */
0239         };
0240     };
0241 };
0242 
0243 #define GROUP_FILTER_SIZE(numsrc) \
0244     (sizeof(struct group_filter) - sizeof(struct __kernel_sockaddr_storage) \
0245     + (numsrc) * sizeof(struct __kernel_sockaddr_storage))
0246 #endif
0247 
0248 #if __UAPI_DEF_IN_PKTINFO
0249 struct in_pktinfo {
0250     int     ipi_ifindex;
0251     struct in_addr  ipi_spec_dst;
0252     struct in_addr  ipi_addr;
0253 };
0254 #endif
0255 
0256 /* Structure describing an Internet (IP) socket address. */
0257 #if  __UAPI_DEF_SOCKADDR_IN
0258 #define __SOCK_SIZE__   16      /* sizeof(struct sockaddr)  */
0259 struct sockaddr_in {
0260   __kernel_sa_family_t  sin_family; /* Address family       */
0261   __be16        sin_port;   /* Port number          */
0262   struct in_addr    sin_addr;   /* Internet address     */
0263 
0264   /* Pad to size of `struct sockaddr'. */
0265   unsigned char     __pad[__SOCK_SIZE__ - sizeof(short int) -
0266             sizeof(unsigned short int) - sizeof(struct in_addr)];
0267 };
0268 #define sin_zero    __pad       /* for BSD UNIX comp. -FvK  */
0269 #endif
0270 
0271 #if __UAPI_DEF_IN_CLASS
0272 /*
0273  * Definitions of the bits in an Internet address integer.
0274  * On subnets, host and network parts are found according
0275  * to the subnet mask, not these masks.
0276  */
0277 #define IN_CLASSA(a)        ((((long int) (a)) & 0x80000000) == 0)
0278 #define IN_CLASSA_NET       0xff000000
0279 #define IN_CLASSA_NSHIFT    24
0280 #define IN_CLASSA_HOST      (0xffffffff & ~IN_CLASSA_NET)
0281 #define IN_CLASSA_MAX       128
0282 
0283 #define IN_CLASSB(a)        ((((long int) (a)) & 0xc0000000) == 0x80000000)
0284 #define IN_CLASSB_NET       0xffff0000
0285 #define IN_CLASSB_NSHIFT    16
0286 #define IN_CLASSB_HOST      (0xffffffff & ~IN_CLASSB_NET)
0287 #define IN_CLASSB_MAX       65536
0288 
0289 #define IN_CLASSC(a)        ((((long int) (a)) & 0xe0000000) == 0xc0000000)
0290 #define IN_CLASSC_NET       0xffffff00
0291 #define IN_CLASSC_NSHIFT    8
0292 #define IN_CLASSC_HOST      (0xffffffff & ~IN_CLASSC_NET)
0293 
0294 #define IN_CLASSD(a)        ((((long int) (a)) & 0xf0000000) == 0xe0000000)
0295 #define IN_MULTICAST(a)     IN_CLASSD(a)
0296 #define IN_MULTICAST_NET    0xe0000000
0297 
0298 #define IN_BADCLASS(a)      (((long int) (a) ) == (long int)0xffffffff)
0299 #define IN_EXPERIMENTAL(a)  IN_BADCLASS((a))
0300 
0301 #define IN_CLASSE(a)        ((((long int) (a)) & 0xf0000000) == 0xf0000000)
0302 #define IN_CLASSE_NET       0xffffffff
0303 #define IN_CLASSE_NSHIFT    0
0304 
0305 /* Address to accept any incoming messages. */
0306 #define INADDR_ANY      ((unsigned long int) 0x00000000)
0307 
0308 /* Address to send to all hosts. */
0309 #define INADDR_BROADCAST    ((unsigned long int) 0xffffffff)
0310 
0311 /* Address indicating an error return. */
0312 #define INADDR_NONE     ((unsigned long int) 0xffffffff)
0313 
0314 /* Dummy address for src of ICMP replies if no real address is set (RFC7600). */
0315 #define INADDR_DUMMY        ((unsigned long int) 0xc0000008)
0316 
0317 /* Network number for local host loopback. */
0318 #define IN_LOOPBACKNET      127
0319 
0320 /* Address to loopback in software to local host.  */
0321 #define INADDR_LOOPBACK     0x7f000001  /* 127.0.0.1   */
0322 #define IN_LOOPBACK(a)      ((((long int) (a)) & 0xff000000) == 0x7f000000)
0323 
0324 /* Defines for Multicast INADDR */
0325 #define INADDR_UNSPEC_GROUP     0xe0000000U /* 224.0.0.0   */
0326 #define INADDR_ALLHOSTS_GROUP       0xe0000001U /* 224.0.0.1   */
0327 #define INADDR_ALLRTRS_GROUP        0xe0000002U /* 224.0.0.2 */
0328 #define INADDR_ALLSNOOPERS_GROUP    0xe000006aU /* 224.0.0.106 */
0329 #define INADDR_MAX_LOCAL_GROUP      0xe00000ffU /* 224.0.0.255 */
0330 #endif
0331 
0332 /* <asm/byteorder.h> contains the htonl type stuff.. */
0333 #include <asm/byteorder.h> 
0334 
0335 
0336 #endif /* _UAPI_LINUX_IN_H */