From: Stuart Henderson Subject: Re: update ieee80211_classify() for more responsive SSH To: Stefan Sperling , Date: Wed, 03 Dec 2025 18:51:14 +0000 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 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; > } > }