Commit f5b17294 authored by Pravin B Shelar's avatar Pravin B Shelar Committed by David S. Miller

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: default avatarPravin B Shelar <pshelar@nicira.com>
Acked-by: default avatarStephen Hemminger <stephen@networkplumber.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ee579677
...@@ -867,6 +867,17 @@ struct sk_buff *skb_clone(struct sk_buff *skb, gfp_t gfp_mask) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment