[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.31

1.31    ! perry       1: /*     $NetBSD: ip.h,v 1.30 2007/12/21 02:07:54 matt 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.
1.25      agc        15:  * 3. Neither the name of the University nor the names of its contributors
1.1       cgd        16:  *    may be used to endorse or promote products derived from this software
                     17:  *    without specific prior written permission.
                     18:  *
                     19:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     29:  * SUCH DAMAGE.
                     30:  *
1.17      thorpej    31:  *     @(#)ip.h        8.2 (Berkeley) 6/1/94
1.1       cgd        32:  */
                     33:
1.18      perry      34: #ifndef _NETINET_IP_H_
                     35: #define _NETINET_IP_H_
                     36:
1.1       cgd        37: /*
                     38:  * Definitions for internet protocol version 4.
                     39:  * Per RFC 791, September 1981.
                     40:  */
                     41: #define        IPVERSION       4
                     42:
                     43: /*
                     44:  * Structure of an internet header, naked of options.
                     45:  */
                     46: struct ip {
1.4       mycroft    47: #if BYTE_ORDER == LITTLE_ENDIAN
1.29      christos   48:        unsigned int ip_hl:4,           /* header length */
                     49:                     ip_v:4;            /* version */
1.1       cgd        50: #endif
1.4       mycroft    51: #if BYTE_ORDER == BIG_ENDIAN
1.29      christos   52:        unsigned int ip_v:4,            /* version */
                     53:                     ip_hl:4;           /* header length */
1.1       cgd        54: #endif
1.7       cgd        55:        u_int8_t  ip_tos;               /* type of service */
1.15      thorpej    56:        u_int16_t ip_len;               /* total length */
1.7       cgd        57:        u_int16_t ip_id;                /* identification */
1.15      thorpej    58:        u_int16_t ip_off;               /* fragment offset field */
1.16      mycroft    59: #define        IP_RF 0x8000                    /* reserved fragment flag */
1.24      dogcow     60: #define        IP_EF 0x8000                    /* evil flag, per RFC 3514 */
1.1       cgd        61: #define        IP_DF 0x4000                    /* dont fragment flag */
                     62: #define        IP_MF 0x2000                    /* more fragments flag */
1.5       mycroft    63: #define        IP_OFFMASK 0x1fff               /* mask for fragmenting bits */
1.7       cgd        64:        u_int8_t  ip_ttl;               /* time to live */
                     65:        u_int8_t  ip_p;                 /* protocol */
                     66:        u_int16_t ip_sum;               /* checksum */
1.8       cgd        67:        struct    in_addr ip_src, ip_dst; /* source and dest address */
1.31    ! perry      68: } __packed;
1.1       cgd        69:
                     70: #define        IP_MAXPACKET    65535           /* maximum packet size */
1.30      matt       71: #define        IP_MINFRAGSIZE  69              /* minumum size that can be fraged */
1.1       cgd        72:
                     73: /*
                     74:  * Definitions for IP type of service (ip_tos)
                     75:  */
                     76: #define        IPTOS_LOWDELAY          0x10
                     77: #define        IPTOS_THROUGHPUT        0x08
                     78: #define        IPTOS_RELIABILITY       0x04
1.9       cgd        79: /*     IPTOS_LOWCOST           0x02 XXX */
1.1       cgd        80:
                     81: /*
                     82:  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
                     83:  */
                     84: #define        IPTOS_PREC_NETCONTROL           0xe0
                     85: #define        IPTOS_PREC_INTERNETCONTROL      0xc0
                     86: #define        IPTOS_PREC_CRITIC_ECP           0xa0
                     87: #define        IPTOS_PREC_FLASHOVERRIDE        0x80
                     88: #define        IPTOS_PREC_FLASH                0x60
                     89: #define        IPTOS_PREC_IMMEDIATE            0x40
                     90: #define        IPTOS_PREC_PRIORITY             0x20
1.9       cgd        91: #define        IPTOS_PREC_ROUTINE              0x00
1.23      itojun     92:
                     93: /*
                     94:  * ECN (Explicit Congestion Notification) codepoints in RFC3168
                     95:  * mapped to the lower 2 bits of the TOS field.
                     96:  */
                     97: #define        IPTOS_ECN_NOTECT        0x00    /* not-ECT */
                     98: #define        IPTOS_ECN_ECT1          0x01    /* ECN-capable transport (1) */
                     99: #define        IPTOS_ECN_ECT0          0x02    /* ECN-capable transport (0) */
                    100: #define        IPTOS_ECN_CE            0x03    /* congestion experienced */
                    101: #define        IPTOS_ECN_MASK          0x03    /* ECN field mask */
1.1       cgd       102:
                    103: /*
                    104:  * Definitions for options.
                    105:  */
                    106: #define        IPOPT_COPIED(o)         ((o)&0x80)
                    107: #define        IPOPT_CLASS(o)          ((o)&0x60)
                    108: #define        IPOPT_NUMBER(o)         ((o)&0x1f)
                    109:
                    110: #define        IPOPT_CONTROL           0x00
                    111: #define        IPOPT_RESERVED1         0x20
                    112: #define        IPOPT_DEBMEAS           0x40
                    113: #define        IPOPT_RESERVED2         0x60
                    114:
                    115: #define        IPOPT_EOL               0               /* end of option list */
                    116: #define        IPOPT_NOP               1               /* no operation */
                    117:
                    118: #define        IPOPT_RR                7               /* record packet route */
                    119: #define        IPOPT_TS                68              /* timestamp */
                    120: #define        IPOPT_SECURITY          130             /* provide s,c,h,tcc */
                    121: #define        IPOPT_LSRR              131             /* loose source route */
                    122: #define        IPOPT_SATID             136             /* satnet id */
                    123: #define        IPOPT_SSRR              137             /* strict source route */
                    124:
                    125: /*
                    126:  * Offsets to fields in options other than EOL and NOP.
                    127:  */
                    128: #define        IPOPT_OPTVAL            0               /* option ID */
                    129: #define        IPOPT_OLEN              1               /* option length */
1.4       mycroft   130: #define        IPOPT_OFFSET            2               /* offset within option */
1.1       cgd       131: #define        IPOPT_MINOFF            4               /* min value of above */
                    132:
                    133: /*
                    134:  * Time stamp option structure.
                    135:  */
                    136: struct ip_timestamp {
1.7       cgd       137:        u_int8_t ipt_code;              /* IPOPT_TS */
                    138:        u_int8_t ipt_len;               /* size of structure (variable) */
                    139:        u_int8_t ipt_ptr;               /* index of current entry */
1.4       mycroft   140: #if BYTE_ORDER == LITTLE_ENDIAN
1.29      christos  141:        unsigned int ipt_flg:4,         /* flags, see below */
                    142:                     ipt_oflw:4;        /* overflow counter */
1.1       cgd       143: #endif
1.4       mycroft   144: #if BYTE_ORDER == BIG_ENDIAN
1.29      christos  145:        unsigned int ipt_oflw:4,        /* overflow counter */
                    146:                     ipt_flg:4;         /* flags, see below */
1.1       cgd       147: #endif
                    148:        union ipt_timestamp {
1.8       cgd       149:                 n_time ipt_time[1];
                    150:                 struct ipt_ta {
1.1       cgd       151:                        struct in_addr ipt_addr;
1.7       cgd       152:                        n_time ipt_time;
1.31    ! perry     153:                 } ipt_ta[1] __packed;
        !           154:        } ipt_timestamp __packed;
        !           155: } __packed;
1.1       cgd       156:
                    157: /* flag bits for ipt_flg */
                    158: #define        IPOPT_TS_TSONLY         0               /* timestamps only */
                    159: #define        IPOPT_TS_TSANDADDR      1               /* timestamps and addresses */
                    160: #define        IPOPT_TS_PRESPEC        3               /* specified modules only */
                    161:
                    162: /* bits for security (not byte swapped) */
                    163: #define        IPOPT_SECUR_UNCLASS     0x0000
                    164: #define        IPOPT_SECUR_CONFID      0xf135
                    165: #define        IPOPT_SECUR_EFTO        0x789a
                    166: #define        IPOPT_SECUR_MMMM        0xbc4d
                    167: #define        IPOPT_SECUR_RESTR       0xaf13
                    168: #define        IPOPT_SECUR_SECRET      0xd788
                    169: #define        IPOPT_SECUR_TOPSECRET   0x6bc5
                    170:
                    171: /*
                    172:  * Internet implementation parameters.
                    173:  */
                    174: #define        MAXTTL          255             /* maximum time to live (seconds) */
1.5       mycroft   175: #define        IPDEFTTL        64              /* default ttl, from RFC 1340 */
1.1       cgd       176: #define        IPFRAGTTL       60              /* time to live for frags, slowhz */
                    177: #define        IPTTLDEC        1               /* subtracted when forwarding */
                    178:
                    179: #define        IP_MSS          576             /* default maximum segment size */
1.18      perry     180:
1.26      jonathan  181: /*
                    182:  * This is the real IPv4 pseudo header, used for computing the TCP and UDP
                    183:  * checksums. For the Internet checksum, struct ipovly can be used instead.
                    184:  * For stronger checksums, the real thing must be used.
                    185:  */
                    186: struct ippseudo {
                    187:        struct  in_addr ippseudo_src;   /* source internet address */
                    188:        struct  in_addr ippseudo_dst;   /* destination internet address */
                    189:        u_int8_t        ippseudo_pad;   /* pad, must be zero */
                    190:        u_int8_t        ippseudo_p;     /* protocol */
                    191:        u_int16_t       ippseudo_len;   /* protocol length */
                    192: } __packed;
1.27      elad      193: #endif /* !_NETINET_IP_H_ */
1.29      christos  194:

CVSweb <webmaster@jp.NetBSD.org>