Flat VPCs and Zero-DPU Hosts
Flat VPCs and Zero-DPU Hosts
Flat VPCs and Zero-DPU Hosts
Flat is a VPC virtualization type for tenant instances that run on hosts
without a NICo-managed DPU — either hosts with no DPU hardware at all, or
hosts whose BlueField DPU is operated as a plain NIC. On these hosts NICo has no
DPU agent through which to build a VXLAN/EVPN overlay, so a Flat VPC’s tenant
instances attach directly to operator-defined underlay segments
(HostInband network segments) instead of to a NICo-managed overlay.
A Flat VPC is still a real tenant VPC: it has an owner, a VNI, and can carry a
Network Security Group. What it does not have is a NICo-driven data plane.
NICo allocates the addresses and records the VPC’s bookkeeping (VNI, NSG,
peering relationships), but routing and L3/L4 enforcement between a Flat VPC and
any other network is the network operator’s responsibility, configured on
the physical/SDN fabric — not by NICo. This is the central difference from the
EthernetVirtualizer (ETV) and FNN virtualization types, where NICo programs a
per-VPC VRF on each DPU.
This page describes how an operator prepares a site for zero-DPU hosts and Flat VPCs, and how a tenant then creates Flat VPCs and instances on them.
Related pages
For ETV and FNN VPCs, the host’s primary data path is its DPU, and NICo drives
the overlay: it places each host interface into a per-VPC VRF, programs BGP EVPN,
and confirms convergence through the DPU agent before an instance is Ready.
See VPC Network Virtualization.
A Flat VPC inverts that model:
Because there is no NICo-managed data plane, a Flat VPC’s reachability — including isolation between a Flat VPC and other VPCs — must be arranged on the operator’s network. NICo will not, and cannot, enforce it through a DPU VRF.
Setting up zero-DPU hosts and the HostInband segments they attach to is an
operator responsibility. Creating Flat VPCs and instances on them is a
tenant responsibility. The roles and interfaces follow the standard model in
Network Isolation → Who configures what, and how.
REST paths below are shown against the /v2/org/{org}/nico/... placeholder and
abbreviated as …/nico/... thereafter.
nicoclicoverage gap (file a bug). As of this writing thenicocliREST wrapper does not expose two Flat-specific operations that the REST API does support: selectingFLATwhen creating/updating a VPC’s virtualization type, and settingautoNetworkwhen creating an instance. Until the wrapper catches up, tenants perform those two steps against the REST API directly. The remaining tenant operations (status, delete, NSG attach) work throughnicoclinormally. Per the tenant operating model, the missing wrapper commands should be filed as a bug againstnicoclirather than worked around withnico-admin-cli.
A site is ready to host Flat VPCs once three things are true: the relevant hosts
are running without a NICo-managed DPU, the underlay segments those hosts sit on
are declared as HostInband segments, and (optionally) instance types exist so
tenants can request the right machines.
Whether a host is a “zero-DPU” host is decided by its DPU mode, which has three values:
Both nic_mode and no_dpu make the host a zero-DPU host for the purposes
of Flat VPCs: NICo does not manage an overlay for it, and its only valid tenant
attachments are HostInband segments.
Set the mode in either of two places, with the per-host value taking precedence:
Site-wide, in the API server configuration:
Per host, on the host’s ExpectedMachine entry, via the dpu_mode field.
An explicit per-host nic_mode or no_dpu always wins over the site-wide
setting; a per-host default (or no entry) defers to the site-wide value, which
in turn defaults to managed dpu_mode.
Two related Day-0 settings matter for zero-DPU sites:
[site_explorer] admin_segment_type_non_dpu (default false). When
true, non-DPU hosts use the HostInband admin segment type instead of the
regular Admin segment type for their admin-network attachment.rack_management_enabled (top-level, default false). This is the
standalone / air-gapped rack-manager mode for GB200/GB300/VR144 deployments.
It runs DPUs in NIC mode and disables DPU BFB/firmware upgrades, HBN
deployment, the DPU agent, and the tenant DPU overlay — i.e. it is one of the
ways a whole site ends up as zero-DPU hosts. Enable it only when running NICo
with Rack Manager for those platforms.Because a zero-DPU host has no DPU to DHCP and identify host NICs for it, the
host’s data-NIC MAC addresses must be registered on its ExpectedMachine
entry, and the site DHCP service serves addresses only to known MACs. At most
one NIC per host is marked the primary (boot) interface. NICo records each
registered host NIC as an interface bound to a HostInband segment, which is
what the tenant’s instance later attaches to.
These are TOML / expected-machine settings and therefore Day-0 (or rare, restart-applied) changes.
A HostInband segment is the underlay network a zero-DPU host’s NIC physically
lives on. Unlike tenant overlay segments, a HostInband segment:
Day 0 — declare segments in TOML. Add one [networks.<name>] block per
HostInband segment to the API server configuration. Names are free-form but
must be unique:
The same [networks.<name>] mechanism is used for admin and underlay
segments; hostinband is the third config-declarable type. (Tenant segments are
not config-declarable; they are created only through the API.) Declared
segments are created when the API server starts.
Day 1+ — add more segments. Additional HostInband segments can be added
after Day 0 in either of two ways:
[networks.<name>]
block — in exactly the form above — and restart the API server. The startup
network reconciliation is additive and idempotent: it creates any configured
segment whose name does not yet exist and leaves existing ones untouched, so a
block added later is created on the next restart. This is the simplest path
when a restart is acceptable, and it keeps the config the single source of
truth for declared segments.CreateNetworkSegment API.Note the current CLI surface for the runtime path:
nico-admin-cli network-segment show and nico-admin-cli network-segment delete
exist for inspecting and removing segments.network-segment create CLI subcommand, and the REST API /
nicocli do not expose operator network-segment management (the REST
/subnet endpoints are the tenant subnet surface, not operator HostInband
segments). Runtime creation is therefore done by calling the
CreateNetworkSegment gRPC endpoint directly. If a wrapped create command is
needed operationally, file a bug.Deleting a HostInband segment follows the standard segment lifecycle: the
segment is drained (it is not removed while any host interface or instance
address still references it, plus a grace period) before its VLAN ID and VNI are
released and the row is deleted.
An instance type is an operator-owned object that describes a set of desired machine capabilities; allocation uses it to filter for an available machine that matches. Instance types are not Day-0 TOML — they are created after bootstrap.
Per the operator operating model, manage instance types through the REST API
or nicocli (its wrapper), which expose the full surface:
For a zero-DPU site, create instance type(s) describing the zero-DPU machines’
capabilities and associate those machines, so tenants can request instances of
that type. The instance type itself does not carry a “no-DPU” flag — what
makes a host zero-DPU is its dpu_mode (above). The instance type simply selects
which machines are allocatable; whether the selected host is zero-DPU then
governs the network model at allocation time.
A tenant on a Flat VPC follows the same high-level flow as any tenant — create a
VPC, create an instance, watch its status — but with two Flat-specific
differences: the VPC’s virtualization type is FLAT, and the instance is created
without selecting any subnet or prefix.
All tenant operations use the REST API or nicocli; none use TOML or
nico-admin-cli.
Create the VPC through the REST API with networkVirtualizationType set to
FLAT:
The accepted values are ETHERNET_VIRTUALIZER, FNN, and FLAT. Notes for
Flat VPCs:
routingProfile is rejected. Routing profiles are FNN-only; supplying one
on a Flat (or ETV) VPC is an error. The Flat data plane is operator-managed, so
there is no NICo-side routing layer for a profile to configure.vni field, subject to the site’s
allowed range). The VNI is surfaced to peers because operator-side SDN
integrations may consume it (for example, for switch VTEPs or ACLs).networkSecurityGroupId, exactly as for other
VPC types. Bear in mind that for a Flat VPC the enforcement of those rules is
the operator’s network responsibility; NICo stores the association but does not
program a DPU ACL for a zero-DPU host.As noted in the operations matrix, the
nicocliwrapper does not currently sendnetworkVirtualizationTypeonvpc create, and itsvpc virtualization updateaccepts onlyETHERNET_VIRTUALIZER/FNN. Use the REST API for this step until that gap is closed.
A Flat VPC accepts only HostInband segments — no Tenant, Admin, or Underlay
segments. The HostInband segments themselves are created by the operator
(see Site Operations); a tenant
does not create them.
For a tenant’s instance allocation to succeed, each HostInband segment its host
sits on must be bound to a Flat VPC (a VPC whose fabric interface type is
nic). Operators create HostInband segments unbound so they can exist for DHCP
during host ingestion; the VPC binding is required only when a tenant intent
actually arrives to allocate an instance. Coordinate with the operator to learn
which HostInband segment(s) back the hosts you intend to use, and ensure the
segment is associated with your Flat VPC before allocating.
This is the step that differs most from a normal VPC. On an ETV/FNN VPC a tenant
lists explicit network interfaces and the subnets/prefixes they draw from. On a
Flat VPC, a zero-DPU host has exactly one set of valid attachments — its
HostInband segment(s) — and NICo already knows them. So the tenant does not
select subnets or prefixes; instead the request sets autoNetwork: true and
leaves the interface list empty:
Rules enforced at allocation:
autoNetwork: true. A zero-DPU host cannot be
allocated with an explicit interface list or with autoNetwork: false.autoNetwork: true requires an empty interface list. The two are mutually
exclusive; NICo resolves one interface per HostInband segment the host is on.autoNetwork is only valid on zero-DPU hosts. A DPU-managed host rejects
it and must list interfaces explicitly.autoNetwork is immutable. Once an instance is created with it, it stays
auto for the life of the instance; sending autoNetwork: true on an update
simply re-resolves interfaces from the host’s current HostInband segments
(a no-op if nothing changed).As with VPC creation,
nicoclidoes not yet exposeautoNetworkoninstance create; use the REST API for this step and file a bug for the wrapper.
Read instance status through the REST API or nicocli:
What to look at for a Flat-VPC instance:
Ready state. The instance progresses through the normal
tenant lifecycle. On a zero-DPU host the DPU-dependent waits are skipped
(there is no DPU to push config to and no extension services to schedule), so
readiness does not block on a DPU agent.HostInband
segments, including each interface’s allocated IP address and MAC. This is
where a tenant reads the address their instance actually received.configs_synced. For a zero-DPU instance this reports synced
based on NICo’s own resolution from the HostInband segments — there is no DPU
feedback loop in the path, so unlike an ETV/FNN instance, ethernet
config-sync is not gated on a DPU confirming an overlay push.A consequence worth stating plainly: a Ready Flat instance with a synced
network status means NICo has allocated and recorded the instance’s underlay
addresses. It does not attest that traffic actually flows between this
instance and anything else — that depends on the operator’s underlay/SDN
configuration, which NICo neither programs nor observes.
Because this boundary is the most common source of misunderstanding, it is worth stating explicitly.
NICo does:
HostInband segment(s) and assign them to
the instance’s interfaces.HostInband
segments, and that DPU-managed hosts never do.NICo does not:
Everything in the second list is the network operator’s responsibility on the physical / SDN fabric. The VNI NICo assigns is exposed precisely so that an operator SDN integration can tie its switch-side configuration to the VPC.
Operator — site is Flat-ready:
nic_mode or no_dpu (per-host ExpectedMachine.dpu_mode, or the site-wide
[site_explorer] dpu_mode).HostInband segments exist. nico-admin-cli network-segment show lists the
declared segments with the expected prefix, gateway, and a VLAN/VNI assigned.HostInband segment.Tenant — Flat VPC and instance:
networkVirtualizationType: FLAT and has a VNI; no routing
profile is set.HostInband segment is bound to the VPC.autoNetwork: true; nicocli instance get
shows resolved status interfaces with allocated IP/MAC.Ready with a synced network status. (Reachability
itself is validated on the operator’s fabric, not through NICo.)