|
@@ -3937,12 +3937,14 @@ EXPORT_SYMBOL_GPL(skb_scrub_packet);
|
|
unsigned int skb_gso_transport_seglen(const struct sk_buff *skb)
|
|
unsigned int skb_gso_transport_seglen(const struct sk_buff *skb)
|
|
{
|
|
{
|
|
const struct skb_shared_info *shinfo = skb_shinfo(skb);
|
|
const struct skb_shared_info *shinfo = skb_shinfo(skb);
|
|
- unsigned int hdr_len;
|
|
|
|
|
|
|
|
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
|
|
if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6)))
|
|
- hdr_len = tcp_hdrlen(skb);
|
|
|
|
- else
|
|
|
|
- hdr_len = sizeof(struct udphdr);
|
|
|
|
- return hdr_len + shinfo->gso_size;
|
|
|
|
|
|
+ return tcp_hdrlen(skb) + shinfo->gso_size;
|
|
|
|
+
|
|
|
|
+ /* UFO sets gso_size to the size of the fragmentation
|
|
|
|
+ * payload, i.e. the size of the L4 (UDP) header is already
|
|
|
|
+ * accounted for.
|
|
|
|
+ */
|
|
|
|
+ return shinfo->gso_size;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(skb_gso_transport_seglen);
|
|
EXPORT_SYMBOL_GPL(skb_gso_transport_seglen);
|