182 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */2/*3 * INET An implementation of the TCP/IP protocol suite for the LINUX4 * operating system. INET is implemented using the BSD Socket5 * interface as the means of communication with the user level.6 *7 * Definitions for the IP protocol.8 *9 * Version: @(#)ip.h 1.0.2 04/28/9310 *11 * Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>12 *13 * This program is free software; you can redistribute it and/or14 * modify it under the terms of the GNU General Public License15 * as published by the Free Software Foundation; either version16 * 2 of the License, or (at your option) any later version.17 */18#ifndef _UAPI_LINUX_IP_H19#define _UAPI_LINUX_IP_H20#include <linux/types.h>21#include <linux/stddef.h>22#include <asm/byteorder.h>23 24#define IPTOS_TOS_MASK 0x1E25#define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK)26#define IPTOS_LOWDELAY 0x1027#define IPTOS_THROUGHPUT 0x0828#define IPTOS_RELIABILITY 0x0429#define IPTOS_MINCOST 0x0230 31#define IPTOS_PREC_MASK 0xE032#define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK)33#define IPTOS_PREC_NETCONTROL 0xe034#define IPTOS_PREC_INTERNETCONTROL 0xc035#define IPTOS_PREC_CRITIC_ECP 0xa036#define IPTOS_PREC_FLASHOVERRIDE 0x8037#define IPTOS_PREC_FLASH 0x6038#define IPTOS_PREC_IMMEDIATE 0x4039#define IPTOS_PREC_PRIORITY 0x2040#define IPTOS_PREC_ROUTINE 0x0041 42 43/* IP options */44#define IPOPT_COPY 0x8045#define IPOPT_CLASS_MASK 0x6046#define IPOPT_NUMBER_MASK 0x1f47 48#define IPOPT_COPIED(o) ((o)&IPOPT_COPY)49#define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK)50#define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK)51 52#define IPOPT_CONTROL 0x0053#define IPOPT_RESERVED1 0x2054#define IPOPT_MEASUREMENT 0x4055#define IPOPT_RESERVED2 0x6056 57#define IPOPT_END (0 |IPOPT_CONTROL)58#define IPOPT_NOOP (1 |IPOPT_CONTROL)59#define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY)60#define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY)61#define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT)62#define IPOPT_CIPSO (6 |IPOPT_CONTROL|IPOPT_COPY)63#define IPOPT_RR (7 |IPOPT_CONTROL)64#define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY)65#define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY)66#define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY)67 68#define IPVERSION 469#define MAXTTL 25570#define IPDEFTTL 6471 72#define IPOPT_OPTVAL 073#define IPOPT_OLEN 174#define IPOPT_OFFSET 275#define IPOPT_MINOFF 476#define MAX_IPOPTLEN 4077#define IPOPT_NOP IPOPT_NOOP78#define IPOPT_EOL IPOPT_END79#define IPOPT_TS IPOPT_TIMESTAMP80 81#define IPOPT_TS_TSONLY 0 /* timestamps only */82#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */83#define IPOPT_TS_PRESPEC 3 /* specified modules only */84 85#define IPV4_BEET_PHMAXLEN 886 87struct iphdr {88#if defined(__LITTLE_ENDIAN_BITFIELD)89 __u8 ihl:4,90 version:4;91#elif defined (__BIG_ENDIAN_BITFIELD)92 __u8 version:4,93 ihl:4;94#else95#error "Please fix <asm/byteorder.h>"96#endif97 __u8 tos;98 __be16 tot_len;99 __be16 id;100 __be16 frag_off;101 __u8 ttl;102 __u8 protocol;103 __sum16 check;104 __struct_group(/* no tag */, addrs, /* no attrs */,105 __be32 saddr;106 __be32 daddr;107 );108 /*The options start here. */109};110 111 112struct ip_auth_hdr {113 __u8 nexthdr;114 __u8 hdrlen; /* This one is measured in 32 bit units! */115 __be16 reserved;116 __be32 spi;117 __be32 seq_no; /* Sequence number */118 __u8 auth_data[]; /* Variable len but >=4. Mind the 64 bit alignment! */119};120 121struct ip_esp_hdr {122 __be32 spi;123 __be32 seq_no; /* Sequence number */124 __u8 enc_data[]; /* Variable len but >=8. Mind the 64 bit alignment! */125};126 127struct ip_comp_hdr {128 __u8 nexthdr;129 __u8 flags;130 __be16 cpi;131};132 133struct ip_beet_phdr {134 __u8 nexthdr;135 __u8 hdrlen;136 __u8 padlen;137 __u8 reserved;138};139 140/* index values for the variables in ipv4_devconf */141enum142{143 IPV4_DEVCONF_FORWARDING=1,144 IPV4_DEVCONF_MC_FORWARDING,145 IPV4_DEVCONF_PROXY_ARP,146 IPV4_DEVCONF_ACCEPT_REDIRECTS,147 IPV4_DEVCONF_SECURE_REDIRECTS,148 IPV4_DEVCONF_SEND_REDIRECTS,149 IPV4_DEVCONF_SHARED_MEDIA,150 IPV4_DEVCONF_RP_FILTER,151 IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,152 IPV4_DEVCONF_BOOTP_RELAY,153 IPV4_DEVCONF_LOG_MARTIANS,154 IPV4_DEVCONF_TAG,155 IPV4_DEVCONF_ARPFILTER,156 IPV4_DEVCONF_MEDIUM_ID,157 IPV4_DEVCONF_NOXFRM,158 IPV4_DEVCONF_NOPOLICY,159 IPV4_DEVCONF_FORCE_IGMP_VERSION,160 IPV4_DEVCONF_ARP_ANNOUNCE,161 IPV4_DEVCONF_ARP_IGNORE,162 IPV4_DEVCONF_PROMOTE_SECONDARIES,163 IPV4_DEVCONF_ARP_ACCEPT,164 IPV4_DEVCONF_ARP_NOTIFY,165 IPV4_DEVCONF_ACCEPT_LOCAL,166 IPV4_DEVCONF_SRC_VMARK,167 IPV4_DEVCONF_PROXY_ARP_PVLAN,168 IPV4_DEVCONF_ROUTE_LOCALNET,169 IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,170 IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,171 IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,172 IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,173 IPV4_DEVCONF_DROP_GRATUITOUS_ARP,174 IPV4_DEVCONF_BC_FORWARDING,175 IPV4_DEVCONF_ARP_EVICT_NOCARRIER,176 __IPV4_DEVCONF_MAX177};178 179#define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)180 181#endif /* _UAPI_LINUX_IP_H */182