[BACK]Return to ip.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet

Annotation of src/sys/netinet/ip.h, Revision 1.19

1.19    ! itojun      1: /*     $NetBSD: ip.h,v 1.18 1998/02/10 01:26:44 perry Exp $    */
1.6       cgd         2:
1.1       cgd         3: /*
1.5       mycroft     4:  * Copyright (c) 1982, 1986, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
1.1       cgd         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:  *
1.17      thorpej    35:  *     @(#)ip.h        8.2 (Berkeley) 6/1/94
1.1       cgd        36:  */
                     37:
1.18      perry      38: #ifndef _NETINET_IP_H_
                     39: #define _NETINET_IP_H_
                     40:
1.1       cgd        41: /*
                     42:  * Definitions for internet protocol version 4.
                     43:  * Per RFC 791, September 1981.
                     44:  */
                     45: #define        IPVERSION       4
                     46:
                     47: /*
                     48:  * Structure of an internet header, naked of options.
                     49:  */
                     50: struct ip {
1.4       mycroft    51: #if BYTE_ORDER == LITTLE_ENDIAN
1.7       cgd        52:        u_int8_t  ip_hl:4,              /* header length */
                     53:                  ip_v:4;               /* version */
1.1       cgd        54: #endif
1.4       mycroft    55: #if BYTE_ORDER == BIG_ENDIAN
1.7       cgd        56:        u_int8_t  ip_v:4,               /* version */
                     57:                  ip_hl:4;              /* header length */
1.1       cgd        58: #endif
1.7       cgd        59:        u_int8_t  ip_tos;               /* type of service */
1.15      thorpej    60:        u_int16_t ip_len;               /* total length */
1.7       cgd        61:        u_int16_t ip_id;                /* identification */
1.15      thorpej    62:        u_int16_t ip_off;               /* fragment offset field */
1.16      mycroft    63: #define        IP_RF 0x8000                    /* reserved fragment flag */
1.1       cgd        64: #define        IP_DF 0x4000                    /* dont fragment flag */
                     65: #define        IP_MF 0x2000                    /* more fragments flag */
1.5       mycroft    66: #define        IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
1.7       cgd        67:        u_int8_t  ip_ttl;               /* time to live */
                     68:        u_int8_t  ip_p;                 /* protocol */
                     69:        u_int16_t ip_sum;               /* checksum */
1.8       cgd        70:        struct    in_addr ip_src, ip_dst; /* source and dest address */
1.1       cgd        71: };
                     72:
                     73: #define        IP_MAXPACKET    65535           /* maximum packet size */
                     74:
                     75: /*
                     76:  * Definitions for IP type of service (ip_tos)
                     77:  */
                     78: #define        IPTOS_LOWDELAY          0x10
                     79: #define        IPTOS_THROUGHPUT        0x08
                     80: #define        IPTOS_RELIABILITY       0x04
1.9       cgd        81: /*     IPTOS_LOWCOST           0x02 XXX */
1.19    ! itojun     82: #if 1
        !            83: /* ECN bits proposed by Sally Floyd */
        !            84: #define IPTOS_CE               0x01    /* congestion experienced */
        !            85: #define IPTOS_ECT              0x02    /* ECN-capable transport */
        !            86: #endif
1.1       cgd        87:
                     88: /*
                     89:  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
                     90:  */
                     91: #define        IPTOS_PREC_NETCONTROL           0xe0
                     92: #define        IPTOS_PREC_INTERNETCONTROL      0xc0
                     93: #define        IPTOS_PREC_CRITIC_ECP           0xa0
                     94: #define        IPTOS_PREC_FLASHOVERRIDE        0x80
                     95: #define        IPTOS_PREC_FLASH                0x60
                     96: #define        IPTOS_PREC_IMMEDIATE            0x40
                     97: #define        IPTOS_PREC_PRIORITY             0x20
1.9       cgd        98: #define        IPTOS_PREC_ROUTINE              0x00
1.1       cgd        99:
                    100: /*
                    101:  * Definitions for options.
                    102:  */
                    103: #define        IPOPT_COPIED(o)         ((o)&0x80)
                    104: #define        IPOPT_CLASS(o)          ((o)&0x60)
                    105: #define        IPOPT_NUMBER(o)         ((o)&0x1f)
                    106:
                    107: #define        IPOPT_CONTROL           0x00
                    108: #define        IPOPT_RESERVED1         0x20
                    109: #define        IPOPT_DEBMEAS           0x40
                    110: #define        IPOPT_RESERVED2         0x60
                    111:
                    112: #define        IPOPT_EOL               0               /* end of option list */
                    113: #define        IPOPT_NOP               1               /* no operation */
                    114:
                    115: #define        IPOPT_RR                7               /* record packet route */
                    116: #define        IPOPT_TS                68              /* timestamp */
                    117: #define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
                    118: #define        IPOPT_LSRR              131             /* loose source route */
                    119: #define        IPOPT_SATID             136             /* satnet id */
                    120: #define        IPOPT_SSRR              137             /* strict source route */
                    121:
                    122: /*
                    123:  * Offsets to fields in options other than EOL and NOP.
                    124:  */
                    125: #define        IPOPT_OPTVAL            0               /* option ID */
                    126: #define        IPOPT_OLEN              1               /* option length */
1.4       mycroft   127: #define        IPOPT_OFFSET            2               /* offset within option */
1.1       cgd       128: #define        IPOPT_MINOFF            4               /* min value of above */
                    129:
                    130: /*
                    131:  * Time stamp option structure.
                    132:  */
                    133: struct ip_timestamp {
1.7       cgd       134:        u_int8_t ipt_code;              /* IPOPT_TS */
                    135:        u_int8_t ipt_len;               /* size of structure (variable) */
                    136:        u_int8_t ipt_ptr;               /* index of current entry */
1.4       mycroft   137: #if BYTE_ORDER == LITTLE_ENDIAN
1.7       cgd       138:        u_int8_t ipt_flg:4,             /* flags, see below */
                    139:                 ipt_oflw:4;            /* overflow counter */
1.1       cgd       140: #endif
1.4       mycroft   141: #if BYTE_ORDER == BIG_ENDIAN
1.7       cgd       142:        u_int8_t ipt_oflw:4,            /* overflow counter */
                    143:                 ipt_flg:4;             /* flags, see below */
1.1       cgd       144: #endif
                    145:        union ipt_timestamp {
1.8       cgd       146:                 n_time ipt_time[1];
                    147:                 struct ipt_ta {
1.1       cgd       148:                        struct in_addr ipt_addr;
1.7       cgd       149:                        n_time ipt_time;
1.8       cgd       150:                 } ipt_ta[1];
1.1       cgd       151:        } ipt_timestamp;
                    152: };
                    153:
                    154: /* flag bits for ipt_flg */
                    155: #define        IPOPT_TS_TSONLY         0               /* timestamps only */
                    156: #define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
                    157: #define        IPOPT_TS_PRESPEC        3               /* specified modules only */
                    158:
                    159: /* bits for security (not byte swapped) */
                    160: #define        IPOPT_SECUR_UNCLASS     0x0000
                    161: #define        IPOPT_SECUR_CONFID      0xf135
                    162: #define        IPOPT_SECUR_EFTO        0x789a
                    163: #define        IPOPT_SECUR_MMMM        0xbc4d
                    164: #define        IPOPT_SECUR_RESTR       0xaf13
                    165: #define        IPOPT_SECUR_SECRET      0xd788
                    166: #define        IPOPT_SECUR_TOPSECRET   0x6bc5
                    167:
                    168: /*
                    169:  * Internet implementation parameters.
                    170:  */
                    171: #define        MAXTTL          255             /* maximum time to live (seconds) */
1.5       mycroft   172: #define        IPDEFTTL        64              /* default ttl, from RFC 1340 */
1.1       cgd       173: #define        IPFRAGTTL       60              /* time to live for frags, slowhz */
                    174: #define        IPTTLDEC        1               /* subtracted when forwarding */
                    175:
                    176: #define        IP_MSS          576             /* default maximum segment size */
1.18      perry     177:
                    178: #endif /* _NETINET_IP_H_ */

CVSweb <webmaster@jp.NetBSD.org>