|
|
1.1 root 1: /* sock.h */
2: /*
3: Copyright (C) 1992 Ross Biro
4:
5: This program is free software; you can redistribute it and/or modify
6: it under the terms of the GNU General Public License as published by
7: the Free Software Foundation; either version 2, or (at your option)
8: any later version.
9:
10: This program is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public License
16: along with this program; if not, write to the Free Software
17: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18:
19: The Author may be reached as [email protected] or
20: C/O Department of Mathematics; Stanford University; Stanford, CA 94305
21: */
22: #ifndef _TCP_SOCK_H
23: #define _TCP_SOCK_H
24:
25: #define SOCK_ARRAY_SIZE 64
26:
27: /* This structure really needs to be cleaned up. Most of it is
28: for tcp, and not used by any of the other protocols. */
29:
30: struct sock
31: {
32: struct options *opt;
33: unsigned long wmem_alloc;
34: unsigned long rmem_alloc;
35: unsigned long send_seq;
36: unsigned long acked_seq;
37: unsigned long copied_seq;
38: unsigned long rcv_ack_seq;
39: unsigned long window_seq;
40: unsigned long fin_seq;
41: unsigned long inuse:1, dead:1, urginline:1,
42: intr:1, blog:1, done:1, reuse:1, keepopen:1, linger:1,
43: delay_acks:1, timeout:3, destroy:1, ack_timed:1, no_check:1,
44: exp_growth:1;
45: int proc;
46: volatile struct sock *next;
47: volatile struct sock *pair;
48: struct sk_buff *send_tail;
49: struct sk_buff *send_head;
50: struct sk_buff *back_log;
51: long retransmits;
52: struct sk_buff *wback, *wfront, *rqueue;
53: struct proto *prot;
54: struct wait_queue **sleep;
55: unsigned long daddr;
56: unsigned long saddr;
57: unsigned short max_unacked;
58: unsigned short window;
59: unsigned short bytes_rcv;
60: unsigned short mtu;
61: unsigned short num;
62: unsigned short cong_window;
63: unsigned short packets_out;
64: unsigned short urg;
65: unsigned short shutdown;
66: short rtt;
67: unsigned char protocol;
68: unsigned char state;
69: unsigned char ack_backlog;
70: unsigned char err;
71: unsigned char max_ack_backlog;
72: unsigned char priority;
73: struct tcp_header dummy_th; /* I may be able to get rid of this. */
74: struct timer time_wait;
75: };
76:
77: struct proto
78: {
79: void *(*wmalloc)(volatile struct sock *sk, unsigned long size, int force);
80: void *(*rmalloc)(volatile struct sock *sk, unsigned long size, int force);
81: void (*wfree)(volatile struct sock *sk, void *mem, unsigned long size);
82: void (*rfree)(volatile struct sock *sk, void *mem, unsigned long size);
83: unsigned long (*rspace)(volatile struct sock *sk);
84: unsigned long (*wspace)(volatile struct sock *sk);
85: void (*close)(volatile struct sock *sk, int timeout);
86: int (*read)(volatile struct sock *sk, unsigned char *to, int len,
87: int nonblock, unsigned flags);
88: int (*write)(volatile struct sock *sk, unsigned char *to, int len,
89: int nonblock, unsigned flags);
90: int (*sendto) (volatile struct sock *sk, unsigned char *from, int len,
91: int noblock, unsigned flags, struct sockaddr_in *usin,
92: int addr_len);
93: int (*recvfrom) (volatile struct sock *sk, unsigned char *from, int len,
94: int noblock, unsigned flags, struct sockaddr_in *usin,
95: int *addr_len);
96: int (*build_header) (struct sk_buff *skb, unsigned long saddr,
97: unsigned long daddr, struct device **dev, int type,
98: struct options *opt, int len);
99: int (*connect) (volatile struct sock *sk, struct sockaddr_in *usin,
100: int addr_len);
101: volatile struct sock *(*accept) (volatile struct sock *sk, int flags);
102: void (*queue_xmit) (volatile struct sock *sk, struct device *dev,
103: struct sk_buff *skb, int free);
104: void (*retransmit) (volatile struct sock *sk, int all);
105: void (*write_wakeup) (volatile struct sock *sk);
106: void (*read_wakeup) (volatile struct sock *sk);
107: int (*rcv)(struct sk_buff *buff, struct device *dev, struct options *opt,
108: unsigned long daddr, unsigned short len,
109: unsigned long saddr, int redo, struct ip_protocol *protocol);
110: int (*select)(volatile struct sock *sk, int which, select_table *wait);
111: int (*ioctl) (volatile struct sock *sk, int cmd, unsigned long arg);
112: int (*init) (volatile struct sock *sk);
113: unsigned short max_header;
114: unsigned long retransmits;
115: volatile struct sock *sock_array[SOCK_ARRAY_SIZE];
116: };
117:
118: #define TIME_WRITE 1
119: #define TIME_CLOSE 2
120: #define TIME_KEEPOPEN 3
121: #define TIME_DESTROY 4
122: #define TIME_DONE 5 /* used to absorb those last few packets. */
123: #define SOCK_DESTROY_TIME 1000 /* about 10 seconds. */
124:
125: /* used with free skb */
126: #define FREE_READ 1
127: #define FREE_WRITE 0
128:
129: struct sk_buff
130: {
131: struct sk_buff *next;
132: struct sk_buff *prev;
133: struct sk_buff *link3;
134: volatile struct sock *sk;
135: unsigned long when; /* used to compute rtt's. */
136: struct device *dev;
137: void *mem_addr;
138: union
139: {
140: struct tcp_header *th;
141: struct enet_header *eth;
142: struct ip_header *iph;
143: struct udp_header *uh;
144: struct arp *arp;
145: unsigned char *raw;
146: unsigned long seq;
147: } h;
148: unsigned long mem_len;
149: unsigned long len;
150: unsigned long saddr;
151: unsigned long daddr;
152: unsigned long acked:1,used:1,free:1,arp:1, urg_used:1, lock:1;
153: };
154:
155: #define PROT_SOCK 1024
156: #define SK_WMEM_MAX 8192
157: #define SK_RMEM_MAX 32767
158: #define SHUTDOWN_MASK 3
159: #define RCV_SHUTDOWN 1
160: #define SEND_SHUTDOWN 2
161:
162: void destroy_sock (volatile struct sock *sk);
163: unsigned short get_new_socknum (struct proto *, unsigned short);
164: void put_sock (unsigned short, volatile struct sock *);
165: void release_sock (volatile struct sock *sk);
166: volatile struct sock *get_sock(struct proto *, unsigned short, unsigned long,
167: unsigned short, unsigned long);
168: void print_sk (volatile struct sock *);
169: void print_skb (struct sk_buff *);
170: void *sock_wmalloc(volatile struct sock *sk, unsigned long size, int force);
171: void *sock_rmalloc(volatile struct sock *sk, unsigned long size, int force);
172: void sock_wfree(volatile struct sock *sk, void *mem, unsigned long size);
173: void sock_rfree(volatile struct sock *sk, void *mem, unsigned long size);
174: unsigned long sock_rspace(volatile struct sock *sk);
175: unsigned long sock_wspace(volatile struct sock *sk);
176: void free_skb (struct sk_buff *skb, int rw);
177: void lock_skb (struct sk_buff *skb);
178: void unlock_skb (struct sk_buff *skb, int rw);
179:
180: void dummy_routine(void *, ... );
181:
182: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.