Skip to content

Releases: SoundMatt/go-SOMEIP

v1.2.1 — bump RELAY dependency to v2.0.4 (module-path uplift)

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 22:31
307691e

Highlights

go-SOMEIP's RELAY dependency was pinned to github.com/SoundMatt/RELAY v1.11.1 — three-plus spec releases behind (v1.12, v1.13, v1.14, and the breaking v2.0). This release bumps to the real, current github.com/SoundMatt/RELAY/v2 v2.0.4 (RELAY v2.0's own patch line moved the module path to /v2 per Go's semantic import versioning rules — RELAY#70). (#77)

Closes #57 (RELAY pinned three-plus releases behind, spanning a known conformance-gate false-pass bug and a breaking v2.0.0).

What changed

  • go.mod/go.sum: require github.com/SoundMatt/RELAY/v2 v2.0.4.
  • All 6 source files importing RELAY updated from "github.com/SoundMatt/RELAY" to "github.com/SoundMatt/RELAY/v2".
  • SpecVersion bumped 1.11 → 2.0, closing the tracked spec-version-drift gap (go-SOMEIP-03) — go-SOMEIP was misreporting conformance to a spec three-plus releases stale.
  • CI's relay CLI pin moved to github.com/SoundMatt/RELAY/v2/cmd/relay@v2.0.4.
  • README.md/CLAUDE.md/.fusa-reqs.json stale "RELAY spec v1.11" references reconciled to v2.0.
  • CLI binVersion 1.2.0 → 1.2.1.

Conformance review

Read RELAY's CHANGELOG for v1.12 → v2.0: v1.12 ("c" CLI language) and v1.14 (RCP/DDS module-name registry) are not applicable to SOME/IP; v2.0's breaking RCP canonical-type replacement is RCP-specific and doesn't touch SOME/IP. v1.13's SOME/IP-relevant fix (FromMessage wrapping ErrMalformedMessage on malformed IDs) was already present in go-SOMEIP. v1.13 also fixed a real upstream bug where RELAY's embedded golden error vectors were unreachable, so relay interop had never previously exercised reject-path behavior for any implementation — now fixed upstream.

Built the RELAY v2.0.4 CLI from source and ran both conformance gates for real against the go-someip binary:

  • relay conform --strict → PASS (all three §12 schemas)
  • relay interop --strict --protocol SOMEIP → PASS on both vectors, including the previously-unreachable someip-wrong-protocol-version reject-path vector (now actually exercised for the first time) — go-someip correctly rejects it via the existing ErrWrongProtocolVersion sentinel.

No conformance gaps found; no behavioral code changes were required.

Verification

go build ./..., go vet ./..., go test ./..., go test -tags integration ./..., golangci-lint run ./... (0 issues) all green. CI: 14/14 checks passed before merge.

v1.2.0 — SD option-run wire fix, back-pressure, requirement/doc reconciliation

Choose a tag to compare

@SoundMatt SoundMatt released this 30 Jul 21:54
59d36ce

Highlights

Audit fix pass: applies 12 of 15 findings from the 2026-07-30 x-Net audit fix register; 3 advisory items left open (see below). (#76)

Critical: SD entry option-run wire fix (go-SOMEIP-01)

sd.EncodeEntry/DecodeEntry packed the SD entry option-run fields (bytes 2-3) against a non-AUTOSAR layout — NumOpts1 landed in byte2's low nibble instead of byte3, Index2 was truncated from 8 to 4 bits, and NumOpts1 was never written into byte3 at all. Any Offer/Subscribe entry with a real option run was misparsed by a conformant SOME/IP-SD peer (vsomeip, CommonAPI, real ECUs) even though encode→decode round-tripped internally. Fixed to byte1=Index1, byte2=Index2 (full 8 bits), byte3=(NumOpts1<<4)|NumOpts2, matching PRS_SOMEIPServiceDiscoveryProtocol. Independently verified via a hand-derived AUTOSAR byte layout in a standalone program, not just the shipped round-trip test. Added a golden-vector test asserting the exact byte layout (go-SOMEIP-02).

Other fixes

  • Back-pressure: Adapt().Subscribe now honours relay.BackPressurePolicy (Block/DropOldest/DropNewest) instead of always blocking (go-SOMEIP-04).
  • Removed OptionTypeIPv6Endpoint/OptionTypeIPv4Multicast constants — no encoder/decoder exists for either (go-SOMEIP-05).
  • ROADMAP/README reconciled with the shipped tree; README gained a RELAY conformance section, Meta-key table, CLI usage (go-SOMEIP-06/07).
  • Documented that FromMessage is version-normalising (go-SOMEIP-11).
  • codec.ErrShortFrame/ErrLengthMismatch now wrap someip.ErrMalformedMessage (RELAY spec §5.4 conformance); HARA SG-001 text corrected to match (go-SOMEIP-N2-01).
  • Fixed a stale sd.Entry.MinorVersion doc comment (go-SOMEIP-N2-03).
  • Reconciled REQ-SPEC-001 with the actual exported SpecVersion ("1.11") (go-SOMEIP-N2-04).
  • SD-carrier UDP handshake frames now set InterfaceVersion=0x01 and a non-zero SessionID per AUTOSAR SOME/IP-SD (go-SOMEIP-N2-05).
  • Replaced dangling spec-v0.3 citations in adapt.go with the canonical RELAY spec §14.1 reference (go-SOMEIP-N2-06).

Advisory — left open, no diff applied

  • go-SOMEIP-03: SpecVersion still reports "1.11" vs governing RELAY v2.0.
  • go-SOMEIP-08: TARA is still 48 boilerplate entries, not a real ISO 21434 threat model.
  • go-SOMEIP-09: tcp/udp/SD-UDP-daemon tests remain behind //go:build integration.

v1.1.0

Choose a tag to compare

@SoundMatt SoundMatt released this 27 Jul 17:14
f971c5c

go-SOMEIP v1.1.0

Fixes the full open-issue backlog (#43–#50): two real P0/P1 concurrency/
transport bugs, two CLI/doc conformance gaps, and a RELAY spec uplift
from 1.0 to 1.11.

P0/P1 bug fixes

  • #47 — udp.Server never tracked subscriber addresses, so Emit()
    silently sent event notifications to nobody. Service.Subscribe now
    registers with the server (a minimal point-to-point SOME/IP-SD
    Subscribe/SubscribeAck handshake) before returning success.
  • #48 — Data race in udpSubscription.Unsubscribe, which mutated a
    shared subscriber slice while dispatchFrame concurrently ranged over
    it. Reproducing it under -race also surfaced two adjacent bugs:
    sync.Map.CompareAndSwap panicking on concurrent Subscribe calls
    (slices aren't comparable), and a send-on-closed-channel window. All
    fixed with a mutex-protected, copy-on-write subscriber map, verified
    under -race (including 10x repeat runs).
  • #49 — CLI capabilities JSON now includes protocol/protocol_int.
  • #50 — README quickstart examples fixed to match the real
    mock/udp/tcp API.

RELAY spec uplift (1.0 → 1.11)

  • #45 — RELAY adapter (Adapt, ToMessage, FromMessage) split into
    adapt.go per spec §13.7.1's module taxonomy.
  • #43 — convert --protocol SOMEIP --format json driver for
    relay interop.
  • #44 — send --format json streaming NDJSON sink for relay crossbar.
  • #46 — CI now runs the full x-FuSa lifecycle (check, 100% requirement
    traceability, cybersecurity analysis, dependency vulnerability scan, tool
    qualification) plus relay conform --strict and relay interop on every
    push/PR. Added a HARA; release automation now also regenerates TARA, the
    vulnerability scan, and the qualification report.

Full details in PR #51.

v1.0.0 — RELAY spec v1.0 (stable)

Choose a tag to compare

@SoundMatt SoundMatt released this 17 Jun 14:38
05c901a

First stable release of go-SOMEIP, aligned with RELAY spec v1.0.

Depends on github.com/SoundMatt/RELAY v1.0.0. RELAY's canonical types (§15), application interfaces (§10), error sentinels (§5), and CLI document schemas (§12) are now stable — breaking changes require a major (v2.0) increment.

Since v0.7.0

  • Dependency RELAY v0.8.0 → v1.0.0; SpecVersion → "1.0" (tracks relay.SpecVersion, drift-checked in tests). RELAY v1.0 introduced no normative changes from v0.3, so no source-logic changes were required.
  • CLI reports binary version 1.0.0.
  • relay-conform CI gate pinned to relay@v1.0.0; relay conform --strict passes §12.1/12.2/12.3.

Conformance surface (stable)

  • Lossless someip.Message ↔ relay.Message mapping (§15.7.6).
  • Adapt(Service) relay.Caller with WithEventID-driven Subscribe (§10.3).
  • Sentinels wrap the mandatory relay errors; ErrWrongProtocolVersion + Message.Validate().
  • §12-conformant version/capabilities/status CLI documents.
  • 114 atomic go-FuSa requirements (ISO 26262, ASIL-B).

Full Changelog: v0.7.0...v1.0.0

v0.7.0 — RELAY spec v0.3 conformance (lossless SOME/IP mapping)

Choose a tag to compare

@SoundMatt SoundMatt released this 17 Jun 13:36
5804037

Adopts RELAY spec v0.3. Depends on github.com/SoundMatt/RELAY v0.8.0.

⚠️ Breaking changes (spec v0.3 §15.7.6 / §4.3)

The someip.Message ↔ relay.Message conversion is now lossless (hazard H-002):

  • Meta["someip.msg_type"] now carries the numeric MessageType; the human-readable label moved to Meta["someip.msg_type_name"] (diagnostic only, ignored by FromMessage).
  • ToMessage() now also emits someip.client_id and someip.session_id.
  • FromMessage() restores ClientID, SessionID, MessageType, ReturnCode, and InterfaceVersion.

Other changes

  • SpecVersion → "0.3".
  • Adapt().Subscribe reads relay.WithEventID to subscribe to a SOME/IP event group (resolves SoundMatt/RELAY#12).
  • New standalone ErrWrongProtocolVersion sentinel + Message.Validate(); codec.Decode rejects wrong-version frames with it.
  • cmd/go-someip CLI output conforms to the §12 schemas; verified by relay conform --strict (new relay-conform CI gate).
  • Golden + error reference vectors vendored under testdata/vectors/.
  • FuSa: 114 atomic requirements.

Full Changelog: v0.6.1...v0.7.0

v0.6.1 — codec round-trip + release workflow fixes

Choose a tag to compare

@SoundMatt SoundMatt released this 17 Jun 02:51
f78f7e2

Patch release fixing two CI failures discovered after v0.6.0.

Fixes

  • codec: Encode now always emits the canonical SOME/IP ProtocolVersion (0x01) on the wire, so its output is unconditionally decodable. Previously a caller-set non-0x01 version was preserved and then rejected by Decode's new protocol-version check (REQ-PROTO-001), breaking the Encode → Decode round-trip. Found by FuzzEncodeRoundTrip.
  • ci(release): the Release workflow now force-adds (git add -f) the go-FuSa safety artifacts, which are .gitignored for local development but committed on each release.

Full Changelog: v0.6.0...v0.6.1

v0.6.0 — RELAY spec v0.2 conformance

Choose a tag to compare

@SoundMatt SoundMatt released this 17 Jun 00:29
9325d62

What's new

Full conformance with RELAY spec v0.2 across all three priority tiers.

P0 — Breaking renames

  • MessageType constants now use the MsgType prefix: MsgTypeRequest, MsgTypeResponse, MsgTypeNotification, MsgTypeError, MsgTypeRequestNoReturn, and all TP variants
  • ReturnCode constants now use the Ret prefix: RetOK, RetNotOK, RetUnknownService, etc.
  • SubscribeConfig/Option/ApplySubscribeOpts renamed to SubscriberConfig/Option/ApplySubscriberOpts (now type aliases for relay.SubscriberConfig/Option)
  • ErrNotReady renamed to ErrNotConnected

P1 — RELAY conformance (spec §5, §10, §14, §15, §17)

  • Error sentinels wrap relay.ErrClosed/ErrTimeout/ErrNotConnected/ErrPayloadTooLarge so errors.Is(err, relay.ErrXxx) works across the stack
  • New ErrPayloadTooLarge wrapping relay.ErrPayloadTooLarge
  • BackPressurePolicy with DropNewest/DropOldest/Block and WithBackPressure option
  • SOMEIPProtocolVersion = 0x01; codec.Decode rejects frames with a different version
  • JSON tags on Message fields
  • Message.ToMessage() / FromMessage() envelope conversion
  • Adapt(Service) relay.Caller — protocol-agnostic application interface
  • SpecVersion = "0.2"
  • cmd/go-someip: version, capabilities, status CLI commands

P2 — Optional interfaces (spec §9)

  • HealthProvider, MetricsProvider, Drainer

FuSa

  • 112 atomic SEOOC requirements in .fusa-reqs.json (up from 71)

Fixes

  • Closes #30, #31, #32
  • RELAY issue #12 filed documenting the Subscribe EventID gap in relay.Node

Full Changelog: v0.5.0...v0.6.0