Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: update ieee80211_classify() for more responsive SSH
To:
Stefan Sperling <stsp@stsp.name>, <tech@openbsd.org>
Date:
Wed, 03 Dec 2025 18:51:14 +0000

Download raw body.

Thread
This is absolutely the right thing to do for EF.

Unsure about CS6/7 (spelt IPTOS_PREC_INTERNETCONTROL where we set it), 
there are reasons why you might want  bgp/ospf over an 802.11 network...

-- 
  Sent from a phone, apologies for poor formatting.

On 3 December 2025 15:54:59 Stefan Sperling <stsp@stsp.name> wrote:

> Update ieee80211_classify to RFC8325, applying the recommended mapping
> table from section 4.3.
>
> Most importantly for us, this changes the mapping of DSCP_EF from AC_BE
> (best effort, lowest priority) to AC_VO (voice, highest priority).
>
> ssh uses DSCP_EF ssh to mark interactive sessions. With this patch, ssh
> session over wifi remain responsive while bulk transfers are running.
>
> I started using this a few days ago and I don't want to go back, ever.
> To really see the effect I recommend trying ssh from two systems
> side-by-side, one with the patch applied and one without, while running
> tcpbench or similar benchmarking tools which produce bulk traffic.
>
> Another change is that the values CS7 and CS6, previously known as
> INTERNETCONTROL and NETCONTROL, are now mapped to lowest priority because
> the RFC recommends doing so as part of its security considerations.
> If I understand the RFC correctly, packets of these classes should never
> legitimately originate from wifi networks.
>
> The RFC mentions DSCP_VA, 0x2c, which we do not define yet.
> For now, I have added this value in a comment only.
>
> ok?
>
>
> M  sys/net80211/ieee80211_output.c  |  15+  9-
>
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> commit - db26abeeded6dafd2ce6b3e3273cd8927e3a6470
> commit + 17ce08ff227e2db6cc049ee1b51d803bbee4f76b
> blob - 1ffd981a6fe179bc9f0689caaaad2af30277b453
> blob + fc86358d2d2ddb083ad70526b94e1ec806a4ff4a
> --- sys/net80211/ieee80211_output.c
> +++ sys/net80211/ieee80211_output.c
> @@ -452,21 +452,27 @@ ieee80211_classify(struct ieee80211com *ic, struct mbu
>  return 0;
>
>  /*
> - * Map Differentiated Services Codepoint field (see RFC2474).
> + * Map Differentiated Services Codepoint field (see RFC8325).
>  * Preserves backward compatibility with IP Precedence field.
>  */
>  switch (ds_field & 0xfc) {
> - case IPTOS_PREC_PRIORITY:
> + case IPTOS_DSCP_EF:
> + /* TODO: case IPTOS_DSCP_VA: */
> + return EDCA_AC_VO;
> + case IPTOS_DSCP_CS5:
> + case IPTOS_DSCP_AF41:
> + case IPTOS_DSCP_AF42:
> + case IPTOS_DSCP_AF43:
> + case IPTOS_DSCP_CS4:
> + case IPTOS_DSCP_AF31:
> + case IPTOS_DSCP_AF32:
> + case IPTOS_DSCP_AF33:
> + case IPTOS_DSCP_CS3:
>  return EDCA_AC_VI;
> - case IPTOS_PREC_IMMEDIATE:
> + case IPTOS_DSCP_CS1:
>  return EDCA_AC_BK;
> - case IPTOS_PREC_FLASH:
> - case IPTOS_PREC_FLASHOVERRIDE:
> - case IPTOS_PREC_CRITIC_ECP:
> - case IPTOS_PREC_INTERNETCONTROL:
> - case IPTOS_PREC_NETCONTROL:
> - return EDCA_AC_VO;
>  default:
> + /* unused, or explicitly mapped to UP 0 */
>  return EDCA_AC_BE;
>  }
> }