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/kernel.h>
44#include <linux/list.h>
45#include <linux/timer.h>
46#include <linux/cache.h>
47#include <linux/module.h>
48#include <linux/lockdep.h>
49#include <linux/netdevice.h>
50#include <linux/skbuff.h>
51#include <linux/mm.h>
52#include <linux/security.h>
53
54#include <linux/filter.h>
55
56#include <asm/atomic.h>
57#include <net/dst.h>
58#include <net/checksum.h>
59
60
61
62
63
64
65
66
67#define SOCK_DEBUGGING
68#ifdef SOCK_DEBUGGING
69#define SOCK_DEBUG(sk, msg...) do { if ((sk) && sock_flag((sk), SOCK_DBG)) \
70 printk(KERN_DEBUG msg); } while (0)
71#else
72
73static void inline int __attribute__ ((format (printf, 2, 3)))
74SOCK_DEBUG(struct sock *sk, const char *msg, ...)
75{
76}
77#endif
78
79
80
81
82
83typedef struct {
84 spinlock_t slock;
85 int owned;
86 wait_queue_head_t wq;
87
88
89
90
91
92
93#ifdef CONFIG_DEBUG_LOCK_ALLOC
94 struct lockdep_map dep_map;
95#endif
96} socket_lock_t;
97
98struct sock;
99struct proto;
100struct net;
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118struct sock_common {
119 unsigned short skc_family;
120 volatile unsigned char skc_state;
121 unsigned char skc_reuse;
122 int skc_bound_dev_if;
123 struct hlist_node skc_node;
124 struct hlist_node skc_bind_node;
125 atomic_t skc_refcnt;
126 unsigned int skc_hash;
127 struct proto *skc_prot;
128#ifdef CONFIG_NET_NS
129 struct net *skc_net;
130#endif
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198struct sock {
199
200
201
202
203 struct sock_common __sk_common;
204#define sk_family __sk_common.skc_family
205#define sk_state __sk_common.skc_state
206#define sk_reuse __sk_common.skc_reuse
207#define sk_bound_dev_if __sk_common.skc_bound_dev_if
208#define sk_node __sk_common.skc_node
209#define sk_bind_node __sk_common.skc_bind_node
210#define sk_refcnt __sk_common.skc_refcnt
211#define sk_hash __sk_common.skc_hash
212#define sk_prot __sk_common.skc_prot
213#define sk_net __sk_common.skc_net
214 unsigned char sk_shutdown : 2,
215 sk_no_check : 2,
216 sk_userlocks : 4;
217 unsigned char sk_protocol;
218 unsigned short sk_type;
219 int sk_rcvbuf;
220 socket_lock_t sk_lock;
221
222
223
224
225
226 struct {
227 struct sk_buff *head;
228 struct sk_buff *tail;
229 } sk_backlog;
230 wait_queue_head_t *sk_sleep;
231 struct dst_entry *sk_dst_cache;
232 struct xfrm_policy *sk_policy[2];
233 rwlock_t sk_dst_lock;
234 atomic_t sk_rmem_alloc;
235 atomic_t sk_wmem_alloc;
236 atomic_t sk_omem_alloc;
237 int sk_sndbuf;
238 struct sk_buff_head sk_receive_queue;
239 struct sk_buff_head sk_write_queue;
240 struct sk_buff_head sk_async_wait_queue;
241 int sk_wmem_queued;
242 int sk_forward_alloc;
243 gfp_t sk_allocation;
244 int sk_route_caps;
245 int sk_gso_type;
246 unsigned int sk_gso_max_size;
247 int sk_rcvlowat;
248 unsigned long sk_flags;
249 unsigned long sk_lingertime;
250 struct sk_buff_head sk_error_queue;
251 struct proto *sk_prot_creator;
252 rwlock_t sk_callback_lock;
253 int sk_err,
254 sk_err_soft;
255 atomic_t sk_drops;
256 unsigned short sk_ack_backlog;
257 unsigned short sk_max_ack_backlog;
258 __u32 sk_priority;
259 struct ucred sk_peercred;
260 long sk_rcvtimeo;
261 long sk_sndtimeo;
262 struct sk_filter *sk_filter;
263 void *sk_protinfo;
264 struct timer_list sk_timer;
265 ktime_t sk_stamp;
266 struct socket *sk_socket;
267 void *sk_user_data;
268 struct page *sk_sndmsg_page;
269 struct sk_buff *sk_send_head;
270 __u32 sk_sndmsg_off;
271 int sk_write_pending;
272 void *sk_security;
273 __u32 sk_mark;
274
275 void (*sk_state_change)(struct sock *sk);
276 void (*sk_data_ready)(struct sock *sk, int bytes);
277 void (*sk_write_space)(struct sock *sk);
278 void (*sk_error_report)(struct sock *sk);
279 int (*sk_backlog_rcv)(struct sock *sk,
280 struct sk_buff *skb);
281 void (*sk_destruct)(struct sock *sk);
282};
283
284
285
286
287static inline struct sock *__sk_head(const struct hlist_head *head)
288{
289 return hlist_entry(head->first, struct sock, sk_node);
290}
291
292static inline struct sock *sk_head(const struct hlist_head *head)
293{
294 return hlist_empty(head) ? NULL : __sk_head(head);
295}
296
297static inline struct sock *sk_next(const struct sock *sk)
298{
299 return sk->sk_node.next ?
300 hlist_entry(sk->sk_node.next, struct sock, sk_node) : NULL;
301}
302
303static inline int sk_unhashed(const struct sock *sk)
304{
305 return hlist_unhashed(&sk->sk_node);
306}
307
308static inline int sk_hashed(const struct sock *sk)
309{
310 return !sk_unhashed(sk);
311}
312
313static __inline__ void sk_node_init(struct hlist_node *node)
314{
315 node->pprev = NULL;
316}
317
318static __inline__ void __sk_del_node(struct sock *sk)
319{
320 __hlist_del(&sk->sk_node);
321}
322
323static __inline__ int __sk_del_node_init(struct sock *sk)
324{
325 if (sk_hashed(sk)) {
326 __sk_del_node(sk);
327 sk_node_init(&sk->sk_node);
328 return 1;
329 }
330 return 0;
331}
332
333
334
335
336
337
338
339static inline void sock_hold(struct sock *sk)
340{
341 atomic_inc(&sk->sk_refcnt);
342}
343
344
345
346
347static inline void __sock_put(struct sock *sk)
348{
349 atomic_dec(&sk->sk_refcnt);
350}
351
352static __inline__ int sk_del_node_init(struct sock *sk)
353{
354 int rc = __sk_del_node_init(sk);
355
356 if (rc) {
357
358 WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
359 __sock_put(sk);
360 }
361 return rc;
362}
363
364static __inline__ void __sk_add_node(struct sock *sk, struct hlist_head *list)
365{
366 hlist_add_head(&sk->sk_node, list);
367}
368
369static __inline__ void sk_add_node(struct sock *sk, struct hlist_head *list)
370{
371 sock_hold(sk);
372 __sk_add_node(sk, list);
373}
374
375static __inline__ void __sk_del_bind_node(struct sock *sk)
376{
377 __hlist_del(&sk->sk_bind_node);
378}
379
380static __inline__ void sk_add_bind_node(struct sock *sk,
381 struct hlist_head *list)
382{
383 hlist_add_head(&sk->sk_bind_node, list);
384}
385
386#define sk_for_each(__sk, node, list) \
387 hlist_for_each_entry(__sk, node, list, sk_node)
388#define sk_for_each_from(__sk, node) \
389 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
390 hlist_for_each_entry_from(__sk, node, sk_node)
391#define sk_for_each_continue(__sk, node) \
392 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
393 hlist_for_each_entry_continue(__sk, node, sk_node)
394#define sk_for_each_safe(__sk, node, tmp, list) \
395 hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node)
396#define sk_for_each_bound(__sk, node, list) \
397 hlist_for_each_entry(__sk, node, list, sk_bind_node)
398
399
400enum sock_flags {
401 SOCK_DEAD,
402 SOCK_DONE,
403 SOCK_URGINLINE,
404 SOCK_KEEPOPEN,
405 SOCK_LINGER,
406 SOCK_DESTROY,
407 SOCK_BROADCAST,
408 SOCK_TIMESTAMP,
409 SOCK_ZAPPED,
410 SOCK_USE_WRITE_QUEUE,
411 SOCK_DBG,
412 SOCK_RCVTSTAMP,
413 SOCK_RCVTSTAMPNS,
414 SOCK_LOCALROUTE,
415 SOCK_QUEUE_SHRUNK,
416};
417
418static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
419{
420 nsk->sk_flags = osk->sk_flags;
421}
422
423static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
424{
425 __set_bit(flag, &sk->sk_flags);
426}
427
428static inline void sock_reset_flag(struct sock *sk, enum sock_flags flag)
429{
430 __clear_bit(flag, &sk->sk_flags);
431}
432
433static inline int sock_flag(struct sock *sk, enum sock_flags flag)
434{
435 return test_bit(flag, &sk->sk_flags);
436}
437
438static inline void sk_acceptq_removed(struct sock *sk)
439{
440 sk->sk_ack_backlog--;
441}
442
443static inline void sk_acceptq_added(struct sock *sk)
444{
445 sk->sk_ack_backlog++;
446}
447
448static inline int sk_acceptq_is_full(struct sock *sk)
449{
450 return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
451}
452
453
454
455
456static inline int sk_stream_min_wspace(struct sock *sk)
457{
458 return sk->sk_wmem_queued >> 1;
459}
460
461static inline int sk_stream_wspace(struct sock *sk)
462{
463 return sk->sk_sndbuf - sk->sk_wmem_queued;
464}
465
466extern void sk_stream_write_space(struct sock *sk);
467
468static inline int sk_stream_memory_free(struct sock *sk)
469{
470 return sk->sk_wmem_queued < sk->sk_sndbuf;
471}
472
473
474static inline void sk_add_backlog(struct sock *sk, struct sk_buff *skb)
475{
476 if (!sk->sk_backlog.tail) {
477 sk->sk_backlog.head = sk->sk_backlog.tail = skb;
478 } else {
479 sk->sk_backlog.tail->next = skb;
480 sk->sk_backlog.tail = skb;
481 }
482 skb->next = NULL;
483}
484
485#define sk_wait_event(__sk, __timeo, __condition) \
486 ({ int __rc; \
487 release_sock(__sk); \
488 __rc = __condition; \
489 if (!__rc) { \
490 *(__timeo) = schedule_timeout(*(__timeo)); \
491 } \
492 lock_sock(__sk); \
493 __rc = __condition; \
494 __rc; \
495 })
496
497extern int sk_stream_wait_connect(struct sock *sk, long *timeo_p);
498extern int sk_stream_wait_memory(struct sock *sk, long *timeo_p);
499extern void sk_stream_wait_close(struct sock *sk, long timeo_p);
500extern int sk_stream_error(struct sock *sk, int flags, int err);
501extern void sk_stream_kill_queues(struct sock *sk);
502
503extern int sk_wait_data(struct sock *sk, long *timeo);
504
505struct request_sock_ops;
506struct timewait_sock_ops;
507struct inet_hashinfo;
508struct raw_hashinfo;
509
510
511
512
513
514struct proto {
515 void (*close)(struct sock *sk,
516 long timeout);
517 int (*connect)(struct sock *sk,
518 struct sockaddr *uaddr,
519 int addr_len);
520 int (*disconnect)(struct sock *sk, int flags);
521
522 struct sock * (*accept) (struct sock *sk, int flags, int *err);
523
524 int (*ioctl)(struct sock *sk, int cmd,
525 unsigned long arg);
526 int (*init)(struct sock *sk);
527 void (*destroy)(struct sock *sk);
528 void (*shutdown)(struct sock *sk, int how);
529 int (*setsockopt)(struct sock *sk, int level,
530 int optname, char __user *optval,
531 int optlen);
532 int (*getsockopt)(struct sock *sk, int level,
533 int optname, char __user *optval,
534 int __user *option);
535 int (*compat_setsockopt)(struct sock *sk,
536 int level,
537 int optname, char __user *optval,
538 int optlen);
539 int (*compat_getsockopt)(struct sock *sk,
540 int level,
541 int optname, char __user *optval,
542 int __user *option);
543 int (*sendmsg)(struct kiocb *iocb, struct sock *sk,
544 struct msghdr *msg, size_t len);
545 int (*recvmsg)(struct kiocb *iocb, struct sock *sk,
546 struct msghdr *msg,
547 size_t len, int noblock, int flags,
548 int *addr_len);
549 int (*sendpage)(struct sock *sk, struct page *page,
550 int offset, size_t size, int flags);
551 int (*bind)(struct sock *sk,
552 struct sockaddr *uaddr, int addr_len);
553
554 int (*backlog_rcv) (struct sock *sk,
555 struct sk_buff *skb);
556
557
558 void (*hash)(struct sock *sk);
559 void (*unhash)(struct sock *sk);
560 int (*get_port)(struct sock *sk, unsigned short snum);
561
562
563#ifdef CONFIG_PROC_FS
564 unsigned int inuse_idx;
565#endif
566
567
568 void (*enter_memory_pressure)(struct sock *sk);
569 atomic_t *memory_allocated;
570 atomic_t *sockets_allocated;
571
572
573
574
575
576
577 int *memory_pressure;
578 int *sysctl_mem;
579 int *sysctl_wmem;
580 int *sysctl_rmem;
581 int max_header;
582
583 struct kmem_cache *slab;
584 unsigned int obj_size;
585
586 atomic_t *orphan_count;
587
588 struct request_sock_ops *rsk_prot;
589 struct timewait_sock_ops *twsk_prot;
590
591 union {
592 struct inet_hashinfo *hashinfo;
593 struct hlist_head *udp_hash;
594 struct raw_hashinfo *raw_hash;
595 } h;
596
597 struct module *owner;
598
599 char name[32];
600
601 struct list_head node;
602#ifdef SOCK_REFCNT_DEBUG
603 atomic_t socks;
604#endif
605};
606
607extern int proto_register(struct proto *prot, int alloc_slab);
608extern void proto_unregister(struct proto *prot);
609
610#ifdef SOCK_REFCNT_DEBUG
611static inline void sk_refcnt_debug_inc(struct sock *sk)
612{
613 atomic_inc(&sk->sk_prot->socks);
614}
615
616static inline void sk_refcnt_debug_dec(struct sock *sk)
617{
618 atomic_dec(&sk->sk_prot->socks);
619 printk(KERN_DEBUG "%s socket %p released, %d are still alive\n",
620 sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
621}
622
623static inline void sk_refcnt_debug_release(const struct sock *sk)
624{
625 if (atomic_read(&sk->sk_refcnt) != 1)
626 printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
627 sk->sk_prot->name, sk, atomic_read(&sk->sk_refcnt));
628}
629#else
630#define sk_refcnt_debug_inc(sk) do { } while (0)
631#define sk_refcnt_debug_dec(sk) do { } while (0)
632#define sk_refcnt_debug_release(sk) do { } while (0)
633#endif
634
635
636#ifdef CONFIG_PROC_FS
637
638extern void sock_prot_inuse_add(struct net *net, struct proto *prot, int inc);
639extern int sock_prot_inuse_get(struct net *net, struct proto *proto);
640#else
641static void inline sock_prot_inuse_add(struct net *net, struct proto *prot,
642 int inc)
643{
644}
645#endif
646
647
648
649
650
651static inline void __sk_prot_rehash(struct sock *sk)
652{
653 sk->sk_prot->unhash(sk);
654 sk->sk_prot->hash(sk);
655}
656
657
658#define SOCK_DESTROY_TIME (10*HZ)
659
660
661#define PROT_SOCK 1024
662
663#define SHUTDOWN_MASK 3
664#define RCV_SHUTDOWN 1
665#define SEND_SHUTDOWN 2
666
667#define SOCK_SNDBUF_LOCK 1
668#define SOCK_RCVBUF_LOCK 2
669#define SOCK_BINDADDR_LOCK 4
670#define SOCK_BINDPORT_LOCK 8
671
672
673struct sock_iocb {
674 struct list_head list;
675
676 int flags;
677 int size;
678 struct socket *sock;
679 struct sock *sk;
680 struct scm_cookie *scm;
681 struct msghdr *msg, async_msg;
682 struct kiocb *kiocb;
683};
684
685static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb)
686{
687 return (struct sock_iocb *)iocb->private;
688}
689
690static inline struct kiocb *siocb_to_kiocb(struct sock_iocb *si)
691{
692 return si->kiocb;
693}
694
695struct socket_alloc {
696 struct socket socket;
697 struct inode vfs_inode;
698};
699
700static inline struct socket *SOCKET_I(struct inode *inode)
701{
702 return &container_of(inode, struct socket_alloc, vfs_inode)->socket;
703}
704
705static inline struct inode *SOCK_INODE(struct socket *socket)
706{
707 return &container_of(socket, struct socket_alloc, socket)->vfs_inode;
708}
709
710
711
712
713extern int __sk_mem_schedule(struct sock *sk, int size, int kind);
714extern void __sk_mem_reclaim(struct sock *sk);
715
716#define SK_MEM_QUANTUM ((int)PAGE_SIZE)
717#define SK_MEM_QUANTUM_SHIFT ilog2(SK_MEM_QUANTUM)
718#define SK_MEM_SEND 0
719#define SK_MEM_RECV 1
720
721static inline int sk_mem_pages(int amt)
722{
723 return (amt + SK_MEM_QUANTUM - 1) >> SK_MEM_QUANTUM_SHIFT;
724}
725
726static inline int sk_has_account(struct sock *sk)
727{
728
729 return !!sk->sk_prot->memory_allocated;
730}
731
732static inline int sk_wmem_schedule(struct sock *sk, int size)
733{
734 if (!sk_has_account(sk))
735 return 1;
736 return size <= sk->sk_forward_alloc ||
737 __sk_mem_schedule(sk, size, SK_MEM_SEND);
738}
739
740static inline int sk_rmem_schedule(struct sock *sk, int size)
741{
742 if (!sk_has_account(sk))
743 return 1;
744 return size <= sk->sk_forward_alloc ||
745 __sk_mem_schedule(sk, size, SK_MEM_RECV);
746}
747
748static inline void sk_mem_reclaim(struct sock *sk)
749{
750 if (!sk_has_account(sk))
751 return;
752 if (sk->sk_forward_alloc >= SK_MEM_QUANTUM)
753 __sk_mem_reclaim(sk);
754}
755
756static inline void sk_mem_reclaim_partial(struct sock *sk)
757{
758 if (!sk_has_account(sk))
759 return;
760 if (sk->sk_forward_alloc > SK_MEM_QUANTUM)
761 __sk_mem_reclaim(sk);
762}
763
764static inline void sk_mem_charge(struct sock *sk, int size)
765{
766 if (!sk_has_account(sk))
767 return;
768 sk->sk_forward_alloc -= size;
769}
770
771static inline void sk_mem_uncharge(struct sock *sk, int size)
772{
773 if (!sk_has_account(sk))
774 return;
775 sk->sk_forward_alloc += size;
776}
777
778static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb)
779{
780 skb_truesize_check(skb);
781 sock_set_flag(sk, SOCK_QUEUE_SHRUNK);
782 sk->sk_wmem_queued -= skb->truesize;
783 sk_mem_uncharge(sk, skb->truesize);
784 __kfree_skb(skb);
785}
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800#define sock_owned_by_user(sk) ((sk)->sk_lock.owned)
801
802
803
804
805
806
807
808
809#define sock_lock_init_class_and_name(sk, sname, skey, name, key) \
810do { \
811 sk->sk_lock.owned = 0; \
812 init_waitqueue_head(&sk->sk_lock.wq); \
813 spin_lock_init(&(sk)->sk_lock.slock); \
814 debug_check_no_locks_freed((void *)&(sk)->sk_lock, \
815 sizeof((sk)->sk_lock)); \
816 lockdep_set_class_and_name(&(sk)->sk_lock.slock, \
817 (skey), (sname)); \
818 lockdep_init_map(&(sk)->sk_lock.dep_map, (name), (key), 0); \
819} while (0)
820
821extern void lock_sock_nested(struct sock *sk, int subclass);
822
823static inline void lock_sock(struct sock *sk)
824{
825 lock_sock_nested(sk, 0);
826}
827
828extern void release_sock(struct sock *sk);
829
830
831#define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock))
832#define bh_lock_sock_nested(__sk) \
833 spin_lock_nested(&((__sk)->sk_lock.slock), \
834 SINGLE_DEPTH_NESTING)
835#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
836
837extern struct sock *sk_alloc(struct net *net, int family,
838 gfp_t priority,
839 struct proto *prot);
840extern void sk_free(struct sock *sk);
841extern void sk_release_kernel(struct sock *sk);
842extern struct sock *sk_clone(const struct sock *sk,
843 const gfp_t priority);
844
845extern struct sk_buff *sock_wmalloc(struct sock *sk,
846 unsigned long size, int force,
847 gfp_t priority);
848extern struct sk_buff *sock_rmalloc(struct sock *sk,
849 unsigned long size, int force,
850 gfp_t priority);
851extern void sock_wfree(struct sk_buff *skb);
852extern void sock_rfree(struct sk_buff *skb);
853
854extern int sock_setsockopt(struct socket *sock, int level,
855 int op, char __user *optval,
856 int optlen);
857
858extern int sock_getsockopt(struct socket *sock, int level,
859 int op, char __user *optval,
860 int __user *optlen);
861extern struct sk_buff *sock_alloc_send_skb(struct sock *sk,
862 unsigned long size,
863 int noblock,
864 int *errcode);
865extern void *sock_kmalloc(struct sock *sk, int size,
866 gfp_t priority);
867extern void sock_kfree_s(struct sock *sk, void *mem, int size);
868extern void sk_send_sigurg(struct sock *sk);
869
870
871
872
873
874extern int sock_no_bind(struct socket *,
875 struct sockaddr *, int);
876extern int sock_no_connect(struct socket *,
877 struct sockaddr *, int, int);
878extern int sock_no_socketpair(struct socket *,
879 struct socket *);
880extern int sock_no_accept(struct socket *,
881 struct socket *, int);
882extern int sock_no_getname(struct socket *,
883 struct sockaddr *, int *, int);
884extern unsigned int sock_no_poll(struct file *, struct socket *,
885 struct poll_table_struct *);
886extern int sock_no_ioctl(struct socket *, unsigned int,
887 unsigned long);
888extern int sock_no_listen(struct socket *, int);
889extern int sock_no_shutdown(struct socket *, int);
890extern int sock_no_getsockopt(struct socket *, int , int,
891 char __user *, int __user *);
892extern int sock_no_setsockopt(struct socket *, int, int,
893 char __user *, int);
894extern int sock_no_sendmsg(struct kiocb *, struct socket *,
895 struct msghdr *, size_t);
896extern int sock_no_recvmsg(struct kiocb *, struct socket *,
897 struct msghdr *, size_t, int);
898extern int sock_no_mmap(struct file *file,
899 struct socket *sock,
900 struct vm_area_struct *vma);
901extern ssize_t sock_no_sendpage(struct socket *sock,
902 struct page *page,
903 int offset, size_t size,
904 int flags);
905
906
907
908
909
910extern int sock_common_getsockopt(struct socket *sock, int level, int optname,
911 char __user *optval, int __user *optlen);
912extern int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock,
913 struct msghdr *msg, size_t size, int flags);
914extern int sock_common_setsockopt(struct socket *sock, int level, int optname,
915 char __user *optval, int optlen);
916extern int compat_sock_common_getsockopt(struct socket *sock, int level,
917 int optname, char __user *optval, int __user *optlen);
918extern int compat_sock_common_setsockopt(struct socket *sock, int level,
919 int optname, char __user *optval, int optlen);
920
921extern void sk_common_release(struct sock *sk);
922
923
924
925
926
927
928extern void sock_init_data(struct socket *sock, struct sock *sk);
929
930
931
932
933
934
935
936
937
938static inline void sk_filter_release(struct sk_filter *fp)
939{
940 if (atomic_dec_and_test(&fp->refcnt))
941 kfree(fp);
942}
943
944static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
945{
946 unsigned int size = sk_filter_len(fp);
947
948 atomic_sub(size, &sk->sk_omem_alloc);
949 sk_filter_release(fp);
950}
951
952static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
953{
954 atomic_inc(&fp->refcnt);
955 atomic_add(sk_filter_len(fp), &sk->sk_omem_alloc);
956}
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984static inline void sock_put(struct sock *sk)
985{
986 if (atomic_dec_and_test(&sk->sk_refcnt))
987 sk_free(sk);
988}
989
990extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb,
991 const int nested);
992
993static inline void sk_set_socket(struct sock *sk, struct socket *sock)
994{
995 sk->sk_socket = sock;
996}
997
998
999
1000
1001
1002
1003
1004
1005static inline void sock_orphan(struct sock *sk)
1006{
1007 write_lock_bh(&sk->sk_callback_lock);
1008 sock_set_flag(sk, SOCK_DEAD);
1009 sk_set_socket(sk, NULL);
1010 sk->sk_sleep = NULL;
1011 write_unlock_bh(&sk->sk_callback_lock);
1012}
1013
1014static inline void sock_graft(struct sock *sk, struct socket *parent)
1015{
1016 write_lock_bh(&sk->sk_callback_lock);
1017 sk->sk_sleep = &parent->wait;
1018 parent->sk = sk;
1019 sk_set_socket(sk, parent);
1020 security_sock_graft(sk, parent);
1021 write_unlock_bh(&sk->sk_callback_lock);
1022}
1023
1024extern int sock_i_uid(struct sock *sk);
1025extern unsigned long sock_i_ino(struct sock *sk);
1026
1027static inline struct dst_entry *
1028__sk_dst_get(struct sock *sk)
1029{
1030 return sk->sk_dst_cache;
1031}
1032
1033static inline struct dst_entry *
1034sk_dst_get(struct sock *sk)
1035{
1036 struct dst_entry *dst;
1037
1038 read_lock(&sk->sk_dst_lock);
1039 dst = sk->sk_dst_cache;
1040 if (dst)
1041 dst_hold(dst);
1042 read_unlock(&sk->sk_dst_lock);
1043 return dst;
1044}
1045
1046static inline void
1047__sk_dst_set(struct sock *sk, struct dst_entry *dst)
1048{
1049 struct dst_entry *old_dst;
1050
1051 old_dst = sk->sk_dst_cache;
1052 sk->sk_dst_cache = dst;
1053 dst_release(old_dst);
1054}
1055
1056static inline void
1057sk_dst_set(struct sock *sk, struct dst_entry *dst)
1058{
1059 write_lock(&sk->sk_dst_lock);
1060 __sk_dst_set(sk, dst);
1061 write_unlock(&sk->sk_dst_lock);
1062}
1063
1064static inline void
1065__sk_dst_reset(struct sock *sk)
1066{
1067 struct dst_entry *old_dst;
1068
1069 old_dst = sk->sk_dst_cache;
1070 sk->sk_dst_cache = NULL;
1071 dst_release(old_dst);
1072}
1073
1074static inline void
1075sk_dst_reset(struct sock *sk)
1076{
1077 write_lock(&sk->sk_dst_lock);
1078 __sk_dst_reset(sk);
1079 write_unlock(&sk->sk_dst_lock);
1080}
1081
1082extern struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie);
1083
1084extern struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie);
1085
1086static inline int sk_can_gso(const struct sock *sk)
1087{
1088 return net_gso_ok(sk->sk_route_caps, sk->sk_gso_type);
1089}
1090
1091extern void sk_setup_caps(struct sock *sk, struct dst_entry *dst);
1092
1093static inline int skb_copy_to_page(struct sock *sk, char __user *from,
1094 struct sk_buff *skb, struct page *page,
1095 int off, int copy)
1096{
1097 if (skb->ip_summed == CHECKSUM_NONE) {
1098 int err = 0;
1099 __wsum csum = csum_and_copy_from_user(from,
1100 page_address(page) + off,
1101 copy, 0, &err);
1102 if (err)
1103 return err;
1104 skb->csum = csum_block_add(skb->csum, csum, skb->len);
1105 } else if (copy_from_user(page_address(page) + off, from, copy))
1106 return -EFAULT;
1107
1108 skb->len += copy;
1109 skb->data_len += copy;
1110 skb->truesize += copy;
1111 sk->sk_wmem_queued += copy;
1112 sk_mem_charge(sk, copy);
1113 return 0;
1114}
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
1126{
1127 sock_hold(sk);
1128 skb->sk = sk;
1129 skb->destructor = sock_wfree;
1130 atomic_add(skb->truesize, &sk->sk_wmem_alloc);
1131}
1132
1133static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
1134{
1135 skb->sk = sk;
1136 skb->destructor = sock_rfree;
1137 atomic_add(skb->truesize, &sk->sk_rmem_alloc);
1138 sk_mem_charge(sk, skb->truesize);
1139}
1140
1141extern void sk_reset_timer(struct sock *sk, struct timer_list* timer,
1142 unsigned long expires);
1143
1144extern void sk_stop_timer(struct sock *sk, struct timer_list* timer);
1145
1146extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
1147
1148static inline int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
1149{
1150
1151
1152
1153 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >=
1154 (unsigned)sk->sk_rcvbuf)
1155 return -ENOMEM;
1156 skb_set_owner_r(skb, sk);
1157 skb_queue_tail(&sk->sk_error_queue, skb);
1158 if (!sock_flag(sk, SOCK_DEAD))
1159 sk->sk_data_ready(sk, skb->len);
1160 return 0;
1161}
1162
1163
1164
1165
1166
1167static inline int sock_error(struct sock *sk)
1168{
1169 int err;
1170 if (likely(!sk->sk_err))
1171 return 0;
1172 err = xchg(&sk->sk_err, 0);
1173 return -err;
1174}
1175
1176static inline unsigned long sock_wspace(struct sock *sk)
1177{
1178 int amt = 0;
1179
1180 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
1181 amt = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1182 if (amt < 0)
1183 amt = 0;
1184 }
1185 return amt;
1186}
1187
1188static inline void sk_wake_async(struct sock *sk, int how, int band)
1189{
1190 if (sk->sk_socket && sk->sk_socket->fasync_list)
1191 sock_wake_async(sk->sk_socket, how, band);
1192}
1193
1194#define SOCK_MIN_SNDBUF 2048
1195#define SOCK_MIN_RCVBUF 256
1196
1197static inline void sk_stream_moderate_sndbuf(struct sock *sk)
1198{
1199 if (!(sk->sk_userlocks & SOCK_SNDBUF_LOCK)) {
1200 sk->sk_sndbuf = min(sk->sk_sndbuf, sk->sk_wmem_queued >> 1);
1201 sk->sk_sndbuf = max(sk->sk_sndbuf, SOCK_MIN_SNDBUF);
1202 }
1203}
1204
1205struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp);
1206
1207static inline struct page *sk_stream_alloc_page(struct sock *sk)
1208{
1209 struct page *page = NULL;
1210
1211 page = alloc_pages(sk->sk_allocation, 0);
1212 if (!page) {
1213 sk->sk_prot->enter_memory_pressure(sk);
1214 sk_stream_moderate_sndbuf(sk);
1215 }
1216 return page;
1217}
1218
1219
1220
1221
1222static inline int sock_writeable(const struct sock *sk)
1223{
1224 return atomic_read(&sk->sk_wmem_alloc) < (sk->sk_sndbuf >> 1);
1225}
1226
1227static inline gfp_t gfp_any(void)
1228{
1229 return in_atomic() ? GFP_ATOMIC : GFP_KERNEL;
1230}
1231
1232static inline long sock_rcvtimeo(const struct sock *sk, int noblock)
1233{
1234 return noblock ? 0 : sk->sk_rcvtimeo;
1235}
1236
1237static inline long sock_sndtimeo(const struct sock *sk, int noblock)
1238{
1239 return noblock ? 0 : sk->sk_sndtimeo;
1240}
1241
1242static inline int sock_rcvlowat(const struct sock *sk, int waitall, int len)
1243{
1244 return (waitall ? len : min_t(int, sk->sk_rcvlowat, len)) ? : 1;
1245}
1246
1247
1248
1249
1250static inline int sock_intr_errno(long timeo)
1251{
1252 return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
1253}
1254
1255extern void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
1256 struct sk_buff *skb);
1257
1258static __inline__ void
1259sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
1260{
1261 ktime_t kt = skb->tstamp;
1262
1263 if (sock_flag(sk, SOCK_RCVTSTAMP))
1264 __sock_recv_timestamp(msg, sk, skb);
1265 else
1266 sk->sk_stamp = kt;
1267}
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278#ifdef CONFIG_NET_DMA
1279static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb, int copied_early)
1280{
1281 __skb_unlink(skb, &sk->sk_receive_queue);
1282 if (!copied_early)
1283 __kfree_skb(skb);
1284 else
1285 __skb_queue_tail(&sk->sk_async_wait_queue, skb);
1286}
1287#else
1288static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb, int copied_early)
1289{
1290 __skb_unlink(skb, &sk->sk_receive_queue);
1291 __kfree_skb(skb);
1292}
1293#endif
1294
1295static inline
1296struct net *sock_net(const struct sock *sk)
1297{
1298#ifdef CONFIG_NET_NS
1299 return sk->sk_net;
1300#else
1301 return &init_net;
1302#endif
1303}
1304
1305static inline
1306void sock_net_set(struct sock *sk, struct net *net)
1307{
1308#ifdef CONFIG_NET_NS
1309 sk->sk_net = net;
1310#endif
1311}
1312
1313
1314
1315
1316
1317
1318
1319static inline void sk_change_net(struct sock *sk, struct net *net)
1320{
1321 put_net(sock_net(sk));
1322 sock_net_set(sk, hold_net(net));
1323}
1324
1325extern void sock_enable_timestamp(struct sock *sk);
1326extern int sock_get_timestamp(struct sock *, struct timeval __user *);
1327extern int sock_get_timestampns(struct sock *, struct timespec __user *);
1328
1329
1330
1331
1332extern int net_msg_warn;
1333#define NETDEBUG(fmt, args...) \
1334 do { if (net_msg_warn) printk(fmt,##args); } while (0)
1335
1336#define LIMIT_NETDEBUG(fmt, args...) \
1337 do { if (net_msg_warn && net_ratelimit()) printk(fmt,##args); } while(0)
1338
1339extern __u32 sysctl_wmem_max;
1340extern __u32 sysctl_rmem_max;
1341
1342extern void sk_init(void);
1343
1344extern int sysctl_optmem_max;
1345
1346extern __u32 sysctl_wmem_default;
1347extern __u32 sysctl_rmem_default;
1348
1349#endif
1350