oxidecomputer / oxidecomputer/omicron

Push NAT state to Dendrite, rather than having Dendrite pull it

Open
#8,748 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
572
Forks
97
Avg merge
2d 12h
Merged PRs (30d)
96

Description

This is the Omicron side of https://github.com/oxidecomputer/dendrite/issues/83.

Today, dpd pulls NAT state periodically from Nexus and updates its ASIC tables with the latest generation. That makes dpd a client of Nexus's internal API, which complicates updates. Instead, we'd like to push this information from Nexus to dpd, periodically and possibly whenever the state changes.

Nexus also has a separate background task that pulls the latest generation number from dpd, and cleans up database records for out-of-date NAT entries. I'm not sure if pushing the NAT state will impact that task, but it could.

Note that today, dpd only pulls IPv4 NAT entries. As part of migrating this, we probably want to ensure we propagate IPv6 NAT entries as well.

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 Dendrite issue 83 and trace the current dpd pull of NAT state from Nexus, along with Nexus's background task that reads the latest generation from dpd. Define the push path and its update cadence, account for IPv4 and IPv6 entries, and verify that cleanup of out-of-date NAT records still works.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
backend-api-design, distributed-systems, networking
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.