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 for the IP protocol.
0008  *
0009  * Version: @(#)ip.h    1.0.2   04/28/93
0010  *
0011  * Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
0012  *
0013  *      This program is free software; you can redistribute it and/or
0014  *      modify it under the terms of the GNU General Public License
0015  *      as published by the Free Software Foundation; either version
0016  *      2 of the License, or (at your option) any later version.
0017  */
0018 #ifndef _UAPI_LINUX_IP_H
0019 #define _UAPI_LINUX_IP_H
0020 #include <linux/types.h>
0021 #include <asm/byteorder.h>
0022 
0023 #define IPTOS_TOS_MASK      0x1E
0024 #define IPTOS_TOS(tos)      ((tos)&IPTOS_TOS_MASK)
0025 #define IPTOS_LOWDELAY      0x10
0026 #define IPTOS_THROUGHPUT    0x08
0027 #define IPTOS_RELIABILITY   0x04
0028 #define IPTOS_MINCOST       0x02
0029 
0030 #define IPTOS_PREC_MASK     0xE0
0031 #define IPTOS_PREC(tos)     ((tos)&IPTOS_PREC_MASK)
0032 #define IPTOS_PREC_NETCONTROL           0xe0
0033 #define IPTOS_PREC_INTERNETCONTROL      0xc0
0034 #define IPTOS_PREC_CRITIC_ECP           0xa0
0035 #define IPTOS_PREC_FLASHOVERRIDE        0x80
0036 #define IPTOS_PREC_FLASH                0x60
0037 #define IPTOS_PREC_IMMEDIATE            0x40
0038 #define IPTOS_PREC_PRIORITY             0x20
0039 #define IPTOS_PREC_ROUTINE              0x00
0040 
0041 
0042 /* IP options */
0043 #define IPOPT_COPY      0x80
0044 #define IPOPT_CLASS_MASK    0x60
0045 #define IPOPT_NUMBER_MASK   0x1f
0046 
0047 #define IPOPT_COPIED(o)     ((o)&IPOPT_COPY)
0048 #define IPOPT_CLASS(o)      ((o)&IPOPT_CLASS_MASK)
0049 #define IPOPT_NUMBER(o)     ((o)&IPOPT_NUMBER_MASK)
0050 
0051 #define IPOPT_CONTROL       0x00
0052 #define IPOPT_RESERVED1     0x20
0053 #define IPOPT_MEASUREMENT   0x40
0054 #define IPOPT_RESERVED2     0x60
0055 
0056 #define IPOPT_END   (0 |IPOPT_CONTROL)
0057 #define IPOPT_NOOP  (1 |IPOPT_CONTROL)
0058 #define IPOPT_SEC   (2 |IPOPT_CONTROL|IPOPT_COPY)
0059 #define IPOPT_LSRR  (3 |IPOPT_CONTROL|IPOPT_COPY)
0060 #define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT)
0061 #define IPOPT_CIPSO (6 |IPOPT_CONTROL|IPOPT_COPY)
0062 #define IPOPT_RR    (7 |IPOPT_CONTROL)
0063 #define IPOPT_SID   (8 |IPOPT_CONTROL|IPOPT_COPY)
0064 #define IPOPT_SSRR  (9 |IPOPT_CONTROL|IPOPT_COPY)
0065 #define IPOPT_RA    (20|IPOPT_CONTROL|IPOPT_COPY)
0066 
0067 #define IPVERSION   4
0068 #define MAXTTL      255
0069 #define IPDEFTTL    64
0070 
0071 #define IPOPT_OPTVAL 0
0072 #define IPOPT_OLEN   1
0073 #define IPOPT_OFFSET 2
0074 #define IPOPT_MINOFF 4
0075 #define MAX_IPOPTLEN 40
0076 #define IPOPT_NOP IPOPT_NOOP
0077 #define IPOPT_EOL IPOPT_END
0078 #define IPOPT_TS  IPOPT_TIMESTAMP
0079 
0080 #define IPOPT_TS_TSONLY     0       /* timestamps only */
0081 #define IPOPT_TS_TSANDADDR  1       /* timestamps and addresses */
0082 #define IPOPT_TS_PRESPEC    3       /* specified modules only */
0083 
0084 #define IPV4_BEET_PHMAXLEN 8
0085 
0086 struct iphdr {
0087 #if defined(__LITTLE_ENDIAN_BITFIELD)
0088     __u8    ihl:4,
0089         version:4;
0090 #elif defined (__BIG_ENDIAN_BITFIELD)
0091     __u8    version:4,
0092         ihl:4;
0093 #else
0094 #error  "Please fix <asm/byteorder.h>"
0095 #endif
0096     __u8    tos;
0097     __be16  tot_len;
0098     __be16  id;
0099     __be16  frag_off;
0100     __u8    ttl;
0101     __u8    protocol;
0102     __sum16 check;
0103     __be32  saddr;
0104     __be32  daddr;
0105     /*The options start here. */
0106 };
0107 
0108 
0109 struct ip_auth_hdr {
0110     __u8  nexthdr;
0111     __u8  hdrlen;       /* This one is measured in 32 bit units! */
0112     __be16 reserved;
0113     __be32 spi;
0114     __be32 seq_no;      /* Sequence number */
0115     __u8  auth_data[];  /* Variable len but >=4. Mind the 64 bit alignment! */
0116 };
0117 
0118 struct ip_esp_hdr {
0119     __be32 spi;
0120     __be32 seq_no;      /* Sequence number */
0121     __u8  enc_data[];   /* Variable len but >=8. Mind the 64 bit alignment! */
0122 };
0123 
0124 struct ip_comp_hdr {
0125     __u8 nexthdr;
0126     __u8 flags;
0127     __be16 cpi;
0128 };
0129 
0130 struct ip_beet_phdr {
0131     __u8 nexthdr;
0132     __u8 hdrlen;
0133     __u8 padlen;
0134     __u8 reserved;
0135 };
0136 
0137 /* index values for the variables in ipv4_devconf */
0138 enum
0139 {
0140     IPV4_DEVCONF_FORWARDING=1,
0141     IPV4_DEVCONF_MC_FORWARDING,
0142     IPV4_DEVCONF_PROXY_ARP,
0143     IPV4_DEVCONF_ACCEPT_REDIRECTS,
0144     IPV4_DEVCONF_SECURE_REDIRECTS,
0145     IPV4_DEVCONF_SEND_REDIRECTS,
0146     IPV4_DEVCONF_SHARED_MEDIA,
0147     IPV4_DEVCONF_RP_FILTER,
0148     IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE,
0149     IPV4_DEVCONF_BOOTP_RELAY,
0150     IPV4_DEVCONF_LOG_MARTIANS,
0151     IPV4_DEVCONF_TAG,
0152     IPV4_DEVCONF_ARPFILTER,
0153     IPV4_DEVCONF_MEDIUM_ID,
0154     IPV4_DEVCONF_NOXFRM,
0155     IPV4_DEVCONF_NOPOLICY,
0156     IPV4_DEVCONF_FORCE_IGMP_VERSION,
0157     IPV4_DEVCONF_ARP_ANNOUNCE,
0158     IPV4_DEVCONF_ARP_IGNORE,
0159     IPV4_DEVCONF_PROMOTE_SECONDARIES,
0160     IPV4_DEVCONF_ARP_ACCEPT,
0161     IPV4_DEVCONF_ARP_NOTIFY,
0162     IPV4_DEVCONF_ACCEPT_LOCAL,
0163     IPV4_DEVCONF_SRC_VMARK,
0164     IPV4_DEVCONF_PROXY_ARP_PVLAN,
0165     IPV4_DEVCONF_ROUTE_LOCALNET,
0166     IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
0167     IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
0168     IPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
0169     IPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
0170     IPV4_DEVCONF_DROP_GRATUITOUS_ARP,
0171     IPV4_DEVCONF_BC_FORWARDING,
0172     IPV4_DEVCONF_ARP_EVICT_NOCARRIER,
0173     __IPV4_DEVCONF_MAX
0174 };
0175 
0176 #define IPV4_DEVCONF_MAX (__IPV4_DEVCONF_MAX - 1)
0177 
0178 #endif /* _UAPI_LINUX_IP_H */