oxidecomputer / oxidecomputer/omicron
Using link-local addresses shouldn't require an address lot containing the address `::`
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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