|
|
1.1 root 1: /* ip_var.h 6.1 83/07/29 */
2:
3: /*
4: * Overlay for ip header used by other protocols (tcp, udp).
5: */
6: struct ipovly {
7: caddr_t ih_next, ih_prev; /* for protocol sequence q's */
8: u_char ih_x1; /* (unused) */
9: u_char ih_pr; /* protocol */
10: short ih_len; /* protocol length */
11: in_addr ih_src; /* source internet address */
12: in_addr ih_dst; /* destination internet address */
13: };
14:
15: /*
16: * Ip reassembly queue structure. Each fragment
17: * being reassembled is attached to one of these structures.
18: * They are timed out after ipq_ttl drops to 0, and may also
19: * be reclaimed if memory becomes tight.
20: */
21: struct ipq {
22: struct ipq *next,*prev; /* to other reass headers */
23: u_char ipq_ttl; /* time for reass q to live */
24: u_char ipq_p; /* protocol of this fragment */
25: u_short ipq_id; /* sequence id for reassembly */
26: struct ipasfrag *ipq_next,*ipq_prev;
27: /* to ip headers of fragments */
28: in_addr ipq_src,ipq_dst;
29: };
30:
31: /*
32: * Ip header, when holding a fragment.
33: *
34: * Note: ipf_next must be at same offset as ipq_next above
35: */
36: struct ipasfrag {
37: #ifdef vax
38: u_char ip_hl:4,
39: ip_v:4;
40: #endif
41: u_char ipf_mff; /* copied from (ip_off&IP_MF) */
42: short ip_len;
43: u_short ip_id;
44: short ip_off;
45: u_char ip_ttl;
46: u_char ip_p;
47: u_short ip_sum;
48: struct ipasfrag *ipf_next; /* next fragment */
49: struct ipasfrag *ipf_prev; /* previous fragment */
50: };
51:
52: struct ipstat {
53: int ips_badsum; /* checksum bad */
54: int ips_tooshort; /* packet too short */
55: int ips_toosmall; /* not enough data */
56: int ips_badhlen; /* ip header length < data size */
57: int ips_badlen; /* ip length < ip header length */
58: int ips_qfull;
59: int ips_route; /* routing output errors */
60: int ips_fragout; /* fragmented packets */
61: };
62:
63: /* flags passed to ip_output as last parameter */
64: #define IP_FORWARDING 0x1 /* most of ip header exists */
65: #define IP_ROUTETOIF 0x10 /* same as SO_DONTROUTE */
66:
67: #ifdef KERNEL
68: struct ipstat ipstat;
69: struct ipq ipq; /* ip reass. queue */
70: u_short ip_id; /* ip packet ctr, for ids */
71: #endif
72:
73: /*
74: * interface stuff
75: */
76: struct ipif{
77: struct queue *queue;
78: int flags;
79: int mtu;
80: in_addr thishost;
81: in_addr that;
82: in_addr mask;
83: int ipackets, ierrors;
84: int opackets, oerrors;
85: int arp;
86: int dev;
87: };
88: #define IFF_UP 0x1
89: #define IFF_HOST 0x2
90: #define IFF_ARP 0x4
91:
92: #ifdef KERNEL
93: extern struct ipif ipif[];
94: extern struct ipif *ip_ifwithaddr(), *ip_ifonnetof();
95: #endif
96:
97: #define IPIOHOST (('i'<<8)|1)
98: #define IPIONET (('i'<<8)|2)
99: #define IPIOLOCAL (('i'<<8)|3)
100: #define IPIOARP (('i'<<8)|4)
101: #define IPIORESOLVE (('i'<<8)|5)
102: #define IPIOMTU (('i'<<8)|6)
103: #define IPIOROUTE (('i'<<8)|7)
104: #define IPIOGETIFS (('i'<<8)|8)
105:
106: #define IP_BODY_LIMIT 8192
107: #define IP_MSG_LIMIT (sizeof(struct ipovly) + IP_BODY_LIMIT)
108:
109: /* an ip routing record */
110: struct ip_route{
111: long time; /* time of last access */
112: in_addr dst; /* destination */
113: in_addr gate; /* gate to use for this destination */
114: };
115:
116: #ifdef KERNEL
117: /* structure returned by "ip_route" */
118: struct ip_route_info {
119: in_addr addr;
120: struct ipif *ifp;
121: };
122: struct ip_route_info ip_route();
123: #endif KERNEL
124:
125: /* an ip to ethernet address mapping */
126: struct ip_arp{
127: long time; /* time of last access */
128: in_addr inaddr; /* inet address */
129: unsigned char enaddr[6]; /* ethernet address */
130: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.