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/hardirq.h>
44#include <linux/kernel.h>
45#include <linux/list.h>
46#include <linux/list_nulls.h>
47#include <linux/timer.h>
48#include <linux/cache.h>
49#include <linux/lockdep.h>
50#include <linux/netdevice.h>
51#include <linux/skbuff.h>
52#include <linux/mm.h>
53#include <linux/security.h>
54#include <linux/slab.h>
55#include <linux/uaccess.h>
56
57#include <linux/filter.h>
58#include <linux/rculist_nulls.h>
59#include <linux/poll.h>
60
61#include <linux/atomic.h>
62#include <net/dst.h>
63#include <net/checksum.h>
64
65
66
67
68
69
70
71
72#define SOCK_DEBUGGING
73#ifdef SOCK_DEBUGGING
74#define SOCK_DEBUG(sk, msg...) do { if ((sk) && sock_flag((sk), SOCK_DBG)) \
75 printk(KERN_DEBUG msg); } while (0)
76#else
77
78static inline __printf(2, 3)
79void SOCK_DEBUG(struct sock *sk, const char *msg, ...)
80{
81}
82#endif
83
84
85
86
87
88typedef struct {
89 spinlock_t slock;
90 int owned;
91 wait_queue_head_t wq;
92
93
94
95
96
97
98#ifdef CONFIG_DEBUG_LOCK_ALLOC
99 struct lockdep_map dep_map;
100#endif
101} socket_lock_t;
102
103struct sock;
104struct proto;
105struct net;
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129struct sock_common {
130
131
132
133 __be32 skc_daddr;
134 __be32 skc_rcv_saddr;
135
136 union {
137 unsigned int skc_hash;
138 __u16 skc_u16hashes[2];
139 };
140 unsigned short skc_family;
141 volatile unsigned char skc_state;
142 unsigned char skc_reuse;
143 int skc_bound_dev_if;
144 union {
145 struct hlist_node skc_bind_node;
146 struct hlist_nulls_node skc_portaddr_node;
147 };
148 struct proto *skc_prot;
149#ifdef CONFIG_NET_NS
150 struct net *skc_net;
151#endif
152
153
154
155
156
157 int skc_dontcopy_begin[0];
158
159 union {
160 struct hlist_node skc_node;
161 struct hlist_nulls_node skc_nulls_node;
162 };
163 int skc_tx_queue_mapping;
164 atomic_t skc_refcnt;
165
166 int skc_dontcopy_end[0];
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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238struct sock {
239
240
241
242
243 struct sock_common __sk_common;
244#define sk_node __sk_common.skc_node
245#define sk_nulls_node __sk_common.skc_nulls_node
246#define sk_refcnt __sk_common.skc_refcnt
247#define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping
248
249#define sk_dontcopy_begin __sk_common.skc_dontcopy_begin
250#define sk_dontcopy_end __sk_common.skc_dontcopy_end
251#define sk_hash __sk_common.skc_hash
252#define sk_family __sk_common.skc_family
253#define sk_state __sk_common.skc_state
254#define sk_reuse __sk_common.skc_reuse
255#define sk_bound_dev_if __sk_common.skc_bound_dev_if
256#define sk_bind_node __sk_common.skc_bind_node
257#define sk_prot __sk_common.skc_prot
258#define sk_net __sk_common.skc_net
259 socket_lock_t sk_lock;
260 struct sk_buff_head sk_receive_queue;
261
262
263
264
265
266
267
268
269 struct {
270 atomic_t rmem_alloc;
271 int len;
272 struct sk_buff *head;
273 struct sk_buff *tail;
274 } sk_backlog;
275#define sk_rmem_alloc sk_backlog.rmem_alloc
276 int sk_forward_alloc;
277#ifdef CONFIG_RPS
278 __u32 sk_rxhash;
279#endif
280 atomic_t sk_drops;
281 int sk_rcvbuf;
282
283 struct sk_filter __rcu *sk_filter;
284 struct socket_wq __rcu *sk_wq;
285
286#ifdef CONFIG_NET_DMA
287 struct sk_buff_head sk_async_wait_queue;
288#endif
289
290#ifdef CONFIG_XFRM
291 struct xfrm_policy *sk_policy[2];
292#endif
293 unsigned long sk_flags;
294 struct dst_entry *sk_dst_cache;
295 spinlock_t sk_dst_lock;
296 atomic_t sk_wmem_alloc;
297 atomic_t sk_omem_alloc;
298 int sk_sndbuf;
299 struct sk_buff_head sk_write_queue;
300 kmemcheck_bitfield_begin(flags);
301 unsigned int sk_shutdown : 2,
302 sk_no_check : 2,
303 sk_userlocks : 4,
304 sk_protocol : 8,
305 sk_type : 16;
306 kmemcheck_bitfield_end(flags);
307 int sk_wmem_queued;
308 gfp_t sk_allocation;
309 int sk_route_caps;
310 int sk_route_nocaps;
311 int sk_gso_type;
312 unsigned int sk_gso_max_size;
313 int sk_rcvlowat;
314 unsigned long sk_lingertime;
315 struct sk_buff_head sk_error_queue;
316 struct proto *sk_prot_creator;
317 rwlock_t sk_callback_lock;
318 int sk_err,
319 sk_err_soft;
320 unsigned short sk_ack_backlog;
321 unsigned short sk_max_ack_backlog;
322 __u32 sk_priority;
323 struct pid *sk_peer_pid;
324 const struct cred *sk_peer_cred;
325 long sk_rcvtimeo;
326 long sk_sndtimeo;
327 void *sk_protinfo;
328 struct timer_list sk_timer;
329 ktime_t sk_stamp;
330 struct socket *sk_socket;
331 void *sk_user_data;
332 struct page *sk_sndmsg_page;
333 struct sk_buff *sk_send_head;
334 __u32 sk_sndmsg_off;
335 int sk_write_pending;
336#ifdef CONFIG_SECURITY
337 void *sk_security;
338#endif
339 __u32 sk_mark;
340 u32 sk_classid;
341 void (*sk_state_change)(struct sock *sk);
342 void (*sk_data_ready)(struct sock *sk, int bytes);
343 void (*sk_write_space)(struct sock *sk);
344 void (*sk_error_report)(struct sock *sk);
345 int (*sk_backlog_rcv)(struct sock *sk,
346 struct sk_buff *skb);
347 void (*sk_destruct)(struct sock *sk);
348};
349
350
351
352
353static inline struct sock *sk_entry(const struct hlist_node *node)
354{
355 return hlist_entry(node, struct sock, sk_node);
356}
357
358static inline struct sock *__sk_head(const struct hlist_head *head)
359{
360 return hlist_entry(head->first, struct sock, sk_node);
361}
362
363static inline struct sock *sk_head(const struct hlist_head *head)
364{
365 return hlist_empty(head) ? NULL : __sk_head(head);
366}
367
368static inline struct sock *__sk_nulls_head(const struct hlist_nulls_head *head)
369{
370 return hlist_nulls_entry(head->first, struct sock, sk_nulls_node);
371}
372
373static inline struct sock *sk_nulls_head(const struct hlist_nulls_head *head)
374{
375 return hlist_nulls_empty(head) ? NULL : __sk_nulls_head(head);
376}
377
378static inline struct sock *sk_next(const struct sock *sk)
379{
380 return sk->sk_node.next ?
381 hlist_entry(sk->sk_node.next, struct sock, sk_node) : NULL;
382}
383
384static inline struct sock *sk_nulls_next(const struct sock *sk)
385{
386 return (!is_a_nulls(sk->sk_nulls_node.next)) ?
387 hlist_nulls_entry(sk->sk_nulls_node.next,
388 struct sock, sk_nulls_node) :
389 NULL;
390}
391
392static inline int sk_unhashed(const struct sock *sk)
393{
394 return hlist_unhashed(&sk->sk_node);
395}
396
397static inline int sk_hashed(const struct sock *sk)
398{
399 return !sk_unhashed(sk);
400}
401
402static __inline__ void sk_node_init(struct hlist_node *node)
403{
404 node->pprev = NULL;
405}
406
407static __inline__ void sk_nulls_node_init(struct hlist_nulls_node *node)
408{
409 node->pprev = NULL;
410}
411
412static __inline__ void __sk_del_node(struct sock *sk)
413{
414 __hlist_del(&sk->sk_node);
415}
416
417
418static __inline__ int __sk_del_node_init(struct sock *sk)
419{
420 if (sk_hashed(sk)) {
421 __sk_del_node(sk);
422 sk_node_init(&sk->sk_node);
423 return 1;
424 }
425 return 0;
426}
427
428
429
430
431
432
433
434static inline void sock_hold(struct sock *sk)
435{
436 atomic_inc(&sk->sk_refcnt);
437}
438
439
440
441
442static inline void __sock_put(struct sock *sk)
443{
444 atomic_dec(&sk->sk_refcnt);
445}
446
447static __inline__ int sk_del_node_init(struct sock *sk)
448{
449 int rc = __sk_del_node_init(sk);
450
451 if (rc) {
452
453 WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
454 __sock_put(sk);
455 }
456 return rc;
457}
458#define sk_del_node_init_rcu(sk) sk_del_node_init(sk)
459
460static __inline__ int __sk_nulls_del_node_init_rcu(struct sock *sk)
461{
462 if (sk_hashed(sk)) {
463 hlist_nulls_del_init_rcu(&sk->sk_nulls_node);
464 return 1;
465 }
466 return 0;
467}
468
469static __inline__ int sk_nulls_del_node_init_rcu(struct sock *sk)
470{
471 int rc = __sk_nulls_del_node_init_rcu(sk);
472
473 if (rc) {
474
475 WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
476 __sock_put(sk);
477 }
478 return rc;
479}
480
481static __inline__ void __sk_add_node(struct sock *sk, struct hlist_head *list)
482{
483 hlist_add_head(&sk->sk_node, list);
484}
485
486static __inline__ void sk_add_node(struct sock *sk, struct hlist_head *list)
487{
488 sock_hold(sk);
489 __sk_add_node(sk, list);
490}
491
492static __inline__ void sk_add_node_rcu(struct sock *sk, struct hlist_head *list)
493{
494 sock_hold(sk);
495 hlist_add_head_rcu(&sk->sk_node, list);
496}
497
498static __inline__ void __sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
499{
500 hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list);
501}
502
503static __inline__ void sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list)
504{
505 sock_hold(sk);
506 __sk_nulls_add_node_rcu(sk, list);
507}
508
509static __inline__ void __sk_del_bind_node(struct sock *sk)
510{
511 __hlist_del(&sk->sk_bind_node);
512}
513
514static __inline__ void sk_add_bind_node(struct sock *sk,
515 struct hlist_head *list)
516{
517 hlist_add_head(&sk->sk_bind_node, list);
518}
519
520#define sk_for_each(__sk, node, list) \
521 hlist_for_each_entry(__sk, node, list, sk_node)
522#define sk_for_each_rcu(__sk, node, list) \
523 hlist_for_each_entry_rcu(__sk, node, list, sk_node)
524#define sk_nulls_for_each(__sk, node, list) \
525 hlist_nulls_for_each_entry(__sk, node, list, sk_nulls_node)
526#define sk_nulls_for_each_rcu(__sk, node, list) \
527 hlist_nulls_for_each_entry_rcu(__sk, node, list, sk_nulls_node)
528#define sk_for_each_from(__sk, node) \
529 if (__sk && ({ node = &(__sk)->sk_node; 1; })) \
530 hlist_for_each_entry_from(__sk, node, sk_node)
531#define sk_nulls_for_each_from(__sk, node) \
532 if (__sk && ({ node = &(__sk)->sk_nulls_node; 1; })) \
533 hlist_nulls_for_each_entry_from(__sk, node, sk_nulls_node)
534#define sk_for_each_safe(__sk, node, tmp, list) \
535 hlist_for_each_entry_safe(__sk, node, tmp, list, sk_node)
536#define sk_for_each_bound(__sk, node, list) \
537 hlist_for_each_entry(__sk, node, list, sk_bind_node)
538
539
540enum sock_flags {
541 SOCK_DEAD,
542 SOCK_DONE,
543 SOCK_URGINLINE,
544 SOCK_KEEPOPEN,
545 SOCK_LINGER,
546 SOCK_DESTROY,
547 SOCK_BROADCAST,
548 SOCK_TIMESTAMP,
549 SOCK_ZAPPED,
550 SOCK_USE_WRITE_QUEUE,
551 SOCK_DBG,
552 SOCK_RCVTSTAMP,
553 SOCK_RCVTSTAMPNS,
554 SOCK_LOCALROUTE,
555 SOCK_QUEUE_SHRUNK,
556 SOCK_TIMESTAMPING_TX_HARDWARE,
557 SOCK_TIMESTAMPING_TX_SOFTWARE,
558 SOCK_TIMESTAMPING_RX_HARDWARE,
559 SOCK_TIMESTAMPING_RX_SOFTWARE,
560 SOCK_TIMESTAMPING_SOFTWARE,
561 SOCK_TIMESTAMPING_RAW_HARDWARE,
562 SOCK_TIMESTAMPING_SYS_HARDWARE,
563 SOCK_FASYNC,
564 SOCK_RXQ_OVFL,
565 SOCK_ZEROCOPY,
566};
567
568static inline void sock_copy_flags(struct sock *nsk, struct sock *osk)
569{
570 nsk->sk_flags = osk->sk_flags;
571}
572
573static inline void sock_set_flag(struct sock *sk, enum sock_flags flag)
574{
575 __set_bit(flag, &sk->sk_flags);
576}
577
578static inline void sock_reset_flag(struct sock *sk, enum sock_flags flag)
579{
580 __clear_bit(flag, &sk->sk_flags);
581}
582
583static inline int sock_flag(struct sock *sk, enum sock_flags flag)
584{
585 return test_bit(flag, &sk->sk_flags);
586}
587
588static inline void sk_acceptq_removed(struct sock *sk)
589{
590 sk->sk_ack_backlog--;
591}
592
593static inline void sk_acceptq_added(struct sock *sk)
594{
595 sk->sk_ack_backlog++;
596}
597
598static inline int sk_acceptq_is_full(struct sock *sk)
599{
600 return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
601}
602
603
604
605
606static inline int sk_stream_min_wspace(struct sock *sk)
607{
608 return sk->sk_wmem_queued >> 1;
609}
610
611static inline int sk_stream_wspace(struct sock *sk)
612{
613 return sk->sk_sndbuf - sk->sk_wmem_queued;
614}
615
616extern void sk_stream_write_space(struct sock *sk);
617
618static inline int sk_stream_memory_free(struct sock *sk)
619{
620 return sk->sk_wmem_queued < sk->sk_sndbuf;
621}
622
623
624static inline void __sk_add_backlog(struct sock *sk, struct sk_buff *skb)
625{
626
627 skb_dst_force(skb);
628
629 if (!sk->sk_backlog.tail)
630 sk->sk_backlog.head = skb;
631 else
632 sk->sk_backlog.tail->next = skb;
633
634 sk->sk_backlog.tail = skb;
635 skb->next = NULL;
636}
637
638
639
640
641
642
643static inline bool sk_rcvqueues_full(const struct sock *sk, const struct sk_buff *skb)
644{
645 unsigned int qsize = sk->sk_backlog.len + atomic_read(&sk->sk_rmem_alloc);
646
647 return qsize > sk->sk_rcvbuf;
648}
649
650
651static inline __must_check int sk_add_backlog(struct sock *sk, struct sk_buff *skb)
652{
653 if (sk_rcvqueues_full(sk, skb))
654 return -ENOBUFS;
655
656 __sk_add_backlog(sk, skb);
657 sk->sk_backlog.len += skb->truesize;
658 return 0;
659}
660
661static inline int sk_backlog_rcv(struct sock *sk, struct sk_buff *skb)
662{
663 return sk->sk_backlog_rcv(sk, skb);
664}
665
666static inline void sock_rps_record_flow(const struct sock *sk)
667{
668#ifdef CONFIG_RPS
669 struct rps_sock_flow_table *sock_flow_table;
670
671 rcu_read_lock();
672 sock_flow_table = rcu_dereference(rps_sock_flow_table);
673 rps_record_sock_flow(sock_flow_table, sk->sk_rxhash);
674 rcu_read_unlock();
675#endif
676}
677
678static inline void sock_rps_reset_flow(const struct sock *sk)
679{
680#ifdef CONFIG_RPS
681 struct rps_sock_flow_table *sock_flow_table;
682
683 rcu_read_lock();
684 sock_flow_table = rcu_dereference(rps_sock_flow_table);
685 rps_reset_sock_flow(sock_flow_table, sk->sk_rxhash);
686 rcu_read_unlock();
687#endif
688}
689
690static inline void sock_rps_save_rxhash(struct sock *sk,
691 const struct sk_buff *skb)
692{
693#ifdef CONFIG_RPS
694 if (unlikely(sk->sk_rxhash != skb->rxhash)) {
695 sock_rps_reset_flow(sk);
696 sk->sk_rxhash = skb->rxhash;
697 }
698#endif
699}
700
701static inline void sock_rps_reset_rxhash(struct sock *sk)
702{
703#ifdef CONFIG_RPS
704 sock_rps_reset_flow(sk);
705 sk->sk_rxhash = 0;
706#endif
707}
708
709#define sk_wait_event(__sk, __timeo, __condition) \
710 ({ int __rc; \
711 release_sock(__sk); \
712 __rc = __condition; \
713 if (!__rc) { \
714 *(__timeo) = schedule_timeout(*(__timeo)); \
715 } \
716 lock_sock(__sk); \
717 __rc = __condition; \
718 __rc; \
719 })
720
721extern int sk_stream_wait_connect(struct sock *sk, long *timeo_p);
722extern int sk_stream_wait_memory(struct sock *sk, long *timeo_p);
723extern void sk_stream_wait_close(struct sock *sk, long timeo_p);
724extern int sk_stream_error(struct sock *sk, int flags, int err);
725extern void sk_stream_kill_queues(struct sock *sk);
726
727extern int sk_wait_data(struct sock *sk, long *timeo);
728
729struct request_sock_ops;
730struct timewait_sock_ops;
731struct inet_hashinfo;
732struct raw_hashinfo;
733struct module;
734
735
736
737
738
739struct proto {
740 void (*close)(struct sock *sk,
741 long timeout);
742 int (*connect)(struct sock *sk,
743 struct sockaddr *uaddr,
744 int addr_len);
745 int (*disconnect)(struct sock *sk, int flags);
746
747 struct sock * (*accept) (struct sock *sk, int flags, int *err);
748
749 int (*ioctl)(struct sock *sk, int cmd,
750 unsigned long arg);
751 int (*init)(struct sock *sk);
752 void (*destroy)(struct sock *sk);
753 void (*shutdown)(struct sock *sk, int how);
754 int (*setsockopt)(struct sock *sk, int level,
755 int optname, char __user *optval,
756 unsigned int optlen);
757 int (*getsockopt)(struct sock *sk, int level,
758 int optname, char __user *optval,
759 int __user *option);
760#ifdef CONFIG_COMPAT
761 int (*compat_setsockopt)(struct sock *sk,
762 int level,
763 int optname, char __user *optval,
764 unsigned int optlen);
765 int (*compat_getsockopt)(struct sock *sk,
766 int level,
767 int optname, char __user *optval,
768 int __user *option);
769 int (*compat_ioctl)(struct sock *sk,
770 unsigned int cmd, unsigned long arg);
771#endif
772 int (*sendmsg)(struct kiocb *iocb, struct sock *sk,
773 struct msghdr *msg, size_t len);
774 int (*recvmsg)(struct kiocb *iocb, struct sock *sk,
775 struct msghdr *msg,
776 size_t len, int noblock, int flags,
777 int *addr_len);
778 int (*sendpage)(struct sock *sk, struct page *page,
779 int offset, size_t size, int flags);
780 int (*bind)(struct sock *sk,
781 struct sockaddr *uaddr, int addr_len);
782
783 int (*backlog_rcv) (struct sock *sk,
784 struct sk_buff *skb);
785
786
787 void (*hash)(struct sock *sk);
788 void (*unhash)(struct sock *sk);
789 void (*rehash)(struct sock *sk);
790 int (*get_port)(struct sock *sk, unsigned short snum);
791 void (*clear_sk)(struct sock *sk, int size);
792
793
794#ifdef CONFIG_PROC_FS
795 unsigned int inuse_idx;
796#endif
797
798
799 void (*enter_memory_pressure)(struct sock *sk);
800 atomic_long_t *memory_allocated;
801 struct percpu_counter *sockets_allocated;
802
803
804
805
806
807
808 int *memory_pressure;
809 long *sysctl_mem;
810 int *sysctl_wmem;
811 int *sysctl_rmem;
812 int max_header;
813 bool no_autobind;
814
815 struct kmem_cache *slab;
816 unsigned int obj_size;
817 int slab_flags;
818
819 struct percpu_counter *orphan_count;
820
821 struct request_sock_ops *rsk_prot;
822 struct timewait_sock_ops *twsk_prot;
823
824 union {
825 struct inet_hashinfo *hashinfo;
826 struct udp_table *udp_table;
827 struct raw_hashinfo *raw_hash;
828 } h;
829
830 struct module *owner;
831
832 char name[32];
833
834 struct list_head node;
835#ifdef SOCK_REFCNT_DEBUG
836 atomic_t socks;
837#endif
838};
839
840extern int proto_register(struct proto *prot, int alloc_slab);
841extern void proto_unregister(struct proto *prot);
842
843#ifdef SOCK_REFCNT_DEBUG
844static inline void sk_refcnt_debug_inc(struct sock *sk)
845{
846 atomic_inc(&sk->sk_prot->socks);
847}
848
849static inline void sk_refcnt_debug_dec(struct sock *sk)
850{
851 atomic_dec(&sk->sk_prot->socks);
852 printk(KERN_DEBUG "%s socket %p released, %d are still alive\n",
853 sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks));
854}
855
856static inline void sk_refcnt_debug_release(const struct sock *sk)
857{
858 if (atomic_read(&sk->sk_refcnt) != 1)
859 printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n",
860 sk->sk_prot->name, sk, atomic_read(&sk->sk_refcnt));
861}
862#else
863#define sk_refcnt_debug_inc(sk) do { } while (0)
864#define sk_refcnt_debug_dec(sk) do { } while (0)
865#define sk_refcnt_debug_release(sk) do { } while (0)
866#endif
867
868
869#ifdef CONFIG_PROC_FS
870
871extern void sock_prot_inuse_add(struct net *net, struct proto *prot, int inc);
872extern int sock_prot_inuse_get(struct net *net, struct proto *proto);
873#else
874static void inline sock_prot_inuse_add(struct net *net, struct proto *prot,
875 int inc)
876{
877}
878#endif
879
880
881
882
883
884static inline void __sk_prot_rehash(struct sock *sk)
885{
886 sk->sk_prot->unhash(sk);
887 sk->sk_prot->hash(sk);
888}
889
890void sk_prot_clear_portaddr_nulls(struct sock *sk, int size);
891
892
893#define SOCK_DESTROY_TIME (10*HZ)
894
895
896#define PROT_SOCK 1024
897
898#define SHUTDOWN_MASK 3
899#define RCV_SHUTDOWN 1
900#define SEND_SHUTDOWN 2
901
902#define SOCK_SNDBUF_LOCK 1
903#define SOCK_RCVBUF_LOCK 2
904#define SOCK_BINDADDR_LOCK 4
905#define SOCK_BINDPORT_LOCK 8
906
907
908struct sock_iocb {
909 struct list_head list;
910
911 int flags;
912 int size;
913 struct socket *sock;
914 struct sock *sk;
915 struct scm_cookie *scm;
916 struct msghdr *msg, async_msg;
917 struct kiocb *kiocb;
918};
919
920static inline struct sock_iocb *kiocb_to_siocb(struct kiocb *iocb)
921{
922 return (struct sock_iocb *)iocb->private;
923}
924
925static inline struct kiocb *siocb_to_kiocb(struct sock_iocb *si)
926{
927 return si->kiocb;
928}
929
930struct socket_alloc {
931 struct socket socket;
932 struct inode vfs_inode;
933};
934
935static inline struct socket *SOCKET_I(struct inode *inode)
936{
937 return &container_of(inode, struct socket_alloc, vfs_inode)->socket;
938}
939
940static inline struct inode *SOCK_INODE(struct socket *socket)
941{
942 return &container_of(socket, struct socket_alloc, socket)->vfs_inode;
943}
944
945
946
947
948extern int __sk_mem_schedule(struct sock *sk, int size, int kind);
949extern void __sk_mem_reclaim(struct sock *sk);
950
951#define SK_MEM_QUANTUM ((int)PAGE_SIZE)
952#define SK_MEM_QUANTUM_SHIFT ilog2(SK_MEM_QUANTUM)
953#define SK_MEM_SEND 0
954#define SK_MEM_RECV 1
955
956static inline int sk_mem_pages(int amt)
957{
958 return (amt + SK_MEM_QUANTUM - 1) >> SK_MEM_QUANTUM_SHIFT;
959}
960
961static inline int sk_has_account(struct sock *sk)
962{
963
964 return !!sk->sk_prot->memory_allocated;
965}
966
967static inline int sk_wmem_schedule(struct sock *sk, int size)
968{
969 if (!sk_has_account(sk))
970 return 1;
971 return size <= sk->sk_forward_alloc ||
972 __sk_mem_schedule(sk, size, SK_MEM_SEND);
973}
974
975static inline int sk_rmem_schedule(struct sock *sk, int size)
976{
977 if (!sk_has_account(sk))
978 return 1;
979 return size <= sk->sk_forward_alloc ||
980 __sk_mem_schedule(sk, size, SK_MEM_RECV);
981}
982
983static inline void sk_mem_reclaim(struct sock *sk)
984{
985 if (!sk_has_account(sk))
986 return;
987 if (sk->sk_forward_alloc >= SK_MEM_QUANTUM)
988 __sk_mem_reclaim(sk);
989}
990
991static inline void sk_mem_reclaim_partial(struct sock *sk)
992{
993 if (!sk_has_account(sk))
994 return;
995 if (sk->sk_forward_alloc > SK_MEM_QUANTUM)
996 __sk_mem_reclaim(sk);
997}
998
999static inline void sk_mem_charge(struct sock *sk, int size)
1000{
1001 if (!sk_has_account(sk))
1002 return;
1003 sk->sk_forward_alloc -= size;
1004}
1005
1006static inline void sk_mem_uncharge(struct sock *sk, int size)
1007{
1008 if (!sk_has_account(sk))
1009 return;
1010 sk->sk_forward_alloc += size;
1011}
1012
1013static inline void sk_wmem_free_skb(struct sock *sk, struct sk_buff *skb)
1014{
1015 sock_set_flag(sk, SOCK_QUEUE_SHRUNK);
1016 sk->sk_wmem_queued -= skb->truesize;
1017 sk_mem_uncharge(sk, skb->truesize);
1018 __kfree_skb(skb);
1019}
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034#define sock_owned_by_user(sk) ((sk)->sk_lock.owned)
1035
1036
1037
1038
1039
1040
1041
1042
1043#define sock_lock_init_class_and_name(sk, sname, skey, name, key) \
1044do { \
1045 sk->sk_lock.owned = 0; \
1046 init_waitqueue_head(&sk->sk_lock.wq); \
1047 spin_lock_init(&(sk)->sk_lock.slock); \
1048 debug_check_no_locks_freed((void *)&(sk)->sk_lock, \
1049 sizeof((sk)->sk_lock)); \
1050 lockdep_set_class_and_name(&(sk)->sk_lock.slock, \
1051 (skey), (sname)); \
1052 lockdep_init_map(&(sk)->sk_lock.dep_map, (name), (key), 0); \
1053} while (0)
1054
1055extern void lock_sock_nested(struct sock *sk, int subclass);
1056
1057static inline void lock_sock(struct sock *sk)
1058{
1059 lock_sock_nested(sk, 0);
1060}
1061
1062extern void release_sock(struct sock *sk);
1063
1064
1065#define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock))
1066#define bh_lock_sock_nested(__sk) \
1067 spin_lock_nested(&((__sk)->sk_lock.slock), \
1068 SINGLE_DEPTH_NESTING)
1069#define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock))
1070
1071extern bool lock_sock_fast(struct sock *sk);
1072
1073
1074
1075
1076
1077
1078
1079
1080static inline void unlock_sock_fast(struct sock *sk, bool slow)
1081{
1082 if (slow)
1083 release_sock(sk);
1084 else
1085 spin_unlock_bh(&sk->sk_lock.slock);
1086}
1087
1088
1089extern struct sock *sk_alloc(struct net *net, int family,
1090 gfp_t priority,
1091 struct proto *prot);
1092extern void sk_free(struct sock *sk);
1093extern void sk_release_kernel(struct sock *sk);
1094extern struct sock *sk_clone(const struct sock *sk,
1095 const gfp_t priority);
1096
1097extern struct sk_buff *sock_wmalloc(struct sock *sk,
1098 unsigned long size, int force,
1099 gfp_t priority);
1100extern struct sk_buff *sock_rmalloc(struct sock *sk,
1101 unsigned long size, int force,
1102 gfp_t priority);
1103extern void sock_wfree(struct sk_buff *skb);
1104extern void sock_rfree(struct sk_buff *skb);
1105
1106extern int sock_setsockopt(struct socket *sock, int level,
1107 int op, char __user *optval,
1108 unsigned int optlen);
1109
1110extern int sock_getsockopt(struct socket *sock, int level,
1111 int op, char __user *optval,
1112 int __user *optlen);
1113extern struct sk_buff *sock_alloc_send_skb(struct sock *sk,
1114 unsigned long size,
1115 int noblock,
1116 int *errcode);
1117extern struct sk_buff *sock_alloc_send_pskb(struct sock *sk,
1118 unsigned long header_len,
1119 unsigned long data_len,
1120 int noblock,
1121 int *errcode);
1122extern void *sock_kmalloc(struct sock *sk, int size,
1123 gfp_t priority);
1124extern void sock_kfree_s(struct sock *sk, void *mem, int size);
1125extern void sk_send_sigurg(struct sock *sk);
1126
1127#ifdef CONFIG_CGROUPS
1128extern void sock_update_classid(struct sock *sk);
1129#else
1130static inline void sock_update_classid(struct sock *sk)
1131{
1132}
1133#endif
1134
1135
1136
1137
1138
1139extern int sock_no_bind(struct socket *,
1140 struct sockaddr *, int);
1141extern int sock_no_connect(struct socket *,
1142 struct sockaddr *, int, int);
1143extern int sock_no_socketpair(struct socket *,
1144 struct socket *);
1145extern int sock_no_accept(struct socket *,
1146 struct socket *, int);
1147extern int sock_no_getname(struct socket *,
1148 struct sockaddr *, int *, int);
1149extern unsigned int sock_no_poll(struct file *, struct socket *,
1150 struct poll_table_struct *);
1151extern int sock_no_ioctl(struct socket *, unsigned int,
1152 unsigned long);
1153extern int sock_no_listen(struct socket *, int);
1154extern int sock_no_shutdown(struct socket *, int);
1155extern int sock_no_getsockopt(struct socket *, int , int,
1156 char __user *, int __user *);
1157extern int sock_no_setsockopt(struct socket *, int, int,
1158 char __user *, unsigned int);
1159extern int sock_no_sendmsg(struct kiocb *, struct socket *,
1160 struct msghdr *, size_t);
1161extern int sock_no_recvmsg(struct kiocb *, struct socket *,
1162 struct msghdr *, size_t, int);
1163extern int sock_no_mmap(struct file *file,
1164 struct socket *sock,
1165 struct vm_area_struct *vma);
1166extern ssize_t sock_no_sendpage(struct socket *sock,
1167 struct page *page,
1168 int offset, size_t size,
1169 int flags);
1170
1171
1172
1173
1174
1175extern int sock_common_getsockopt(struct socket *sock, int level, int optname,
1176 char __user *optval, int __user *optlen);
1177extern int sock_common_recvmsg(struct kiocb *iocb, struct socket *sock,
1178 struct msghdr *msg, size_t size, int flags);
1179extern int sock_common_setsockopt(struct socket *sock, int level, int optname,
1180 char __user *optval, unsigned int optlen);
1181extern int compat_sock_common_getsockopt(struct socket *sock, int level,
1182 int optname, char __user *optval, int __user *optlen);
1183extern int compat_sock_common_setsockopt(struct socket *sock, int level,
1184 int optname, char __user *optval, unsigned int optlen);
1185
1186extern void sk_common_release(struct sock *sk);
1187
1188
1189
1190
1191
1192
1193extern void sock_init_data(struct socket *sock, struct sock *sk);
1194
1195extern void sk_filter_release_rcu(struct rcu_head *rcu);
1196
1197
1198
1199
1200
1201
1202
1203
1204static inline void sk_filter_release(struct sk_filter *fp)
1205{
1206 if (atomic_dec_and_test(&fp->refcnt))
1207 call_rcu(&fp->rcu, sk_filter_release_rcu);
1208}
1209
1210static inline void sk_filter_uncharge(struct sock *sk, struct sk_filter *fp)
1211{
1212 unsigned int size = sk_filter_len(fp);
1213
1214 atomic_sub(size, &sk->sk_omem_alloc);
1215 sk_filter_release(fp);
1216}
1217
1218static inline void sk_filter_charge(struct sock *sk, struct sk_filter *fp)
1219{
1220 atomic_inc(&fp->refcnt);
1221 atomic_add(sk_filter_len(fp), &sk->sk_omem_alloc);
1222}
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250static inline void sock_put(struct sock *sk)
1251{
1252 if (atomic_dec_and_test(&sk->sk_refcnt))
1253 sk_free(sk);
1254}
1255
1256extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb,
1257 const int nested);
1258
1259static inline void sk_tx_queue_set(struct sock *sk, int tx_queue)
1260{
1261 sk->sk_tx_queue_mapping = tx_queue;
1262}
1263
1264static inline void sk_tx_queue_clear(struct sock *sk)
1265{
1266 sk->sk_tx_queue_mapping = -1;
1267}
1268
1269static inline int sk_tx_queue_get(const struct sock *sk)
1270{
1271 return sk ? sk->sk_tx_queue_mapping : -1;
1272}
1273
1274static inline void sk_set_socket(struct sock *sk, struct socket *sock)
1275{
1276 sk_tx_queue_clear(sk);
1277 sk->sk_socket = sock;
1278}
1279
1280static inline wait_queue_head_t *sk_sleep(struct sock *sk)
1281{
1282 BUILD_BUG_ON(offsetof(struct socket_wq, wait) != 0);
1283 return &rcu_dereference_raw(sk->sk_wq)->wait;
1284}
1285
1286
1287
1288
1289
1290
1291
1292static inline void sock_orphan(struct sock *sk)
1293{
1294 write_lock_bh(&sk->sk_callback_lock);
1295 sock_set_flag(sk, SOCK_DEAD);
1296 sk_set_socket(sk, NULL);
1297 sk->sk_wq = NULL;
1298 write_unlock_bh(&sk->sk_callback_lock);
1299}
1300
1301static inline void sock_graft(struct sock *sk, struct socket *parent)
1302{
1303 write_lock_bh(&sk->sk_callback_lock);
1304 sk->sk_wq = parent->wq;
1305 parent->sk = sk;
1306 sk_set_socket(sk, parent);
1307 security_sock_graft(sk, parent);
1308 write_unlock_bh(&sk->sk_callback_lock);
1309}
1310
1311extern int sock_i_uid(struct sock *sk);
1312extern unsigned long sock_i_ino(struct sock *sk);
1313
1314static inline struct dst_entry *
1315__sk_dst_get(struct sock *sk)
1316{
1317 return rcu_dereference_check(sk->sk_dst_cache, sock_owned_by_user(sk) ||
1318 lockdep_is_held(&sk->sk_lock.slock));
1319}
1320
1321static inline struct dst_entry *
1322sk_dst_get(struct sock *sk)
1323{
1324 struct dst_entry *dst;
1325
1326 rcu_read_lock();
1327 dst = rcu_dereference(sk->sk_dst_cache);
1328 if (dst)
1329 dst_hold(dst);
1330 rcu_read_unlock();
1331 return dst;
1332}
1333
1334extern void sk_reset_txq(struct sock *sk);
1335
1336static inline void dst_negative_advice(struct sock *sk)
1337{
1338 struct dst_entry *ndst, *dst = __sk_dst_get(sk);
1339
1340 if (dst && dst->ops->negative_advice) {
1341 ndst = dst->ops->negative_advice(dst);
1342
1343 if (ndst != dst) {
1344 rcu_assign_pointer(sk->sk_dst_cache, ndst);
1345 sk_reset_txq(sk);
1346 }
1347 }
1348}
1349
1350static inline void
1351__sk_dst_set(struct sock *sk, struct dst_entry *dst)
1352{
1353 struct dst_entry *old_dst;
1354
1355 sk_tx_queue_clear(sk);
1356
1357
1358
1359
1360 old_dst = rcu_dereference_raw(sk->sk_dst_cache);
1361 rcu_assign_pointer(sk->sk_dst_cache, dst);
1362 dst_release(old_dst);
1363}
1364
1365static inline void
1366sk_dst_set(struct sock *sk, struct dst_entry *dst)
1367{
1368 spin_lock(&sk->sk_dst_lock);
1369 __sk_dst_set(sk, dst);
1370 spin_unlock(&sk->sk_dst_lock);
1371}
1372
1373static inline void
1374__sk_dst_reset(struct sock *sk)
1375{
1376 __sk_dst_set(sk, NULL);
1377}
1378
1379static inline void
1380sk_dst_reset(struct sock *sk)
1381{
1382 spin_lock(&sk->sk_dst_lock);
1383 __sk_dst_reset(sk);
1384 spin_unlock(&sk->sk_dst_lock);
1385}
1386
1387extern struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie);
1388
1389extern struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie);
1390
1391static inline int sk_can_gso(const struct sock *sk)
1392{
1393 return net_gso_ok(sk->sk_route_caps, sk->sk_gso_type);
1394}
1395
1396extern void sk_setup_caps(struct sock *sk, struct dst_entry *dst);
1397
1398static inline void sk_nocaps_add(struct sock *sk, int flags)
1399{
1400 sk->sk_route_nocaps |= flags;
1401 sk->sk_route_caps &= ~flags;
1402}
1403
1404static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
1405 char __user *from, char *to,
1406 int copy, int offset)
1407{
1408 if (skb->ip_summed == CHECKSUM_NONE) {
1409 int err = 0;
1410 __wsum csum = csum_and_copy_from_user(from, to, copy, 0, &err);
1411 if (err)
1412 return err;
1413 skb->csum = csum_block_add(skb->csum, csum, offset);
1414 } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) {
1415 if (!access_ok(VERIFY_READ, from, copy) ||
1416 __copy_from_user_nocache(to, from, copy))
1417 return -EFAULT;
1418 } else if (copy_from_user(to, from, copy))
1419 return -EFAULT;
1420
1421 return 0;
1422}
1423
1424static inline int skb_add_data_nocache(struct sock *sk, struct sk_buff *skb,
1425 char __user *from, int copy)
1426{
1427 int err, offset = skb->len;
1428
1429 err = skb_do_copy_data_nocache(sk, skb, from, skb_put(skb, copy),
1430 copy, offset);
1431 if (err)
1432 __skb_trim(skb, offset);
1433
1434 return err;
1435}
1436
1437static inline int skb_copy_to_page_nocache(struct sock *sk, char __user *from,
1438 struct sk_buff *skb,
1439 struct page *page,
1440 int off, int copy)
1441{
1442 int err;
1443
1444 err = skb_do_copy_data_nocache(sk, skb, from, page_address(page) + off,
1445 copy, skb->len);
1446 if (err)
1447 return err;
1448
1449 skb->len += copy;
1450 skb->data_len += copy;
1451 skb->truesize += copy;
1452 sk->sk_wmem_queued += copy;
1453 sk_mem_charge(sk, copy);
1454 return 0;
1455}
1456
1457static inline int skb_copy_to_page(struct sock *sk, char __user *from,
1458 struct sk_buff *skb, struct page *page,
1459 int off, int copy)
1460{
1461 if (skb->ip_summed == CHECKSUM_NONE) {
1462 int err = 0;
1463 __wsum csum = csum_and_copy_from_user(from,
1464 page_address(page) + off,
1465 copy, 0, &err);
1466 if (err)
1467 return err;
1468 skb->csum = csum_block_add(skb->csum, csum, skb->len);
1469 } else if (copy_from_user(page_address(page) + off, from, copy))
1470 return -EFAULT;
1471
1472 skb->len += copy;
1473 skb->data_len += copy;
1474 skb->truesize += copy;
1475 sk->sk_wmem_queued += copy;
1476 sk_mem_charge(sk, copy);
1477 return 0;
1478}
1479
1480
1481
1482
1483
1484
1485
1486static inline int sk_wmem_alloc_get(const struct sock *sk)
1487{
1488 return atomic_read(&sk->sk_wmem_alloc) - 1;
1489}
1490
1491
1492
1493
1494
1495
1496
1497static inline int sk_rmem_alloc_get(const struct sock *sk)
1498{
1499 return atomic_read(&sk->sk_rmem_alloc);
1500}
1501
1502
1503
1504
1505
1506
1507
1508static inline int sk_has_allocations(const struct sock *sk)
1509{
1510 return sk_wmem_alloc_get(sk) || sk_rmem_alloc_get(sk);
1511}
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545static inline bool wq_has_sleeper(struct socket_wq *wq)
1546{
1547
1548
1549
1550
1551
1552
1553
1554 smp_mb();
1555 return wq && waitqueue_active(&wq->wait);
1556}
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566static inline void sock_poll_wait(struct file *filp,
1567 wait_queue_head_t *wait_address, poll_table *p)
1568{
1569 if (p && wait_address) {
1570 poll_wait(filp, wait_address, p);
1571
1572
1573
1574
1575
1576
1577 smp_mb();
1578 }
1579}
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590static inline void skb_set_owner_w(struct sk_buff *skb, struct sock *sk)
1591{
1592 skb_orphan(skb);
1593 skb->sk = sk;
1594 skb->destructor = sock_wfree;
1595
1596
1597
1598
1599
1600 atomic_add(skb->truesize, &sk->sk_wmem_alloc);
1601}
1602
1603static inline void skb_set_owner_r(struct sk_buff *skb, struct sock *sk)
1604{
1605 skb_orphan(skb);
1606 skb->sk = sk;
1607 skb->destructor = sock_rfree;
1608 atomic_add(skb->truesize, &sk->sk_rmem_alloc);
1609 sk_mem_charge(sk, skb->truesize);
1610}
1611
1612extern void sk_reset_timer(struct sock *sk, struct timer_list* timer,
1613 unsigned long expires);
1614
1615extern void sk_stop_timer(struct sock *sk, struct timer_list* timer);
1616
1617extern int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb);
1618
1619extern int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb);
1620
1621
1622
1623
1624
1625static inline int sock_error(struct sock *sk)
1626{
1627 int err;
1628 if (likely(!sk->sk_err))
1629 return 0;
1630 err = xchg(&sk->sk_err, 0);
1631 return -err;
1632}
1633
1634static inline unsigned long sock_wspace(struct sock *sk)
1635{
1636 int amt = 0;
1637
1638 if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
1639 amt = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
1640 if (amt < 0)
1641 amt = 0;
1642 }
1643 return amt;
1644}
1645
1646static inline void sk_wake_async(struct sock *sk, int how, int band)
1647{
1648 if (sock_flag(sk, SOCK_FASYNC))
1649 sock_wake_async(sk->sk_socket, how, band);
1650}
1651
1652#define SOCK_MIN_SNDBUF 2048
1653
1654
1655
1656
1657#define SOCK_MIN_RCVBUF (2048 + sizeof(struct sk_buff))
1658
1659static inline void sk_stream_moderate_sndbuf(struct sock *sk)
1660{
1661 if (!(sk->sk_userlocks & SOCK_SNDBUF_LOCK)) {
1662 sk->sk_sndbuf = min(sk->sk_sndbuf, sk->sk_wmem_queued >> 1);
1663 sk->sk_sndbuf = max(sk->sk_sndbuf, SOCK_MIN_SNDBUF);
1664 }
1665}
1666
1667struct sk_buff *sk_stream_alloc_skb(struct sock *sk, int size, gfp_t gfp);
1668
1669static inline struct page *sk_stream_alloc_page(struct sock *sk)
1670{
1671 struct page *page = NULL;
1672
1673 page = alloc_pages(sk->sk_allocation, 0);
1674 if (!page) {
1675 sk->sk_prot->enter_memory_pressure(sk);
1676 sk_stream_moderate_sndbuf(sk);
1677 }
1678 return page;
1679}
1680
1681
1682
1683
1684static inline int sock_writeable(const struct sock *sk)
1685{
1686 return atomic_read(&sk->sk_wmem_alloc) < (sk->sk_sndbuf >> 1);
1687}
1688
1689static inline gfp_t gfp_any(void)
1690{
1691 return in_softirq() ? GFP_ATOMIC : GFP_KERNEL;
1692}
1693
1694static inline long sock_rcvtimeo(const struct sock *sk, int noblock)
1695{
1696 return noblock ? 0 : sk->sk_rcvtimeo;
1697}
1698
1699static inline long sock_sndtimeo(const struct sock *sk, int noblock)
1700{
1701 return noblock ? 0 : sk->sk_sndtimeo;
1702}
1703
1704static inline int sock_rcvlowat(const struct sock *sk, int waitall, int len)
1705{
1706 return (waitall ? len : min_t(int, sk->sk_rcvlowat, len)) ? : 1;
1707}
1708
1709
1710
1711
1712static inline int sock_intr_errno(long timeo)
1713{
1714 return timeo == MAX_SCHEDULE_TIMEOUT ? -ERESTARTSYS : -EINTR;
1715}
1716
1717extern void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
1718 struct sk_buff *skb);
1719
1720static __inline__ void
1721sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb)
1722{
1723 ktime_t kt = skb->tstamp;
1724 struct skb_shared_hwtstamps *hwtstamps = skb_hwtstamps(skb);
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736 if (sock_flag(sk, SOCK_RCVTSTAMP) ||
1737 sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE) ||
1738 (kt.tv64 && sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) ||
1739 (hwtstamps->hwtstamp.tv64 &&
1740 sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE)) ||
1741 (hwtstamps->syststamp.tv64 &&
1742 sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE)))
1743 __sock_recv_timestamp(msg, sk, skb);
1744 else
1745 sk->sk_stamp = kt;
1746}
1747
1748extern void __sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
1749 struct sk_buff *skb);
1750
1751static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk,
1752 struct sk_buff *skb)
1753{
1754#define FLAGS_TS_OR_DROPS ((1UL << SOCK_RXQ_OVFL) | \
1755 (1UL << SOCK_RCVTSTAMP) | \
1756 (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE) | \
1757 (1UL << SOCK_TIMESTAMPING_SOFTWARE) | \
1758 (1UL << SOCK_TIMESTAMPING_RAW_HARDWARE) | \
1759 (1UL << SOCK_TIMESTAMPING_SYS_HARDWARE))
1760
1761 if (sk->sk_flags & FLAGS_TS_OR_DROPS)
1762 __sock_recv_ts_and_drops(msg, sk, skb);
1763 else
1764 sk->sk_stamp = skb->tstamp;
1765}
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775extern int sock_tx_timestamp(struct sock *sk, __u8 *tx_flags);
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786#ifdef CONFIG_NET_DMA
1787static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb, int copied_early)
1788{
1789 __skb_unlink(skb, &sk->sk_receive_queue);
1790 if (!copied_early)
1791 __kfree_skb(skb);
1792 else
1793 __skb_queue_tail(&sk->sk_async_wait_queue, skb);
1794}
1795#else
1796static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb, int copied_early)
1797{
1798 __skb_unlink(skb, &sk->sk_receive_queue);
1799 __kfree_skb(skb);
1800}
1801#endif
1802
1803static inline
1804struct net *sock_net(const struct sock *sk)
1805{
1806 return read_pnet(&sk->sk_net);
1807}
1808
1809static inline
1810void sock_net_set(struct sock *sk, struct net *net)
1811{
1812 write_pnet(&sk->sk_net, net);
1813}
1814
1815
1816
1817
1818
1819
1820
1821static inline void sk_change_net(struct sock *sk, struct net *net)
1822{
1823 put_net(sock_net(sk));
1824 sock_net_set(sk, hold_net(net));
1825}
1826
1827static inline struct sock *skb_steal_sock(struct sk_buff *skb)
1828{
1829 if (unlikely(skb->sk)) {
1830 struct sock *sk = skb->sk;
1831
1832 skb->destructor = NULL;
1833 skb->sk = NULL;
1834 return sk;
1835 }
1836 return NULL;
1837}
1838
1839extern void sock_enable_timestamp(struct sock *sk, int flag);
1840extern int sock_get_timestamp(struct sock *, struct timeval __user *);
1841extern int sock_get_timestampns(struct sock *, struct timespec __user *);
1842
1843
1844
1845
1846extern int net_msg_warn;
1847#define NETDEBUG(fmt, args...) \
1848 do { if (net_msg_warn) printk(fmt,##args); } while (0)
1849
1850#define LIMIT_NETDEBUG(fmt, args...) \
1851 do { if (net_msg_warn && net_ratelimit()) printk(fmt,##args); } while(0)
1852
1853extern __u32 sysctl_wmem_max;
1854extern __u32 sysctl_rmem_max;
1855
1856extern void sk_init(void);
1857
1858extern int sysctl_optmem_max;
1859
1860extern __u32 sysctl_wmem_default;
1861extern __u32 sysctl_rmem_default;
1862
1863#endif
1864