|
@@ -21,7 +21,6 @@
|
|
|
#include <net/netlink.h>
|
|
|
#include <net/sch_generic.h>
|
|
|
#include <net/pkt_sched.h>
|
|
|
-#include <net/tcp.h>
|
|
|
|
|
|
|
|
|
/* Simple Token Bucket Filter.
|
|
@@ -148,16 +147,10 @@ static u64 psched_ns_t2l(const struct psched_ratecfg *r,
|
|
|
* Return length of individual segments of a gso packet,
|
|
|
* including all headers (MAC, IP, TCP/UDP)
|
|
|
*/
|
|
|
-static unsigned int skb_gso_seglen(const struct sk_buff *skb)
|
|
|
+static unsigned int skb_gso_mac_seglen(const struct sk_buff *skb)
|
|
|
{
|
|
|
unsigned int hdr_len = skb_transport_header(skb) - skb_mac_header(skb);
|
|
|
- const struct skb_shared_info *shinfo = skb_shinfo(skb);
|
|
|
-
|
|
|
- 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 hdr_len + skb_gso_transport_seglen(skb);
|
|
|
}
|
|
|
|
|
|
/* GSO packet is too big, segment it so that tbf can transmit
|
|
@@ -202,7 +195,7 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc *sch)
|
|
|
int ret;
|
|
|
|
|
|
if (qdisc_pkt_len(skb) > q->max_size) {
|
|
|
- if (skb_is_gso(skb) && skb_gso_seglen(skb) <= q->max_size)
|
|
|
+ if (skb_is_gso(skb) && skb_gso_mac_seglen(skb) <= q->max_size)
|
|
|
return tbf_segment(skb, sch);
|
|
|
return qdisc_reshape_fail(skb, sch);
|
|
|
}
|