Generated banner for Doca Firefly
Generated logo for Doca Firefly

Doca Firefly

NVIDIAOfficialCreated by NVIDIA

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • Medium risk

From the author

Use this skill when the user is operating the DOCA Firefly Service container on BlueField — picking the four PTP configuration axes (role / profile / domain / interface), wiring the BlueField PHC + host follower + consumer workload pairing, deciding whether PTP-grade time is even needed (vs. chrony / NTP), or debugging a Firefly deployment where PTP isn't syncing or the host clock isn't following. Trigger even when the user does not explicitly mention "DOCA Firefly" or "PTP" — typical implicit phrasings include "container green but PTP never advances past LISTENING", "Firefly says synced but the host clock still drifts", "sync acquired but offset is tens of microseconds", "my Rivermax SMPTE workload needs PTP", or "is chrony good enough". Refuse and route elsewhere for installing DOCA, host-side chrony / ptp4l config bodies, PTP topology / boundary-clock design, building DOCA apps that read the disciplined PHC, or other DOCA services (DMS, Flow-Inspector, HBN) — those belong to other skills.
— the description by NVIDIA

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The doca-firefly skill provides guidance for deploying and managing the DOCA Firefly Service container on BlueField DPU hardware. It focuses on configuring PTP-related subsystems, including PTP, PHC2SYS, PPS, SyncE, and the Firefly Servo, to ensure precise time synchronization. The skill covers the four primary PTP configuration axes (role, profile, domain, and interface), the necessary wiring of the BlueField PHC to host-side followers, and troubleshooting common synchronization issues. It is designed for operators managing time-sensitive workloads like SMPTE ST 2110, 5G UPF, or distributed databases that require sub-microsecond precision.

What it does

  • Guides the deployment and configuration of the DOCA Firefly Service container.
  • Explains the four PTP configuration axes: role, profile, domain, and interface.
  • Details the integration between the BlueField PHC and host-side time followers.
  • Provides troubleshooting steps for PTP synchronization failures and clock drift.
  • Outlines the six internal PTP-stack subsystems managed within the Firefly container.
  • Defines the operational boundary between Firefly and consumer workloads like Rivermax.

When to use it

  • When deploying the DOCA Firefly Service container on BlueField Arm.
  • When determining if PTP-grade time is required versus standard NTP/chrony.
  • When configuring PTP roles, profiles, and domains for a specific network environment.
  • When debugging PTP sync issues or host clock drift relative to the BlueField PHC.
  • When pairing Firefly with time-sensitive workloads like Rivermax SMPTE.

Advantages

  • Provides a structured approach to complex PTP configuration on BlueField.
  • Clarifies the distinction between container-internal and host-side time synchronization.
  • Offers a clear taxonomy for debugging PTP state and offset issues.
  • Ensures consistent configuration of PTP axes across different deployment scenarios.

Usage examples

“My Firefly container is running but PTP is stuck in LISTENING state.”
The agent will guide you through checking the four PTP configuration axes (role, profile, domain, and interface) to ensure they match your network topology.
“Firefly reports it is synced, but my host clock is still drifting.”
The agent will help you verify the host-side follower configuration (e.g., chrony or ptp4l) to ensure it is correctly reading the disciplined BlueField PHC.
“Do I need Firefly for my distributed application, or is chrony enough?”
The agent will help you evaluate your time-precision requirements to decide if PTP-grade synchronization is necessary for your specific workload.
“How do I pair Firefly with a Rivermax SMPTE workload?”
The agent will explain how Firefly disciplines the PHC and how to correctly configure the Rivermax workload to consume that time source.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/doca-firefly/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip doca-firefly.zip -d .agents/skills

Documentation by NVIDIA

DOCA Firefly Service

Examples

  • “Container green but PTP never advances past LISTENING.” — this is in scope. Check role / profile / domain / interface before changing host chrony.

  • “Firefly says synced but the host clock still drifts.” — wire the BlueField PHC follower; Firefly does not replace host-side chrony / ptp4l bodies.

Instructions

Follow Loading order below. Open the tasks companion for configure / sync / debug. Open the capabilities companion for PTP axes. Do not open every companion file.

Subsystem inventory. DOCA Firefly is NOT just "a PTP daemon." The shipped doca_firefly.yaml exposes six PTP-stack subsystems via environment variables, each with its own *_STATE, *_CONFIG_FILE, and (where relevant) *_INTERFACE / *_DEVICE knobs (the count is six because the PTP Monitor subsystem ships an internal phc2sys monitor client that is distinct from the standalone PHC2SYS subsystem — both ship in the same container image):

  1. PTP (PTP_STATE, PTP_INTERFACE, PTP_CONFIG_FILE) — the ptp4l daemon (or master, depending on profile) that drives the BlueField PHC.

  2. PTP Monitor (MONITOR_STATE, MONITOR_CONFIG_FILE, MONITOR_CLIENT_TYPE, MONITOR_CLIENT_PHC2SYS_INTERFACE, MONITOR_CLIENT_CONNECTION_TIMEOUT) — the monitor server + client surface; the internal phc2sys monitor client (MONITOR_CLIENT_TYPE=phc2sys) is a real subsystem inside Firefly, not just a host-side concern.

  3. PHC2SYS (PHC2SYS_STATE, PHC2SYS_ARGS, PHC2SYS_CONFIG_FILE) — the container-internal phc2sys instance (not host-only).

  4. PPS (PPS_STATE, PPS_DEVICE) — the Pulse-Per-Second output (with the additional enable_while_running and do_nothing states beyond plain enable/disable).

  5. SyncE (SYNCE_STATE, SYNCE_INTERFACE, SYNCE_CONFIG_FILE) — Synchronous Ethernet frequency distribution; orthogonal to PTP.

  6. Firefly Servo (SERVO_STATE, SERVO_CONFIG_FILE) — the proprietary Firefly servo loop (alternative to the upstream linuxptp servo).

The valid PROFILE values are exactly default / media / telco-l2 / custom (per doca_firefly.yaml comments) — the agent must not invent additional values. Subsystems configured as defined_by_profile are controlled by the active PROFILE.

Configuration-override env vars follow the pattern CONF_<SUBSYSTEM>_<section>_<key> (e.g. CONF_PTP_global_priority1, CONF_SYNCE_global_backend, CONF_MONITOR_global_telemetry_export); these are the documented surface for overriding individual config keys without shipping a full custom config file.

Configuration hierarchy: the mounted Firefly config file is mandatory and owns the primary PTP axes (role, profile, domain, interface, and transport). CONF_<SUBSYSTEM>_<section>_<key> variables are optional, documented per-key overrides of that file; they are not a second standalone configuration model.

Where to start: This skill is for operating the DOCA Firefly Service container, not for linking against a library. Firefly is the PTP / PHC2SYS / PPS / SyncE / Servo / Monitor stack that drives and observes the BlueField PTP Hardware Clock (PHC); it is not the host-side time follower, not the consumer workload, and not a programming surface. If the user wants to deploy the container, open the tasks companion and start at ## configure. If the question is what shape of service is Firefly and what PTP roles / profiles does it speak, start at the capabilities companion. If DOCA is not installed on the BlueField yet, route to doca-setup/SKILL.md first. If the user's real question is “I have a Rivermax SMPTE workload and the docs say I need PTP”, the right pairing is this skill plus doca-rmax/SKILL.md — Firefly disciplines the PHC; Rivermax reads the disciplined time.

Example questions this skill answers well

The CLASSES of Firefly questions this skill is built to answer, each with one worked example. The class is the load-bearing piece; the worked example is one instance.

  • “Do I actually need Firefly, or is NTP / chrony good enough?” — worked example: “my distributed app is fine on chrony today; is there a reason to add PTP?”. Answered by the PTP-vs-NTP path- selection rule in the capabilities companion

    • the env-prep checklist in the tasks companion.

  • “What four PTP configuration axes do I have to decide before starting the container?” — worked example: “a SMPTE ST 2110 broadcast plant that wants Firefly in slave role on the wire-side port”. Answered by the four-axis configuration table in the capabilities companion

    • the PTP-config step in the tasks companion.

  • “Firefly's container is running but the host's time isn't following — what did I miss?” — worked example: “ptp4l / Firefly says it's locked but chronyc tracking on the host shows drift”. Answered by the END-TO-END time-sync discipline in the capabilities companion

    • the host-follower step in the tasks companion.

  • “PTP locks but the offset / jitter is way past spec — what's wrong with the path?” — worked example: “sync acquired but offset is in the tens of microseconds”. Answered by the PTP-aware-path rule in the capabilities companion

    • the layered debug ladder in the tasks companion.

  • “How does Firefly pair with a Rivermax SMPTE workload?” — worked example: “SMPTE ST 2110 video sender that needs to be PTP- locked”. Answered by the Rivermax-pairing rule in the capabilities companion

    • the pairing step in the tasks companion, which routes the Rivermax side to doca-rmax/SKILL.md and refuses to collapse the two services into one.

  • “My Firefly container starts but PTP never reaches SLAVE / MASTER state — was it role, domain, profile, or interface?” — worked example: “container green but the ports-state output never advances past LISTENING”. Answered by the four-axis-mismatch rule in the capabilities companion

    • the layered ladder in the tasks companion.

Audience

This skill serves external operators and platform teams who deploy the DOCA Firefly Service container to provide PTP-grade time synchronization to time-sensitive workloads on BlueField + the host behind it. Concretely: people running the Firefly container on BlueField Arm, choosing its PTP role / profile / domain / interface from the public Firefly guide, wiring the host-side follower (chrony with the PHC source, or ptp4l reading the PHC) so the host clock tracks the BlueField PHC, and validating the end-to-end discipline before scaling a Rivermax, 5G UPF, financial-trading, or distributed- database workload that depends on it.

It is not for NVIDIA developers contributing to Firefly itself, nor a programming guide for building on DOCA libraries (see doca-programming-guide/SKILL.md). Firefly is a service: the operator runs a container and configures PTP; there is no libfirefly.so to link against.

Path selection up front. Use Firefly when sub-microsecond, PTP-grade time precision is required on BlueField AND the host (SMPTE ST 2110 broadcast workloads layered on Rivermax, 5G UPF time requirements, distributed systems that need PTP-grade time, anything where NTP / chrony jitter is not tight enough). Do not reach for Firefly when NTP / chrony already meets the workload's time-precision budget, when no PTP-aware switching / boundary-clock infrastructure exists in the path, or when pure software-side time precision is sufficient — in those cases the correct answer is to keep the host's existing chrony / NTP setup and route the agent away from Firefly, not to deploy it speculatively.

When to load this skill

Load this skill when the user is doing hands-on Firefly deployment work on a BlueField where DOCA is already installed. Concretely:

  • Deciding whether Firefly is the right answer for the user's time-precision requirement (vs. keeping NTP / chrony on the host).

  • Deploying the Firefly container on BlueField Arm — choosing image source per the public DOCA Firefly Service Guide, mounting the Firefly config, and starting / stopping the container.

  • Choosing the four PTP configuration axes — PTP role (master / slave / boundary clock / transparent clock), profile (the PROFILE env var accepts EXACTLY default / media / telco-l2 / custom per the shipped doca_firefly.yaml; these map onto industry PTP profile names: default → IEEE 1588, media → SMPTE 2059-2, telco-l2 → G.8275.1 only (G.8275.2 corresponds to the separate telco-l3 config, reached via custom) — do NOT put the industry names directly into the env var), domain number, network interface — for the user's deployment.

  • Wiring the host-side follower so the host clock tracks the BlueField PHC (chrony with the PHC source, or ptp4l / phc2sys reading the PHC) — without this step the host clock does NOT follow the Firefly-disciplined PHC, regardless of how cleanly Firefly comes up.

  • Pairing Firefly with a time-sensitive consumer workload (Rivermax SMPTE, 5G UPF, finance, distributed databases) and validating the end-to-end discipline.

  • Reading the Firefly container's logs, the PHC offset, the ports-state output, or any other documented observability surface to confirm PTP is locked.

  • Debugging a Firefly deployment where the container is healthy but PTP is not syncing, or PTP is syncing but the host clock is not following, or sync is up but jitter is past spec.

Do not load this skill for general DOCA orientation, install of DOCA itself, library-API questions, or non-PTP time topics. For those, route via doca-public-knowledge-map/SKILL.md, doca-setup/SKILL.md, or the matching libs/<library> skill.

What this skill provides

This is a thin loader. Substantive material lives in two companion files:

  • the capabilities companion — Firefly's architecture (container that drives the BlueField PHC and speaks PTP on the wire), the four PTP configuration axes (role / profile / domain / interface, with transport as a fifth knob), the deployment shape (container on BlueField Arm per the public Container Deployment Guide), the pairing surface (Rivermax + host-side time-sync follower), the observability surface (container logs + PHC offset + ports state), the error taxonomy (four-axis-mismatch / host-follower / PTP-aware- path / container-runtime), and the safety policy (PTP-vs-NTP path selection, END-TO-END discipline, smoke-before-scale).

  • the tasks companion — step-by-step workflows for the in-scope Firefly verbs: configure, build, modify, run, test, debug, plus a Deferred task verbs block routing out-of-scope questions and a Command appendix of recurring commands.

The skill assumes a BlueField where DOCA is already installed and the operator has the privileges the public Firefly Service Guide expects to pull, run, and configure containers on BlueField Arm. It does not cover installing DOCA — that path goes through doca-setup/SKILL.md.

What this skill deliberately does not ship

This skill is agent guidance, not a templates or sample-config bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:

  • Pre-baked Firefly configuration files (full PTP config blocks, ready-to-run role / profile / domain bundles) intended to be copy-pasted into production. PTP configuration is deployment- specific (per the user's profile, domain plan, interface naming, and upstream PTP topology); the safe answer for an external operator is to derive the config from the public Firefly Service Guide against their own deployment. The agent's job is to prescribe the procedure and the four-axis decision, not to ship a config the user might run unmodified.

  • Container image names, tags, or registry paths. The authoritative image source is the public DOCA Firefly Service Guide reachable through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services); Firefly's image tag is version-bound and changes between DOCA releases. Inventing or memorizing a tag is the canonical hallucination failure mode for a service skill.

  • Host-side chrony stanzas or ptp4l / phc2sys config files. Those are host-environment-specific and live on the host, not inside the Firefly container. The skill names that the host-side follower must be wired and what its source must be (the BlueField PHC); the chrony / ptp4l config bodies belong to the host operator and to upstream Linux PTP documentation.

  • A samples/, templates/, or reference/ subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled “reference”, is misleading: operators will read it as production-ready.

Loading order

  1. Read this skill first to confirm the user's question is in scope and that Firefly is the right answer at all (vs. keeping NTP / chrony on the host).

  2. For Firefly's deployment shape, the four PTP configuration axes, the Rivermax + host-follower pairing surface, the error taxonomy, the observability surface, and the END-TO-END safety policy, see the capabilities companion.

  3. For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.

  • doca-public-knowledge-map/SKILL.md — the routing table to the public DOCA Firefly Service Guide and the rest of the public DOCA documentation set. The Firefly URL is listed under ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

  • doca-setup/SKILL.md — env preparation and install verification on the BlueField where the Firefly container will run, including the I have no install yet path via the public NGC DOCA container. This skill assumes its preconditions are satisfied on BlueField Arm.

  • doca-version/SKILL.md — canonical DOCA version-handling rules. Firefly's container tag is version-bound; this skill's ## Version compatibility cross-links the four-way match rule and adds the container-tag-lags-host-package 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 patterns. Firefly is service-shaped not library- shaped, so the build / modify / first-app pattern there does not apply directly, but the cross-library debug discipline (frontend- before-backend, env-before-program) remains useful when Firefly reports an error that originated in the container runtime or in a DOCA library it called.

  • doca-rmax/SKILL.md — the canonical paired workload. SMPTE ST 2110 Rivermax streams depend on a Firefly-disciplined PHC; Firefly is the time-source side and Rivermax is the timing-precise data-plane side. The two skills load together for any broadcast-style deployment, and they do NOT collapse into one another — Firefly does not stream media; Rivermax does not discipline the PHC.

  • doca-dms/SKILL.md — sibling service skill. The agent reading both skills should see the same service-skill shape (container, BlueField Arm, deployment pattern, smoke-before-scale, env preconditions, config schema) layered on top of a different per-service domain (DMS = device management via gNMI / gNOI; Firefly = time synchronization via PTP).

  • doca-debug/SKILL.md — the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). Firefly-specific debug (PTP not syncing, host clock not following, jitter past spec) overlays on top of that ladder.

Files

TASKS.md

DOCA Firefly Service — Tasks

Where to start: The order is configure → build → modify → run → test → debug. The ## test verb is an iterative loop, not a one-shot pass — see the eval-loop overlay in ## test below. For Firefly, build and modify are about deployment configuration (container image selection, mounted config file, host-follower wiring), not about compiling source.

These verbs cover the in-scope Firefly operational workflows for an external operator deploying the Firefly container on BlueField. Every step assumes the operator has consulted the live public DOCA Firefly Service Guide (reachable through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services)) and is using it as the authoritative reference; this file prescribes the order and what to look up where, not a copy-paste runbook.

configure

Preparing the BlueField, picking the four PTP axes, and wiring the end-to-end discipline before the container starts.

  1. Confirm Firefly is actually the right answer. Per the path-selection rule in CAPABILITIES.md ## Safety policy:

    • Is PTP-grade time precision genuinely required by the consumer workload (SMPTE ST 2110 on Rivermax, 5G UPF, financial trading, or sub-microsecond distributed-database time)?

    • Is the network between Firefly and the upstream PTP master PTP-aware (PTP-aware switches in the path, or boundary clocks where the switches are not PTP-aware)?

    • If either answer is no, stop here and tell the user honestly: keep the host's chrony / NTP setup, do not deploy Firefly speculatively.

  2. Confirm the env is healthy. This skill expects DOCA to be installed on the BlueField. If that has not been verified, run doca-setup ## test (doca-setup/TASKS.md#test) first. If the user has no install yet, route to doca-setup ## no-install (doca-setup/TASKS.md#no-install) for the public NGC DOCA container path. Then check the BlueField PTP prerequisites the DOCA 3.5 Firefly Service Guide lists. Query first; change nothing yet:

    • Firmware and BSP. Firmware must be 24.34.1002 or higher and the BlueField image 3.9.0 or higher. Read the running firmware (e.g. fw_ver in ibv_devinfo) and compare.

    • Real-time clock. sudo mlxconfig -d <pcie> q | grep REAL_TIME_CLOCK_ENABLE must show True(1). Turning it on (mlxconfig ... set REAL_TIME_CLOCK_ENABLE=1) is a firmware setting that only takes effect after a graceful shutdown and power cycle of the BlueField. That is a hardware-state change: follow doca-hardware-safety (inventory, out-of-band access, maintenance window, rollback) and get the operator's approval before applying it — never as a side step of a container deploy.

    • OVS offload and TX timestamping. Firefly gets TX timestamps for outgoing PTP messages only when that traffic is offloaded to hardware; otherwise it loops in a fault waiting for them. Confirm sudo ovs-vsctl get Open_vSwitch . other_config shows hw-offload="true" (the BFB default). TX port timestamping is enabled with ethtool --set-priv-flags <iface> tx_port_ts on — on the SF, not the representor, in DPU mode; on p0 in separated mode. In DPU mode the guide also adds OVS multicast-snooping settings and OpenFlow rules that pass PTP (UDP 319/320) between the SF and p0; copy them from the version-matched guide. Changing OVS on a port that carries traffic goes through the same doca-hardware-safety discipline.

    • NTP off on the BlueField. phc2sys can only discipline the BlueField OS clock if no other time service fights it. The guide's Ubuntu example is systemctl stop systemd-timesyncd; also stop chrony / ntpd if they run on the BlueField.

  3. Decide the four PTP configuration axes. Per the four-axis table in CAPABILITIES.md ## Capabilities and modes, commit before starting the container to:

    • Role — master / slave / boundary clock / transparent clock. Drives whether Firefly follows or sources time on the segment.

    • Profile — the PROFILE env var accepts EXACTLY default / media / telco-l2 / custom (per the shipped doca_firefly.yaml). These four values map onto the industry-standard PTP profile names: default → IEEE 1588 default; media → SMPTE 2059-2 (broadcast); telco-l2 → G.8275.1 only (telecom full timing over L2; ptp4l-telco-l2.conf extends G.8275.1.cfg); custom → the user's own config file (e.g. G.8275.2 partial timing corresponds to the separate telco-l3 config, which is NOT an accepted PROFILE value and is reached only via custom). Do NOT put the industry-standard names directly into the env var — they are not accepted values. Must match (or interop with) the upstream master's profile.

    • Domain number — must match the upstream master's domain; mismatched domains = zero peers visible.

    • Network interface — typically the wire-side BlueField port, not the management port. The port must have hardware PTP timestamping enabled.

    • Plus the transport choice (L2 multicast / L3 unicast / L3 multicast) per the upstream topology.

  4. Plan the host-side follower. Decide which mechanism the host will use to read the BlueField PHC — chrony with the PHC source, or ptp4l / phc2sys reading the PHC. Without this step the host clock does NOT follow the Firefly-disciplined PHC, no matter how cleanly the container comes up. Capture the device path the host will read (/dev/ptpN) and the follower's config intent; the body of the host-side config file is the host operator's responsibility and lives in upstream Linux PTP / chrony docs, not in Firefly.

  5. Plan the consumer workload pairing. If the deployment exists to support a Rivermax SMPTE workload, the Rivermax-side precondition matrix (Rivermax SDK + license + scheduling discipline) is ALSO required — route the Rivermax side to doca-rmax ## configure (doca-rmax/TASKS.md#configure). For 5G UPF / finance / distributed databases, the consumer-side wiring is owned by the workload's own docs; Firefly's job is to keep the disciplined time available.

  6. Author the Firefly container config. From the public DOCA Firefly Service Guide, derive the config file fragment for the chosen role / profile / domain / interface / transport. Quote config keys from the live guide, do NOT infer them from generic ptp4l knowledge. Plan where the config file will live on the BlueField filesystem and what mount path the container expects. Also inventory the effective state and config source for all six shipped subsystems — PTP, PTP Monitor, PHC2SYS, PPS, SyncE, and Firefly Servo — using the version-matched doca_firefly.yaml. Do not assume that choosing the four primary PTP axes configures every subsystem the deployment needs.

build

Firefly is a service shipped as a container, not a library. There is no Firefly application artifact for the operator to build — the container ships from NGC and the config is a static file.

If the user is asking how to build a PTP client in their own language (e.g. an application that reads the disciplined system clock with sub-microsecond precision), that is not a Firefly question:

  • For applications that read the BlueField PHC directly via a DOCA library (e.g. a Rivermax-based SMPTE workload), the build is the DOCA library's build — route to doca-programming-guide/SKILL.md and the matching libs/<library> skill (e.g. doca-rmax/SKILL.md for SMPTE).

  • For applications that read the OS system clock that the host-side follower is disciplining, no DOCA-specific build is needed — the application uses standard clock_gettime(2) against the appropriate clock, and the precision is whatever the host-side follower delivers. The follower setup is upstream Linux PTP / chrony, not Firefly.

If the user is instead asking how to build the Firefly container itself from source, that is not an external-operator workflow — the container ships pre-built from NGC and rebuilding it is out of scope for this skill. Route to the public DOCA Firefly Service Guide via doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

modify

Firefly does not have a "modify a sample" workflow analogous to DOCA libraries; there is no Firefly sample program a user starts from. The Firefly analog of "modify" is adapt the documented container config recipe to the user's environment:

  1. Start from the documented recipe. Identify the public guide's recipe that matches the user's PTP role and profile. Quote it; do not author a new one from scratch.

  2. Diff against the user's environment. Note the specific substitutions the user must make: interface name, domain number, transport choice, upstream master address (for slave / boundary roles), config file path, container image tag (always pulled from NGC per the public guide).

  3. Apply minimum-change. Change only what the user's environment forces. Every additional deviation from the documented recipe widens the surface for an unintended PTP mismatch the operator will have to debug later.

  4. Re-validate against the four-axis table. Each substitution is a chance to accidentally break one of the four PTP axes (role / profile / domain / interface). Walk CAPABILITIES.md ## Capabilities and modes one row at a time after every substitution.

  5. Re-validate against the END-TO-END discipline. Per the END-TO-END rule in CAPABILITIES.md ## Safety policy, any change that affects which PHC device the host reads, or which port carries PTP, also affects the host-side follower's config. Update both together.

The agent's anti-pattern alert: a "start from a generic ptp4l config and adapt" is almost always slower than starting from the public Firefly Service Guide's recipe, because the Firefly config schema is documented per the public guide and is not 1:1 with upstream linuxptp.

run

Bringing up the Firefly container and confirming PTP advances through its state machine, with the host follower attached, BEFORE layering any consumer workload on top.

Before pulling or starting the image, confirm the operator can pull images, run containers, and mount the Firefly config on BlueField Arm under the runtime named by the public Container Deployment Guide. If not, stop and hand off to the BlueField container-runtime owner.

  1. Pull the Firefly container image from NGC at the tag the public Firefly Service Guide names for the operator's DOCA release. Quote the tag from the live guide; do NOT memorize or invent the tag. If that version-matched guide/tag source is inaccessible, stop and ask the operator to provide the tag from the guide; do not infer one from the host package version. Take the YAML from the NGC Firefly resource, not the shared bundle. The shared doca_container_configs bundle linked from the Container Deployment Guide has shipped an old Firefly YAML (image 1.5.0-doca2.9.0). The NGC Firefly resource carries the current doca_firefly.yaml for the release. Before copying the YAML into /etc/kubelet.d, open it and check that its image: tag matches the operator's DOCA release.

  2. Start the container per the public Container Deployment Guide pattern. Mount the Firefly config file at the path the public Firefly Service Guide names. The runtime command shape (e.g. docker run / crictl / BlueField container manager) is documented in the Container Deployment Guide reachable through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

  3. Confirm the container is running, not restart-looping. A restart loop is a layer-1 symptom per CAPABILITIES.md ## Error taxonomy (container runtime / image tag / config mount); diagnose it before touching PTP config.

  4. Watch the Firefly container's logs for the PTP state-machine transitions. The container's stdout is the primary observability surface. The PTP state should advance from LISTENING through UNCALIBRATED and into SLAVE (for slave role) or MASTER (for master role) within the timeline the public guide describes for the chosen profile. For a boundary clock, inspect every configured PTP port and verify the documented upstream-facing and downstream-facing conditions; a single aggregate SLAVE or MASTER observation is insufficient. For a transparent clock, verify the version-matched guide's documented forwarding and residence-time-correction condition rather than requiring a slave/master terminal state.

  5. Confirm the BlueField PHC is being disciplined. The PHC offset (relative to its master) and frequency adjustment are the numeric proof. Use the upstream PTP tooling (e.g. pmc, phc_ctl) the public guide cites; do not invent commands.

  6. Wire the host-side follower NOW. Per the host-follower step in ## configure, start chrony with the PHC source or ptp4l / phc2sys reading the PHC. Confirm chronyc tracking (or pmc against the host's PTP daemon) reports the BlueField PHC as the reference and a tight offset. Without this step the host clock does NOT follow the PHC.

  7. Single-event smoke (next: ## test step 1). Before driving any consumer workload, walk ## test step 1 once to confirm end-to-end discipline holds; only then layer the consumer workload on top.

For the runtime version + container-tag cross-checks that underlie "my Firefly behaves differently from what the docs say", see doca-version TASKS.md ## run (doca-version/TASKS.md#run) and apply the container-tag-lags-host-package overlay from CAPABILITIES.md ## Version compatibility.

test

Firefly has no "compile and unit-test" workflow — testing is operational and end-to-end.

## test is an iterative loop, not a one-shot pass. Every mutation (role change, profile change, domain change, interface change, transport change, host-follower change) re-opens the smoke sweep. Skipping the re-run after a mutation is the failure mode this loop replaces.

The eval-loop overlay (rows apply to every Firefly deployment, not just one PTP profile):

StepWhy this is a loop, not a stepWhere the substance lives
1 → 4 → 1Step 4 (consumer-workload check) often reveals an as-deployed gap in the host-follower or in the Firefly config; loop back to step 1## test step 4
2 → ## debugWhen the four-axis smoke does NOT progress past LISTENING, the deployment is non-functional — escalate to ## debug layer 2 immediately, do not run later steps## debug
3 → ## configure → 3When the host follower does not track the PHC, the host-side config is wrong — loop back to ## configure step 4 and re-run## configure
1..5 → ## runEach loop iteration ends with a smoke; if all five pass, hand off to live ## run traffic## run

The agent's rule: every mutation re-opens the sweep. A configuration change followed by "it probably still works" is exactly the failure mode the iterative loop is here to prevent.

  1. End-to-end smoke. With Firefly running and the host follower wired, confirm in this order: (a) Firefly container stdout shows PTP advanced to SLAVE or MASTER per the chosen role; (b) PHC offset reported by pmc / phc_ctl is within the profile's expected range; (c) host-side follower reports the PHC as its reference with a tight offset; (d) the host's date / clock_gettime(CLOCK_REALTIME) agrees with an independent source within the profile's spec.

  2. Four-axis smoke. Passively compare the effective role, profile, domain, interface, and transport with the upstream peer; confirm captured PTP traffic and peer state agree. Do not mutate a live timing domain merely to prove the mismatch path.

  3. Host-follower smoke. Confirm the follower names the BlueField PHC as its source and that its offset changes in step with the PHC observations. This is the required live/shared-system check.

  4. Consumer-workload smoke. For Rivermax SMPTE, run the doca-rmax single-frame smoke (per doca-rmax TASKS.md ## test (doca-rmax/TASKS.md#test)) with the disciplined PHC available; for 5G UPF / finance / distributed databases, the workload-side smoke is the workload's own concern. The Firefly contribution to the consumer smoke is "the disciplined time was actually available when the workload asked for it" — chronyc tracking snapshot at the time of the smoke is the evidence.

  5. Capability snapshot. Save the as-deployed answer to: which Firefly container tag is running, which role / profile / domain / interface / transport are in effect, which follower mechanism the host is using, what the steady-state PHC offset looks like. This snapshot is the artifact that lets future debug sessions skip rediscovery.

Optional disruptive negative checks — excluded from the required green sweep. Run these only on isolated test resources or in an operator-approved maintenance window with rollback ready:

  • Temporarily select a domain the upstream master is not using, confirm peering fails, then restore and re-run the required sweep.

  • Stop the host follower, confirm loss of discipline, restart it, and re-run the required sweep.

On live or shared systems, skip both and record the passive evidence from required steps 2–3 instead.

debug

Layered diagnosis. Walk the layers in this order; do not skip down without clearing the layer above. The five layers match CAPABILITIES.md ## Error taxonomy.

  1. Container runtime layer. Is the Firefly container actually running and not restart-looping? Symptoms: container exits immediately, image pull fails, restart count climbing. Resolution: confirm the image tag matches what the public guide names for the operator's DOCA release; confirm the config mount path matches what the public guide names; confirm BlueField has the runtime configured per the public Container Deployment Guide. This layer is owned by the container runtime, not by PTP.

  2. Four-axis PTP-config layer. Container green; PTP never advances past LISTENING, or no peers seen on the wire, or the wrong upstream master is selected. Resolution: walk the four-axis table in CAPABILITIES.md ## Capabilities and modes one row at a time, comparing the Firefly config against what the upstream master / network actually presents. tcpdump for PTP traffic on the configured interface is the cheapest confirmation of which axis is wrong; defer to upstream Linux PTP / tcpdump docs for the exact filter. If the logs show Firefly stuck in a fault loop waiting for TX timestamps, check OVS hw-offload, tx_port_ts, and the PTP OpenFlow rules from ## configure step 2 before touching the four axes.

  3. Host-follower layer. PTP locks (Firefly says synced; PHC offset is tight); host OS clock drifts. Resolution: the host-side chrony / ptp4l / phc2sys is not configured to follow the PHC, OR it is configured but a competing NTP / chrony source is winning. Walk chronyc tracking, chronyc sources, and (if ptp4l is the follower) pmc against the host's PTP daemon. This layer is owned by upstream Linux PTP / chrony, not by Firefly — Firefly is correct. If it is the BlueField OS clock that jumps while the PHC is locked, check that NTP (systemd-timesyncd, chrony, ntpd) is stopped on the BlueField — it fights phc2sys (see ## configure step 2).

  4. PTP-aware-path layer. PTP locks; sync acquired; offset and jitter wildly past the profile's spec. Resolution: a non-PTP- aware switch in the path is silently adding variable latency that PTP cannot correct from the endpoint. Confirm via the network team / switch-side inspection. The fix is on the network side: insert boundary clocks at the non-PTP-aware switch, or replace the switch with a PTP-aware one. Do NOT try to fix this from Firefly config; it is a network-path property, not a Firefly knob.

  5. Consumer-workload layer. Firefly correct; PHC correct; host clock follows PHC; but the consumer workload still reports time drift. Resolution: the workload is reading its own time source instead of the disciplined system clock. For Rivermax, walk doca-rmax TASKS.md ## debug (doca-rmax/TASKS.md#debug); for 5G UPF / finance / distributed DB, the workload's own docs.

  6. Version layer. When the public Firefly Service Guide page appears to disagree with what the deployed container does, the docs version may not match the container tag. Walk doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) layer 2 (partial install / version mismatch) and apply the container-tag overlay from CAPABILITIES.md ## Version compatibility.

  7. Cross-cutting layer. For env-side and program-side debug that is not Firefly-specific (host install, host kernel, DOCA library errors Firefly may surface), drop to doca-debug TASKS.md ## debug (doca-debug/TASKS.md#debug).

When a diagnosed root cause belongs to the host follower, network path, consumer workload, version alignment, or another cross-cutting owner, hand it off and stop iterating on Firefly configuration.

Command appendix

Firefly-specific commands the verbs above reach for, grouped by purpose so the agent picks the right family without searching prose. Every row is a class — the agent must not invent flags beyond what the row names; flag and command discovery is --help on the installed tool or the public guide, not prose recall.

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 (doca-structured-tools-contract/SKILL.md#the-agent-behavior-contract), the agent should:

  1. Probe for the matching structured helper FIRST (doca-env --json for version + devices + libraries + drivers + hugepages in one shot; the BlueField container manager's structured status output when available).

  2. If the probe succeeds, the structured tool's output is the authoritative answer and the agent SHOULD NOT also run the manual command in the row below. Report "using structured <tool>".

  3. If the probe fails, fall back to the manual command in the row. Report "falling back to manual chain".

  4. The schemas the structured tools emit are defined in doca-structured-tools-contract ## Schemas (doca-structured-tools-contract/SKILL.md#schemas); the version-handling semantics (four-way match, NGC, headers-win) are owned by doca-version/SKILL.md.

PurposeCommand (class shape)Owning stepReads as healthy when …
Container lifecycleThe BlueField container manager's start / stop / status command for the Firefly container, per the public Container Deployment Guide## runContainer running, restart count stable.
Container logsThe BlueField container manager's log-stream command for the Firefly container## debug layer 1 + 2PTP state-machine transitions visible; no documented error / warning lines repeating.
PHC offset / frequencypmc -u -b 0 'GET CURRENT_DATA_SET' or phc_ctl /dev/ptpN get (upstream Linux PTP tooling — quote the exact form from the public Firefly guide)## run step 5; ## debug layer 2Offset within the chosen profile's spec; frequency adjustment converged.
Ports-state inspectionpmc -u -b 0 'GET PORT_DATA_SET' (upstream Linux PTP)## debug layer 2Slave/master roles reach their documented state; boundary-clock validation covers every configured upstream/downstream PTP port; transparent-clock validation uses the guide's documented forwarding and residence-time-correction condition rather than a slave/master terminal state.
On-the-wire confirmationtcpdump for PTP traffic on the configured interface (upstream Linux / tcpdump — defer to its own docs for the exact filter)## debug layer 2PTP frames egress / ingress as the role expects; domain numbers in the frames match the configured domain.
Host-follower status (chrony)chronyc tracking and chronyc sources (upstream chrony)## run step 6; ## debug layer 3Reference ID corresponds to the PHC; offset tight; stratum / leap status sane.
Host-follower status (ptp4l)pmc against the host-side PTP daemon (upstream Linux PTP)## run step 6; ## debug layer 3Host's PTP daemon reports the PHC as its source; offset tight.
Container tag in useThe BlueField container manager's image-inspect command for the running Firefly container## run step 1; ## debug layer 6Tag matches what the public Firefly Service Guide names for the operator's DOCA release.

Three cross-cutting rules for this appendix:

  • Never invent a Firefly config key, container tag, or PTP command. The public Firefly Service Guide is the contract; upstream Linux PTP / chrony / tcpdump docs are the secondary source for the cross-cutting PTP tools the guide reuses. Prose- derived flags are the most common hallucination failure for this skill.

  • Container before PTP. When triaging, confirm the container layer (running, not restart-looping, image tag correct) before reading any PTP-layer command. A non-running container makes every PTP-layer command meaningless.

  • Cross-link instead of duplicate. Cross-cutting env commands (port-state, devlink, ip link, ethtool) live in doca-setup TASKS.md ## Command appendix (doca-setup/TASKS.md#command-appendix); this appendix names only the Firefly-specific ones.

Deferred task verbs

  • Installing DOCA on the BlueField — out of scope here. Route to doca-setup ## configure (doca-setup/TASKS.md#configure) for env preparation and doca-setup ## test (doca-setup/TASKS.md#test) for install health verification, or doca-setup ## no-install (doca-setup/TASKS.md#no-install) for the public NGC DOCA container path.

  • Installing or configuring the host-side time-sync follower (chrony / ptp4l / phc2sys) — out of scope here. The Firefly contract is that the host must be configured to follow the PHC; the follower's own config body is upstream Linux PTP / chrony documentation, not a Firefly concern.

  • Designing the PTP topology (where to place boundary clocks, which switches must be PTP-aware, redundant masters, BMCA configuration) — out of scope here. That is a network-side / topology-side concern that the operator owns; Firefly only consumes the topology decision.

  • Building a custom DOCA application that reads the disciplined PHC — not a Firefly question. Route to doca-programming-guide ## build (doca-programming-guide/TASKS.md#build) for the canonical build pattern and the matching libs/<library> skill (e.g. doca-rmax ## configure (doca-rmax/TASKS.md#configure) for SMPTE) for the API surface.

  • Other DOCA services (DMS, DTS, BlueMan, Flow-Inspector, HBN, Argus, …) — not Firefly. Route to doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services) for the routing table and the matching services/<service> skill when it exists (e.g. doca-dms ## configure (doca-dms/TASKS.md#configure) for device management). The container-shaped deployment pattern is shared; the per-service domain is different.

Cross-cutting

  • The public DOCA Firefly Service Guide is the single source of truth. Any config key, profile name, role name, container tag, or observability output the agent quotes must come from there, not from generic ptp4l / linuxptp / chrony knowledge.

  • PTP is END-TO-END. The Firefly container disciplines the BlueField PHC; the host-side follower disciplines the host clock from the PHC; the consumer workload reads the disciplined time. All three legs are mandatory; naming only one is how end-to-end discipline silently breaks.

  • Path-selection is mandatory up front. Firefly is the wrong answer when chrony / NTP suffices, when no PTP-aware path exists, or when pure software-side time precision is enough.

  • Smoke before scale. Every consumer workload (Rivermax, 5G UPF, finance, distributed DB) goes after the end-to-end smoke passes, never before.

  • For URL routing to the Firefly guide and other public DOCA documentation, see doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

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: BlueField-Arm-only DOCA service container; pulled from NVIDIA NGC and started under the BlueField OS container runtime. Host-side install is irrelevant. Requires a reachable PTP master (or runs as the master itself) and a PTP-aware network path; the host-side time follower (chrony / ptp4l / phc2sys reading the BlueField PHC) is also operator-owned. 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-firefly · 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 or NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-firefly.zip