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