1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef _LINUX_SKBUFF_H
15#define _LINUX_SKBUFF_H
16
17#include <linux/kernel.h>
18#include <linux/compiler.h>
19#include <linux/time.h>
20#include <linux/cache.h>
21
22#include <asm/atomic.h>
23#include <asm/types.h>
24#include <linux/spinlock.h>
25#include <linux/net.h>
26#include <linux/textsearch.h>
27#include <net/checksum.h>
28#include <linux/rcupdate.h>
29#include <linux/dmaengine.h>
30#include <linux/hrtimer.h>
31
32#define HAVE_ALLOC_SKB
33#define HAVE_ALIGNABLE_SKB
34
35
36#define CHECKSUM_NONE 0
37#define CHECKSUM_UNNECESSARY 1
38#define CHECKSUM_COMPLETE 2
39#define CHECKSUM_PARTIAL 3
40
41#define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) & \
42 ~(SMP_CACHE_BYTES - 1))
43#define SKB_WITH_OVERHEAD(X) \
44 ((X) - SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
45#define SKB_MAX_ORDER(X, ORDER) \
46 SKB_WITH_OVERHEAD((PAGE_SIZE << (ORDER)) - (X))
47#define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0))
48#define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2))
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96struct net_device;
97struct scatterlist;
98struct pipe_inode_info;
99
100#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
101struct nf_conntrack {
102 atomic_t use;
103};
104#endif
105
106#ifdef CONFIG_BRIDGE_NETFILTER
107struct nf_bridge_info {
108 atomic_t use;
109 struct net_device *physindev;
110 struct net_device *physoutdev;
111 unsigned int mask;
112 unsigned long data[32 / sizeof(unsigned long)];
113};
114#endif
115
116struct sk_buff_head {
117
118 struct sk_buff *next;
119 struct sk_buff *prev;
120
121 __u32 qlen;
122 spinlock_t lock;
123};
124
125struct sk_buff;
126
127
128#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
129
130typedef struct skb_frag_struct skb_frag_t;
131
132struct skb_frag_struct {
133 struct page *page;
134 __u32 page_offset;
135 __u32 size;
136};
137
138
139
140
141struct skb_shared_info {
142 atomic_t dataref;
143 unsigned short nr_frags;
144 unsigned short gso_size;
145
146 unsigned short gso_segs;
147 unsigned short gso_type;
148 __be32 ip6_frag_id;
149#ifdef CONFIG_HAS_DMA
150 unsigned int num_dma_maps;
151#endif
152 struct sk_buff *frag_list;
153 skb_frag_t frags[MAX_SKB_FRAGS];
154#ifdef CONFIG_HAS_DMA
155 dma_addr_t dma_maps[MAX_SKB_FRAGS + 1];
156#endif
157};
158
159
160
161
162
163
164
165
166
167
168
169
170#define SKB_DATAREF_SHIFT 16
171#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)
172
173
174enum {
175 SKB_FCLONE_UNAVAILABLE,
176 SKB_FCLONE_ORIG,
177 SKB_FCLONE_CLONE,
178};
179
180enum {
181 SKB_GSO_TCPV4 = 1 << 0,
182 SKB_GSO_UDP = 1 << 1,
183
184
185 SKB_GSO_DODGY = 1 << 2,
186
187
188 SKB_GSO_TCP_ECN = 1 << 3,
189
190 SKB_GSO_TCPV6 = 1 << 4,
191};
192
193#if BITS_PER_LONG > 32
194#define NET_SKBUFF_DATA_USES_OFFSET 1
195#endif
196
197#ifdef NET_SKBUFF_DATA_USES_OFFSET
198typedef unsigned int sk_buff_data_t;
199#else
200typedef unsigned char *sk_buff_data_t;
201#endif
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
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262struct sk_buff {
263
264 struct sk_buff *next;
265 struct sk_buff *prev;
266
267 struct sock *sk;
268 ktime_t tstamp;
269 struct net_device *dev;
270
271 union {
272 struct dst_entry *dst;
273 struct rtable *rtable;
274 };
275#ifdef CONFIG_XFRM
276 struct sec_path *sp;
277#endif
278
279
280
281
282
283
284 char cb[48];
285
286 unsigned int len,
287 data_len;
288 __u16 mac_len,
289 hdr_len;
290 union {
291 __wsum csum;
292 struct {
293 __u16 csum_start;
294 __u16 csum_offset;
295 };
296 };
297 __u32 priority;
298 __u8 local_df:1,
299 cloned:1,
300 ip_summed:2,
301 nohdr:1,
302 nfctinfo:3;
303 __u8 pkt_type:3,
304 fclone:2,
305 ipvs_property:1,
306 peeked:1,
307 nf_trace:1;
308 __be16 protocol;
309
310 void (*destructor)(struct sk_buff *skb);
311#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
312 struct nf_conntrack *nfct;
313 struct sk_buff *nfct_reasm;
314#endif
315#ifdef CONFIG_BRIDGE_NETFILTER
316 struct nf_bridge_info *nf_bridge;
317#endif
318
319 int iif;
320 __u16 queue_mapping;
321#ifdef CONFIG_NET_SCHED
322 __u16 tc_index;
323#ifdef CONFIG_NET_CLS_ACT
324 __u16 tc_verd;
325#endif
326#endif
327#ifdef CONFIG_IPV6_NDISC_NODETYPE
328 __u8 ndisc_nodetype:2;
329#endif
330#if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE)
331 __u8 do_not_encrypt:1;
332 __u8 requeue:1;
333#endif
334
335
336#ifdef CONFIG_NET_DMA
337 dma_cookie_t dma_cookie;
338#endif
339#ifdef CONFIG_NETWORK_SECMARK
340 __u32 secmark;
341#endif
342
343 __u32 mark;
344
345 __u16 vlan_tci;
346
347 sk_buff_data_t transport_header;
348 sk_buff_data_t network_header;
349 sk_buff_data_t mac_header;
350
351 sk_buff_data_t tail;
352 sk_buff_data_t end;
353 unsigned char *head,
354 *data;
355 unsigned int truesize;
356 atomic_t users;
357};
358
359#ifdef __KERNEL__
360
361
362
363#include <linux/slab.h>
364
365#include <asm/system.h>
366
367#ifdef CONFIG_HAS_DMA
368#include <linux/dma-mapping.h>
369extern int skb_dma_map(struct device *dev, struct sk_buff *skb,
370 enum dma_data_direction dir);
371extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb,
372 enum dma_data_direction dir);
373#endif
374
375extern void kfree_skb(struct sk_buff *skb);
376extern void __kfree_skb(struct sk_buff *skb);
377extern struct sk_buff *__alloc_skb(unsigned int size,
378 gfp_t priority, int fclone, int node);
379static inline struct sk_buff *alloc_skb(unsigned int size,
380 gfp_t priority)
381{
382 return __alloc_skb(size, priority, 0, -1);
383}
384
385static inline struct sk_buff *alloc_skb_fclone(unsigned int size,
386 gfp_t priority)
387{
388 return __alloc_skb(size, priority, 1, -1);
389}
390
391extern int skb_recycle_check(struct sk_buff *skb, int skb_size);
392
393extern struct sk_buff *skb_morph(struct sk_buff *dst, struct sk_buff *src);
394extern struct sk_buff *skb_clone(struct sk_buff *skb,
395 gfp_t priority);
396extern struct sk_buff *skb_copy(const struct sk_buff *skb,
397 gfp_t priority);
398extern struct sk_buff *pskb_copy(struct sk_buff *skb,
399 gfp_t gfp_mask);
400extern int pskb_expand_head(struct sk_buff *skb,
401 int nhead, int ntail,
402 gfp_t gfp_mask);
403extern struct sk_buff *skb_realloc_headroom(struct sk_buff *skb,
404 unsigned int headroom);
405extern struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
406 int newheadroom, int newtailroom,
407 gfp_t priority);
408extern int skb_to_sgvec(struct sk_buff *skb,
409 struct scatterlist *sg, int offset,
410 int len);
411extern int skb_cow_data(struct sk_buff *skb, int tailbits,
412 struct sk_buff **trailer);
413extern int skb_pad(struct sk_buff *skb, int pad);
414#define dev_kfree_skb(a) kfree_skb(a)
415extern void skb_over_panic(struct sk_buff *skb, int len,
416 void *here);
417extern void skb_under_panic(struct sk_buff *skb, int len,
418 void *here);
419
420extern int skb_append_datato_frags(struct sock *sk, struct sk_buff *skb,
421 int getfrag(void *from, char *to, int offset,
422 int len,int odd, struct sk_buff *skb),
423 void *from, int length);
424
425struct skb_seq_state
426{
427 __u32 lower_offset;
428 __u32 upper_offset;
429 __u32 frag_idx;
430 __u32 stepped_offset;
431 struct sk_buff *root_skb;
432 struct sk_buff *cur_skb;
433 __u8 *frag_data;
434};
435
436extern void skb_prepare_seq_read(struct sk_buff *skb,
437 unsigned int from, unsigned int to,
438 struct skb_seq_state *st);
439extern unsigned int skb_seq_read(unsigned int consumed, const u8 **data,
440 struct skb_seq_state *st);
441extern void skb_abort_seq_read(struct skb_seq_state *st);
442
443extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
444 unsigned int to, struct ts_config *config,
445 struct ts_state *state);
446
447#ifdef NET_SKBUFF_DATA_USES_OFFSET
448static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
449{
450 return skb->head + skb->end;
451}
452#else
453static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
454{
455 return skb->end;
456}
457#endif
458
459
460#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB)))
461
462
463
464
465
466
467
468static inline int skb_queue_empty(const struct sk_buff_head *list)
469{
470 return list->next == (struct sk_buff *)list;
471}
472
473
474
475
476
477
478
479
480static inline bool skb_queue_is_last(const struct sk_buff_head *list,
481 const struct sk_buff *skb)
482{
483 return (skb->next == (struct sk_buff *) list);
484}
485
486
487
488
489
490
491
492
493static inline bool skb_queue_is_first(const struct sk_buff_head *list,
494 const struct sk_buff *skb)
495{
496 return (skb->prev == (struct sk_buff *) list);
497}
498
499
500
501
502
503
504
505
506
507static inline struct sk_buff *skb_queue_next(const struct sk_buff_head *list,
508 const struct sk_buff *skb)
509{
510
511
512
513 BUG_ON(skb_queue_is_last(list, skb));
514 return skb->next;
515}
516
517
518
519
520
521
522
523
524
525static inline struct sk_buff *skb_queue_prev(const struct sk_buff_head *list,
526 const struct sk_buff *skb)
527{
528
529
530
531 BUG_ON(skb_queue_is_first(list, skb));
532 return skb->prev;
533}
534
535
536
537
538
539
540
541
542static inline struct sk_buff *skb_get(struct sk_buff *skb)
543{
544 atomic_inc(&skb->users);
545 return skb;
546}
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561static inline int skb_cloned(const struct sk_buff *skb)
562{
563 return skb->cloned &&
564 (atomic_read(&skb_shinfo(skb)->dataref) & SKB_DATAREF_MASK) != 1;
565}
566
567
568
569
570
571
572
573
574static inline int skb_header_cloned(const struct sk_buff *skb)
575{
576 int dataref;
577
578 if (!skb->cloned)
579 return 0;
580
581 dataref = atomic_read(&skb_shinfo(skb)->dataref);
582 dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT);
583 return dataref != 1;
584}
585
586
587
588
589
590
591
592
593
594static inline void skb_header_release(struct sk_buff *skb)
595{
596 BUG_ON(skb->nohdr);
597 skb->nohdr = 1;
598 atomic_add(1 << SKB_DATAREF_SHIFT, &skb_shinfo(skb)->dataref);
599}
600
601
602
603
604
605
606
607
608static inline int skb_shared(const struct sk_buff *skb)
609{
610 return atomic_read(&skb->users) != 1;
611}
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626static inline struct sk_buff *skb_share_check(struct sk_buff *skb,
627 gfp_t pri)
628{
629 might_sleep_if(pri & __GFP_WAIT);
630 if (skb_shared(skb)) {
631 struct sk_buff *nskb = skb_clone(skb, pri);
632 kfree_skb(skb);
633 skb = nskb;
634 }
635 return skb;
636}
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658static inline struct sk_buff *skb_unshare(struct sk_buff *skb,
659 gfp_t pri)
660{
661 might_sleep_if(pri & __GFP_WAIT);
662 if (skb_cloned(skb)) {
663 struct sk_buff *nskb = skb_copy(skb, pri);
664 kfree_skb(skb);
665 skb = nskb;
666 }
667 return skb;
668}
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683static inline struct sk_buff *skb_peek(struct sk_buff_head *list_)
684{
685 struct sk_buff *list = ((struct sk_buff *)list_)->next;
686 if (list == (struct sk_buff *)list_)
687 list = NULL;
688 return list;
689}
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704static inline struct sk_buff *skb_peek_tail(struct sk_buff_head *list_)
705{
706 struct sk_buff *list = ((struct sk_buff *)list_)->prev;
707 if (list == (struct sk_buff *)list_)
708 list = NULL;
709 return list;
710}
711
712
713
714
715
716
717
718static inline __u32 skb_queue_len(const struct sk_buff_head *list_)
719{
720 return list_->qlen;
721}
722
723
724
725
726
727
728
729
730
731
732
733static inline void __skb_queue_head_init(struct sk_buff_head *list)
734{
735 list->prev = list->next = (struct sk_buff *)list;
736 list->qlen = 0;
737}
738
739
740
741
742
743
744
745
746
747static inline void skb_queue_head_init(struct sk_buff_head *list)
748{
749 spin_lock_init(&list->lock);
750 __skb_queue_head_init(list);
751}
752
753static inline void skb_queue_head_init_class(struct sk_buff_head *list,
754 struct lock_class_key *class)
755{
756 skb_queue_head_init(list);
757 lockdep_set_class(&list->lock, class);
758}
759
760
761
762
763
764
765
766extern void skb_insert(struct sk_buff *old, struct sk_buff *newsk, struct sk_buff_head *list);
767static inline void __skb_insert(struct sk_buff *newsk,
768 struct sk_buff *prev, struct sk_buff *next,
769 struct sk_buff_head *list)
770{
771 newsk->next = next;
772 newsk->prev = prev;
773 next->prev = prev->next = newsk;
774 list->qlen++;
775}
776
777static inline void __skb_queue_splice(const struct sk_buff_head *list,
778 struct sk_buff *prev,
779 struct sk_buff *next)
780{
781 struct sk_buff *first = list->next;
782 struct sk_buff *last = list->prev;
783
784 first->prev = prev;
785 prev->next = first;
786
787 last->next = next;
788 next->prev = last;
789}
790
791
792
793
794
795
796static inline void skb_queue_splice(const struct sk_buff_head *list,
797 struct sk_buff_head *head)
798{
799 if (!skb_queue_empty(list)) {
800 __skb_queue_splice(list, (struct sk_buff *) head, head->next);
801 head->qlen += list->qlen;
802 }
803}
804
805
806
807
808
809
810
811
812static inline void skb_queue_splice_init(struct sk_buff_head *list,
813 struct sk_buff_head *head)
814{
815 if (!skb_queue_empty(list)) {
816 __skb_queue_splice(list, (struct sk_buff *) head, head->next);
817 head->qlen += list->qlen;
818 __skb_queue_head_init(list);
819 }
820}
821
822
823
824
825
826
827static inline void skb_queue_splice_tail(const struct sk_buff_head *list,
828 struct sk_buff_head *head)
829{
830 if (!skb_queue_empty(list)) {
831 __skb_queue_splice(list, head->prev, (struct sk_buff *) head);
832 head->qlen += list->qlen;
833 }
834}
835
836
837
838
839
840
841
842
843
844static inline void skb_queue_splice_tail_init(struct sk_buff_head *list,
845 struct sk_buff_head *head)
846{
847 if (!skb_queue_empty(list)) {
848 __skb_queue_splice(list, head->prev, (struct sk_buff *) head);
849 head->qlen += list->qlen;
850 __skb_queue_head_init(list);
851 }
852}
853
854
855
856
857
858
859
860
861
862
863
864
865static inline void __skb_queue_after(struct sk_buff_head *list,
866 struct sk_buff *prev,
867 struct sk_buff *newsk)
868{
869 __skb_insert(newsk, prev, prev->next, list);
870}
871
872extern void skb_append(struct sk_buff *old, struct sk_buff *newsk,
873 struct sk_buff_head *list);
874
875static inline void __skb_queue_before(struct sk_buff_head *list,
876 struct sk_buff *next,
877 struct sk_buff *newsk)
878{
879 __skb_insert(newsk, next->prev, next, list);
880}
881
882
883
884
885
886
887
888
889
890
891
892extern void skb_queue_head(struct sk_buff_head *list, struct sk_buff *newsk);
893static inline void __skb_queue_head(struct sk_buff_head *list,
894 struct sk_buff *newsk)
895{
896 __skb_queue_after(list, (struct sk_buff *)list, newsk);
897}
898
899
900
901
902
903
904
905
906
907
908
909extern void skb_queue_tail(struct sk_buff_head *list, struct sk_buff *newsk);
910static inline void __skb_queue_tail(struct sk_buff_head *list,
911 struct sk_buff *newsk)
912{
913 __skb_queue_before(list, (struct sk_buff *)list, newsk);
914}
915
916
917
918
919
920extern void skb_unlink(struct sk_buff *skb, struct sk_buff_head *list);
921static inline void __skb_unlink(struct sk_buff *skb, struct sk_buff_head *list)
922{
923 struct sk_buff *next, *prev;
924
925 list->qlen--;
926 next = skb->next;
927 prev = skb->prev;
928 skb->next = skb->prev = NULL;
929 next->prev = prev;
930 prev->next = next;
931}
932
933
934
935
936
937
938
939
940
941extern struct sk_buff *skb_dequeue(struct sk_buff_head *list);
942static inline struct sk_buff *__skb_dequeue(struct sk_buff_head *list)
943{
944 struct sk_buff *skb = skb_peek(list);
945 if (skb)
946 __skb_unlink(skb, list);
947 return skb;
948}
949
950
951
952
953
954
955
956
957
958extern struct sk_buff *skb_dequeue_tail(struct sk_buff_head *list);
959static inline struct sk_buff *__skb_dequeue_tail(struct sk_buff_head *list)
960{
961 struct sk_buff *skb = skb_peek_tail(list);
962 if (skb)
963 __skb_unlink(skb, list);
964 return skb;
965}
966
967
968static inline int skb_is_nonlinear(const struct sk_buff *skb)
969{
970 return skb->data_len;
971}
972
973static inline unsigned int skb_headlen(const struct sk_buff *skb)
974{
975 return skb->len - skb->data_len;
976}
977
978static inline int skb_pagelen(const struct sk_buff *skb)
979{
980 int i, len = 0;
981
982 for (i = (int)skb_shinfo(skb)->nr_frags - 1; i >= 0; i--)
983 len += skb_shinfo(skb)->frags[i].size;
984 return len + skb_headlen(skb);
985}
986
987static inline void skb_fill_page_desc(struct sk_buff *skb, int i,
988 struct page *page, int off, int size)
989{
990 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
991
992 frag->page = page;
993 frag->page_offset = off;
994 frag->size = size;
995 skb_shinfo(skb)->nr_frags = i + 1;
996}
997
998extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page,
999 int off, int size);
1000
1001#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
1002#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_shinfo(skb)->frag_list)
1003#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
1004
1005#ifdef NET_SKBUFF_DATA_USES_OFFSET
1006static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb)
1007{
1008 return skb->head + skb->tail;
1009}
1010
1011static inline void skb_reset_tail_pointer(struct sk_buff *skb)
1012{
1013 skb->tail = skb->data - skb->head;
1014}
1015
1016static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
1017{
1018 skb_reset_tail_pointer(skb);
1019 skb->tail += offset;
1020}
1021#else
1022static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb)
1023{
1024 return skb->tail;
1025}
1026
1027static inline void skb_reset_tail_pointer(struct sk_buff *skb)
1028{
1029 skb->tail = skb->data;
1030}
1031
1032static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
1033{
1034 skb->tail = skb->data + offset;
1035}
1036
1037#endif
1038
1039
1040
1041
1042extern unsigned char *skb_put(struct sk_buff *skb, unsigned int len);
1043static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
1044{
1045 unsigned char *tmp = skb_tail_pointer(skb);
1046 SKB_LINEAR_ASSERT(skb);
1047 skb->tail += len;
1048 skb->len += len;
1049 return tmp;
1050}
1051
1052extern unsigned char *skb_push(struct sk_buff *skb, unsigned int len);
1053static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len)
1054{
1055 skb->data -= len;
1056 skb->len += len;
1057 return skb->data;
1058}
1059
1060extern unsigned char *skb_pull(struct sk_buff *skb, unsigned int len);
1061static inline unsigned char *__skb_pull(struct sk_buff *skb, unsigned int len)
1062{
1063 skb->len -= len;
1064 BUG_ON(skb->len < skb->data_len);
1065 return skb->data += len;
1066}
1067
1068extern unsigned char *__pskb_pull_tail(struct sk_buff *skb, int delta);
1069
1070static inline unsigned char *__pskb_pull(struct sk_buff *skb, unsigned int len)
1071{
1072 if (len > skb_headlen(skb) &&
1073 !__pskb_pull_tail(skb, len - skb_headlen(skb)))
1074 return NULL;
1075 skb->len -= len;
1076 return skb->data += len;
1077}
1078
1079static inline unsigned char *pskb_pull(struct sk_buff *skb, unsigned int len)
1080{
1081 return unlikely(len > skb->len) ? NULL : __pskb_pull(skb, len);
1082}
1083
1084static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len)
1085{
1086 if (likely(len <= skb_headlen(skb)))
1087 return 1;
1088 if (unlikely(len > skb->len))
1089 return 0;
1090 return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
1091}
1092
1093
1094
1095
1096
1097
1098
1099static inline unsigned int skb_headroom(const struct sk_buff *skb)
1100{
1101 return skb->data - skb->head;
1102}
1103
1104
1105
1106
1107
1108
1109
1110static inline int skb_tailroom(const struct sk_buff *skb)
1111{
1112 return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail;
1113}
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123static inline void skb_reserve(struct sk_buff *skb, int len)
1124{
1125 skb->data += len;
1126 skb->tail += len;
1127}
1128
1129#ifdef NET_SKBUFF_DATA_USES_OFFSET
1130static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
1131{
1132 return skb->head + skb->transport_header;
1133}
1134
1135static inline void skb_reset_transport_header(struct sk_buff *skb)
1136{
1137 skb->transport_header = skb->data - skb->head;
1138}
1139
1140static inline void skb_set_transport_header(struct sk_buff *skb,
1141 const int offset)
1142{
1143 skb_reset_transport_header(skb);
1144 skb->transport_header += offset;
1145}
1146
1147static inline unsigned char *skb_network_header(const struct sk_buff *skb)
1148{
1149 return skb->head + skb->network_header;
1150}
1151
1152static inline void skb_reset_network_header(struct sk_buff *skb)
1153{
1154 skb->network_header = skb->data - skb->head;
1155}
1156
1157static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
1158{
1159 skb_reset_network_header(skb);
1160 skb->network_header += offset;
1161}
1162
1163static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
1164{
1165 return skb->head + skb->mac_header;
1166}
1167
1168static inline int skb_mac_header_was_set(const struct sk_buff *skb)
1169{
1170 return skb->mac_header != ~0U;
1171}
1172
1173static inline void skb_reset_mac_header(struct sk_buff *skb)
1174{
1175 skb->mac_header = skb->data - skb->head;
1176}
1177
1178static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
1179{
1180 skb_reset_mac_header(skb);
1181 skb->mac_header += offset;
1182}
1183
1184#else
1185
1186static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
1187{
1188 return skb->transport_header;
1189}
1190
1191static inline void skb_reset_transport_header(struct sk_buff *skb)
1192{
1193 skb->transport_header = skb->data;
1194}
1195
1196static inline void skb_set_transport_header(struct sk_buff *skb,
1197 const int offset)
1198{
1199 skb->transport_header = skb->data + offset;
1200}
1201
1202static inline unsigned char *skb_network_header(const struct sk_buff *skb)
1203{
1204 return skb->network_header;
1205}
1206
1207static inline void skb_reset_network_header(struct sk_buff *skb)
1208{
1209 skb->network_header = skb->data;
1210}
1211
1212static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
1213{
1214 skb->network_header = skb->data + offset;
1215}
1216
1217static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
1218{
1219 return skb->mac_header;
1220}
1221
1222static inline int skb_mac_header_was_set(const struct sk_buff *skb)
1223{
1224 return skb->mac_header != NULL;
1225}
1226
1227static inline void skb_reset_mac_header(struct sk_buff *skb)
1228{
1229 skb->mac_header = skb->data;
1230}
1231
1232static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
1233{
1234 skb->mac_header = skb->data + offset;
1235}
1236#endif
1237
1238static inline int skb_transport_offset(const struct sk_buff *skb)
1239{
1240 return skb_transport_header(skb) - skb->data;
1241}
1242
1243static inline u32 skb_network_header_len(const struct sk_buff *skb)
1244{
1245 return skb->transport_header - skb->network_header;
1246}
1247
1248static inline int skb_network_offset(const struct sk_buff *skb)
1249{
1250 return skb_network_header(skb) - skb->data;
1251}
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273#ifndef NET_IP_ALIGN
1274#define NET_IP_ALIGN 2
1275#endif
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292#ifndef NET_SKB_PAD
1293#define NET_SKB_PAD 16
1294#endif
1295
1296extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
1297
1298static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
1299{
1300 if (unlikely(skb->data_len)) {
1301 WARN_ON(1);
1302 return;
1303 }
1304 skb->len = len;
1305 skb_set_tail_pointer(skb, len);
1306}
1307
1308extern void skb_trim(struct sk_buff *skb, unsigned int len);
1309
1310static inline int __pskb_trim(struct sk_buff *skb, unsigned int len)
1311{
1312 if (skb->data_len)
1313 return ___pskb_trim(skb, len);
1314 __skb_trim(skb, len);
1315 return 0;
1316}
1317
1318static inline int pskb_trim(struct sk_buff *skb, unsigned int len)
1319{
1320 return (len < skb->len) ? __pskb_trim(skb, len) : 0;
1321}
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332static inline void pskb_trim_unique(struct sk_buff *skb, unsigned int len)
1333{
1334 int err = pskb_trim(skb, len);
1335 BUG_ON(err);
1336}
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346static inline void skb_orphan(struct sk_buff *skb)
1347{
1348 if (skb->destructor)
1349 skb->destructor(skb);
1350 skb->destructor = NULL;
1351 skb->sk = NULL;
1352}
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362extern void skb_queue_purge(struct sk_buff_head *list);
1363static inline void __skb_queue_purge(struct sk_buff_head *list)
1364{
1365 struct sk_buff *skb;
1366 while ((skb = __skb_dequeue(list)) != NULL)
1367 kfree_skb(skb);
1368}
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
1383 gfp_t gfp_mask)
1384{
1385 struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask);
1386 if (likely(skb))
1387 skb_reserve(skb, NET_SKB_PAD);
1388 return skb;
1389}
1390
1391extern struct sk_buff *dev_alloc_skb(unsigned int length);
1392
1393extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev,
1394 unsigned int length, gfp_t gfp_mask);
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev,
1410 unsigned int length)
1411{
1412 return __netdev_alloc_skb(dev, length, GFP_ATOMIC);
1413}
1414
1415extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask);
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425static inline struct page *netdev_alloc_page(struct net_device *dev)
1426{
1427 return __netdev_alloc_page(dev, GFP_ATOMIC);
1428}
1429
1430static inline void netdev_free_page(struct net_device *dev, struct page *page)
1431{
1432 __free_page(page);
1433}
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443static inline int skb_clone_writable(struct sk_buff *skb, unsigned int len)
1444{
1445 return !skb_header_cloned(skb) &&
1446 skb_headroom(skb) + len <= skb->hdr_len;
1447}
1448
1449static inline int __skb_cow(struct sk_buff *skb, unsigned int headroom,
1450 int cloned)
1451{
1452 int delta = 0;
1453
1454 if (headroom < NET_SKB_PAD)
1455 headroom = NET_SKB_PAD;
1456 if (headroom > skb_headroom(skb))
1457 delta = headroom - skb_headroom(skb);
1458
1459 if (delta || cloned)
1460 return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
1461 GFP_ATOMIC);
1462 return 0;
1463}
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477static inline int skb_cow(struct sk_buff *skb, unsigned int headroom)
1478{
1479 return __skb_cow(skb, headroom, skb_cloned(skb));
1480}
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492static inline int skb_cow_head(struct sk_buff *skb, unsigned int headroom)
1493{
1494 return __skb_cow(skb, headroom, skb_header_cloned(skb));
1495}
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508static inline int skb_padto(struct sk_buff *skb, unsigned int len)
1509{
1510 unsigned int size = skb->len;
1511 if (likely(size >= len))
1512 return 0;
1513 return skb_pad(skb, len - size);
1514}
1515
1516static inline int skb_add_data(struct sk_buff *skb,
1517 char __user *from, int copy)
1518{
1519 const int off = skb->len;
1520
1521 if (skb->ip_summed == CHECKSUM_NONE) {
1522 int err = 0;
1523 __wsum csum = csum_and_copy_from_user(from, skb_put(skb, copy),
1524 copy, 0, &err);
1525 if (!err) {
1526 skb->csum = csum_block_add(skb->csum, csum, off);
1527 return 0;
1528 }
1529 } else if (!copy_from_user(skb_put(skb, copy), from, copy))
1530 return 0;
1531
1532 __skb_trim(skb, off);
1533 return -EFAULT;
1534}
1535
1536static inline int skb_can_coalesce(struct sk_buff *skb, int i,
1537 struct page *page, int off)
1538{
1539 if (i) {
1540 struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i - 1];
1541
1542 return page == frag->page &&
1543 off == frag->page_offset + frag->size;
1544 }
1545 return 0;
1546}
1547
1548static inline int __skb_linearize(struct sk_buff *skb)
1549{
1550 return __pskb_pull_tail(skb, skb->data_len) ? 0 : -ENOMEM;
1551}
1552
1553
1554
1555
1556
1557
1558
1559
1560static inline int skb_linearize(struct sk_buff *skb)
1561{
1562 return skb_is_nonlinear(skb) ? __skb_linearize(skb) : 0;
1563}
1564
1565
1566
1567
1568
1569
1570
1571
1572static inline int skb_linearize_cow(struct sk_buff *skb)
1573{
1574 return skb_is_nonlinear(skb) || skb_cloned(skb) ?
1575 __skb_linearize(skb) : 0;
1576}
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589static inline void skb_postpull_rcsum(struct sk_buff *skb,
1590 const void *start, unsigned int len)
1591{
1592 if (skb->ip_summed == CHECKSUM_COMPLETE)
1593 skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
1594}
1595
1596unsigned char *skb_pull_rcsum(struct sk_buff *skb, unsigned int len);
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
1608{
1609 if (likely(len >= skb->len))
1610 return 0;
1611 if (skb->ip_summed == CHECKSUM_COMPLETE)
1612 skb->ip_summed = CHECKSUM_NONE;
1613 return __pskb_trim(skb, len);
1614}
1615
1616#define skb_queue_walk(queue, skb) \
1617 for (skb = (queue)->next; \
1618 prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \
1619 skb = skb->next)
1620
1621#define skb_queue_walk_safe(queue, skb, tmp) \
1622 for (skb = (queue)->next, tmp = skb->next; \
1623 skb != (struct sk_buff *)(queue); \
1624 skb = tmp, tmp = skb->next)
1625
1626#define skb_queue_walk_from(queue, skb) \
1627 for (; prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \
1628 skb = skb->next)
1629
1630#define skb_queue_walk_from_safe(queue, skb, tmp) \
1631 for (tmp = skb->next; \
1632 skb != (struct sk_buff *)(queue); \
1633 skb = tmp, tmp = skb->next)
1634
1635#define skb_queue_reverse_walk(queue, skb) \
1636 for (skb = (queue)->prev; \
1637 prefetch(skb->prev), (skb != (struct sk_buff *)(queue)); \
1638 skb = skb->prev)
1639
1640
1641extern struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
1642 int *peeked, int *err);
1643extern struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags,
1644 int noblock, int *err);
1645extern unsigned int datagram_poll(struct file *file, struct socket *sock,
1646 struct poll_table_struct *wait);
1647extern int skb_copy_datagram_iovec(const struct sk_buff *from,
1648 int offset, struct iovec *to,
1649 int size);
1650extern int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
1651 int hlen,
1652 struct iovec *iov);
1653extern int skb_copy_datagram_from_iovec(struct sk_buff *skb,
1654 int offset,
1655 struct iovec *from,
1656 int len);
1657extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
1658extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb,
1659 unsigned int flags);
1660extern __wsum skb_checksum(const struct sk_buff *skb, int offset,
1661 int len, __wsum csum);
1662extern int skb_copy_bits(const struct sk_buff *skb, int offset,
1663 void *to, int len);
1664extern int skb_store_bits(struct sk_buff *skb, int offset,
1665 const void *from, int len);
1666extern __wsum skb_copy_and_csum_bits(const struct sk_buff *skb,
1667 int offset, u8 *to, int len,
1668 __wsum csum);
1669extern int skb_splice_bits(struct sk_buff *skb,
1670 unsigned int offset,
1671 struct pipe_inode_info *pipe,
1672 unsigned int len,
1673 unsigned int flags);
1674extern void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
1675extern void skb_split(struct sk_buff *skb,
1676 struct sk_buff *skb1, const u32 len);
1677extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb,
1678 int shiftlen);
1679
1680extern struct sk_buff *skb_segment(struct sk_buff *skb, int features);
1681extern int skb_gro_receive(struct sk_buff **head,
1682 struct sk_buff *skb);
1683
1684static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
1685 int len, void *buffer)
1686{
1687 int hlen = skb_headlen(skb);
1688
1689 if (hlen - offset >= len)
1690 return skb->data + offset;
1691
1692 if (skb_copy_bits(skb, offset, buffer, len) < 0)
1693 return NULL;
1694
1695 return buffer;
1696}
1697
1698static inline void skb_copy_from_linear_data(const struct sk_buff *skb,
1699 void *to,
1700 const unsigned int len)
1701{
1702 memcpy(to, skb->data, len);
1703}
1704
1705static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb,
1706 const int offset, void *to,
1707 const unsigned int len)
1708{
1709 memcpy(to, skb->data + offset, len);
1710}
1711
1712static inline void skb_copy_to_linear_data(struct sk_buff *skb,
1713 const void *from,
1714 const unsigned int len)
1715{
1716 memcpy(skb->data, from, len);
1717}
1718
1719static inline void skb_copy_to_linear_data_offset(struct sk_buff *skb,
1720 const int offset,
1721 const void *from,
1722 const unsigned int len)
1723{
1724 memcpy(skb->data + offset, from, len);
1725}
1726
1727extern void skb_init(void);
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738static inline void skb_get_timestamp(const struct sk_buff *skb, struct timeval *stamp)
1739{
1740 *stamp = ktime_to_timeval(skb->tstamp);
1741}
1742
1743static inline void __net_timestamp(struct sk_buff *skb)
1744{
1745 skb->tstamp = ktime_get_real();
1746}
1747
1748static inline ktime_t net_timedelta(ktime_t t)
1749{
1750 return ktime_sub(ktime_get_real(), t);
1751}
1752
1753static inline ktime_t net_invalid_timestamp(void)
1754{
1755 return ktime_set(0, 0);
1756}
1757
1758extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
1759extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
1760
1761static inline int skb_csum_unnecessary(const struct sk_buff *skb)
1762{
1763 return skb->ip_summed & CHECKSUM_UNNECESSARY;
1764}
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782static inline __sum16 skb_checksum_complete(struct sk_buff *skb)
1783{
1784 return skb_csum_unnecessary(skb) ?
1785 0 : __skb_checksum_complete(skb);
1786}
1787
1788#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1789extern void nf_conntrack_destroy(struct nf_conntrack *nfct);
1790static inline void nf_conntrack_put(struct nf_conntrack *nfct)
1791{
1792 if (nfct && atomic_dec_and_test(&nfct->use))
1793 nf_conntrack_destroy(nfct);
1794}
1795static inline void nf_conntrack_get(struct nf_conntrack *nfct)
1796{
1797 if (nfct)
1798 atomic_inc(&nfct->use);
1799}
1800static inline void nf_conntrack_get_reasm(struct sk_buff *skb)
1801{
1802 if (skb)
1803 atomic_inc(&skb->users);
1804}
1805static inline void nf_conntrack_put_reasm(struct sk_buff *skb)
1806{
1807 if (skb)
1808 kfree_skb(skb);
1809}
1810#endif
1811#ifdef CONFIG_BRIDGE_NETFILTER
1812static inline void nf_bridge_put(struct nf_bridge_info *nf_bridge)
1813{
1814 if (nf_bridge && atomic_dec_and_test(&nf_bridge->use))
1815 kfree(nf_bridge);
1816}
1817static inline void nf_bridge_get(struct nf_bridge_info *nf_bridge)
1818{
1819 if (nf_bridge)
1820 atomic_inc(&nf_bridge->use);
1821}
1822#endif
1823static inline void nf_reset(struct sk_buff *skb)
1824{
1825#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1826 nf_conntrack_put(skb->nfct);
1827 skb->nfct = NULL;
1828 nf_conntrack_put_reasm(skb->nfct_reasm);
1829 skb->nfct_reasm = NULL;
1830#endif
1831#ifdef CONFIG_BRIDGE_NETFILTER
1832 nf_bridge_put(skb->nf_bridge);
1833 skb->nf_bridge = NULL;
1834#endif
1835}
1836
1837
1838static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1839{
1840#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1841 dst->nfct = src->nfct;
1842 nf_conntrack_get(src->nfct);
1843 dst->nfctinfo = src->nfctinfo;
1844 dst->nfct_reasm = src->nfct_reasm;
1845 nf_conntrack_get_reasm(src->nfct_reasm);
1846#endif
1847#ifdef CONFIG_BRIDGE_NETFILTER
1848 dst->nf_bridge = src->nf_bridge;
1849 nf_bridge_get(src->nf_bridge);
1850#endif
1851}
1852
1853static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
1854{
1855#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
1856 nf_conntrack_put(dst->nfct);
1857 nf_conntrack_put_reasm(dst->nfct_reasm);
1858#endif
1859#ifdef CONFIG_BRIDGE_NETFILTER
1860 nf_bridge_put(dst->nf_bridge);
1861#endif
1862 __nf_copy(dst, src);
1863}
1864
1865#ifdef CONFIG_NETWORK_SECMARK
1866static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from)
1867{
1868 to->secmark = from->secmark;
1869}
1870
1871static inline void skb_init_secmark(struct sk_buff *skb)
1872{
1873 skb->secmark = 0;
1874}
1875#else
1876static inline void skb_copy_secmark(struct sk_buff *to, const struct sk_buff *from)
1877{ }
1878
1879static inline void skb_init_secmark(struct sk_buff *skb)
1880{ }
1881#endif
1882
1883static inline void skb_set_queue_mapping(struct sk_buff *skb, u16 queue_mapping)
1884{
1885 skb->queue_mapping = queue_mapping;
1886}
1887
1888static inline u16 skb_get_queue_mapping(struct sk_buff *skb)
1889{
1890 return skb->queue_mapping;
1891}
1892
1893static inline void skb_copy_queue_mapping(struct sk_buff *to, const struct sk_buff *from)
1894{
1895 to->queue_mapping = from->queue_mapping;
1896}
1897
1898#ifdef CONFIG_XFRM
1899static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
1900{
1901 return skb->sp;
1902}
1903#else
1904static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
1905{
1906 return NULL;
1907}
1908#endif
1909
1910static inline int skb_is_gso(const struct sk_buff *skb)
1911{
1912 return skb_shinfo(skb)->gso_size;
1913}
1914
1915static inline int skb_is_gso_v6(const struct sk_buff *skb)
1916{
1917 return skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6;
1918}
1919
1920extern void __skb_warn_lro_forwarding(const struct sk_buff *skb);
1921
1922static inline bool skb_warn_if_lro(const struct sk_buff *skb)
1923{
1924
1925
1926 struct skb_shared_info *shinfo = skb_shinfo(skb);
1927 if (shinfo->gso_size != 0 && unlikely(shinfo->gso_type == 0)) {
1928 __skb_warn_lro_forwarding(skb);
1929 return true;
1930 }
1931 return false;
1932}
1933
1934static inline void skb_forward_csum(struct sk_buff *skb)
1935{
1936
1937 if (skb->ip_summed == CHECKSUM_COMPLETE)
1938 skb->ip_summed = CHECKSUM_NONE;
1939}
1940
1941bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
1942#endif
1943#endif
1944