1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * INET An implementation of the TCP/IP protocol suite for the LINUX 3*53ee8cc1Swenshuai.xi * operating system. INET is implemented using the BSD Socket 4*53ee8cc1Swenshuai.xi * interface as the means of communication with the user level. 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * Definitions for the IP protocol. 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * Version: @(#)ip.h 1.0.2 04/28/93 9*53ee8cc1Swenshuai.xi * 10*53ee8cc1Swenshuai.xi * Authors: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 11*53ee8cc1Swenshuai.xi * 12*53ee8cc1Swenshuai.xi * This program is free software; you can redistribute it and/or 13*53ee8cc1Swenshuai.xi * modify it under the terms of the GNU General Public License 14*53ee8cc1Swenshuai.xi * as published by the Free Software Foundation; either version 15*53ee8cc1Swenshuai.xi * 2 of the License, or (at your option) any later version. 16*53ee8cc1Swenshuai.xi */ 17*53ee8cc1Swenshuai.xi #ifndef _LINUX_IP_H 18*53ee8cc1Swenshuai.xi #define _LINUX_IP_H 19*53ee8cc1Swenshuai.xi #include <linux/types.h> 20*53ee8cc1Swenshuai.xi #include <asm/byteorder.h> 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi #define IPTOS_TOS_MASK 0x1E 23*53ee8cc1Swenshuai.xi #define IPTOS_TOS(tos) ((tos)&IPTOS_TOS_MASK) 24*53ee8cc1Swenshuai.xi #define IPTOS_LOWDELAY 0x10 25*53ee8cc1Swenshuai.xi #define IPTOS_THROUGHPUT 0x08 26*53ee8cc1Swenshuai.xi #define IPTOS_RELIABILITY 0x04 27*53ee8cc1Swenshuai.xi #define IPTOS_MINCOST 0x02 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi #define IPTOS_PREC_MASK 0xE0 30*53ee8cc1Swenshuai.xi #define IPTOS_PREC(tos) ((tos)&IPTOS_PREC_MASK) 31*53ee8cc1Swenshuai.xi #define IPTOS_PREC_NETCONTROL 0xe0 32*53ee8cc1Swenshuai.xi #define IPTOS_PREC_INTERNETCONTROL 0xc0 33*53ee8cc1Swenshuai.xi #define IPTOS_PREC_CRITIC_ECP 0xa0 34*53ee8cc1Swenshuai.xi #define IPTOS_PREC_FLASHOVERRIDE 0x80 35*53ee8cc1Swenshuai.xi #define IPTOS_PREC_FLASH 0x60 36*53ee8cc1Swenshuai.xi #define IPTOS_PREC_IMMEDIATE 0x40 37*53ee8cc1Swenshuai.xi #define IPTOS_PREC_PRIORITY 0x20 38*53ee8cc1Swenshuai.xi #define IPTOS_PREC_ROUTINE 0x00 39*53ee8cc1Swenshuai.xi 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi /* IP options */ 42*53ee8cc1Swenshuai.xi #define IPOPT_COPY 0x80 43*53ee8cc1Swenshuai.xi #define IPOPT_CLASS_MASK 0x60 44*53ee8cc1Swenshuai.xi #define IPOPT_NUMBER_MASK 0x1f 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi #define IPOPT_COPIED(o) ((o)&IPOPT_COPY) 47*53ee8cc1Swenshuai.xi #define IPOPT_CLASS(o) ((o)&IPOPT_CLASS_MASK) 48*53ee8cc1Swenshuai.xi #define IPOPT_NUMBER(o) ((o)&IPOPT_NUMBER_MASK) 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi #define IPOPT_CONTROL 0x00 51*53ee8cc1Swenshuai.xi #define IPOPT_RESERVED1 0x20 52*53ee8cc1Swenshuai.xi #define IPOPT_MEASUREMENT 0x40 53*53ee8cc1Swenshuai.xi #define IPOPT_RESERVED2 0x60 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi #define IPOPT_END (0 |IPOPT_CONTROL) 56*53ee8cc1Swenshuai.xi #define IPOPT_NOOP (1 |IPOPT_CONTROL) 57*53ee8cc1Swenshuai.xi #define IPOPT_SEC (2 |IPOPT_CONTROL|IPOPT_COPY) 58*53ee8cc1Swenshuai.xi #define IPOPT_LSRR (3 |IPOPT_CONTROL|IPOPT_COPY) 59*53ee8cc1Swenshuai.xi #define IPOPT_TIMESTAMP (4 |IPOPT_MEASUREMENT) 60*53ee8cc1Swenshuai.xi #define IPOPT_CIPSO (6 |IPOPT_CONTROL|IPOPT_COPY) 61*53ee8cc1Swenshuai.xi #define IPOPT_RR (7 |IPOPT_CONTROL) 62*53ee8cc1Swenshuai.xi #define IPOPT_SID (8 |IPOPT_CONTROL|IPOPT_COPY) 63*53ee8cc1Swenshuai.xi #define IPOPT_SSRR (9 |IPOPT_CONTROL|IPOPT_COPY) 64*53ee8cc1Swenshuai.xi #define IPOPT_RA (20|IPOPT_CONTROL|IPOPT_COPY) 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi #define IPVERSION 4 67*53ee8cc1Swenshuai.xi #define MAXTTL 255 68*53ee8cc1Swenshuai.xi #define IPDEFTTL 64 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi #define IPOPT_OPTVAL 0 71*53ee8cc1Swenshuai.xi #define IPOPT_OLEN 1 72*53ee8cc1Swenshuai.xi #define IPOPT_OFFSET 2 73*53ee8cc1Swenshuai.xi #define IPOPT_MINOFF 4 74*53ee8cc1Swenshuai.xi #define MAX_IPOPTLEN 40 75*53ee8cc1Swenshuai.xi #define IPOPT_NOP IPOPT_NOOP 76*53ee8cc1Swenshuai.xi #define IPOPT_EOL IPOPT_END 77*53ee8cc1Swenshuai.xi #define IPOPT_TS IPOPT_TIMESTAMP 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi #define IPOPT_TS_TSONLY 0 /* timestamps only */ 80*53ee8cc1Swenshuai.xi #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 81*53ee8cc1Swenshuai.xi #define IPOPT_TS_PRESPEC 3 /* specified modules only */ 82*53ee8cc1Swenshuai.xi 83*53ee8cc1Swenshuai.xi #define IPV4_BEET_PHMAXLEN 8 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi struct iphdr { 86*53ee8cc1Swenshuai.xi #if defined(__LITTLE_ENDIAN_BITFIELD) 87*53ee8cc1Swenshuai.xi __u8 ihl:4, 88*53ee8cc1Swenshuai.xi version:4; 89*53ee8cc1Swenshuai.xi #elif defined (__BIG_ENDIAN_BITFIELD) 90*53ee8cc1Swenshuai.xi __u8 version:4, 91*53ee8cc1Swenshuai.xi ihl:4; 92*53ee8cc1Swenshuai.xi #else 93*53ee8cc1Swenshuai.xi #error "Please fix <asm/byteorder.h>" 94*53ee8cc1Swenshuai.xi #endif 95*53ee8cc1Swenshuai.xi __u8 tos; 96*53ee8cc1Swenshuai.xi __be16 tot_len; 97*53ee8cc1Swenshuai.xi __be16 id; 98*53ee8cc1Swenshuai.xi __be16 frag_off; 99*53ee8cc1Swenshuai.xi __u8 ttl; 100*53ee8cc1Swenshuai.xi __u8 protocol; 101*53ee8cc1Swenshuai.xi __sum16 check; 102*53ee8cc1Swenshuai.xi __be32 saddr; 103*53ee8cc1Swenshuai.xi __be32 daddr; 104*53ee8cc1Swenshuai.xi /*The options start here. */ 105*53ee8cc1Swenshuai.xi }; 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi 108*53ee8cc1Swenshuai.xi struct ip_auth_hdr { 109*53ee8cc1Swenshuai.xi __u8 nexthdr; 110*53ee8cc1Swenshuai.xi __u8 hdrlen; /* This one is measured in 32 bit units! */ 111*53ee8cc1Swenshuai.xi __be16 reserved; 112*53ee8cc1Swenshuai.xi __be32 spi; 113*53ee8cc1Swenshuai.xi __be32 seq_no; /* Sequence number */ 114*53ee8cc1Swenshuai.xi __u8 auth_data[0]; /* Variable len but >=4. Mind the 64 bit alignment! */ 115*53ee8cc1Swenshuai.xi }; 116*53ee8cc1Swenshuai.xi 117*53ee8cc1Swenshuai.xi struct ip_esp_hdr { 118*53ee8cc1Swenshuai.xi __be32 spi; 119*53ee8cc1Swenshuai.xi __be32 seq_no; /* Sequence number */ 120*53ee8cc1Swenshuai.xi __u8 enc_data[0]; /* Variable len but >=8. Mind the 64 bit alignment! */ 121*53ee8cc1Swenshuai.xi }; 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi struct ip_comp_hdr { 124*53ee8cc1Swenshuai.xi __u8 nexthdr; 125*53ee8cc1Swenshuai.xi __u8 flags; 126*53ee8cc1Swenshuai.xi __be16 cpi; 127*53ee8cc1Swenshuai.xi }; 128*53ee8cc1Swenshuai.xi 129*53ee8cc1Swenshuai.xi struct ip_beet_phdr { 130*53ee8cc1Swenshuai.xi __u8 nexthdr; 131*53ee8cc1Swenshuai.xi __u8 hdrlen; 132*53ee8cc1Swenshuai.xi __u8 padlen; 133*53ee8cc1Swenshuai.xi __u8 reserved; 134*53ee8cc1Swenshuai.xi }; 135*53ee8cc1Swenshuai.xi 136*53ee8cc1Swenshuai.xi #endif /* _LINUX_IP_H */ 137