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.h186
1 files changed, 121 insertions, 65 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 77eb60d2b496..c0a4f3ab0cc0 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -122,15 +122,26 @@ struct sk_buff_head {
122 122
123struct sk_buff; 123struct sk_buff;
124 124
125/* To allow 64K frame to be packed as single skb without frag_list */ 125/* To allow 64K frame to be packed as single skb without frag_list. Since
126 * GRO uses frags we allocate at least 16 regardless of page size.
127 */
128#if (65536/PAGE_SIZE + 2) < 16
129#define MAX_SKB_FRAGS 16UL
130#else
126#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2) 131#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
132#endif
127 133
128typedef struct skb_frag_struct skb_frag_t; 134typedef struct skb_frag_struct skb_frag_t;
129 135
130struct skb_frag_struct { 136struct skb_frag_struct {
131 struct page *page; 137 struct page *page;
138#if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536)
132 __u32 page_offset; 139 __u32 page_offset;
133 __u32 size; 140 __u32 size;
141#else
142 __u16 page_offset;
143 __u16 size;
144#endif
134}; 145};
135 146
136#define HAVE_HW_TIME_STAMP 147#define HAVE_HW_TIME_STAMP
@@ -163,26 +174,19 @@ struct skb_shared_hwtstamps {
163 ktime_t syststamp; 174 ktime_t syststamp;
164}; 175};
165 176
166/** 177/* Definitions for tx_flags in struct skb_shared_info */
167 * struct skb_shared_tx - instructions for time stamping of outgoing packets 178enum {
168 * @hardware: generate hardware time stamp 179 /* generate hardware time stamp */
169 * @software: generate software time stamp 180 SKBTX_HW_TSTAMP = 1 << 0,
170 * @in_progress: device driver is going to provide 181
171 * hardware time stamp 182 /* generate software time stamp */
172 * @prevent_sk_orphan: make sk reference available on driver level 183 SKBTX_SW_TSTAMP = 1 << 1,
173 * @flags: all shared_tx flags 184
174 * 185 /* device driver is going to provide hardware time stamp */
175 * These flags are attached to packets as part of the 186 SKBTX_IN_PROGRESS = 1 << 2,
176 * &skb_shared_info. Use skb_tx() to get a pointer. 187
177 */ 188 /* ensure the originating sk reference is available on driver level */
178union skb_shared_tx { 189 SKBTX_DRV_NEEDS_SK_REF = 1 << 3,
179 struct {
180 __u8 hardware:1,
181 software:1,
182 in_progress:1,
183 prevent_sk_orphan:1;
184 };
185 __u8 flags;
186}; 190};
187 191
188/* This data is invariant across clones and lives at 192/* This data is invariant across clones and lives at
@@ -195,7 +199,7 @@ struct skb_shared_info {
195 unsigned short gso_segs; 199 unsigned short gso_segs;
196 unsigned short gso_type; 200 unsigned short gso_type;
197 __be32 ip6_frag_id; 201 __be32 ip6_frag_id;
198 union skb_shared_tx tx_flags; 202 __u8 tx_flags;
199 struct sk_buff *frag_list; 203 struct sk_buff *frag_list;
200 struct skb_shared_hwtstamps hwtstamps; 204 struct skb_shared_hwtstamps hwtstamps;
201 205
@@ -257,6 +261,11 @@ typedef unsigned int sk_buff_data_t;
257typedef unsigned char *sk_buff_data_t; 261typedef unsigned char *sk_buff_data_t;
258#endif 262#endif
259 263
264#if defined(CONFIG_NF_DEFRAG_IPV4) || defined(CONFIG_NF_DEFRAG_IPV4_MODULE) || \
265 defined(CONFIG_NF_DEFRAG_IPV6) || defined(CONFIG_NF_DEFRAG_IPV6_MODULE)
266#define NET_SKBUFF_NF_DEFRAG_NEEDED 1
267#endif
268
260/** 269/**
261 * struct sk_buff - socket buffer 270 * struct sk_buff - socket buffer
262 * @next: Next buffer in list 271 * @next: Next buffer in list
@@ -364,6 +373,8 @@ struct sk_buff {
364 void (*destructor)(struct sk_buff *skb); 373 void (*destructor)(struct sk_buff *skb);
365#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 374#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
366 struct nf_conntrack *nfct; 375 struct nf_conntrack *nfct;
376#endif
377#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
367 struct sk_buff *nfct_reasm; 378 struct sk_buff *nfct_reasm;
368#endif 379#endif
369#ifdef CONFIG_BRIDGE_NETFILTER 380#ifdef CONFIG_BRIDGE_NETFILTER
@@ -380,17 +391,15 @@ struct sk_buff {
380 391
381 __u32 rxhash; 392 __u32 rxhash;
382 393
394 __u16 queue_mapping;
383 kmemcheck_bitfield_begin(flags2); 395 kmemcheck_bitfield_begin(flags2);
384 __u16 queue_mapping:16;
385#ifdef CONFIG_IPV6_NDISC_NODETYPE 396#ifdef CONFIG_IPV6_NDISC_NODETYPE
386 __u8 ndisc_nodetype:2, 397 __u8 ndisc_nodetype:2;
387 deliver_no_wcard:1;
388#else
389 __u8 deliver_no_wcard:1;
390#endif 398#endif
399 __u8 ooo_okay:1;
391 kmemcheck_bitfield_end(flags2); 400 kmemcheck_bitfield_end(flags2);
392 401
393 /* 0/14 bit hole */ 402 /* 0/13 bit hole */
394 403
395#ifdef CONFIG_NET_DMA 404#ifdef CONFIG_NET_DMA
396 dma_cookie_t dma_cookie; 405 dma_cookie_t dma_cookie;
@@ -462,22 +471,10 @@ static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)
462 skb->_skb_refdst = (unsigned long)dst; 471 skb->_skb_refdst = (unsigned long)dst;
463} 472}
464 473
465/** 474extern void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst);
466 * skb_dst_set_noref - sets skb dst, without a reference
467 * @skb: buffer
468 * @dst: dst entry
469 *
470 * Sets skb dst, assuming a reference was not taken on dst
471 * skb_dst_drop() should not dst_release() this dst
472 */
473static inline void skb_dst_set_noref(struct sk_buff *skb, struct dst_entry *dst)
474{
475 WARN_ON(!rcu_read_lock_held() && !rcu_read_lock_bh_held());
476 skb->_skb_refdst = (unsigned long)dst | SKB_DST_NOREF;
477}
478 475
479/** 476/**
480 * skb_dst_is_noref - Test if skb dst isnt refcounted 477 * skb_dst_is_noref - Test if skb dst isn't refcounted
481 * @skb: buffer 478 * @skb: buffer
482 */ 479 */
483static inline bool skb_dst_is_noref(const struct sk_buff *skb) 480static inline bool skb_dst_is_noref(const struct sk_buff *skb)
@@ -498,13 +495,13 @@ extern struct sk_buff *__alloc_skb(unsigned int size,
498static inline struct sk_buff *alloc_skb(unsigned int size, 495static inline struct sk_buff *alloc_skb(unsigned int size,
499 gfp_t priority) 496 gfp_t priority)
500{ 497{
501 return __alloc_skb(size, priority, 0, -1); 498 return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
502} 499}
503 500
504static inline struct sk_buff *alloc_skb_fclone(unsigned int size, 501static inline struct sk_buff *alloc_skb_fclone(unsigned int size,
505 gfp_t priority) 502 gfp_t priority)
506{ 503{
507 return __alloc_skb(size, priority, 1, -1); 504 return __alloc_skb(size, priority, 1, NUMA_NO_NODE);
508} 505}
509 506
510extern bool skb_recycle_check(struct sk_buff *skb, int skb_size); 507extern bool skb_recycle_check(struct sk_buff *skb, int skb_size);
@@ -558,6 +555,15 @@ extern unsigned int skb_find_text(struct sk_buff *skb, unsigned int from,
558 unsigned int to, struct ts_config *config, 555 unsigned int to, struct ts_config *config,
559 struct ts_state *state); 556 struct ts_state *state);
560 557
558extern __u32 __skb_get_rxhash(struct sk_buff *skb);
559static inline __u32 skb_get_rxhash(struct sk_buff *skb)
560{
561 if (!skb->rxhash)
562 skb->rxhash = __skb_get_rxhash(skb);
563
564 return skb->rxhash;
565}
566
561#ifdef NET_SKBUFF_DATA_USES_OFFSET 567#ifdef NET_SKBUFF_DATA_USES_OFFSET
562static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) 568static inline unsigned char *skb_end_pointer(const struct sk_buff *skb)
563{ 569{
@@ -578,11 +584,6 @@ static inline struct skb_shared_hwtstamps *skb_hwtstamps(struct sk_buff *skb)
578 return &skb_shinfo(skb)->hwtstamps; 584 return &skb_shinfo(skb)->hwtstamps;
579} 585}
580 586
581static inline union skb_shared_tx *skb_tx(struct sk_buff *skb)
582{
583 return &skb_shinfo(skb)->tx_flags;
584}
585
586/** 587/**
587 * skb_queue_empty - check if a queue is empty 588 * skb_queue_empty - check if a queue is empty
588 * @list: queue head 589 * @list: queue head
@@ -604,7 +605,7 @@ static inline int skb_queue_empty(const struct sk_buff_head *list)
604static inline bool skb_queue_is_last(const struct sk_buff_head *list, 605static inline bool skb_queue_is_last(const struct sk_buff_head *list,
605 const struct sk_buff *skb) 606 const struct sk_buff *skb)
606{ 607{
607 return (skb->next == (struct sk_buff *) list); 608 return skb->next == (struct sk_buff *)list;
608} 609}
609 610
610/** 611/**
@@ -617,7 +618,7 @@ static inline bool skb_queue_is_last(const struct sk_buff_head *list,
617static inline bool skb_queue_is_first(const struct sk_buff_head *list, 618static inline bool skb_queue_is_first(const struct sk_buff_head *list,
618 const struct sk_buff *skb) 619 const struct sk_buff *skb)
619{ 620{
620 return (skb->prev == (struct sk_buff *) list); 621 return skb->prev == (struct sk_buff *)list;
621} 622}
622 623
623/** 624/**
@@ -1123,7 +1124,7 @@ extern void skb_add_rx_frag(struct sk_buff *skb, int i, struct page *page,
1123 int off, int size); 1124 int off, int size);
1124 1125
1125#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags) 1126#define SKB_PAGE_ASSERT(skb) BUG_ON(skb_shinfo(skb)->nr_frags)
1126#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frags(skb)) 1127#define SKB_FRAG_ASSERT(skb) BUG_ON(skb_has_frag_list(skb))
1127#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb)) 1128#define SKB_LINEAR_ASSERT(skb) BUG_ON(skb_is_nonlinear(skb))
1128 1129
1129#ifdef NET_SKBUFF_DATA_USES_OFFSET 1130#ifdef NET_SKBUFF_DATA_USES_OFFSET
@@ -1255,6 +1256,11 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
1255 skb->tail += len; 1256 skb->tail += len;
1256} 1257}
1257 1258
1259static inline void skb_reset_mac_len(struct sk_buff *skb)
1260{
1261 skb->mac_len = skb->network_header - skb->mac_header;
1262}
1263
1258#ifdef NET_SKBUFF_DATA_USES_OFFSET 1264#ifdef NET_SKBUFF_DATA_USES_OFFSET
1259static inline unsigned char *skb_transport_header(const struct sk_buff *skb) 1265static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
1260{ 1266{
@@ -1364,6 +1370,11 @@ static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
1364} 1370}
1365#endif /* NET_SKBUFF_DATA_USES_OFFSET */ 1371#endif /* NET_SKBUFF_DATA_USES_OFFSET */
1366 1372
1373static inline int skb_checksum_start_offset(const struct sk_buff *skb)
1374{
1375 return skb->csum_start - skb_headroom(skb);
1376}
1377
1367static inline int skb_transport_offset(const struct sk_buff *skb) 1378static inline int skb_transport_offset(const struct sk_buff *skb)
1368{ 1379{
1369 return skb_transport_header(skb) - skb->data; 1380 return skb_transport_header(skb) - skb->data;
@@ -1436,7 +1447,7 @@ extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
1436 1447
1437static inline void __skb_trim(struct sk_buff *skb, unsigned int len) 1448static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
1438{ 1449{
1439 if (unlikely(skb->data_len)) { 1450 if (unlikely(skb_is_nonlinear(skb))) {
1440 WARN_ON(1); 1451 WARN_ON(1);
1441 return; 1452 return;
1442 } 1453 }
@@ -1561,13 +1572,25 @@ static inline struct sk_buff *netdev_alloc_skb_ip_align(struct net_device *dev,
1561 return skb; 1572 return skb;
1562} 1573}
1563 1574
1564extern struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask); 1575/**
1576 * __netdev_alloc_page - allocate a page for ps-rx on a specific device
1577 * @dev: network device to receive on
1578 * @gfp_mask: alloc_pages_node mask
1579 *
1580 * Allocate a new page. dev currently unused.
1581 *
1582 * %NULL is returned if there is no free memory.
1583 */
1584static inline struct page *__netdev_alloc_page(struct net_device *dev, gfp_t gfp_mask)
1585{
1586 return alloc_pages_node(NUMA_NO_NODE, gfp_mask, 0);
1587}
1565 1588
1566/** 1589/**
1567 * netdev_alloc_page - allocate a page for ps-rx on a specific device 1590 * netdev_alloc_page - allocate a page for ps-rx on a specific device
1568 * @dev: network device to receive on 1591 * @dev: network device to receive on
1569 * 1592 *
1570 * Allocate a new page node local to the specified device. 1593 * Allocate a new page. dev currently unused.
1571 * 1594 *
1572 * %NULL is returned if there is no free memory. 1595 * %NULL is returned if there is no free memory.
1573 */ 1596 */
@@ -1764,7 +1787,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
1764 1787
1765#define skb_queue_walk(queue, skb) \ 1788#define skb_queue_walk(queue, skb) \
1766 for (skb = (queue)->next; \ 1789 for (skb = (queue)->next; \
1767 prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \ 1790 skb != (struct sk_buff *)(queue); \
1768 skb = skb->next) 1791 skb = skb->next)
1769 1792
1770#define skb_queue_walk_safe(queue, skb, tmp) \ 1793#define skb_queue_walk_safe(queue, skb, tmp) \
@@ -1773,7 +1796,7 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
1773 skb = tmp, tmp = skb->next) 1796 skb = tmp, tmp = skb->next)
1774 1797
1775#define skb_queue_walk_from(queue, skb) \ 1798#define skb_queue_walk_from(queue, skb) \
1776 for (; prefetch(skb->next), (skb != (struct sk_buff *)(queue)); \ 1799 for (; skb != (struct sk_buff *)(queue); \
1777 skb = skb->next) 1800 skb = skb->next)
1778 1801
1779#define skb_queue_walk_from_safe(queue, skb, tmp) \ 1802#define skb_queue_walk_from_safe(queue, skb, tmp) \
@@ -1783,11 +1806,20 @@ static inline int pskb_trim_rcsum(struct sk_buff *skb, unsigned int len)
1783 1806
1784#define skb_queue_reverse_walk(queue, skb) \ 1807#define skb_queue_reverse_walk(queue, skb) \
1785 for (skb = (queue)->prev; \ 1808 for (skb = (queue)->prev; \
1786 prefetch(skb->prev), (skb != (struct sk_buff *)(queue)); \ 1809 skb != (struct sk_buff *)(queue); \
1787 skb = skb->prev) 1810 skb = skb->prev)
1788 1811
1812#define skb_queue_reverse_walk_safe(queue, skb, tmp) \
1813 for (skb = (queue)->prev, tmp = skb->prev; \
1814 skb != (struct sk_buff *)(queue); \
1815 skb = tmp, tmp = skb->prev)
1816
1817#define skb_queue_reverse_walk_from_safe(queue, skb, tmp) \
1818 for (tmp = skb->prev; \
1819 skb != (struct sk_buff *)(queue); \
1820 skb = tmp, tmp = skb->prev)
1789 1821
1790static inline bool skb_has_frags(const struct sk_buff *skb) 1822static inline bool skb_has_frag_list(const struct sk_buff *skb)
1791{ 1823{
1792 return skb_shinfo(skb)->frag_list != NULL; 1824 return skb_shinfo(skb)->frag_list != NULL;
1793} 1825}
@@ -1853,7 +1885,7 @@ extern void skb_split(struct sk_buff *skb,
1853extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb, 1885extern int skb_shift(struct sk_buff *tgt, struct sk_buff *skb,
1854 int shiftlen); 1886 int shiftlen);
1855 1887
1856extern struct sk_buff *skb_segment(struct sk_buff *skb, int features); 1888extern struct sk_buff *skb_segment(struct sk_buff *skb, u32 features);
1857 1889
1858static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, 1890static inline void *skb_header_pointer(const struct sk_buff *skb, int offset,
1859 int len, void *buffer) 1891 int len, void *buffer)
@@ -1987,8 +2019,8 @@ extern void skb_tstamp_tx(struct sk_buff *orig_skb,
1987 2019
1988static inline void sw_tx_timestamp(struct sk_buff *skb) 2020static inline void sw_tx_timestamp(struct sk_buff *skb)
1989{ 2021{
1990 union skb_shared_tx *shtx = skb_tx(skb); 2022 if (skb_shinfo(skb)->tx_flags & SKBTX_SW_TSTAMP &&
1991 if (shtx->software && !shtx->in_progress) 2023 !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS))
1992 skb_tstamp_tx(skb, NULL); 2024 skb_tstamp_tx(skb, NULL);
1993} 2025}
1994 2026
@@ -2049,6 +2081,8 @@ static inline void nf_conntrack_get(struct nf_conntrack *nfct)
2049 if (nfct) 2081 if (nfct)
2050 atomic_inc(&nfct->use); 2082 atomic_inc(&nfct->use);
2051} 2083}
2084#endif
2085#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2052static inline void nf_conntrack_get_reasm(struct sk_buff *skb) 2086static inline void nf_conntrack_get_reasm(struct sk_buff *skb)
2053{ 2087{
2054 if (skb) 2088 if (skb)
@@ -2077,6 +2111,8 @@ static inline void nf_reset(struct sk_buff *skb)
2077#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 2111#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
2078 nf_conntrack_put(skb->nfct); 2112 nf_conntrack_put(skb->nfct);
2079 skb->nfct = NULL; 2113 skb->nfct = NULL;
2114#endif
2115#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2080 nf_conntrack_put_reasm(skb->nfct_reasm); 2116 nf_conntrack_put_reasm(skb->nfct_reasm);
2081 skb->nfct_reasm = NULL; 2117 skb->nfct_reasm = NULL;
2082#endif 2118#endif
@@ -2093,6 +2129,8 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
2093 dst->nfct = src->nfct; 2129 dst->nfct = src->nfct;
2094 nf_conntrack_get(src->nfct); 2130 nf_conntrack_get(src->nfct);
2095 dst->nfctinfo = src->nfctinfo; 2131 dst->nfctinfo = src->nfctinfo;
2132#endif
2133#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2096 dst->nfct_reasm = src->nfct_reasm; 2134 dst->nfct_reasm = src->nfct_reasm;
2097 nf_conntrack_get_reasm(src->nfct_reasm); 2135 nf_conntrack_get_reasm(src->nfct_reasm);
2098#endif 2136#endif
@@ -2106,6 +2144,8 @@ static inline void nf_copy(struct sk_buff *dst, const struct sk_buff *src)
2106{ 2144{
2107#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) 2145#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
2108 nf_conntrack_put(dst->nfct); 2146 nf_conntrack_put(dst->nfct);
2147#endif
2148#ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
2109 nf_conntrack_put_reasm(dst->nfct_reasm); 2149 nf_conntrack_put_reasm(dst->nfct_reasm);
2110#endif 2150#endif
2111#ifdef CONFIG_BRIDGE_NETFILTER 2151#ifdef CONFIG_BRIDGE_NETFILTER
@@ -2159,11 +2199,12 @@ static inline u16 skb_get_rx_queue(const struct sk_buff *skb)
2159 2199
2160static inline bool skb_rx_queue_recorded(const struct sk_buff *skb) 2200static inline bool skb_rx_queue_recorded(const struct sk_buff *skb)
2161{ 2201{
2162 return (skb->queue_mapping != 0); 2202 return skb->queue_mapping != 0;
2163} 2203}
2164 2204
2165extern u16 skb_tx_hash(const struct net_device *dev, 2205extern u16 __skb_tx_hash(const struct net_device *dev,
2166 const struct sk_buff *skb); 2206 const struct sk_buff *skb,
2207 unsigned int num_tx_queues);
2167 2208
2168#ifdef CONFIG_XFRM 2209#ifdef CONFIG_XFRM
2169static inline struct sec_path *skb_sec_path(struct sk_buff *skb) 2210static inline struct sec_path *skb_sec_path(struct sk_buff *skb)
@@ -2209,6 +2250,21 @@ static inline void skb_forward_csum(struct sk_buff *skb)
2209 skb->ip_summed = CHECKSUM_NONE; 2250 skb->ip_summed = CHECKSUM_NONE;
2210} 2251}
2211 2252
2253/**
2254 * skb_checksum_none_assert - make sure skb ip_summed is CHECKSUM_NONE
2255 * @skb: skb to check
2256 *
2257 * fresh skbs have their ip_summed set to CHECKSUM_NONE.
2258 * Instead of forcing ip_summed to CHECKSUM_NONE, we can
2259 * use this helper, to document places where we make this assertion.
2260 */
2261static inline void skb_checksum_none_assert(struct sk_buff *skb)
2262{
2263#ifdef DEBUG
2264 BUG_ON(skb->ip_summed != CHECKSUM_NONE);
2265#endif
2266}
2267
2212bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off); 2268bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off);
2213#endif /* __KERNEL__ */ 2269#endif /* __KERNEL__ */
2214#endif /* _LINUX_SKBUFF_H */ 2270#endif /* _LINUX_SKBUFF_H */