[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAHfguVy4=Gtm0cmToswashVSwmS+kOk57qg+H+jspaHrH8tJkg@mail.gmail.com>
Date: Tue, 10 Mar 2020 21:11:06 -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
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.
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.
>
> Michal Kubecek
Powered by blists - more mailing lists