Neqo

Neqo,用 Rust 编写的 QUIC 实现。「Neqo, an implementation of QUIC written in Rust」

Github星跟蹤圖

Neqo, an Implementation of QUIC written in Rust

neqo logo

To run test http 0.9 programs (neqo-client and neqo-server):

  • cargo build
  • ./target/debug/neqo-server 12345 -k key --db ./test-fixture/db
  • ./target/debug/neqo-client http://127.0.0.1:12345/ -o --db ./test-fixture/db

To run test HTTP/3 programs (neqo-client and neqo-http3-server):

  • cargo build
  • ./target/debug/neqo-http3-server [::]:12345 --db ./test-fixture/db
  • ./target/debug/neqo-client http://127.0.0.1:12345/ --db ./test-fixture/db

Faster Builds with Separate NSS/NSPR

You can clone NSS (https://hg.mozilla.org/projects/nss) and NSPR
(https://hg.mozilla.org/projects/nspr) into the same directory and export an
environment variable called NSS_DIR pointing to NSS. This causes the build to
use the existing NSS checkout. However, in order to run anything that depends
on NSS, you need to set $\[DY]LD\_LIBRARY\_PATH to point to
$NSS_DIR/../dist/Debug/lib.

Debugging Neqo

Using SSLKEYLOGFILE to decrypt Wireshark logs

Info here

TODO: What is the minimum Wireshark version needed?
TODO: Above link may be incorrect, protocol now called TLS instead of SSL?

Using RUST_LOG effectively

As documented in the env_logger documentation,
the RUST_LOG environment variable can be used to selectively enable log messages
from Rust code. This works for Neqo's cmdline tools, as well as for when Neqo is
incorporated into Gecko, although Gecko needs to be built in debug mode.

Some examples:

  1. RUST_LOG=neqo_transport::dump ./mach run lists sent and received QUIC
    packets and their frames' contents only.
  2. RUST_LOG=neqo_transport=debug,neqo_http3=trace,info ./mach run sets a
    'debug' log level for transport, 'trace' level for http3, and 'info' log
    level for all other Rust crates, both Neqo and others used by Gecko.
  3. RUST_LOG=neqo=trace,error ./mach run sets trace level for all modules
    starting with "neqo", and sets error as minimum log level for other
    unrelated Rust log messages.

Trying In-development Neqo code in Gecko

In a checked-out copy of Gecko source, set paths for the four Neqo crates to
local versions in netwerk/socket/neqo_glue/Cargo.toml. For example, if Neqo
was checked out to /home/alice/git/neqo, change:

neqo-http3 = { tag = "v0.1.7", git = "https://github.com/mozilla/neqo" }
neqo-transport = { tag = "v0.1.7", git = "https://github.com/mozilla/neqo" }
neqo-common = { tag = "v0.1.7", git = "https://github.com/mozilla/neqo" }

to

neqo-http3 = { path = "/home/alice/git/neqo/neqo-http3" }
neqo-transport = { path = "/home/alice/git/neqo/neqo-transport" }
neqo-common = { path = "/home/alice/git/neqo/neqo-common" }

and

[dependencies.neqo-crypto]
tag = "v0.1.7"
git = "https://github.com/mozilla/neqo"
default-features = false
features = ["gecko"]

to

[dependencies.neqo-crypto]
path = "/home/alice/git/neqo/neqo-crypto"
default-features = false
features = ["gecko"]

Note: Using newer Neqo code with Gecko may also require changes (likely to neqo_glue) if
something has changed.

Compile Gecko as usual with ./mach build.

主要指標

概覽
名稱與所有者mozilla/neqo
主編程語言Rust
編程語言C (語言數: 5)
平台
許可證Apache License 2.0
所有者活动
創建於2019-02-18 19:20:20
推送於2025-06-27 12:24:07
最后一次提交
發布數99
最新版本名稱v0.13.4 (發布於 2025-05-24 18:33:46)
第一版名稱v0.1.0 (發布於 )
用户参与
星數2k
關注者數35
派生數135
提交數3.2k
已啟用問題?
問題數739
打開的問題數100
拉請求數1766
打開的拉請求數26
關閉的拉請求數223
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?