1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#ifndef _SOCK_H
41#define _SOCK_H
42
43#include <linux/config.h>
44#include <linux/list.h>
45#include <linux/timer.h>
46#include <linux/cache.h>
47#include <linux/module.h>
48#include <linux/netdevice.h>
49#include <linux/skbuff.h>
50#include <linux/security.h>
51
52#include <linux/filter.h>
53
54#include <asm/atomic.h>
55#include <net/dst.h>
56
57
58
59
60
61
62
63
64#define SOCK_DEBUGGING
65#ifdef SOCK_DEBUGGING
66#define SOCK_DEBUG(sk, msg...) do { if ((sk) && ((sk)->sk_debug)) \
67 printk(KERN_DEBUG msg); } while (0)
68#else
69#define SOCK_DEBUG(sk, msg...) do { } while (0)
70#endif
71
72
73
74
75
76struct sock_iocb;
77typedef struct {
78 spinlock_t slock;
79 struct sock_iocb *owner;
80 wait_queue_head_t wq;
81} socket_lock_t;
82
83#define sock_lock_init(__sk) \
84do { spin_lock_init(&((__sk)->sk_lock.slock)); \
85 (__sk)->sk_lock.owner = NULL; \
86 init_waitqueue_head(&((__sk)->sk_lock.wq)); \
87} while(0)
88
89struct sock;
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104struct sock_common {
105 unsigned short skc_family;
106 volatile unsigned char skc_state;
107 unsigned char skc_reuse;
108 int skc_bound_dev_if;
109 struct hlist_node skc_node;
110 struct hlist_node skc_bind_node;
111 atomic_t skc_refcnt;
112};
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176struct sock {
177
178
179
180
181 struct sock_common __sk_common;
182#define sk_family __sk_common.skc_family
183#define sk_state __sk_common.skc_state
184#define sk_reuse __sk_common.skc_reuse
185#define sk_bound_dev_if __sk_common.skc_bound_dev_if
186#define sk_node __sk_common.skc_node
187#define sk_bind_node __sk_common.skc_bind_node
188#define sk_refcnt __sk_common.skc_refcnt
189 volatile unsigned char sk_zapped;
190 unsigned char sk_shutdown;
191 unsigned char sk_use_write_queue;
192 unsigned char sk_userlocks;
193 socket_lock_t sk_lock;
194 int sk_rcvbuf;
195 wait_queue_head_t *sk_sleep;
196 struct dst_entry *sk_dst_cache;
197 rwlock_t sk_dst_lock;
198 struct xfrm_policy *sk_policy[2];
199 atomic_t sk_rmem_alloc;
200 struct sk_buff_head sk_receive_queue;
201 atomic_t sk_wmem_alloc;
202 struct sk_buff_head sk_write_queue;
203 atomic_t sk_omem_alloc;
204 int sk_wmem_queued;
205 int sk_forward_alloc;
206 unsigned int sk_allocation;
207 int sk_sndbuf;
208 unsigned long sk_flags;
209 char sk_no_check;
210 unsigned char sk_debug;
211 unsigned char sk_rcvtstamp;
212 unsigned char sk_no_largesend;
213 int sk_route_caps;
214 unsigned long sk_lingertime;
215 int sk_hashent;
216 struct sock *sk_pair;
217
218
219
220
221
222 struct {
223 struct sk_buff *head;
224 struct sk_buff *tail;
225 } sk_backlog;
226 rwlock_t sk_callback_lock;
227 struct sk_buff_head sk_error_queue;
228 struct proto *sk_prot;
229 int sk_err,
230 sk_err_soft;
231 unsigned short sk_ack_backlog;
232 unsigned short sk_max_ack_backlog;
233 __u32 sk_priority;
234 unsigned short sk_type;
235 unsigned char sk_localroute;
236 unsigned char sk_protocol;
237 struct ucred sk_peercred;
238 int sk_rcvlowat;
239 long sk_rcvtimeo;
240 long sk_sndtimeo;
241 struct sk_filter *sk_filter;
242 void *sk_protinfo;
243 kmem_cache_t *sk_slab;
244 struct timer_list sk_timer;
245 struct timeval sk_stamp;
246 struct socket *sk_socket;
247 void *sk_user_data;
248 struct module *sk_owner;
249 void (*sk_state_change)(struct sock *sk);
250 void (*sk_data_ready)(struct sock *sk, int bytes);
251 void (*sk_write_space)(struct sock *sk);
252 void (*sk_error_report)(struct sock *sk);
253 int (*sk_backlog_rcv)(struct sock *sk,
254 struct sk_buff *skb);
255 void (*sk_destruct)(struct sock *sk);
256};
257
258
259
260
261static inline struct sock *__sk_head(struct hlist_head *head)
262{
263 return hlist_entry(head->first, struct sock, sk_node);
264}
265
266static inline struct sock *sk_head(struct hlist_head *head)
267{
268 return hlist_empty(head) ? NULL : __sk_head(head);
269}
270
271static inline struct sock *sk_next(struct sock *sk)
272{
273 return sk->sk_node.next ?
274 hlist_entry(sk->sk_node.next, struct sock, sk_node) : NULL;
275}
276
277static inline int sk_unhashed(struct sock *sk)
278{
279 return hlist_unhashed(&sk->sk_node);
280}
281
282static inline int sk_hashed(struct sock *sk)
283{
284 return sk->sk_node.pprev != NULL;
285}
286
287static __inline__ void sk_node_init(struct hlist_node *node)
288{
289 node->pprev = NULL;
290}
291
292static __inline__ void __sk_del_node(struct sock *sk)
293{
294 __hlist_del(&sk->sk_node);
295}
296
297static __inline__ int __sk_del_node_init(struct sock *sk)
298{
299 if (sk_hashed(sk)) {
300 __sk_del_node(sk);
301 sk_node_init(&sk->sk_node);
302 return 1;
303 }
304 return 0;
305}
306
307static inline void __sock_put(struct sock *sk);
308
309static __inline__ int sk_del_node_init(struct sock *sk)
310{
311 int rc = __sk_del_node_init(sk);
312
313 if (rc) {
314
315 WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
316 __sock_put(sk);
317 }
318 return rc;
319}
320
321static __inline__ void __sk_add_node(struct sock *sk, struct hlist_head *list)
322{
323 hlist_add_head(&sk->sk_node, list);
324}
325
326static inline void sock_hold(struct sock *sk);
327
328static __inline__ void sk_add_node(struct sock *sk, struct hlist_head *list)
329{
330 sock_hold(sk);
331 __sk_add_node(sk, list);
332}
333
334static __inline__ void __sk_del_bind_node(struct sock *sk)
335{
336 __hlist_del(&sk->sk_bind_node);
337}
338
339static __inline__ void sk_add_bind_node(struct sock *sk,
340 struct hlist_head *list)
341{
342 hlist_add_head(&sk->sk_bind_node, list);
343}
344
345#define sk_for_each(__sk, node, list) \
346 hlist_for_each_entry(__sk, node, list, sk_node)
347#define sk_for_each_from(__sk, node) \
348 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
349 hlist_for_each_entry_from(__sk, node, sk_node)
350#define sk_for_each_continue(__sk, node) \
351 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
352 hlist_for_each_entry_continue(__sk, node, sk_node)
353#define sk_for_each_safe(__sk, node, tmp, list) \
354 hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node)
355#define sk_for_each_bound(__sk, node, list) \
356 hlist_for_each_entry(__sk, node, list, sk_bind_node)
357
358
359enum sock_flags {
360 SOCK_DEAD,
361 SOCK_DONE,
362 SOCK_URGINLINE,
363 SOCK_KEEPOPEN,
364 SOCK_LINGER,
365 SOCK_DESTROY,
366 SOCK_BROADCAST,
367};
368
369static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
370{
371 __set_bit(flag, &sk->sk_flags);
372}
373
374static inline void sock_reset_flag(struct sock *sk, enum sock_flags flag)
375{
376 __clear_bit(flag, &sk->sk_flags);
377}
378
379static inline int sock_flag(struct sock *sk, enum sock_flags flag)
380{
381 return test_bit(flag, &sk->sk_flags);
382}
383
384
385#define sk_add_backlog(__sk, __skb) \
386do { if (!(__sk)->sk_backlog.tail) { \
387 (__sk)->sk_backlog.head = \
388 (__sk)->sk_backlog.tail = (__skb); \
389 } else { \
390 ((__sk)->sk_backlog.tail)->next = (__skb); \
391 (__sk)->sk_backlog.tail = (__skb); \
392 } \
393 (__skb)->next = NULL; \
394} while(0)
395
396
397
398
399
400struct proto {
401 void (*close)(struct sock *sk,
402 long timeout);
403 int (*connect)(struct sock *sk,
404 struct sockaddr *uaddr,
405 int addr_len);
406 int (*disconnect)(struct sock *sk, int flags);
407
408 struct sock * (*accept) (struct sock *sk, int flags, int *err);
409
410 int (*ioctl)(struct sock *sk, int cmd,
411 unsigned long arg);
412 int (*init)(struct sock *sk);
413 int (*destroy)(struct sock *sk);
414 void (*shutdown)(struct sock *sk, int how);
415 int (*setsockopt)(struct sock *sk, int level,
416 int optname, char *optval, int optlen);
417 int (*getsockopt)(struct sock *sk, int level,
418 int optname, char *optval,
419 int *option);
420 int (*sendmsg)(struct kiocb *iocb, struct sock *sk,
421 struct msghdr *msg, int len);
422 int (*recvmsg)(struct kiocb *iocb, struct sock *sk,
423 struct msghdr *msg,
424 int len, int noblock, int flags,
425 int *addr_len);
426 int (*sendpage)(struct sock *sk, struct page *page,
427 int offset, size_t size, int flags);
428 int (*bind)(struct sock *sk,
429 struct sockaddr *uaddr, int addr_len);
430
431 int (*backlog_rcv) (struct sock *sk,
432 struct sk_buff *skb);
433
434
435 void (*hash)(struct sock *sk);
436 void (*unhash)(struct sock *sk);
437 int (*get_port)(struct sock *sk, unsigned short snum);
438
439 char name[32];
440
441 struct {
442 int inuse;
443 u8 __pad[SMP_CACHE_BYTES - sizeof(int)];
444 } stats[NR_CPUS];
445};
446
447static __inline__ void sk_set_owner(struct sock *sk, struct module *owner)
448{
449
450
451
452
453
454
455
456
457
458 if (unlikely(sk->sk_owner != NULL))
459 BUG();
460 sk->sk_owner = owner;
461 __module_get(owner);
462}
463
464
465static __inline__ void sock_prot_inc_use(struct proto *prot)
466{
467 prot->stats[smp_processor_id()].inuse++;
468}
469
470static __inline__ void sock_prot_dec_use(struct proto *prot)
471{
472 prot->stats[smp_processor_id()].inuse--;
473}
474
475
476#define SOCK_DESTROY_TIME (10*HZ)
477
478
479#define PROT_SOCK 1024
480
481#define SHUTDOWN_MASK 3
482#define RCV_SHUTDOWN 1
483#define SEND_SHUTDOWN 2
484
485#define SOCK_SNDBUF_LOCK 1
486#define SOCK_RCVBUF_LOCK 2
487#define SOCK_BINDADDR_LOCK 4
488#define SOCK_BINDPORT_LOCK 8
489
490
491struct sock_iocb {
492 struct list_head list;
493
494 int flags;
495 int size;
496 struct socket *sock;
497 struct sock *sk;
498 struct scm_cookie *scm;
499 struct msghdr *msg, async_msg;
500 struct iovec async_iov;
501};
502
503static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb)
504{
505 BUG_ON(sizeof(struct sock_iocb) > KIOCB_PRIVATE_SIZE);
506 return (struct sock_iocb *)iocb->private;
507}
508
509static inline struct kiocb *siocb_to_kiocb(struct sock_iocb *si)
510{
511 return container_of((void *)si, struct kiocb, private);
512}
513
514struct socket_alloc {
515 struct socket socket;
516 struct inode vfs_inode;
517};
518
519static inline struct socket *SOCKET_I(struct inode *inode)
520{
521 return &container_of(inode, struct socket_alloc, vfs_inode)->socket;
522}
523
524static inline struct inode *SOCK_INODE(struct socket *socket)
525{
526 return &container_of(socket, struct socket_alloc, socket)->vfs_inode;
527}
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542extern void __lock_sock(struct sock *sk);
543extern void __release_sock(struct sock *sk);
544#define sock_owned_by_user(sk) ((sk)->sk_lock.owner)
545
546extern void lock_sock(struct sock *sk);
547extern void release_sock(struct sock *sk);
548
549
550#define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock))
551#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
552
553extern struct sock * sk_alloc(int family, int priority, int zero_it,
554 kmem_cache_t *slab);
555extern void sk_free(struct sock *sk);
556
557extern struct sk_buff *sock_wmalloc(struct sock *sk,
558 unsigned long size, int force,
559 int priority);
560extern struct sk_buff *sock_rmalloc(struct sock *sk,
561 unsigned long size, int force,
562 int priority);
563extern void sock_wfree(struct sk_buff *skb);
564extern void sock_rfree(struct sk_buff *skb);
565
566extern int sock_setsockopt(struct socket *sock, int level,
567 int op, char __user *optval,
568 int optlen);
569
570extern int sock_getsockopt(struct socket *sock, int level,
571 int op, char __user *optval,
572 int __user *optlen);
573extern struct sk_buff *sock_alloc_send_skb(struct sock *sk,
574 unsigned long size,
575 int noblock,
576 int *errcode);
577extern struct sk_buff *sock_alloc_send_pskb(struct sock *sk,
578 unsigned long header_len,
579 unsigned long data_len,
580 int noblock,
581 int *errcode);
582extern void *sock_kmalloc(struct sock *sk, int size, int priority);
583extern void sock_kfree_s(struct sock *sk, void *mem, int size);
584extern void sk_send_sigurg(struct sock *sk);
585
586
587
588
589
590extern int sock_no_release(struct socket *);
591extern int sock_no_bind(struct socket *,
592 struct sockaddr *, int);
593extern int sock_no_connect(struct socket *,
594 struct sockaddr *, int, int);
595extern int sock_no_socketpair(struct socket *,
596 struct socket *);
597extern int sock_no_accept(struct socket *,
598 struct socket *, int);
599extern int sock_no_getname(struct socket *,
600 struct sockaddr *, int *, int);
601extern unsigned int sock_no_poll(struct file *, struct socket *,
602 struct poll_table_struct *);
603extern int sock_no_ioctl(struct socket *, unsigned int,
604 unsigned long);
605extern int sock_no_listen(struct socket *, int);
606extern int sock_no_shutdown(struct socket *, int);
607extern int sock_no_getsockopt(struct socket *, int , int,
608 char *, int *);
609extern int sock_no_setsockopt(struct socket *, int, int,
610 char *, int);
611extern int sock_no_sendmsg(struct kiocb *, struct socket *,
612 struct msghdr *, int);
613extern int sock_no_recvmsg(struct kiocb *, struct socket *,
614 struct msghdr *, int, int);
615extern int sock_no_mmap(struct file *file,
616 struct socket *sock,
617 struct vm_area_struct *vma);
618extern ssize_t sock_no_sendpage(struct socket *sock,
619 struct page *page,
620 int offset, size_t size,
621 int flags);
622
623
624
625
626
627extern void sock_def_destruct(struct sock *);
628
629
630extern void sock_init_data(struct socket *sock, struct sock *sk);
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646static inline int sk_filter(struct sock *sk, struct sk_buff *skb, int needlock)
647{
648 int err;
649
650 err = security_sock_rcv_skb(sk, skb);
651 if (err)
652 return err;
653
654 if (sk->sk_filter) {
655 struct sk_filter *filter;
656
657 if (needlock)
658 bh_lock_sock(sk);
659
660 filter = sk->sk_filter;
661 if (filter) {
662 int pkt_len = sk_run_filter(skb, filter->insns,
663 filter->len);
664 if (!pkt_len)
665 err = -EPERM;
666 else
667 skb_trim(skb, pkt_len);
668 }
669
670 if (needlock)
671 bh_unlock_sock(sk);
672 }
673 return err;
674}
675
676
677
678
679
680
681
682
683
684static inline void sk_filter_release(struct sock *sk, struct sk_filter *fp)
685{
686 unsigned int size = sk_filter_len(fp);
687
688 atomic_sub(size, &sk->sk_omem_alloc);
689
690 if (atomic_dec_and_test(&fp->refcnt))
691 kfree(fp);
692}
693
694static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
695{
696 atomic_inc(&fp->refcnt);
697 atomic_add(sk_filter_len(fp), &sk->sk_omem_alloc);
698}
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731static inline void sock_hold(struct sock *sk)
732{
733 atomic_inc(&sk->sk_refcnt);
734}
735
736
737
738
739static inline void __sock_put(struct sock *sk)
740{
741 atomic_dec(&sk->sk_refcnt);
742}
743
744
745static inline void sock_put(struct sock *sk)
746{
747 if (atomic_dec_and_test(&sk->sk_refcnt))
748 sk_free(sk);
749}
750
751
752
753
754
755
756
757
758static inline void sock_orphan(struct sock *sk)
759{
760 write_lock_bh(&sk->sk_callback_lock);
761 sock_set_flag(sk, SOCK_DEAD);
762 sk->sk_socket = NULL;
763 sk->sk_sleep = NULL;
764 write_unlock_bh(&sk->sk_callback_lock);
765}
766
767static inline void sock_graft(struct sock *sk, struct socket *parent)
768{
769 write_lock_bh(&sk->sk_callback_lock);
770 sk->sk_sleep = &parent->wait;
771 parent->sk = sk;
772 sk->sk_socket = parent;
773 write_unlock_bh(&sk->sk_callback_lock);
774}
775
776static inline int sock_i_uid(struct sock *sk)
777{
778 int uid;
779
780 read_lock(&sk->sk_callback_lock);
781 uid = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_uid : 0;
782 read_unlock(&sk->sk_callback_lock);
783 return uid;
784}
785
786static inline unsigned long sock_i_ino(struct sock *sk)
787{
788 unsigned long ino;
789
790 read_lock(&sk->sk_callback_lock);
791 ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0;
792 read_unlock(&sk->sk_callback_lock);
793 return ino;
794}
795
796static inline struct dst_entry *
797__sk_dst_get(struct sock *sk)
798{
799 return sk->sk_dst_cache;
800}
801
802static inline struct dst_entry *
803sk_dst_get(struct sock *sk)
804{
805 struct dst_entry *dst;
806
807 read_lock(&sk->sk_dst_lock);
808 dst = sk->sk_dst_cache;
809 if (dst)
810 dst_hold(dst);
811 read_unlock(&sk->sk_dst_lock);
812 return dst;
813}
814
815static inline void
816__sk_dst_set(struct sock *sk, struct dst_entry *dst)
817{
818 struct dst_entry *old_dst;
819
820 old_dst = sk->sk_dst_cache;
821 sk->sk_dst_cache = dst;
822 dst_release(old_dst);
823}
824
825static inline void
826sk_dst_set(struct sock *sk, struct dst_entry *dst)
827{
828 write_lock(&sk->sk_dst_lock);
829 __sk_dst_set(sk, dst);
830 write_unlock(&sk->sk_dst_lock);
831}
832
833static inline void
834__sk_dst_reset(struct sock *sk)
835{
836 struct dst_entry *old_dst;
837
838 old_dst = sk->sk_dst_cache;
839 sk->sk_dst_cache = NULL;
840 dst_release(old_dst);
841}
842
843static inline void
844sk_dst_reset(struct sock *sk)
845{
846 write_lock(&sk->sk_dst_lock);
847 __sk_dst_reset(sk);
848 write_unlock(&sk->sk_dst_lock);
849}
850
851static inline struct dst_entry *
852__sk_dst_check(struct sock *sk, u32 cookie)
853{
854 struct dst_entry *dst = sk->sk_dst_cache;
855
856 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
857 sk->sk_dst_cache = NULL;
858 return NULL;
859 }
860
861 return dst;
862}
863
864static inline struct dst_entry *
865sk_dst_check(struct sock *sk, u32 cookie)
866{
867 struct dst_entry *dst = sk_dst_get(sk);
868
869 if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) {
870 sk_dst_reset(sk);
871 return NULL;
872 }
873
874 return dst;
875}
876
877
878
879
880
881
882
883
884
885
886
887static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
888{
889 sock_hold(sk);
890 skb->sk = sk;
891 skb->destructor = sock_wfree;
892 atomic_add(skb->truesize, &sk->sk_wmem_alloc);
893}
894
895static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
896{
897 skb->sk = sk;
898 skb->destructor = sock_rfree;
899 atomic_add(skb->truesize, &sk->sk_rmem_alloc);
900}
901
902static inline int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
903{
904 int err = 0;
905 int skb_len;
906
907
908
909
910 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
911 (unsigned)sk->sk_rcvbuf) {
912 err = -ENOMEM;
913 goto out;
914 }
915
916
917
918
919
920 err = sk_filter(sk, skb, 1);
921 if (err)
922 goto out;
923
924 skb->dev = NULL;
925 skb_set_owner_r(skb, sk);
926
927
928
929
930
931
932 skb_len = skb->len;
933
934 skb_queue_tail(&sk->sk_receive_queue, skb);
935
936 if (!sock_flag(sk, SOCK_DEAD))
937 sk->sk_data_ready(sk, skb_len);
938out:
939 return err;
940}
941
942static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
943{
944
945
946
947 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
948 (unsigned)sk->sk_rcvbuf)
949 return -ENOMEM;
950 skb_set_owner_r(skb, sk);
951 skb_queue_tail(&sk->sk_error_queue, skb);
952 if (!sock_flag(sk, SOCK_DEAD))
953 sk->sk_data_ready(sk, skb->len);
954 return 0;
955}
956
957
958
959
960
961static inline int sock_error(struct sock *sk)
962{
963 int err = xchg(&sk->sk_err, 0);
964 return -err;
965}
966
967static inline unsigned long sock_wspace(struct sock *sk)
968{
969 int amt = 0;
970
971 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
972 amt = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
973 if (amt < 0)
974 amt = 0;
975 }
976 return amt;
977}
978
979static inline void sk_wake_async(struct sock *sk, int how, int band)
980{
981 if (sk->sk_socket && sk->sk_socket->fasync_list)
982 sock_wake_async(sk->sk_socket, how, band);
983}
984
985#define SOCK_MIN_SNDBUF 2048
986#define SOCK_MIN_RCVBUF 256
987
988
989
990
991static inline int sock_writeable(struct sock *sk)
992{
993 return atomic_read(&sk->sk_wmem_alloc) < (sk->sk_sndbuf / 2);
994}
995
996static inline int gfp_any(void)
997{
998 return in_softirq() ? GFP_ATOMIC : GFP_KERNEL;
999}
1000
1001static inline long sock_rcvtimeo(struct sock *sk, int noblock)
1002{
1003 return noblock ? 0 : sk->sk_rcvtimeo;
1004}
1005
1006static inline long sock_sndtimeo(struct sock *sk, int noblock)
1007{
1008 return noblock ? 0 : sk->sk_sndtimeo;
1009}
1010
1011static inline int sock_rcvlowat(struct sock *sk, int waitall, int len)
1012{
1013 return (waitall ? len : min_t(int, sk->sk_rcvlowat, len)) ? : 1;
1014}
1015
1016
1017
1018
1019static inline int sock_intr_errno(long timeo)
1020{
1021 return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
1022}
1023
1024static __inline__ void
1025sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
1026{
1027 if (sk->sk_rcvtstamp)
1028 put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP, sizeof(skb->stamp), &skb->stamp);
1029 else
1030 sk->sk_stamp = skb->stamp;
1031}
1032
1033
1034
1035
1036
1037#if 0
1038#define NETDEBUG(x) do { } while (0)
1039#else
1040#define NETDEBUG(x) do { x; } while (0)
1041#endif
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056#define SOCK_SLEEP_PRE(sk) { struct task_struct *tsk = current; \
1057 DECLARE_WAITQUEUE(wait, tsk); \
1058 tsk->state = TASK_INTERRUPTIBLE; \
1059 add_wait_queue((sk)->sk_sleep, &wait); \
1060 release_sock(sk);
1061
1062#define SOCK_SLEEP_POST(sk) tsk->state = TASK_RUNNING; \
1063 remove_wait_queue((sk)->sk_sleep, &wait); \
1064 lock_sock(sk); \
1065 }
1066
1067static inline void sock_valbool_flag(struct sock *sk, int bit, int valbool)
1068{
1069 if (valbool)
1070 sock_set_flag(sk, bit);
1071 else
1072 sock_reset_flag(sk, bit);
1073}
1074
1075extern __u32 sysctl_wmem_max;
1076extern __u32 sysctl_rmem_max;
1077
1078int siocdevprivate_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
1079
1080#endif
1081