msquic icon indicating copy to clipboard operation
msquic copied to clipboard

Support ECN on Windows

Open Demi-Marie opened this issue 5 years ago • 7 comments

Describe the feature you'd like supported

Support for ECN on Windows

Proposed solution

This provides similar benefits to using ECN with TCP.

Additional context

msquic.sys will definitely be able to set ECN, but I have no idea if it is possible to set ECN bits from userspace without administrative privileges. In any case, this should be documented.

Demi-Marie avatar Jun 27 '20 19:06 Demi-Marie

Is this something that can be done purely in MSquic, or does it need additional changes to Windows?

Edit: If the latter, I can close various feature requests in other QUIC libraries as “can’t fix”.

Demi-Marie avatar Jun 27 '20 19:06 Demi-Marie

@DemiMarie-parity this has been on our to do list for a while. Complete support will most likely require some Windows OS changes (which our team owns too) for full user-mode support. We haven't had a chance to completely investigate the required changes to fully support this at the UDP layer yet. We can't make any guarantees on timelines for either the UDP or QUIC layers supporting this, but it's definitely something we'll look into. We'll report back any status updated if/when we have them back on this issue.

nibanks avatar Jun 27 '20 19:06 nibanks

@nibanks Not being able to make guarantees is fine. Thank you.

Demi-Marie avatar Jun 27 '20 19:06 Demi-Marie

@nibanks Is the kernel-mode MsQuic implementation accessible to userspace via an API, and does it have ECN support? If it is accessible, are there advantages to using it over a userspace implementation?

Demi-Marie avatar Jun 29 '20 16:06 Demi-Marie

@DemiMarie-parity user-mode and kernel-mode are completely independent implementations. Both instead just rely on the available UDP APIs/layer. Kernel mode drivers that need QUIC rely on msquic.sys and user mode apps/services rely on msquic.dll.

nibanks avatar Jun 29 '20 17:06 nibanks

FYI, @Demi-Marie it seems that (though undocumented currently) ECN is working for Windows user mode. I haven't tried kernel mode yet. My latest PR integrates the appropriate usage at the datapath abstraction layer. We still don't use ECN in our congestion controller though.

nibanks avatar Aug 20 '20 16:08 nibanks

@nibanks thanks! That should be enough information to implement it for quinn.

Demi-Marie avatar Aug 26 '20 22:08 Demi-Marie