[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAHfguVwX2REz95wf1MeSey6yTqhqawi63nrDnMwqP4MZ_Hzxag@mail.gmail.com>
Date: Tue, 10 Mar 2020 23:17:01 -0700
From: Andrej Ras <kermitthekoder@...il.com>
To: Michal Kubecek <mkubecek@...e.cz>
Cc: netdev@...r.kernel.org
Subject: Re: What does this code do
Thanks a lot for the explanation.
On Tue, Mar 10, 2020 at 10:53 PM Michal Kubecek <mkubecek@...e.cz> wrote:
>
> On Tue, Mar 10, 2020 at 09:11:06PM -0700, Andrej Ras wrote:
> > On Tue, Mar 10, 2020 at 3:12 PM Michal Kubecek <mkubecek@...e.cz> wrote:
> > >
> > > On Tue, Mar 10, 2020 at 02:42:11PM -0700, Andrej Ras wrote:
> > > > While browsing the Linux networking code I came across these two lines
> > > > in __ip_append_data() which I do not understand.
> > > >
> > > > /* Check if the remaining data fits into current packet. */
> > > > copy = mtu - skb->len;
> > > > if (copy < length)
> > > > copy = maxfraglen - skb->len;
> > > > if (copy <= 0) {
> > > >
> > > > Why not just use maxfraglen.
> > > >
> > > > Perhaps someone can explain why this is needed.
> > >
> > > This function appends more data to an skb which can already contain some
> > > payload. Therefore you need to take current length (from earlier) into
> > > account, not only newly appended data.
> > >
> > > This can be easily enforced e.g. with TCP_CORK or UDP_CORK socket option
> > > or MSG_MORE flag.
> > >
> > I understand that the code is appending data, what I do not understand
> > is why is it first calculating the remaining space by taking the
> > difference using the size of mtu and if the difference is <= 0 it
> > recalculates the difference using maxfraglen. Why not just use
> > maxfraglen -- All we need to know is how much more data can be added
> > to the skb.
>
> Ah, I see. The first test checks if we can fit into an unfragmented
> packet so that we check against mtu. If we don't fit, fragmentation will
> be needed so that maxfraglen is the limit (maxfraglen can be shorter
> than mtu due to the rounding down to a multiple of 8).
>
> Michal Kubecek
>
> (Please do not top post in developer lists.)
Powered by blists - more mailing lists