|
|
1.1 root 1: /*
2: * Copyright (c) 1982, 1986 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: *
17: * @(#)ip.h 7.7 (Berkeley) 6/29/88
18: */
19:
20: /*
21: * Definitions for internet protocol version 4.
22: * Per RFC 791, September 1981.
23: */
24: #define IPVERSION 4
25:
26: /*
27: * Structure of an internet header, naked of options.
28: *
29: * We declare ip_len and ip_off to be short, rather than u_short
30: * pragmatically since otherwise unsigned comparisons can result
31: * against negative integers quite easily, and fail in subtle ways.
32: */
33: struct ip {
34: #if BYTE_ORDER == LITTLE_ENDIAN
35: u_char ip_hl:4, /* header length */
36: ip_v:4; /* version */
37: #endif
38: #if BYTE_ORDER == BIG_ENDIAN
39: u_char ip_v:4, /* version */
40: ip_hl:4; /* header length */
41: #endif
42: u_char ip_tos; /* type of service */
43: short ip_len; /* total length */
44: u_short ip_id; /* identification */
45: short ip_off; /* fragment offset field */
46: #define IP_DF 0x4000 /* dont fragment flag */
47: #define IP_MF 0x2000 /* more fragments flag */
48: u_char ip_ttl; /* time to live */
49: u_char ip_p; /* protocol */
50: u_short ip_sum; /* checksum */
51: struct in_addr ip_src,ip_dst; /* source and dest address */
52: };
53:
54: #define IP_MAXPACKET 65535 /* maximum packet size */
55:
56: /*
57: * Definitions for options.
58: */
59: #define IPOPT_COPIED(o) ((o)&0x80)
60: #define IPOPT_CLASS(o) ((o)&0x60)
61: #define IPOPT_NUMBER(o) ((o)&0x1f)
62:
63: #define IPOPT_CONTROL 0x00
64: #define IPOPT_RESERVED1 0x20
65: #define IPOPT_DEBMEAS 0x40
66: #define IPOPT_RESERVED2 0x60
67:
68: #define IPOPT_EOL 0 /* end of option list */
69: #define IPOPT_NOP 1 /* no operation */
70:
71: #define IPOPT_RR 7 /* record packet route */
72: #define IPOPT_TS 68 /* timestamp */
73: #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
74: #define IPOPT_LSRR 131 /* loose source route */
75: #define IPOPT_SATID 136 /* satnet id */
76: #define IPOPT_SSRR 137 /* strict source route */
77:
78: /*
79: * Offsets to fields in options other than EOL and NOP.
80: */
81: #define IPOPT_OPTVAL 0 /* option ID */
82: #define IPOPT_OLEN 1 /* option length */
83: #define IPOPT_OFFSET 2 /* offset within option */
84: #define IPOPT_MINOFF 4 /* min value of above */
85:
86: /*
87: * Time stamp option structure.
88: */
89: struct ip_timestamp {
90: u_char ipt_code; /* IPOPT_TS */
91: u_char ipt_len; /* size of structure (variable) */
92: u_char ipt_ptr; /* index of current entry */
93: #if BYTE_ORDER == LITTLE_ENDIAN
94: u_char ipt_flg:4, /* flags, see below */
95: ipt_oflw:4; /* overflow counter */
96: #endif
97: #if BYTE_ORDER == BIG_ENDIAN
98: u_char ipt_oflw:4, /* overflow counter */
99: ipt_flg:4; /* flags, see below */
100: #endif
101: union ipt_timestamp {
102: n_long ipt_time[1];
103: struct ipt_ta {
104: struct in_addr ipt_addr;
105: n_long ipt_time;
106: } ipt_ta[1];
107: } ipt_timestamp;
108: };
109:
110: /* flag bits for ipt_flg */
111: #define IPOPT_TS_TSONLY 0 /* timestamps only */
112: #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
113: #define IPOPT_TS_PRESPEC 2 /* specified modules only */
114:
115: /* bits for security (not byte swapped) */
116: #define IPOPT_SECUR_UNCLASS 0x0000
117: #define IPOPT_SECUR_CONFID 0xf135
118: #define IPOPT_SECUR_EFTO 0x789a
119: #define IPOPT_SECUR_MMMM 0xbc4d
120: #define IPOPT_SECUR_RESTR 0xaf13
121: #define IPOPT_SECUR_SECRET 0xd788
122: #define IPOPT_SECUR_TOPSECRET 0x6bc5
123:
124: /*
125: * Internet implementation parameters.
126: */
127: #define MAXTTL 255 /* maximum time to live (seconds) */
128: #define IPFRAGTTL 60 /* time to live for frags, slowhz */
129: #define IPTTLDEC 1 /* subtracted when forwarding */
130:
131: #define IP_MSS 576 /* default maximum segment size */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.