DOCA Flow DPA Provider
Where to start: This skill assumes DOCA is already
installed, the user has a BlueField with a DPA processor that
the host can see through DOCA, the user already programs DOCA
Flow from the host (doca-flow) and already runs DPA kernels
from the host (doca-dpa / DPACC compiler), and the user is
doing hands-on DPA Flow Provider work — i.e. using
doca-flow-dpa-provider to export an existing DOCA Flow pipe
or external resource into the DPA address space so a DPA
kernel can manipulate it inline. Open TASKS.md
if the user wants to do something (configure / build /
modify / run / test / debug); open
CAPABILITIES.md when the question is
what can the provider express on this version + this
BlueField generation. If the user has not installed DOCA yet,
route to doca-setup first; if
the user has not stood up a host-side Flow pipe yet, route to
doca-flow first; if the user has
not stood up host-side DPA execution yet, route to
doca-dpa first.
Example questions this skill answers well
The CLASSES of DPA Flow Provider 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.
- "Is this library even the right tool for what I want?" —
worked example: "I want my DOCA Flow pipe to be readable
from a DPA kernel, OR I want to do something fancier than
the host-side
doca-flow API exposes". Answered by the
decision rule in
CAPABILITIES.md ## Capabilities and modes
("three-program model: when this library is the right
surface vs pure host-side Flow vs pure DPA"). Most
first-time askers do NOT need this library; the skill's
first job is to confirm they do.
- "How do I export an existing DOCA Flow pipe to the DPA
side?" — worked example: "I have a Flow pipe with a
counter on every entry; I want a DPA kernel to read those
counters inline and decide what to do next". Answered by
the host-side export sequence in
CAPABILITIES.md ## Capabilities and modes
- the bring-up steps in
TASKS.md ## configure.
- "How do I drive the exported pipe from inside the DPA
kernel?" — worked example: "I have the device address of
an exported hash pipe; how do I disable an entry from the
DPA, and how do I know the operation completed?".
Answered by the device-side API surface in
CAPABILITIES.md ## Capabilities and modes
("DPA-side consumption") + the host-side queue allocation
- DPA-side polling step in
TASKS.md ## run.
- "What does this
DOCA_ERROR_* from a
doca_flow_dpa_* call mean, and is the bug on the host
side, on the DPA side, or in the export handshake between
them?" — worked example: "DOCA_ERROR_BAD_STATE from
doca_flow_dpa_pipe_export". Answered by the provider
overlay on the cross-library taxonomy in
CAPABILITIES.md ## Error taxonomy
- the layered ladder in
TASKS.md ## debug that escalates to
doca-debug.
- "Why did my pipe export succeed but my DPA kernel never
sees entries?" — worked example: "I called
doca_flow_dpa_pipe_export_prepare AFTER adding entries to
the pipe". Answered by the lifecycle ordering rule in
CAPABILITIES.md ## Safety policy
- the staged-export workflow in
TASKS.md ## test.
- "Is the host-side / DPA-side provider API I'm reading
about on my installed DOCA?" — worked example: "is the
three-queue-type
doca_flow_dpa_queues_create available
against the DOCA + DPACC versions on this host, or am I
still on the older doca_flow_dpa_pipe_queues-based
surface?". Answered by the version-compatibility overlay
in
CAPABILITIES.md ## Version compatibility
which cross-links the canonical detection chain in
doca-version and adds the
provider-specific overlay inherited from
doca-dpa.
Audience
This skill serves external developers building applications
that consume the DOCA Flow DPA Provider library — i.e.,
users who already have a host-side doca-flow pipe and a
host-side doca-dpa execution context, and who want to wire
the two together so a DPA kernel can read counters from / mutate
entries of / read or write external resources tied to that
Flow pipe inline, instead of round-tripping through the host
CPU. It is not for NVIDIA developers contributing to the
provider library itself, nor is it for users who only need
host-side Flow programming (that is doca-flow) or who only
need generic DPA compute that has nothing to do with Flow
(that is doca-dpa).
Language scope. DOCA Flow DPA Provider ships as a paired
library: a host-side C library (pkg-config module
doca-flow-dpa-provider, header
doca_flow_dpa_provider.h) plus a DPA-side device library
that the DPACC compiler links into the DPA-side translation
unit when the kernel includes doca_flow_dpa_provider_dev.h.
Both halves are C. The shipped samples (under the installed
DOCA samples tree) include both translation units. Other-
language host-side consumers can FFI the host C library, but
the DPA-side kernel has no FFI escape hatch (the DPACC
compiler accepts a single translation unit per kernel image).
The skill keeps the lifecycle, capability-discovery, env-
precondition, and error-taxonomy guidance language-neutral on
the host side, and points all DPA-side kernel-writing
questions at the public DOCA DPA and DOCA Flow programming
guides via
doca-public-knowledge-map.
When to load this skill
Load this skill when the user is doing hands-on DOCA Flow DPA
Provider work, in any host language plus a DPA-side
translation unit built by dpacc. Concretely:
- Initializing a
doca_flow_dpa_ctx against a flexio_process
that maps to a BlueField with a DPA processor visible to
the host AND a host-side doca-flow port already brought
up against the same device.
- Allocating the three DPA-side queue types (general /
entries, resources-write, resources-read) for a port via
doca_flow_dpa_queues_create.
- Exporting a host-side
doca_flow_pipe to the DPA address
space via the
doca_flow_dpa_pipe_export_prepare → _pipe_export →
_pipe_get_device_addr sequence, BEFORE any entry is added
to the pipe.
- Exporting an external Flow resource (index-selector
resource, memory resource) to the DPA via the matching
doca_flow_dpa_external_resource_* family.
- Handing the resulting
doca_flow_dpa_addr device pointer to
the DPA-side kernel so the kernel can call
doca_flow_pipe_hash_* / doca_flow_external_resource_*
/ doca_flow_queue_poll_completion on it.
- Debugging a
DOCA_ERROR_* from a doca_flow_dpa_* call —
in particular disambiguating export called too late in the
pipe lifecycle from queues not yet created from DPA-
side queue full and not drained.
- Designing host-side bindings in a non-C language that drive
the provider's host-side setup and hand the device address
off to a DPA application image built separately with
dpacc.
Do not load this skill for general DOCA Flow programming
(use doca-flow), generic host-side
DPA work (use doca-dpa), or DPA-
side kernel-writing itself (route via
doca-public-knowledge-map
to the public DOCA DPA / DPACC / Flow programming guides).
What this skill provides
This is a thin loader. The body keeps only the orientation
needed to pick the right next file. The substantive
provider-specific material lives in two companion files:
CAPABILITIES.md — what the host-side and DPA-side provider
API can express on this version + this BlueField
generation: the per-port doca_flow_dpa_ctx context, the
three queue types (DOCA_FLOW_DPA_QUEUE_TYPE_GENERAL /
_RESOURCES_WRITE / _RESOURCES_READ), the
pipe-export handshake (prepare → export → get-device-addr),
the parallel external-resource-export handshake, the DPA-
side device API for hash-pipe entry manipulation
(doca_flow_pipe_hash_enable_index /
_hash_disable_index / _hash_replace_index), the DPA-
side device API for external resources
(doca_flow_external_resource_index_selector_modify*,
doca_flow_external_resource_memory_update,
doca_flow_external_resource_memory_read*), the
completion-queue polling
(doca_flow_queue_poll_completion), the
three-program-model rule (host-side doca-flow + host-side
doca-dpa + DPA-side kernel), the error taxonomy mapped
onto the cross-library DOCA_ERROR_* set, the
observability surface, and the safety policy that gates the
export lifecycle.
TASKS.md — step-by-step workflows for the in-scope
provider verbs: install, configure, build, modify,
run, test, debug, use. Plus a Deferred task verbs
block that points out-of-scope questions at the right next
skill.
The skill assumes a host where DOCA is already installed at
the standard location, a BlueField with a DPA processor is
physically present and visible to the host, the DPACC
compiler is installed at a version matched to the DOCA
install per the DOCA Compatibility Policy, the user already
knows how to bring up a doca-flow port and create a
host-side doca_dpa (or its FlexIO equivalent) for kernel
execution, and the user has at least a sketch of the DPA-side
kernel that will consume the exported pipe device address.
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 Flow DPA Provider application source
code or DPA-side kernel source, in any language. The
verified provider source is the shipped C + DPA-side
samples under the installed DOCA samples tree (route via
doca-public-knowledge-map
for the per-install sample tree path). 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 in
doca-programming-guide,
layered with the provider-specific overrides in
TASKS.md ## modify.
- Standalone build manifests (
meson.build,
CMakeLists.txt, …) parked inside the skill. The agent
constructs the build manifest in the user's project
directory against the user's installed DOCA + DPACC
compiler, where pkg-config --modversion doca-flow-dpa-provider (alongside doca-flow and
doca-dpa) and the installed dpacc are the joint sources
of truth.
- A
samples/, bindings/, or reference/ 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.
- Host-side
doca-flow pipe-spec content. That is
doca-flow's scope; this skill
exports an already-constructed pipe and does not redefine
how to construct it.
- DPA-side kernel programming generalities. Writing the
DPA-side function body, allocating DPA memory inside the
kernel, intrinsics, DPA-side libraries like
doca-dpa-comms and doca-dpa-verbs — out of scope. Route
to the public DOCA DPA / DPACC guides via
doca-public-knowledge-map.
Loading order
- Read this
SKILL.md first to confirm the user's question
is in scope (Flow-pipe-exported-to-DPA work, not pure
doca-flow work and not generic doca-dpa work).
- For the provider capability matrix, the three-program
model, the per-port
doca_flow_dpa_ctx, the three queue
types, the pipe-export and external-resource-export
handshakes, the DPA-side device API surface, the
completion model, the error taxonomy, the observability
surface, and the safety policy, see
CAPABILITIES.md.
- For step-by-step workflows — install, configure, build,
modify, run, test, debug, use — see
TASKS.md.
Both companion files cross-link to each other,
doca-flow and
doca-dpa for the host-side
surfaces this library bridges,
doca-version for the
canonical DOCA version-handling rules (with the
DOCA-and-DPACC overlay inherited from
doca-dpa), and
doca-public-knowledge-map
whenever the right answer is "look it up in the public DOCA
Flow / DOCA DPA / DPACC programming guides, or in the on-disk
install layout" rather than "provider-specific guidance".
Related skills
doca-flow — the canonical
host-side Flow programming skill. The Flow pipe this
library exports MUST be brought up against
doca-flow CAPABILITIES.md ## Capabilities and modes
first; this skill only adds the DPA-export layer on top.
doca-dpa — the host-side DPA
control library. The DPA kernel that consumes the
exported device address is loaded and launched through
doca-dpa (or its FlexIO-process equivalent); this skill
inherits the two-side-program model, the DPACC-and-DOCA
version-match rule, and the env-precondition matrix from
there.
doca-public-knowledge-map —
routing table for every public DOCA documentation source
(DOCA Flow guide at
https://docs.nvidia.com/doca/sdk/doca-flow/index.html;
DOCA DPA guide at
https://docs.nvidia.com/doca/sdk/doca-dpa/index.html;
DPACC compiler guide and DPA Tools umbrella reachable from
the same routing table) and the on-disk layout of an
installed DOCA package.
doca-setup — env preparation,
install verification, DPACC compiler install /
verification, and the I have no install yet path with
the public NGC DOCA container. This skill assumes its
preconditions are satisfied AND that DPACC is installed at
a version that matches DOCA.
doca-version — canonical
DOCA version-handling rules. This skill's ## Version compatibility cross-links the four-way match rule and adds
the provider-specific DOCA-and-DPACC must match overlay
per the DOCA Compatibility Policy (inherited from
doca-dpa).
doca-structured-tools-contract —
the bundle's structured-tools precedence rule (detect /
prefer / fall back / report). The Command appendix in
TASKS.md honors this contract.
doca-programming-guide —
general DOCA programming patterns: the canonical
pkg-config + meson build pattern, the universal
modify-a-shipped-sample first-app workflow, the universal
Core-context lifecycle, the cross-library DOCA_ERROR_*
taxonomy, and the program-side debug order. This skill
layers provider specifics on top.
doca-debug — the cross-cutting
debug ladder (install / version / build / link / runtime /
program / driver). Provider-specific debug (lifecycle-
ordering between Flow pipe creation, queue creation, export
prepare, entry add, export; queue-full on DPA-side polling;
pipe device address handed to a kernel that targets a
different doca_flow_dpa_ctx) overlays on top.
doca-hardware-safety —
cross-cutting hardware-safety meta-policy that this
skill's ## Safety policy overlays. Because the exported
pipe is mutated inline by DPA-side kernel code, the
validate-before-commit discipline from doca-flow plus the
two-side-program rebuild discipline from doca-dpa BOTH
apply, and the meta-policy provides the cross-cutting
framing.
1---2name: doca-flow-dpa-provider3description: Use this skill when the user is doing hands-on DOCA Flow DPA Provider work — exporting a `doca-flow` pipe or external resource (index-selector/memory) into BlueField DPA address space so a DPACC-built kernel can read counters, mutate hash-pipe entries, and update/read memory or index-selector resources inline with Flow. Covers per-port `doca_flow_dpa_ctx`, three queue types (general/resources-write/resources-read), the order-sensitive export handshake (`_export_prepare` → add entries → `_export` → `_get_device_addr`), and DPA-side device API. Trigger even when the user does not say "DOCA Flow DPA Provider" — implicit phrasings include "DPA kernel never sees entries in the exported pipe", "BAD_STATE from `_pipe_export`", "how do I disable a hash entry from a DPA kernel", "DPA memory read returns no value", or "DPA-side post keeps returning AGAIN". Refuse and route elsewhere for `doca-flow` pipe construction, generic host-side DPA (`doca-dpa`), or DPA-side kernel-writing — those belong to other skills.4license: Apache-2.05---67# DOCA Flow DPA Provider89**Where to start:** This skill assumes DOCA is already10installed, the user has a BlueField with a DPA processor that11the host can see through DOCA, the user already programs DOCA12Flow from the host (`doca-flow`) and already runs DPA kernels13from the host (`doca-dpa` / DPACC compiler), and the user is14doing **hands-on DPA Flow Provider work** — i.e. using15`doca-flow-dpa-provider` to export an existing DOCA Flow pipe16or external resource into the DPA address space so a DPA17kernel can manipulate it inline. Open [`TASKS.md`](TASKS.md)18if the user wants to *do* something (configure / build /19modify / run / test / debug); open20[`CAPABILITIES.md`](CAPABILITIES.md) when the question is21*what can the provider express* on this version + this22BlueField generation. If the user has not installed DOCA yet,23route to [`doca-setup`](../../doca-setup/SKILL.md) first; if24the user has not stood up a host-side Flow pipe yet, route to25[`doca-flow`](../doca-flow/SKILL.md) first; if the user has26not stood up host-side DPA execution yet, route to27[`doca-dpa`](../doca-dpa/SKILL.md) first.2829## Example questions this skill answers well3031The CLASSES of DPA Flow Provider questions this skill is built32to answer, each with one worked example. The agent should33treat the *class* as the load-bearing piece — the worked34example is a single instance.3536- **"Is this library even the right tool for what I want?"** —37 worked example: *"I want my DOCA Flow pipe to be readable38 from a DPA kernel, OR I want to do something fancier than39 the host-side `doca-flow` API exposes"*. Answered by the40 decision rule in41 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)42 ("three-program model: when this library is the right43 surface vs pure host-side Flow vs pure DPA"). Most44 first-time askers do NOT need this library; the skill's45 first job is to confirm they do.46- **"How do I export an existing DOCA Flow pipe to the DPA47 side?"** — worked example: *"I have a Flow pipe with a48 counter on every entry; I want a DPA kernel to read those49 counters inline and decide what to do next"*. Answered by50 the host-side export sequence in51 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)52 + the bring-up steps in53 [`TASKS.md ## configure`](TASKS.md#configure).54- **"How do I drive the exported pipe from inside the DPA55 kernel?"** — worked example: *"I have the device address of56 an exported hash pipe; how do I disable an entry from the57 DPA, and how do I know the operation completed?"*.58 Answered by the device-side API surface in59 [`CAPABILITIES.md ## Capabilities and modes`](CAPABILITIES.md#capabilities-and-modes)60 ("DPA-side consumption") + the host-side queue allocation61 + DPA-side polling step in62 [`TASKS.md ## run`](TASKS.md#run).63- **"What does this `DOCA_ERROR_*` from a64 `doca_flow_dpa_*` call mean, and is the bug on the host65 side, on the DPA side, or in the export handshake between66 them?"** — worked example: *"`DOCA_ERROR_BAD_STATE` from67 `doca_flow_dpa_pipe_export`"*. Answered by the provider68 overlay on the cross-library taxonomy in69 [`CAPABILITIES.md ## Error taxonomy`](CAPABILITIES.md#error-taxonomy)70 + the layered ladder in71 [`TASKS.md ## debug`](TASKS.md#debug) that escalates to72 [`doca-debug`](../../doca-debug/SKILL.md).73- **"Why did my pipe export *succeed* but my DPA kernel never74 sees entries?"** — worked example: *"I called75 `doca_flow_dpa_pipe_export_prepare` AFTER adding entries to76 the pipe"*. Answered by the lifecycle ordering rule in77 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)78 + the staged-export workflow in79 [`TASKS.md ## test`](TASKS.md#test).80- **"Is the host-side / DPA-side provider API I'm reading81 about on my installed DOCA?"** — worked example: *"is the82 three-queue-type `doca_flow_dpa_queues_create` available83 against the DOCA + DPACC versions on this host, or am I84 still on the older `doca_flow_dpa_pipe_queues`-based85 surface?"*. Answered by the version-compatibility overlay86 in87 [`CAPABILITIES.md ## Version compatibility`](CAPABILITIES.md#version-compatibility)88 which cross-links the canonical detection chain in89 [`doca-version`](../../doca-version/SKILL.md) and adds the90 provider-specific overlay inherited from91 [`doca-dpa`](../doca-dpa/SKILL.md).9293## Audience9495This skill serves **external developers building applications96that consume the DOCA Flow DPA Provider library** — i.e.,97users who already have a host-side `doca-flow` pipe and a98host-side `doca-dpa` execution context, and who want to wire99the two together so a DPA kernel can read counters from / mutate100entries of / read or write external resources tied to that101Flow pipe inline, instead of round-tripping through the host102CPU. It is *not* for NVIDIA developers contributing to the103provider library itself, nor is it for users who only need104host-side Flow programming (that is `doca-flow`) or who only105need generic DPA compute that has nothing to do with Flow106(that is `doca-dpa`).107108**Language scope.** DOCA Flow DPA Provider ships as a *paired*109library: a host-side C library (pkg-config module110`doca-flow-dpa-provider`, header111`doca_flow_dpa_provider.h`) plus a DPA-side device library112that the DPACC compiler links into the DPA-side translation113unit when the kernel includes `doca_flow_dpa_provider_dev.h`.114Both halves are C. The shipped samples (under the installed115DOCA samples tree) include both translation units. Other-116language host-side consumers can FFI the host C library, but117the DPA-side kernel has no FFI escape hatch (the DPACC118compiler accepts a single translation unit per kernel image).119The skill keeps the lifecycle, capability-discovery, env-120precondition, and error-taxonomy guidance language-neutral on121the host side, and points all DPA-side kernel-writing122questions at the public DOCA DPA and DOCA Flow programming123guides via124[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md).125126## When to load this skill127128Load this skill when the user is doing hands-on DOCA Flow DPA129Provider work, in any host language plus a DPA-side130translation unit built by `dpacc`. Concretely:131132- Initializing a `doca_flow_dpa_ctx` against a `flexio_process`133 that maps to a BlueField with a DPA processor visible to134 the host AND a host-side `doca-flow` port already brought135 up against the same device.136- Allocating the three DPA-side queue types (general /137 entries, resources-write, resources-read) for a port via138 `doca_flow_dpa_queues_create`.139- Exporting a host-side `doca_flow_pipe` to the DPA address140 space via the141 `doca_flow_dpa_pipe_export_prepare` → `_pipe_export` →142 `_pipe_get_device_addr` sequence, BEFORE any entry is added143 to the pipe.144- Exporting an external Flow resource (index-selector145 resource, memory resource) to the DPA via the matching146 `doca_flow_dpa_external_resource_*` family.147- Handing the resulting `doca_flow_dpa_addr` device pointer to148 the DPA-side kernel so the kernel can call149 `doca_flow_pipe_hash_*` / `doca_flow_external_resource_*`150 / `doca_flow_queue_poll_completion` on it.151- Debugging a `DOCA_ERROR_*` from a `doca_flow_dpa_*` call —152 in particular disambiguating *export called too late in the153 pipe lifecycle* from *queues not yet created* from *DPA-154 side queue full and not drained*.155- Designing host-side bindings in a non-C language that drive156 the provider's host-side setup and hand the device address157 off to a DPA application image built separately with158 `dpacc`.159160Do **not** load this skill for general DOCA Flow programming161(use [`doca-flow`](../doca-flow/SKILL.md)), generic host-side162DPA work (use [`doca-dpa`](../doca-dpa/SKILL.md)), or DPA-163side kernel-writing itself (route via164[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)165to the public DOCA DPA / DPACC / Flow programming guides).166167## What this skill provides168169This is a **thin loader**. The body keeps only the orientation170needed to pick the right next file. The substantive171provider-specific material lives in two companion files:172173- `CAPABILITIES.md` — what the host-side and DPA-side provider174 API can express on this version + this BlueField175 generation: the per-port `doca_flow_dpa_ctx` context, the176 three queue types (`DOCA_FLOW_DPA_QUEUE_TYPE_GENERAL` /177 `_RESOURCES_WRITE` / `_RESOURCES_READ`), the178 pipe-export handshake (prepare → export → get-device-addr),179 the parallel external-resource-export handshake, the DPA-180 side device API for hash-pipe entry manipulation181 (`doca_flow_pipe_hash_enable_index` /182 `_hash_disable_index` / `_hash_replace_index`), the DPA-183 side device API for external resources184 (`doca_flow_external_resource_index_selector_modify*`,185 `doca_flow_external_resource_memory_update`,186 `doca_flow_external_resource_memory_read*`), the187 completion-queue polling188 (`doca_flow_queue_poll_completion`), the189 three-program-model rule (host-side `doca-flow` + host-side190 `doca-dpa` + DPA-side kernel), the error taxonomy mapped191 onto the cross-library `DOCA_ERROR_*` set, the192 observability surface, and the safety policy that gates the193 export lifecycle.194- `TASKS.md` — step-by-step workflows for the in-scope195 provider verbs: `install`, `configure`, `build`, `modify`,196 `run`, `test`, `debug`, `use`. Plus a `Deferred task verbs`197 block that points out-of-scope questions at the right next198 skill.199200The skill assumes a host where DOCA is already installed at201the standard location, a BlueField with a DPA processor is202physically present and visible to the host, the DPACC203compiler is installed at a version matched to the DOCA204install per the DOCA Compatibility Policy, the user already205knows how to bring up a `doca-flow` port and create a206host-side `doca_dpa` (or its FlexIO equivalent) for kernel207execution, and the user has at least a sketch of the DPA-side208kernel that will consume the exported pipe device address.209210## What this skill deliberately does not ship211212This skill is **agent guidance**, not a samples or templates213bundle. To keep the boundary clean, it deliberately does not214contain — and pull requests should not add:215216- **Pre-written DOCA Flow DPA Provider application source217 code or DPA-side kernel source, in any language.** The218 verified provider source is the shipped C + DPA-side219 samples under the installed DOCA samples tree (route via220 [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)221 for the per-install sample tree path). The agent's job is222 to route the user to those files and prescribe a223 minimum-diff modification on them via the universal224 modify-a-sample workflow in225 [`doca-programming-guide`](../../doca-programming-guide/SKILL.md),226 layered with the provider-specific overrides in227 [`TASKS.md ## modify`](TASKS.md#modify).228- **Standalone build manifests** (`meson.build`,229 `CMakeLists.txt`, …) parked inside the skill. The agent230 constructs the build manifest *in the user's project231 directory* against the user's installed DOCA + DPACC232 compiler, where `pkg-config --modversion233 doca-flow-dpa-provider` (alongside `doca-flow` and234 `doca-dpa`) and the installed `dpacc` are the joint sources235 of truth.236- **A `samples/`, `bindings/`, or `reference/` subtree** of237 any kind. A mock or incomplete artifact in this skill's238 tree, even one labeled "reference", is misleading: users239 will read it as buildable.240- **Host-side `doca-flow` pipe-spec content.** That is241 [`doca-flow`](../doca-flow/SKILL.md)'s scope; this skill242 *exports* an already-constructed pipe and does not redefine243 how to construct it.244- **DPA-side kernel programming generalities.** Writing the245 DPA-side function body, allocating DPA memory inside the246 kernel, intrinsics, DPA-side libraries like247 `doca-dpa-comms` and `doca-dpa-verbs` — out of scope. Route248 to the public DOCA DPA / DPACC guides via249 [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md).250251## Loading order2522531. Read this `SKILL.md` first to confirm the user's question254 is in scope (Flow-pipe-exported-to-DPA work, not pure255 `doca-flow` work and not generic `doca-dpa` work).2562. **For the provider capability matrix, the three-program257 model, the per-port `doca_flow_dpa_ctx`, the three queue258 types, the pipe-export and external-resource-export259 handshakes, the DPA-side device API surface, the260 completion model, the error taxonomy, the observability261 surface, and the safety policy, see262 [CAPABILITIES.md](CAPABILITIES.md).**2633. **For step-by-step workflows — install, configure, build,264 modify, run, test, debug, use — see265 [TASKS.md](TASKS.md).**266267Both companion files cross-link to each other,268[`doca-flow`](../doca-flow/SKILL.md) and269[`doca-dpa`](../doca-dpa/SKILL.md) for the host-side270surfaces this library bridges,271[`doca-version`](../../doca-version/SKILL.md) for the272canonical DOCA version-handling rules (with the273DOCA-and-DPACC overlay inherited from274[`doca-dpa`](../doca-dpa/SKILL.md)), and275[`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)276whenever the right answer is "look it up in the public DOCA277Flow / DOCA DPA / DPACC programming guides, or in the on-disk278install layout" rather than "provider-specific guidance".279280## Related skills281282- [`doca-flow`](../doca-flow/SKILL.md) — the canonical283 host-side Flow programming skill. The Flow pipe this284 library exports MUST be brought up against285 [`doca-flow CAPABILITIES.md ## Capabilities and modes`](../doca-flow/CAPABILITIES.md#capabilities-and-modes)286 first; this skill only adds the DPA-export layer on top.287- [`doca-dpa`](../doca-dpa/SKILL.md) — the host-side DPA288 control library. The DPA kernel that consumes the289 exported device address is loaded and launched through290 `doca-dpa` (or its FlexIO-process equivalent); this skill291 inherits the two-side-program model, the DPACC-and-DOCA292 version-match rule, and the env-precondition matrix from293 there.294- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md) —295 routing table for every public DOCA documentation source296 (DOCA Flow guide at297 <https://docs.nvidia.com/doca/sdk/doca-flow/index.html>;298 DOCA DPA guide at299 <https://docs.nvidia.com/doca/sdk/doca-dpa/index.html>;300 DPACC compiler guide and DPA Tools umbrella reachable from301 the same routing table) and the on-disk layout of an302 installed DOCA package.303- [`doca-setup`](../../doca-setup/SKILL.md) — env preparation,304 install verification, DPACC compiler install /305 verification, and the *I have no install yet* path with306 the public NGC DOCA container. This skill assumes its307 preconditions are satisfied AND that DPACC is installed at308 a version that matches DOCA.309- [`doca-version`](../../doca-version/SKILL.md) — canonical310 DOCA version-handling rules. This skill's `## Version311 compatibility` cross-links the four-way match rule and adds312 the provider-specific *DOCA-and-DPACC must match* overlay313 per the DOCA Compatibility Policy (inherited from314 [`doca-dpa`](../doca-dpa/SKILL.md)).315- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md) —316 the bundle's structured-tools precedence rule (detect /317 prefer / fall back / report). The Command appendix in318 [TASKS.md](TASKS.md) honors this contract.319- [`doca-programming-guide`](../../doca-programming-guide/SKILL.md) —320 general DOCA programming patterns: the canonical321 `pkg-config` + meson build pattern, the universal322 modify-a-shipped-sample first-app workflow, the universal323 Core-context lifecycle, the cross-library `DOCA_ERROR_*`324 taxonomy, and the program-side debug order. This skill325 layers provider specifics on top.326- [`doca-debug`](../../doca-debug/SKILL.md) — the cross-cutting327 debug ladder (install / version / build / link / runtime /328 program / driver). Provider-specific debug (lifecycle-329 ordering between Flow pipe creation, queue creation, export330 prepare, entry add, export; queue-full on DPA-side polling;331 pipe device address handed to a kernel that targets a332 different `doca_flow_dpa_ctx`) overlays on top.333- [`doca-hardware-safety`](../../doca-hardware-safety/SKILL.md) —334 cross-cutting hardware-safety meta-policy that this335 skill's `## Safety policy` overlays. Because the exported336 pipe is mutated inline by DPA-side kernel code, the337 validate-before-commit discipline from `doca-flow` plus the338 two-side-program rebuild discipline from `doca-dpa` BOTH339 apply, and the meta-policy provides the cross-cutting340 framing.341