为 Netstack3 贡献代码

Netstack3 是一个在 Rust 中从头开始开发的网络堆栈。我们正在积极开发,欢迎每个人做出贡献!大多数 Netstack3(大约 90% 的代码行)都与平台无关,这意味着您可以在开发机器上进行构建和测试,而无需构建整个 Fuchsia 或在虚拟机中运行它。只需使用常规的 cargo 开发工作流(cargo checkcargo test 等)即可。

您可以在“第一个好 bug 列表”中找到一系列要开始处理的“好”错误列表,在我们的“第二个重要 bug 列表”中可以找到“接下来要处理的好 bug”列表。

本文档旨在帮助您开始学习为 Netstack3 做贡献的基础知识。它将帮助您从零开始构建、测试和为 Netstack3 不依赖于平台的核心贡献代码。

如果您有兴趣贡献自己的力量,并希望与 Netstack3 开发者聊天,请随时与我们联系!我们会在 connectivity-dev@fuchsia.dev 邮寄名单上闲聊。

准备工作

  • 获取源代码
  • 配置和构建 Fuchsia
    • 您的 fx set 命令需要添加标志 --with //src/connectivity/network/netstack3:bin --cargo-toml-gen,以启用使用 Cargo 的 Netstack3 开发。假设您在 x86 机器上进行开发,请使用 fx set core.x64 --with //src/connectivity/network/netstack3:bin --cargo-toml-gen
  • Netstack3 与平台无关的核心的源代码位于 src/connectivity/network/netstack3/core 中。
  • 通过运行 fx build src/connectivity/network/netstack3/core:netstack3-core 构建 Netstack3 核心。
  • 生成一个 Cargo.toml 文件,以便使用 cargo 进行开发,方法是运行 fx build build/rust:cargo_toml_gen,然后运行 fx gen-cargo //src/connectivity/network/netstack3/core:netstack3-core
  • 将以下几行代码添加到 ~/.cargo/config.toml 文件中,替换 Fuchsia 目录的绝对路径,并替换目标(如果本地开发目标不是 x86_64-unknown-linux-gnu):

    [target.x86_64-unknown-linux-gnu]
    rustflags = ["-L", "absolute_path_to_fuchsia_directory/out/default/host_x64/obj/third_party/boringssl"]
    

    如果您没有配置文件,可以创建一个仅包含这些内容的配置文件。如果您不确定自己的开发目标是什么,请运行 rustup show。这些配置行会指示 cargo 在何处查找 BoringSSL 的 build 工件,我们会将其用于某些加密操作。

  • 运行以下命令,配置 rustup 以使用 Fuchsia Rust 工具链:

    rustup toolchain link fuchsia $($FUCHSIA_DIR/scripts/youcompleteme/paths.py VSCODE_RUST_TOOLCHAIN)
    rustup default fuchsia
    
  • 运行 cargo 命令(如 cargo checkcargo test),以查看其实际效果!

从现在开始,您将主要使用 cargo 进行开发。有时,对 Netstack3 的依赖项进行重大更改可能会导致构建设置中断。如果发生这种情况,请参阅问题排查部分,了解如何修复 build。

问题排查

  • 如果您在使用 jiri update 拉取最新更改后无法正确运行 cargo,请尝试以下操作:
    • 请移除 Cargo.lock 文件,运行 cargo clean,然后重试
    • 如果 cargo 仍不能正常运行,请尝试完全干净的 build:
    • fx clean - 这会清除构建输出,并让您准备好进行完全干净的构建
    • 运行您一开始运行的相同 fx set 命令(可能是 fx set core.x64 --with //src/connectivity/network/netstack3:bin --cargo-toml-gen)。
    • fx build src/connectivity/network/netstack3/core:netstack3-core
    • fx build build/rust:cargo_toml_gen

贡献的更改

有兴趣为 Netstack3 贡献代码吗?我们欢迎您的加入!如果您不确定从何处入手,不妨参阅我们的“良好第一”错误列表“第二良好”错误列表。如果您仍有疑问,请随时通过 connectivity-dev@fuchsia.dev 与我们联系。

如果您对我们的问题跟踪器中尚未跟踪的更改有任何想法,那非常好!我们非常欢迎大家修复 bug 和改进文档。请先与我们联系,以确保我们达成共识,以免您花时间处理最终我们不接受的工作。

准备好贡献内容后,只需按照以下几个简单步骤进行操作即可:

了解

如果您有兴趣更深入地了解 Netstack3 的设计和架构,请查看我们的文档