1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991,92,93,95,96,97,98,99,2000 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi #ifndef __NETINET_IP_H 20*53ee8cc1Swenshuai.xi #define __NETINET_IP_H 1 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi #include <features.h> 23*53ee8cc1Swenshuai.xi #include <sys/types.h> 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi #include <netinet/in.h> 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi __BEGIN_DECLS 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi struct timestamp 30*53ee8cc1Swenshuai.xi { 31*53ee8cc1Swenshuai.xi u_int8_t len; 32*53ee8cc1Swenshuai.xi u_int8_t ptr; 33*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __LITTLE_ENDIAN 34*53ee8cc1Swenshuai.xi unsigned int flags:4; 35*53ee8cc1Swenshuai.xi unsigned int overflow:4; 36*53ee8cc1Swenshuai.xi #elif __BYTE_ORDER == __BIG_ENDIAN 37*53ee8cc1Swenshuai.xi unsigned int overflow:4; 38*53ee8cc1Swenshuai.xi unsigned int flags:4; 39*53ee8cc1Swenshuai.xi #else 40*53ee8cc1Swenshuai.xi # error "Please fix <bits/endian.h>" 41*53ee8cc1Swenshuai.xi #endif 42*53ee8cc1Swenshuai.xi u_int32_t data[9]; 43*53ee8cc1Swenshuai.xi }; 44*53ee8cc1Swenshuai.xi 45*53ee8cc1Swenshuai.xi struct iphdr 46*53ee8cc1Swenshuai.xi { 47*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __LITTLE_ENDIAN 48*53ee8cc1Swenshuai.xi unsigned int ihl:4; 49*53ee8cc1Swenshuai.xi unsigned int version:4; 50*53ee8cc1Swenshuai.xi #elif __BYTE_ORDER == __BIG_ENDIAN 51*53ee8cc1Swenshuai.xi unsigned int version:4; 52*53ee8cc1Swenshuai.xi unsigned int ihl:4; 53*53ee8cc1Swenshuai.xi #else 54*53ee8cc1Swenshuai.xi # error "Please fix <bits/endian.h>" 55*53ee8cc1Swenshuai.xi #endif 56*53ee8cc1Swenshuai.xi u_int8_t tos; 57*53ee8cc1Swenshuai.xi u_int16_t tot_len; 58*53ee8cc1Swenshuai.xi u_int16_t id; 59*53ee8cc1Swenshuai.xi u_int16_t frag_off; 60*53ee8cc1Swenshuai.xi u_int8_t ttl; 61*53ee8cc1Swenshuai.xi u_int8_t protocol; 62*53ee8cc1Swenshuai.xi u_int16_t check; 63*53ee8cc1Swenshuai.xi u_int32_t saddr; 64*53ee8cc1Swenshuai.xi u_int32_t daddr; 65*53ee8cc1Swenshuai.xi /*The options start here. */ 66*53ee8cc1Swenshuai.xi }; 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 69*53ee8cc1Swenshuai.xi /* 70*53ee8cc1Swenshuai.xi * Copyright (c) 1982, 1986, 1993 71*53ee8cc1Swenshuai.xi * The Regents of the University of California. All rights reserved. 72*53ee8cc1Swenshuai.xi * 73*53ee8cc1Swenshuai.xi * Redistribution and use in source and binary forms, with or without 74*53ee8cc1Swenshuai.xi * modification, are permitted provided that the following conditions 75*53ee8cc1Swenshuai.xi * are met: 76*53ee8cc1Swenshuai.xi * 1. Redistributions of source code must retain the above copyright 77*53ee8cc1Swenshuai.xi * notice, this list of conditions and the following disclaimer. 78*53ee8cc1Swenshuai.xi * 2. Redistributions in binary form must reproduce the above copyright 79*53ee8cc1Swenshuai.xi * notice, this list of conditions and the following disclaimer in the 80*53ee8cc1Swenshuai.xi * documentation and/or other materials provided with the distribution. 81*53ee8cc1Swenshuai.xi * 4. Neither the name of the University nor the names of its contributors 82*53ee8cc1Swenshuai.xi * may be used to endorse or promote products derived from this software 83*53ee8cc1Swenshuai.xi * without specific prior written permission. 84*53ee8cc1Swenshuai.xi * 85*53ee8cc1Swenshuai.xi * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 86*53ee8cc1Swenshuai.xi * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 87*53ee8cc1Swenshuai.xi * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 88*53ee8cc1Swenshuai.xi * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 89*53ee8cc1Swenshuai.xi * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 90*53ee8cc1Swenshuai.xi * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 91*53ee8cc1Swenshuai.xi * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 92*53ee8cc1Swenshuai.xi * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 93*53ee8cc1Swenshuai.xi * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 94*53ee8cc1Swenshuai.xi * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 95*53ee8cc1Swenshuai.xi * SUCH DAMAGE. 96*53ee8cc1Swenshuai.xi * 97*53ee8cc1Swenshuai.xi * @(#)ip.h 8.1 (Berkeley) 6/10/93 98*53ee8cc1Swenshuai.xi */ 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi /* 101*53ee8cc1Swenshuai.xi * Definitions for internet protocol version 4. 102*53ee8cc1Swenshuai.xi * Per RFC 791, September 1981. 103*53ee8cc1Swenshuai.xi */ 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi /* 106*53ee8cc1Swenshuai.xi * Structure of an internet header, naked of options. 107*53ee8cc1Swenshuai.xi */ 108*53ee8cc1Swenshuai.xi struct ip 109*53ee8cc1Swenshuai.xi { 110*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __LITTLE_ENDIAN 111*53ee8cc1Swenshuai.xi unsigned int ip_hl:4; /* header length */ 112*53ee8cc1Swenshuai.xi unsigned int ip_v:4; /* version */ 113*53ee8cc1Swenshuai.xi #endif 114*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __BIG_ENDIAN 115*53ee8cc1Swenshuai.xi unsigned int ip_v:4; /* version */ 116*53ee8cc1Swenshuai.xi unsigned int ip_hl:4; /* header length */ 117*53ee8cc1Swenshuai.xi #endif 118*53ee8cc1Swenshuai.xi u_int8_t ip_tos; /* type of service */ 119*53ee8cc1Swenshuai.xi u_short ip_len; /* total length */ 120*53ee8cc1Swenshuai.xi u_short ip_id; /* identification */ 121*53ee8cc1Swenshuai.xi u_short ip_off; /* fragment offset field */ 122*53ee8cc1Swenshuai.xi #define IP_RF 0x8000 /* reserved fragment flag */ 123*53ee8cc1Swenshuai.xi #define IP_DF 0x4000 /* dont fragment flag */ 124*53ee8cc1Swenshuai.xi #define IP_MF 0x2000 /* more fragments flag */ 125*53ee8cc1Swenshuai.xi #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 126*53ee8cc1Swenshuai.xi u_int8_t ip_ttl; /* time to live */ 127*53ee8cc1Swenshuai.xi u_int8_t ip_p; /* protocol */ 128*53ee8cc1Swenshuai.xi u_short ip_sum; /* checksum */ 129*53ee8cc1Swenshuai.xi struct in_addr ip_src, ip_dst; /* source and dest address */ 130*53ee8cc1Swenshuai.xi }; 131*53ee8cc1Swenshuai.xi 132*53ee8cc1Swenshuai.xi /* 133*53ee8cc1Swenshuai.xi * Time stamp option structure. 134*53ee8cc1Swenshuai.xi */ 135*53ee8cc1Swenshuai.xi struct ip_timestamp 136*53ee8cc1Swenshuai.xi { 137*53ee8cc1Swenshuai.xi u_int8_t ipt_code; /* IPOPT_TS */ 138*53ee8cc1Swenshuai.xi u_int8_t ipt_len; /* size of structure (variable) */ 139*53ee8cc1Swenshuai.xi u_int8_t ipt_ptr; /* index of current entry */ 140*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __LITTLE_ENDIAN 141*53ee8cc1Swenshuai.xi unsigned int ipt_flg:4; /* flags, see below */ 142*53ee8cc1Swenshuai.xi unsigned int ipt_oflw:4; /* overflow counter */ 143*53ee8cc1Swenshuai.xi #endif 144*53ee8cc1Swenshuai.xi #if __BYTE_ORDER == __BIG_ENDIAN 145*53ee8cc1Swenshuai.xi unsigned int ipt_oflw:4; /* overflow counter */ 146*53ee8cc1Swenshuai.xi unsigned int ipt_flg:4; /* flags, see below */ 147*53ee8cc1Swenshuai.xi #endif 148*53ee8cc1Swenshuai.xi u_int32_t data[9]; 149*53ee8cc1Swenshuai.xi }; 150*53ee8cc1Swenshuai.xi #endif /* __USE_BSD */ 151*53ee8cc1Swenshuai.xi 152*53ee8cc1Swenshuai.xi #define IPVERSION 4 /* IP version number */ 153*53ee8cc1Swenshuai.xi #define IP_MAXPACKET 65535 /* maximum packet size */ 154*53ee8cc1Swenshuai.xi 155*53ee8cc1Swenshuai.xi /* 156*53ee8cc1Swenshuai.xi * Definitions for IP type of service (ip_tos) 157*53ee8cc1Swenshuai.xi */ 158*53ee8cc1Swenshuai.xi #define IPTOS_TOS_MASK 0x1E 159*53ee8cc1Swenshuai.xi #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) 160*53ee8cc1Swenshuai.xi #define IPTOS_LOWDELAY 0x10 161*53ee8cc1Swenshuai.xi #define IPTOS_THROUGHPUT 0x08 162*53ee8cc1Swenshuai.xi #define IPTOS_RELIABILITY 0x04 163*53ee8cc1Swenshuai.xi #define IPTOS_LOWCOST 0x02 164*53ee8cc1Swenshuai.xi #define IPTOS_MINCOST IPTOS_LOWCOST 165*53ee8cc1Swenshuai.xi 166*53ee8cc1Swenshuai.xi /* 167*53ee8cc1Swenshuai.xi * Definitions for IP precedence (also in ip_tos) (hopefully unused) 168*53ee8cc1Swenshuai.xi */ 169*53ee8cc1Swenshuai.xi #define IPTOS_PREC_MASK 0xe0 170*53ee8cc1Swenshuai.xi #define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) 171*53ee8cc1Swenshuai.xi #define IPTOS_PREC_NETCONTROL 0xe0 172*53ee8cc1Swenshuai.xi #define IPTOS_PREC_INTERNETCONTROL 0xc0 173*53ee8cc1Swenshuai.xi #define IPTOS_PREC_CRITIC_ECP 0xa0 174*53ee8cc1Swenshuai.xi #define IPTOS_PREC_FLASHOVERRIDE 0x80 175*53ee8cc1Swenshuai.xi #define IPTOS_PREC_FLASH 0x60 176*53ee8cc1Swenshuai.xi #define IPTOS_PREC_IMMEDIATE 0x40 177*53ee8cc1Swenshuai.xi #define IPTOS_PREC_PRIORITY 0x20 178*53ee8cc1Swenshuai.xi #define IPTOS_PREC_ROUTINE 0x00 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi /* 181*53ee8cc1Swenshuai.xi * Definitions for options. 182*53ee8cc1Swenshuai.xi */ 183*53ee8cc1Swenshuai.xi #define IPOPT_COPY 0x80 184*53ee8cc1Swenshuai.xi #define IPOPT_CLASS_MASK 0x60 185*53ee8cc1Swenshuai.xi #define IPOPT_NUMBER_MASK 0x1f 186*53ee8cc1Swenshuai.xi 187*53ee8cc1Swenshuai.xi #define IPOPT_COPIED(o) ((o) & IPOPT_COPY) 188*53ee8cc1Swenshuai.xi #define IPOPT_CLASS(o) ((o) & IPOPT_CLASS_MASK) 189*53ee8cc1Swenshuai.xi #define IPOPT_NUMBER(o) ((o) & IPOPT_NUMBER_MASK) 190*53ee8cc1Swenshuai.xi 191*53ee8cc1Swenshuai.xi #define IPOPT_CONTROL 0x00 192*53ee8cc1Swenshuai.xi #define IPOPT_RESERVED1 0x20 193*53ee8cc1Swenshuai.xi #define IPOPT_DEBMEAS 0x40 194*53ee8cc1Swenshuai.xi #define IPOPT_MEASUREMENT IPOPT_DEBMEAS 195*53ee8cc1Swenshuai.xi #define IPOPT_RESERVED2 0x60 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi #define IPOPT_EOL 0 /* end of option list */ 198*53ee8cc1Swenshuai.xi #define IPOPT_END IPOPT_EOL 199*53ee8cc1Swenshuai.xi #define IPOPT_NOP 1 /* no operation */ 200*53ee8cc1Swenshuai.xi #define IPOPT_NOOP IPOPT_NOP 201*53ee8cc1Swenshuai.xi 202*53ee8cc1Swenshuai.xi #define IPOPT_RR 7 /* record packet route */ 203*53ee8cc1Swenshuai.xi #define IPOPT_TS 68 /* timestamp */ 204*53ee8cc1Swenshuai.xi #define IPOPT_TIMESTAMP IPOPT_TS 205*53ee8cc1Swenshuai.xi #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ 206*53ee8cc1Swenshuai.xi #define IPOPT_SEC IPOPT_SECURITY 207*53ee8cc1Swenshuai.xi #define IPOPT_LSRR 131 /* loose source route */ 208*53ee8cc1Swenshuai.xi #define IPOPT_SATID 136 /* satnet id */ 209*53ee8cc1Swenshuai.xi #define IPOPT_SID IPOPT_SATID 210*53ee8cc1Swenshuai.xi #define IPOPT_SSRR 137 /* strict source route */ 211*53ee8cc1Swenshuai.xi #define IPOPT_RA 148 /* router alert */ 212*53ee8cc1Swenshuai.xi 213*53ee8cc1Swenshuai.xi /* 214*53ee8cc1Swenshuai.xi * Offsets to fields in options other than EOL and NOP. 215*53ee8cc1Swenshuai.xi */ 216*53ee8cc1Swenshuai.xi #define IPOPT_OPTVAL 0 /* option ID */ 217*53ee8cc1Swenshuai.xi #define IPOPT_OLEN 1 /* option length */ 218*53ee8cc1Swenshuai.xi #define IPOPT_OFFSET 2 /* offset within option */ 219*53ee8cc1Swenshuai.xi #define IPOPT_MINOFF 4 /* min value of above */ 220*53ee8cc1Swenshuai.xi 221*53ee8cc1Swenshuai.xi #define MAX_IPOPTLEN 40 222*53ee8cc1Swenshuai.xi 223*53ee8cc1Swenshuai.xi /* flag bits for ipt_flg */ 224*53ee8cc1Swenshuai.xi #define IPOPT_TS_TSONLY 0 /* timestamps only */ 225*53ee8cc1Swenshuai.xi #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ 226*53ee8cc1Swenshuai.xi #define IPOPT_TS_PRESPEC 3 /* specified modules only */ 227*53ee8cc1Swenshuai.xi 228*53ee8cc1Swenshuai.xi /* bits for security (not byte swapped) */ 229*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_UNCLASS 0x0000 230*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_CONFID 0xf135 231*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_EFTO 0x789a 232*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_MMMM 0xbc4d 233*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_RESTR 0xaf13 234*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_SECRET 0xd788 235*53ee8cc1Swenshuai.xi #define IPOPT_SECUR_TOPSECRET 0x6bc5 236*53ee8cc1Swenshuai.xi 237*53ee8cc1Swenshuai.xi /* 238*53ee8cc1Swenshuai.xi * Internet implementation parameters. 239*53ee8cc1Swenshuai.xi */ 240*53ee8cc1Swenshuai.xi #define MAXTTL 255 /* maximum time to live (seconds) */ 241*53ee8cc1Swenshuai.xi #define IPDEFTTL 64 /* default ttl, from RFC 1340 */ 242*53ee8cc1Swenshuai.xi #define IPFRAGTTL 60 /* time to live for frags, slowhz */ 243*53ee8cc1Swenshuai.xi #define IPTTLDEC 1 /* subtracted when forwarding */ 244*53ee8cc1Swenshuai.xi 245*53ee8cc1Swenshuai.xi #define IP_MSS 576 /* default maximum segment size */ 246*53ee8cc1Swenshuai.xi 247*53ee8cc1Swenshuai.xi __END_DECLS 248*53ee8cc1Swenshuai.xi 249*53ee8cc1Swenshuai.xi #endif /* netinet/ip.h */ 250