1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2*de1e4e89SAndroid Build Coastguard Worker /* 3*de1e4e89SAndroid Build Coastguard Worker * INET An implementation of the TCP/IP protocol suite for the LINUX 4*de1e4e89SAndroid Build Coastguard Worker * operating system. INET is implemented using the BSD Socket 5*de1e4e89SAndroid Build Coastguard Worker * interface as the means of communication with the user level. 6*de1e4e89SAndroid Build Coastguard Worker * 7*de1e4e89SAndroid Build Coastguard Worker * Definitions for the IP protocol. 8*de1e4e89SAndroid Build Coastguard Worker * 9*de1e4e89SAndroid Build Coastguard Worker * Version: @(#)ip.h 1.0.2 04/28/93 10*de1e4e89SAndroid Build Coastguard Worker * 11*de1e4e89SAndroid Build Coastguard Worker * Authors: Fred N. van Kempen, <[email protected]> 12*de1e4e89SAndroid Build Coastguard Worker * 13*de1e4e89SAndroid Build Coastguard Worker * This program is free software; you can redistribute it and/or 14*de1e4e89SAndroid Build Coastguard Worker * modify it under the terms of the GNU General Public License 15*de1e4e89SAndroid Build Coastguard Worker * as published by the Free Software Foundation; either version 16*de1e4e89SAndroid Build Coastguard Worker * 2 of the License, or (at your option) any later version. 17*de1e4e89SAndroid Build Coastguard Worker */ 18*de1e4e89SAndroid Build Coastguard Worker #ifndef _LINUX_IP_H 19*de1e4e89SAndroid Build Coastguard Worker #define _LINUX_IP_H 20*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h> 21*de1e4e89SAndroid Build Coastguard Worker #include <asm/byteorder.h> 22*de1e4e89SAndroid Build Coastguard Worker 23*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_TOS_MASK 0x1E 24*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK) 25*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_LOWDELAY 0x10 26*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_THROUGHPUT 0x08 27*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_RELIABILITY 0x04 28*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_MINCOST 0x02 29*de1e4e89SAndroid Build Coastguard Worker 30*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_MASK 0xE0 31*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK) 32*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_NETCONTROL 0xe0 33*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_INTERNETCONTROL 0xc0 34*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_CRITIC_ECP 0xa0 35*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_FLASHOVERRIDE 0x80 36*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_FLASH 0x60 37*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_IMMEDIATE 0x40 38*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_PRIORITY 0x20 39*de1e4e89SAndroid Build Coastguard Worker #define IPTOS_PREC_ROUTINE 0x00 40*de1e4e89SAndroid Build Coastguard Worker 41*de1e4e89SAndroid Build Coastguard Worker 42*de1e4e89SAndroid Build Coastguard Worker /* IP options */ 43*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_COPY 0x80 44*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_CLASS_MASK 0x60 45*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_NUMBER_MASK 0x1f 46*de1e4e89SAndroid Build Coastguard Worker 47*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_COPIED(o) ((o)&IPOPT_COPY) 48*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK) 49*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK) 50*de1e4e89SAndroid Build Coastguard Worker 51*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_CONTROL 0x00 52*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_RESERVED1 0x20 53*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_MEASUREMENT 0x40 54*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_RESERVED2 0x60 55*de1e4e89SAndroid Build Coastguard Worker 56*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_END (0 |IPOPT_CONTROL) 57*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_NOOP (1 |IPOPT_CONTROL) 58*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY) 59*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY) 60*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT) 61*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_CIPSO (6 |IPOPT_CONTROL|IPOPT_COPY) 62*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_RR (7 |IPOPT_CONTROL) 63*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY) 64*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY) 65*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY) 66*de1e4e89SAndroid Build Coastguard Worker 67*de1e4e89SAndroid Build Coastguard Worker #define IPVERSION 4 68*de1e4e89SAndroid Build Coastguard Worker #define MAXTTL 255 69*de1e4e89SAndroid Build Coastguard Worker #define IPDEFTTL 64 70*de1e4e89SAndroid Build Coastguard Worker 71*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_OPTVAL 0 72*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_OLEN 1 73*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_OFFSET 2 74*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_MINOFF 4 75*de1e4e89SAndroid Build Coastguard Worker #define MAX_IPOPTLEN 40 76*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_NOP IPOPT_NOOP 77*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_EOL IPOPT_END 78*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_TS IPOPT_TIMESTAMP 79*de1e4e89SAndroid Build Coastguard Worker 80*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_TS_TSONLY 0 /* timestamps only */ 81*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 82*de1e4e89SAndroid Build Coastguard Worker #define IPOPT_TS_PRESPEC 3 /* specified modules only */ 83*de1e4e89SAndroid Build Coastguard Worker 84*de1e4e89SAndroid Build Coastguard Worker #define IPV4_BEET_PHMAXLEN 8 85*de1e4e89SAndroid Build Coastguard Worker 86*de1e4e89SAndroid Build Coastguard Worker struct iphdr { 87*de1e4e89SAndroid Build Coastguard Worker #if defined(__LITTLE_ENDIAN_BITFIELD) 88*de1e4e89SAndroid Build Coastguard Worker __u8 ihl:4, 89*de1e4e89SAndroid Build Coastguard Worker version:4; 90*de1e4e89SAndroid Build Coastguard Worker #elif defined (__BIG_ENDIAN_BITFIELD) 91*de1e4e89SAndroid Build Coastguard Worker __u8 version:4, 92*de1e4e89SAndroid Build Coastguard Worker ihl:4; 93*de1e4e89SAndroid Build Coastguard Worker #else 94*de1e4e89SAndroid Build Coastguard Worker #error "Please fix <asm/byteorder.h>" 95*de1e4e89SAndroid Build Coastguard Worker #endif 96*de1e4e89SAndroid Build Coastguard Worker __u8 tos; 97*de1e4e89SAndroid Build Coastguard Worker __be16 tot_len; 98*de1e4e89SAndroid Build Coastguard Worker __be16 id; 99*de1e4e89SAndroid Build Coastguard Worker __be16 frag_off; 100*de1e4e89SAndroid Build Coastguard Worker __u8 ttl; 101*de1e4e89SAndroid Build Coastguard Worker __u8 protocol; 102*de1e4e89SAndroid Build Coastguard Worker __sum16 check; 103*de1e4e89SAndroid Build Coastguard Worker __be32 saddr; 104*de1e4e89SAndroid Build Coastguard Worker __be32 daddr; 105*de1e4e89SAndroid Build Coastguard Worker /*The options start here. */ 106*de1e4e89SAndroid Build Coastguard Worker }; 107*de1e4e89SAndroid Build Coastguard Worker 108*de1e4e89SAndroid Build Coastguard Worker 109*de1e4e89SAndroid Build Coastguard Worker struct ip_auth_hdr { 110*de1e4e89SAndroid Build Coastguard Worker __u8 nexthdr; 111*de1e4e89SAndroid Build Coastguard Worker __u8 hdrlen; /* This one is measured in 32 bit units! */ 112*de1e4e89SAndroid Build Coastguard Worker __be16 reserved; 113*de1e4e89SAndroid Build Coastguard Worker __be32 spi; 114*de1e4e89SAndroid Build Coastguard Worker __be32 seq_no; /* Sequence number */ 115*de1e4e89SAndroid Build Coastguard Worker __u8 auth_data[0]; /* Variable len but >=4. Mind the 64 bit alignment! */ 116*de1e4e89SAndroid Build Coastguard Worker }; 117*de1e4e89SAndroid Build Coastguard Worker 118*de1e4e89SAndroid Build Coastguard Worker struct ip_esp_hdr { 119*de1e4e89SAndroid Build Coastguard Worker __be32 spi; 120*de1e4e89SAndroid Build Coastguard Worker __be32 seq_no; /* Sequence number */ 121*de1e4e89SAndroid Build Coastguard Worker __u8 enc_data[0]; /* Variable len but >=8. Mind the 64 bit alignment! */ 122*de1e4e89SAndroid Build Coastguard Worker }; 123*de1e4e89SAndroid Build Coastguard Worker 124*de1e4e89SAndroid Build Coastguard Worker struct ip_comp_hdr { 125*de1e4e89SAndroid Build Coastguard Worker __u8 nexthdr; 126*de1e4e89SAndroid Build Coastguard Worker __u8 flags; 127*de1e4e89SAndroid Build Coastguard Worker __be16 cpi; 128*de1e4e89SAndroid Build Coastguard Worker }; 129*de1e4e89SAndroid Build Coastguard Worker 130*de1e4e89SAndroid Build Coastguard Worker struct ip_beet_phdr { 131*de1e4e89SAndroid Build Coastguard Worker __u8 nexthdr; 132*de1e4e89SAndroid Build Coastguard Worker __u8 hdrlen; 133*de1e4e89SAndroid Build Coastguard Worker __u8 padlen; 134*de1e4e89SAndroid Build Coastguard Worker __u8 reserved; 135*de1e4e89SAndroid Build Coastguard Worker }; 136*de1e4e89SAndroid Build Coastguard Worker 137*de1e4e89SAndroid Build Coastguard Worker /* index values for the variables in ipv4_devconf */ 138*de1e4e89SAndroid Build Coastguard Worker enum 139*de1e4e89SAndroid Build Coastguard Worker { 140*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_FORWARDING=1, 141*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_MC_FORWARDING, 142*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_PROXY_ARP, 143*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ACCEPT_REDIRECTS, 144*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_SECURE_REDIRECTS, 145*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_SEND_REDIRECTS, 146*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_SHARED_MEDIA, 147*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_RP_FILTER, 148*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE, 149*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_BOOTP_RELAY, 150*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_LOG_MARTIANS, 151*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_TAG, 152*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ARPFILTER, 153*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_MEDIUM_ID, 154*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_NOXFRM, 155*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_NOPOLICY, 156*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_FORCE_IGMP_VERSION, 157*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ARP_ANNOUNCE, 158*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ARP_IGNORE, 159*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_PROMOTE_SECONDARIES, 160*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ARP_ACCEPT, 161*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ARP_NOTIFY, 162*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ACCEPT_LOCAL, 163*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_SRC_VMARK, 164*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_PROXY_ARP_PVLAN, 165*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_ROUTE_LOCALNET, 166*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL, 167*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL, 168*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN, 169*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST, 170*de1e4e89SAndroid Build Coastguard Worker IPV4_DEVCONF_DROP_GRATUITOUS_ARP, 171*de1e4e89SAndroid Build Coastguard Worker __IPV4_DEVCONF_MAX 172*de1e4e89SAndroid Build Coastguard Worker }; 173*de1e4e89SAndroid Build Coastguard Worker 174*de1e4e89SAndroid Build Coastguard Worker #define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1) 175*de1e4e89SAndroid Build Coastguard Worker 176*de1e4e89SAndroid Build Coastguard Worker #endif /* _LINUX_IP_H */ 177