DOCA RDMA Initiator workflows
Where to start: The verbs run install → configure → modify → build → run → test → debug → use. When modifying an existing
baseline, first confirm that baseline builds, then modify and rebuild.
Skip ahead only when the user is already past a verb. The ## test verb is an iterative loop
(symbol presence → lifecycle order → single-completion smoke →
DPA-handoff probe → loop back if any check fails), not a one-shot
pass — see the eval-loop overlay in ## test below.
Read this file when the loader sent you here from
SKILL.md. For the underlying object model, version
compatibility, error taxonomy, observability surface, and safety
policy that these workflows assume, see
CAPABILITIES.md. For where to find docs, the
installed DOCA layout, or release notes, route through
doca-public-knowledge-map.
Each verb below describes the shape of the workflow, not a copy-paste recipe. The agent's job is to walk the user through the steps in order, verifying preconditions before recommending the next call.
Answer end-to-end RDMI workflow questions from THIS file. A hands-on "walk me through doca-rdmi end-to-end" question (confirm install → discover devices/caps → start from a shipped sample → build → run → debug) is answerable entirely from this skill's own files. You do not need to open
doca-setupordoca-programming-guideto answer it — the commands you need are in## end-to-end (quickref)below and in the## Command appendix. Only route todoca-setupif the user has no DOCA install at all; only overlaydoca-programming-guideif the user explicitly asks for the cross-library build-system theory beyond the line given here.
end-to-end (quickref)
A self-contained walkthrough for "I have a BlueField with DOCA installed; take me through doca-rdmi end-to-end." Each step names the exact symbol/command and the green signal; deeper detail is the matching verb section below. Quote commands verbatim from the user's install — never hardcode versions or paths.
- Confirm DOCA + doca-rdmi are installed and agree (full detail:
## install). Runpkg-config --modversion doca-common doca-verbs doca-dpa doca-rdmianddoca_caps --version; green = one identical semver from all sources. Disagreement or an unresolved.pc= partial / missing RDMI package — stop and repair the install before building. - Discover usable devices + per-device capability (full detail:
## configurestep 2). Rundoca_caps --list-devs; green = at least one device row whose DPA-capability flag is set (that flag is the gate for RDMI-on-DPA). The capability-query symbol to cite in code is the per-device cap read surfaced bydoca_caps; do not invent a different one. - Start from a shipped sample, do not author from prose (full
detail:
## modify). Discover the canonical sample withls /opt/mellanox/doca/samples/doca_rdmi/(the bundle deliberately defers tolsrather than naming a sample that may not exist on the user's version). Use the discovered sample as the modify-target via the five-slot fill in## modify. If the directory is absent or empty, stop and route todoca-setupfor install repair anddoca-public-knowledge-mapfor the current sample-layout source; do not invent a sample name. Because everydoca_rdmi_*symbol is EXPERIMENTAL, authoring RDMI source from documentation is forbidden. - Build with pkg-config (never hand-crafted
-lflags) (full detail:## build). Usepkg-config --cflags --libs doca-rdmi; it resolves includes under whatever path--cflagsreports and emits-ldoca_rdmi -ldoca_common -ldoca_verbs(plus-ldoca_dpawhen the DPA datapath is in use). Drive it from meson/ninja; thepkg-configmodule — not a hardcoded path — is the source of truth. - Run once on the smallest case + name a concrete observable
(full detail:
## run,## test). Run withDOCA_LOG_LEVEL=trace ./<binary>; green is not "exited 0" — it is one completion observed on the configured surface (one CQE on the host-sidedoca_verbs_cqcompletion-observation path, or one increment of thedoca_dpa_completioncounter on the DPA completion path) matching the single posted work request. Silence afterdoca_ctx_start()means the DPA kernel was never launched or the responder is silently rejecting the QP transition. - If not-green, walk the layered debug ladder (full detail:
## debug): symbol presence → lifecycle order (DOCA_ERROR_BAD_STATE= attach/handle call on the wrong side ofdoca_ctx_start()) → single-completion smoke → DPA-handle round-trip, then escalate below RDMI only after two non-converging iterations.
install
Goal: confirm the user's installed DOCA actually ships doca-rdmi
and the supporting libraries before any RDMI-specific work begins.
This skill does not own DOCA installation; that path lives in
doca-setup. The RDMI-specific
preconditions the agent verifies after a DOCA install:
doca-rdmi.pcfile is present.pkg-config --modversion doca-rdmiresolves and reports a semver matchingdoca_caps --version. If it does not resolve, the installed DOCA package set does not include RDMI; the user needs to install the matching package (the exact package name is platform-specific and looked up viadoca-public-knowledge-map ## Layout of an installed DOCA package).- Supporting
.pcfiles are present. RDMI builds ondoca-common,doca-verbs, and (for the DPA datapath)doca-dpa. All fourpkg-config --modversionresults must agree on the same DOCA semver per the four-way match indoca-version CAPABILITIES.md ## Version compatibility. - Installed headers expose the symbols. Check the public
header set (
doca_rdmi_connection.h,doca_rdmi_poster.h,doca_rdmi_dev_connection.h,doca_rdmi_dev_poster.h,doca_rdmi_dev_cqe.h) resolves under the installed DOCA infrastructure include tree. If the.pcresolves but the header is missing, the install is partial; do not attempt to build until the install is repaired. - The DPA toolchain is available if the user intends to use
the DPA datapath. The DOCA DPACC compiler ships as a separate
tool; the agent routes to
doca-dpafor the DPA toolchain preconditions rather than duplicating them here.
If any precondition fails, stop and route to
doca-setup; an RDMI-layer
diagnosis against a half-installed DOCA wastes the user's time.
configure
Goal: bring up a doca_rdmi_connection (and, if the user posts
work, a doca_rdmi_poster) and reach the state where the DPA
handle is valid.
Steps the agent should walk the user through:
- Confirm the installed DOCA version. Use the procedure in
doca-version CAPABILITIES.md ## Version compatibility. Quote the version observed (pkg-config --modversion doca-rdmi, thendoca_caps --version); do not assume "latest". Surface that everydoca_rdmi_*symbol the agent recommends isEXPERIMENTALperCAPABILITIES.md ## Version compatibility. - Stand up the verbs context. RDMI is layered on
doca-verbs; the user must have an initializeddoca_verbs_contextand adoca_verbs_pdbefore anydoca_rdmi_*_createcall. The verbs surface is a precondition; route the user to the public DOCA verbs guide viadoca-public-knowledge-mapif they do not yet have a working verbs setup. - Pick the datapath. If the application runs the data path
on the DPA, the user must call
doca_ctx_set_datapath_on_dpa()on the connection / poster context beforedoca_ctx_start(). TheCAPABILITIES.md ## Capabilities and modesDPA-handoff bullet names this; skipping it is the canonicalDOCA_ERROR_BAD_STATEcause when the user then callsdoca_rdmi_*_get_dpa_handle. - Attach exactly one completion source. Either a
doca_dpa_completionviadoca_rdmi_*_dpa_completion_attach(for the DPA datapath) or adoca_verbs_cqviadoca_rdmi_*_cq_attach(for the host datapath). The agent does not recommend both; the public headers describe these as alternatives. - Configure the connection's receive window. Call
doca_rdmi_connection_init_receive(conn, buf, size)with a buffer sized for the application's intended in-flight receive work request count. Confirm the host side has an ack loop ready before the DPA starts posting receives. - Start. Call
doca_ctx_start()on eachdoca_rdmi_*_as_ctx()context. Out-of-order returnsDOCA_ERROR_BAD_STATE. - Retrieve the DPA handle. After start (and only after
start), call
doca_rdmi_*_get_dpa_handleto obtain the accelerator-side handle. Hand that handle to the DPA kernel per thedoca-dpaprogramming model; do not invent a different handoff.
If any step fails with a DOCA_ERROR_*, route through the error
taxonomy in
CAPABILITIES.md ## Error taxonomy
before retrying.
build
Goal: produce a host-side binary (and, if applicable, a DPA-side binary) that links DOCA RDMI against the user's installed DOCA, using the canonical cross-library build pattern.
The build pattern for any DOCA C/C++ consumer is identical
across libraries — pkg-config for include + link flags, meson
or CMake as the build system — and is fully documented in
doca-programming-guide TASKS.md ## build.
This skill carries only the RDMI-specific overlay:
| Slot | Value for RDMI | Why it matters |
|---|---|---|
pkg-config module name (host side) |
doca-rdmi |
The library's .pc file installed by the DOCA host packages |
| Co-required modules | doca-common, doca-verbs, plus doca-dpa when the DPA datapath is in use |
RDMI builds on verbs; the DPA datapath additionally requires the doca-dpa host-side library plus the DPA toolchain |
| Header check | doca_rdmi_connection.h, doca_rdmi_poster.h resolvable under the installed DOCA infrastructure include tree (path via doca-public-knowledge-map) |
If pkg-config --cflags doca-rdmi resolves but the include is missing, the install is partial |
| DPA-side compilation | doca_rdmi_dev_*.h headers are compiled with the DOCA DPA toolchain into the DPA kernel — not with the host compiler |
Mixing host and DPA toolchains on the same translation unit is the canonical reason a DPA-side build "fails for no reason"; routed to doca-dpa for the toolchain details |
| Minimum required DOCA version | Query with pkg-config --modversion doca-rdmi; never hardcode in build files |
The EXPERIMENTAL tag means a version pin from agent memory is wrong by construction |
For non-C consumers (Rust, Go, Python), the host-side link surface
is the same *.so files; FFI wrappers are out of scope for this
skill. The DPA-side surface is not wrappable — the DPA kernel is
compiled and linked into the DPA binary itself.
modify
Goal: take an existing RDMI-using component (the user's own code, or a verified DOCA sample if one ships in the installed package set) as the starting point and apply a minimum-diff modification to express the new intent.
The universal modify-a-shipped-sample workflow lives in
doca-programming-guide TASKS.md ## modify.
Use it as-is. The RDMI-specific overlay is the five-slot fill
the agent must elicit from the user before recommending any
code-level edit:
| Slot | What the agent asks the user | RDMI-specific consideration |
|---|---|---|
| 1. Starting code | Which RDMI-using file or sample is the baseline? | If the user has no working baseline, stop — route through the sample-discovery fallback in ## end-to-end (quickref); the EXPERIMENTAL tag on the API surface means authoring RDMI source from documentation prose is forbidden by this skill (per SKILL.md ## What this skill deliberately does not ship) |
| 2. Object set | Connection only, poster only, or both? | Each object has its own lifecycle and its own completion attach; adding one mid-flight is a re-architecture, not a tweak |
| 3. Completion source | Switch between doca_dpa_completion and doca_verbs_cq? |
This changes the datapath and which _attach call applies; the public headers describe these as alternatives, so the switch is a re-architecture |
| 4. Receive window | Resize doca_rdmi_connection_init_receive's buffer? |
A larger window changes the host-side ack-loop sizing; under-acking is a silent stall, not an error return |
| 5. PRM-passthrough input | Change doca_rdmi_*_set_input payload? |
The shipped header note flags that the QP-state outputs "will likely change once we have On-Behalf API support" — quote the instability to the user before they ship the change |
The agent emits an intent description + the five filled slots; the actual unified diff against the user's baseline is produced line-by-line and validated by the user pasting back the result. Do not author RDMI source code that the user did not start from.
run
Goal: actually execute the built binary (host + DPA) against the user's installed DOCA on a host or BlueField, with a remote responder reachable on the wire.
Steps the agent should walk the user through:
- Confirm the remote responder is reachable. RDMI is an
initiator; running the binary on one side alone produces a
misleading hang. The responder's RDMA stack must be running
(commonly an application using
doca-rdmaor the upstream verbs surface) and reachable over IB / RoCE. - Drive the DPA kernel. Load the DPA binary onto the
accelerator per
doca-dpa; hand it the DPA handle obtained fromdoca_rdmi_*_get_dpa_handle. The agent does not author the DPA-side launch incantation; the launch model is owned bydoca-dpa. - Capture the structured log on the host side. Set
DOCA_LOG_LEVEL=tracefor the first run (seedoca-debug CAPABILITIES.md ## Observability). This is the cheapest way to make the host-side lifecycle visible on first failure. - Drive the host-side ack loop. After the DPA consumes
receive work requests, the host must call
doca_rdmi_connection_recv_ack(conn, num_acked)with the matching count; otherwise the receive window stalls. Confirm the ack loop is wired before the DPA starts posting. - Observe completions on the configured surface. If the
attach was a
doca_dpa_completion, the DPA kernel polls; if the attach was adoca_verbs_cq, the host reads CQEs from the verbs CQ. A run that produces no observable completions on either surface but doesn't error is almost always (a) the DPA kernel was not launched or (b) the responder is silently rejecting the QP transition — confirm both before diving into RDMI internals.
test
Goal: prove the configured RDMI instance can actually initiate one-sided RDMA correctly on the user's hardware, and that the EXPERIMENTAL symbol surface the user is depending on matches the installed DOCA.
This is a loop, not a one-shot pass. Each iteration narrows either the symbol set, the lifecycle order, the completion source, the receive window, or the DPA handoff. The loop terminates when either (a) the user's intended one-sided RDMA operation completes end-to-end with the expected completion, or (b) the agent has narrowed the failure cause to a layer outside RDMI itself (verbs, DPA, driver, firmware, network) and escalated to the matching skill.
Iteration shape:
- Pre-run receive-window guard. Confirm
doca_rdmi_connection_init_receivecompleted with a non-zero buffer, the host-sidedoca_rdmi_connection_recv_ackloop is ready, anddoca_rdmi_connection_get_app_rq_infoplus the host-ack and DPA-consumption counts do not show an exhausted receive window. Fix any mismatch before posting. - Symbol-presence check. Confirm every
doca_rdmi_*symbol the user's code references is exported by the installedlibdoca_rdmi.so(and matched in the installed headers). Afunction not foundat link time is almost always a partial install or a wrong-version pairing perdoca-version TASKS.md ## debuglayer 2. - Lifecycle-order check. Walk the configure sequence in
## configureagainst the user's code: every_init_receive/_*_attach/_set_inputcall must precededoca_ctx_start(); every_get_dpa_handlecall must follow it; every_destroycall must followdoca_ctx_stop(). Out-of-order is the leading cause ofDOCA_ERROR_BAD_STATE. - Single-completion smoke. Before driving any volume,
confirm ONE completion arrives on the configured completion
surface for one work request from the DPA kernel. If no
completion arrives, stop and walk the observability surface
in
CAPABILITIES.md ## Observability; do not raise traffic into an unobserved path. - DPA handle round-trip. Confirm
doca_rdmi_*_get_dpa_handlereturns a non-zero handle afterdoca_ctx_start(), and that the DPA kernel can read the underlying connection / poster state through the device-side header set. A zero or stale handle is a configuration bug, not a kernel bug. - Negative test. Construct one deliberately misordered
sequence (e.g. attach a completion AFTER
doca_ctx_start()) and confirm the API returnsDOCA_ERROR_BAD_STATE. This validates that the agent's lifecycle understanding is itself correct on this DOCA version. Run this only with disposable connection / poster objects that are torn down immediately; do not mutate the primary test context.
Eval-loop overlay — why this is a loop, not a one-shot pass:
| Iteration trigger | What it looks like | What changes next iteration |
|---|---|---|
DOCA_ERROR_NOT_SUPPORTED on a symbol we expected to ship |
The user's code references a doca_rdmi_* symbol that is in the public docs but not in the installed .so |
Confirm the install is complete via the four-way match; the EXPERIMENTAL tag means symbols can be promoted / renamed between releases |
DOCA_ERROR_BAD_STATE from _get_dpa_handle |
The handle call landed before doca_ctx_start(), or the datapath was not set on the DPA |
Re-walk steps 3-6 of ## configure; the doca_ctx_set_datapath_on_dpa() call is easy to forget |
| Host-side ack loop stalled | The DPA posted receives; the host never acked; new receives back up | Wire doca_rdmi_connection_recv_ack into the host loop; under-acking is silent |
| DPA kernel sees no completions | The CQ attach was a doca_verbs_cq (host-side), not a doca_dpa_completion |
The completion source decides which side observes; confirm the attach call matches the consumer |
Link errors on doca_rdmi_* symbol |
The shipped libdoca_rdmi.so does not export the symbol the user's code references |
Audit the EXPERIMENTAL tag set on the installed version; a symbol present in one release may be absent or renamed in another |
Loop termination: stop when two consecutive phase-4 comparisons
produce identical triple-capture diffs for the same hypothesis
(verbs context state, RDMI connection state, and DOCA log lines).
That means the cause is below RDMI. Escalate to
doca-debug TASKS.md ## debug
with the captured layer-1-through-5 evidence.
debug
Goal: when a DOCA RDMI call returns a DOCA_ERROR_* (or the
program doesn't make forward progress), narrow the cause to a
specific layer and act on it.
The cross-library debug ladder lives in
doca-debug TASKS.md ## debug.
Walk through it in order — install → version → build → link →
runtime → program → driver — before recommending RDMI-specific
fixes. This skill's overlay names the RDMI-specific manifestation
at layers 5 (runtime) and 6 (program):
Layer 5 (runtime) — RDMI overlay.
- Confirm the connection / poster context was started after
all attach/configure calls, before any
_get_dpa_handlecall, and on the right datapath (DPA for accelerator-side, host fordoca_verbs_cq). - Confirm the DPA kernel was actually launched and is consuming
completions. No observable completions with a DPA attach is
almost always a launch / handoff bug, not an RDMI-spec bug;
route to
doca-dpafor the accelerator-side launch verification. - Confirm the host-side ack loop is firing. A stalled receive
window looks like a hung initiator; the diagnostic is to
inspect
doca_rdmi_connection_get_app_rq_infoand the host's ack count against the DPA's consumption count.
Layer 6 (program) — RDMI overlay.
- Lifecycle order: configure → start → use → stop → destroy.
Out-of-order returns
DOCA_ERROR_BAD_STATE. Re-check against## configure. - Single-handle discipline: the DPA handle from
_get_dpa_handlebelongs to exactly one context and one consuming kernel. Reusing a handle across stop / start cycles is undefined behavior perCAPABILITIES.md ## Safety policy. - PRM-passthrough inputs:
doca_rdmi_*_set_inputcarries PRM-side payloads transparent to the user. A mismatch between the input shape and the verbs command op type is a silent failure; quote the header doc string verbatim when walking through it.
Once the layer is identified, route to the matching debug verb on
the matching skill: install / build / link / driver to
doca-setup TASKS.md ## debug;
cross-cutting runtime to
doca-debug TASKS.md ## debug;
DPA-side debug to
doca-dpa TASKS.md ## debug;
program-layer Core-context patterns to
doca-programming-guide TASKS.md ## debug.
5-phase universal debug-loop instantiation (RDMI). Layer identification above is phase 1 of the universal debug-loop contract. The agent MUST walk the remaining four phases on every RDMI debug answer before declaring done:
- Layer identification — above (runtime / program / DPA-side handoff).
- Triple capture (READ-ONLY). Capture (a) verbs context
state via
doca_verbs_contextintrospection +ibv_devinfoon the underlying device, (b) RDMI connection state viadoca_rdmi_connection_get_app_rq_info(host side) AND the DPA-side completion counter fromdoca-dpa, (c) DOCA log lines atDOCA_LOG_LEVEL=DEBUGfor the offending post / poll. The triple is the rollback target — do NOT mutate before capturing all three. - Single-variable mutation SMALLER than the original change. Examples: post ONE work request (not the batch); switch the DPA kernel from the production shape to the shipped RDMI smoke sample (not refactor the algorithm); flip the connection state machine to a known-quiescent peer (not the production peer). Larger mutations void the experiment.
- Re-capture and compare. Re-run the triple; the diff IS the evidence. A "no change between iterations" diff means the cause is below RDMI (verbs / firmware / network).
- Exit with named green signal OR escalate. Green = one completion observed on the configured path (host-side CQ observation or DPA completion counter). If two consecutive phase-4 comparisons for the same hypothesis produce identical triple-capture diffs, escalate via the layer-7 route table above with the captured triple.
rollback
RDMI contexts are stateful (verbs context + connection / poster + optional DPA attach + remote responder peer) and the agent's failure mode is to leave a half-connected QP / a stale DPA handle / a registered MR pointing at freed host memory. The universal verification contract step 1 (preconditions) requires "the rollback path is documented" on every change-recommending answer; this is the RDMI instantiation.
Snapshot before mutate. Before any change-recommending RDMI
answer, capture (a) the underlying doca_verbs_context identity
and QP allocation map (ibv_devinfo + per-QP qp_num), (b) the
RDMI connection state map (active connection IDs, peer addresses,
DPA attach status from _get_dpa_handle), and (c) the MR
registration list (mmap region IDs from doca_mmap_*). The
triple IS the rollback target — "restore the pre-RDMI state"
is unfalsifiable without it.
- Quiesce the data path FIRST. Stop posting new WRs from
both initiator and responder. For DPA-initiated paths, signal
the DPA kernel to drain via the termination mechanism established
by
doca-dpa, then wait for the host/DPA completion mechanism defined bydoca-dpato report that the kernel returned. Do not substitute a CUDA synchronization API for DPA completion. If it does not return within the bounded debug-loop window, that is the deploy-loop bridge trigger; fire the debug-loop on the hung-kernel symptom before continuing the rollback. - Tear down RDMI objects in reverse-create order. (a)
after the DPA kernel has drained, invalidate each
_get_dpa_handleoutput by stopping its owning context; there is no separate handle-destroy step; (b)doca_ctx_stopon each RDMI poster and connection context (eachdoca_rdmi_poster/doca_rdmi_connectionis its owndoca_ctxvia_as_ctx— RDMI exposes no single top-level context object); (c) destroy posters then connections in reverse-create order (doca_rdmi_poster_destroy, thendoca_rdmi_connection_destroyfor each). There is nodoca_rdmi_destroy. - Unregister MRs and underlying mmap regions. Each
doca_mmapregistered for RDMA payloads / control buffers must be destroyed before the underlying host allocation is freed; reverse order is non-negotiable perCAPABILITIES.md ## Safety policy. - Tear down the verbs context LAST.
doca_verbs_contextmay be shared with non-RDMI clients (e.g., the verbs CQ fromdoca-verbs); only destroy it if RDMI was the sole client. If shared, leave the verbs context up and route the rollback's verbs leg viadoca-verbs TASKS.md. - Re-verify the verbs parent is intact. Re-run the
one-WR smoke from
doca-verbs TASKS.md ## testto confirm the parent verbs context still completes a single WR at the pre-RDMI shape. If not, the RDMI rollback corrupted the parent — surface as a residual gap, do NOT retry RDMI. - Cross-peer rollback. The remote BlueField responder
(if RDMI brought one up) MUST run the same five steps on its
side. Document the cross-peer rollback verb explicitly:
"the rollback path is the five-step reversal in
## rollback, applied on BOTH peers in reverse-connect order; the agent has captured the QP/connection/MR snapshot on both sides."
The rollback is bounded — on the second non-green re-verify at step 5, the agent MUST surface the unresolved residual gap instead of recommending another RDMI retry.
use
Goal: integrate a working RDMI component into a larger application — typically a DPA-resident agent that consumes a remote responder's memory at line rate without host CPU involvement.
The integration shape this skill teaches:
- Per-application init order. The host-side init order is verbs → RDMI context create → datapath set → completion attach → receive buffer init (connection only) → start → DPA handle retrieval → DPA kernel launch. The DPA kernel does not run until the handle is in its hands; the host does not stop the context until the DPA kernel has drained its outstanding work.
- Per-application teardown order. Stop the DPA kernel
first; quiesce in-flight work; call
doca_ctx_stop()on the RDMI context; call_destroyon the connection / poster; tear down verbs. Destroying a context with outstanding DPA work is the canonical use-after-free failure mode. - Multi-tenant discipline. When several DPA kernels share
the same RDMI host-side application, each kernel must have
its own DPA handle from its own context. Sharing a handle
between kernels is forbidden per
CAPABILITIES.md ## Safety policy; the agent surfaces this whenever a multi-kernel architecture comes up. - Operational handoff. Production deployment uses the
bundle's hardware-safety meta-policy
(
doca-hardware-safety) for any change that touches the BlueField BFB, firmware, or DPA toolchain. RDMI itself does not modify hardware state, but every RDMI-using component lives downstream of those changes — the per-artifact## Safety policyoverlay names the discipline. - Per-release re-verification. Because the API surface is
EXPERIMENTAL, every DOCA upgrade requires re-running
## testend-to-end against the new install. The agent does not assume a known-working integration survives a DOCA-version bump without re-testing.
Deferred task verbs
The following verbs are out of scope for this skill but are commonly asked in the same conversations. Route them as follows so the agent does not invent guidance:
- install (of DOCA itself). Installing DOCA, choosing
packages, post-install verification,
pkg-configwiring — defer todoca-setupand to the install-tree layout indoca-public-knowledge-map ## Layout of an installed DOCA package. This skill's## installverb assumes DOCA is already installed and only checks the RDMI-specific preconditions. - deploy. Deploying RDMI-using applications at scale across
many hosts / DPUs, Kubernetes operator workflows, multi-tenant
RDMA isolation — out of scope and reserved for a future
platform skill. For single-host first-run testing, the right
verb is
## run. - rollback. Only coordinated multi-host / platform rollback is
out of scope and reserved for a future platform skill. A
single-session rollback is in scope: follow
## rollbackon both peers in reverse-connect order; do not replace that documented workflow with an invented shortcut. - DPA programming. The DPA toolchain, kernel build, memory
model, and execution semantics belong to
doca-dpa. This skill describes the RDMI-side handoff (the handle, the device-side header set) but does not author DPA kernels. - Kernel-level driver install / firmware burn. Installing
the
mlx5_coredriver, burning new ConnectX firmware, or modifyingmlxconfigparameters — out of scope. Route todoca-setup TASKS.md ## debuglayer 5 and todoca-hardware-safetyfor the change-application discipline.
Command appendix
Every command below is cross-cutting on DOCA RDMI — it answers a recurring class of question that comes up in the verbs above. The agent should treat the class as load-bearing; the worked example is a single instance.
Infra-aware preamble (every row below). Per the bundle's
detect → prefer → fall back → report contract documented in
doca-structured-tools-contract ## The agent behavior contract,
the agent probes for the matching structured helper FIRST
(doca-env --json for version + devices + libraries + drivers;
doca-capability-snapshot for per-device capability flags;
version-matrix.json for "available since" lookups). If the
probe succeeds, the structured tool's output is the authoritative
answer. If the probe fails, fall back to the manual command in
the row.
| Command (worked example) | Owning step | Class of question it answers | What healthy output looks like |
|---|---|---|---|
pkg-config --modversion doca-rdmi |
## install step 1; ## configure step 1 |
What is the build-time DOCA RDMI version? | A semver matching doca_caps --version. Disagreement = partial install; route to doca-version TASKS.md ## debug layer 2 |
pkg-config --modversion doca-common doca-verbs doca-dpa doca-rdmi |
## install step 2 |
Do all four .pc files agree on the same DOCA semver? |
A single semver repeated four times. Any disagreement is the partial-install pattern |
pkg-config --cflags --libs doca-rdmi |
## build |
What include + link flags does the linker need? | Includes resolve under whichever include directory pkg-config --cflags reports on this install (do not hardcode the path); libs include -ldoca_rdmi -ldoca_common -ldoca_verbs (plus -ldoca_dpa when the DPA datapath is in use) |
doca_caps --list-devs |
## configure step 2; ## test step 4 |
Which devices on this host can be used as a doca_dev with DPA capability? |
One row per visible device with PCIe address and capability flags; the DPA capability flag is the gate for RDMI-on-DPA |
doca_caps --version |
## install step 1 |
What is the runtime DOCA version on this host? | A semver matching pkg-config --modversion doca-rdmi |
cat /opt/mellanox/doca/applications/VERSION |
## install step 1; ## debug layer 1 |
What does the install tree itself claim its version is? | A semver matching the other version sources |
DOCA_LOG_LEVEL=trace ./<binary> |
## run step 3 |
What did the structured DOCA logger emit for the first failing call? | A trace-level line on every lifecycle transition. Silence after doca_ctx_start() = the DPA kernel was never launched or the host stopped progressing the PE |
| `dmesg | tail -n 40` (sudo) | ## debug layer 7 |
What did the kernel / driver log around the last RDMI call? |
| `mlxconfig -d <pcie> q | head -n 40` (sudo) | ## debug layer 7 |
What firmware config does the underlying NIC / DPU report? |
For commands shared across libraries (pkg-config --modversion,
doca_caps, cat /opt/mellanox/doca/applications/VERSION,
DOCA_LOG_LEVEL) the cross-library overlay is in
doca-debug TASKS.md ## Command appendix;
this table adds the RDMI-specific rows on top.