All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>,
	Jason Wang <jasowang@redhat.com>,
	"qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>
Subject: Re: [PATCH v3 01/13] net: eth: Add a helper to pad a short ethernet frame
Date: Tue, 16 Mar 2021 16:58:33 +0800	[thread overview]
Message-ID: <CAEUhbmUNN_s9kGvgn6gnFP191J9iu7y7Kq3Mwzgg=XCzxm0nuA@mail.gmail.com> (raw)
In-Reply-To: <cea98a59-0327-0a80-8a9f-1f4a8008cd4b@redhat.com>

On Tue, Mar 16, 2021 at 4:49 PM Philippe Mathieu-Daudé
<philmd@redhat.com> wrote:
>
> On 3/16/21 9:12 AM, Bin Meng wrote:
> > Add a helper to pad a short ethernet frame to the minimum required
> > length, which can be used by backend codes.
> >
> > Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> >
> > ---
> >
> > Changes in v3:
> > - use 'without' instead of 'sans'
> > - add a helper to pad short frames
> >
> >  include/net/eth.h | 25 +++++++++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> >
> > diff --git a/include/net/eth.h b/include/net/eth.h
> > index 0671be6916..bc064f8e52 100644
> > --- a/include/net/eth.h
> > +++ b/include/net/eth.h
> > @@ -31,6 +31,31 @@
> >
> >  #define ETH_ALEN 6
> >  #define ETH_HLEN 14
> > +#define ETH_ZLEN 60     /* Min. octets in frame without FCS */
> > +
> > +/**
> > + * pad_short_frame - pad a short frame to the minimum ethernet frame length
> > + *
> > + * If the ethernet frame size is shorter than 60 bytes, it will be padded to
> > + * 60 bytes at the address @min_pkt.
> > + *
> > + * @min_pkt: buffer address to hold the padded frame
> > + * @pkt: address to hold the original ethernet frame
> > + * @size: size of the original ethernet frame
> > + * @return true if the frame is padded, otherwise false
> > + */
> > +static inline bool pad_short_frame(uint8_t *min_pkt, const uint8_t *pkt,
> > +                                   int size)
> > +{
> > +    if (size < ETH_ZLEN) {
> > +        /* pad to minimum ethernet frame length */
> > +        memcpy(min_pkt, pkt, size);
> > +        memset(&min_pkt[size], 0, ETH_ZLEN - size);
> > +        return true;
> > +    }
> > +
> > +    return false;
> > +}
>
> I don't want to be too nitpicky but since I'm Cc'ed...
>
> - 'ethernet' -> 'Ethernet'
>
> - I'm not sure inlining is justified
>
> - The same function is used for 2 different operations,
>   . check if padding is required
>   . do the padding
>
> - If we provide a function a buffer to fill, we need to check the
>   buffer size is big enough to avoid overflow
>
> What about something like:
>
>   bool pad_short_frame(char *padded_pkt, size_t *padded_buflen,
>                        const void *pkt, size_t pkt_size);
>   {
>       assert(padded_buflen && *padded_buflen >= ETH_ZLEN);
>       if (src_size >= ETH_ZLEN) {
>           return false;
>       }
>       /* pad to minimum ethernet frame length */
>       memcpy(padded_pkt, pkt, pkt_size);
>       memset(&padded_pkt[pkt_size], 0, ETH_ZLEN - padded_buflen);
>       *padded_buflen = ETH_ZLEN;
>
>       return true;
>   }
>
> What do you think?

Looks good to me. Will update in the next version.

Regards,
Bin


  reply	other threads:[~2021-03-16  9:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-16  8:12 [PATCH v3 00/13] net: Pad short frames for network backends Bin Meng
2021-03-16  8:12 ` [PATCH v3 01/13] net: eth: Add a helper to pad a short ethernet frame Bin Meng
2021-03-16  8:49   ` Philippe Mathieu-Daudé
2021-03-16  8:58     ` Bin Meng [this message]
2021-03-16  8:12 ` [PATCH v3 02/13] net: Add a 'do_not_pad" to NetClientState Bin Meng
2021-03-16  8:12 ` [PATCH v3 03/13] net: slirp: Pad short frames to minimum size before send Bin Meng
2021-03-16  8:12 ` [PATCH v3 04/13] net: tap: " Bin Meng
2021-03-16 10:19   ` Philippe Mathieu-Daudé
2021-03-16  8:12 ` [PATCH v3 05/13] hw/net: virtio-net: Initialize nc->do_not_pad to true Bin Meng
2021-03-16  8:12 ` [PATCH v3 06/13] hw/net: e1000: Remove the logic of padding short frames in the receive path Bin Meng
2021-03-16  8:12 ` [PATCH v3 07/13] hw/net: vmxnet3: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 08/13] hw/net: i82596: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 09/13] hw/net: ne2000: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 10/13] hw/net: pcnet: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 11/13] hw/net: rtl8139: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 12/13] hw/net: sungem: " Bin Meng
2021-03-16  8:12 ` [PATCH v3 13/13] hw/net: sunhme: " Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEUhbmUNN_s9kGvgn6gnFP191J9iu7y7Kq3Mwzgg=XCzxm0nuA@mail.gmail.com' \
    --to=bmeng.cn@gmail.com \
    --cc=jasowang@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.