Index | Thread | Search

From:
Jan Klemkow <jan@openbsd.org>
Subject:
Re: ixl(4): Fix hardmtu
To:
tech@openbsd.org
Date:
Fri, 21 Aug 2026 18:53:53 +0200

Download raw body.

Thread
  • Jan Klemkow:

    ixl(4): Fix hardmtu

    • Jan Klemkow:

      ixl(4): Fix hardmtu

ping?

On Thu, Jul 30, 2026 at 06:16:40PM +0200, Jan Klemkow wrote:
> Using ixl(4) with it's hardmtu is broken, because packets with hardmtu
> were dropped cause they are bigger then rxmax is configured.
> 
> The Intel Ethernet Controller X710/XXV710/XL710 Datasheet said:
> 
> Table 1-3. Link layer Ethernet port features
> 
> 	Maximum Transmit Unit Size (MTU) is 9728 - Ethernet header/CRC =
> 	9728 - 18 = 9710 bytes (jumbo frames)
> 	MTU can be further reduced by additional header fields such as
> 	Virtual Local Area Network (VLAN) tag(s), etc.
> 
> Table 8-12. LAN Rx Queue Context in the Private Host Memory
> 
> 	The "rxmax" parameter defines the whole packet size starting at
> 	the L2 header up to including the Ethernet CRC.
> 
> The following diff sending and receiving sizes in the ixl(4) code.  The
> result is a working hardmtu of 9706 and its also working with vlan(4).
> 
> ok?
> 
> Index: dev/pci/if_ixl.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_ixl.c,v
> diff -u -p -r1.117 if_ixl.c
> --- dev/pci/if_ixl.c	23 Jun 2026 14:40:40 -0000	1.117
> +++ dev/pci/if_ixl.c	30 Jul 2026 15:15:53 -0000
> @@ -901,7 +901,8 @@ struct ixl_rx_wb_desc_32 {
>  #define IXL_TX_QUEUE_ALIGN		128
>  #define IXL_RX_QUEUE_ALIGN		128
>  
> -#define IXL_HARDMTU			9712 /* 9726 - ETHER_HDR_LEN */
> +#define IXL_HARDMTU			(9728 - ETHER_HDR_LEN - EVL_ENCAPLEN \
> +					    - ETHER_CRC_LEN)
>  #define IXL_TSO_SIZE			((255 * 1024) - 1)
>  #define IXL_MAX_DMA_SEG_SIZE		((16 * 1024) - 1)
>  
> @@ -3171,7 +3172,8 @@ ixl_rxr_config(struct ixl_softc *sc, str
>  	rxq.crcstrip = 1;
>  	rxq.l2tsel = IXL_HMC_RXQ_L2TSEL_1ST_TAG_TO_L2TAG1;
>  	rxq.showiv = 0;
> -	rxq.rxmax = htole16(IXL_HARDMTU);
> +	rxq.rxmax = htole16(IXL_HARDMTU + ETHER_HDR_LEN + EVL_ENCAPLEN +
> +	    ETHER_CRC_LEN);
>  	rxq.tphrdesc_ena = 0;
>  	rxq.tphwdesc_ena = 0;
>  	rxq.tphdata_ena = 0;
>