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