blob: 19f3193ae21b05dae3fc3d9bdb0141b1a7398233 [file] [log] [blame] [view]
# Netstack3 - A Fuchsia owned rust based netstack
* Authors: ghanan@google.com, asafi@google.com
* Project lead: tamird@google.com
* Area(s): Connectivity
## Problem statement
The current netstack is written in Go which is not an approved language (and is
garbage collected) and is owned by the gVisor team who have different
priorities, use cases and design goals than Fuchsia. The gVisor netstack was
not originally designed to run on real devices, operate as a router or support
dynamic configurations; Fuchsia on the other hand does run on real devices,
operates as a router and depends on dynamic configurations (gVisor originally
didn't expect addresses, routes, network interfaces or their link status to
change at runtime).
## Solution statement
By developing a netstack that the Fuchsia team owns, we can design with
Fuchsia's goals in mind without having to depend on another team and work
around their use cases and restrictions. The Fuchsia Netstack team will design
and implement a Rust-based netstack that achieves functional parity with the
existing netstack, while leveraging the type and memory safety of rust.
## Dependencies
All users and components should be unaware of the netstack switching underneath
them.
## Risks and mitigations
Risks:
* The netstack is extremely load bearing as all workflows and product use
cases depend on network connectivity.
* Interoperability with netstacks on other platforms (Linux, BSD, Windows,
etc.).
* Performance risks. We still can't estimate N3 performance to validate we're
at parity.
* Posix compatibility.
Mitigations:
* Use industry standard tools/partners to ensure RFC compliance and
interoperability (IxANVL, INTACT, NOVUS labs, etc.).
* Leverage netstack and platform independent tests to test Netstack3 with the
behaviour of the existing netstack and Linux.
* Measure performance of the Netstack 3 during its iterative development.
* Phased migration into Netstack3 with a plan to start running current CI
workloads as soon as Netstack3 is capable. In addition, transition eng/dev
targets to Netstack3 before product targets.
The netstack team has been planning for how to reliably test Netstack3 and
ensure parity with the existing netstack to avoid regressions when a switch is
made; the above mitigations are examples of what the team *is currently doing*.
IxANVL and INTACT tooling do not make assumptions about the underlying netstack
implementation and the tests mentioned above can be updated to also run on
Netstack3 once it is ready.