sock.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:37k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  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.  * David S. Miller : New socket lookup architecture.
  26.  *              Steve Whitehouse:       Default routines for sock_ops
  27.  *
  28.  * This program is free software; you can redistribute it and/or
  29.  * modify it under the terms of the GNU General Public License
  30.  * as published by the Free Software Foundation; either version
  31.  * 2 of the License, or (at your option) any later version.
  32.  */
  33. #ifndef _SOCK_H
  34. #define _SOCK_H
  35. #include <linux/config.h>
  36. #include <linux/timer.h>
  37. #include <linux/cache.h>
  38. #include <linux/in.h> /* struct sockaddr_in */
  39. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  40. #include <linux/in6.h> /* struct sockaddr_in6 */
  41. #include <linux/ipv6.h> /* dest_cache, inet6_options */
  42. #include <linux/icmpv6.h>
  43. #include <net/if_inet6.h> /* struct ipv6_mc_socklist */
  44. #endif
  45. #if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  46. #include <linux/icmp.h>
  47. #endif
  48. #include <linux/tcp.h> /* struct tcphdr */
  49. #include <linux/netdevice.h>
  50. #include <linux/skbuff.h> /* struct sk_buff */
  51. #include <net/protocol.h> /* struct inet_protocol */
  52. #if defined(CONFIG_X25) || defined(CONFIG_X25_MODULE)
  53. #include <net/x25.h>
  54. #endif
  55. #if defined(CONFIG_WAN_ROUTER) || defined(CONFIG_WAN_ROUTER_MODULE)
  56. #include <linux/if_wanpipe.h>
  57. #endif
  58. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  59. #include <net/ax25.h>
  60. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  61. #include <net/netrom.h>
  62. #endif
  63. #if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE)
  64. #include <net/rose.h>
  65. #endif
  66. #endif
  67. #if defined(CONFIG_PPPOE) || defined(CONFIG_PPPOE_MODULE)
  68. #include <linux/if_pppox.h>
  69. #include <linux/ppp_channel.h>   /* struct ppp_channel */
  70. #endif
  71. #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
  72. #if defined(CONFIG_SPX) || defined(CONFIG_SPX_MODULE)
  73. #include <net/spx.h>
  74. #else
  75. #include <net/ipx.h>
  76. #endif /* CONFIG_SPX */
  77. #endif /* CONFIG_IPX */
  78. #if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
  79. #include <linux/atalk.h>
  80. #endif
  81. #if defined(CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)
  82. #include <net/dn.h>
  83. #endif
  84. #if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
  85. #include <net/irda/irda.h>
  86. #endif
  87. #if defined(CONFIG_ATM) || defined(CONFIG_ATM_MODULE)
  88. struct atm_vcc;
  89. #endif
  90. #ifdef CONFIG_FILTER
  91. #include <linux/filter.h>
  92. #endif
  93. #include <asm/atomic.h>
  94. #include <net/dst.h>
  95. /* The AF_UNIX specific socket options */
  96. struct unix_opt {
  97. struct unix_address *addr;
  98. struct dentry * dentry;
  99. struct vfsmount * mnt;
  100. struct semaphore readsem;
  101. struct sock * other;
  102. struct sock ** list;
  103. struct sock * gc_tree;
  104. atomic_t inflight;
  105. rwlock_t lock;
  106. wait_queue_head_t peer_wait;
  107. };
  108. /* Once the IPX ncpd patches are in these are going into protinfo. */
  109. #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
  110. struct ipx_opt {
  111. ipx_address dest_addr;
  112. ipx_interface *intrfc;
  113. unsigned short port;
  114. #ifdef CONFIG_IPX_INTERN
  115. unsigned char           node[IPX_NODE_LEN];
  116. #endif
  117. unsigned short type;
  118. /* 
  119.  * To handle special ncp connection-handling sockets for mars_nwe,
  120.  * the connection number must be stored in the socket.
  121.  */
  122. unsigned short ipx_ncp_conn;
  123. };
  124. #endif
  125. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  126. struct ipv6_pinfo {
  127. struct in6_addr  saddr;
  128. struct in6_addr  rcv_saddr;
  129. struct in6_addr daddr;
  130. struct in6_addr *daddr_cache;
  131. __u32 flow_label;
  132. __u32 frag_size;
  133. int hop_limit;
  134. int mcast_hops;
  135. int mcast_oif;
  136. /* pktoption flags */
  137. union {
  138. struct {
  139. __u8 srcrt:2,
  140.         rxinfo:1,
  141. rxhlim:1,
  142. hopopts:1,
  143. dstopts:1,
  144.                                 authhdr:1,
  145.                                 rxflow:1;
  146. } bits;
  147. __u8 all;
  148. } rxopt;
  149. /* sockopt flags */
  150. __u8 mc_loop:1,
  151.                         recverr:1,
  152.                         sndflow:1,
  153.                         pmtudisc:2;
  154. struct ipv6_mc_socklist *ipv6_mc_list;
  155. struct ipv6_fl_socklist *ipv6_fl_list;
  156. __u32 dst_cookie;
  157. struct ipv6_txoptions *opt;
  158. struct sk_buff *pktoptions;
  159. };
  160. struct raw6_opt {
  161. __u32 checksum; /* perform checksum */
  162. __u32 offset; /* checksum offset  */
  163. struct icmp6_filter filter;
  164. };
  165. #endif /* IPV6 */
  166. #if defined(CONFIG_INET) || defined(CONFIG_INET_MODULE)
  167. struct raw_opt {
  168. struct icmp_filter filter;
  169. };
  170. #endif
  171. #if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  172. struct inet_opt
  173. {
  174. int ttl; /* TTL setting */
  175. int tos; /* TOS */
  176. unsigned     cmsg_flags;
  177. struct ip_options *opt;
  178. unsigned char hdrincl; /* Include headers ? */
  179. __u8 mc_ttl; /* Multicasting TTL */
  180. __u8 mc_loop; /* Loopback */
  181. unsigned recverr : 1,
  182. freebind : 1;
  183. __u16 id; /* ID counter for DF pkts */
  184. __u8 pmtudisc;
  185. int mc_index; /* Multicast device index */
  186. __u32 mc_addr;
  187. struct ip_mc_socklist *mc_list; /* Group array */
  188. };
  189. #endif
  190. #if defined(CONFIG_PPPOE) || defined (CONFIG_PPPOE_MODULE)
  191. struct pppoe_opt
  192. {
  193. struct net_device      *dev;   /* device associated with socket*/
  194. struct pppoe_addr pa;   /* what this socket is bound to*/
  195. struct sockaddr_pppox relay;   /* what socket data will be
  196.      relayed to (PPPoE relaying) */
  197. };
  198. struct pppox_opt
  199. {
  200. struct ppp_channel chan;
  201. struct sock *sk;
  202. struct pppox_opt *next;   /* for hash table */
  203. union {
  204. struct pppoe_opt pppoe;
  205. } proto;
  206. };
  207. #define pppoe_dev proto.pppoe.dev
  208. #define pppoe_pa proto.pppoe.pa
  209. #define pppoe_relay proto.pppoe.relay
  210. #endif
  211. /* This defines a selective acknowledgement block. */
  212. struct tcp_sack_block {
  213. __u32 start_seq;
  214. __u32 end_seq;
  215. };
  216. struct tcp_opt {
  217. int tcp_header_len; /* Bytes of tcp header to send */
  218. /*
  219.  * Header prediction flags
  220.  * 0x5?10 << 16 + snd_wnd in net byte order
  221.  */
  222. __u32 pred_flags;
  223. /*
  224.  * RFC793 variables by their proper names. This means you can
  225.  * read the code and the spec side by side (and laugh ...)
  226.  * See RFC793 and RFC1122. The RFC writes these in capitals.
  227.  */
  228.   __u32 rcv_nxt; /* What we want to receive next  */
  229.   __u32 snd_nxt; /* Next sequence we send */
  230.   __u32 snd_una; /* First byte we want an ack for */
  231.   __u32 snd_sml; /* Last byte of the most recently transmitted small packet */
  232. __u32 rcv_tstamp; /* timestamp of last received ACK (for keepalives) */
  233. __u32 lsndtime; /* timestamp of last sent data packet (for restart window) */
  234. /* Delayed ACK control data */
  235. struct {
  236. __u8 pending; /* ACK is pending */
  237. __u8 quick; /* Scheduled number of quick acks */
  238. __u8 pingpong; /* The session is interactive */
  239. __u8 blocked; /* Delayed ACK was blocked by socket lock*/
  240. __u32 ato; /* Predicted tick of soft clock */
  241. unsigned long timeout; /* Currently scheduled timeout */
  242. __u32 lrcvtime; /* timestamp of last received data packet*/
  243. __u16 last_seg_size; /* Size of last incoming segment */
  244. __u16 rcv_mss; /* MSS used for delayed ACK decisions */ 
  245. } ack;
  246. /* Data for direct copy to user */
  247. struct {
  248. struct sk_buff_head prequeue;
  249. int memory;
  250. struct task_struct *task;
  251. struct iovec *iov;
  252. int len;
  253. } ucopy;
  254. __u32 snd_wl1; /* Sequence for window update */
  255. __u32 snd_wnd; /* The window we expect to receive */
  256. __u32 max_window; /* Maximal window ever seen from peer */
  257. __u32 pmtu_cookie; /* Last pmtu seen by socket */
  258. __u16 mss_cache; /* Cached effective mss, not including SACKS */
  259. __u16 mss_clamp; /* Maximal mss, negotiated at connection setup */
  260. __u16 ext_header_len; /* Network protocol overhead (IP/IPv6 options) */
  261. __u8 ca_state; /* State of fast-retransmit machine  */
  262. __u8 retransmits; /* Number of unrecovered RTO timeouts. */
  263. __u8 reordering; /* Packet reordering metric. */
  264. __u8 queue_shrunk; /* Write queue has been shrunk recently.*/
  265. __u8 defer_accept; /* User waits for some data after accept() */
  266. /* RTT measurement */
  267. __u8 backoff; /* backoff */
  268. __u32 srtt; /* smothed round trip time << 3 */
  269. __u32 mdev; /* medium deviation */
  270. __u32 mdev_max; /* maximal mdev for the last rtt period */
  271. __u32 rttvar; /* smoothed mdev_max */
  272. __u32 rtt_seq; /* sequence number to update rttvar */
  273. __u32 rto; /* retransmit timeout */
  274. __u32 packets_out; /* Packets which are "in flight" */
  275. __u32 left_out; /* Packets which leaved network */
  276. __u32 retrans_out; /* Retransmitted packets out */
  277. /*
  278.  * Slow start and congestion control (see also Nagle, and Karn & Partridge)
  279.  */
  280.   __u32 snd_ssthresh; /* Slow start size threshold */
  281.   __u32 snd_cwnd; /* Sending congestion window */
  282.   __u16 snd_cwnd_cnt; /* Linear increase counter */
  283. __u16 snd_cwnd_clamp; /* Do not allow snd_cwnd to grow above this */
  284. __u32 snd_cwnd_used;
  285. __u32 snd_cwnd_stamp;
  286. /* Two commonly used timers in both sender and receiver paths. */
  287. unsigned long timeout;
  288.   struct timer_list retransmit_timer; /* Resend (no ack) */
  289.   struct timer_list delack_timer; /* Ack delay  */
  290. struct sk_buff_head out_of_order_queue; /* Out of order segments go here */
  291. struct tcp_func *af_specific; /* Operations which are AF_INET{4,6} specific */
  292. struct sk_buff *send_head; /* Front of stuff to transmit */
  293. struct page *sndmsg_page; /* Cached page for sendmsg */
  294. u32 sndmsg_off; /* Cached offset for sendmsg */
  295.   __u32 rcv_wnd; /* Current receiver window */
  296. __u32 rcv_wup; /* rcv_nxt on last window update sent */
  297. __u32 write_seq; /* Tail(+1) of data held in tcp send buffer */
  298. __u32 pushed_seq; /* Last pushed seq, required to talk to windows */
  299. __u32 copied_seq; /* Head of yet unread data */
  300. /*
  301.  *      Options received (usually on last packet, some only on SYN packets).
  302.  */
  303. char tstamp_ok, /* TIMESTAMP seen on SYN packet */
  304. wscale_ok, /* Wscale seen on SYN packet */
  305. sack_ok; /* SACK seen on SYN packet */
  306. char saw_tstamp; /* Saw TIMESTAMP on last packet */
  307.         __u8 snd_wscale; /* Window scaling received from sender */
  308.         __u8 rcv_wscale; /* Window scaling to send to receiver */
  309. __u8 nonagle; /* Disable Nagle algorithm?             */
  310. __u8 keepalive_probes; /* num of allowed keep alive probes */
  311. /* PAWS/RTTM data */
  312.         __u32 rcv_tsval; /* Time stamp value              */
  313.         __u32 rcv_tsecr; /* Time stamp echo reply         */
  314.         __u32 ts_recent; /* Time stamp to echo next */
  315.         long ts_recent_stamp;/* Time we stored ts_recent (for aging) */
  316. /* SACKs data */
  317. __u16 user_mss;   /* mss requested by user in ioctl */
  318. __u8 dsack; /* D-SACK is scheduled */
  319. __u8 eff_sacks; /* Size of SACK array to send with next packet */
  320. struct tcp_sack_block duplicate_sack[1]; /* D-SACK block */
  321. struct tcp_sack_block selective_acks[4]; /* The SACKS themselves*/
  322. __u32 window_clamp; /* Maximal window to advertise */
  323. __u32 rcv_ssthresh; /* Current window clamp */
  324. __u8 probes_out; /* unanswered 0 window probes */
  325. __u8 num_sacks; /* Number of SACK blocks */
  326. __u16 advmss; /* Advertised MSS */
  327. __u8 syn_retries; /* num of allowed syn retries */
  328. __u8 ecn_flags; /* ECN status bits. */
  329. __u16 prior_ssthresh; /* ssthresh saved at recovery start */
  330. __u32 lost_out; /* Lost packets */
  331. __u32 sacked_out; /* SACK'd packets */
  332. __u32 fackets_out; /* FACK'd packets */
  333. __u32 high_seq; /* snd_nxt at onset of congestion */
  334. __u32 retrans_stamp; /* Timestamp of the last retransmit,
  335.  * also used in SYN-SENT to remember stamp of
  336.  * the first SYN. */
  337. __u32 undo_marker; /* tracking retrans started here. */
  338. int undo_retrans; /* number of undoable retransmissions. */
  339. __u32 urg_seq; /* Seq of received urgent pointer */
  340. __u16 urg_data; /* Saved octet of OOB data and control flags */
  341. __u8 pending; /* Scheduled timer event */
  342. __u8 urg_mode; /* In urgent mode */
  343. __u32 snd_up; /* Urgent pointer */
  344. /* The syn_wait_lock is necessary only to avoid tcp_get_info having
  345.  * to grab the main lock sock while browsing the listening hash
  346.  * (otherwise it's deadlock prone).
  347.  * This lock is acquired in read mode only from tcp_get_info() and
  348.  * it's acquired in write mode _only_ from code that is actively
  349.  * changing the syn_wait_queue. All readers that are holding
  350.  * the master sock lock don't need to grab this lock in read mode
  351.  * too as the syn_wait_queue writes are always protected from
  352.  * the main sock lock.
  353.  */
  354. rwlock_t syn_wait_lock;
  355. struct tcp_listen_opt *listen_opt;
  356. /* FIFO of established children */
  357. struct open_request *accept_queue;
  358. struct open_request *accept_queue_tail;
  359. int write_pending; /* A write to socket waits to start. */
  360. unsigned int keepalive_time;   /* time before keep alive takes place */
  361. unsigned int keepalive_intvl;  /* time interval between keep alive probes */
  362. int linger2;
  363. unsigned long last_synq_overflow; 
  364. };
  365.  
  366. /*
  367.  * This structure really needs to be cleaned up.
  368.  * Most of it is for TCP, and not used by any of
  369.  * the other protocols.
  370.  */
  371. /*
  372.  * The idea is to start moving to a newer struct gradualy
  373.  * 
  374.  * IMHO the newer struct should have the following format:
  375.  * 
  376.  * struct sock {
  377.  * sockmem [mem, proto, callbacks]
  378.  *
  379.  * union or struct {
  380.  * ax25;
  381.  * } ll_pinfo;
  382.  *
  383.  * union {
  384.  * ipv4;
  385.  * ipv6;
  386.  * ipx;
  387.  * netrom;
  388.  * rose;
  389.  *  x25;
  390.  * } net_pinfo;
  391.  *
  392.  * union {
  393.  * tcp;
  394.  * udp;
  395.  * spx;
  396.  * netrom;
  397.  * } tp_pinfo;
  398.  *
  399.  * }
  400.  *
  401.  * The idea failed because IPv6 transition asssumes dual IP/IPv6 sockets.
  402.  * So, net_pinfo is IPv6 are really, and protinfo unifies all another
  403.  * private areas.
  404.  */
  405. /* Define this to get the sk->debug debugging facility. */
  406. #define SOCK_DEBUGGING
  407. #ifdef SOCK_DEBUGGING
  408. #define SOCK_DEBUG(sk, msg...) do { if((sk) && ((sk)->debug)) printk(KERN_DEBUG msg); } while (0)
  409. #else
  410. #define SOCK_DEBUG(sk, msg...) do { } while (0)
  411. #endif
  412. /* This is the per-socket lock.  The spinlock provides a synchronization
  413.  * between user contexts and software interrupt processing, whereas the
  414.  * mini-semaphore synchronizes multiple users amongst themselves.
  415.  */
  416. typedef struct {
  417. spinlock_t slock;
  418. unsigned int users;
  419. wait_queue_head_t wq;
  420. } socket_lock_t;
  421. #define sock_lock_init(__sk) 
  422. do { spin_lock_init(&((__sk)->lock.slock)); 
  423. (__sk)->lock.users = 0; 
  424. init_waitqueue_head(&((__sk)->lock.wq)); 
  425. } while(0);
  426. struct sock {
  427. /* Socket demultiplex comparisons on incoming packets. */
  428. __u32 daddr; /* Foreign IPv4 addr */
  429. __u32 rcv_saddr; /* Bound local IPv4 addr */
  430. __u16 dport; /* Destination port */
  431. unsigned short num; /* Local port */
  432. int bound_dev_if; /* Bound device index if != 0 */
  433. /* Main hash linkage for various protocol lookup tables. */
  434. struct sock *next;
  435. struct sock **pprev;
  436. struct sock *bind_next;
  437. struct sock **bind_pprev;
  438. volatile unsigned char state, /* Connection state */
  439. zapped; /* In ax25 & ipx means not linked */
  440. __u16 sport; /* Source port */
  441. unsigned short family; /* Address family */
  442. unsigned char reuse; /* SO_REUSEADDR setting */
  443. unsigned char shutdown;
  444. atomic_t refcnt; /* Reference count */
  445. socket_lock_t lock; /* Synchronizer... */
  446. int rcvbuf; /* Size of receive buffer in bytes */
  447. wait_queue_head_t *sleep; /* Sock wait queue */
  448. struct dst_entry *dst_cache; /* Destination cache */
  449. rwlock_t dst_lock;
  450. atomic_t rmem_alloc; /* Receive queue bytes committed */
  451. struct sk_buff_head receive_queue; /* Incoming packets */
  452. atomic_t wmem_alloc; /* Transmit queue bytes committed */
  453. struct sk_buff_head write_queue; /* Packet sending queue */
  454. atomic_t omem_alloc; /* "o" is "option" or "other" */
  455. int wmem_queued; /* Persistent queue size */
  456. int forward_alloc; /* Space allocated forward. */
  457. __u32 saddr; /* Sending source */
  458. unsigned int allocation; /* Allocation mode */
  459. int sndbuf; /* Size of send buffer in bytes */
  460. struct sock *prev;
  461. /* Not all are volatile, but some are, so we might as well say they all are.
  462.  * XXX Make this a flag word -DaveM
  463.  */
  464. volatile char dead,
  465. done,
  466. urginline,
  467. keepopen,
  468. linger,
  469. destroy,
  470. no_check,
  471. broadcast,
  472. bsdism;
  473. unsigned char debug;
  474. unsigned char rcvtstamp;
  475. unsigned char use_write_queue;
  476. unsigned char userlocks;
  477. /* Hole of 3 bytes. Try to pack. */
  478. int route_caps;
  479. int proc;
  480. unsigned long         lingertime;
  481. int hashent;
  482. struct sock *pair;
  483. /* The backlog queue is special, it is always used with
  484.  * the per-socket spinlock held and requires low latency
  485.  * access.  Therefore we special case it's implementation.
  486.  */
  487. struct {
  488. struct sk_buff *head;
  489. struct sk_buff *tail;
  490. } backlog;
  491. rwlock_t callback_lock;
  492. /* Error queue, rarely used. */
  493. struct sk_buff_head error_queue;
  494. struct proto *prot;
  495. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  496. union {
  497. struct ipv6_pinfo af_inet6;
  498. } net_pinfo;
  499. #endif
  500. union {
  501. struct tcp_opt af_tcp;
  502. #if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  503. struct raw_opt tp_raw4;
  504. #endif
  505. #if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
  506. struct raw6_opt tp_raw;
  507. #endif /* CONFIG_IPV6 */
  508. #if defined(CONFIG_SPX) || defined (CONFIG_SPX_MODULE)
  509. struct spx_opt af_spx;
  510. #endif /* CONFIG_SPX */
  511. } tp_pinfo;
  512. int err, err_soft; /* Soft holds errors that don't
  513.    cause failure but are the cause
  514.    of a persistent failure not just
  515.    'timed out' */
  516. unsigned short ack_backlog;
  517. unsigned short max_ack_backlog;
  518. __u32 priority;
  519. unsigned short type;
  520. unsigned char localroute; /* Route locally only */
  521. unsigned char protocol;
  522. struct ucred peercred;
  523. int rcvlowat;
  524. long rcvtimeo;
  525. long sndtimeo;
  526. #ifdef CONFIG_FILTER
  527. /* Socket Filtering Instructions */
  528. struct sk_filter       *filter;
  529. #endif /* CONFIG_FILTER */
  530. /* This is where all the private (optional) areas that don't
  531.  * overlap will eventually live. 
  532.  */
  533. union {
  534. void *destruct_hook;
  535.    struct unix_opt af_unix;
  536. #if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
  537. struct inet_opt af_inet;
  538. #endif
  539. #if defined(CONFIG_ATALK) || defined(CONFIG_ATALK_MODULE)
  540. struct atalk_sock af_at;
  541. #endif
  542. #if defined(CONFIG_IPX) || defined(CONFIG_IPX_MODULE)
  543. struct ipx_opt af_ipx;
  544. #endif
  545. #if defined (CONFIG_DECNET) || defined(CONFIG_DECNET_MODULE)
  546. struct dn_scp           dn;
  547. #endif
  548. #if defined (CONFIG_PACKET) || defined(CONFIG_PACKET_MODULE)
  549. struct packet_opt *af_packet;
  550. #endif
  551. #if defined(CONFIG_X25) || defined(CONFIG_X25_MODULE)
  552. x25_cb *x25;
  553. #endif
  554. #if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
  555. ax25_cb *ax25;
  556. #endif
  557. #if defined(CONFIG_NETROM) || defined(CONFIG_NETROM_MODULE)
  558. nr_cb *nr;
  559. #endif
  560. #if defined(CONFIG_ROSE) || defined(CONFIG_ROSE_MODULE)
  561. rose_cb *rose;
  562. #endif
  563. #if defined(CONFIG_PPPOE) || defined(CONFIG_PPPOE_MODULE)
  564. struct pppox_opt *pppox;
  565. #endif
  566. struct netlink_opt *af_netlink;
  567. #if defined(CONFIG_ECONET) || defined(CONFIG_ECONET_MODULE)
  568. struct econet_opt *af_econet;
  569. #endif
  570. #if defined(CONFIG_ATM) || defined(CONFIG_ATM_MODULE)
  571. struct atm_vcc *af_atm;
  572. #endif
  573. #if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
  574. struct irda_sock        *irda;
  575. #endif
  576. #if defined(CONFIG_WAN_ROUTER) || defined(CONFIG_WAN_ROUTER_MODULE)
  577.                struct wanpipe_opt      *af_wanpipe;
  578. #endif
  579. } protinfo;  
  580. /* This part is used for the timeout functions. */
  581. struct timer_list timer; /* This is the sock cleanup timer. */
  582. struct timeval stamp;
  583. /* Identd and reporting IO signals */
  584. struct socket *socket;
  585. /* RPC layer private data */
  586. void *user_data;
  587.   
  588. /* Callbacks */
  589. void (*state_change)(struct sock *sk);
  590. void (*data_ready)(struct sock *sk,int bytes);
  591. void (*write_space)(struct sock *sk);
  592. void (*error_report)(struct sock *sk);
  593.    int (*backlog_rcv) (struct sock *sk,
  594. struct sk_buff *skb);  
  595. void                    (*destruct)(struct sock *sk);
  596. };
  597. /* The per-socket spinlock must be held here. */
  598. #define sk_add_backlog(__sk, __skb)
  599. do { if((__sk)->backlog.tail == NULL) {
  600. (__sk)->backlog.head =
  601.      (__sk)->backlog.tail = (__skb);
  602. } else {
  603. ((__sk)->backlog.tail)->next = (__skb);
  604. (__sk)->backlog.tail = (__skb);
  605. }
  606. (__skb)->next = NULL;
  607. } while(0)
  608. /* IP protocol blocks we attach to sockets.
  609.  * socket layer -> transport layer interface
  610.  * transport -> network interface is defined by struct inet_proto
  611.  */
  612. struct proto {
  613. void (*close)(struct sock *sk, 
  614. long timeout);
  615. int (*connect)(struct sock *sk,
  616.         struct sockaddr *uaddr, 
  617. int addr_len);
  618. int (*disconnect)(struct sock *sk, int flags);
  619. struct sock * (*accept) (struct sock *sk, int flags, int *err);
  620. int (*ioctl)(struct sock *sk, int cmd,
  621.  unsigned long arg);
  622. int (*init)(struct sock *sk);
  623. int (*destroy)(struct sock *sk);
  624. void (*shutdown)(struct sock *sk, int how);
  625. int (*setsockopt)(struct sock *sk, int level, 
  626. int optname, char *optval, int optlen);
  627. int (*getsockopt)(struct sock *sk, int level, 
  628. int optname, char *optval, 
  629. int *option);    
  630. int (*sendmsg)(struct sock *sk, struct msghdr *msg,
  631.    int len);
  632. int (*recvmsg)(struct sock *sk, struct msghdr *msg,
  633. int len, int noblock, int flags, 
  634. int *addr_len);
  635. int (*bind)(struct sock *sk, 
  636. struct sockaddr *uaddr, int addr_len);
  637. int (*backlog_rcv) (struct sock *sk, 
  638. struct sk_buff *skb);
  639. /* Keeping track of sk's, looking them up, and port selection methods. */
  640. void (*hash)(struct sock *sk);
  641. void (*unhash)(struct sock *sk);
  642. int (*get_port)(struct sock *sk, unsigned short snum);
  643. char name[32];
  644. struct {
  645. int inuse;
  646. u8  __pad[SMP_CACHE_BYTES - sizeof(int)];
  647. } stats[NR_CPUS];
  648. };
  649. /* Called with local bh disabled */
  650. static __inline__ void sock_prot_inc_use(struct proto *prot)
  651. {
  652. prot->stats[smp_processor_id()].inuse++;
  653. }
  654. static __inline__ void sock_prot_dec_use(struct proto *prot)
  655. {
  656. prot->stats[smp_processor_id()].inuse--;
  657. }
  658. /* About 10 seconds */
  659. #define SOCK_DESTROY_TIME (10*HZ)
  660. /* Sockets 0-1023 can't be bound to unless you are superuser */
  661. #define PROT_SOCK 1024
  662. #define SHUTDOWN_MASK 3
  663. #define RCV_SHUTDOWN 1
  664. #define SEND_SHUTDOWN 2
  665. #define SOCK_SNDBUF_LOCK 1
  666. #define SOCK_RCVBUF_LOCK 2
  667. #define SOCK_BINDADDR_LOCK 4
  668. #define SOCK_BINDPORT_LOCK 8
  669. /* Used by processes to "lock" a socket state, so that
  670.  * interrupts and bottom half handlers won't change it
  671.  * from under us. It essentially blocks any incoming
  672.  * packets, so that we won't get any new data or any
  673.  * packets that change the state of the socket.
  674.  *
  675.  * While locked, BH processing will add new packets to
  676.  * the backlog queue.  This queue is processed by the
  677.  * owner of the socket lock right before it is released.
  678.  *
  679.  * Since ~2.3.5 it is also exclusive sleep lock serializing
  680.  * accesses from user process context.
  681.  */
  682. extern void __lock_sock(struct sock *sk);
  683. extern void __release_sock(struct sock *sk);
  684. #define lock_sock(__sk) 
  685. do { spin_lock_bh(&((__sk)->lock.slock)); 
  686. if ((__sk)->lock.users != 0) 
  687. __lock_sock(__sk); 
  688. (__sk)->lock.users = 1; 
  689. spin_unlock_bh(&((__sk)->lock.slock)); 
  690. } while(0)
  691. #define release_sock(__sk) 
  692. do { spin_lock_bh(&((__sk)->lock.slock)); 
  693. if ((__sk)->backlog.tail != NULL) 
  694. __release_sock(__sk); 
  695. (__sk)->lock.users = 0; 
  696.         if (waitqueue_active(&((__sk)->lock.wq))) wake_up(&((__sk)->lock.wq)); 
  697. spin_unlock_bh(&((__sk)->lock.slock)); 
  698. } while(0)
  699. /* BH context may only use the following locking interface. */
  700. #define bh_lock_sock(__sk) spin_lock(&((__sk)->lock.slock))
  701. #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->lock.slock))
  702. extern struct sock * sk_alloc(int family, int priority, int zero_it);
  703. extern void sk_free(struct sock *sk);
  704. extern struct sk_buff *sock_wmalloc(struct sock *sk,
  705.       unsigned long size, int force,
  706.       int priority);
  707. extern struct sk_buff *sock_rmalloc(struct sock *sk,
  708.       unsigned long size, int force,
  709.       int priority);
  710. extern void sock_wfree(struct sk_buff *skb);
  711. extern void sock_rfree(struct sk_buff *skb);
  712. extern int sock_setsockopt(struct socket *sock, int level,
  713. int op, char *optval,
  714. int optlen);
  715. extern int sock_getsockopt(struct socket *sock, int level,
  716. int op, char *optval, 
  717. int *optlen);
  718. extern struct sk_buff  *sock_alloc_send_skb(struct sock *sk,
  719.      unsigned long size,
  720.      int noblock,
  721.      int *errcode);
  722. extern struct sk_buff  *sock_alloc_send_pskb(struct sock *sk,
  723.       unsigned long header_len,
  724.       unsigned long data_len,
  725.       int noblock,
  726.       int *errcode);
  727. extern void *sock_kmalloc(struct sock *sk, int size, int priority);
  728. extern void sock_kfree_s(struct sock *sk, void *mem, int size);
  729. /*
  730.  * Functions to fill in entries in struct proto_ops when a protocol
  731.  * does not implement a particular function.
  732.  */
  733. extern int                      sock_no_release(struct socket *);
  734. extern int                      sock_no_bind(struct socket *, 
  735.      struct sockaddr *, int);
  736. extern int                      sock_no_connect(struct socket *,
  737. struct sockaddr *, int, int);
  738. extern int                      sock_no_socketpair(struct socket *,
  739.    struct socket *);
  740. extern int                      sock_no_accept(struct socket *,
  741.        struct socket *, int);
  742. extern int                      sock_no_getname(struct socket *,
  743. struct sockaddr *, int *, int);
  744. extern unsigned int             sock_no_poll(struct file *, struct socket *,
  745.      struct poll_table_struct *);
  746. extern int                      sock_no_ioctl(struct socket *, unsigned int,
  747.       unsigned long);
  748. extern int sock_no_listen(struct socket *, int);
  749. extern int                      sock_no_shutdown(struct socket *, int);
  750. extern int sock_no_getsockopt(struct socket *, int , int,
  751.    char *, int *);
  752. extern int sock_no_setsockopt(struct socket *, int, int,
  753.    char *, int);
  754. extern int  sock_no_fcntl(struct socket *, 
  755.       unsigned int, unsigned long);
  756. extern int                      sock_no_sendmsg(struct socket *,
  757. struct msghdr *, int,
  758. struct scm_cookie *);
  759. extern int                      sock_no_recvmsg(struct socket *,
  760. struct msghdr *, int, int,
  761. struct scm_cookie *);
  762. extern int sock_no_mmap(struct file *file,
  763.      struct socket *sock,
  764.      struct vm_area_struct *vma);
  765. extern ssize_t sock_no_sendpage(struct socket *sock,
  766. struct page *page,
  767. int offset, size_t size, 
  768. int flags);
  769. /*
  770.  * Default socket callbacks and setup code
  771.  */
  772.  
  773. extern void sock_def_destruct(struct sock *);
  774. /* Initialise core socket variables */
  775. extern void sock_init_data(struct socket *sock, struct sock *sk);
  776. extern void sklist_remove_socket(struct sock **list, struct sock *sk);
  777. extern void sklist_insert_socket(struct sock **list, struct sock *sk);
  778. extern void sklist_destroy_socket(struct sock **list, struct sock *sk);
  779. #ifdef CONFIG_FILTER
  780. /**
  781.  * sk_filter - run a packet through a socket filter
  782.  * @skb: buffer to filter
  783.  * @filter: filter to apply
  784.  *
  785.  * Run the filter code and then cut skb->data to correct size returned by
  786.  * sk_run_filter. If pkt_len is 0 we toss packet. If skb->len is smaller
  787.  * than pkt_len we keep whole skb->data. This is the socket level
  788.  * wrapper to sk_run_filter. It returns 0 if the packet should
  789.  * be accepted or 1 if the packet should be tossed.
  790.  */
  791.  
  792. static inline int sk_filter(struct sk_buff *skb, struct sk_filter *filter)
  793. {
  794. int pkt_len;
  795.         pkt_len = sk_run_filter(skb, filter->insns, filter->len);
  796.         if(!pkt_len)
  797.                 return 1; /* Toss Packet */
  798.         else
  799.                 skb_trim(skb, pkt_len);
  800. return 0;
  801. }
  802. /**
  803.  * sk_filter_release: Release a socket filter
  804.  * @sk: socket
  805.  * @fp: filter to remove
  806.  *
  807.  * Remove a filter from a socket and release its resources.
  808.  */
  809.  
  810. static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
  811. {
  812. unsigned int size = sk_filter_len(fp);
  813. atomic_sub(size, &sk->omem_alloc);
  814. if (atomic_dec_and_test(&fp->refcnt))
  815. kfree(fp);
  816. }
  817. static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
  818. {
  819. atomic_inc(&fp->refcnt);
  820. atomic_add(sk_filter_len(fp), &sk->omem_alloc);
  821. }
  822. #endif /* CONFIG_FILTER */
  823. /*
  824.  * Socket reference counting postulates.
  825.  *
  826.  * * Each user of socket SHOULD hold a reference count.
  827.  * * Each access point to socket (an hash table bucket, reference from a list,
  828.  *   running timer, skb in flight MUST hold a reference count.
  829.  * * When reference count hits 0, it means it will never increase back.
  830.  * * When reference count hits 0, it means that no references from
  831.  *   outside exist to this socket and current process on current CPU
  832.  *   is last user and may/should destroy this socket.
  833.  * * sk_free is called from any context: process, BH, IRQ. When
  834.  *   it is called, socket has no references from outside -> sk_free
  835.  *   may release descendant resources allocated by the socket, but
  836.  *   to the time when it is called, socket is NOT referenced by any
  837.  *   hash tables, lists etc.
  838.  * * Packets, delivered from outside (from network or from another process)
  839.  *   and enqueued on receive/error queues SHOULD NOT grab reference count,
  840.  *   when they sit in queue. Otherwise, packets will leak to hole, when
  841.  *   socket is looked up by one cpu and unhasing is made by another CPU.
  842.  *   It is true for udp/raw, netlink (leak to receive and error queues), tcp
  843.  *   (leak to backlog). Packet socket does all the processing inside
  844.  *   BR_NETPROTO_LOCK, so that it has not this race condition. UNIX sockets
  845.  *   use separate SMP lock, so that they are prone too.
  846.  */
  847. /* Grab socket reference count. This operation is valid only
  848.    when sk is ALREADY grabbed f.e. it is found in hash table
  849.    or a list and the lookup is made under lock preventing hash table
  850.    modifications.
  851.  */
  852. static inline void sock_hold(struct sock *sk)
  853. {
  854. atomic_inc(&sk->refcnt);
  855. }
  856. /* Ungrab socket in the context, which assumes that socket refcnt
  857.    cannot hit zero, f.e. it is true in context of any socketcall.
  858.  */
  859. static inline void __sock_put(struct sock *sk)
  860. {
  861. atomic_dec(&sk->refcnt);
  862. }
  863. /* Ungrab socket and destroy it, if it was the last reference. */
  864. static inline void sock_put(struct sock *sk)
  865. {
  866. if (atomic_dec_and_test(&sk->refcnt))
  867. sk_free(sk);
  868. }
  869. /* Detach socket from process context.
  870.  * Announce socket dead, detach it from wait queue and inode.
  871.  * Note that parent inode held reference count on this struct sock,
  872.  * we do not release it in this function, because protocol
  873.  * probably wants some additional cleanups or even continuing
  874.  * to work with this socket (TCP).
  875.  */
  876. static inline void sock_orphan(struct sock *sk)
  877. {
  878. write_lock_bh(&sk->callback_lock);
  879. sk->dead = 1;
  880. sk->socket = NULL;
  881. sk->sleep = NULL;
  882. write_unlock_bh(&sk->callback_lock);
  883. }
  884. static inline void sock_graft(struct sock *sk, struct socket *parent)
  885. {
  886. write_lock_bh(&sk->callback_lock);
  887. sk->sleep = &parent->wait;
  888. parent->sk = sk;
  889. sk->socket = parent;
  890. write_unlock_bh(&sk->callback_lock);
  891. }
  892. static inline int sock_i_uid(struct sock *sk)
  893. {
  894. int uid;
  895. read_lock(&sk->callback_lock);
  896. uid = sk->socket ? sk->socket->inode->i_uid : 0;
  897. read_unlock(&sk->callback_lock);
  898. return uid;
  899. }
  900. static inline unsigned long sock_i_ino(struct sock *sk)
  901. {
  902. unsigned long ino;
  903. read_lock(&sk->callback_lock);
  904. ino = sk->socket ? sk->socket->inode->i_ino : 0;
  905. read_unlock(&sk->callback_lock);
  906. return ino;
  907. }
  908. static inline struct dst_entry *
  909. __sk_dst_get(struct sock *sk)
  910. {
  911. return sk->dst_cache;
  912. }
  913. static inline struct dst_entry *
  914. sk_dst_get(struct sock *sk)
  915. {
  916. struct dst_entry *dst;
  917. read_lock(&sk->dst_lock);
  918. dst = sk->dst_cache;
  919. if (dst)
  920. dst_hold(dst);
  921. read_unlock(&sk->dst_lock);
  922. return dst;
  923. }
  924. static inline void
  925. __sk_dst_set(struct sock *sk, struct dst_entry *dst)
  926. {
  927. struct dst_entry *old_dst;
  928. old_dst = sk->dst_cache;
  929. sk->dst_cache = dst;
  930. dst_release(old_dst);
  931. }
  932. static inline void
  933. sk_dst_set(struct sock *sk, struct dst_entry *dst)
  934. {
  935. write_lock(&sk->dst_lock);
  936. __sk_dst_set(sk, dst);
  937. write_unlock(&sk->dst_lock);
  938. }
  939. static inline void
  940. __sk_dst_reset(struct sock *sk)
  941. {
  942. struct dst_entry *old_dst;
  943. old_dst = sk->dst_cache;
  944. sk->dst_cache = NULL;
  945. dst_release(old_dst);
  946. }
  947. static inline void
  948. sk_dst_reset(struct sock *sk)
  949. {
  950. write_lock(&sk->dst_lock);
  951. __sk_dst_reset(sk);
  952. write_unlock(&sk->dst_lock);
  953. }
  954. static inline struct dst_entry *
  955. __sk_dst_check(struct sock *sk, u32 cookie)
  956. {
  957. struct dst_entry *dst = sk->dst_cache;
  958. if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
  959. sk->dst_cache = NULL;
  960. return NULL;
  961. }
  962. return dst;
  963. }
  964. static inline struct dst_entry *
  965. sk_dst_check(struct sock *sk, u32 cookie)
  966. {
  967. struct dst_entry *dst = sk_dst_get(sk);
  968. if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
  969. sk_dst_reset(sk);
  970. return NULL;
  971. }
  972. return dst;
  973. }
  974. /*
  975.  *  Queue a received datagram if it will fit. Stream and sequenced
  976.  * protocols can't normally use this as they need to fit buffers in
  977.  * and play with them.
  978.  *
  979.  *  Inlined as it's very short and called for pretty much every
  980.  * packet ever received.
  981.  */
  982. static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
  983. {
  984. sock_hold(sk);
  985. skb->sk = sk;
  986. skb->destructor = sock_wfree;
  987. atomic_add(skb->truesize, &sk->wmem_alloc);
  988. }
  989. static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
  990. {
  991. skb->sk = sk;
  992. skb->destructor = sock_rfree;
  993. atomic_add(skb->truesize, &sk->rmem_alloc);
  994. }
  995. static inline int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
  996. {
  997. /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
  998.    number of warnings when compiling with -W --ANK
  999.  */
  1000. if (atomic_read(&sk->rmem_alloc) + skb->truesize >= (unsigned)sk->rcvbuf)
  1001.                 return -ENOMEM;
  1002. #ifdef CONFIG_FILTER
  1003. if (sk->filter) {
  1004. int err = 0;
  1005. struct sk_filter *filter;
  1006. /* It would be deadlock, if sock_queue_rcv_skb is used
  1007.    with socket lock! We assume that users of this
  1008.    function are lock free.
  1009.  */
  1010. bh_lock_sock(sk);
  1011. if ((filter = sk->filter) != NULL && sk_filter(skb, filter))
  1012. err = -EPERM;
  1013. bh_unlock_sock(sk);
  1014. if (err)
  1015. return err; /* Toss packet */
  1016. }
  1017. #endif /* CONFIG_FILTER */
  1018. skb->dev = NULL;
  1019. skb_set_owner_r(skb, sk);
  1020. skb_queue_tail(&sk->receive_queue, skb);
  1021. if (!sk->dead)
  1022. sk->data_ready(sk,skb->len);
  1023. return 0;
  1024. }
  1025. static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
  1026. {
  1027. /* Cast skb->rcvbuf to unsigned... It's pointless, but reduces
  1028.    number of warnings when compiling with -W --ANK
  1029.  */
  1030. if (atomic_read(&sk->rmem_alloc) + skb->truesize >= (unsigned)sk->rcvbuf)
  1031. return -ENOMEM;
  1032. skb_set_owner_r(skb, sk);
  1033. skb_queue_tail(&sk->error_queue,skb);
  1034. if (!sk->dead)
  1035. sk->data_ready(sk,skb->len);
  1036. return 0;
  1037. }
  1038. /*
  1039.  * Recover an error report and clear atomically
  1040.  */
  1041.  
  1042. static inline int sock_error(struct sock *sk)
  1043. {
  1044. int err=xchg(&sk->err,0);
  1045. return -err;
  1046. }
  1047. static inline unsigned long sock_wspace(struct sock *sk)
  1048. {
  1049. int amt = 0;
  1050. if (!(sk->shutdown & SEND_SHUTDOWN)) {
  1051. amt = sk->sndbuf - atomic_read(&sk->wmem_alloc);
  1052. if (amt < 0) 
  1053. amt = 0;
  1054. }
  1055. return amt;
  1056. }
  1057. static inline void sk_wake_async(struct sock *sk, int how, int band)
  1058. {
  1059. if (sk->socket && sk->socket->fasync_list)
  1060. sock_wake_async(sk->socket, how, band);
  1061. }
  1062. #define SOCK_MIN_SNDBUF 2048
  1063. #define SOCK_MIN_RCVBUF 256
  1064. /* Must be less or equal SOCK_MIN_SNDBUF */
  1065. #define SOCK_MIN_WRITE_SPACE SOCK_MIN_SNDBUF
  1066. /*
  1067.  * Default write policy as shown to user space via poll/select/SIGIO
  1068.  * Kernel internally doesn't use the MIN_WRITE_SPACE threshold.
  1069.  */
  1070. static inline int sock_writeable(struct sock *sk) 
  1071. {
  1072. return sock_wspace(sk) >= SOCK_MIN_WRITE_SPACE;
  1073. }
  1074. static inline int gfp_any(void)
  1075. {
  1076. return in_softirq() ? GFP_ATOMIC : GFP_KERNEL;
  1077. }
  1078. static inline long sock_rcvtimeo(struct sock *sk, int noblock)
  1079. {
  1080. return noblock ? 0 : sk->rcvtimeo;
  1081. }
  1082. static inline long sock_sndtimeo(struct sock *sk, int noblock)
  1083. {
  1084. return noblock ? 0 : sk->sndtimeo;
  1085. }
  1086. static inline int sock_rcvlowat(struct sock *sk, int waitall, int len)
  1087. {
  1088. return (waitall ? len : min_t(int, sk->rcvlowat, len)) ? : 1;
  1089. }
  1090. /* Alas, with timeout socket operations are not restartable.
  1091.  * Compare this to poll().
  1092.  */
  1093. static inline int sock_intr_errno(long timeo)
  1094. {
  1095. return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
  1096. }
  1097. static __inline__ void
  1098. sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
  1099. {
  1100. if (sk->rcvtstamp)
  1101. put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP, sizeof(skb->stamp), &skb->stamp);
  1102. else
  1103. sk->stamp = skb->stamp;
  1104. }
  1105. /* 
  1106.  * Enable debug/info messages 
  1107.  */
  1108. #if 0
  1109. #define NETDEBUG(x) do { } while (0)
  1110. #else
  1111. #define NETDEBUG(x) do { x; } while (0)
  1112. #endif
  1113. /*
  1114.  * Macros for sleeping on a socket. Use them like this:
  1115.  *
  1116.  * SOCK_SLEEP_PRE(sk)
  1117.  * if (condition)
  1118.  *  schedule();
  1119.  * SOCK_SLEEP_POST(sk)
  1120.  *
  1121.  */
  1122. #define SOCK_SLEEP_PRE(sk)  { struct task_struct *tsk = current; 
  1123. DECLARE_WAITQUEUE(wait, tsk); 
  1124. tsk->state = TASK_INTERRUPTIBLE; 
  1125. add_wait_queue((sk)->sleep, &wait); 
  1126. release_sock(sk);
  1127. #define SOCK_SLEEP_POST(sk) tsk->state = TASK_RUNNING; 
  1128. remove_wait_queue((sk)->sleep, &wait); 
  1129. lock_sock(sk); 
  1130. }
  1131. extern __u32 sysctl_wmem_max;
  1132. extern __u32 sysctl_rmem_max;
  1133. #endif /* _SOCK_H */