From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Ricardo Leitner Subject: Re: [Cake] [PATCH net-next v14 6/7] sch_cake: Add overhead compensation support to the rate shaper Date: Mon, 21 May 2018 20:45:13 -0300 Message-ID: <20180521234513.GH26212@localhost.localdomain> References: <152693459693.32668.4272129427997495747.stgit@alrua-kau> <152693495874.32668.11244869690098290078.stgit@alrua-kau> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Cc: netdev@vger.kernel.org, cake@lists.bufferbloat.net To: Toke =?iso-8859-1?Q?H=F8iland-J=F8rgensen?= Return-path: Received: from mail-qt0-f194.google.com ([209.85.216.194]:35591 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751244AbeEUXpS (ORCPT ); Mon, 21 May 2018 19:45:18 -0400 Received: by mail-qt0-f194.google.com with SMTP id f5-v6so21197619qth.2 for ; Mon, 21 May 2018 16:45:17 -0700 (PDT) Content-Disposition: inline In-Reply-To: <152693495874.32668.11244869690098290078.stgit@alrua-kau> Sender: netdev-owner@vger.kernel.org List-ID: On Mon, May 21, 2018 at 10:35:58PM +0200, Toke Høiland-Jørgensen wrote: > +static u32 cake_overhead(struct cake_sched_data *q, const struct sk_buff *skb) > +{ > + const struct skb_shared_info *shinfo = skb_shinfo(skb); > + unsigned int hdr_len, last_len = 0; > + u32 off = skb_network_offset(skb); > + u32 len = qdisc_pkt_len(skb); > + u16 segs = 1; > + > + q->avg_netoff = cake_ewma(q->avg_netoff, off << 16, 8); > + > + if (!shinfo->gso_size) > + return cake_calc_overhead(q, len, off); > + > + /* borrowed from qdisc_pkt_len_init() */ > + hdr_len = skb_transport_header(skb) - skb_mac_header(skb); > + > + /* + transport layer */ > + if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | > + SKB_GSO_TCPV6))) { > + const struct tcphdr *th; > + struct tcphdr _tcphdr; > + > + th = skb_header_pointer(skb, skb_transport_offset(skb), > + sizeof(_tcphdr), &_tcphdr); > + if (likely(th)) > + hdr_len += __tcp_hdrlen(th); > + } else { I didn't see some code limiting GSO packets to just TCP or UDP. Is it safe to assume that this packet is an UDP one, and not SCTP or ESP, for example? > + struct udphdr _udphdr; > + > + if (skb_header_pointer(skb, skb_transport_offset(skb), > + sizeof(_udphdr), &_udphdr)) > + hdr_len += sizeof(struct udphdr); > + } > + > + if (unlikely(shinfo->gso_type & SKB_GSO_DODGY)) > + segs = DIV_ROUND_UP(skb->len - hdr_len, > + shinfo->gso_size); > + else > + segs = shinfo->gso_segs; > + > + len = shinfo->gso_size + hdr_len; > + last_len = skb->len - shinfo->gso_size * (segs - 1); > + > + return (cake_calc_overhead(q, len, off) * (segs - 1) + > + cake_calc_overhead(q, last_len, off)); > +} > +