Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(client,server): use quinn_udp for I/O #1604

Merged
merged 50 commits into from
Feb 26, 2024

Conversation

mxinden
Copy link
Collaborator

@mxinden mxinden commented Jan 30, 2024

Use quinn_udp for socket I/O, laying the groundwork for ECN, enabling one to send/receive TOS.


Builds on top of

Discussed in #1535.

//CC @larseggert as this might already unblock you for testing.

@larseggert
Copy link
Collaborator

Let's get this merged once the deps are merged. I can resume the ECN work then.

@mxinden
Copy link
Collaborator Author

mxinden commented Feb 3, 2024

Sounds good @larseggert. Currently at FOSDEM, thus limited bandwidth. Will continue #1612 on Monday.

@mxinden
Copy link
Collaborator Author

mxinden commented Feb 6, 2024

I resolved the merge conflicts due to #1581 and #1612.

I will refactor neqo-client to use quinn-udp next. Once that is in place, we can send and receive ECN on the I/O layer.

@mxinden
Copy link
Collaborator Author

mxinden commented Feb 6, 2024

With the latest commit neqo-server and neqo-client now use quinn-udp to send and receive. A simple GET succeeds (200).

Note that there are still lots of cleanups to be done. Thus will keep this in Draft for now.

larseggert added a commit to larseggert/neqo that referenced this pull request Feb 14, 2024
Most of the remaining bits from mozilla#1495

Depends on mozilla#1604
@mxinden
Copy link
Collaborator Author

mxinden commented Feb 18, 2024

Sorry for the silence here. Have been traveling and been sick. I will have a lot more time starting Tuesday.

Thank you for the input thus far.

@larseggert
Copy link
Collaborator

No stress. I am on PTO the entire week.

Windows does not allow setting Ce:

> Your application isn't allowed to specify the Congestion Encountered (CE) code point when sending datagrams. The send will return with error WSAEINVAL.

https://learn.microsoft.com/en-us/windows/win32/winsock/winsock-ecn
@mxinden
Copy link
Collaborator Author

mxinden commented Feb 20, 2024

@larseggert @martinthomson this is ready for another review. Mind taking a look (once you are back from PTO)?

mxinden pushed a commit to mxinden/neqo that referenced this pull request Feb 23, 2024
Most of the remaining bits from mozilla#1495

Depends on mozilla#1604
@larseggert larseggert added this pull request to the merge queue Feb 26, 2024
Merged via the queue into mozilla:main with commit fa8ce91 Feb 26, 2024
11 of 13 checks passed
@larseggert larseggert mentioned this pull request Feb 26, 2024
3 tasks
mxinden added a commit to mxinden/neqo that referenced this pull request May 4, 2024
There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- mozilla#1564
- mozilla#1569
- mozilla#1578
- mozilla#1581
- mozilla#1604
- mozilla#1612
- mozilla#1676
- mozilla#1692
- mozilla#1707
- mozilla#1708
- mozilla#1727
- mozilla#1753
- mozilla#1756
- mozilla#1766
- mozilla#1772
- mozilla#1786
- mozilla#1787
- mozilla#1788
- mozilla#1794
- mozilla#1806
- mozilla#1808
- mozilla#1848
- mozilla#1866

At this point, bugs in (2) are hard to fix, see e.g.
mozilla#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).
KershawChang pushed a commit to KershawChang/neqo that referenced this pull request May 7, 2024
There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- mozilla#1564
- mozilla#1569
- mozilla#1578
- mozilla#1581
- mozilla#1604
- mozilla#1612
- mozilla#1676
- mozilla#1692
- mozilla#1707
- mozilla#1708
- mozilla#1727
- mozilla#1753
- mozilla#1756
- mozilla#1766
- mozilla#1772
- mozilla#1786
- mozilla#1787
- mozilla#1788
- mozilla#1794
- mozilla#1806
- mozilla#1808
- mozilla#1848
- mozilla#1866

At this point, bugs in (2) are hard to fix, see e.g.
mozilla#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).
github-merge-queue bot pushed a commit that referenced this pull request May 8, 2024
* refactor(bin): introduce server/http3.rs and server/http09.rs

The QUIC Interop Runner requires an http3 and http09 implementation for both
client and server. The client code is already structured into an http3 and an
http09 implementation since #1727.

This commit does the same for the server side, i.e. splits the http3 and http09
implementation into separate Rust modules.

* refactor: merge mozilla-central http3 server into neqo-bin

There are two server implementations based on neqo:

1. https://github.com/mozilla/neqo/tree/main/neqo-bin/src/server
  - http3 and http09 implementation
  - used for manual testing and QUIC Interop

2. https://searchfox.org/mozilla-central/source/netwerk/test/http3server/src/main.rs
  - used to test Firefox

I assume one was once an exact copy of the other. Both implement their own I/O,
event loop, ... Since then, the two implementations diverged significantly.
Especially (1) saw a lot of improvements in recent months:

- #1564
- #1569
- #1578
- #1581
- #1604
- #1612
- #1676
- #1692
- #1707
- #1708
- #1727
- #1753
- #1756
- #1766
- #1772
- #1786
- #1787
- #1788
- #1794
- #1806
- #1808
- #1848
- #1866

At this point, bugs in (2) are hard to fix, see e.g.
#1801.

This commit merges (2) into (1), thus removing all duplicate logic and
having (2) benefit from all the recent improvements to (1).

* Move firefox.rs to mozilla-central

* Reduce HttpServer trait functions

* Extract constructor

* Remove unused deps

* Remove clap color feature

Nice to have. Adds multiple dependencies. Hard to justify for mozilla-central.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants