Return to ip.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcp / includes / netinet |
1.1 ! misho 1: /* $NetBSD: ip.h,v 1.9 1995/05/15 01:22:44 cgd Exp $ */ ! 2: ! 3: /* ! 4: * Copyright (c) 1982, 1986, 1993 ! 5: * The Regents of the University of California. All rights reserved. ! 6: * ! 7: * Redistribution and use in source and binary forms, with or without ! 8: * modification, are permitted provided that the following conditions ! 9: * are met: ! 10: * 1. Redistributions of source code must retain the above copyright ! 11: * notice, this list of conditions and the following disclaimer. ! 12: * 2. Redistributions in binary form must reproduce the above copyright ! 13: * notice, this list of conditions and the following disclaimer in the ! 14: * documentation and/or other materials provided with the distribution. ! 15: * 3. All advertising materials mentioning features or use of this software ! 16: * must display the following acknowledgement: ! 17: * This product includes software developed by the University of ! 18: * California, Berkeley and its contributors. ! 19: * 4. Neither the name of the University nor the names of its contributors ! 20: * may be used to endorse or promote products derived from this software ! 21: * without specific prior written permission. ! 22: * ! 23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 33: * SUCH DAMAGE. ! 34: * ! 35: * @(#)ip.h 8.1 (Berkeley) 6/10/93 ! 36: */ ! 37: ! 38: /* ! 39: * Definitions for internet protocol version 4. ! 40: * Per RFC 791, September 1981. ! 41: */ ! 42: #define IPVERSION 4 ! 43: ! 44: /* ! 45: * Structure of an internet header, naked of options. ! 46: * ! 47: * We declare ip_len and ip_off to be short, rather than u_short ! 48: * pragmatically since otherwise unsigned comparisons can result ! 49: * against negative integers quite easily, and fail in subtle ways. ! 50: */ ! 51: struct ip { ! 52: u_int8_t ip_fvhl; /* header length, version */ ! 53: u_int8_t ip_tos; /* type of service */ ! 54: int16_t ip_len; /* total length */ ! 55: u_int16_t ip_id; /* identification */ ! 56: int16_t ip_off; /* fragment offset field */ ! 57: #define IP_DF 0x4000 /* dont fragment flag */ ! 58: #define IP_MF 0x2000 /* more fragments flag */ ! 59: #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ ! 60: u_int8_t ip_ttl; /* time to live */ ! 61: u_int8_t ip_p; /* protocol */ ! 62: u_int16_t ip_sum; /* checksum */ ! 63: struct in_addr ip_src, ip_dst; /* source and dest address */ ! 64: }; ! 65: ! 66: #define IP_V(iph) ((iph)->ip_fvhl >> 4) ! 67: #define IP_HL(iph) (((iph)->ip_fvhl & 0x0F) << 2) ! 68: #define IP_V_SET(iph,x) ((iph)->ip_fvhl = ((iph)->ip_fvhl & 0x0F) | ((x) << 4)) ! 69: #define IP_HL_SET(iph,x) ((iph)->ip_fvhl = \ ! 70: ((iph)->ip_fvhl & 0xF0) | (((x) >> 2) & 0x0F)) ! 71: ! 72: #define IP_MAXPACKET 65535 /* maximum packet size */ ! 73: ! 74: /* ! 75: * Definitions for IP type of service (ip_tos) ! 76: */ ! 77: #define IPTOS_LOWDELAY 0x10 ! 78: #define IPTOS_THROUGHPUT 0x08 ! 79: #define IPTOS_RELIABILITY 0x04 ! 80: /* IPTOS_LOWCOST 0x02 XXX */ ! 81: ! 82: /* ! 83: * Definitions for IP precedence (also in ip_tos) (hopefully unused) ! 84: */ ! 85: #define IPTOS_PREC_NETCONTROL 0xe0 ! 86: #define IPTOS_PREC_INTERNETCONTROL 0xc0 ! 87: #define IPTOS_PREC_CRITIC_ECP 0xa0 ! 88: #define IPTOS_PREC_FLASHOVERRIDE 0x80 ! 89: #define IPTOS_PREC_FLASH 0x60 ! 90: #define IPTOS_PREC_IMMEDIATE 0x40 ! 91: #define IPTOS_PREC_PRIORITY 0x20 ! 92: #define IPTOS_PREC_ROUTINE 0x00 ! 93: ! 94: /* ! 95: * Definitions for options. ! 96: */ ! 97: #define IPOPT_COPIED(o) ((o)&0x80) ! 98: #define IPOPT_CLASS(o) ((o)&0x60) ! 99: #define IPOPT_NUMBER(o) ((o)&0x1f) ! 100: ! 101: #define IPOPT_CONTROL 0x00 ! 102: #define IPOPT_RESERVED1 0x20 ! 103: #define IPOPT_DEBMEAS 0x40 ! 104: #define IPOPT_RESERVED2 0x60 ! 105: ! 106: #define IPOPT_EOL 0 /* end of option list */ ! 107: #define IPOPT_NOP 1 /* no operation */ ! 108: ! 109: #define IPOPT_RR 7 /* record packet route */ ! 110: #define IPOPT_TS 68 /* timestamp */ ! 111: #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ ! 112: #define IPOPT_LSRR 131 /* loose source route */ ! 113: #define IPOPT_SATID 136 /* satnet id */ ! 114: #define IPOPT_SSRR 137 /* strict source route */ ! 115: ! 116: /* ! 117: * Offsets to fields in options other than EOL and NOP. ! 118: */ ! 119: #define IPOPT_OPTVAL 0 /* option ID */ ! 120: #define IPOPT_OLEN 1 /* option length */ ! 121: #define IPOPT_OFFSET 2 /* offset within option */ ! 122: #define IPOPT_MINOFF 4 /* min value of above */ ! 123: ! 124: /* ! 125: * Time stamp option structure. ! 126: */ ! 127: struct ip_timestamp { ! 128: u_int8_t ipt_code; /* IPOPT_TS */ ! 129: u_int8_t ipt_len; /* size of structure (variable) */ ! 130: u_int8_t ipt_ptr; /* index of current entry */ ! 131: u_int8_t ipt_flg_oflw; /* flags, see below, overflow counter */ ! 132: union ipt_timestamp { ! 133: u_int32_t ipt_time[1]; ! 134: struct ipt_ta { ! 135: struct in_addr ipt_addr; ! 136: u_int32_t ipt_time; ! 137: } ipt_ta[1]; ! 138: } ipt_timestamp; ! 139: }; ! 140: ! 141: /* flag bits for ipt_flg */ ! 142: #define IPOPT_TS_TSONLY 0 /* timestamps only */ ! 143: #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ ! 144: #define IPOPT_TS_PRESPEC 3 /* specified modules only */ ! 145: ! 146: /* bits for security (not byte swapped) */ ! 147: #define IPOPT_SECUR_UNCLASS 0x0000 ! 148: #define IPOPT_SECUR_CONFID 0xf135 ! 149: #define IPOPT_SECUR_EFTO 0x789a ! 150: #define IPOPT_SECUR_MMMM 0xbc4d ! 151: #define IPOPT_SECUR_RESTR 0xaf13 ! 152: #define IPOPT_SECUR_SECRET 0xd788 ! 153: #define IPOPT_SECUR_TOPSECRET 0x6bc5 ! 154: ! 155: /* ! 156: * Internet implementation parameters. ! 157: */ ! 158: #define MAXTTL 255 /* maximum time to live (seconds) */ ! 159: #define IPDEFTTL 64 /* default ttl, from RFC 1340 */ ! 160: #define IPFRAGTTL 60 /* time to live for frags, slowhz */ ! 161: #define IPTTLDEC 1 /* subtracted when forwarding */ ! 162: ! 163: #define IP_MSS 576 /* default maximum segment size */