Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Pravin B Shelar and committed by
David S. Miller
f5b17294 ee579677

+14 -20
+14 -20
net/core/skbuff.c
··· 867 867 } 868 868 EXPORT_SYMBOL(skb_clone); 869 869 870 + static void skb_headers_offset_update(struct sk_buff *skb, int off) 871 + { 872 + /* {transport,network,mac}_header and tail are relative to skb->head */ 873 + skb->transport_header += off; 874 + skb->network_header += off; 875 + if (skb_mac_header_was_set(skb)) 876 + skb->mac_header += off; 877 + skb->inner_transport_header += off; 878 + skb->inner_network_header += off; 879 + } 880 + 870 881 static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old) 871 882 { 872 883 #ifndef NET_SKBUFF_DATA_USES_OFFSET ··· 890 879 __copy_skb_header(new, old); 891 880 892 881 #ifndef NET_SKBUFF_DATA_USES_OFFSET 893 - /* {transport,network,mac}_header are relative to skb->head */ 894 - new->transport_header += offset; 895 - new->network_header += offset; 896 - if (skb_mac_header_was_set(new)) 897 - new->mac_header += offset; 898 - new->inner_transport_header += offset; 899 - new->inner_network_header += offset; 882 + skb_headers_offset_update(new, offset); 900 883 #endif 901 884 skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size; 902 885 skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs; ··· 1082 1077 #else 1083 1078 skb->end = skb->head + size; 1084 1079 #endif 1085 - /* {transport,network,mac}_header and tail are relative to skb->head */ 1086 1080 skb->tail += off; 1087 - skb->transport_header += off; 1088 - skb->network_header += off; 1089 - if (skb_mac_header_was_set(skb)) 1090 - skb->mac_header += off; 1091 - skb->inner_transport_header += off; 1092 - skb->inner_network_header += off; 1081 + skb_headers_offset_update(skb, off); 1093 1082 /* Only adjust this if it actually is csum_start rather than csum */ 1094 1083 if (skb->ip_summed == CHECKSUM_PARTIAL) 1095 1084 skb->csum_start += nhead; ··· 1179 1180 if (n->ip_summed == CHECKSUM_PARTIAL) 1180 1181 n->csum_start += off; 1181 1182 #ifdef NET_SKBUFF_DATA_USES_OFFSET 1182 - n->transport_header += off; 1183 - n->network_header += off; 1184 - if (skb_mac_header_was_set(skb)) 1185 - n->mac_header += off; 1186 - n->inner_transport_header += off; 1187 - n->inner_network_header += off; 1183 + skb_headers_offset_update(n, off); 1188 1184 #endif 1189 1185 1190 1186 return n;