1 /*
2 * INET An implementation of the TCP/IP protocol suite for the LINUX
3 * operating system. INET is implemented using the BSD Socket
4 * interface as the means of communication with the user level.
5 *
6 * Definitions for the AF_INET socket handler.
7 *
8 * Version: @(#)sock.h 1.0.4 05/13/93
9 *
10 * Authors: Ross Biro, <bir7@leland.Stanford.Edu>
11 * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
12 * Corey Minyard <wf-rch!minyard@relay.EU.net>
13 * Florian La Roche <flla@stud.uni-sb.de>
14 *
15 * Fixes:
16 * Alan Cox : Volatiles in skbuff pointers. See
17 * skbuff comments. May be overdone,
18 * better to prove they can be removed
19 * than the reverse.
20 * Alan Cox : Added a zapped field for tcp to note
21 * a socket is reset and must stay shut up
22 * Alan Cox : New fields for options
23 * Pauline Middelink : identd support
24 * Alan Cox : Eliminate low level recv/recvfrom
25 *
26 * This program is free software; you can redistribute it and/or
27 * modify it under the terms of the GNU General Public License
28 * as published by the Free Software Foundation; either version
29 * 2 of the License, or (at your option) any later version.
30 */
31 #ifndef _SOCK_H
32 #define _SOCK_H
33
34 #include <linux/timer.h>
35 #include <linux/ip.h> /* struct options */
36 #include <linux/in.h> /* struct sockaddr_in */
37 #include <linux/tcp.h> /* struct tcphdr */
38 #include <linux/config.h>
39
40 #include <linux/netdevice.h>
41 #include <linux/skbuff.h> /* struct sk_buff */
42 #include <net/protocol.h> /* struct inet_protocol */
43 #ifdef CONFIG_AX25
44 #include <net/ax25.h>
45 #ifdef CONFIG_NETROM
46 #include <net/netrom.h>
47 #endif
48 #endif
49
50 #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
51 #include <net/ipx.h>
52 #endif
53
54 #if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
55 #include <linux/atalk.h>
56 #endif
57
58 #include <linux/igmp.h>
59
60 #include <asm/atomic.h>
61
62 /* Think big (also on some systems a byte is faster) */
63 #define SOCK_ARRAY_SIZE 256
64
65
66 /*
67 * The AF_UNIX specific socket options
68 */
69
70 struct unix_opt
71 {
72 int family;
73 char * name;
74 int locks;
75 struct inode * inode;
76 struct semaphore readsem;
77 struct sock * other;
78 int marksweep;
79 #define MARKED 1
80 int inflight;
81 };
82
83 /*
84 * IP packet socket options
85 */
86
87 struct inet_packet_opt
88 {
89 struct notifier_block notifier; /* Used when bound */
90 struct device *bound_dev;
91 unsigned long dev_stamp;
92 struct packet_type *prot_hook;
93 char device_name[15];
94 };
95
96 /*
97 * Once the IPX ncpd patches are in these are going into protinfo
98 */
99
100 #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
101 struct ipx_opt
102 {
103 ipx_address dest_addr;
104 ipx_interface *intrfc;
105 unsigned short port;
106 #ifdef CONFIG_IPX_INTERN
107 unsigned char node[IPX_NODE_LEN];
108 #endif
109 unsigned short type;
110 /*
111 * To handle asynchronous messages from the NetWare server, we have to
112 * know the connection this socket belongs to.
113 */
114 struct ncp_server *ncp_server;
115
116 };
117 #endif
118
119 #ifdef CONFIG_NUTCP
120 struct tcp_opt
121 {
122 /*
123 * RFC793 variables by their proper names. This means you can
124 * read the code and the spec side by side (and laugh ...)
125 * See RFC793 and RFC1122. The RFC writes these in capitals.
126 */
127 __u32 rcv_nxt; /* What we want to receive next */
128 __u32 rcv_up; /* The urgent point (may not be valid) */
129 __u32 rcv_wnd; /* Current receiver window */
130 __u32 snd_nxt; /* Next sequence we send */
131 __u32 snd_una; /* First byte we want an ack for */
132 __u32 snd_up; /* Outgoing urgent pointer */
133 __u32 snd_wl1; /* Sequence for window update */
134 __u32 snd_wl2; /* Ack sequence for update */
135 /*
136 * Slow start and congestion control (see also Nagle, and Karn & Partridge)
137 */
138 __u32 snd_cwnd; /* Sending congestion window */
139 __u32 snd_ssthresh; /* Slow start size threshold */
140 /*
141 * Timers used by the TCP protocol layer
142 */
143 struct timer_list delack_timer; /* Ack delay */
144 struct timer_list idle_timer; /* Idle watch */
145 struct timer_list completion_timer; /* Up/Down timer */
146 struct timer_list probe_timer; /* Probes */
147 struct timer_list retransmit_timer; /* Resend (no ack) */
148 };
149 #endif
150
151 /*
152 * This structure really needs to be cleaned up.
153 * Most of it is for TCP, and not used by any of
154 * the other protocols.
155 */
156 struct sock
157 {
158 struct options *opt;
159 atomic_t wmem_alloc;
160 atomic_t rmem_alloc;
161 unsigned long allocation; /* Allocation mode */
162 __u32 write_seq;
163 __u32 sent_seq;
164 __u32 acked_seq;
165 __u32 copied_seq;
166 __u32 rcv_ack_seq;
167 unsigned short rcv_ack_cnt; /* count of same ack */
168 __u32 window_seq;
169 __u32 fin_seq;
170 __u32 urg_seq;
171 __u32 urg_data;
172 int users; /* user count */
173 /*
174 * Not all are volatile, but some are, so we
175 * might as well say they all are.
176 */
177 volatile char dead,
178 urginline,
179 intr,
180 blog,
181 done,
182 reuse,
183 keepopen,
184 linger,
185 delay_acks,
186 destroy,
187 ack_timed,
188 no_check,
189 zapped, /* In ax25 & ipx means not linked */
190 broadcast,
191 nonagle,
192 bsdism;
193 unsigned long lingertime;
194 int proc;
195 struct sock *next;
196 struct sock *prev; /* Doubly linked chain.. */
197 struct sock *pair;
198 struct sk_buff * volatile send_head;
199 struct sk_buff * volatile send_tail;
200 struct sk_buff_head back_log;
201 struct sk_buff *partial;
202 struct timer_list partial_timer;
203 long retransmits;
204 struct sk_buff_head write_queue,
205 receive_queue;
206 struct proto *prot;
207 struct wait_queue **sleep;
208 __u32 daddr;
209 __u32 saddr; /* Sending source */
210 __u32 rcv_saddr; /* Bound address */
211 unsigned short max_unacked;
212 unsigned short window;
213 __u32 lastwin_seq; /* sequence number when we last updated the window we offer */
214 volatile unsigned long ato; /* ack timeout */
215 volatile unsigned long lrcvtime; /* jiffies at last rcv */
216 unsigned short bytes_rcv;
217 /*
218 * mss is min(mtu, max_window)
219 */
220 unsigned short mtu; /* mss negotiated in the syn's */
221 volatile unsigned short mss; /* current eff. mss - can change */
222 volatile unsigned short user_mss; /* mss requested by user in ioctl */
223 volatile unsigned short max_window;
224 unsigned long window_clamp;
225 unsigned short num;
226 volatile unsigned short cong_window;
227 volatile unsigned short cong_count;
228 volatile unsigned short ssthresh;
229 volatile unsigned short packets_out;
230 volatile unsigned short shutdown;
231 volatile unsigned long rtt;
232 volatile unsigned long mdev;
233 volatile unsigned long rto;
234
235 /*
236 * currently backoff isn't used, but I'm maintaining it in case
237 * we want to go back to a backoff formula that needs it
238 */
239
240 volatile unsigned short backoff;
241 int err, err_soft; /* Soft holds errors that don't
242 cause failure but are the cause
243 of a persistent failure not just
244 'timed out' */
245 unsigned char protocol;
246 volatile unsigned char state;
247 unsigned char ack_backlog;
248 unsigned char max_ack_backlog;
249 unsigned char priority;
250 unsigned char debug;
251 unsigned short rcvbuf;
252 unsigned short sndbuf;
253 unsigned short type;
254 unsigned char localroute; /* Route locally only */
255 #ifdef CONFIG_AX25
256 ax25_cb *ax25;
257 #ifdef CONFIG_NETROM
258 nr_cb *nr;
259 #endif
260 #endif
261
262 /*
263 * This is where all the private (optional) areas that don't
264 * overlap will eventually live.
265 */
266
267 union
268 {
269 struct unix_opt af_unix;
270 #if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
271 struct atalk_sock af_at;
272 #endif
273 #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
274 struct ipx_opt af_ipx;
275 #endif
276 #ifdef CONFIG_INET
277 struct inet_packet_opt af_packet;
278 #ifdef CONFIG_NUTCP
279 struct tcp_opt af_tcp;
280 #endif
281 #endif
282 } protinfo;
283
284 /*
285 * IP 'private area' or will be eventually
286 */
287 int ip_ttl; /* TTL setting */
288 int ip_tos; /* TOS */
289 struct tcphdr dummy_th;
290 struct timer_list keepalive_timer; /* TCP keepalive hack */
291 struct timer_list retransmit_timer; /* TCP retransmit timer */
292 struct timer_list delack_timer; /* TCP delayed ack timer */
293 int ip_xmit_timeout; /* Why the timeout is running */
294 struct rtable *ip_route_cache; /* Cached output route */
295 unsigned char ip_hdrincl; /* Include headers ? */
296 #ifdef CONFIG_IP_MULTICAST
297 int ip_mc_ttl; /* Multicasting TTL */
298 int ip_mc_loop; /* Loopback */
299 char ip_mc_name[MAX_ADDR_LEN];/* Multicast device name */
300 struct ip_mc_socklist *ip_mc_list; /* Group array */
301 #endif
302
303 /*
304 * This part is used for the timeout functions (timer.c).
305 */
306
307 int timeout; /* What are we waiting for? */
308 struct timer_list timer; /* This is the TIME_WAIT/receive timer
309 * when we are doing IP
310 */
311 struct timeval stamp;
312
313 /*
314 * Identd
315 */
316
317 struct socket *socket;
318
319 /*
320 * Callbacks
321 */
322
323 void (*state_change)(struct sock *sk);
324 void (*data_ready)(struct sock *sk,int bytes);
325 void (*write_space)(struct sock *sk);
326 void (*error_report)(struct sock *sk);
327
328 };
329
330 /*
331 * IP protocol blocks we attach to sockets.
332 */
333
334 struct proto
335 {
336 void (*close)(struct sock *sk, unsigned long timeout);
337 int (*build_header)(struct sk_buff *skb,
338 __u32 saddr,
339 __u32 daddr,
340 struct device **dev, int type,
341 struct options *opt, int len,
342 int tos, int ttl, struct rtable ** rp);
343 int (*connect)(struct sock *sk,
344 struct sockaddr_in *usin, int addr_len);
345 struct sock * (*accept) (struct sock *sk, int flags);
346 void (*queue_xmit)(struct sock *sk,
347 struct device *dev, struct sk_buff *skb,
348 int free);
349 void (*retransmit)(struct sock *sk, int all);
350 void (*write_wakeup)(struct sock *sk);
351 void (*read_wakeup)(struct sock *sk);
352 int (*rcv)(struct sk_buff *buff, struct device *dev,
353 struct options *opt, __u32 daddr,
354 unsigned short len, __u32 saddr,
355 int redo, struct inet_protocol *protocol);
356 int (*select)(struct sock *sk, int which,
357 select_table *wait);
358 int (*ioctl)(struct sock *sk, int cmd,
359 unsigned long arg);
360 int (*init)(struct sock *sk);
361 void (*shutdown)(struct sock *sk, int how);
362 int (*setsockopt)(struct sock *sk, int level, int optname,
363 char *optval, int optlen);
364 int (*getsockopt)(struct sock *sk, int level, int optname,
365 char *optval, int *option);
366 int (*sendmsg)(struct sock *sk, struct msghdr *msg, int len,
367 int noblock, int flags);
368 int (*recvmsg)(struct sock *sk, struct msghdr *msg, int len,
369 int noblock, int flags, int *addr_len);
370 int (*bind)(struct sock *sk, struct sockaddr *uaddr, int addr_len);
371 unsigned short max_header;
372 unsigned long retransmits;
373 char name[32];
374 int inuse, highestinuse;
375 struct sock * sock_array[SOCK_ARRAY_SIZE];
376 };
377
378 #define TIME_WRITE 1
379 #define TIME_CLOSE 2
380 #define TIME_KEEPOPEN 3
381 #define TIME_DESTROY 4
382 #define TIME_DONE 5 /* Used to absorb those last few packets */
383 #define TIME_PROBE0 6
384
385 /*
386 * About 10 seconds
387 */
388
389 #define SOCK_DESTROY_TIME (10*HZ)
390
391 /*
392 * Sockets 0-1023 can't be bound too unless you are superuser
393 */
394
395 #define PROT_SOCK 1024
396
397 #define SHUTDOWN_MASK 3
398 #define RCV_SHUTDOWN 1
399 #define SEND_SHUTDOWN 2
400
401 /*
402 * Used by processes to "lock" a socket state, so that
403 * interrupts and bottom half handlers won't change it
404 * from under us. It essentially blocks any incoming
405 * packets, so that we won't get any new data or any
406 * packets that change the state of the socket.
407 *
408 * Note the 'barrier()' calls: gcc may not move a lock
409 * "downwards" or a unlock "upwards" when optimizing.
410 */
411 extern void __release_sock(struct sock *sk);
412
413 static inline void lock_sock(struct sock *sk)
/* ![[previous]](../icons/n_left.png)
![[next]](../icons/right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
414 {
415 #if 1
416 /* debugging code: the test isn't even 100% correct, but it can catch bugs */
417 /* Note that a double lock is ok in theory - it's just _usually_ a bug */
418 if (sk->users) {
419 __label__ here;
420 printk("double lock on socket at %p\n", &&here);
421 here:
422 }
423 #endif
424 sk->users++;
425 barrier();
426 }
427
428 static inline void release_sock(struct sock *sk)
/* ![[previous]](../icons/left.png)
![[next]](../icons/right.png)
![[first]](../icons/first.png)
![[last]](../icons/last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
429 {
430 barrier();
431 #if 1
432 /* debugging code: remove me when ok */
433 if (sk->users == 0) {
434 __label__ here;
435 sk->users = 1;
436 printk("trying to unlock unlocked socket at %p\n", &&here);
437 here:
438 }
439 #endif
440 if (!--sk->users)
441 __release_sock(sk);
442 }
443
444
445 extern struct sock * sk_alloc(int priority);
446 extern void sk_free(struct sock *sk);
447 extern void destroy_sock(struct sock *sk);
448 extern unsigned short get_new_socknum(struct proto *,
449 unsigned short);
450 extern void put_sock(unsigned short, struct sock *);
451 extern struct sock *get_sock(struct proto *, unsigned short,
452 unsigned long, unsigned short,
453 unsigned long);
454 extern struct sock *get_sock_mcast(struct sock *, unsigned short,
455 unsigned long, unsigned short,
456 unsigned long);
457 extern struct sock *get_sock_raw(struct sock *, unsigned short,
458 unsigned long, unsigned long);
459
460 extern struct sk_buff *sock_wmalloc(struct sock *sk,
461 unsigned long size, int force,
462 int priority);
463 extern struct sk_buff *sock_rmalloc(struct sock *sk,
464 unsigned long size, int force,
465 int priority);
466 extern void sock_wfree(struct sock *sk,
467 struct sk_buff *skb);
468 extern void sock_rfree(struct sock *sk,
469 struct sk_buff *skb);
470 extern unsigned long sock_rspace(struct sock *sk);
471 extern unsigned long sock_wspace(struct sock *sk);
472
473 extern int sock_setsockopt(struct sock *sk, int level,
474 int op, char *optval,
475 int optlen);
476
477 extern int sock_getsockopt(struct sock *sk, int level,
478 int op, char *optval,
479 int *optlen);
480 extern struct sk_buff *sock_alloc_send_skb(struct sock *skb,
481 unsigned long size,
482 unsigned long fallback,
483 int noblock,
484 int *errcode);
485
486 /*
487 * Queue a received datagram if it will fit. Stream and sequenced
488 * protocols can't normally use this as they need to fit buffers in
489 * and play with them.
490 *
491 * Inlined as its very short and called for pretty much every
492 * packet ever received.
493 */
494
495 extern __inline__ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
/* ![[previous]](../icons/left.png)
![[next]](../icons/right.png)
![[first]](../icons/first.png)
![[last]](../icons/last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
496 {
497 if (sk->rmem_alloc + skb->truesize >= sk->rcvbuf)
498 return -ENOMEM;
499 atomic_add(skb->truesize, &sk->rmem_alloc);
500 skb->sk=sk;
501 skb_queue_tail(&sk->receive_queue,skb);
502 if(!sk->dead)
503 sk->data_ready(sk,skb->len);
504 return 0;
505 }
506
507 /*
508 * Recover an error report and clear atomically
509 */
510
511 extern __inline__ int sock_error(struct sock *sk)
/* ![[previous]](../icons/left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
512 {
513 int err=xchg(&sk->err,0);
514 return -err;
515 }
516
517 /*
518 * Declarations from timer.c
519 */
520
521 extern struct sock *timer_base;
522
523 extern void delete_timer (struct sock *);
524 extern void reset_timer (struct sock *, int, unsigned long);
525 extern void net_timer (unsigned long);
526
527
528 /*
529 * Enable debug/info messages
530 */
531
532 #define NETDEBUG(x) x
533
534 #endif /* _SOCK_H */