Skip to content

go-profinet v0.2.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 08:48
e54f1a2

Date: 2026-10-27
Previous release: v0.1.2

The first features of the software-only roadmap
(docs/research/SOFTWARE-ONLY-ROADMAP.md):
DCP Hello, port checks and adjustments, GSDML validation, shared device,
and codecs of MRP, PTCP and system redundancy. No incompatible API change
(apidiff against v0.1.2); two behaviour changes: the IO-Device now
accepts the IOCARs of several IO controllers (shared device) instead of
refusing a second one, and generated GSDML no longer declares SNMP.
Feature coverage is not conformance: go-profinet is not certified.

  • DCP Hello (roadmap 1A): dcp.HelloFrame, Responder.StartHello and
    StopHello (bounded sequences, rate-limited across restarts, ended by a
    DCP Set); the IO-Device sends Hello at start and on link up while no IO
    controller is connected (device.Config.Hello, HelloOptions) and
    reports DeviceInitiative; the IO-Controller connects through a Hello
    without Identify (controller.Config.IgnoreHello, DeviceStats.Hellos).
    model.Capabilities.DCPHello and GSDML DCP_HelloSupported.
  • Port checks and adjustments (roadmap 1B): pnio codecs of
    PDPortDataCheck, PDPortDataAdjust, PDInterfaceAdjust, PDInterfaceDataReal
    and the PDRealData record with the interface (DecodePDRealDataRecord);
    the IO-Device evaluates CheckPeers against its LLDP neighbor (remote
    mismatch diagnoses with alarms), applies PeerToPeerBoundary,
    DCPBoundary and PDInterfaceAdjust, serves PDExpectedData and
    PDInterfaceDataReal, reports the real link state, and refuses the
    checks and adjustments it cannot honour; the IO-Controller writes
    DeviceConfig.PeerChecks and verifies a topology (CheckTopology).
    The LLDP agent reports changes (AgentOptions.OnChange), can stop
    sending (SetTransmit) and forget its neighbors (Clear).
  • Shared device (roadmap 2): the IO-Device accepts IOCARs of several IO
    controllers; each submodule belongs to the first AR that expects it,
    the others see it locked (ModuleDiff ARInfo 3), get no data of it,
    cannot write it; alarms go to the owner; when the owner leaves, the
    submodule is handed over with a Released alarm, PrmEnd (plug) and
    ApplicationReady (plug). The IO-Controller leaves out locked submodules,
    takes over released ones, and model.Device.WithSlots builds the
    model of a controller that owns only some modules. A closed AR now
    invalidates only its own outputs.
  • Codecs of features without an open implementation to test behaviour
    against (roadmap 3, 4B, 5): mrp (MRP frames), ptcp (PTCP delay
    frames), pnio.SRInfoBlock, pnio.ARSetID, pnio.MCRBlockReq, the
    IOCARSR DataStatus codes in rt; golden vectors, fuzz targets, tshark
    and scapy decode them without a warning.
  • Generated GSDML no longer declares SNMP in SupportedProtocols: the
    device has no SNMP agent.
  • docs/research/SOFTWARE-ONLY-ROADMAP.md and its evidence files.
  • GSDML validation (roadmap 1C): gsdml.Check grades every issue as
    error, warning or unvalidated and names its rule; semantic rules for IO
    data that does not fit an RT frame (error), slots against PhysicalSlots
    and AllowedInSlots, record indexes, module ident numbers, interface and
    port subslots and reduction ratios (warnings, each with its basis);
    elements and attributes outside the catalog and newer schema versions
    are reported as unvalidated. Validate still fails on errors only.
  • controller: Device.WaitState returns only after the OnState
    callback of the state it waited for has run, as documented; before, it
    could return in between.
  • device: a controller that connects anew before the device saw its old
    AR end replaces that AR, which hands its submodules to the new one
    (before, they were locked until the old AR timed out, or went to
    another controller); SendAlarm no longer reads the alarm endpoint of
    an AR that is still being set up (data race).
  • Tests: a failed e2e test prints the logs of its devices and
    controllers; tests that are not about the watchdog ride out CI runner
    stalls of seconds. Soaked: every CI job 25 times in parallel, green.
  • Interop: pinned to profinet-interop v0.1.3, whose matrix covers the new
    features (p-net 55 checks pass, 0 fail).