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...@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; +} struct eth_header { uint8_t h_dest[ETH_ALEN]; /* destination eth addr */ -- 2.17.1