Skip to content

Commit b586dfd

Browse files
[multicast] wire up softnpu backend to multicast table ops
This wires up the softnpu ASIC backend to support multicast end-to-end by translating DPD's sidecar.p4 table operations into sidecar-lite.p4's simplified P4 pipeline. ## AsicMulticastOps We replace the stubbed AsicMulticastOps implementation (which returned "OperationUnsupported" for group creation and port addition with in-memory group tracking via McGroupData, following the tofino_stub pattern. Group membership is used by the table translation layer to build port bitmaps for sidecar-lite's Replicate extern. Ports >= 128 are rejected at add time to match sidecar-lite's 128-bit bitmap width. ## Table translation (asic/src/softnpu/table.rs) We map sidecar.p4 table names to sidecar-lite equivalents and translate action parameters where the designs differ for emulation. All multicast action arms are gated with #[cfg(feature = "multicast")]. ## References - [softnpu #183](oxidecomputer/softnpu#183) - [propolis #1093](oxidecomputer/propolis#1093) - [p4rs #240](oxidecomputer/p4#240) - [sidecar-lite #152](oxidecomputer/sidecar-lite#152) - tokio: 1.50 (due to softnpu) - oxide-tokio-rt: 0.1.3 (following-up from tokio's move to 1.50)
1 parent abae212 commit b586dfd

File tree

8 files changed

+856
-199
lines changed

8 files changed

+856
-199
lines changed

Cargo.lock

Lines changed: 55 additions & 51 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ oximeter = { git = "https://github.com/oxidecomputer/omicron", branch = "main" }
5252
oximeter-producer = { git = "https://github.com/oxidecomputer/omicron", branch = "main" }
5353
oximeter-instruments = { git = "https://github.com/oxidecomputer/omicron", branch = "main", default-features = false, features = ["kstat"] }
5454
oxnet = { version = "0.1.4", default-features = false, features = ["schemars", "serde"] }
55-
propolis = { git = "https://github.com/oxidecomputer/propolis" }
55+
propolis = { git = "https://github.com/oxidecomputer/propolis", branch = "zl/multicast" }
5656
smf = { git = "https://github.com/illumos/smf-rs" }
57-
softnpu-lib = { git = "https://github.com/oxidecomputer/softnpu" , package = "softnpu" , branch = "main"}
57+
softnpu-lib = { git = "https://github.com/oxidecomputer/softnpu" , package = "softnpu" , branch = "zl/multicast"}
5858
tofino = { git = "https://github.com/oxidecomputer/tofino", branch = "main" }
5959
transceiver-controller = { git = "https://github.com/oxidecomputer/transceiver-control", branch = "main" }
6060

@@ -82,7 +82,7 @@ libc = "0.2"
8282
mockall = "0.13.1"
8383
omicron-zone-package = "0.12"
8484
openssl = "0.10"
85-
oxide-tokio-rt = "0.1.2"
85+
oxide-tokio-rt = "0.1.3"
8686
parking_lot = "0.12"
8787
pretty_assertions = "1.4"
8888
proc-macro2 = "1.0"
@@ -107,7 +107,7 @@ strum = { version = "0.27", features = [ "derive" ] }
107107
syn = { version = "2.0", features = ["extra-traits"]}
108108
tabwriter = { version = "1", features = ["ansi_formatting"] }
109109
thiserror = "1.0"
110-
tokio = "1.37"
110+
tokio = "1.50"
111111
toml = "0.9"
112112
usdt = "0.6"
113113
uuid = { version = "1.10", features = [ "v4", "serde" ] }
@@ -117,3 +117,4 @@ internet-checksum = "0.2"
117117
# It's common during development to use a local copy of various complex
118118
# dependencies. If you want to use those, uncomment one of these blocks.
119119
#
120+

0 commit comments

Comments
 (0)