|
|
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: int ipackets, ierrors;
83: int opackets, oerrors;
84: int arp;
85: int dev;
86: };
87: #define IFF_UP 0x1
88: #define IFF_HOST 0x2
89: #define IFF_ARP 0x4
90:
91: #ifdef KERNEL
92: extern struct ipif ipif[];
93: extern struct ipif *ip_ifwithaddr(), *ip_ifonnetof();
94: #endif
95:
96: #define IPIOHOST (('i'<<8)|1)
97: #define IPIONET (('i'<<8)|2)
98: #define IPIOLOCAL (('i'<<8)|3)
99: #define IPIOARP (('i'<<8)|4)
100: #define IPIORESOLVE (('i'<<8)|5)
101: #define IPIOMTU (('i'<<8)|6)
102: #define IPIOROUTE (('i'<<8)|7)
103: #define IPIOGETIFS (('i'<<8)|8)
104:
105: #define IP_BODY_LIMIT 8192
106: #define IP_MSG_LIMIT (sizeof(struct ipovly) + IP_BODY_LIMIT)
107:
108: /* an ip routing record */
109: struct ip_route{
110: in_addr dst; /* destination */
111: in_addr gate; /* gate to use for this destination */
112: struct ip_route *next; /* pointer to next routing record */
113: };
114:
115: #ifdef KERNEL
116: /* structure returned by "ip_route" */
117: struct ip_route_info {
118: in_addr addr;
119: struct ipif *ifp;
120: };
121: struct ip_route_info ip_route();
122: #endif KERNEL
123:
124: /* an ip to ethernet address mapping */
125: struct ip_arp{
126: in_addr inaddr; /* inet address */
127: unsigned char enaddr[6]; /* ethernet address */
128: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.