| # 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. |