Service Discovery Requirements

This section defines Software Low-Level Requirements (SW-LLR) for the SOME/IP Service Discovery (SOME/IP-SD) module. SD is used to locate service instances, detect their availability, and implement Publish/Subscribe.

Overview

The Service Discovery module handles:

  1. SD message parsing and generation

  2. Service offer and find operations

  3. Eventgroup subscription management

  4. TTL-based service availability tracking

  5. Reboot detection

SD Message Format

Header Requirements

Requirement: SD Service ID REQ_SD_001
status: implemented
priority: high
satisfies: feat_req_someipsd_141

The software shall use Service ID 0xFFFF for all SOME/IP-SD messages.

Rationale: Service ID 0xFFFF is reserved for Service Discovery.

Code Location: src/sd/sd_message.cpp

Requirement: SD Method ID REQ_SD_002
status: implemented
priority: high
satisfies: feat_req_someipsd_142

The software shall use Method ID 0x8100 for all SOME/IP-SD messages.

Rationale: Method ID 0x8100 is defined for SD messages.

Code Location: src/sd/sd_message.cpp

Requirement: SD Client ID REQ_SD_003
status: implemented
priority: high
satisfies: feat_req_someipsd_144

The software shall use Client ID 0x0000 for all SOME/IP-SD messages.

Rationale: Client ID 0x0000 is reserved for SD.

Code Location: src/sd/sd_message.cpp

Requirement: SD Protocol Version REQ_SD_004
status: implemented
priority: high
satisfies: feat_req_someipsd_147

The software shall use Protocol Version 0x01 for all SOME/IP-SD messages.

Rationale: SOME/IP-SD uses Protocol Version 1.

Code Location: src/sd/sd_message.cpp

Requirement: SD Interface Version REQ_SD_005
status: implemented
priority: high
satisfies: feat_req_someipsd_148

The software shall use Interface Version 0x01 for all SOME/IP-SD messages.

Rationale: SOME/IP-SD uses Interface Version 1.

Code Location: src/sd/sd_message.cpp

Requirement: SD Message Type REQ_SD_006
status: implemented
priority: high
satisfies: feat_req_someipsd_205

The software shall use Message Type 0x02 (NOTIFICATION) for all SOME/IP-SD messages.

Rationale: SD messages are notifications.

Code Location: src/sd/sd_message.cpp

Requirement: SD Return Code REQ_SD_007
status: implemented
priority: high
satisfies: feat_req_someipsd_208, feat_req_someipsd_209

The software shall use Return Code 0x00 (E_OK) for all SOME/IP-SD messages.

Rationale: SD messages always use E_OK return code.

Code Location: src/sd/sd_message.cpp

SD Flags Parsing

Requirement: Parse SD Flags Byte REQ_SD_010
status: implemented
priority: high
satisfies: feat_req_someipsd_100, feat_req_someipsd_209, feat_req_someipsd_213

The software shall parse the SD Flags byte from the first byte (byte 0) of the SOME/IP-SD payload.

Rationale: Flags byte contains control flags for SD processing.

Code Location: src/sd/sd_message.cpp

Requirement: Extract Reboot Flag REQ_SD_011
status: implemented
priority: high
satisfies: feat_req_someipsd_213

The software shall extract the Reboot flag from bit 7 (most significant bit) of the SD Flags byte.

Rationale: Reboot flag indicates ECU reboot for session management.

Code Location: src/sd/sd_message.cpp

Requirement: Extract Unicast Flag REQ_SD_012
status: implemented
priority: high
satisfies: feat_req_someipsd_100, feat_req_someipsd_213

The software shall extract the Unicast flag from bit 6 of the SD Flags byte.

Rationale: Unicast flag indicates unicast-capable endpoint.

Code Location: src/sd/sd_message.cpp

Requirement: Validate Reserved Flags REQ_SD_013
status: implemented
priority: medium
satisfies: feat_req_someipsd_213

The software shall set reserved flag bits (bits 5-0) to zero when generating SD messages.

Rationale: Reserved bits must be zero per specification.

Code Location: src/sd/sd_message.cpp

Requirement: Ignore Reserved Flags on Receive REQ_SD_014
status: implemented
priority: medium
satisfies: feat_req_someipsd_148, feat_req_someipsd_213

The software shall ignore reserved flag bits (bits 5-0) when parsing received SD messages.

Rationale: Forward compatibility with future flag definitions.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Invalid SD Header REQ_SD_001_E01
status: implemented
priority: high

The software shall reject messages that do not match the required SD header values (Service ID 0xFFFF, Method ID 0x8100).

Rationale: Invalid SD header indicates malformed message.

Error Handling: Discard message and log error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Malformed SD Flags REQ_SD_010_E01
status: implemented
priority: high

The software shall return an error when the SD payload is too short to contain the Flags byte.

Rationale: Minimum SD payload must contain Flags and Reserved bytes.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Entry Parsing

Entries Array

Requirement: Parse Entries Length Field REQ_SD_020
status: implemented
priority: high
satisfies: feat_req_someipsd_575

The software shall parse the Entries Length field as a 4-byte Big Endian value from bytes 4-7 of the SOME/IP-SD payload.

Rationale: Entries Length indicates the size of the entries array.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Entry Type REQ_SD_021
status: implemented
priority: high
satisfies: feat_req_someipsd_575, feat_req_someipsd_625, feat_req_someipsd_626

The software shall parse the Entry Type from the first byte of each SD entry.

Rationale: Entry Type determines the entry format and semantics.

Code Location: src/sd/sd_message.cpp

Requirement: Entry Size Calculation REQ_SD_022
status: implemented
priority: high
satisfies: feat_req_someipsd_575, feat_req_someipsd_625

The software shall use an entry size of 16 bytes for service-type entries (Type 0, Type 1).

Rationale: Fixed entry size per specification.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Type 0 Find Service Entry REQ_SD_023
status: implemented
priority: high
satisfies: feat_req_someipsd_626

The software shall parse Entry Type 0 as a Find Service entry, extracting Service ID, Instance ID, Major Version, and TTL.

Rationale: Find Service is used by clients to discover services.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Type 1 Offer Service Entry REQ_SD_024
status: implemented
priority: high
satisfies: feat_req_someipsd_626

The software shall parse Entry Type 1 as an Offer Service entry, extracting Service ID, Instance ID, Major Version, Minor Version, and TTL.

Rationale: Offer Service announces service availability.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Type 6 Subscribe Eventgroup Entry REQ_SD_025
status: implemented
priority: high
satisfies: feat_req_someipsd_629

The software shall parse Entry Type 6 as a Subscribe Eventgroup entry, extracting Service ID, Instance ID, Eventgroup ID, Major Version, and TTL.

Rationale: Subscribe Eventgroup requests event notifications.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Type 7 Subscribe Eventgroup Ack Entry REQ_SD_026
status: implemented
priority: high
satisfies: feat_req_someipsd_630

The software shall parse Entry Type 7 as a Subscribe Eventgroup Ack entry, extracting Service ID, Instance ID, Eventgroup ID, and Reserved/Counter.

Rationale: Subscribe Eventgroup Ack confirms or denies subscription.

Code Location: src/sd/sd_message.cpp

Entry Fields

Requirement: Parse Service ID in Entry REQ_SD_030
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the Service ID from bytes 4-5 of each SD entry in Big Endian byte order.

Rationale: Service ID identifies the service.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Instance ID in Entry REQ_SD_031
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the Instance ID from bytes 6-7 of each SD entry in Big Endian byte order.

Rationale: Instance ID identifies the service instance.

Code Location: src/sd/sd_message.cpp

Requirement: Instance ID Wildcard REQ_SD_032
status: implemented
priority: high
satisfies: feat_req_someipsd_625, feat_req_someipsd_734

The software shall interpret Instance ID 0xFFFF as a wildcard matching all service instances.

Rationale: Wildcard for discovering any instance of a service.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Major Version and TTL REQ_SD_033
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the combined Major Version (1 byte) and TTL (3 bytes) from bytes 8-11 of each SD entry in Big Endian byte order.

Rationale: Major Version and TTL share a 4-byte field.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Minor Version REQ_SD_034
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the Minor Version from bytes 12-15 of Offer Service entries in Big Endian byte order.

Rationale: Minor Version indicates compatible version range.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Eventgroup ID REQ_SD_035
status: implemented
priority: high
satisfies: feat_req_someipsd_629

The software shall parse the Eventgroup ID from bytes 14-15 of Subscribe Eventgroup entries in Big Endian byte order.

Rationale: Eventgroup ID identifies the subscribed event group.

Code Location: src/sd/sd_message.cpp

Entry Error Handling

Requirement: Error - Unknown Entry Type REQ_SD_021_E01
status: implemented
priority: medium

The software shall skip entries with unknown Entry Type values and log a warning, continuing to process remaining entries.

Rationale: Forward compatibility with new entry types.

Error Handling: Log warning and skip entry.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Truncated Entry REQ_SD_022_E01
status: implemented
priority: high

The software shall return an error when an entry would extend beyond the declared Entries Length boundary.

Rationale: Prevents buffer overread.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Invalid Entries Length REQ_SD_020_E01
status: implemented
priority: high

The software shall return an error when the Entries Length field exceeds the remaining SD payload size.

Rationale: Prevents buffer overread.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Entries Length Not Multiple of Entry Size REQ_SD_020_E02
status: implemented
priority: medium

The software shall log a warning when the Entries Length is not an exact multiple of the entry size.

Rationale: May indicate malformed message or version mismatch.

Error Handling: Log warning and process complete entries.

Code Location: src/sd/sd_message.cpp

TTL Processing

Requirement: Store Service Offer TTL REQ_SD_040
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall store the TTL value for each service offer received, associated with the Service ID and Instance ID.

Rationale: TTL tracks service availability duration.

Code Location: src/sd/sd_server.cpp

Requirement: Decrement TTL Periodically REQ_SD_041
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall decrement the stored TTL value for each active service offer every second.

Rationale: TTL countdown for service expiration.

Code Location: src/sd/sd_server.cpp

Requirement: Remove Service on TTL Expiry REQ_SD_042
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall remove a service from the available services list when its TTL value reaches zero.

Rationale: Expired services are no longer considered available.

Code Location: src/sd/sd_server.cpp

Requirement: Infinite TTL Value REQ_SD_043
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall interpret TTL value 0xFFFFFF (16777215 seconds) as an infinite lifetime that shall not be decremented.

Rationale: Special value for permanent service availability.

Code Location: src/sd/sd_server.cpp

Requirement: Stop Offer TTL Zero REQ_SD_044
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall interpret TTL value 0 as an immediate Stop Offer, removing the service from the available list without delay.

Rationale: TTL 0 signals service is no longer available.

Code Location: src/sd/sd_server.cpp

Requirement: Reset TTL on New Offer REQ_SD_045
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall reset the TTL to the new value when a new Offer is received for an already-known service instance.

Rationale: Refreshes service availability on repeated offers.

Code Location: src/sd/sd_server.cpp

Requirement: Notify Application on Service Availability Change REQ_SD_046
status: implemented
priority: high
satisfies: feat_req_someipsd_14

The software shall notify the application layer when a service becomes available (offer received) or unavailable (TTL expired or stop offer).

Rationale: Application needs to know service availability.

Code Location: src/sd/sd_server.cpp

TTL Error Handling

Requirement: Error - TTL Underflow Protection REQ_SD_041_E01
status: implemented
priority: high

The software shall prevent TTL underflow by not decrementing TTL values that are already zero.

Rationale: Prevents unsigned integer underflow.

Error Handling: Skip decrement for TTL = 0.

Code Location: src/sd/sd_server.cpp

Requirement: Error - Service List Full REQ_SD_040_E01
status: implemented
priority: medium

The software shall return an error or drop oldest entry when the maximum number of tracked services is reached.

Rationale: Resource management for memory-constrained systems.

Error Handling: Return RESOURCE_EXHAUSTED or apply eviction policy.

Code Location: src/sd/sd_server.cpp

Reboot Detection

Requirement: Track Session ID per Endpoint REQ_SD_050
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall store the Session ID from SD messages, associated with the source endpoint (IP address and port).

Rationale: Session ID tracking enables reboot detection.

Code Location: src/sd/sd_server.cpp

Requirement: Compare Session ID for Reboot Detection REQ_SD_051
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall compare the Session ID in newly received SD messages against the stored Session ID for the source endpoint.

Rationale: Session ID regression indicates reboot.

Code Location: src/sd/sd_server.cpp

Requirement: Detect Reboot on Session ID Regression REQ_SD_052
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall detect a reboot condition when the new Session ID is less than the stored Session ID (not within wrap-around threshold).

Rationale: Lower Session ID indicates ECU restarted.

Code Location: src/sd/sd_server.cpp

Requirement: Detect Reboot on Reboot Flag REQ_SD_053
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall detect a reboot condition when the Reboot flag (bit 7 of SD Flags) is set in a received SD message.

Rationale: Explicit reboot indication from sender.

Code Location: src/sd/sd_server.cpp

Requirement: Trigger Reboot Detection Event REQ_SD_054
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall trigger a reboot detection event when a reboot condition is detected for a remote endpoint.

Rationale: Application may need to handle reconnection.

Code Location: src/sd/sd_server.cpp

Requirement: Clear Cached Services on Reboot REQ_SD_055
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall clear all cached service instances associated with a remote endpoint when a reboot is detected.

Rationale: Services from rebooted ECU are no longer valid.

Code Location: src/sd/sd_server.cpp

Requirement: Update Stored Session ID REQ_SD_056
status: implemented
priority: high
satisfies: feat_req_someipsd_795

The software shall update the stored Session ID to the new value after successfully processing an SD message.

Rationale: Enables detection of subsequent reboots.

Code Location: src/sd/sd_server.cpp

Reboot Detection Error Handling

Requirement: Error - Session ID Wrap-Around Handling REQ_SD_052_E01
status: implemented
priority: high

The software shall correctly handle Session ID wrap-around (0xFFFF to 0x0001) and not falsely detect it as a reboot.

Rationale: Normal Session ID progression should not trigger reboot.

Error Handling: Use wrap-around detection threshold.

Code Location: src/sd/sd_server.cpp

Requirement: Error - First Session ID Storage REQ_SD_050_E01
status: implemented
priority: medium

The software shall store the Session ID from a new endpoint without triggering reboot detection.

Rationale: First contact cannot be a reboot.

Error Handling: Store Session ID and skip reboot check.

Code Location: src/sd/sd_server.cpp

Options Parsing

Options Array

Requirement: Parse Options Length Field REQ_SD_060
status: implemented
priority: high
satisfies: feat_req_someipsd_1096

The software shall parse the Options Length field as a 4-byte Big Endian value from the position immediately after the Entries Array.

Rationale: Options Length indicates the size of the options array.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Option Type REQ_SD_061
status: implemented
priority: high
satisfies: feat_req_someipsd_1096, feat_req_someipsd_1112

The software shall parse the Option Type from byte 2 of each SD option (after length field).

Rationale: Option Type determines the option format.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Option Length REQ_SD_062
status: implemented
priority: high
satisfies: feat_req_someipsd_1096, feat_req_someipsd_1112

The software shall parse the Option Length from bytes 0-1 of each SD option in Big Endian byte order.

Rationale: Option Length indicates the option data size.

Code Location: src/sd/sd_message.cpp

IPv4 Endpoint Option

Requirement: Parse IPv4 Endpoint Option Type REQ_SD_063
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall recognize Option Type 0x04 as an IPv4 Endpoint option.

Rationale: IPv4 Endpoint provides service endpoint information.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv4 Address REQ_SD_064
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the IPv4 address from bytes 4-7 of the IPv4 Endpoint option.

Rationale: IP address is needed for service communication.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv4 Port Number REQ_SD_065
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the port number from bytes 9-10 of the IPv4 Endpoint option in Big Endian byte order.

Rationale: Port number is needed for service communication.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv4 Protocol REQ_SD_066
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the L4 protocol from byte 8 of the IPv4 Endpoint option (UDP=0x11, TCP=0x06).

Rationale: Protocol type determines transport layer.

Code Location: src/sd/sd_message.cpp

IPv6 Endpoint Option

Requirement: Parse IPv6 Endpoint Option Type REQ_SD_067
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall recognize Option Type 0x06 as an IPv6 Endpoint option.

Rationale: IPv6 Endpoint provides service endpoint information.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv6 Address REQ_SD_068
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the IPv6 address from bytes 4-19 of the IPv6 Endpoint option (16 bytes).

Rationale: IPv6 address is needed for service communication.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv6 Port Number REQ_SD_069
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the port number from bytes 21-22 of the IPv6 Endpoint option in Big Endian byte order.

Rationale: Port number is needed for service communication.

Code Location: src/sd/sd_message.cpp

Requirement: Extract IPv6 Protocol REQ_SD_070
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall extract the L4 protocol from byte 20 of the IPv6 Endpoint option (UDP=0x11, TCP=0x06).

Rationale: Protocol type determines transport layer.

Code Location: src/sd/sd_message.cpp

Configuration Option

Requirement: Parse Configuration Option Type REQ_SD_071
status: implemented
priority: medium
satisfies: feat_req_someipsd_1163

The software shall recognize Option Type 0x01 as a Configuration option.

Rationale: Configuration option provides additional service parameters.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Configuration String REQ_SD_072
status: implemented
priority: medium
satisfies: feat_req_someipsd_1163

The software shall extract the configuration string from the Configuration option payload.

Rationale: Configuration data for service parameters.

Code Location: src/sd/sd_message.cpp

Multicast Endpoint Options

Requirement: Parse IPv4 Multicast Option Type REQ_SD_073
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall recognize Option Type 0x14 as an IPv4 Multicast Endpoint option.

Rationale: Multicast endpoint for event distribution.

Code Location: src/sd/sd_message.cpp

Requirement: Parse IPv6 Multicast Option Type REQ_SD_074
status: implemented
priority: high
satisfies: feat_req_someipsd_1112

The software shall recognize Option Type 0x16 as an IPv6 Multicast Endpoint option.

Rationale: Multicast endpoint for event distribution.

Code Location: src/sd/sd_message.cpp

Option Index References

Requirement: Parse First Option Index REQ_SD_075
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the First Option Index (1st options run) from byte 1 of each SD entry.

Rationale: Links entry to its endpoint options.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Second Option Index REQ_SD_076
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the Second Option Index (2nd options run) from byte 2 of each SD entry.

Rationale: Links entry to additional endpoint options.

Code Location: src/sd/sd_message.cpp

Requirement: Parse Option Counts REQ_SD_077
status: implemented
priority: high
satisfies: feat_req_someipsd_625

The software shall parse the option counts (number of options in each run) from byte 3 of each SD entry.

Rationale: Determines how many options to read for each run.

Code Location: src/sd/sd_message.cpp

Options Error Handling

Requirement: Error - Invalid Option Type REQ_SD_061_E01
status: implemented
priority: medium

The software shall skip options with unknown Option Type values and log a warning, continuing to process remaining options.

Rationale: Forward compatibility with new option types.

Error Handling: Log warning and skip option.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Truncated Option REQ_SD_062_E01
status: implemented
priority: high

The software shall return an error when an option would extend beyond the declared Options Length boundary.

Rationale: Prevents buffer overread.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Invalid Options Length REQ_SD_060_E01
status: implemented
priority: high

The software shall return an error when the Options Length field exceeds the remaining SD payload size.

Rationale: Prevents buffer overread.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Invalid IP Address REQ_SD_064_E01
status: implemented
priority: medium

The software shall log a warning when an endpoint option contains an invalid IP address (0.0.0.0 or broadcast address).

Rationale: Invalid addresses may indicate configuration errors.

Error Handling: Log warning but process option.

Code Location: src/sd/sd_message.cpp

Requirement: Error - Option Index Out of Range REQ_SD_075_E01
status: implemented
priority: high

The software shall return an error when an entry’s option index refers to a non-existent option.

Rationale: Invalid option reference detection.

Error Handling: Return MALFORMED_MESSAGE error.

Code Location: src/sd/sd_message.cpp

Service State Machine

Requirement: Service Find State REQ_SD_080
status: implemented
priority: high
satisfies: feat_req_someipsd_632

The software shall transition a service to the Find state when an application requests to find a service.

Rationale: State machine for service discovery.

Code Location: src/sd/sd_client.cpp

Requirement: Send Find Service Message REQ_SD_081
status: implemented
priority: high
satisfies: feat_req_someipsd_632

The software shall generate and send a Find Service (Type 0) entry when in the Find state.

Rationale: Initiates service discovery.

Code Location: src/sd/sd_client.cpp

Requirement: Service Available State REQ_SD_082
status: implemented
priority: high
satisfies: feat_req_someipsd_632

The software shall transition a service to the Available state when a matching Offer Service entry is received.

Rationale: Service has been discovered.

Code Location: src/sd/sd_client.cpp

Requirement: Offer Service Generation REQ_SD_083
status: implemented
priority: high
satisfies: feat_req_someipsd_633

The software shall generate and send an Offer Service (Type 1) entry when a local service becomes available.

Rationale: Announces service availability.

Code Location: src/sd/sd_server.cpp

Requirement: Stop Offer Generation REQ_SD_084
status: implemented
priority: high
satisfies: feat_req_someipsd_634

The software shall generate and send an Offer Service entry with TTL=0 when a local service becomes unavailable.

Rationale: Announces service unavailability.

Code Location: src/sd/sd_server.cpp

Subscription Management

Requirement: Subscribe Eventgroup Request REQ_SD_090
status: implemented
priority: high
satisfies: feat_req_someipsd_629

The software shall generate and send a Subscribe Eventgroup (Type 6) entry when an application requests to subscribe to an eventgroup.

Rationale: Initiates event subscription.

Code Location: src/sd/sd_client.cpp

Requirement: Subscribe Eventgroup Acknowledgment REQ_SD_091
status: implemented
priority: high
satisfies: feat_req_someipsd_630

The software shall generate and send a Subscribe Eventgroup Ack (Type 7) entry when a subscription request is accepted.

Rationale: Confirms subscription to client.

Code Location: src/sd/sd_server.cpp

Requirement: Subscribe Eventgroup Negative Acknowledgment REQ_SD_092
status: implemented
priority: high
satisfies: feat_req_someipsd_630

The software shall generate and send a Subscribe Eventgroup Ack entry with TTL=0 when a subscription request is rejected.

Rationale: Rejects subscription to client.

Code Location: src/sd/sd_server.cpp

Requirement: Subscription Renewal REQ_SD_093
status: implemented
priority: high
satisfies: feat_req_someipsd_748

The software shall automatically renew subscriptions by sending a new Subscribe Eventgroup entry before the subscription TTL expires.

Rationale: Maintains continuous event subscription.

Code Location: src/sd/sd_client.cpp

Requirement: Stop Subscribe Generation REQ_SD_094
status: implemented
priority: high
satisfies: feat_req_someipsd_629

The software shall generate and send a Subscribe Eventgroup entry with TTL=0 when an application requests to unsubscribe.

Rationale: Terminates event subscription.

Code Location: src/sd/sd_client.cpp

Timing and Repetition

Requirement: Initial Offer Delay REQ_SD_100
status: implemented
priority: medium
satisfies: feat_req_someipsd_425

The software shall wait for a configurable initial delay before sending the first Offer Service message after startup.

Rationale: Allows network to stabilize.

Code Location: src/sd/sd_server.cpp

Requirement: Offer Repetition REQ_SD_101
status: implemented
priority: medium
satisfies: feat_req_someipsd_425

The software shall repeat Offer Service messages with exponentially increasing intervals during the repetition phase.

Rationale: Ensures discovery while reducing network traffic.

Code Location: src/sd/sd_server.cpp

Requirement: Cyclic Offer REQ_SD_102
status: implemented
priority: medium
satisfies: feat_req_someipsd_425

The software shall send Offer Service messages at a configurable cyclic interval during the main phase.

Rationale: Periodic refresh of service availability.

Code Location: src/sd/sd_server.cpp

Requirement: Find Repetition REQ_SD_103
status: implemented
priority: medium
satisfies: feat_req_someipsd_632

The software shall repeat Find Service messages with increasing intervals until the service is found or maximum attempts reached.

Rationale: Persistent service discovery.

Code Location: src/sd/sd_client.cpp

SD Communication Phases

Requirement: SD Initial Wait Phase REQ_SD_110
status: implemented
priority: high
satisfies: feat_req_someipsd_63, feat_req_someipsd_64, feat_req_someipsd_65, feat_req_someipsd_773

The software shall implement the Initial Wait Phase where SD messages are delayed by a configurable random time between INITIAL_DELAY_MIN and INITIAL_DELAY_MAX before the first message is sent.

Rationale: Initial wait phase prevents network storms at startup.

Code Location: src/sd/sd_server.cpp (start_offer_timer, initial_delay), include/sd/sd_types.h (SdConfig)

Requirement: SD Repetition Phase REQ_SD_111
status: implemented
priority: high
satisfies: feat_req_someipsd_67, feat_req_someipsd_73, feat_req_someipsd_76, feat_req_someipsd_867

The software shall implement the Repetition Phase where SD messages are sent with exponentially increasing intervals (base delay times 2^repetition) for a configurable number of repetitions.

Rationale: Exponential backoff during repetition reduces collision probability.

Code Location: src/sd/sd_server.cpp (offer timer repetition logic)

Requirement: SD Main Phase REQ_SD_112
status: implemented
priority: high
satisfies: feat_req_someipsd_79, feat_req_someipsd_80, feat_req_someipsd_81, feat_req_someipsd_425, feat_req_someipsd_866

The software shall implement the Main Phase where SD messages are sent at a configurable cyclic interval (CYCLIC_OFFER_DELAY).

Rationale: Stable main phase rate provides predictable service availability announcements.

Code Location: src/sd/sd_server.cpp (main phase stable offer)

Requirement: SD Shutdown Behavior REQ_SD_113
status: implemented
priority: high
satisfies: feat_req_someipsd_820, feat_req_someipsd_821, feat_req_someipsd_830

The software shall send StopOffer entries with TTL=0 for all offered services during shutdown.

Rationale: Explicit stop-offer on shutdown enables immediate cleanup of cached service state.

Code Location: src/sd/sd_server.cpp (shutdown, send_stop_offer_messages)

SD Entry Processing

Requirement: FindService Entry Processing REQ_SD_114
status: implemented
priority: high
satisfies: feat_req_someipsd_238, feat_req_someipsd_239, feat_req_someipsd_626, feat_req_someipsd_632

The software shall process FindService entries (Type 0) by responding with OfferService entries for matching services. A FindService with Service ID 0xFFFF and Instance ID 0xFFFF shall match all services.

Rationale: FindService enables on-demand service discovery.

Code Location: src/sd/sd_client.cpp (find_service), src/sd/sd_server.cpp (handle_find_service)

Requirement: OfferService Entry Processing REQ_SD_115
status: implemented
priority: high
satisfies: feat_req_someipsd_252, feat_req_someipsd_253, feat_req_someipsd_633

The software shall process OfferService entries (Type 1) by storing the service endpoint information and notifying subscribed clients of service availability.

Rationale: OfferService proactively announces service availability.

Code Location: src/sd/sd_server.cpp (offer_service), src/sd/sd_client.cpp (process_offer_entry)

Requirement: StopOfferService Entry Processing REQ_SD_116
status: implemented
priority: high
satisfies: feat_req_someipsd_634, feat_req_someipsd_681

The software shall process StopOfferService entries (Type 1 with TTL=0) by removing the service from the known services list and notifying clients of service unavailability.

Rationale: Subscription management enables selective event delivery.

Code Location: src/sd/sd_client.cpp (subscribe_eventgroup), src/sd/sd_server.cpp (handle_eventgroup_subscription_request)

Requirement: SubscribeEventgroup Entry Processing REQ_SD_117
status: implemented
priority: high
satisfies: feat_req_someipsd_321, feat_req_someipsd_322, feat_req_someipsd_629

The software shall process SubscribeEventgroup entries (Type 6) by validating the subscription and responding with an Ack or Nack.

Rationale: ACK/NACK provides explicit feedback to subscribers.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription, acknowledge=true/false)

Requirement: StopSubscribeEventgroup Processing REQ_SD_118
status: implemented
priority: high
satisfies: feat_req_someipsd_433, feat_req_someipsd_629

The software shall process StopSubscribeEventgroup entries (Type 6 with TTL=0) by removing the subscription.

Rationale: NACK enables the server to reject invalid subscriptions.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription, NACK response)

Requirement: SubscribeEventgroupAck Processing REQ_SD_119
status: implemented
priority: high
satisfies: feat_req_someipsd_613, feat_req_someipsd_614, feat_req_someipsd_630

The software shall process SubscribeEventgroupAck entries (Type 7 with TTL>0) by activating event reception for the subscribed eventgroup.

Rationale: Entry type dispatch enables parallel processing of mixed SD messages.

Code Location: src/sd/sd_server.cpp (process_sd_entries, entry type dispatch)

Requirement: SubscribeEventgroupNack Processing REQ_SD_120
status: implemented
priority: high
satisfies: feat_req_someipsd_618, feat_req_someipsd_630

The software shall process SubscribeEventgroupNack entries (Type 7 with TTL=0) by marking the subscription as rejected.

Rationale: Options provide flexible endpoint and configuration metadata.

Code Location: src/sd/sd_message.cpp (SdOption, IPv4EndpointOption, IPv4MulticastOption)

SD Option Handling

Requirement: Load Balancing Option REQ_SD_121
status: implemented
priority: medium
satisfies: feat_req_someipsd_145, feat_req_someipsd_174, feat_req_someipsd_175

The software shall support the Load Balancing Option (Type 0x02) containing priority and weight fields for load distribution.

Rationale: Load balancing distributes traffic across equivalent service instances.

Code Location: include/sd/sd_types.h (OptionType::LOAD_BALANCING)

Requirement: IPv4 SD Endpoint Option REQ_SD_122
status: implemented
priority: medium
satisfies: feat_req_someipsd_1081, feat_req_someipsd_1086

The software shall support the IPv4 SD Endpoint Option (Type 0x24) for specifying the SD communication endpoint.

Rationale: IPv4 endpoint options carry the transport address for service communication.

Code Location: src/sd/sd_message.cpp (IPv4EndpointOption::serialize/deserialize)

Requirement: IPv6 SD Endpoint Option REQ_SD_123
status: implemented
priority: medium
satisfies: feat_req_someipsd_1135

The software shall support the IPv6 SD Endpoint Option (Type 0x26) for specifying the SD communication endpoint.

Rationale: Multicast options specify the group address for multicast event delivery.

Code Location: src/sd/sd_message.cpp (IPv4MulticastOption::serialize/deserialize)

Requirement: Option Run Referencing REQ_SD_124
status: implemented
priority: high
satisfies: feat_req_someipsd_335, feat_req_someipsd_336, feat_req_someipsd_341

The software shall support referencing options from entries using option index and run length fields.

Rationale: Configuration options carry key-value service metadata.

Code Location: include/sd/sd_types.h (OptionType::CONFIGURATION)

Requirement: Handling Missing Options REQ_SD_125
status: implemented
priority: high
satisfies: feat_req_someipsd_1142

The software shall handle missing mandatory options by rejecting the entry that references them.

Rationale: State machines ensure correct SD behavior through defined phase transitions.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: Handling Redundant Options REQ_SD_126
status: implemented
priority: medium
satisfies: feat_req_someipsd_1143, feat_req_someipsd_1144, feat_req_someipsd_1085

The software shall handle redundant (duplicate) options gracefully by using the first valid option.

Rationale: Server state machine governs offer/stop-offer lifecycle.

Code Location: src/sd/sd_server.cpp (offer/stop-offer flow)

Requirement: Handling Conflicting Options REQ_SD_127
status: implemented
priority: high
satisfies: feat_req_someipsd_1145, feat_req_someipsd_1146

The software shall handle conflicting options by rejecting the entry containing the conflicting options.

Rationale: Client state machine governs find/subscribe lifecycle.

Code Location: src/sd/sd_client.cpp (find_service, subscribe_eventgroup flow)

SD State Machines

Requirement: Server Service State Machine REQ_SD_130
status: implemented
priority: high
satisfies: feat_req_someipsd_627, feat_req_someipsd_628, feat_req_someipsd_629

The software shall implement the server service state machine with states: Down, InitialWait, Repetition, and Main. Transitions shall follow the specification state machine.

Rationale: Client endpoint extraction from subscription determines event delivery target.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription_request, client_endpoint extraction)

Requirement: Client Service State Machine REQ_SD_131
status: implemented
priority: high
satisfies: feat_req_someipsd_627, feat_req_someipsd_628, feat_req_someipsd_630

The software shall implement the client service state machine with states: Down, InitialWait, Repetition, Main, and Stopped. Transitions shall follow the specification state machine.

Rationale: Error reporting via SdResult enables application-level error handling.

Code Location: include/sd/sd_types.h (SdResult), src/sd/sd_server.cpp

Requirement: Eventgroup Subscription State Machine REQ_SD_132
status: implemented
priority: high
satisfies: feat_req_someipsd_632, feat_req_someipsd_633, feat_req_someipsd_634

The software shall implement the eventgroup subscription state machine for managing subscription lifecycle.

Rationale: Serialization/deserialization enables SD message exchange over the network.

Code Location: src/sd/sd_message.cpp (SdMessage::serialize/deserialize)

SD Endpoint Handling

Requirement: Service Endpoint Association REQ_SD_140
status: implemented
priority: high
satisfies: feat_req_someipsd_810, feat_req_someipsd_815

The software shall associate offered services with their transport endpoints (IP address, port, protocol) from the Endpoint Options.

Rationale: Per-instance offers allow fine-grained service instance management.

Code Location: src/sd/sd_server.cpp (offer_service per instance)

Requirement: Multicast Endpoint Association REQ_SD_141
status: implemented
priority: high
satisfies: feat_req_someipsd_722, feat_req_someipsd_723

The software shall associate subscribed eventgroups with their multicast endpoints from the Multicast Options.

Rationale: Multicast endpoint association enables multicast event delivery per eventgroup.

Code Location: src/sd/sd_server.cpp (start_offer_timer, initial_delay), include/sd/sd_types.h (SdConfig)

Requirement: Initial Event Sending REQ_SD_142
status: implemented
priority: high
satisfies: feat_req_someipsd_789, feat_req_someipsd_833

The software shall send initial events of fields via unicast to newly subscribed clients.

Rationale: Unicast initial events ensure new subscribers receive current field values immediately.

Code Location: src/sd/sd_server.cpp (offer timer repetition logic)

SD Error Handling

Requirement: SD Malformed Message Handling REQ_SD_150
status: implemented
priority: high
satisfies: feat_req_someipsd_900, feat_req_someipsd_1220

The software shall silently discard malformed SD messages that cannot be parsed.

Rationale: Configurable timing adapts SD behavior to network characteristics.

Code Location: src/sd/sd_server.cpp, include/sd/sd_types.h (SdConfig)

Requirement: SD Invalid Entry Handling REQ_SD_151
status: implemented
priority: high
satisfies: feat_req_someipsd_1141, feat_req_someipsd_1233

The software shall skip invalid entries within a valid SD message and continue processing remaining entries.

Rationale: Skipping invalid entries prevents one malformed entry from disrupting an entire SD message.

Code Location: src/sd/sd_server.cpp (main phase stable offer)

Requirement: SD TTL Expiry Handling REQ_SD_152
status: implemented
priority: high
satisfies: feat_req_someipsd_681, feat_req_someipsd_682, feat_req_someipsd_748

The software shall remove services and subscriptions when their TTL expires without renewal.

Rationale: TTL-based expiry ensures stale services and subscriptions are cleaned up automatically.

Code Location: src/sd/sd_server.cpp (shutdown, send_stop_offer_messages)

SD Multicast Communication

Requirement: SD Multicast Transmission REQ_SD_160
status: implemented
priority: high
satisfies: feat_req_someipsd_100, feat_req_someipsd_105

The software shall use multicast for SD OfferService and FindService messages by default.

Rationale: Standardized entry format enables interoperability between SOME/IP implementations.

Code Location: src/sd/sd_message.cpp (SdEntry, ServiceEntry)

Requirement: SD Unicast Response REQ_SD_161
status: implemented
priority: high
satisfies: feat_req_someipsd_90, feat_req_someipsd_91, feat_req_someipsd_826

The software shall send unicast SD responses when the Unicast Flag is set in the requesting message.

Rationale: Unicast responses reduce multicast traffic when the requester supports unicast.

Code Location: src/sd/sd_client.cpp (find_service), src/sd/sd_server.cpp (handle_find_service)

SD Session Handling

Requirement: SD Session ID Management REQ_SD_170
status: implemented
priority: high
satisfies: feat_req_someipsd_150, feat_req_someipsd_97

The software shall increment the Session ID for each SD message sent and use it for reboot detection.

Rationale: End-to-end discovery workflow validates the complete SD protocol implementation.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Reboot Detection Response REQ_SD_171
status: implemented
priority: high
satisfies: feat_req_someipsd_764, feat_req_someipsd_765, feat_req_someipsd_872

Upon detecting a remote reboot, the software shall clear all cached service and subscription state for the rebooted endpoint.

Rationale: Reboot detection prevents communication with stale cached endpoints.

Code Location: src/sd/sd_server.cpp (offer_service), src/sd/sd_client.cpp (process_offer_entry)

SD Minor Version Handling

Requirement: Minor Version Matching REQ_SD_180
status: implemented
priority: medium
satisfies: feat_req_someipsd_238, feat_req_someipsd_736

The software shall support Minor Version matching in FindService entries. Minor Version 0xFFFFFFFF shall match any minor version.

Rationale: Session handling enables SD message deduplication and ordering.

Code Location: include/sd/sd_types.h (SdConfig::initial_delay, repetition_base)

SD General Message Format

Requirement: SD Message Structure - Flags and Reserved REQ_SD_200a
status: implemented
priority: medium
satisfies: feat_req_someipsd_38, feat_req_someipsd_39, feat_req_someipsd_40

The software shall parse and construct SD message header with Flags (1 byte) and Reserved (3 bytes) fields according to SOME/IP-SD format.

Rationale: Flags and reserved bytes are required by the AUTOSAR SOME/IP-SD specification for message-level metadata.

Code Location: src/sd/sd_message.cpp (SdMessage structure)

Requirement: SD Entries Array Format REQ_SD_200b
status: implemented
priority: medium
satisfies: feat_req_someipsd_41, feat_req_someipsd_42, feat_req_someipsd_44

The software shall parse and construct the SD Entries Array with length field and entry layout according to SOME/IP-SD format.

Rationale: The entries array carries service offers, finds, and subscriptions; format compliance ensures interoperability.

Code Location: src/sd/sd_message.cpp (SdMessage structure)

Requirement: SD Options Array Format REQ_SD_200c
status: implemented
priority: medium
satisfies: feat_req_someipsd_1, feat_req_someipsd_2, feat_req_someipsd_13

The software shall parse and construct the SD Options Array with length field and option layout (IPv4, IPv6, etc.) according to SOME/IP-SD format.

Rationale: Options provide endpoint and configuration data; format compliance ensures correct address resolution.

Code Location: src/sd/sd_message.cpp (SdMessage structure)

Requirement: SD Transport Requirements REQ_SD_201
status: implemented
priority: medium
satisfies: feat_req_someipsd_46, feat_req_someipsd_47

The software shall transport SD messages over UDP using the configured SD port (default 30490) with multicast for general announcements.

Rationale: Header fields provide message-level metadata (flags, reserved bytes).

Code Location: src/sd/sd_message.cpp (flags, reserved bytes)

Requirement: SD ECU Internal Interface REQ_SD_202
status: implemented
priority: medium
satisfies: feat_req_someipsd_22, feat_req_someipsd_23, feat_req_someipsd_24, feat_req_someipsd_25, feat_req_someipsd_26, feat_req_someipsd_27, feat_req_someipsd_16, feat_req_someipsd_17, feat_req_someipsd_18

The software shall provide an ECU-internal interface for applications to register services, request services, subscribe to eventgroups, and receive service availability notifications.

Rationale: The entries array carries service and subscription announcements.

Code Location: src/sd/sd_message.cpp (entries_array serialization)

SD Header Details

Requirement: SD Header Field Parsing REQ_SD_210
status: implemented
priority: medium
satisfies: feat_req_someipsd_59, feat_req_someipsd_61, feat_req_someipsd_62

The software shall parse and validate the complete SD header including Message ID (0xFFFF8100), Length, Request ID, Protocol Version, Interface Version, Message Type, and Return Code.

Rationale: FindService entries trigger service discovery responses from servers.

Code Location: src/sd/sd_client.cpp (find_service entry construction)

Requirement: SD Session ID Handling REQ_SD_211
status: implemented
priority: medium
satisfies: feat_req_someipsd_96, feat_req_someipsd_94, feat_req_someipsd_863

The software shall maintain separate Session IDs for multicast and unicast SD messages. Session IDs shall be incremented for each message sent.

Rationale: OfferService entries announce available service instances.

Code Location: src/sd/sd_server.cpp (offer_service entry construction)

Requirement: SD Reboot Flag Management REQ_SD_212
status: implemented
priority: medium
satisfies: feat_req_someipsd_83, feat_req_someipsd_84, feat_req_someipsd_85, feat_req_someipsd_87, feat_req_someipsd_89

The software shall manage the Reboot Flag in SD messages. The flag shall be set after reboot until the Session ID wraps around. TCP connections shall be reset on reboot detection.

Rationale: SubscribeEventgroup entries register client interest in events.

Code Location: src/sd/sd_client.cpp (subscribe_eventgroup entry construction)

SD Entry Format Details

Requirement: SD Entry Common Fields REQ_SD_220
status: implemented
priority: medium
satisfies: feat_req_someipsd_122, feat_req_someipsd_126, feat_req_someipsd_127, feat_req_someipsd_128, feat_req_someipsd_129, feat_req_someipsd_212, feat_req_someipsd_214

The software shall parse common entry fields: Type (1 byte), Index First/Second Options Run (1 byte each), Number of Options (1 byte), Service ID (2 bytes), Instance ID (2 bytes), Major Version/TTL (4 bytes combined), and type-specific fields (4 bytes).

Rationale: Configurable multicast enables deployment-specific network topology.

Code Location: src/sd/sd_server.cpp (multicast_port config), include/sd/sd_types.h

Requirement: SD Service Entry Format REQ_SD_221
status: implemented
priority: medium
satisfies: feat_req_someipsd_133, feat_req_someipsd_137, feat_req_someipsd_138, feat_req_someipsd_139, feat_req_someipsd_140

The software shall parse service entries (Type 0 FindService, Type 1 OfferService) with Minor Version in the type-specific field. Service entries are 16 bytes each.

Rationale: Multicast for discovery, unicast for responses optimizes bandwidth.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Eventgroup Entry Format REQ_SD_222
status: implemented
priority: medium
satisfies: feat_req_someipsd_149, feat_req_someipsd_151, feat_req_someipsd_152, feat_req_someipsd_157, feat_req_someipsd_158

The software shall parse eventgroup entries (Type 6 Subscribe, Type 7 SubscribeAck) with Reserved, Initial Data Flag, Counter, and Eventgroup ID in the type-specific field.

Rationale: TTL-based subscriptions enable automatic cleanup without explicit unsubscribe.

Code Location: src/sd/sd_server.cpp (subscription TTL handling)

Requirement: SD Entry Multiple Entries per Message REQ_SD_223
status: implemented
priority: medium
satisfies: feat_req_someipsd_159, feat_req_someipsd_160, feat_req_someipsd_161, feat_req_someipsd_162, feat_req_someipsd_163, feat_req_someipsd_164

The software shall support multiple entries per SD message, combining entries to reduce the number of SD messages sent.

Rationale: TTL-based service availability prevents stale service entries.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp (TTL management)

SD Option Format Details

Requirement: SD Configuration Option REQ_SD_230
status: implemented
priority: medium
satisfies: feat_req_someipsd_182, feat_req_someipsd_183, feat_req_someipsd_184

The software shall parse Configuration Options (Type 0x01) containing key-value configuration strings for service instances.

Rationale: Endpoint extraction enables the server to know where to send events.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription_request)

Requirement: SD Load Balancing Option Format REQ_SD_231
status: implemented
priority: medium
satisfies: feat_req_someipsd_146, feat_req_someipsd_770

The software shall parse Load Balancing Options (Type 0x02) containing Priority and Weight fields for server selection.

Rationale: Server address resolution enables the client to know where to send requests.

Code Location: src/sd/sd_client.cpp (process_offer_entry endpoint extraction)

Requirement: SD IPv4 Endpoint Option Format REQ_SD_232
status: implemented
priority: medium
satisfies: feat_req_someipsd_197, feat_req_someipsd_199, feat_req_someipsd_200, feat_req_someipsd_201

The software shall parse IPv4 Endpoint Options (Type 0x04) containing IPv4 address (4 bytes), reserved byte, protocol (1 byte: 0x06=TCP, 0x11=UDP), and port number (2 bytes).

Rationale: Correct IPv4 option format ensures interoperability.

Code Location: src/sd/sd_client.cpp (subscribe_eventgroup), src/sd/sd_server.cpp (handle_eventgroup_subscription_request)

Requirement: SD IPv6 Endpoint Option Format REQ_SD_233
status: implemented
priority: medium
satisfies: feat_req_someipsd_203, feat_req_someipsd_204

The software shall parse IPv6 Endpoint Options (Type 0x06) containing IPv6 address (16 bytes), reserved byte, protocol, and port number.

Rationale: IPv6 support enables SD in IPv6 networks.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription, acknowledge=true/false)

Requirement: SD IPv4 Multicast Option Format REQ_SD_234
status: implemented
priority: medium
satisfies: feat_req_someipsd_724, feat_req_someipsd_725, feat_req_someipsd_733, feat_req_someipsd_749

The software shall parse IPv4 Multicast Options (Type 0x14) containing multicast IPv4 address, protocol (UDP only), and port number.

Rationale: IPv4 multicast option format enables multicast event delivery.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription, NACK response)

Requirement: SD IPv6 Multicast Option Format REQ_SD_235
status: implemented
priority: medium
satisfies: feat_req_someipsd_737, feat_req_someipsd_738, feat_req_someipsd_739, feat_req_someipsd_750

The software shall parse IPv6 Multicast Options (Type 0x16) containing multicast IPv6 address, protocol (UDP only), and port number.

Rationale: IPv6 multicast support enables SD in IPv6 networks.

Code Location: src/sd/sd_server.cpp (process_sd_entries, entry type dispatch)

Requirement: SD IPv4 SD Endpoint Option Format REQ_SD_236
status: implemented
priority: medium
satisfies: feat_req_someipsd_1080, feat_req_someipsd_1082, feat_req_someipsd_1083, feat_req_someipsd_1084, feat_req_someipsd_1087

The software shall parse IPv4 SD Endpoint Options (Type 0x24) containing the SD communication endpoint. This option is not referenced by entries.

Rationale: SD endpoint option carries the SD communication endpoint independently of entries.

Code Location: src/sd/sd_message.cpp (SdOption, IPv4EndpointOption, IPv4MulticastOption)

SD Option Referencing Details

Requirement: SD Option Index and Run Length REQ_SD_240
status: implemented
priority: medium
satisfies: feat_req_someipsd_332, feat_req_someipsd_333, feat_req_someipsd_342, feat_req_someipsd_343

The software shall reference options from entries using the First and Second Option Index and their respective run lengths. Options are referenced as contiguous runs.

Rationale: Service registration makes services discoverable via SD.

Code Location: src/sd/sd_server.cpp (offer_service, service registration)

Requirement: SD Option Run Processing REQ_SD_241
status: implemented
priority: medium
satisfies: feat_req_someipsd_346, feat_req_someipsd_347, feat_req_someipsd_348, feat_req_someipsd_351

The software shall process option runs by iterating from the starting index for the given count. Empty runs (count=0) shall be valid. Unknown option types shall be skipped.

Rationale: Service discovery enables clients to find available services dynamically.

Code Location: src/sd/sd_client.cpp (find_service, process_offer_entry)

Requirement: SD Option Validation REQ_SD_242
status: implemented
priority: medium
satisfies: feat_req_someipsd_1095, feat_req_someipsd_1097, feat_req_someipsd_1098, feat_req_someipsd_1099, feat_req_someipsd_1100

The software shall validate options for correct length, type, and content. Invalid options shall cause the referencing entry to be rejected.

Rationale: Option validation prevents processing of malformed endpoint data.

Code Location: include/sd/sd_types.h (OptionType::LOAD_BALANCING)

Requirement: SD Endpoint Option Processing REQ_SD_243
status: implemented
priority: medium
satisfies: feat_req_someipsd_1101, feat_req_someipsd_1102, feat_req_someipsd_1103

The software shall process Endpoint Options to determine the transport endpoint (IP, port, protocol) for a service instance.

Rationale: Endpoint processing resolves abstract SD entries to concrete transport addresses.

Code Location: src/sd/sd_message.cpp (IPv4EndpointOption::serialize/deserialize)

SD FindService Message Details

Requirement: SD FindService Message Construction REQ_SD_250
status: implemented
priority: medium
satisfies: feat_req_someipsd_217, feat_req_someipsd_218, feat_req_someipsd_219, feat_req_someipsd_220

The software shall construct FindService messages with the appropriate Service ID, Instance ID (0xFFFF for all), Major Version (0xFF for any), and Minor Version (0xFFFFFFFF for any).

Rationale: Clean shutdown prevents clients from sending to unavailable services.

Code Location: src/sd/sd_server.cpp (shutdown, send_stop_offer_messages)

Requirement: SD FindService Response Behavior REQ_SD_251
status: implemented
priority: medium
satisfies: feat_req_someipsd_224, feat_req_someipsd_225, feat_req_someipsd_227, feat_req_someipsd_766, feat_req_someipsd_767

The software shall respond to FindService with OfferService entries for matching services. Responses shall use configurable delay (REQUEST_RESPONSE_DELAY).

Rationale: Reboot recovery ensures subscriptions are re-established after endpoint restart.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

SD OfferService Message Details

Requirement: SD OfferService Message Construction REQ_SD_260
status: implemented
priority: medium
satisfies: feat_req_someipsd_221, feat_req_someipsd_233, feat_req_someipsd_235, feat_req_someipsd_236, feat_req_someipsd_237

The software shall construct OfferService messages with Service ID, Instance ID, Major/Minor Version, TTL, and Endpoint Options.

Rationale: Non-SOME/IP support enables interoperability with other automotive protocols.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD StopOfferService Construction REQ_SD_261
status: implemented
priority: medium
satisfies: feat_req_someipsd_256, feat_req_someipsd_261, feat_req_someipsd_262

The software shall construct StopOfferService messages with TTL=0 when a service instance is stopped or going down.

Rationale: StopOfferService with TTL=0 signals immediate service unavailability.

Code Location: src/sd/sd_message.cpp (IPv4MulticastOption::serialize/deserialize)

SD SubscribeEventgroup Message Details

Requirement: SD SubscribeEventgroup Construction REQ_SD_270
status: implemented
priority: medium
satisfies: feat_req_someipsd_230, feat_req_someipsd_429, feat_req_someipsd_430, feat_req_someipsd_431, feat_req_someipsd_432, feat_req_someipsd_428

The software shall construct SubscribeEventgroup messages with Service ID, Instance ID, Eventgroup ID, TTL, and client Endpoint Options. Subscriptions shall be triggered by OfferService reception.

Rationale: Open access simplifies deployment without per-client authorization at SD level.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Subscription Lifecycle REQ_SD_271
status: implemented
priority: medium
satisfies: feat_req_someipsd_435, feat_req_someipsd_436, feat_req_someipsd_437, feat_req_someipsd_439, feat_req_someipsd_444, feat_req_someipsd_445

The software shall manage subscription lifecycle: subscribe on service availability, renew before TTL expiry, unsubscribe on shutdown, and re-subscribe after timeout.

Rationale: Subscription lifecycle management ensures correct subscribe/renew/unsubscribe behavior.

Code Location: include/sd/sd_types.h (OptionType::CONFIGURATION)

Requirement: SD SubscribeEventgroupAck Construction REQ_SD_272
status: implemented
priority: medium
satisfies: feat_req_someipsd_612, feat_req_someipsd_613, feat_req_someipsd_614, feat_req_someipsd_619, feat_req_someipsd_844

The software shall construct SubscribeEventgroupAck messages to confirm accepted subscriptions. Ack shall include Multicast Options if the eventgroup uses multicast.

Rationale: Multicast options in ACKs direct the client to the correct multicast group.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD SubscribeEventgroupNack Construction REQ_SD_273
status: implemented
priority: medium
satisfies: feat_req_someipsd_617, feat_req_someipsd_869, feat_req_someipsd_870

The software shall construct SubscribeEventgroupNack messages with TTL=0 to reject subscriptions. Clients shall handle Nack by checking TCP connections.

Rationale: NACK with TTL=0 clearly signals subscription rejection.

Code Location: src/sd/sd_server.cpp (offer/stop-offer flow)

Requirement: SD StopSubscribeEventgroup Construction REQ_SD_274
status: implemented
priority: medium
satisfies: feat_req_someipsd_433, feat_req_someipsd_440, feat_req_someipsd_441, feat_req_someipsd_442

The software shall construct StopSubscribeEventgroup messages with TTL=0 when unsubscribing from an eventgroup.

Rationale: StopSubscribe with TTL=0 signals immediate unsubscription.

Code Location: src/sd/sd_client.cpp (find_service, subscribe_eventgroup flow)

SD Communication Behavior Details

Requirement: SD Timing Configuration REQ_SD_280
status: implemented
priority: medium
satisfies: feat_req_someipsd_66, feat_req_someipsd_68, feat_req_someipsd_72

The software shall support configurable SD timing parameters: INITIAL_DELAY_MIN/MAX, REPETITIONS_BASE_DELAY, REPETITIONS_MAX, and CYCLIC_OFFER_DELAY.

Rationale: Configurable timing adapts SD phases to network characteristics.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription_request, client_endpoint extraction)

Requirement: SD Phase Transitions REQ_SD_281
status: implemented
priority: medium
satisfies: feat_req_someipsd_74, feat_req_someipsd_75, feat_req_someipsd_77, feat_req_someipsd_419, feat_req_someipsd_422

The software shall implement phase transitions: from Initial Wait to Repetition (after first send), from Repetition to Main (after REPETITIONS_MAX), and from any phase to Down (on stop/error).

Rationale: Phase transitions enforce the SD protocol state machine.

Code Location: include/sd/sd_types.h (SdResult), src/sd/sd_server.cpp

Requirement: SD Multicast Group Management REQ_SD_282
status: implemented
priority: medium
satisfies: feat_req_someipsd_101, feat_req_someipsd_102, feat_req_someipsd_103, feat_req_someipsd_104

The software shall join and leave multicast groups for SD communication based on service registration and subscription state.

Rationale: Dynamic multicast group management conserves network resources.

Code Location: src/sd/sd_message.cpp (SdMessage::serialize/deserialize)

Requirement: SD Response Delay Configuration REQ_SD_283
status: implemented
priority: medium
satisfies: feat_req_someipsd_106, feat_req_someipsd_107, feat_req_someipsd_109

The software shall apply configurable response delays (REQUEST_RESPONSE_DELAY) when responding to FindService messages to avoid network storms.

Rationale: Response delays prevent network storms from simultaneous SD responses.

Code Location: src/sd/sd_server.cpp (offer_service per instance)

SD Endpoint Handling Details

Requirement: SD Server Endpoint Registration REQ_SD_290
status: implemented
priority: medium
satisfies: feat_req_someipsd_806, feat_req_someipsd_807, feat_req_someipsd_808, feat_req_someipsd_809, feat_req_someipsd_811

The software shall register server endpoints (IP, port, protocol) for offered services and include them in OfferService options.

Rationale: Server endpoint registration enables clients to discover communication endpoints.

Code Location: src/sd/sd_server.cpp, include/sd/sd_types.h (SdConfig)

Requirement: SD Client Endpoint Resolution REQ_SD_291
status: implemented
priority: medium
satisfies: feat_req_someipsd_812, feat_req_someipsd_813, feat_req_someipsd_814, feat_req_someipsd_816

The software shall resolve client endpoints from SubscribeEventgroup options to determine where to send events and notifications.

Rationale: Client endpoint resolution enables the server to deliver events to subscribers.

Code Location: src/sd/sd_message.cpp (SdEntry, ServiceEntry)

Requirement: SD Multicast Endpoint Handling REQ_SD_292
status: implemented
priority: medium
satisfies: feat_req_someipsd_751, feat_req_someipsd_752, feat_req_someipsd_754, feat_req_someipsd_755, feat_req_someipsd_756, feat_req_someipsd_757, feat_req_someipsd_758

The software shall handle multicast endpoints for eventgroups, including joining multicast groups, sending initial events via unicast, and switching between unicast/multicast based on subscriber count.

Rationale: Multicast endpoint handling optimizes event delivery for groups with many subscribers.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Endpoint Validation REQ_SD_293
status: implemented
priority: medium
satisfies: feat_req_someipsd_1111, feat_req_someipsd_1113, feat_req_someipsd_1114, feat_req_someipsd_1169, feat_req_someipsd_1170, feat_req_someipsd_1171

The software shall validate endpoint options for correct format, valid IP addresses, and supported protocols.

Rationale: Endpoint validation prevents communication failures from malformed addresses.

Code Location: include/sd/sd_types.h (SdConfig::initial_delay, repetition_base)

SD Service Registration and Discovery

Requirement: SD Service Offer Processing REQ_SD_300
status: implemented
priority: medium
satisfies: feat_req_someipsd_762, feat_req_someipsd_763, feat_req_someipsd_828, feat_req_someipsd_829

The software shall process OfferService entries by updating the service registry with endpoint information and TTL.

Rationale: Initial events ensure newly subscribed clients have up-to-date state.

Code Location: src/sd/sd_server.cpp (subscription acknowledgment, initial events)

Requirement: SD Service State Tracking REQ_SD_301
status: implemented
priority: medium
satisfies: feat_req_someipsd_771, feat_req_someipsd_772, feat_req_someipsd_776, feat_req_someipsd_777, feat_req_someipsd_778

The software shall track service state (available, unavailable, timing out) and notify applications of state changes.

Rationale: Service state tracking enables applications to react to availability changes.

Code Location: src/sd/sd_message.cpp (SdMessage structure)

Requirement: SD Subscription State Tracking REQ_SD_302
status: implemented
priority: medium
satisfies: feat_req_someipsd_779, feat_req_someipsd_780, feat_req_someipsd_781, feat_req_someipsd_782, feat_req_someipsd_783

The software shall track subscription state (active, pending, rejected, expired) for each eventgroup.

Rationale: Subscription state tracking enables applications to know their subscription status.

Code Location: src/sd/sd_message.cpp (flags, reserved bytes)

Requirement: SD Service Registry Management REQ_SD_303
status: implemented
priority: medium
satisfies: feat_req_someipsd_784, feat_req_someipsd_785, feat_req_someipsd_786, feat_req_someipsd_787, feat_req_someipsd_788

The software shall maintain a service registry with service entries, supporting add, remove, update TTL, and lookup operations.

Rationale: The service registry provides a central lookup for available services.

Code Location: src/sd/sd_message.cpp (entries_array serialization)

SD Shutdown and Recovery

Requirement: SD Graceful Shutdown REQ_SD_310
status: implemented
priority: medium
satisfies: feat_req_someipsd_818, feat_req_someipsd_819, feat_req_someipsd_822, feat_req_someipsd_823, feat_req_someipsd_824

The software shall implement graceful shutdown by sending StopOfferService for all offered services and StopSubscribe for all active subscriptions.

Rationale: Mandatory features define the minimum required SD implementation.

Code Location: include/sd/sd_types.h, src/sd/sd_message.cpp

Requirement: SD Reboot Recovery REQ_SD_311
status: implemented
priority: medium
satisfies: feat_req_someipsd_871, feat_req_someipsd_793, feat_req_someipsd_794

The software shall recover from remote reboot by clearing cached services and re-subscribing to previously subscribed eventgroups.

Rationale: Reserved identifier handling at SD level ensures system integrity.

Code Location: src/sd/sd_client.cpp (find_service entry construction)

Requirement: SD Service Stop Handling REQ_SD_312
status: implemented
priority: medium
satisfies: feat_req_someipsd_831, feat_req_someipsd_832, feat_req_someipsd_834

The software shall handle service stop events by cleaning up subscriptions and notifying affected clients.

Rationale: Proper handling of reserved IDs prevents undefined behavior in SD processing.

Code Location: src/sd/sd_server.cpp (offer_service entry construction)

SD Non-SOME/IP Protocol Support

Requirement: SD Non-SOME/IP Service Announcement REQ_SD_320
status: implemented
priority: medium
satisfies: feat_req_someipsd_497, feat_req_someipsd_498, feat_req_someipsd_499, feat_req_someipsd_500, feat_req_someipsd_501, feat_req_someipsd_502, feat_req_someipsd_503

The software shall support announcing non-SOME/IP services using Service ID 0xFFFE with the appropriate configuration.

Rationale: Flag processing controls SD response addressing behavior.

Code Location: src/sd/sd_message.cpp (flags, session_id, reboot_flag)

SD Initial Event Handling

Requirement: SD Initial Event Sending REQ_SD_330
status: implemented
priority: medium
satisfies: feat_req_someipsd_833, feat_req_someipsd_1166, feat_req_someipsd_1167, feat_req_someipsd_1168

The software shall send initial events of fields via unicast to newly subscribed clients after sending SubscribeEventgroupAck.

Rationale: Version-aware subscription ensures clients receive compatible events.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Initial Event Requesting REQ_SD_331
status: implemented
priority: medium
satisfies: feat_req_someipsd_1191, feat_req_someipsd_1192, feat_req_someipsd_1193, feat_req_someipsd_946

The software shall request initial events after reboot or when no active subscription exists for the eventgroup.

Rationale: Version-aware workflows ensure client-server compatibility.

Code Location: src/sd/sd_client.cpp (subscribe_eventgroup entry construction)

SD Advanced Features

Requirement: SD Error Handling REQ_SD_340
status: implemented
priority: high
satisfies: feat_req_someipsd_1162, feat_req_someipsd_1164, feat_req_someipsd_1221, feat_req_someipsd_1227, feat_req_someipsd_1228

The software shall implement SD error handling by checking message headers, entry fields, and option validity. Invalid messages shall be silently discarded.

Rationale: Configurable parameters enable deployment-specific SD behavior tuning.

Code Location: include/sd/sd_types.h (SdConfig)

Requirement: SD Option Conflict Resolution REQ_SD_341
status: implemented
priority: medium
satisfies: feat_req_someipsd_1140, feat_req_someipsd_1147, feat_req_someipsd_1149

The software shall resolve option conflicts by using the first valid option and ignoring subsequent conflicting options.

Rationale: Phase timing configuration controls SD protocol behavior.

Code Location: src/sd/sd_server.cpp (multicast_port config), include/sd/sd_types.h

Requirement: SD Security Considerations REQ_SD_342
status: implemented
priority: medium
satisfies: feat_req_someipsd_1176, feat_req_someipsd_1177, feat_req_someipsd_1178, feat_req_someipsd_1179, feat_req_someipsd_1180, feat_req_someipsd_1182, feat_req_someipsd_1184

The software shall implement SD security measures including message validation, source address verification, and rate limiting.

Rationale: SD timing configuration enables adaptation to different network environments.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD IPv4 SD Endpoint Processing REQ_SD_343
status: implemented
priority: medium
satisfies: feat_req_someipsd_1151, feat_req_someipsd_1152, feat_req_someipsd_1153, feat_req_someipsd_1154, feat_req_someipsd_1155, feat_req_someipsd_1156

The software shall process IPv4 SD Endpoint Options when present, using them instead of the source IP/port for SD communication.

Rationale: TTL configuration controls service and subscription expiry timing.

Code Location: src/sd/sd_server.cpp (subscription TTL handling)

Requirement: SD Mandatory Feature Set REQ_SD_344
status: implemented
priority: medium
satisfies: feat_req_someipsd_1248, feat_req_someipsd_1249, feat_req_someipsd_1250, feat_req_someipsd_1251, feat_req_someipsd_1252, feat_req_someipsd_1253

The software shall implement the mandatory SD feature set including FindService, OfferService, SubscribeEventgroup, and their acknowledgments.

Rationale: Multicast configuration specifies the network parameters for SD communication.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp (TTL management)

Requirement: SD Unicast Flag Processing REQ_SD_345
status: implemented
priority: medium
satisfies: feat_req_someipsd_1187, feat_req_someipsd_1188

The software shall process the Unicast Flag in SD messages to determine the response transport (unicast vs multicast).

Rationale: SD port configuration ensures correct network resource allocation.

Code Location: src/sd/sd_server.cpp (handle_eventgroup_subscription_request)

Requirement: SD Service State Machine Details REQ_SD_346
status: implemented
priority: medium
satisfies: feat_req_someipsd_624, feat_req_someipsd_631, feat_req_someipsd_684, feat_req_someipsd_691

The software shall implement detailed service state machine behavior including proper handling of Find/Offer cycles and timer management.

Rationale: Port assignment rules prevent conflicts with reserved system ports.

Code Location: src/sd/sd_client.cpp (process_offer_entry endpoint extraction)

Requirement: SD Subscription Renewal REQ_SD_347
status: implemented
priority: medium
satisfies: feat_req_someipsd_839, feat_req_someipsd_840, feat_req_someipsd_841, feat_req_someipsd_842, feat_req_someipsd_843

The software shall implement the soft-state model where entries (services, subscriptions) expire unless refreshed. Subscription renewal shall occur before TTL expiry.

Rationale: Configurable ports enable deployment flexibility.

Code Location: src/sd/sd_server.cpp (offer_service, service registration)

Requirement: SD Publish/Subscribe Event Flow REQ_SD_348
status: implemented
priority: medium
satisfies: feat_req_someipsd_836, feat_req_someipsd_837, feat_req_someipsd_838, feat_req_someipsd_1239

The software shall implement the publish/subscribe event flow including link loss handling at both client and server sides.

Rationale: Consistent port usage ensures clients can reach services at expected endpoints.

Code Location: src/sd/sd_client.cpp (find_service, process_offer_entry)

Requirement: SD Duplicate Offer Handling REQ_SD_349
status: implemented
priority: medium
satisfies: feat_req_someipsd_844, feat_req_someipsd_848, feat_req_someipsd_849, feat_req_someipsd_850, feat_req_someipsd_851

The software shall handle duplicate OfferService messages by updating the existing entry rather than creating duplicates.

Rationale: Port validation prevents misconfiguration that could disrupt communication.

Code Location: src/sd/sd_server.cpp (shutdown, send_stop_offer_messages)

Requirement: SD Entry Aggregation REQ_SD_350
status: implemented
priority: medium
satisfies: feat_req_someipsd_852, feat_req_someipsd_853, feat_req_someipsd_854, feat_req_someipsd_855, feat_req_someipsd_856

The software shall aggregate multiple SD entries into single messages when possible to reduce network traffic.

Rationale: Reboot detection triggers re-subscription to restore event delivery.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Startup Behavior REQ_SD_351
status: implemented
priority: medium
satisfies: feat_req_someipsd_857, feat_req_someipsd_858, feat_req_someipsd_862, feat_req_someipsd_864

The software shall implement the SD startup behavior with three phases (Initial Wait, Repetition, Main) as per the specification.

Rationale: Delayed startup prevents SD storms when multiple ECUs boot simultaneously.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Advanced Reboot Detection REQ_SD_352
status: implemented
priority: medium
satisfies: feat_req_someipsd_796, feat_req_someipsd_797, feat_req_someipsd_798

The software shall implement advanced reboot detection using Session ID regression and Reboot Flag analysis.

Rationale: Advanced reboot detection covers complex restart scenarios.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Service Timeout Handling REQ_SD_353
status: implemented
priority: medium
satisfies: feat_req_someipsd_790, feat_req_someipsd_791

The software shall handle service timeouts by removing expired services and notifying applications of unavailability.

Rationale: Service timeout handling cleans up services that stop offering without explicit StopOffer.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: SD Subscribe Multicast Handling REQ_SD_354
status: implemented
priority: medium
satisfies: feat_req_someipsd_747, feat_req_someipsd_1134, feat_req_someipsd_1136, feat_req_someipsd_1137

The software shall handle multicast in subscriptions including Multicast Option in SubscribeEventgroupAck and SubscribeEventgroupNack for conflicting multicast endpoints.

Rationale: Multicast subscription handling enables efficient event delivery to groups.

Code Location: src/sd/sd_server.cpp (subscription acknowledgment, initial events)

Requirement: SD Subscription Server State REQ_SD_355
status: implemented
priority: medium
satisfies: feat_req_someipsd_877, feat_req_someipsd_878, feat_req_someipsd_879

The software shall maintain server-side subscription state including client lists per eventgroup and proper cleanup on StopSubscribe.

Rationale: Per-client subscription state enables correct per-subscriber event delivery decisions.

Code Location: include/sd/sd_types.h, src/sd/sd_message.cpp

Requirement: SD Service Registration REQ_SD_356
status: implemented
priority: medium
satisfies: feat_req_someipsd_1194, feat_req_someipsd_1195, feat_req_someipsd_1262, feat_req_someipsd_1297

The software shall support service registration and deregistration with proper cleanup of associated subscriptions and endpoints.

Rationale: SD timing parameters control the behavior of all SD protocol phases.

Code Location: include/sd/sd_types.h (SdConfig), src/sd/sd_server.cpp

Requirement: Error - SD Entries Length Mismatch REQ_SD_001_E02
status: implemented
priority: high

The software shall reject SD messages where the entries array length exceeds the remaining message data.

Rationale: Length mismatch prevents correct entry parsing.

Error Handling: Discard message, log declared vs available length.

Code Location: src/sd/sd_message.cpp

Requirement: Error - SD Option Index Out of Range REQ_SD_120_E01
status: implemented
priority: high

The software shall skip entries that reference option indices beyond the options array.

Rationale: Out-of-range option indices indicate malformed SD messages.

Error Handling: Skip entry, continue processing remaining entries, log error.

Code Location: src/sd/sd_message.cpp

Requirement: Error - SD Unknown Entry Type REQ_SD_119_E01
status: implemented
priority: medium

The software shall skip SD entries with unknown entry type codes.

Rationale: Unknown entry types may appear in messages from newer SD implementations.

Error Handling: Skip entry, log unknown type code, continue processing.

Code Location: src/sd/sd_server.cpp, src/sd/sd_client.cpp

Requirement: Error - SD TTL Overflow Prevention REQ_SD_222_E01
status: implemented
priority: medium

The software shall handle maximum TTL values without timer overflow.

Rationale: Maximum TTL values must be handled safely without arithmetic overflow.

Error Handling: Clamp TTL to implementation maximum if necessary, log clamping.

Code Location: src/sd/sd_client.cpp, src/sd/sd_server.cpp

Requirement: Error - SD Subscription to Unavailable Service REQ_SD_116_E01
status: implemented
priority: medium

The software shall NACK subscriptions for services that are not currently offered.

Rationale: Subscriptions to unavailable services cannot be fulfilled.

Error Handling: Send NACK (TTL=0), log rejected subscription details.

Code Location: src/sd/sd_server.cpp

Requirement: Error - SD Offer with Invalid Endpoint REQ_SD_115_E01
status: implemented
priority: medium

The software shall ignore OfferService messages with invalid endpoint addresses.

Rationale: Invalid endpoints cannot be used for communication.

Error Handling: Discard offer, log invalid endpoint address.

Code Location: src/sd/sd_client.cpp

Requirement: Error - SD Duplicate Offer Handling REQ_SD_115_E02
status: implemented
priority: low

The software shall handle duplicate offers by refreshing the TTL without creating duplicate registry entries.

Rationale: Duplicate offers are normal during the repetition phase.

Error Handling: Refresh TTL of existing entry, no new entry created.

Code Location: src/sd/sd_client.cpp

Requirement: Error - SD Multicast Send Failure REQ_SD_134_E01
status: implemented
priority: medium

The software shall handle multicast send failures gracefully.

Rationale: Multicast may fail due to network configuration issues.

Error Handling: Log error, retry or fall back to unicast based on configuration.

Code Location: src/sd/sd_server.cpp

Requirement: Error - SD Entry References No Options REQ_SD_030_E01
status: implemented
priority: medium

The software shall handle SD entries that reference zero options gracefully.

Rationale: Entries without options are valid but may limit functionality.

Error Handling: Process entry, log warning if endpoint info is missing.

Code Location: src/sd/sd_message.cpp

Requirement: Error - SD Subscription Conflict REQ_SD_080_E01
status: implemented
priority: medium

The software shall handle conflicting subscriptions from the same client to the same eventgroup.

Rationale: Duplicate subscriptions may indicate configuration errors.

Error Handling: Accept latest subscription, log conflict.

Code Location: src/sd/sd_server.cpp

Requirement: Error - SD FindService Timeout REQ_SD_070_E01
status: implemented
priority: medium

The software shall report a timeout when no OfferService response is received within the configured discovery period.

Rationale: Discovery timeout enables the application to handle unavailable services.

Error Handling: Invoke discovery timeout callback.

Code Location: src/sd/sd_client.cpp

Requirement: Error - SD Reserved Flags REQ_SD_010_E02
status: implemented
priority: low

The software shall ignore reserved bits in the SD flags byte for forward compatibility.

Rationale: Reserved bits may be defined in future SD versions.

Error Handling: Ignore reserved bits, process known flags normally.

Code Location: src/sd/sd_message.cpp

Requirement: Error - SD TTL Zero in Offer REQ_SD_060_E02
status: implemented
priority: high

The software shall treat OfferService entries with TTL=0 as StopOffer messages.

Rationale: TTL=0 signals immediate unavailability regardless of entry type.

Error Handling: Remove service from registry, notify application.

Code Location: src/sd/sd_client.cpp

Requirement: Error - SD Entry With Invalid TTL Format REQ_SD_044_E01
status: implemented
priority: medium

The software shall correctly extract the 24-bit TTL field from the 3-byte packed format.

Rationale: TTL is a 24-bit field packed across bytes, requiring careful extraction.

Error Handling: Validate TTL extraction against known test vectors.

Code Location: src/sd/sd_message.cpp

Requirement: Error - SD Multiple Subscriptions Same Client REQ_SD_083_E01
status: implemented
priority: medium

The software shall coalesce duplicate subscriptions from the same client into a single subscription with refreshed TTL.

Rationale: Duplicate subscriptions waste server resources.

Error Handling: Refresh TTL of existing subscription.

Code Location: src/sd/sd_server.cpp

Requirement: Error - SD Server Offers During Shutdown REQ_SD_113_E01
status: implemented
priority: medium

The software shall reject new service offers during the shutdown phase.

Rationale: Offering services during shutdown creates inconsistent state.

Error Handling: Return NOT_READY error.

Code Location: src/sd/sd_server.cpp

Requirement: Error - SD ACK Timeout REQ_SD_116_E02
status: implemented
priority: medium

The software shall handle subscription ACK timeouts by transitioning the subscription state.

Rationale: ACK timeout indicates the server may be unreachable.

Error Handling: Transition to TIMEOUT state, retry or notify application.

Code Location: src/sd/sd_client.cpp

Requirement: Error - SD Invalid Multicast Address in Option REQ_SD_123_E01
status: implemented
priority: medium

The software shall reject multicast options containing non-multicast addresses.

Rationale: Non-multicast addresses in multicast options indicate malformed messages.

Error Handling: Reject option, log invalid address.

Code Location: src/sd/sd_message.cpp

Traceability

Implementation Files

  • include/sd/sd_types.h - SD type definitions

  • include/sd/sd_message.h - SD message interface

  • include/sd/sd_client.h - SD client interface

  • include/sd/sd_server.h - SD server interface

  • src/sd/sd_message.cpp - SD message implementation

  • src/sd/sd_client.cpp - SD client implementation

  • src/sd/sd_server.cpp - SD server implementation

Test Files

  • tests/test_sd.cpp - SD unit tests