oxidecomputer / oxidecomputer/omicron

Using link-local addresses shouldn't require an address lot containing the address `::`

Open
#10,103 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

My naive attempts at using link-local uplink addresses failed due to this validation code on the insert path: https://github.com/oxidecomputer/omicron/blob/1db108a7eeddd8194295c411f5b1c01d82598518/nexus/db-queries/src/db/datastore/address_lot.rs#L340-L354

@rcgoodfellow pointed me to a working config-rss.toml in a4x2: https://github.com/oxidecomputer/testbed/blob/14a77225190af5a41cb4f7f2d7f7785e9c840bf5/a4x2/config/rss-pieces/rack-network-bgp-unnumbered.toml

Critically, that config defines the infrastructure address lot as

infra_ip_first = "::"
infra_ip_last =  "::"

which allows us past the above address lot check. However, we're only using :: as a sentinel value as a way to say "use an automatically generated link-local address". We should either skip the address lot check for link-locals, or address lots should have a setting for "should link locals be allowed" and we check that instead.

This should be cleaner to implement after #10082 lands - we should be able to push an UplinkAddress down into address_lot::try_reserve_block() instead of an IpNetwork.

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

Read nexus/db-queries/src/db/datastore/address_lot.rs around lines 340-354 and inspect address_lot::try_reserve_block(), then review issue #10082 and the linked rack-network-bgp-unnumbered.toml example. Confirm the intended behavior for link-local uplink addresses and verify that reservations no longer depend on an address lot containing ::.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.