oxidecomputer / oxidecomputer/opte

VPC router needs to more fully implement system vs. custom

Open
#279 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
77
Forks
11
Avg merge
9d 20h
Merged PRs (30d)
8

Description

RFD 21 describes two types of routing tables (just called "routers" in the RFD) that apply to each VPC subnet (and therefore any guest interface that lives in that subnet): the VPC System Router and an optional VPC Subnet Custom Router. It then goes on to describe the ordering of route matching based on longest-prefix-match with a tie-break win going to the VPC Subnet Custom Router. The oxide-vpc implementation currently honors the longest-prefix-match, but it does not implement the tie break. Furthermore, it has no real indication of whether a given route came from the system or custom router, as that information isn't passed down from control plane. I think a few things need to happen here.

  1. Modify the oxide-vpc API to pass down routes in two distinct lists: system and subnet.
  2. Modify control plane to use these new APIs.
  3. Add "rule group" functionality to OPTE as described in VFP §5.4. This allows a more straightforward implementation of the tie-break by providing a clear deliniation between the system vs. subnet routes at the OPTE/oxide-vpc level. It may also prove to be a useful feature for other purposes moving forward.
  4. Add a series of tests to oxide-vpc exercising the possible combinations of the route selection as described in RFD 21 §2.3.1.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with RFD 21 §2.3.1 and VFP §5.4, then inspect the oxide-vpc route APIs and the control-plane route handoff. The work spans separate system and subnet route lists, OPTE rule groups, and oxide-vpc tests covering the documented route-selection combinations. Done means the system-versus-custom longest-prefix tie-break is implemented and tested.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.