aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/skbuff.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r--include/linux/skbuff.h23
1 files changed, 18 insertions, 5 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index e1c2392ecb56..656dc0e901cc 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -305,9 +305,9 @@ struct sk_buff {
305 sk_buff_data_t mac_header; 305 sk_buff_data_t mac_header;
306 /* These elements must be at the end, see alloc_skb() for details. */ 306 /* These elements must be at the end, see alloc_skb() for details. */
307 sk_buff_data_t tail; 307 sk_buff_data_t tail;
308 sk_buff_data_t end;
308 unsigned char *head, 309 unsigned char *head,
309 *data, 310 *data;
310 *end;
311 unsigned int truesize; 311 unsigned int truesize;
312 atomic_t users; 312 atomic_t users;
313}; 313};
@@ -392,8 +392,20 @@ extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
392 unsigned int to, struct ts_config *config, 392 unsigned int to, struct ts_config *config,
393 struct ts_state *state); 393 struct ts_state *state);
394 394
395#ifdef NET_SKBUFF_DATA_USES_OFFSET
396static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
397{
398 return skb->head + skb->end;
399}
400#else
401static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
402{
403 return skb->end;
404}
405#endif
406
395/* Internal */ 407/* Internal */
396#define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end)) 408#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB)))
397 409
398/** 410/**
399 * skb_queue_empty - check if a queue is empty 411 * skb_queue_empty - check if a queue is empty
@@ -843,6 +855,7 @@ static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset)
843{ 855{
844 skb->tail = skb->data + offset; 856 skb->tail = skb->data + offset;
845} 857}
858
846#endif /* NET_SKBUFF_DATA_USES_OFFSET */ 859#endif /* NET_SKBUFF_DATA_USES_OFFSET */
847 860
848/* 861/*
@@ -872,7 +885,7 @@ static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
872 SKB_LINEAR_ASSERT(skb); 885 SKB_LINEAR_ASSERT(skb);
873 skb->tail += len; 886 skb->tail += len;
874 skb->len += len; 887 skb->len += len;
875 if (unlikely(skb_tail_pointer(skb) > skb->end)) 888 if (unlikely(skb->tail > skb->end))
876 skb_over_panic(skb, len, current_text_addr()); 889 skb_over_panic(skb, len, current_text_addr());
877 return tmp; 890 return tmp;
878} 891}
@@ -968,7 +981,7 @@ static inline int skb_headroom(const struct sk_buff *skb)
968 */ 981 */
969static inline int skb_tailroom(const struct sk_buff *skb) 982static inline int skb_tailroom(const struct sk_buff *skb)
970{ 983{
971 return skb_is_nonlinear(skb) ? 0 : skb->end - skb_tail_pointer(skb); 984 return skb_is_nonlinear(skb) ? 0 : skb->end - skb->tail;
972} 985}
973 986
974/** 987/**