cloudparts

OPTE (Oxide Packet Transformation Engine)

The virtual network inside each Oxide sled’s kernel: it sits between every VM and the physical NICs and implements VPC firewalling, routing, NAT and Geneve encapsulation as a stack of per-port packet transformations.

Type
Open source
License
MPL 2.0
Facts checked
13 October 2026

What it is

OPTE runs on every sled, in the illumos kernel, between each VM’s virtual NIC and the physical network. Every packet a VM sends goes into OPTE first. Each virtual NIC port has a series of layers that handle firewalling, routing, NAT and encapsulation. A layer either looks up state that already exists (a routing rule) or creates state (a firewall connection), and adds a transformation to a list. When every layer has had its say, OPTE applies the list: rewrite the addresses for NAT, say, and wrap the packet in a Geneve header addressed to the sled hosting the other VM. Packets coming in go through the same layers in reverse.

OPTE works off a connection-oriented flow table, as Microsoft’s VFP design recommends, because firewalls and NAT care about connections rather than single packets. Between sleds, encapsulated packets travel over the rack’s IPv6 underlay, routed by Oxide’s delay-driven multipath protocol, through the two rack switches, which decapsulate traffic leaving the rack. The project is split into a generic engine (opte), the Oxide VPC built on it (oxide-vpc), the xde kernel module that runs it on Helios, and opteadm, an operator tool for inspecting ports and rules; DTrace scripts trace it at run time.

Customers never touch OPTE directly. They see its effects through the Oxide API: VPCs with private RFC 1918 subnets, firewall rules, custom routers, internet gateways, outbound NAT, and ephemeral and floating external IPs.

Why teams pick it

  • All the VPC logic runs on the host next to the VM, so each sled enforces its own VMs’ firewall rules and NAT without a central network appliance
  • Geneve encapsulation keeps the overlay compatible with NIC offloads and leaves room for custom header options
  • A pipeline of composable layers, modeled on Microsoft’s published VFP design, which the RFD says lets functions move between host, NIC and switch over time
  • Written in Rust, with parsers fuzzed and the engine testable and benchmarkable on Linux and macOS, not only in the kernel

Watch out for

  • Its kernel module runs only on Helios, and its VPC model is Oxide’s own, so it is not a general-purpose virtual switch
  • Known issue in release v23: new instances cannot be created once the rack has more than 1,024 NAT entries (private-to-external IP mappings)
  • Known issue in release v23: an internet gateway cannot have both an IPv4 and an IPv6 address attached
  • Known issue in release v23: instances on a sled that loses contact with the switches can become unreachable until a reboot

Alternatives

What all virtual private clouds have in common →Compare side by side →

How it fits with other technologies

See it in a real stack

No architecture uses OPTE (Oxide Packet Transformation Engine) yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2021–2026

Oxide wanted each project in a rack to get its own virtual private cloud, like in a public cloud, on hardware with its own switches. RFD 63, Robert Mustacchi’s network architecture, proposed VPCs built on Geneve encapsulation over a routed IPv6 underlay, BGP towards the customer’s network, and a packet transformation engine on each host to provide routing, NAT, firewalling and more.

The design drew on Microsoft’s published papers on VL2, Ananta and especially VFP, which argues for a connection-oriented, programmable packet pipeline. Based on the problems the VFP paper reported, RFD 63 doubted that OpenFlow or Open vSwitch made sense for Oxide, and chose to build its own engine. The OPTE repository started in August 2021.

OPTE has shipped in every Oxide rack since the first in 2023, and later releases extended it, for example with IPv6 support and, for IPv6-only racks, periodic IPv6 router advertisements.

Why it’s built this way

Geneve for the overlay
It works with current NIC offloads and its header options give room to carry extra information as the network evolves.
A custom engine instead of Open vSwitch or OpenFlow
RFD 63 cited the negative experiences in Microsoft’s VFP paper as a reason to doubt OpenFlow and Open vSwitch, and took from the same paper the case for a connection-oriented pipeline, since firewall and NAT state is per connection.
On the host, not the switch
Putting routing, NAT and firewalling in software on every host gives a flexible base for load balancing and future services, and lets functions move to the NIC or switch later.

Timeline

  1. 2021

    Repository started (August), following RFD 63’s network architecture

  2. 2023

    Ships in the first Oxide racks

  3. 2026

    IPv6 support (release v18, February); IPv6-only racks (release v23, September)

Sources7 · facts checked 13 October 2026

Improve this page on GitHub