All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Morten Brørup" <mb@smartsharesystems.com>
To: <bruce.richardson@intel.com>, <stephen@networkplumber.org>
Cc: <dev@dpdk.org>
Subject: RE: [PATCH] net: improve vlan header type alignment
Date: Sun, 13 Oct 2024 10:51:50 +0200	[thread overview]
Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F7CC@smartserver.smartshare.dk> (raw)
In-Reply-To: <20241013083554.97489-1-mb@smartsharesystems.com>

> From: Morten Brørup [mailto:mb@smartsharesystems.com]
> Sent: Sunday, 13 October 2024 10.36
> 
> Ethernet packets can be VLAN tagged, i.e. an Ethernet header can have a
> VLAN tag (a.k.a. VLAN header) embedded.
> Since the Ethernet header is 2 byte aligned, and the VLAN tag is
> directly
> related to the Ethernet header, the VLAN tag is also 2 byte aligned, so
> packing the VLAN tag structure is not necessary.

Stephen, Bruce, you missed the VLAN header type in this patch:
https://git.dpdk.org/dpdk/commit/lib/librte_net/rte_ether.h?id=da5350ef29afd35c1adabe76f60832f3092269ad

This patch completes your work.

> 
> Furthermore, the Ethernet header type is implictly 2 byte aligned, so
> removed the superfluous explicit 2 byte alignment.
> 
> Added static_asserts to verify the size and alignment of the various
> Ethernet types.
> 
> Signed-off-by: Morten Brørup <mb@smartsharesystems.com>
> ---
>  lib/net/rte_ether.h | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/net/rte_ether.h b/lib/net/rte_ether.h
> index 403e84f50b..c9a0b536c3 100644
> --- a/lib/net/rte_ether.h
> +++ b/lib/net/rte_ether.h
> @@ -11,6 +11,8 @@
>   * Ethernet Helpers in RTE
>   */
> 
> +#include <assert.h>
> +#include <stdalign.h>
>  #include <stdint.h>
>  #include <stdio.h>
> 
> @@ -75,6 +77,11 @@ struct __rte_aligned(2) rte_ether_addr {
>  	uint8_t addr_bytes[RTE_ETHER_ADDR_LEN]; /**< Addr bytes in tx
> order */
>  };
> 
> +static_assert(sizeof(struct rte_ether_addr) == 6,
> +		"sizeof(struct rte_ether_addr) == 6");
> +static_assert(alignof(struct rte_ether_addr) == 2,
> +		"alignof(struct rte_ether_addr) == 2");
> +
>  #define RTE_ETHER_LOCAL_ADMIN_ADDR 0x02 /**< Locally assigned Eth.
> address. */
>  #define RTE_ETHER_GROUP_ADDR  0x01 /**< Multicast or broadcast Eth.
> address. */
> 
> @@ -290,12 +297,17 @@ rte_ether_unformat_addr(const char *str, struct
> rte_ether_addr *eth_addr);
>   * Ethernet header: Contains the destination address, source address
>   * and frame type.
>   */
> -struct __rte_aligned(2) rte_ether_hdr {
> +struct rte_ether_hdr {
>  	struct rte_ether_addr dst_addr; /**< Destination address. */
>  	struct rte_ether_addr src_addr; /**< Source address. */
>  	rte_be16_t ether_type; /**< Frame type. */
>  };
> 
> +static_assert(sizeof(struct rte_ether_hdr) == 14,
> +		"sizeof(struct rte_ether_hdr) == 14");
> +static_assert(alignof(struct rte_ether_hdr) == 2,
> +		"alignof(struct rte_ether_hdr) == 2");
> +
>  /**
>   * Ethernet VLAN Header.
>   * Contains the 16-bit VLAN Tag Control Identifier and the Ethernet
> type
> @@ -304,7 +316,12 @@ struct __rte_aligned(2) rte_ether_hdr {
>  struct rte_vlan_hdr {
>  	rte_be16_t vlan_tci;  /**< Priority (3) + CFI (1) + Identifier
> Code (12) */
>  	rte_be16_t eth_proto; /**< Ethernet type of encapsulated frame.
> */
> -} __rte_packed;
> +};
> +
> +static_assert(sizeof(struct rte_vlan_hdr) == 4,
> +		"sizeof(struct rte_vlan_hdr) == 4");
> +static_assert(alignof(struct rte_vlan_hdr) == 2,
> +		"alignof(struct rte_vlan_hdr) == 2");
> 
> 
> 
> --
> 2.43.0


  reply	other threads:[~2024-10-13  8:51 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-13  8:35 [PATCH] net: improve vlan header type alignment Morten Brørup
2024-10-13  8:51 ` Morten Brørup [this message]
2024-10-14  5:42 ` fengchengwen
2024-10-14  8:04 ` Bruce Richardson
2024-10-17 20:44 ` Thomas Monjalon
2024-10-17 23:41   ` Morten Brørup
2024-10-18  9:11 ` Thomas Monjalon

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=98CBD80474FA8B44BF855DF32C47DC35E9F7CC@smartserver.smartshare.dk \
    --to=mb@smartsharesystems.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=stephen@networkplumber.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.