diff options
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 6f0b2f7d001..881fe80f01d 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -147,8 +147,8 @@ struct skb_shared_info { | |||
147 | 147 | ||
148 | /* We divide dataref into two halves. The higher 16 bits hold references | 148 | /* We divide dataref into two halves. The higher 16 bits hold references |
149 | * to the payload part of skb->data. The lower 16 bits hold references to | 149 | * to the payload part of skb->data. The lower 16 bits hold references to |
150 | * the entire skb->data. It is up to the users of the skb to agree on | 150 | * the entire skb->data. A clone of a headerless skb holds the length of |
151 | * where the payload starts. | 151 | * the header in skb->hdr_len. |
152 | * | 152 | * |
153 | * All users must obey the rule that the skb->data reference count must be | 153 | * All users must obey the rule that the skb->data reference count must be |
154 | * greater than or equal to the payload reference count. | 154 | * greater than or equal to the payload reference count. |
@@ -206,6 +206,7 @@ typedef unsigned char *sk_buff_data_t; | |||
206 | * @len: Length of actual data | 206 | * @len: Length of actual data |
207 | * @data_len: Data length | 207 | * @data_len: Data length |
208 | * @mac_len: Length of link layer header | 208 | * @mac_len: Length of link layer header |
209 | * @hdr_len: writable header length of cloned skb | ||
209 | * @csum: Checksum (must include start/offset pair) | 210 | * @csum: Checksum (must include start/offset pair) |
210 | * @csum_start: Offset from skb->head where checksumming should start | 211 | * @csum_start: Offset from skb->head where checksumming should start |
211 | * @csum_offset: Offset from csum_start where checksum should be stored | 212 | * @csum_offset: Offset from csum_start where checksum should be stored |
@@ -260,8 +261,9 @@ struct sk_buff { | |||
260 | char cb[48]; | 261 | char cb[48]; |
261 | 262 | ||
262 | unsigned int len, | 263 | unsigned int len, |
263 | data_len, | 264 | data_len; |
264 | mac_len; | 265 | __u16 mac_len, |
266 | hdr_len; | ||
265 | union { | 267 | union { |
266 | __wsum csum; | 268 | __wsum csum; |
267 | struct { | 269 | struct { |
@@ -1322,6 +1324,20 @@ static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, | |||
1322 | } | 1324 | } |
1323 | 1325 | ||
1324 | /** | 1326 | /** |
1327 | * skb_clone_writable - is the header of a clone writable | ||
1328 | * @skb: buffer to check | ||
1329 | * @len: length up to which to write | ||
1330 | * | ||
1331 | * Returns true if modifying the header part of the cloned buffer | ||
1332 | * does not requires the data to be copied. | ||
1333 | */ | ||
1334 | static inline int skb_clone_writable(struct sk_buff *skb, int len) | ||
1335 | { | ||
1336 | return !skb_header_cloned(skb) && | ||
1337 | skb_headroom(skb) + len <= skb->hdr_len; | ||
1338 | } | ||
1339 | |||
1340 | /** | ||
1325 | * skb_cow - copy header of skb when it is required | 1341 | * skb_cow - copy header of skb when it is required |
1326 | * @skb: buffer to cow | 1342 | * @skb: buffer to cow |
1327 | * @headroom: needed headroom | 1343 | * @headroom: needed headroom |