2 * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
7 * Copyright (c) 1982, 1986 Regents of the University of California.
10 * Redistribution and use in source and binary forms are permitted
11 * provided that this notice is preserved and that due credit is given
12 * to the University of California at Berkeley. The name of the University
13 * may not be used to endorse or promote products derived from this
14 * software without specific prior written permission. This software
15 * is provided ``as is'' without express or implied warranty.
19 * Definitions for internet protocol version 4.
20 * Per RFC 791, September 1981.
26 #include <sys/isa_defs.h>
35 * Structure of an internet header, naked of options.
38 #ifdef _BIT_FIELDS_LTOH
39 uchar_t ip_hl
:4, /* header length */
42 uchar_t ip_v
:4, /* version */
43 ip_hl
:4; /* header length */
45 uchar_t ip_tos
; /* type of service */
46 ushort_t ip_len
; /* total length */
47 ushort_t ip_id
; /* identification */
48 ushort_t ip_off
; /* fragment offset field */
49 #define IP_DF 0x4000 /* dont fragment flag */
50 #define IP_MF 0x2000 /* more fragments flag */
51 uchar_t ip_ttl
; /* time to live */
52 uchar_t ip_p
; /* protocol */
53 ushort_t ip_sum
; /* checksum */
54 struct in_addr ip_src
, ip_dst
; /* source and dest address */
57 #define IP_MAXPACKET 65535 /* maximum packet size */
60 * Definitions for IP type of service (ip_tos)
62 #define IPTOS_LOWDELAY 0x10
63 #define IPTOS_THROUGHPUT 0x08
64 #define IPTOS_RELIABILITY 0x04
65 #define IPTOS_ECT 0x02 /* ECN-Capable Transport flag */
66 #define IPTOS_CE 0x01 /* ECN-Congestion Experienced flag */
69 * Definitions for IP precedence (also in ip_tos) (hopefully unused)
71 #define IPTOS_PREC_NETCONTROL 0xe0
72 #define IPTOS_PREC_INTERNETCONTROL 0xc0
73 #define IPTOS_PREC_CRITIC_ECP 0xa0
74 #define IPTOS_PREC_FLASHOVERRIDE 0x80
75 #define IPTOS_PREC_FLASH 0x60
76 #define IPTOS_PREC_IMMEDIATE 0x40
77 #define IPTOS_PREC_PRIORITY 0x20
78 #define IPTOS_PREC_ROUTINE 0x00
81 * Definitions for options.
84 /* Bits in the option value */
85 #define IPOPT_COPY 0x80
87 #define IPOPT_COPIED(o) ((o)&0x80)
88 #define IPOPT_CLASS(o) ((o)&0x60)
89 #define IPOPT_NUMBER(o) ((o)&0x1f)
91 #define IPOPT_CONTROL 0x00
92 #define IPOPT_RESERVED1 0x20
93 #define IPOPT_DEBMEAS 0x40
94 #define IPOPT_RESERVED2 0x60
96 #define IPOPT_EOL 0x00 /* end of option list */
97 #define IPOPT_NOP 0x01 /* no operation */
99 #define IPOPT_RR 0x07 /* record packet route */
100 #define IPOPT_RTRALERT 0x14 /* router alert */
101 #define IPOPT_TS 0x44 /* timestamp */
102 #define IPOPT_SECURITY 0x82 /* provide s,c,h,tcc */
103 #define IPOPT_LSRR 0x83 /* loose source route */
104 #define IPOPT_SATID 0x88 /* satnet id */
105 #define IPOPT_SSRR 0x89 /* strict source route */
106 #define IPOPT_RA 0x94
107 #define IPOPT_SDMDD 0x95
110 * Offsets to fields in options other than EOL and NOP.
112 #define IPOPT_OPTVAL 0 /* option ID */
113 #define IPOPT_OLEN 1 /* option length */
114 #define IPOPT_OFFSET 2 /* offset within option */
115 #define IPOPT_POS_OV_FLG 3
116 #define IPOPT_MINOFF 4 /* min value of IPOPT_OFFSET */
119 /* Minimum for src and record route options */
120 #define IPOPT_MINOFF_SR IPOPT_MINOFF
123 * Time stamp option structure.
125 struct ip_timestamp
{
126 uchar_t ipt_code
; /* IPOPT_TS */
127 uchar_t ipt_len
; /* size of structure (variable) */
128 uchar_t ipt_ptr
; /* index of current entry */
129 #ifdef _BIT_FIELDS_LTOH
130 uchar_t ipt_flg
:4, /* flags, see below */
131 ipt_oflw
:4; /* overflow counter */
133 uchar_t ipt_oflw
:4, /* overflow counter */
134 ipt_flg
:4; /* flags, see below */
136 union ipt_timestamp
{
137 uint32_t ipt_time
[1];
139 struct in_addr ipt_addr
;
145 /* flag bits for ipt_flg */
146 #define IPOPT_TS_TSONLY 0 /* timestamps only */
147 #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
148 #define IPOPT_TS_PRESPEC 2 /* specified modules only */
149 #define IPOPT_TS_PRESPEC_RFC791 3
151 /* Minimum for timestamp option */
152 #define IPOPT_MINOFF_IT 5
153 #define IPOPT_MINLEN_IT 5
155 #define IPOPT_TS_TIMELEN 4 /* Timestamp size */
157 /* bits for security (not byte swapped) */
158 #define IPOPT_SECUR_UNCLASS 0x0000
159 #define IPOPT_SECUR_CONFID 0xf135
160 #define IPOPT_SECUR_EFTO 0x789a
161 #define IPOPT_SECUR_MMMM 0xbc4d
162 #define IPOPT_SECUR_RESTR 0xaf13
163 #define IPOPT_SECUR_SECRET 0xd788
164 #define IPOPT_SECUR_TOPSECRET 0x6bc5
167 * Internet implementation parameters.
169 #define MAXTTL 255 /* maximum time to live (seconds) */
170 #define IPFRAGTTL 60 /* time to live for frags, slowhz */
171 #define IPTTLDEC 1 /* subtracted when forwarding */
173 #define IP_MSS 576 /* default maximum segment size */
179 #endif /* _NETINET_IP_H */