Doca Devemu
NVIDIAOfficialCreated by NVIDIA
- Skill
- Tool integration
- Software development
- Apache-2.0
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The doca-devemu skill assists developers in building custom PCIe devices that appear as real peripherals to a host system, while the backend logic runs on a BlueField DPU. It covers the three primary sub-libraries: PCI Generic, virtio-net, and virtio-fs. The skill helps users navigate the lifecycle of emulated devices, including sub-library selection, capability discovery, context initialization, and debugging errors returned by the DOCA Device Emulation API. It is designed for developers writing their own DPU-side backends, rather than those using pre-packaged services like DOCA SNAP.
What it does
- Guides sub-library selection between PCI Generic, virtio-net, and virtio-fs.
- Assists with initializing DOCA Core contexts and configuring doorbell/DMA primitives.
- Provides methods for querying device capabilities via doca_devemu_*_cap_* functions.
- Helps debug DOCA_ERROR_* codes specific to device emulation.
- Clarifies the distinction between custom library development and packaged DOCA services.
- Supports developers working in C/C++ or other languages via FFI.
When to use it
- When you need to expose a custom PCIe device from a BlueField DPU to a host.
- When you are writing a DPU-side backend for a virtio-net or virtio-fs device.
- When you need to verify if your BlueField firmware and DOCA version support a specific emulation class.
- When you encounter errors during device emulation initialization or feature negotiation.
- When you need to determine if a custom backend is required or if a packaged DOCA service suffices.
Advantages
- Provides a clear path for selecting the correct emulation sub-library.
- Simplifies the complex process of bridging host-side PCIe drivers with DPU-side logic.
- Offers structured debugging steps for firmware and driver-level issues.
- Ensures developers follow correct capability discovery patterns before implementation.
Usage examples
- “Expose a custom PCIe device from BlueField to the host.”
- The agent will guide you through selecting the appropriate sub-library (PCI Generic, virtio-net, or virtio-fs) and initializing the corresponding DOCA Core context.
- “lspci does not show my emulated device.”
- The agent will help you verify the firmware-level emulation configuration and ensure the host-side kernel driver is correctly bound to the emulated device.
- “Why does my virtio-net emulation create call return DOCA_ERROR_NOT_PERMITTED?”
- The agent will check if the virtio-net emulation slot is enabled in the BlueField firmware and verify DPU-side process privileges.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/nvidia/doca-devemu/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip doca-devemu.zip -d .agents/skills
Documentation by NVIDIA
DOCA Device Emulation
Examples
"Expose a custom PCIe device from BlueField to the host." — this is in scope. Pick PCI Generic / virtio-net / virtio-fs; do not stand up SNAP or Virtio-net Service here.
"lspci does not show my emulated device." — confirm the firmware emulation type and host driver before changing DPU-side code.
Instructions
Follow Loading order below. Open the tasks companion for configure / emulate / debug. Open the capabilities companion for sub-libraries and cap queries. Do not open every companion file.
Where to start: This skill assumes DOCA is already installed
on the host AND on the BlueField, the user is doing hands-on
emulated-PCIe-device work from the DPU side (writing the
backend that the host's kernel driver will talk to over the
emulated PCIe surface), and the user knows which CLASS of
emulated device they want to build. Open
the tasks companion if the user wants to do something
(configure / build / modify / run / test / debug); open
the capabilities companion when the question is
what can Device Emulation express on this DOCA version + this
BlueField generation + this firmware. If the user has not
installed DOCA yet, route to
doca-setup/SKILL.md first. Before
anything else, the agent must route the user to the right
sub-library — DOCA Device Emulation is an umbrella that
covers PCI Generic (raw PCIe device emulation), virtio-net
(emulated virtio network device), and virtio-fs (emulated
virtio filesystem device); each sub-library has its own
context, its own pkg-config module, and its own capability
surface. The sub-library selection rule lives in
the capabilities companion.
If the user wants a packaged solution rather than a library
(e.g. "I want NVMe SNAP on my host without writing the
backend myself", or "I want a managed virtio-net daemon"),
route via
doca-public-knowledge-map/SKILL.md
to the DOCA SNAP Service / DOCA Virtio-net Service guides
— those services are built on top of this library and are a
different artifact than what this skill covers.
Audience
This skill serves external developers building applications
that consume the DOCA Device Emulation library — i.e., users
whose DPU-side code calls doca_devemu_pci_*,
doca_devemu_virtio_*, or doca_devemu_vfs_* (directly
in C / C++, or through FFI / bindings from another language)
to expose an emulated PCIe device to the host that the host's
existing kernel drivers can drive as if it were a real PCIe
peripheral. It is not for NVIDIA developers contributing to
DOCA Device Emulation itself, and it is not the right
artifact for users who want a packaged emulated-device daemon
they do not have to write the backend for (the DOCA SNAP
Service and the DOCA Virtio-net Service are the packaged
options that build on top of this library).
Language scope. DOCA Device Emulation ships as a C library;
this skill covers three sub-libraries end-to-end. Select the exact
installed pkg-config module for the user's emulation class (see
the sub-library selection table in
the capabilities companion).
The shipped samples under
/opt/mellanox/doca/samples/doca_devemu/ are
written in C. C and C++ consumers are the canonical case and
the worked examples in the tasks companion assume that path.
Other-language consumers (Rust, Go, Python, …) consume the
same *.so files through FFI or language-specific bindings;
the skill's contribution in that case is to keep the
sub-library selection, umbrella lifecycle, capability-discovery,
permission, and error-taxonomy guidance language-neutral, and
to route the agent to the public C ABI as the authoritative
surface that any wrapper will eventually call.
When to load this skill
Load this skill when the user is doing hands-on DOCA Device Emulation work from the DPU side, in any language. Concretely:
Deciding which Device Emulation sub-library (PCI Generic, virtio-net, virtio-fs) the user needs — the umbrella selection question is this skill's load-bearing first move.
Initializing the per-sub-library DOCA Core context on the DPU (one context per emulated device per sub-library) and configuring the doorbell / DMA primitives the host's PCIe driver will interact with.
Reading per-sub-library capability surface via the
doca_devemu_pci_cap_*,doca_devemu_virtio_cap_*, ordoca_devemu_vfs_cap_*query families against the activedoca_devinfoBEFORE assuming a particular feature bit or device characteristic is available.Choosing between writing the backend with
doca-devemuyourself and adopting a packaged service (DOCA SNAP Service / DOCA Virtio-net Service) that already wraps this library.Debugging a
DOCA_ERROR_*returned from adoca_devemu_*call — in particular disambiguating firmware-level emulation type not enabled from BlueField generation does not support this sub-library at all from DPU-side process lacks privilege from host-side kernel driver did not bind.Designing or extending non-C bindings (Rust, Go, Python, …) that wrap one of the device-emulation sub-libraries — for the sub-library selection, umbrella lifecycle, capability- discovery, permission, and error-taxonomy rules the wrapper must honor.
Do not load this skill for general DOCA orientation,
install of DOCA itself, the host-side kernel driver for the
emulated device class (virtio-net / virtio-blk / virtio-fs
kernel drivers ship with the host kernel and are not part of
DOCA), the packaged SNAP / Virtio-net services (they are
separate artifacts with their own service guides), or for
standard NIC behavior on the BlueField data path (use
doca-flow/SKILL.md +
doca-eth/SKILL.md instead — Device Emulation
is for custom emulated devices, not for shaping the
BlueField's built-in NIC personality).
What this skill provides
This is a thin loader. The body keeps only the orientation needed to pick the right next file. The substantive Device Emulation-specific material lives in two companion files:
the capabilities companion — what Device Emulation can express on this version + this BlueField generation + this firmware: the umbrella architecture (host sees an emulated PCIe device; DPU runs the backend), the sub-library selection rule (PCI Generic vs virtio-net vs virtio-fs), the per- sub-library Core context shape, the doorbell / DMA primitives that bridge host ↔ DPU, the per-sub-library capability-query family (
doca_devemu_*_cap_*), the per-sub-librarypkg-configmodule name, the Device Emulation error taxonomy mapped onto the cross-libraryDOCA_ERROR_*set, the observability surface, the library-vs-packaged-service path-selection rule, and the safety policy that gates env preconditions (DPU-side privileges, BlueField firmware-level emulation type enablement, BlueField generation actually supporting the emulation class).the tasks companion — step-by-step workflows for the six in-scope Device Emulation verbs:
configure,build,modify,run,test,debug. Plus aDeferred task verbsblock that points out-of-scope questions at the right next skill.
The skill assumes a host + BlueField pair where DOCA is
already installed at the standard location on both sides, the
BlueField firmware has the emulation type the user wants to
build enabled, the user has the privileges their public
install profile expects (in particular, sudo on the DPU side
to perform PCIe-level emulation), and the host kernel ships
the standard driver for the emulated device class the user is
building. It does not cover installing DOCA, flipping
firmware-level configuration, or installing host-side kernel
drivers — those paths go through
doca-setup/SKILL.md.
Loading order
Read this skill first to confirm the user's question is in scope (custom emulated PCIe device built on the
doca-devemulibrary, not the packaged SNAP / Virtio-net services, not the host-side kernel driver, not standard NIC behavior).For the umbrella architecture, the sub-library selection rule (PCI Generic vs virtio-net vs virtio-fs), the per- sub-library Core context shape, the doorbell / DMA primitives, the per-sub-library capability-query rule, the per-sub-library
pkg-configmodules, the library-vs- packaged-service path-selection rule, the error taxonomy, the observability surface, and the safety policy, see the capabilities companion.For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.
Both companion files cross-link to each other,
doca-version/SKILL.md for the
canonical DOCA version-handling rules (with the Device
Emulation overlay that the chosen sub-library's pkg-config
module plus the firmware-level emulation slot plus the
doca_devemu_*_cap_* query are all part of "is this
emulation supported here"), and
doca-public-knowledge-map/SKILL.md
whenever the right answer is "look it up in the public DOCA
Device Emulation umbrella guide, the per-sub-library guide
linked from it, the DOCA SNAP / Virtio-net Service guide, or
in the on-disk install layout" rather than "Device Emulation-
specific guidance".
Related skills
doca-public-knowledge-map/SKILL.md— the routing table for every public DOCA documentation source and the on-disk layout of an installed DOCA package. The Device Emulation umbrella URL is https://docs.nvidia.com/doca/sdk/DOCA-Device-Emulation/index.html; per-sub-library guides are linked from the umbrella, and the packaged DOCA SNAP / Virtio-net services are listed under the DOCA Services umbrella as separate artifacts.doca-setup/SKILL.md— env preparation, install verification, DPU-side privilege checks, BlueField firmware configuration (including the per-sub-library emulation type enable), and the I have no install yet path with the public NGC DOCA container. This skill assumes its preconditions are satisfied AND that the firmware-level emulation type for the user's chosen sub-library is enabled.doca-version/SKILL.md— canonical DOCA version-handling rules. This skill's Version compatibility overlay cross-links the four-way match rule and adds the Device Emulation-specific per-sub-librarypkg-config+doca_devemu_*_cap_*overlay.doca-structured-tools-contract/SKILL.md— the bundle's structured-tools precedence rule (detect / prefer / fall back / report). The Command appendix in the tasks companion honors this contract.doca-programming-guide/SKILL.md— general DOCA programming patterns shared by every library: the canonicalpkg-config+ meson build pattern, the universal modify-a-shipped-sample first-app workflow, the universal Core-context lifecycle, the cross-libraryDOCA_ERROR_*taxonomy, and the program-side debug order. This skill layers Device Emulation specifics on top.doca-comch/SKILL.md— the right library when the user wants a control-plane channel between a host process and a DPU process over PCIe but does NOT want the host to see the DPU as an emulated PCIe device with a standard host kernel driver. Device Emulation hides the DPU behind a real-looking PCIe device class; Comch is an explicit host ↔ DPU IPC.doca-flow/SKILL.mdanddoca-eth/SKILL.md— the right libraries when the user wants to shape traffic on the BlueField's built-in NIC personality, not expose a custom emulated PCIe device. Device Emulation is for new emulated PCIe devices the host did not previously see; Flow / Eth are for the BlueField's existing NIC surface.doca-debug/SKILL.md— the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). Device Emulation-specific debug (firmware-level emulation type not enabled, sub-library mis-selected, host kernel driver not binding to the emulated device, virtio feature-negotiation failures) overlays on top of that ladder.
Files
- ATTRIBUTION.mdAdded by AutoGineer891 B
- BENCHMARK.md9.9 KiB
- CAPABILITIES.md35.0 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md13.4 KiB
- SKILLCARD.yaml2.7 KiB
- TASKS.md42.4 KiB
- evals/evals.json2.5 KiB
- references/details.md9.3 KiB
- skill-card.md5.0 KiB
- skill.oms.sig5.3 KiB
references/details.md
doca-devemu — reference detail
Moved out of SKILL.md to keep the loader under the per-file size budget. This is supporting detail, not routing logic.
Example questions this skill answers well
The CLASSES of Device Emulation questions this skill is built to answer, each with one worked example. The agent should treat the class as the load-bearing piece — the worked example is a single instance.
“How do I expose a custom emulated PCIe device from the BlueField DPU to the host?” — worked example: “expose a virtio-net device from the BlueField so the host sees a virtio NIC backed by my own DPU-side code”. Answered by the sub-library selection rule + the umbrella lifecycle in
CAPABILITIES.md ## Capabilities and modesthe bring-up steps in
TASKS.md ## configure.
“Which sub-library do I need — PCI Generic, virtio-net, or virtio-fs?” — worked example: “the host needs to see a custom block-like device that does not match any standard virtio class”. Answered by the sub-library selection table in
CAPABILITIES.md ## Capabilities and modesthe routing decision in
TASKS.md ## configurestep 1.
“Does this BlueField + firmware actually let me emulate the device class I want, and what capabilities does my DOCA install expose for it?” — worked example: “can I emulate a virtio-fs device on this BlueField, and which of its feature bits is supported?”. Answered by the dual-axis precondition rule (firmware-level emulation type must be enabled AND
doca_devemu_<sub>_cap_*against the activedoca_devinfomust agree) inCAPABILITIES.md ## Capabilities and modesthe env-precondition checklist in
TASKS.md ## configurestep 2.
“Is this
doca-devemulibrary the right tool, or should I use the DOCA SNAP Service / DOCA Virtio-net Service?” — worked example: “I want NVMe storage to the host without writing any DPU-side backend code”. Answered by the library-vs-service path-selection rule inCAPABILITIES.md ## Capabilities and modesthe deferred-topic boundaries in
CAPABILITIES.md ## Deferred topic boundarieswhich route todoca-public-knowledge-map/SKILL.mdfor the packaged-service guides.
“Why does my virtio-net emulation create call return
DOCA_ERROR_NOT_PERMITTEDeven though my DPU-side process hasdoca_devaccess?” — worked example: “sudo on the DPU is fine but the virtio-net emulation slot is disabled in BlueField firmware”. Answered by the dual-axis permission matrix inCAPABILITIES.md ## Safety policythe firmware-side env fix routed via
TASKS.md ## configurestep 2.
“Is this Device Emulation sub-library / capability on my installed DOCA version?” — worked example: “is the virtio-fs emulation surface available on the DOCA install I have, against this BlueField generation?”. Answered by the version-compatibility overlay in
CAPABILITIES.md ## Version compatibility, which cross-links the canonical detection chain indoca-version/SKILL.mdand adds the per-sub-librarypkg-config+doca_devemu_*_cap_*overlay.“What does this
DOCA_ERROR_*from adoca_devemu_*call mean and which layer caused it?” — worked example: “DOCA_ERROR_NOT_SUPPORTEDfrom a virtio-net emulation create call — is it the BlueField generation, the firmware slot, or the DOCA version?”. Answered by the Device Emulation overlay on the cross-library taxonomy inCAPABILITIES.md ## Error taxonomythe layered ladder in
TASKS.md ## debugthat escalates todoca-debug/SKILL.md.
What this skill deliberately does not ship
This skill is agent guidance, not a samples or templates bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:
Pre-written DOCA Device Emulation application source code, in any language. The verified source is the shipped C samples at
/opt/mellanox/doca/samples/doca_devemu/(with sub-directories per sub-library). The agent's job is to route the user to those files and prescribe a minimum-diff modification on them via the universal modify-a-sample workflow indoca-programming-guide/SKILL.md, layered with the Device Emulation-specific overrides inTASKS.md ## modify.A specific emulated-device backend. This library provides the framework for emulated PCIe devices; it does not implement a specific storage backend, a specific packet processor, or a specific filesystem. The agent must refuse to invent backend bodies and must route any “what should my backend do” question to the user's domain expertise and to the public sub-library guides reachable via
doca-public-knowledge-map/SKILL.md.Standalone build manifests (
meson.build,CMakeLists.txt,Cargo.toml, …) parked inside the skill. The agent constructs the build manifest in the user's project directory against the user's installed DOCA, wherepkg-config --modversion <the chosen sub-library's module>is the source of truth.A
samples/,bindings/, orreference/subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled "reference", is misleading: users will read it as buildable.DOCA SNAP Service / DOCA Virtio-net Service surface. Those services are separate artifacts built on top of this library, with their own public service guides. Routing for them lives in
doca-public-knowledge-map/SKILL.md; conflating either service with thedoca-devemulibrary is the single most common Device Emulation first-app design error.
Related skills
doca-public-knowledge-map/SKILL.md— the routing table for every public DOCA documentation source and the on-disk layout of an installed DOCA package. The Device Emulation umbrella URL is https://docs.nvidia.com/doca/sdk/DOCA-Device-Emulation/index.html; per-sub-library guides are linked from the umbrella, and the packaged DOCA SNAP / Virtio-net services are listed under the DOCA Services umbrella as separate artifacts.doca-setup/SKILL.md— env preparation, install verification, DPU-side privilege checks, BlueField firmware configuration (including the per-sub-library emulation type enable), and the I have no install yet path with the public NGC DOCA container. This skill assumes its preconditions are satisfied AND that the firmware-level emulation type for the user's chosen sub-library is enabled.doca-version/SKILL.md— canonical DOCA version-handling rules. This skill's## Version compatibilitycross-links the four-way match rule and adds the Device Emulation-specific per-sub-librarypkg-configdoca_devemu_*_cap_*overlay.
doca-structured-tools-contract/SKILL.md— the bundle's structured-tools precedence rule (detect / prefer / fall back / report). The Command appendix in TASKS.md honors this contract.doca-programming-guide/SKILL.md— general DOCA programming patterns shared by every library: the canonicalpkg-config+ meson build pattern, the universal modify-a-shipped-sample first-app workflow, the universal Core-context lifecycle, the cross-libraryDOCA_ERROR_*taxonomy, and the program-side debug order. This skill layers Device Emulation specifics on top.doca-comch/SKILL.md— the right library when the user wants a control-plane channel between a host process and a DPU process over PCIe but does NOT want the host to see the DPU as an emulated PCIe device with a standard host kernel driver. Device Emulation hides the DPU behind a real-looking PCIe device class; Comch is an explicit host ↔ DPU IPC.doca-flow/SKILL.mdanddoca-eth/SKILL.md— the right libraries when the user wants to shape traffic on the BlueField's built-in NIC personality, not expose a custom emulated PCIe device. Device Emulation is for new emulated PCIe devices the host did not previously see; Flow / Eth are for the BlueField's existing NIC surface.doca-debug/SKILL.md— the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). Device Emulation-specific debug (firmware-level emulation type not enabled, sub-library mis-selected, host kernel driver not binding to the emulated device, virtio feature-negotiation failures) overlays on top of that ladder.
The DOCA SNAP Service and the DOCA Virtio-net Service are
not in scope for this skill — those are packaged daemons
built on top of doca-devemu for users who do not
want to write the backend themselves. They have their own
public service guides reachable via
doca-public-knowledge-map/SKILL.md.
Conflating either service with this library is the single
most common Device Emulation first-app design error.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
The author says: Requires DOCA SDK installed at /opt/mellanox/doca on BOTH the host AND the BlueField DPU (Ubuntu 22.04/24.04 or RHEL/SLES), with firmware emulation (PCI Generic / virtio-net / virtio-fs) enabled and the host kernel shipping the matching driver (virtio_net / virtio_fs / generic PCIe). Reads pkg-config for the chosen sub-library and inspects /opt/mellanox/doca/{lib,include,samples/doca_devemu}. The validation steps require a live DOCA install.
Security
What our scanner noticed· Medium risk
- Large base64-encoded blobs
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- NVIDIA
- Publisher
- NVIDIA (Official)
- Source
- NVIDIA/skills · skills/doca-devemu · commit fce3cca
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE-APACHE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by NVIDIA.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-devemu.zip