net: Add skb_headers_offset_update helper function.
This function will be used in next VXLAN_GSO patch. This patch does not change any functionality. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
ee579677c2
commit
f5b1729443
@@ -867,6 +867,17 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(skb_clone);
|
EXPORT_SYMBOL(skb_clone);
|
||||||
|
|
||||||
|
static void skb_headers_offset_update(struct sk_buff *skb, int off)
|
||||||
|
{
|
||||||
|
/* {transport,network,mac}_header and tail are relative to skb->head */
|
||||||
|
skb->transport_header += off;
|
||||||
|
skb->network_header += off;
|
||||||
|
if (skb_mac_header_was_set(skb))
|
||||||
|
skb->mac_header += off;
|
||||||
|
skb->inner_transport_header += off;
|
||||||
|
skb->inner_network_header += off;
|
||||||
|
}
|
||||||
|
|
||||||
static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
||||||
{
|
{
|
||||||
#ifndef NET_SKBUFF_DATA_USES_OFFSET
|
#ifndef NET_SKBUFF_DATA_USES_OFFSET
|
||||||
@@ -879,13 +890,7 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
|||||||
__copy_skb_header(new, old);
|
__copy_skb_header(new, old);
|
||||||
|
|
||||||
#ifndef NET_SKBUFF_DATA_USES_OFFSET
|
#ifndef NET_SKBUFF_DATA_USES_OFFSET
|
||||||
/* {transport,network,mac}_header are relative to skb->head */
|
skb_headers_offset_update(new, offset);
|
||||||
new->transport_header += offset;
|
|
||||||
new->network_header += offset;
|
|
||||||
if (skb_mac_header_was_set(new))
|
|
||||||
new->mac_header += offset;
|
|
||||||
new->inner_transport_header += offset;
|
|
||||||
new->inner_network_header += offset;
|
|
||||||
#endif
|
#endif
|
||||||
skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size;
|
skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size;
|
||||||
skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs;
|
skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs;
|
||||||
@@ -1077,14 +1082,8 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
|
|||||||
#else
|
#else
|
||||||
skb->end = skb->head + size;
|
skb->end = skb->head + size;
|
||||||
#endif
|
#endif
|
||||||
/* {transport,network,mac}_header and tail are relative to skb->head */
|
|
||||||
skb->tail += off;
|
skb->tail += off;
|
||||||
skb->transport_header += off;
|
skb_headers_offset_update(skb, off);
|
||||||
skb->network_header += off;
|
|
||||||
if (skb_mac_header_was_set(skb))
|
|
||||||
skb->mac_header += off;
|
|
||||||
skb->inner_transport_header += off;
|
|
||||||
skb->inner_network_header += off;
|
|
||||||
/* Only adjust this if it actually is csum_start rather than csum */
|
/* Only adjust this if it actually is csum_start rather than csum */
|
||||||
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||||||
skb->csum_start += nhead;
|
skb->csum_start += nhead;
|
||||||
@@ -1180,12 +1179,7 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
|
|||||||
if (n->ip_summed == CHECKSUM_PARTIAL)
|
if (n->ip_summed == CHECKSUM_PARTIAL)
|
||||||
n->csum_start += off;
|
n->csum_start += off;
|
||||||
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
||||||
n->transport_header += off;
|
skb_headers_offset_update(n, off);
|
||||||
n->network_header += off;
|
|
||||||
if (skb_mac_header_was_set(skb))
|
|
||||||
n->mac_header += off;
|
|
||||||
n->inner_transport_header += off;
|
|
||||||
n->inner_network_header += off;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
|
Reference in New Issue
Block a user