On Tue, 16 Jun 2026 21:10:01 +0800 Xingui Yang <[email protected]> wrote:
> The tx_vlan set and tx_qinq set commands only accepted VLAN ID in range > [0, 4095]. This prevented users from setting 802.1p priority and CFI > bits when using hardware VLAN insertion. > > Since mbuf vlan_tci field already supports full 16-bit VLAN Tag Control > Information (TCI), relax the validation for TX paths to allow priority > and CFI bits. The vlan_id parameter now accepts: > - Bits 0-11: VLAN ID (0-4095) > - Bit 12: CFI (Canonical Format Indicator) > - Bits 13-15: Priority (0-7, 802.1p CoS) > > Suggested-by: Stephen Hemminger <[email protected]> > Suggested-by: fengchengwen <[email protected]> > Signed-off-by: Xingui Yang <[email protected]> > --- > v2: > - Removed --enable-vlan-priority option and global variable as suggested > by Stephen Hemminger. The feature is now always enabled for TX paths > - RX VLAN filter continues to enforce strict VLAN ID validation as > suggested by fengchengwen > - Added documentation updates for testpmd_funcs.rst and release notes > > app/test-pmd/config.c | 13 ++++++++----- > doc/guides/rel_notes/release_26_07.rst | 7 +++++++ > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 17 ++++++++++++++--- > 3 files changed, 29 insertions(+), 8 deletions(-) > > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index 9d457ca88e..38758f9c05 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -1241,8 +1241,11 @@ void print_valid_ports(void) > } > > static int > -vlan_id_is_invalid(uint16_t vlan_id) > +vlan_id_is_invalid(uint16_t vlan_id, bool is_tx) > { > + if (is_tx) > + return 0; > + > if (vlan_id < 4096) > return 0; > fprintf(stderr, "Invalid vlan_id %d (must be < 4096)\n", vlan_id); > @@ -6876,7 +6879,7 @@ rx_vft_set(portid_t port_id, uint16_t vlan_id, int on) > > if (port_id_is_invalid(port_id, ENABLED_WARN)) > return 1; > - if (vlan_id_is_invalid(vlan_id)) > + if (vlan_id_is_invalid(vlan_id, false)) > return 1; > diag = rte_eth_dev_vlan_filter(port_id, vlan_id, on); > if (diag == 0) > @@ -6923,7 +6926,7 @@ tx_vlan_set(portid_t port_id, uint16_t vlan_id) > struct rte_eth_dev_info dev_info; > int ret; > > - if (vlan_id_is_invalid(vlan_id)) > + if (vlan_id_is_invalid(vlan_id, true)) > return; Why have the is_tx flag if it is always used as constant? Just remove the whole vlan_id_is_invalid() branch test in the transmit path. Maybe add a comment that any VLAN is allowed on transmit? Or make a new function. Since VLAN of 0xffff is reserved. Though you might want to allow it since testpmd is for testing even invalid packets.

