Skip to content

fix(pal): MSVC/Windows portability for socket calls and macros#70

Merged
vtz merged 1 commit intomainfrom
fix/issue-69-msvc-portability
Mar 12, 2026
Merged

fix(pal): MSVC/Windows portability for socket calls and macros#70
vtz merged 1 commit intomainfrom
fix/issue-69-msvc-portability

Conversation

@vtz
Copy link
Copy Markdown
Owner

@vtz vtz commented Mar 12, 2026

Summary

  • Extends the Platform Abstraction Layer with portable socket wrappers that handle POSIX vs Winsock API differences (void* vs char* buffer types, errno vs WSAGetLastError(), struct timeval vs DWORD timeouts)
  • Adds NOMINMAX to Windows CMake compile definitions, preventing std::min/std::max macro conflicts
  • Replaces all raw setsockopt/sendto/recvfrom/send/recv/errno calls in transport code with portable someip_* wrappers

Closes #69

Files changed

File Change
src/CMakeLists.txt Add NOMINMAX to Windows compile definitions
include/platform/win32/net_impl.h ssize_t typedef, socket call wrappers with reinterpret_cast, someip_set_socket_timeout(), someip_socket_errno(), SOMEIP_E* error constants
include/platform/posix/net_impl.h Pass-through wrappers (macros + inline timeout helper)
include/platform/lwip/net_impl.h Pass-through wrappers
include/platform/zephyr/net_impl.h Pass-through wrappers
src/transport/udp_transport.cpp Use someip_* wrappers for all socket and error calls
src/transport/tcp_transport.cpp Use someip_* wrappers + portable timeout/keepalive setup

Issues addressed from #69

  1. serializer.cpp std::min macro conflict → NOMINMAX compile definition
  2. udp_transport.cpp setsockopt type mismatch → someip_setsockopt wrapper
  3. udp_transport.cpp ssize_t undeclared → typedef in win32/net_impl.h
  4. udp_transport.cpp sendto/recvfrom buffer type → someip_sendto/someip_recvfrom wrappers
  5. tcp_transport.cpp same issues (proactively fixed, not in original issue)

Test plan

Made with Cursor

Summary by CodeRabbit

  • New Features

    • Added cross-platform socket operation compatibility layer supporting POSIX, Windows, Zephyr, and lwIP environments with standardized error handling.
  • Chores

    • Updated Windows compilation configuration for improved compatibility.

Extend the Platform Abstraction Layer with portable wrappers for socket
functions whose signatures differ between POSIX (void*) and Winsock
(char*), and for errno-based error reporting (errno vs WSAGetLastError).

Changes:

- CMakeLists.txt: add NOMINMAX to Windows compile definitions alongside
  NOGDI and WIN32_LEAN_AND_MEAN (fixes std::min/std::max macro conflict)

- win32/net_impl.h: add ssize_t typedef, someip_setsockopt/getsockopt/
  sendto/recvfrom/send/recv wrappers with reinterpret_cast, socket
  timeout helper (DWORD ms vs struct timeval), someip_socket_errno()
  returning WSAGetLastError(), and SOMEIP_E* error constant mappings

- posix/net_impl.h, lwip/net_impl.h, zephyr/net_impl.h: add matching
  pass-through wrappers so transport code compiles on all platforms

- udp_transport.cpp: replace raw setsockopt/sendto/recvfrom/errno with
  someip_* portable wrappers

- tcp_transport.cpp: same treatment plus portable socket timeouts via
  someip_set_socket_timeout(), Windows-compatible TCP keepalive, and
  someip_socket_errno() for non-blocking connect error checking

All 15 existing tests pass.

Closes #69

Made-with: Cursor
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Mar 12, 2026

📝 Walkthrough

Walkthrough

The PR introduces cross-platform socket operation abstractions and error handling wrappers for POSIX, Windows (Winsock), lwIP, and Zephyr platforms. Transport layer implementations are updated to use these wrappers, and Windows compiler flags are added to resolve MSVC compatibility issues.

Changes

Cohort / File(s) Summary
Platform Socket Abstractions
include/platform/posix/net_impl.h, include/platform/win32/net_impl.h, include/platform/lwip/net_impl.h, include/platform/zephyr/net_impl.h
Adds portable socket operation wrappers (someip_setsockopt, someip_getsockopt, someip_send, someip_recv, someip_sendto, someip_recvfrom) and error handling utilities (someip_socket_errno, someip_set_socket_timeout). Platform-specific implementations handle type conversions; Windows adds ssize_t typedef and reinterpret_cast conversions for Winsock compatibility.
Transport Layer Integration
src/transport/tcp_transport.cpp, src/transport/udp_transport.cpp
Replaces direct POSIX socket calls with platform wrappers (someip_setsockopt, someip_send/recv, someip_sendto/recvfrom). Error handling updated to use someip_socket_errno and standardized error constants (SOMEIP_EAGAIN, SOMEIP_EWOULDBLOCK, SOMEIP_EINPROGRESS). Socket timeout configuration migrated to someip_set_socket_timeout helper.
Build Configuration
src/CMakeLists.txt
Adds NOMINMAX to private compile definitions for Windows object targets to prevent macro expansion conflicts with std::numeric_limits.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 Cross-platform sockets, a hop-hop-hop away,
Windows and POSIX now play-play-play,
With wrappers and casts, no more portability strife,
The rabbit's prepared for a compatible life! 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 78.57% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding Windows/MSVC portability for socket calls and macros, which is the primary focus of this PR.
Linked Issues check ✅ Passed The PR comprehensively addresses all requirements from issue #69: NOMINMAX added to CMake [1], ssize_t typedef provided [2], portable socket wrappers with correct type handling added [3], buffer casting implemented [4], and centralized PAL wrappers created.
Out of Scope Changes check ✅ Passed All changes are directly related to issue #69: platform abstraction wrappers, Windows compatibility headers, CMake NOMINMAX addition, and transport code refactoring to use wrappers. No unrelated modifications detected.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/issue-69-msvc-portability
📝 Coding Plan
  • Generate coding plan for human review comments

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

Requirements Validation Report

Requirements Change Summary

  • Added: 649
  • Removed: 0
  • Modified: 0
  • Unchanged: 0
  • Total: 649

Added Requirements

  • REQ_ARCH_001: Modular Architecture
    • Satisfies: feat_req_someip_2, feat_req_someip_3, feat_req_someip_4, feat_req_someip_14, feat_req_someip_15, feat_req_someip_697
  • REQ_ARCH_002: Thread Safety
  • REQ_ARCH_003: Safe Memory Management
  • REQ_ARCH_004: Consistent Error Handling
  • REQ_ARCH_005: Coding Standards Compliance
    • Satisfies: feat_req_someip_105, feat_req_someip_109, feat_req_someip_449, feat_req_someip_472
  • REQ_ARCH_006: CMake Build System
  • REQ_ARCH_007: Comprehensive Testing
  • REQ_COMPAT_001: Receive Longer Messages Gracefully
    • Satisfies: feat_req_someipcompat_1198, feat_req_someipcompat_1199, feat_req_someipcompat_1196, feat_req_someipcompat_1205
  • REQ_COMPAT_001_E01: Error - Forward Compatibility Length Clamp
    • Satisfies: REQ_COMPAT_001
  • REQ_COMPAT_002: Default Values for Missing Parameters
    • Satisfies: feat_req_someipcompat_1200
  • REQ_COMPAT_003: Drop Unknown Messages
    • Satisfies: feat_req_someipcompat_1201, feat_req_someip_808
  • REQ_COMPAT_003_E01: Error - Unknown Message Dropped Count
    • Satisfies: REQ_COMPAT_003
  • REQ_COMPAT_004: Open Service Instance Access
    • Satisfies: feat_req_someipcompat_1202
  • REQ_COMPAT_005: FindService Wildcard Minor Version
    • Satisfies: feat_req_someipcompat_1197, feat_req_someipcompat_1216
  • REQ_COMPAT_010: Multi-Version Service Hosting
    • Satisfies: feat_req_someipcompat_714, feat_req_someipcompat_800, feat_req_someipcompat_801, feat_req_someipcompat_712, feat_req_someipcompat_713
  • REQ_COMPAT_010_E01: Error - Incompatible Major Version
    • Satisfies: REQ_COMPAT_010
  • REQ_COMPAT_011: Multi-Version Client Discovery
    • Satisfies: feat_req_someipcompat_802, feat_req_someipcompat_803, feat_req_someipcompat_804
  • REQ_COMPAT_020: Reserved Service ID Table
    • Satisfies: feat_req_someipids_505, feat_req_someipids_554, feat_req_someipids_504
  • REQ_COMPAT_020_E01: Error - Reserved Service ID in Application Message
    • Satisfies: REQ_COMPAT_020
  • REQ_COMPAT_021: Reserved Instance ID Table
    • Satisfies: feat_req_someipids_529
  • REQ_COMPAT_022: Reserved Method ID and Event ID Table
    • Satisfies: feat_req_someipids_636
  • REQ_COMPAT_023: Reserved Eventgroup ID Table
    • Satisfies: feat_req_someipids_555
  • REQ_COMPAT_024: Service 0xFFFF Method IDs
    • Satisfies: feat_req_someipids_530, feat_req_someipids_664, feat_req_someipids_875
  • REQ_COMPAT_030: Multi-Version Configuration
    • Satisfies: feat_req_someipcompat_799
  • REQ_E2E_PLUGIN_001: E2E Profile Plugin Interface
    • Satisfies: feat_req_someip_102, feat_req_someip_103
  • REQ_E2E_PLUGIN_002: E2E Profile Registry
  • REQ_E2E_PLUGIN_003: Plugin Registration API
  • REQ_E2E_PLUGIN_004: Standard E2E Profile
    • Satisfies: feat_req_someip_102, feat_req_someip_103
  • REQ_E2E_PLUGIN_005: E2E Header Format
    • Satisfies: feat_req_someip_102, feat_req_someip_103
  • REQ_MSG_001: Parse Message ID Field
    • Satisfies: feat_req_someip_44, feat_req_someip_45, feat_req_someip_56, feat_req_someip_43, feat_req_someip_55, feat_req_someip_29, feat_req_someip_30
  • REQ_MSG_002: Extract Service ID from Message ID
    • Satisfies: feat_req_someip_538, feat_req_someip_539, feat_req_someip_59, feat_req_someip_534, feat_req_someip_58, feat_req_someip_57
  • REQ_MSG_003: Extract Method ID from Message ID
    • Satisfies: feat_req_someip_59, feat_req_someip_60, feat_req_someip_625, feat_req_someip_58
  • REQ_MSG_004: Validate Reserved Service ID 0x0000
    • Satisfies: feat_req_someip_627, feat_req_someip_816
  • REQ_MSG_004_E01: Error - Invalid Service ID Range
    • Satisfies: feat_req_someip_627, feat_req_someip_371
  • REQ_MSG_004_E02: Error - Log Invalid Service ID
  • REQ_MSG_005: Recognize SD Service ID 0xFFFF
    • Satisfies: feat_req_someip_627, feat_req_someip_658
  • REQ_MSG_006: Accept Method IDs for Methods
    • Satisfies: feat_req_someip_60, feat_req_someip_625, feat_req_someip_626
  • REQ_MSG_007: Accept Method IDs for Events
    • Satisfies: feat_req_someip_67, feat_req_someip_625, feat_req_someip_626
  • REQ_MSG_008: Validate Reserved Method ID 0xFFFF
    • Satisfies: feat_req_someip_816, feat_req_someip_818
  • REQ_MSG_010: Parse Length Field
    • Satisfies: feat_req_someip_77, feat_req_someip_76, feat_req_someip_34, feat_req_someip_35, feat_req_someip_36, feat_req_someip_38
  • REQ_MSG_010_E01: Error - Message Length Overflow
  • REQ_MSG_011: Validate Length Field Calculation
    • Satisfies: feat_req_someip_77
  • REQ_MSG_012: Minimum Length Value
    • Satisfies: feat_req_someip_77, feat_req_someip_798
  • REQ_MSG_012_E01: Error - Return Malformed Message Code
  • REQ_MSG_012_E02: Error - Log Invalid Length Value
  • REQ_MSG_013: Maximum Length for UDP Transport
    • Satisfies: feat_req_someip_318, feat_req_someiptp_760, feat_req_someip_166
  • REQ_MSG_014: Error - Buffer Size Less Than Length
    • Satisfies: feat_req_someip_77, feat_req_someip_798
  • REQ_MSG_014_E01: Error - Truncated Message Detection
  • REQ_MSG_014_E02: Error - Buffer Overflow Protection
  • REQ_MSG_015: Error - Length Less Than Minimum
    • Satisfies: feat_req_someip_798
  • REQ_MSG_020: Parse Request ID Field
    • Satisfies: feat_req_someip_79, feat_req_someip_83, feat_req_someip_78, feat_req_someip_82, feat_req_someip_80
  • REQ_MSG_020_E01: Error - Request ID All Zeros
  • REQ_MSG_021: Extract Client ID from Request ID
    • Satisfies: feat_req_someip_83, feat_req_someip_699
  • REQ_MSG_022: Extract Session ID from Request ID
    • Satisfies: feat_req_someip_83, feat_req_someip_88
  • REQ_MSG_023: Session ID Zero - Disabled Session Handling
    • Satisfies: feat_req_someip_700
  • REQ_MSG_024: Session ID Wrap-Around Handling
    • Satisfies: feat_req_someip_649, feat_req_someip_677
  • REQ_MSG_024_E01: Error - Duplicate Session ID Detection
  • REQ_MSG_024_E02: Error - Session ID Sequence Validation
  • REQ_MSG_025: Client ID Zero - Reserved for SD
    • Satisfies: feat_req_someip_699
  • REQ_MSG_030: Parse Protocol Version Field
    • Satisfies: feat_req_someip_90, feat_req_someip_89
  • REQ_MSG_031: Validate Protocol Version Value
    • Satisfies: feat_req_someip_90, feat_req_someip_703
  • REQ_MSG_032: Error - Reject Invalid Protocol Version
    • Satisfies: feat_req_someip_90, feat_req_someip_371
  • REQ_MSG_032_E01: Error - Log Unknown Protocol Version
  • REQ_MSG_032_E02: Error - Discard Message on Protocol Mismatch
  • REQ_MSG_033: Error - Return Wrong Protocol Version Code
    • Satisfies: feat_req_someip_90, feat_req_someip_371
  • REQ_MSG_040: Parse Interface Version Field
    • Satisfies: feat_req_someip_92, feat_req_someip_91, feat_req_someip_93
  • REQ_MSG_040_E01: Error - Interface Version Zero
  • REQ_MSG_041: Pass Interface Version to Application
    • Satisfies: feat_req_someip_92
  • REQ_MSG_042: Error - Interface Version Mismatch Handling
    • Satisfies: feat_req_someip_371
  • REQ_MSG_042_E01: Error - Log Interface Version Mismatch
  • REQ_MSG_050: Parse Message Type Field
    • Satisfies: feat_req_someip_95, feat_req_someip_94, feat_req_someip_684
  • REQ_MSG_051: Accept REQUEST Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_141, feat_req_someip_329
  • REQ_MSG_052: Accept REQUEST_NO_RETURN Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_345
  • REQ_MSG_053: Accept NOTIFICATION Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_354
  • REQ_MSG_053_E01: Error - Notification With Non-Zero Return Code
  • REQ_MSG_054: Accept RESPONSE Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_141, feat_req_someip_338
  • REQ_MSG_054_E01: Error - Response Message Type for Non-Request
  • REQ_MSG_055: Accept ERROR Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_106, feat_req_someip_107, feat_req_someip_727
  • REQ_MSG_056: Detect TP Flag in Message Type
    • Satisfies: feat_req_someip_761, feat_req_someiptp_765
  • REQ_MSG_057: Accept REQUEST_ACK Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_142
  • REQ_MSG_058: Accept RESPONSE_ACK Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_142
  • REQ_MSG_059: Accept ERROR_ACK Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_142
  • REQ_MSG_060_TP: Accept TP_REQUEST Message Type
    • Satisfies: feat_req_someip_761, feat_req_someiptp_765
  • REQ_MSG_061_TP: Accept TP_REQUEST_NO_RETURN Message Type
    • Satisfies: feat_req_someip_761, feat_req_someiptp_765
  • REQ_MSG_062_TP: Accept TP_NOTIFICATION Message Type
    • Satisfies: feat_req_someip_761, feat_req_someiptp_765
  • REQ_MSG_063: Error - Reject Unknown Message Type
    • Satisfies: feat_req_someip_95, feat_req_someip_721
  • REQ_MSG_063_E01: Error - Log Unknown Message Type
  • REQ_MSG_063_E02: Error - Reserved Message Type Bits Validation
  • REQ_MSG_064: Error - Return Wrong Message Type Code
    • Satisfies: feat_req_someip_95, feat_req_someip_371
  • REQ_MSG_070: Parse Return Code Field
    • Satisfies: feat_req_someip_144, feat_req_someip_371, feat_req_someip_143, feat_req_someip_369, feat_req_someip_683
  • REQ_MSG_071: Validate Return Code Zero for Requests
    • Satisfies: feat_req_someip_144, feat_req_someip_371
  • REQ_MSG_071_E01: Error - Non-Zero Return Code in Request
    • Satisfies: feat_req_someip_371, feat_req_someip_597
  • REQ_MSG_071_E02: Error - Log Invalid Return Code in Request
  • REQ_MSG_072: Accept Standard Return Codes
    • Satisfies: feat_req_someip_371
  • REQ_MSG_072_E01: Error - Unknown Return Code Handling
  • REQ_MSG_073: Accept E_OK Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_074: Accept E_NOT_OK Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_075: Accept E_UNKNOWN_SERVICE Return Code
    • Satisfies: feat_req_someip_371, feat_req_someip_816
  • REQ_MSG_076: Accept E_UNKNOWN_METHOD Return Code
    • Satisfies: feat_req_someip_371, feat_req_someip_816
  • REQ_MSG_077: Accept E_NOT_READY Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_078: Accept E_NOT_REACHABLE Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_079: Accept E_TIMEOUT Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_080: Accept E_MALFORMED_MESSAGE Return Code
    • Satisfies: feat_req_someip_371
  • REQ_MSG_090: Big Endian Header Fields
    • Satisfies: feat_req_someip_42, feat_req_someip_44, feat_req_someip_45, feat_req_someip_675, feat_req_someip_41
  • REQ_MSG_090_E01: Error - Serialization Output Buffer Full
  • REQ_MSG_091: Host to Network Byte Order on Serialize
    • Satisfies: feat_req_someip_42, feat_req_someip_675
  • REQ_MSG_092: Network to Host Byte Order on Deserialize
    • Satisfies: feat_req_someip_42, feat_req_someip_675
  • REQ_MSG_093: Single Byte Fields No Conversion
    • Satisfies: feat_req_someip_42
  • REQ_MSG_100: Complete Header Validation
    • Satisfies: feat_req_someip_44, feat_req_someip_45, feat_req_someip_721
  • REQ_MSG_100_E01: Error - Null Buffer Pointer
  • REQ_MSG_100_E02: Error - Buffer Too Small for Header
  • REQ_MSG_100_E03: Error - Empty Buffer Handling
  • REQ_MSG_110: Service Instance ID Support
    • Satisfies: feat_req_someip_542, feat_req_someip_543, feat_req_someip_544, feat_req_someip_579
  • REQ_MSG_110_E01: Error - Invalid Service Instance ID
  • REQ_MSG_111: Service ID Uniqueness
    • Satisfies: feat_req_someip_541
  • REQ_MSG_112: Non-SOME/IP Service ID 0xFFFE
    • Satisfies: feat_req_someip_624
  • REQ_MSG_113: Eventgroup ID Support
    • Satisfies: feat_req_someip_545, feat_req_someip_546, feat_req_someip_547, feat_req_someip_670
  • REQ_MSG_113_E01: Error - Duplicate Eventgroup ID
  • REQ_MSG_114: Request/Response Header Construction
    • Satisfies: feat_req_someip_329, feat_req_someip_338, feat_req_someip_327, feat_req_someip_328
  • REQ_MSG_114_E01: Error - Response Without Matching Request
  • REQ_MSG_114_E02: Error - Response Timeout
  • REQ_MSG_115: Fire-and-Forget No Response
    • Satisfies: feat_req_someip_345, feat_req_someip_348, feat_req_someip_344
  • REQ_MSG_116: Response IP Address Mapping
    • Satisfies: feat_req_someip_49, feat_req_someip_46, feat_req_someip_48
  • REQ_MSG_117: Payload Field Extraction
    • Satisfies: feat_req_someip_165, feat_req_someip_164
  • REQ_MSG_117_E01: Error - Payload Size Exceeds Maximum
  • REQ_MSG_118: Session Handling for Request/Response
    • Satisfies: feat_req_someip_669
  • REQ_MSG_118_E01: Error - Session ID Zero in Active Session
  • REQ_MSG_119: Session Handling for Events
    • Satisfies: feat_req_someip_667
  • REQ_MSG_120: Client ID Configurable Prefix
    • Satisfies: feat_req_someip_701
  • REQ_MSG_120_E01: Error - Client ID Conflict
  • REQ_MSG_121A: Event Delivery to All Subscribers
    • Satisfies: feat_req_someip_354, feat_req_someip_351, feat_req_someip_352
  • REQ_MSG_121B: Suppress Events to Non-Subscribers
    • Satisfies: feat_req_someip_353, feat_req_someip_807
  • REQ_MSG_121C: Event Delivery After Unsubscribe
    • Satisfies: feat_req_someip_355, feat_req_someip_356
  • REQ_MSG_121_E01: Error - Event Publish to No Subscribers
  • REQ_MSG_121_E02: Error - Event Publish After Shutdown
  • REQ_MSG_122: Selective Event Sending
    • Satisfies: feat_req_someip_804, feat_req_someip_806
  • REQ_MSG_123: Field Getter Support
    • Satisfies: feat_req_someip_631, feat_req_someip_633, feat_req_someip_630, feat_req_someip_637
  • REQ_MSG_123_E01: Error - Field Getter Not Available
  • REQ_MSG_124: Field Setter Support
    • Satisfies: feat_req_someip_631, feat_req_someip_634
  • REQ_MSG_124_E01: Error - Field Setter Validation Failure
  • REQ_MSG_125: Field Notifier Support
    • Satisfies: feat_req_someip_631, feat_req_someip_635
  • REQ_MSG_125_E01: Error - Duplicate Field Notifier Registration
  • REQ_MSG_126: No Field Without Accessors
    • Satisfies: feat_req_someip_632
  • REQ_MSG_127: No Error for Fire-and-Forget
    • Satisfies: feat_req_someip_654
  • REQ_MSG_128: No Error for Events
    • Satisfies: feat_req_someip_597
  • REQ_MSG_129: Error Header Copy
    • Satisfies: feat_req_someip_655
  • REQ_MSG_130: No Error Response to Error Messages
    • Satisfies: feat_req_someip_704
  • REQ_MSG_131: Return Code Configuration
    • Satisfies: feat_req_someip_598, feat_req_someip_1092
  • REQ_MSG_132A: Exception Message Type 0x81
    • Satisfies: feat_req_someip_101, feat_req_someip_726, feat_req_someip_421
  • REQ_MSG_132B: Exception Message Payload
    • Satisfies: feat_req_someip_422, feat_req_someip_423, feat_req_someip_426
  • REQ_MSG_133A: Error Check Step 1 - Protocol Version
    • Satisfies: feat_req_someip_719, feat_req_someip_721
  • REQ_MSG_133B: Error Check Step 2 - Message Type
    • Satisfies: feat_req_someip_717, feat_req_someip_718
  • REQ_MSG_133C: Error Check Step 3 - Service and Method Validation
    • Satisfies: feat_req_someip_366, feat_req_someip_364, feat_req_someip_365, feat_req_someip_720
  • REQ_MSG_134: Service Instance Port Multiplexing
    • Satisfies: feat_req_someip_648, feat_req_someip_444, feat_req_someip_446
  • REQ_MSG_135: Error Message Handling
    • Satisfies: feat_req_someip_367, feat_req_someip_727, feat_req_someip_366, feat_req_someip_368
  • REQ_MSG_140: IP Address and Port Mapping
    • Satisfies: feat_req_someip_47, feat_req_someip_313, feat_req_someip_314
  • REQ_MSG_141: Publish/Subscribe Support
    • Satisfies: feat_req_someip_361, feat_req_someip_360
  • REQ_MY_001: My Requirement
    • Satisfies: feat_req_someip_102, feat_req_someip_103
  • REQ_PAL_BYTE_HTONL: PAL Host-to-Network 32-bit Conversion
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_BYTE_HTONS: PAL Host-to-Network 16-bit Conversion
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_BYTE_NTOHL: PAL Network-to-Host 32-bit Conversion
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_BYTE_NTOHS: PAL Network-to-Host 16-bit Conversion
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_CV_EXCEPT_E01: Error - ConditionVariable Exception Safety
  • REQ_PAL_CV_NOTIFY_ALL: PAL ConditionVariable Notify All
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_CV_NOTIFY_ONE: PAL ConditionVariable Notify One
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_CV_OWNERSHIP: PAL ConditionVariable Mutex Ownership Guarantee
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_CV_WAIT: PAL ConditionVariable Wait
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_CV_WAIT_PRED: PAL ConditionVariable Wait with Predicate
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_LOCK_ACQUIRE: PAL ScopedLock Acquisition on Construction
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_LOCK_NONCOPY: PAL ScopedLock Non-Copyable
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_LOCK_RELEASE: PAL ScopedLock Release on Destruction
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_MEM_ALLOC: PAL Memory Allocation
    • Satisfies: REQ_ARCH_001, REQ_ARCH_003
  • REQ_PAL_MEM_EXHAUST_E01: Error - Memory Pool Exhaustion
  • REQ_PAL_MEM_INDEPENDENT: PAL Memory Independence
    • Satisfies: REQ_ARCH_001, REQ_ARCH_003
  • REQ_PAL_MEM_THREADSAFE_E01: Error - Memory Pool Thread Safety
  • REQ_PAL_MUTEX_LOCK: PAL Mutex Lock
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_MUTEX_NONCOPY: PAL Mutex Non-Copyable
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_MUTEX_TRYLOCK: PAL Mutex Try Lock
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_MUTEX_UNLOCK: PAL Mutex Unlock
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_MUTEX_UNLOCK_E01: Error - Mutex Double Unlock
  • REQ_PAL_NET_BLOCK: PAL Socket Set Blocking
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_NET_CLOSE: PAL Socket Close
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_NET_MODE_E01: Error - Socket Mode Change Failure
  • REQ_PAL_NET_NONBLOCK: PAL Socket Set Non-Blocking
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_NET_SHUTDOWN: PAL Socket Shutdown
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_SLEEP_DURATION: PAL sleep_for Minimum Duration
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_SLEEP_ZERO: PAL sleep_for Zero Duration
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_THREAD_CREATE: PAL Thread Creation
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_THREAD_CREATE_E01: Error - Thread Creation Failure
  • REQ_PAL_THREAD_DTOR_E01: Error - Thread Destructor Without Join
  • REQ_PAL_THREAD_JOIN: PAL Thread Join
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_THREAD_JOINABLE: PAL Thread Joinable Query
    • Satisfies: REQ_ARCH_001
  • REQ_PAL_THREAD_NONCOPY: PAL Thread Non-Copyable
    • Satisfies: REQ_ARCH_001
  • REQ_PLATFORM_ARCH_001: Platform Abstraction Layer Architecture
  • REQ_PLATFORM_FREERTOS_001: FreeRTOS Threading Backend
    • Satisfies: REQ_PAL_MUTEX_LOCK, REQ_PAL_MUTEX_UNLOCK, REQ_PAL_MUTEX_TRYLOCK, REQ_PAL_CV_WAIT, REQ_PAL_CV_WAIT_PRED, REQ_PAL_CV_NOTIFY_ONE, REQ_PAL_CV_NOTIFY_ALL, REQ_PAL_CV_OWNERSHIP, REQ_PAL_THREAD_CREATE, REQ_PAL_THREAD_JOINABLE, REQ_PAL_THREAD_JOIN, REQ_PAL_LOCK_ACQUIRE, REQ_PAL_LOCK_RELEASE, REQ_PAL_SLEEP_DURATION, REQ_PAL_SLEEP_ZERO
  • REQ_PLATFORM_FREERTOS_002: FreeRTOS Memory Pool Backend
    • Satisfies: REQ_PAL_MEM_ALLOC, REQ_PAL_MEM_INDEPENDENT
  • REQ_PLATFORM_LWIP_001: lwIP Networking Backend
    • Satisfies: REQ_PAL_NET_CLOSE, REQ_PAL_NET_SHUTDOWN, REQ_PAL_NET_NONBLOCK, REQ_PAL_NET_BLOCK
  • REQ_PLATFORM_LWIP_002: lwIP Byte-Order Backend
    • Satisfies: REQ_PAL_BYTE_HTONS, REQ_PAL_BYTE_NTOHS, REQ_PAL_BYTE_HTONL, REQ_PAL_BYTE_NTOHL
  • REQ_PLATFORM_POSIX_001: POSIX/Host Threading Backend
    • Satisfies: REQ_PAL_MUTEX_LOCK, REQ_PAL_MUTEX_UNLOCK, REQ_PAL_MUTEX_TRYLOCK, REQ_PAL_CV_WAIT, REQ_PAL_CV_WAIT_PRED, REQ_PAL_CV_NOTIFY_ONE, REQ_PAL_CV_NOTIFY_ALL, REQ_PAL_CV_OWNERSHIP, REQ_PAL_THREAD_CREATE, REQ_PAL_THREAD_JOINABLE, REQ_PAL_THREAD_JOIN, REQ_PAL_LOCK_ACQUIRE, REQ_PAL_LOCK_RELEASE, REQ_PAL_SLEEP_DURATION, REQ_PAL_SLEEP_ZERO
  • REQ_PLATFORM_POSIX_002: POSIX/Host Memory Backend
    • Satisfies: REQ_PAL_MEM_ALLOC, REQ_PAL_MEM_INDEPENDENT
  • REQ_PLATFORM_POSIX_003: POSIX/Host Networking Backend
    • Satisfies: REQ_PAL_NET_CLOSE, REQ_PAL_NET_SHUTDOWN, REQ_PAL_NET_NONBLOCK, REQ_PAL_NET_BLOCK
  • REQ_PLATFORM_POSIX_004: POSIX/Host Byte-Order Backend
    • Satisfies: REQ_PAL_BYTE_HTONS, REQ_PAL_BYTE_NTOHS, REQ_PAL_BYTE_HTONL, REQ_PAL_BYTE_NTOHL
  • REQ_PLATFORM_THREADX_001: ThreadX Threading Backend
    • Satisfies: REQ_PAL_MUTEX_LOCK, REQ_PAL_MUTEX_UNLOCK, REQ_PAL_MUTEX_TRYLOCK, REQ_PAL_CV_WAIT, REQ_PAL_CV_WAIT_PRED, REQ_PAL_CV_NOTIFY_ONE, REQ_PAL_CV_NOTIFY_ALL, REQ_PAL_CV_OWNERSHIP, REQ_PAL_THREAD_CREATE, REQ_PAL_THREAD_JOINABLE, REQ_PAL_THREAD_JOIN, REQ_PAL_LOCK_ACQUIRE, REQ_PAL_LOCK_RELEASE, REQ_PAL_SLEEP_DURATION, REQ_PAL_SLEEP_ZERO
  • REQ_PLATFORM_THREADX_002: ThreadX Memory Pool Backend
    • Satisfies: REQ_PAL_MEM_ALLOC, REQ_PAL_MEM_INDEPENDENT
  • REQ_PLATFORM_WIN32_001: Win32 Threading Backend
    • Satisfies: REQ_PAL_MUTEX_LOCK, REQ_PAL_MUTEX_UNLOCK, REQ_PAL_MUTEX_TRYLOCK, REQ_PAL_CV_WAIT, REQ_PAL_CV_WAIT_PRED, REQ_PAL_CV_NOTIFY_ONE, REQ_PAL_CV_NOTIFY_ALL, REQ_PAL_CV_OWNERSHIP, REQ_PAL_THREAD_CREATE, REQ_PAL_THREAD_JOINABLE, REQ_PAL_THREAD_JOIN, REQ_PAL_LOCK_ACQUIRE, REQ_PAL_LOCK_RELEASE, REQ_PAL_SLEEP_DURATION, REQ_PAL_SLEEP_ZERO
  • REQ_PLATFORM_WIN32_002: Win32 Memory Backend
    • Satisfies: REQ_PAL_MEM_ALLOC, REQ_PAL_MEM_INDEPENDENT
  • REQ_PLATFORM_WIN32_003: Win32 Networking Backend
    • Satisfies: REQ_PAL_NET_CLOSE, REQ_PAL_NET_SHUTDOWN, REQ_PAL_NET_NONBLOCK, REQ_PAL_NET_BLOCK
  • REQ_PLATFORM_WIN32_004: Win32 Byte-Order Backend
    • Satisfies: REQ_PAL_BYTE_HTONS, REQ_PAL_BYTE_NTOHS, REQ_PAL_BYTE_HTONL, REQ_PAL_BYTE_NTOHL
  • REQ_PLATFORM_ZEPHYR_001: Zephyr Threading Backend
    • Satisfies: REQ_PAL_MUTEX_LOCK, REQ_PAL_MUTEX_UNLOCK, REQ_PAL_MUTEX_TRYLOCK, REQ_PAL_CV_WAIT, REQ_PAL_CV_WAIT_PRED, REQ_PAL_CV_NOTIFY_ONE, REQ_PAL_CV_NOTIFY_ALL, REQ_PAL_CV_OWNERSHIP, REQ_PAL_THREAD_CREATE, REQ_PAL_THREAD_JOINABLE, REQ_PAL_THREAD_JOIN, REQ_PAL_LOCK_ACQUIRE, REQ_PAL_LOCK_RELEASE, REQ_PAL_SLEEP_DURATION, REQ_PAL_SLEEP_ZERO
  • REQ_PLATFORM_ZEPHYR_002: Zephyr Memory Pool Backend
    • Satisfies: REQ_PAL_MEM_ALLOC, REQ_PAL_MEM_INDEPENDENT
  • REQ_PLATFORM_ZEPHYR_003: Zephyr Networking Backend
    • Satisfies: REQ_PAL_NET_CLOSE, REQ_PAL_NET_SHUTDOWN, REQ_PAL_NET_NONBLOCK, REQ_PAL_NET_BLOCK
  • REQ_PLATFORM_ZEPHYR_004: Zephyr Byte-Order Backend
    • Satisfies: REQ_PAL_BYTE_HTONS, REQ_PAL_BYTE_NTOHS, REQ_PAL_BYTE_HTONL, REQ_PAL_BYTE_NTOHL
  • REQ_SD_001: SD Service ID
    • Satisfies: feat_req_someipsd_141
  • REQ_SD_001_E01: Error - SD Message Too Short
  • REQ_SD_001_E02: Error - SD Entries Length Mismatch
  • REQ_SD_002: SD Method ID
    • Satisfies: feat_req_someipsd_142
  • REQ_SD_003: SD Client ID
    • Satisfies: feat_req_someipsd_144
  • REQ_SD_004: SD Protocol Version
    • Satisfies: feat_req_someipsd_147
  • REQ_SD_005: SD Interface Version
    • Satisfies: feat_req_someipsd_148
  • REQ_SD_006: SD Message Type
    • Satisfies: feat_req_someipsd_205
  • REQ_SD_007: SD Return Code
    • Satisfies: feat_req_someipsd_208, feat_req_someipsd_209
  • REQ_SD_010: Parse SD Flags Byte
    • Satisfies: feat_req_someipsd_100, feat_req_someipsd_209, feat_req_someipsd_213
  • REQ_SD_010_E01: Error - SD Session ID Non-Incremental
  • REQ_SD_010_E02: Error - SD Reserved Flags
  • REQ_SD_011: Extract Reboot Flag
    • Satisfies: feat_req_someipsd_213
  • REQ_SD_012: Extract Unicast Flag
    • Satisfies: feat_req_someipsd_100, feat_req_someipsd_213
  • REQ_SD_013: Validate Reserved Flags
    • Satisfies: feat_req_someipsd_213
  • REQ_SD_014: Ignore Reserved Flags on Receive
    • Satisfies: feat_req_someipsd_148, feat_req_someipsd_213
  • REQ_SD_020: Parse Entries Length Field
    • Satisfies: feat_req_someipsd_575
  • REQ_SD_020_E01: Error - Invalid Entries Length
  • REQ_SD_020_E02: Error - Entries Length Not Multiple of Entry Size
  • REQ_SD_021: Parse Entry Type
    • Satisfies: feat_req_someipsd_575, feat_req_someipsd_625, feat_req_someipsd_626
  • REQ_SD_021_E01: Error - SD Options Array Too Large
  • REQ_SD_022: Entry Size Calculation
    • Satisfies: feat_req_someipsd_575, feat_req_someipsd_625
  • REQ_SD_022_E01: Error - Truncated Entry
  • REQ_SD_023: Parse Type 0 Find Service Entry
    • Satisfies: feat_req_someipsd_626
  • REQ_SD_024: Parse Type 1 Offer Service Entry
    • Satisfies: feat_req_someipsd_626
  • REQ_SD_025: Parse Type 6 Subscribe Eventgroup Entry
    • Satisfies: feat_req_someipsd_629
  • REQ_SD_026: Parse Type 7 Subscribe Eventgroup Ack Entry
    • Satisfies: feat_req_someipsd_630
  • REQ_SD_030: Parse Service ID in Entry
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_030_E01: Error - SD Entry References No Options
  • REQ_SD_031: Parse Instance ID in Entry
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_032: Instance ID Wildcard
    • Satisfies: feat_req_someipsd_625, feat_req_someipsd_734
  • REQ_SD_033: Parse Major Version and TTL
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_034: Parse Minor Version
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_035: Parse Eventgroup ID
    • Satisfies: feat_req_someipsd_629
  • REQ_SD_040: Store Service Offer TTL
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_040_E01: Error - Service List Full
  • REQ_SD_041: Decrement TTL Periodically
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_041_E01: Error - TTL Underflow Protection
  • REQ_SD_042: Remove Service on TTL Expiry
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_043: Infinite TTL Value
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_044: Stop Offer TTL Zero
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_044_E01: Error - SD Entry With Invalid TTL Format
  • REQ_SD_045: Reset TTL on New Offer
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_046: Notify Application on Service Availability Change
    • Satisfies: feat_req_someipsd_14
  • REQ_SD_050: Track Session ID per Endpoint
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_050_E01: Error - SD Malformed Option Length
  • REQ_SD_051: Compare Session ID for Reboot Detection
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_052: Detect Reboot on Session ID Regression
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_052_E01: Error - Session ID Wrap-Around Handling
  • REQ_SD_053: Detect Reboot on Reboot Flag
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_054: Trigger Reboot Detection Event
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_055: Clear Cached Services on Reboot
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_056: Update Stored Session ID
    • Satisfies: feat_req_someipsd_795
  • REQ_SD_060: Parse Options Length Field
    • Satisfies: feat_req_someipsd_1096
  • REQ_SD_060_E01: Error - SD Offer Without Endpoint Option
  • REQ_SD_060_E02: Error - SD TTL Zero in Offer
  • REQ_SD_061: Parse Option Type
    • Satisfies: feat_req_someipsd_1096, feat_req_someipsd_1112
  • REQ_SD_061_E01: Error - Invalid Option Type
  • REQ_SD_062: Parse Option Length
    • Satisfies: feat_req_someipsd_1096, feat_req_someipsd_1112
  • REQ_SD_062_E01: Error - Truncated Option
  • REQ_SD_063: Parse IPv4 Endpoint Option Type
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_064: Extract IPv4 Address
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_064_E01: Error - Invalid IP Address
  • REQ_SD_065: Extract IPv4 Port Number
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_066: Extract IPv4 Protocol
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_067: Parse IPv6 Endpoint Option Type
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_068: Extract IPv6 Address
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_069: Extract IPv6 Port Number
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_070: Extract IPv6 Protocol
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_070_E01: Error - SD FindService Timeout
  • REQ_SD_071: Parse Configuration Option Type
    • Satisfies: feat_req_someipsd_1163
  • REQ_SD_072: Parse Configuration String
    • Satisfies: feat_req_someipsd_1163
  • REQ_SD_073: Parse IPv4 Multicast Option Type
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_074: Parse IPv6 Multicast Option Type
    • Satisfies: feat_req_someipsd_1112
  • REQ_SD_075: Parse First Option Index
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_075_E01: Error - Option Index Out of Range
  • REQ_SD_076: Parse Second Option Index
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_077: Parse Option Counts
    • Satisfies: feat_req_someipsd_625
  • REQ_SD_080: Service Find State
    • Satisfies: feat_req_someipsd_632
  • REQ_SD_080_E01: Error - SD Subscription Conflict
  • REQ_SD_081: Send Find Service Message
    • Satisfies: feat_req_someipsd_632
  • REQ_SD_082: Service Available State
    • Satisfies: feat_req_someipsd_632
  • REQ_SD_083: Offer Service Generation
    • Satisfies: feat_req_someipsd_633
  • REQ_SD_083_E01: Error - SD Multiple Subscriptions Same Client
  • REQ_SD_084: Stop Offer Generation
    • Satisfies: feat_req_someipsd_634
  • REQ_SD_090: Subscribe Eventgroup Request
    • Satisfies: feat_req_someipsd_629
  • REQ_SD_091: Subscribe Eventgroup Acknowledgment
    • Satisfies: feat_req_someipsd_630
  • REQ_SD_092: Subscribe Eventgroup Negative Acknowledgment
    • Satisfies: feat_req_someipsd_630
  • REQ_SD_093: Subscription Renewal
    • Satisfies: feat_req_someipsd_748
  • REQ_SD_094: Stop Subscribe Generation
    • Satisfies: feat_req_someipsd_629
  • REQ_SD_100: Initial Offer Delay
    • Satisfies: feat_req_someipsd_425
  • REQ_SD_101: Offer Repetition
    • Satisfies: feat_req_someipsd_425
  • REQ_SD_102: Cyclic Offer
    • Satisfies: feat_req_someipsd_425
  • REQ_SD_103: Find Repetition
    • Satisfies: feat_req_someipsd_632
  • REQ_SD_110: SD Initial Wait Phase
    • Satisfies: feat_req_someipsd_63, feat_req_someipsd_64, feat_req_someipsd_65, feat_req_someipsd_773
  • REQ_SD_111: SD Repetition Phase
    • Satisfies: feat_req_someipsd_67, feat_req_someipsd_73, feat_req_someipsd_76, feat_req_someipsd_867
  • REQ_SD_112: SD Main Phase
    • Satisfies: feat_req_someipsd_79, feat_req_someipsd_80, feat_req_someipsd_81, feat_req_someipsd_425, feat_req_someipsd_866
  • REQ_SD_113: SD Shutdown Behavior
    • Satisfies: feat_req_someipsd_820, feat_req_someipsd_821, feat_req_someipsd_830
  • REQ_SD_113_E01: Error - SD Server Offers During Shutdown
  • REQ_SD_114: FindService Entry Processing
    • Satisfies: feat_req_someipsd_238, feat_req_someipsd_239, feat_req_someipsd_626, feat_req_someipsd_632
  • REQ_SD_115: OfferService Entry Processing
    • Satisfies: feat_req_someipsd_252, feat_req_someipsd_253, feat_req_someipsd_633
  • REQ_SD_115_E01: Error - SD Offer with Invalid Endpoint
  • REQ_SD_115_E02: Error - SD Duplicate Offer Handling
  • REQ_SD_116: StopOfferService Entry Processing
    • Satisfies: feat_req_someipsd_634, feat_req_someipsd_681
  • REQ_SD_116_E01: Error - SD Subscription to Unavailable Service
  • REQ_SD_116_E02: Error - SD ACK Timeout
  • REQ_SD_117: SubscribeEventgroup Entry Processing
    • Satisfies: feat_req_someipsd_321, feat_req_someipsd_322, feat_req_someipsd_629
  • REQ_SD_118: StopSubscribeEventgroup Processing
    • Satisfies: feat_req_someipsd_433, feat_req_someipsd_629
  • REQ_SD_119: SubscribeEventgroupAck Processing
    • Satisfies: feat_req_someipsd_613, feat_req_someipsd_614, feat_req_someipsd_630
  • REQ_SD_119_E01: Error - SD Unknown Entry Type
  • REQ_SD_120: SubscribeEventgroupNack Processing
    • Satisfies: feat_req_someipsd_618, feat_req_someipsd_630
  • REQ_SD_120_E01: Error - SD Option Index Out of Range
  • REQ_SD_121: Load Balancing Option
    • Satisfies: feat_req_someipsd_145, feat_req_someipsd_174, feat_req_someipsd_175
  • REQ_SD_122: IPv4 SD Endpoint Option
    • Satisfies: feat_req_someipsd_1081, feat_req_someipsd_1086
  • REQ_SD_123: IPv6 SD Endpoint Option
    • Satisfies: feat_req_someipsd_1135
  • REQ_SD_123_E01: Error - SD Invalid Multicast Address in Option
  • REQ_SD_124: Option Run Referencing
    • Satisfies: feat_req_someipsd_335, feat_req_someipsd_336, feat_req_someipsd_341
  • REQ_SD_125: Handling Missing Options
    • Satisfies: feat_req_someipsd_1142
  • REQ_SD_126: Handling Redundant Options
    • Satisfies: feat_req_someipsd_1143, feat_req_someipsd_1144, feat_req_someipsd_1085
  • REQ_SD_127: Handling Conflicting Options
    • Satisfies: feat_req_someipsd_1145, feat_req_someipsd_1146
  • REQ_SD_130: Server Service State Machine
    • Satisfies: feat_req_someipsd_627, feat_req_someipsd_628, feat_req_someipsd_629
  • REQ_SD_131: Client Service State Machine
    • Satisfies: feat_req_someipsd_627, feat_req_someipsd_628, feat_req_someipsd_630
  • REQ_SD_132: Eventgroup Subscription State Machine
    • Satisfies: feat_req_someipsd_632, feat_req_someipsd_633, feat_req_someipsd_634
  • REQ_SD_134_E01: Error - SD Multicast Send Failure
  • REQ_SD_140: Service Endpoint Association
    • Satisfies: feat_req_someipsd_810, feat_req_someipsd_815
  • REQ_SD_141: Multicast Endpoint Association
    • Satisfies: feat_req_someipsd_722, feat_req_someipsd_723
  • REQ_SD_142: Initial Event Sending
    • Satisfies: feat_req_someipsd_789, feat_req_someipsd_833
  • REQ_SD_150: SD Malformed Message Handling
    • Satisfies: feat_req_someipsd_900, feat_req_someipsd_1220
  • REQ_SD_151: SD Invalid Entry Handling
    • Satisfies: feat_req_someipsd_1141, feat_req_someipsd_1233
  • REQ_SD_152: SD TTL Expiry Handling
    • Satisfies: feat_req_someipsd_681, feat_req_someipsd_682, feat_req_someipsd_748
  • REQ_SD_160: SD Multicast Transmission
    • Satisfies: feat_req_someipsd_100, feat_req_someipsd_105
  • REQ_SD_161: SD Unicast Response
    • Satisfies: feat_req_someipsd_90, feat_req_someipsd_91, feat_req_someipsd_826
  • REQ_SD_170: SD Session ID Management
    • Satisfies: feat_req_someipsd_150, feat_req_someipsd_97
  • REQ_SD_171: SD Reboot Detection Response
    • Satisfies: feat_req_someipsd_764, feat_req_someipsd_765, feat_req_someipsd_872
  • REQ_SD_180: Minor Version Matching
    • Satisfies: feat_req_someipsd_238, feat_req_someipsd_736
  • REQ_SD_200A: SD Message Structure - Flags and Reserved
    • Satisfies: feat_req_someipsd_38, feat_req_someipsd_39, feat_req_someipsd_40
  • REQ_SD_200B: SD Entries Array Format
    • Satisfies: feat_req_someipsd_41, feat_req_someipsd_42, feat_req_someipsd_44
  • REQ_SD_200C: SD Options Array Format
    • Satisfies: feat_req_someipsd_1, feat_req_someipsd_2, feat_req_someipsd_13
  • REQ_SD_201: SD Transport Requirements
    • Satisfies: feat_req_someipsd_46, feat_req_someipsd_47
  • REQ_SD_202: SD ECU Internal Interface
    • 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
  • REQ_SD_210: SD Header Field Parsing
    • Satisfies: feat_req_someipsd_59, feat_req_someipsd_61, feat_req_someipsd_62
  • REQ_SD_211: SD Session ID Handling
    • Satisfies: feat_req_someipsd_96, feat_req_someipsd_94, feat_req_someipsd_863
  • REQ_SD_212: SD Reboot Flag Management
    • Satisfies: feat_req_someipsd_83, feat_req_someipsd_84, feat_req_someipsd_85, feat_req_someipsd_87, feat_req_someipsd_89
  • REQ_SD_220: SD Entry Common Fields
    • 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
  • REQ_SD_221: SD Service Entry Format
    • Satisfies: feat_req_someipsd_133, feat_req_someipsd_137, feat_req_someipsd_138, feat_req_someipsd_139, feat_req_someipsd_140
  • REQ_SD_222: SD Eventgroup Entry Format
    • Satisfies: feat_req_someipsd_149, feat_req_someipsd_151, feat_req_someipsd_152, feat_req_someipsd_157, feat_req_someipsd_158
  • REQ_SD_222_E01: Error - SD TTL Overflow Prevention
  • REQ_SD_223: SD Entry Multiple Entries per Message
    • 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
  • REQ_SD_230: SD Configuration Option
    • Satisfies: feat_req_someipsd_182, feat_req_someipsd_183, feat_req_someipsd_184
  • REQ_SD_231: SD Load Balancing Option Format
    • Satisfies: feat_req_someipsd_146, feat_req_someipsd_770
  • REQ_SD_232: SD IPv4 Endpoint Option Format
    • Satisfies: feat_req_someipsd_197, feat_req_someipsd_199, feat_req_someipsd_200, feat_req_someipsd_201
  • REQ_SD_233: SD IPv6 Endpoint Option Format
    • Satisfies: feat_req_someipsd_203, feat_req_someipsd_204
  • REQ_SD_234: SD IPv4 Multicast Option Format
    • Satisfies: feat_req_someipsd_724, feat_req_someipsd_725, feat_req_someipsd_733, feat_req_someipsd_749
  • REQ_SD_235: SD IPv6 Multicast Option Format
    • Satisfies: feat_req_someipsd_737, feat_req_someipsd_738, feat_req_someipsd_739, feat_req_someipsd_750
  • REQ_SD_236: SD IPv4 SD Endpoint Option Format
    • Satisfies: feat_req_someipsd_1080, feat_req_someipsd_1082, feat_req_someipsd_1083, feat_req_someipsd_1084, feat_req_someipsd_1087
  • REQ_SD_240: SD Option Index and Run Length
    • Satisfies: feat_req_someipsd_332, feat_req_someipsd_333, feat_req_someipsd_342, feat_req_someipsd_343
  • REQ_SD_241: SD Option Run Processing
    • Satisfies: feat_req_someipsd_346, feat_req_someipsd_347, feat_req_someipsd_348, feat_req_someipsd_351
  • REQ_SD_242: SD Option Validation
    • Satisfies: feat_req_someipsd_1095, feat_req_someipsd_1097, feat_req_someipsd_1098, feat_req_someipsd_1099, feat_req_someipsd_1100
  • REQ_SD_243: SD Endpoint Option Processing
    • Satisfies: feat_req_someipsd_1101, feat_req_someipsd_1102, feat_req_someipsd_1103
  • REQ_SD_250: SD FindService Message Construction
    • Satisfies: feat_req_someipsd_217, feat_req_someipsd_218, feat_req_someipsd_219, feat_req_someipsd_220
  • REQ_SD_251: SD FindService Response Behavior
    • Satisfies: feat_req_someipsd_224, feat_req_someipsd_225, feat_req_someipsd_227, feat_req_someipsd_766, feat_req_someipsd_767
  • REQ_SD_260: SD OfferService Message Construction
    • Satisfies: feat_req_someipsd_221, feat_req_someipsd_233, feat_req_someipsd_235, feat_req_someipsd_236, feat_req_someipsd_237
  • REQ_SD_261: SD StopOfferService Construction
    • Satisfies: feat_req_someipsd_256, feat_req_someipsd_261, feat_req_someipsd_262
  • REQ_SD_270: SD SubscribeEventgroup Construction
    • 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
  • REQ_SD_271: SD Subscription Lifecycle
    • 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
  • REQ_SD_272: SD SubscribeEventgroupAck Construction
    • Satisfies: feat_req_someipsd_612, feat_req_someipsd_613, feat_req_someipsd_614, feat_req_someipsd_619, feat_req_someipsd_844
  • REQ_SD_273: SD SubscribeEventgroupNack Construction
    • Satisfies: feat_req_someipsd_617, feat_req_someipsd_869, feat_req_someipsd_870
  • REQ_SD_274: SD StopSubscribeEventgroup Construction
    • Satisfies: feat_req_someipsd_433, feat_req_someipsd_440, feat_req_someipsd_441, feat_req_someipsd_442
  • REQ_SD_280: SD Timing Configuration
    • Satisfies: feat_req_someipsd_66, feat_req_someipsd_68, feat_req_someipsd_72
  • REQ_SD_281: SD Phase Transitions
    • Satisfies: feat_req_someipsd_74, feat_req_someipsd_75, feat_req_someipsd_77, feat_req_someipsd_419, feat_req_someipsd_422
  • REQ_SD_282: SD Multicast Group Management
    • Satisfies: feat_req_someipsd_101, feat_req_someipsd_102, feat_req_someipsd_103, feat_req_someipsd_104
  • REQ_SD_283: SD Response Delay Configuration
    • Satisfies: feat_req_someipsd_106, feat_req_someipsd_107, feat_req_someipsd_109
  • REQ_SD_290: SD Server Endpoint Registration
    • Satisfies: feat_req_someipsd_806, feat_req_someipsd_807, feat_req_someipsd_808, feat_req_someipsd_809, feat_req_someipsd_811
  • REQ_SD_291: SD Client Endpoint Resolution
    • Satisfies: feat_req_someipsd_812, feat_req_someipsd_813, feat_req_someipsd_814, feat_req_someipsd_816
  • REQ_SD_292: SD Multicast Endpoint Handling
    • 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
  • REQ_SD_293: SD Endpoint Validation
    • 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
  • REQ_SD_300: SD Service Offer Processing
    • Satisfies: feat_req_someipsd_762, feat_req_someipsd_763, feat_req_someipsd_828, feat_req_someipsd_829
  • REQ_SD_301: SD Service State Tracking
    • Satisfies: feat_req_someipsd_771, feat_req_someipsd_772, feat_req_someipsd_776, feat_req_someipsd_777, feat_req_someipsd_778
  • REQ_SD_302: SD Subscription State Tracking
    • Satisfies: feat_req_someipsd_779, feat_req_someipsd_780, feat_req_someipsd_781, feat_req_someipsd_782, feat_req_someipsd_783
  • REQ_SD_303: SD Service Registry Management
    • Satisfies: feat_req_someipsd_784, feat_req_someipsd_785, feat_req_someipsd_786, feat_req_someipsd_787, feat_req_someipsd_788
  • REQ_SD_310: SD Graceful Shutdown
    • Satisfies: feat_req_someipsd_818, feat_req_someipsd_819, feat_req_someipsd_822, feat_req_someipsd_823, feat_req_someipsd_824
  • REQ_SD_311: SD Reboot Recovery
    • Satisfies: feat_req_someipsd_871, feat_req_someipsd_793, feat_req_someipsd_794
  • REQ_SD_312: SD Service Stop Handling
    • Satisfies: feat_req_someipsd_831, feat_req_someipsd_832, feat_req_someipsd_834
  • REQ_SD_320: SD Non-SOME/IP Service Announcement
    • 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
  • REQ_SD_330: SD Initial Event Sending
    • Satisfies: feat_req_someipsd_833, feat_req_someipsd_1166, feat_req_someipsd_1167, feat_req_someipsd_1168
  • REQ_SD_331: SD Initial Event Requesting
    • Satisfies: feat_req_someipsd_1191, feat_req_someipsd_1192, feat_req_someipsd_1193, feat_req_someipsd_946
  • REQ_SD_340: SD Error Handling
    • Satisfies: feat_req_someipsd_1162, feat_req_someipsd_1164, feat_req_someipsd_1221, feat_req_someipsd_1227, feat_req_someipsd_1228
  • REQ_SD_341: SD Option Conflict Resolution
    • Satisfies: feat_req_someipsd_1140, feat_req_someipsd_1147, feat_req_someipsd_1149
  • REQ_SD_342: SD Security Considerations
    • 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
  • REQ_SD_343: SD IPv4 SD Endpoint Processing
    • 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
  • REQ_SD_344: SD Mandatory Feature Set
    • 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
  • REQ_SD_345: SD Unicast Flag Processing
    • Satisfies: feat_req_someipsd_1187, feat_req_someipsd_1188
  • REQ_SD_346: SD Service State Machine Details
    • Satisfies: feat_req_someipsd_624, feat_req_someipsd_631, feat_req_someipsd_684, feat_req_someipsd_691
  • REQ_SD_347: SD Subscription Renewal
    • Satisfies: feat_req_someipsd_839, feat_req_someipsd_840, feat_req_someipsd_841, feat_req_someipsd_842, feat_req_someipsd_843
  • REQ_SD_348: SD Publish/Subscribe Event Flow
    • Satisfies: feat_req_someipsd_836, feat_req_someipsd_837, feat_req_someipsd_838, feat_req_someipsd_1239
  • REQ_SD_349: SD Duplicate Offer Handling
    • Satisfies: feat_req_someipsd_844, feat_req_someipsd_848, feat_req_someipsd_849, feat_req_someipsd_850, feat_req_someipsd_851
  • REQ_SD_350: SD Entry Aggregation
    • Satisfies: feat_req_someipsd_852, feat_req_someipsd_853, feat_req_someipsd_854, feat_req_someipsd_855, feat_req_someipsd_856
  • REQ_SD_351: SD Startup Behavior
    • Satisfies: feat_req_someipsd_857, feat_req_someipsd_858, feat_req_someipsd_862, feat_req_someipsd_864
  • REQ_SD_352: SD Advanced Reboot Detection
    • Satisfies: feat_req_someipsd_796, feat_req_someipsd_797, feat_req_someipsd_798
  • REQ_SD_353: SD Service Timeout Handling
    • Satisfies: feat_req_someipsd_790, feat_req_someipsd_791
  • REQ_SD_354: SD Subscribe Multicast Handling
    • Satisfies: feat_req_someipsd_747, feat_req_someipsd_1134, feat_req_someipsd_1136, feat_req_someipsd_1137
  • REQ_SD_355: SD Subscription Server State
    • Satisfies: feat_req_someipsd_877, feat_req_someipsd_878, feat_req_someipsd_879
  • REQ_SD_356: SD Service Registration
    • Satisfies: feat_req_someipsd_1194, feat_req_someipsd_1195, feat_req_someipsd_1262, feat_req_someipsd_1297
  • REQ_SER_001: Serialize uint8 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_682, feat_req_someip_171
  • REQ_SER_001_E01: Error - uint8 Buffer Overflow on Serialize
  • REQ_SER_002: Serialize uint16 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_002_E01: Error - uint16 Buffer Overflow on Serialize
  • REQ_SER_003: Serialize uint32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_003_E01: Error - uint32 Buffer Overflow on Serialize
  • REQ_SER_004: Serialize uint64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_623, feat_req_someip_682
  • REQ_SER_004_E01: Error - uint64 Buffer Overflow on Serialize
  • REQ_SER_005: Deserialize uint8 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_682
  • REQ_SER_005_E01: Error - uint8 Insufficient Data on Deserialize
  • REQ_SER_006: Deserialize uint16 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_006_E01: Error - uint16 Insufficient Data on Deserialize
  • REQ_SER_007: Deserialize uint32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_007_E01: Error - uint32 Insufficient Data on Deserialize
  • REQ_SER_008: Deserialize uint64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_623, feat_req_someip_682
  • REQ_SER_008_E01: Error - uint64 Insufficient Data on Deserialize
  • REQ_SER_010: Serialize int8 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_682
  • REQ_SER_010_E01: Error - Signed Integer Overflow Detection
  • REQ_SER_011: Serialize int16 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_012: Serialize int32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_013: Serialize int64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_623, feat_req_someip_682
  • REQ_SER_014: Deserialize int8 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_682
  • REQ_SER_015: Deserialize int16 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_016: Deserialize int32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_682
  • REQ_SER_017: Deserialize int64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224, feat_req_someip_623, feat_req_someip_682
  • REQ_SER_020: Serialize Boolean True
    • Satisfies: feat_req_someip_172, feat_req_someip_817
  • REQ_SER_020_E01: Error - Boolean Buffer Overflow on Serialize
  • REQ_SER_021: Serialize Boolean False
    • Satisfies: feat_req_someip_172, feat_req_someip_817
  • REQ_SER_022: Deserialize Boolean False
    • Satisfies: feat_req_someip_172, feat_req_someip_817
  • REQ_SER_022_E01: Error - Boolean Insufficient Data on Deserialize
  • REQ_SER_023: Deserialize Boolean True from 0x01
    • Satisfies: feat_req_someip_172, feat_req_someip_817
  • REQ_SER_024: Deserialize Boolean True from Non-Zero Values
    • Satisfies: feat_req_someip_172, feat_req_someip_817
  • REQ_SER_030: Serialize float32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224
  • REQ_SER_030_E01: Error - float32 Buffer Overflow on Serialize
  • REQ_SER_031: Serialize float64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224
  • REQ_SER_031_E01: Error - float64 Buffer Overflow on Serialize
  • REQ_SER_032: Deserialize float32 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224
  • REQ_SER_032_E01: Error - float32 Insufficient Data on Deserialize
  • REQ_SER_033: Deserialize float64 Type
    • Satisfies: feat_req_someip_172, feat_req_someip_224
  • REQ_SER_033_E01: Error - float64 Insufficient Data on Deserialize
  • REQ_SER_034: Preserve float32 Special Values
    • Satisfies: feat_req_someip_172
  • REQ_SER_034_E01: Error - Float NaN Comparison
  • REQ_SER_035: Preserve float64 Special Values
    • Satisfies: feat_req_someip_172
  • REQ_SER_040: Serialize Fixed-Length Array
    • Satisfies: feat_req_someip_241, feat_req_someip_243, feat_req_someip_240, feat_req_someip_242, feat_req_someip_694
  • REQ_SER_040_E01: Error - Array Exceeds Buffer on Serialize
  • REQ_SER_040_E02: Error - Nested Array Depth Limit
  • REQ_SER_041: Calculate Fixed-Length Array Size
    • Satisfies: feat_req_someip_241, feat_req_someip_243, feat_req_someip_244, feat_req_someip_247
  • REQ_SER_042: Deserialize Fixed-Length Array
    • Satisfies: feat_req_someip_241, feat_req_someip_243
  • REQ_SER_042_E01: Error - Fixed Array Size Mismatch
  • REQ_SER_043: Serialize Dynamic Array Length Field
    • Satisfies: feat_req_someip_254, feat_req_someip_257, feat_req_someip_581, feat_req_someip_253, feat_req_someip_261
  • REQ_SER_043_E01: Error - Array Length Field Overflow
  • REQ_SER_043_E02: Error - Dynamic Array Length Exceeds Maximum
  • REQ_SER_044: Dynamic Array Length Field Precedes Data
    • Satisfies: feat_req_someip_254, feat_req_someip_255, feat_req_someip_256, feat_req_someip_258, feat_req_someip_673, feat_req_someip_674
  • REQ_SER_045: Serialize Empty Dynamic Array
    • Satisfies: feat_req_someip_254, feat_req_someip_696
  • REQ_SER_046: Deserialize Dynamic Array Length
    • Satisfies: feat_req_someip_254, feat_req_someip_257
  • REQ_SER_046_E01: Error - Insufficient Data for Array Length
  • REQ_SER_047: Deserialize Dynamic Array Elements
    • Satisfies: feat_req_someip_254, feat_req_someip_257
  • REQ_SER_047_E01: Error - Insufficient Data for Array Elements
  • REQ_SER_047_E02: Error - Array Element Count Mismatch
  • REQ_SER_050: Serialize String UTF-8 Encoding
    • Satisfies: feat_req_someip_233, feat_req_someip_234, feat_req_someip_235, feat_req_someip_687, feat_req_someip_236, feat_req_someip_665
  • REQ_SER_050_E01: Error - String Invalid UTF-8 Sequence
  • REQ_SER_050_E02: Error - String Buffer Overflow on Serialize
  • REQ_SER_051: Serialize String Length Field
    • Satisfies: feat_req_someip_237, feat_req_someip_582, feat_req_someip_800
  • REQ_SER_051_E01: Error - String Length Exceeds Buffer
  • REQ_SER_052: Serialize String BOM
    • Satisfies: feat_req_someip_662, feat_req_someip_800
  • REQ_SER_053: Serialize String Null Terminator
    • Satisfies: feat_req_someip_233, feat_req_someip_687
  • REQ_SER_053_E01: Error - String Missing Null Terminator
  • REQ_SER_054: Serialize Empty String
    • Satisfies: feat_req_someip_237
  • REQ_SER_055: Deserialize String Length
    • Satisfies: feat_req_someip_237, feat_req_someip_562, feat_req_someip_582
  • REQ_SER_055_E01: Error - String Insufficient Data on Deserialize
  • REQ_SER_056: Deserialize String Content
    • Satisfies: feat_req_someip_237
  • REQ_SER_056_E01: Error - String Embedded Null
  • REQ_SER_060: Serialize Struct Members Sequentially
    • Satisfies: feat_req_someip_230, feat_req_someip_575, feat_req_someip_167, feat_req_someip_229, feat_req_someip_652
  • REQ_SER_060_E01: Error - Incomplete Struct Data
  • REQ_SER_060_E02: Error - Struct Buffer Overflow on Serialize
  • REQ_SER_061: No Implicit Padding in Structs
    • Satisfies: feat_req_someip_574, feat_req_someip_231, feat_req_someip_671
  • REQ_SER_062: Explicit Alignment Configuration
    • Satisfies: feat_req_someip_169, feat_req_someip_711
  • REQ_SER_063: Deserialize Struct Members Sequentially
    • Satisfies: feat_req_someip_168, feat_req_someip_230
  • REQ_SER_070: Pre-Check Buffer Capacity
    • Satisfies: feat_req_someip_168
  • REQ_SER_070_E01: Error - Null Buffer Pointer
  • REQ_SER_070_E02: Error - Zero Capacity Buffer
  • REQ_SER_071: Return Error on Buffer Overflow
    • Satisfies: feat_req_someip_168
  • REQ_SER_072: No Partial Writes on Overflow
    • Satisfies: feat_req_someip_168
  • REQ_SER_073: Track Buffer Position
    • Satisfies: feat_req_someip_168
  • REQ_SER_073_E01: Error - Deserialization Position Beyond Buffer
  • REQ_SER_074: Get Remaining Buffer Capacity
    • Satisfies: feat_req_someip_168
  • REQ_SER_075: Reset Buffer Position
    • Satisfies: feat_req_someip_168
  • REQ_SER_080: Align to Boundary
    • Satisfies: feat_req_someip_169, feat_req_someip_711
  • REQ_SER_080_E01: Error - Alignment Exceeds Buffer
  • REQ_SER_080_E02: Error - Multiple Alignment Overflows
  • REQ_SER_081: Alignment Padding Value
    • Satisfies: feat_req_someip_169, feat_req_someip_711
  • REQ_SER_082: Skip Padding on Deserialize
    • Satisfies: feat_req_someip_169, feat_req_someip_711
  • REQ_SER_090: Serialize Enumeration Type
    • Satisfies: feat_req_someip_651, feat_req_someip_650, feat_req_someip_692, feat_req_someip_693
  • REQ_SER_090_E01: Error - Enum Value Out of Defined Range
  • REQ_SER_091: Deserialize Undefined Enumeration Values
    • Satisfies: feat_req_someip_799
  • REQ_SER_092: Serialize Bitfield as Basic Type
    • Satisfies: feat_req_someip_689, feat_req_someip_688
  • REQ_SER_093: Bitfield Name Definition Support
    • Satisfies: feat_req_someip_690, feat_req_someip_691
  • REQ_SER_094A: Union Serialize with Type Field
    • Satisfies: feat_req_someip_263, feat_req_someip_264, feat_req_someip_262
  • REQ_SER_094B: Union Deserialize with Type Dispatch
    • Satisfies: feat_req_someip_273, feat_req_someip_274, feat_req_someip_275
  • REQ_SER_094C: Union Padding for Uniform Size
    • Satisfies: feat_req_someip_276, feat_req_someip_277, feat_req_someip_278, feat_req_someip_289, feat_req_someip_299
  • REQ_SER_094_E01: Error - Union Unknown Type ID
  • REQ_SER_094_E02: Error - Union Data Size Mismatch
  • REQ_SER_095: Union Length Field Configuration
    • Satisfies: feat_req_someip_272, feat_req_someip_563, feat_req_someip_566, feat_req_someip_571, feat_req_someip_300
  • REQ_SER_096: Union Type Field Configuration
    • Satisfies: feat_req_someip_564, feat_req_someip_565, feat_req_someip_573
  • REQ_SER_097: Union Zero-Length Same-Size Constraint
    • Satisfies: feat_req_someip_572, feat_req_someip_583
  • REQ_SER_098: Optional Parameter as Array
    • Satisfies: feat_req_someip_252, feat_req_someip_251, feat_req_someip_170
  • REQ_SER_099: Multidimensional Array Row-Major Order
    • Satisfies: feat_req_someip_246, feat_req_someip_245
  • REQ_SER_100: Multidimensional Dynamic Array Length Fields
    • Satisfies: feat_req_someip_259, feat_req_someip_260
  • REQ_SER_101: Dynamic Array Length Field Configuration
    • Satisfies: feat_req_someip_621
  • REQ_SER_102: UTF-16 String Support
    • Satisfies: feat_req_someip_234, feat_req_someip_639, feat_req_someip_640, feat_req_someip_641, feat_req_someip_642
  • REQ_SER_103: String BOM Validation
    • Satisfies: feat_req_someip_662, feat_req_someip_666
  • REQ_SER_104: Fixed-Length String Handling
    • Satisfies: feat_req_someip_232, feat_req_someip_233, feat_req_someip_239
  • REQ_SER_105: String Encoding Specification
    • Satisfies: feat_req_someip_235, feat_req_someip_238
  • REQ_SER_106: Struct Length Field Support
    • Satisfies: feat_req_someip_600, feat_req_someip_601, feat_req_someip_602
  • REQ_SER_107: Misaligned Struct Warning
    • Satisfies: feat_req_someip_577, feat_req_someip_671
  • REQ_TP_001: Calculate Segment Count
    • Satisfies: feat_req_someiptp_760, feat_req_someiptp_764, feat_req_someiptp_759
  • REQ_TP_001_E01: Error - Message Too Large
  • REQ_TP_001_E02: Error - Segment Creation Failure
  • REQ_TP_001_E03: Error - Empty Message Segmentation
  • REQ_TP_002: Maximum Segment Payload Size
    • Satisfies: feat_req_someiptp_773
  • REQ_TP_003: Segment Alignment
    • Satisfies: feat_req_someiptp_772
  • REQ_TP_004: Last Segment Size
    • Satisfies: feat_req_someiptp_772
  • REQ_TP_005: Preserve Original Message Fields
    • Satisfies: feat_req_someiptp_762, feat_req_someiptp_774
  • REQ_TP_006: Same Session ID for All Segments
    • Satisfies: feat_req_someiptp_763
  • REQ_TP_007: Set TP Flag in Message Type
    • Satisfies: feat_req_someiptp_765
  • REQ_TP_008: Preserve Base Message Type
    • Satisfies: feat_req_someiptp_765, feat_req_someiptp_774
  • REQ_TP_010: TP Header Position
    • Satisfies: feat_req_someiptp_766
  • REQ_TP_011: TP Header Size
    • Satisfies: feat_req_someiptp_766
  • REQ_TP_012: Offset Field Position
    • Satisfies: feat_req_someiptp_766, feat_req_someiptp_768
  • REQ_TP_013: Offset Value Calculation
    • Satisfies: feat_req_someiptp_767, feat_req_someiptp_768
  • REQ_TP_013_E01: Error - Invalid Offset Value
  • REQ_TP_014: First Segment Offset
    • Satisfies: feat_req_someiptp_767
  • REQ_TP_015: Offset 16-Byte Alignment
    • Satisfies: feat_req_someiptp_768
  • REQ_TP_015_E01: Error - Offset Not Aligned on Receive
  • REQ_TP_016: Reserved Flags Position
    • Satisfies: feat_req_someiptp_769
  • REQ_TP_017: Reserved Flags Value on Send
    • Satisfies: feat_req_someiptp_769
  • REQ_TP_018: Reserved Flags Ignored on Receive
    • Satisfies: feat_req_someiptp_769
  • REQ_TP_019: More Segments Flag Position
    • Satisfies: feat_req_someiptp_770
  • REQ_TP_020: More Segments Flag Set for Non-Last
    • Satisfies: feat_req_someiptp_770
  • REQ_TP_021: More Segments Flag Clear for Last
    • Satisfies: feat_req_someiptp_770
  • REQ_TP_022: Segment Length Field
    • Satisfies: feat_req_someiptp_771
  • REQ_TP_030: Allocate Reassembly Buffer
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_782
  • REQ_TP_030_E01: Error - Buffer Overflow on Large Message
  • REQ_TP_030_E02: Error - Maximum Concurrent Transfers
  • REQ_TP_031: Buffer Identification
    • Satisfies: feat_req_someiptp_781, feat_req_someiptp_794
  • REQ_TP_032: Buffer Size Estimation
    • Satisfies: feat_req_someiptp_787
  • REQ_TP_033: Buffer Resize on Final Segment
    • Satisfies: feat_req_someiptp_770, feat_req_someiptp_783
  • REQ_TP_034: Store Segment by Offset
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_789
  • REQ_TP_035: Track Received Segments
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_789
  • REQ_TP_036: Detect Duplicate Segments
    • Satisfies: feat_req_someiptp_780
  • REQ_TP_037: Detect Overlapping Segments
    • Satisfies: feat_req_someiptp_780
  • REQ_TP_038: Handle Out-of-Order Segments
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_789, feat_req_someiptp_790
  • REQ_TP_039: Complete on Last Segment with No Gaps
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_783
  • REQ_TP_039_E01: Error - Missing Segments at Completion
  • REQ_TP_040: Delayed Completion for Out-of-Order Last
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_041: Deliver Reassembled Message
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_783
  • REQ_TP_042: Release Buffer After Delivery
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_043: Error - Total Length Inconsistency
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_792
  • REQ_TP_050: Start Reassembly Timer
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_796
  • REQ_TP_050_E01: Error - Timer Creation Failure
  • REQ_TP_050_E02: Error - Timer Already Active
  • REQ_TP_051: Configurable Timeout Value
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_052: Timer Reset on Segment (Optional)
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_053: Timer Expiry Detection
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_796
  • REQ_TP_054: Discard Buffer on Timeout
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_796
  • REQ_TP_055: Release Buffer Resources on Timeout
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_056: Report Timeout Error
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_792
  • REQ_TP_057: Log Timeout Details
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_060: Track Segmentation Statistics
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_801
  • REQ_TP_061: Track Reassembly Statistics
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_801
  • REQ_TP_062: Track Error Statistics
    • Satisfies: feat_req_someiptp_774, feat_req_someiptp_792
  • REQ_TP_063: Query Active Reassemblies
    • Satisfies: feat_req_someiptp_774
  • REQ_TP_070: Segment Only Configured Messages
    • Satisfies: feat_req_someiptp_788, feat_req_someiptp_775
  • REQ_TP_071: Send Segments in Ascending Order
    • Satisfies: feat_req_someiptp_777
  • REQ_TP_072: Uniform Segment Size
    • Satisfies: feat_req_someiptp_778, feat_req_someiptp_779
  • REQ_TP_072_E01: Error - Segment Size Exceeds Maximum
  • REQ_TP_073: No Overlapping or Duplicate Segments
    • Satisfies: feat_req_someiptp_780
  • REQ_TP_074: Configured Client IDs for TP
    • Satisfies: feat_req_someiptp_786
  • REQ_TP_075: Traffic Shaping for Segments
    • Satisfies: feat_req_someiptp_801
  • REQ_TP_076: Session ID Based Reassembly Detection
    • Satisfies: feat_req_someiptp_793, feat_req_someiptp_795, feat_req_someiptp_776
  • REQ_TP_076_E01: Error - Reassembly Buffer Full
  • REQ_TP_076_E02: Error - TP Reassembly Result Exceeds Maximum Message Size
  • REQ_TP_077: Return Code from Last Segment
    • Satisfies: feat_req_someiptp_784
  • REQ_TP_078: Clear TP Flag After Reassembly
    • Satisfies: feat_req_someiptp_785
  • REQ_TP_079: Cancel Reassembly on Resource Exhaustion
    • Satisfies: feat_req_someiptp_796
  • REQ_TP_080: No Cross-Message Reordering
    • Satisfies: feat_req_someiptp_802, feat_req_someiptp_803
  • REQ_TP_081: Overlapping Segment Handling
    • Satisfies: feat_req_someiptp_810, feat_req_someiptp_797, feat_req_someiptp_820
  • REQ_TP_082: TP Error Handling
    • Satisfies: feat_req_someiptp_792, feat_req_someiptp_832
  • REQ_TP_082_E01: Error - TP Message Type Mismatch
  • REQ_TP_082_E02: Error - TP Segment With Wrong Protocol Version
  • REQ_TP_082_E03: Error - Invalid TP Offset Alignment
  • REQ_TP_082_E04: Error - TP Zero-Length Segment
  • REQ_TRANSPORT_001A: UDP Bind and Unicast Send/Receive
    • Satisfies: feat_req_someip_32, feat_req_someip_318, feat_req_someip_319, feat_req_someip_33
  • REQ_TRANSPORT_001B: UDP Multicast Support
    • Satisfies: feat_req_someip_584, feat_req_someip_811, feat_req_someip_315, feat_req_someip_316
  • REQ_TRANSPORT_001C: Non-Blocking I/O and Thread Safety
    • Satisfies: feat_req_someip_659, feat_req_someip_664, feat_req_someip_317
  • REQ_TRANSPORT_001_E01: Error - UDP Send Failure
  • REQ_TRANSPORT_001_E02: Error - UDP Bind Failure
  • REQ_TRANSPORT_001_E03: Error - UDP Receive Buffer Too Small
  • REQ_TRANSPORT_002A: TCP Client/Server Modes
    • Satisfies: feat_req_someip_32, feat_req_someip_325, feat_req_someip_323, feat_req_someip_324
  • REQ_TRANSPORT_002B: TCP Framing and State Management
    • Satisfies: feat_req_someip_585, feat_req_someip_644, feat_req_someip_645, feat_req_someip_661
  • REQ_TRANSPORT_002_E01: Error - TCP Connection Refused
  • REQ_TRANSPORT_002_E02: Error - TCP Connection Reset
  • REQ_TRANSPORT_002_E03: Error - TCP Message Framing Error
  • REQ_TRANSPORT_002_E04: Error - TCP Send on Disconnected Socket
  • REQ_TRANSPORT_003A: Connection State Tracking and Notification
    • Satisfies: feat_req_someip_326, feat_req_someip_644, feat_req_someip_646
  • REQ_TRANSPORT_003B: Graceful Shutdown and Error Handling
    • Satisfies: feat_req_someip_647, feat_req_someip_678, feat_req_someip_679, feat_req_someip_680
  • REQ_TRANSPORT_003_E01: Error - TCP Server Socket Exhaustion
  • REQ_TRANSPORT_004A: Retry Send on Transient Errors
    • Satisfies: feat_req_someip_429, feat_req_someip_430, feat_req_someip_434, feat_req_someip_435
  • REQ_TRANSPORT_004B: Socket Close/Reopen on Persistent Errors
    • Satisfies: feat_req_someip_436, feat_req_someip_437, feat_req_someip_438
  • REQ_TRANSPORT_004C: Error Logging with Detail
    • Satisfies: feat_req_someip_439, feat_req_someip_440, feat_req_someip_441
  • REQ_TRANSPORT_004D: Return Error Codes and Configurable Retry
    • Satisfies: feat_req_someip_326, feat_req_someip_371, feat_req_someip_442, feat_req_someip_443
  • REQ_TRANSPORT_005: Abstract Transport Interface
    • Satisfies: feat_req_someip_32, feat_req_someip_56, feat_req_someip_31
  • REQ_TRANSPORT_006: Endpoint Configuration
    • Satisfies: feat_req_someip_32, feat_req_someip_659, feat_req_someip_660, feat_req_someip_661, feat_req_someip_733
  • REQ_TRANSPORT_006_E01: Error - Endpoint Address Format Invalid
  • REQ_TRANSPORT_010: nPDU Feature Support
    • Satisfies: feat_req_someip_702, feat_req_someip_741, feat_req_someip_663
  • REQ_TRANSPORT_011: UDP Multicast Support
    • Satisfies: feat_req_someip_811, feat_req_someip_812, feat_req_someip_814
  • REQ_TRANSPORT_011_E01: Error - Multicast Join Failure
  • REQ_TRANSPORT_011_E02: Error - UDP Multicast TTL Configuration
  • REQ_TRANSPORT_012: Multicast Threshold Switching
    • Satisfies: feat_req_someip_813
  • REQ_TRANSPORT_013: Internal Message Multiplexing
    • Satisfies: feat_req_someip_732
  • REQ_TRANSPORT_014: Port Configuration
    • Satisfies: feat_req_someip_658, feat_req_someip_676, feat_req_someip_733
  • REQ_TRANSPORT_014_E01: Error - Port Already In Use
  • REQ_TRANSPORT_015: Ephemeral Port Range
    • Satisfies: feat_req_someip_661
  • REQ_TRANSPORT_016: Client-Initiated TCP Connection
    • Satisfies: feat_req_someip_646, feat_req_someip_647
  • REQ_TRANSPORT_016_E01: Error - TCP Reconnection Exhaustion
  • REQ_TRANSPORT_017: TCP Connection Sharing
    • Satisfies: feat_req_someip_644, feat_req_someip_645
  • REQ_TRANSPORT_018: TCP Connection Closure
    • Satisfies: feat_req_someip_678, feat_req_someip_679, feat_req_someip_680
  • REQ_TRANSPORT_019: TCP Timeout on Connection Loss
    • Satisfies: feat_req_someip_326, feat_req_someip_681
  • REQ_TRANSPORT_020: TCP Magic Cookie Messages
    • Satisfies: feat_req_someip_586, feat_req_someip_591, feat_req_someip_592, feat_req_someip_609, feat_req_someip_619
  • REQ_TRANSPORT_021: Magic Cookie Fallback Heuristic
    • Satisfies: feat_req_someip_593, feat_req_someip_594
  • REQ_TRANSPORT_022: Multiple Service Instance Port Binding
    • Satisfies: feat_req_someip_445, feat_req_someip_636, feat_req_someip_967, feat_req_someip_1079, feat_req_someip_444
  • REQ_TRANSPORT_023: Client Server Address Resolution
    • Satisfies: feat_req_someip_660, feat_req_someip_665
  • REQ_TRANSPORT_024: Unaligned Message Reception
    • Satisfies: feat_req_someip_664, feat_req_someip_668
  • REQ_TRANSPORT_025: Magic Cookie Message Format
    • Satisfies: feat_req_someip_589, feat_req_someip_607
Validation Details
Requirement REQ_SER_073: OK (implemented and tested)
Requirement REQ_SD_202: OK (implemented and tested)
Requirement REQ_MSG_032_E01: OK (implemented and tested)
Requirement REQ_MSG_004_E02: OK (implemented and tested)
Requirement REQ_COMPAT_021: OK (implemented and tested)
Requirement REQ_TRANSPORT_021: OK (implemented and tested)
Requirement REQ_MSG_012_E01: OK (implemented and tested)
Requirement REQ_MSG_063_E02: OK (implemented and tested)
Requirement REQ_SD_056: OK (implemented and tested)
Requirement REQ_SD_052: OK (implemented and tested)
Requirement REQ_TP_007: OK (implemented and tested)
Requirement REQ_SD_353: OK (implemented and tested)
Requirement REQ_SD_354: OK (implemented and tested)
Requirement REQ_SD_235: OK (implemented and tested)
Requirement REQ_ARCH_004: OK (implemented and tested)
Requirement REQ_TP_030_E01: OK (implemented and tested)
Requirement REQ_SD_142: OK (implemented and tested)
Requirement REQ_SER_005: OK (implemented and tested)
Requirement REQ_SD_115: OK (implemented and tested)
Requirement REQ_TP_006: OK (implemented and tested)
Requirement REQ_SER_006: OK (implemented and tested)
Requirement REQ_TRANSPORT_001_E01: OK (implemented and tested)
Requirement REQ_SER_080_E02: OK (implemented and tested)
Requirement REQ_MSG_121B: OK (implemented and tested)
Requirement REQ_SD_231: OK (implemented and tested)
Requirement REQ_SD_024: OK (implemented and tested)
Requirement REQ_SD_074: OK (implemented and tested)
Requirement REQ_MSG_014: OK (implemented and tested)
Requirement REQ_TP_012: OK (implemented and tested)
Requirement REQ_PLATFORM_ARCH_001: OK (implemented and tested)
Requirement REQ_SD_130: OK (implemented and tested)
Requirement REQ_SER_046: OK (implemented and tested)
Requirement REQ_MSG_002: OK (implemented and tested)
Requirement REQ_COMPAT_011: OK (implemented and tested)
Requirement REQ_SD_006: OK (implemented and tested)
Requirement REQ_TP_022: OK (implemented and tested)
Requirement REQ_SD_311: OK (implemented and tested)
Requirement REQ_ARCH_006: OK (implemented and tested)
Requirement REQ_SD_082: OK (implemented and tested)
Requirement REQ_SER_003_E01: OK (implemented and tested)
Requirement REQ_TP_030: OK (implemented and tested)
Requirement REQ_SD_211: OK (implemented and tested)
Requirement REQ_SD_351: OK (implemented and tested)
Requirement REQ_MSG_100_E03: OK (implemented and tested)
Requirement REQ_TP_041: OK (implemented and tested)
Requirement REQ_TP_003: OK (implemented and tested)
Requirement REQ_MSG_071_E02: OK (implemented and tested)
Requirement REQ_SER_053: OK (implemented and tested)
Requirement REQ_SER_047: OK (implemented and tested)
Requirement REQ_TP_042: OK (implemented and tested)
Requirement REQ_SD_124: OK (implemented and tested)
Requirement REQ_SER_014: OK (implemented and tested)
Requirement REQ_TP_002: OK (implemented and tested)
Requirement REQ_TP_062: OK (implemented and tested)
Requirement REQ_SER_082: OK (implemented and tested)
Requirement REQ_PAL_CV_WAIT_PRED: OK (implemented and tested)
Requirement REQ_TP_050: OK (implemented and tested)
Requirement REQ_SD_010_E02: OK (implemented and tested)
Requirement REQ_TRANSPORT_002_E02: OK (implemented and tested)
Requirement REQ_SER_043_E01: OK (implemented and tested)
Requirement REQ_TRANSPORT_014: OK (implemented and tested)
Requirement REQ_TRANSPORT_001_E02: OK (implemented and tested)
Requirement REQ_TRANSPORT_014_E01: OK (implemented and tested)
Requirement REQ_COMPAT_005: OK (implemented and tested)
Requirement REQ_MSG_076: OK (implemented and tested)
Requirement REQ_MSG_040_E01: OK (implemented and tested)
Requirement REQ_TP_011: OK (implemented and tested)
Requirement REQ_SD_041_E01: OK (implemented and tested)
Requirement REQ_SER_010: OK (implemented and tested)
Requirement REQ_MSG_054_E01: OK (implemented and tested)
Requirement REQ_MSG_041: OK (implemented and tested)
Requirement REQ_TP_063: OK (implemented and tested)
Requirement REQ_SD_151: OK (implemented and tested)
Requirement REQ_MSG_063_E01: OK (implemented and tested)
Requirement REQ_SD_116_E01: OK (implemented and tested)
Requirement REQ_MSG_030: OK (implemented and tested)
Requirement REQ_SD_116_E02: OK (implemented and tested)
Requirement REQ_ARCH_002: OK (implemented and tested)
Requirement REQ_TP_004: OK (implemented and tested)
Requirement REQ_TP_001_E02: OK (implemented and tested)
Requirement REQ_TP_035: OK (implemented and tested)
Requirement REQ_TP_055: OK (implemented and tested)
Requirement REQ_MSG_121_E01: OK (implemented and tested)
Requirement REQ_MSG_010_E01: OK (implemented and tested)
Requirement REQ_SER_040: OK (implemented and tested)
Requirement REQ_SD_100: OK (implemented and tested)
Requirement REQ_SER_043: OK (implemented and tested)
Requirement REQ_SD_020: OK (implemented and tested)
Requirement REQ_TP_015_E01: OK (implemented and tested)
Requirement REQ_TP_036: OK (implemented and tested)
Requirement REQ_SD_044: OK (implemented and tested)
Requirement REQ_SD_092: OK (implemented and tested)
Requirement REQ_MSG_001: OK (implemented and tested)
Requirement REQ_SD_060_E01: OK (implemented and tested)
Requirement REQ_SD_127: OK (implemented and tested)
Requirement REQ_MSG_112: OK (implemented and tested)
Requirement REQ_SD_349: OK (implemented and tested)
Requirement REQ_SD_270: OK (implemented and tested)
Requirement REQ_PAL_NET_CLOSE: OK (implemented and tested)
Requirement REQ_SD_003: OK (implemented and tested)
Requirement REQ_MSG_114_E02: OK (implemented and tested)
Requirement REQ_MSG_055: OK (implemented and tested)
Requirement REQ_SD_121: OK (implemented and tested)
Requirement REQ_MY_001: OK (implemented and tested)
Requirement REQ_SD_220: OK (implemented and tested)
Requirement REQ_SD_210: OK (implemented and tested)
Requirement REQ_MSG_117_E01: OK (implemented and tested)
Requirement REQ_SD_261: OK (implemented and tested)
Requirement REQ_PAL_CV_NOTIFY_ALL: OK (implemented and tested)
Requirement REQ_PAL_THREAD_DTOR_E01: OK (implemented and tested)
Requirement REQ_SD_090: OK (implemented and tested)
Requirement REQ_PAL_NET_BLOCK: OK (implemented and tested)
Requirement REQ_PLATFORM_FREERTOS_001: OK (implemented and tested)
Requirement REQ_SER_040_E02: OK (implemented and tested)
Requirement REQ_SD_070: OK (implemented and tested)
Requirement REQ_COMPAT_004: OK (implemented and tested)
Requirement REQ_TP_073: OK (implemented and tested)
Requirement REQ_PAL_THREAD_JOIN: OK (implemented and tested)
Requirement REQ_MSG_133C: OK (implemented and tested)
Requirement REQ_SD_013: OK (implemented and tested)
Requirement REQ_ARCH_003: OK (implemented and tested)
Requirement REQ_SD_273: OK (implemented and tested)
Requirement REQ_SD_118: OK (implemented and tested)
Requirement REQ_MSG_056: OK (implemented and tested)
Requirement REQ_MSG_020: OK (implemented and tested)
Requirement REQ_SD_234: OK (implemented and tested)
Requirement REQ_E2E_PLUGIN_003: OK (implemented and tested)
Requirement REQ_SD_212: OK (implemented and tested)
Requirement REQ_SER_022: OK (implemented and tested)
Requirement REQ_SD_083_E01: OK (implemented and tested)
Requirement REQ_MSG_011: OK (implemented and tested)
Requirement REQ_SER_006_E01: OK (implemented and tested)
Requirement REQ_SD_094: OK (implemented and tested)
Requirement REQ_SD_101: OK (implemented and tested)
Requirement REQ_MSG_014_E01: OK (implemented and tested)
Requirement REQ_SD_347: OK (implemented and tested)
Requirement REQ_TP_076_E01: OK (implemented and tested)
Requirement REQ_MSG_092: OK (implemented and tested)
Requirement REQ_SD_123_E01: OK (implemented and tested)
Requirement REQ_MSG_121A: OK (implemented and tested)
Requirement REQ_MSG_079: OK (implemented and tested)
Requirement REQ_SER_021: OK (implemented and tested)
Requirement REQ_SD_005: OK (implemented and tested)
Requirement REQ_PAL_NET_SHUTDOWN: OK (implemented and tested)
Requirement REQ_TRANSPORT_006: OK (implemented and tested)
Requirement REQ_MSG_040: OK (implemented and tested)
Requirement REQ_COMPAT_001_E01: OK (implemented and tested)
Requirement REQ_SD_110: OK (implemented and tested)
Requirement REQ_SER_040_E01: OK (implemented and tested)
Requirement REQ_TP_001_E03: OK (implemented and tested)
Requirement REQ_TP_053: OK (implemented and tested)
Requirement REQ_SD_241: OK (implemented and tested)
Requirement REQ_SD_052_E01: OK (implemented and tested)
Requirement REQ_TP_017: OK (implemented and tested)
Requirement REQ_SER_050: OK (implemented and tested)
Requirement REQ_COMPAT_002: OK (implemented and tested)
Requirement REQ_MSG_113: OK (implemented and tested)
Requirement REQ_SER_012: OK (implemented and tested)
Requirement REQ_MSG_024: OK (implemented and tested)
Requirement REQ_MSG_141: OK (implemented and tested)
Requirement REQ_TRANSPORT_010: OK (implemented and tested)
Requirement REQ_SD_001_E01: OK (implemented and tested)
Requirement REQ_SER_030_E01: OK (implemented and tested)
Requirement REQ_SD_243: OK (implemented and tested)
Requirement REQ_SD_002: OK (implemented and tested)
Requirement REQ_TRANSPORT_001B: OK (implemented and tested)
Requirement REQ_MSG_100_E02: OK (implemented and tested)
Requirement REQ_MSG_121C: OK (implemented and tested)
Requirement REQ_SD_020_E02: OK (implemented and tested)
Requirement REQ_MSG_071: OK (implemented and tested)
Requirement REQ_SD_160: OK (implemented and tested)
Requirement REQ_MSG_080: OK (implemented and tested)
Requirement REQ_MSG_121_E02: OK (implemented and tested)
Requirement REQ_SD_073: OK (implemented and tested)
Requirement REQ_MSG_134: OK (implemented and tested)
Requirement REQ_SD_320: OK (implemented and tested)
Requirement REQ_SER_075: OK (implemented and tested)
Requirement REQ_SER_052: OK (implemented and tested)
Requirement REQ_COMPAT_010_E01: OK (implemented and tested)
Requirement REQ_SD_115_E01: OK (implemented and tested)
Requirement REQ_SER_047_E01: OK (implemented and tested)
Requirement REQ_SD_076: OK (implemented and tested)
Requirement REQ_MSG_042: OK (implemented and tested)
Requirement REQ_PAL_MUTEX_NONCOPY: OK (implemented and tested)
Requirement REQ_SD_035: OK (implemented and tested)
Requirement REQ_SD_021_E01: OK (implemented and tested)
Requirement REQ_SER_045: OK (implemented and tested)
Requirement REQ_TP_079: OK (implemented and tested)
Requirement REQ_SD_060: OK (implemented and tested)
Requirement REQ_SD_300: OK (implemented and tested)
Requirement REQ_SD_330: OK (implemented and tested)
Requirement REQ_SD_222: OK (implemented and tested)
Requirement REQ_SD_348: OK (implemented and tested)
Requirement REQ_TP_071: OK (implemented and tested)
Requirement REQ_SD_115_E02: OK (implemented and tested)
Requirement REQ_SD_152: OK (implemented and tested)
Requirement REQ_SD_046: OK (implemented and tested)
Requirement REQ_COMPAT_023: OK (implemented and tested)
Requirement REQ_SER_054: OK (implemented and tested)
Requirement REQ_TRANSPORT_001C: OK (implemented and tested)
Requirement REQ_SD_240: OK (implemented and tested)
Requirement REQ_TP_019: OK (implemented and tested)
Requirement REQ_TRANSPORT_005: OK (implemented and tested)
Requirement REQ_MSG_071_E01: OK (implemented and tested)
Requirement REQ_TP_070: OK (implemented and tested)
Requirement REQ_SD_282: OK (implemented and tested)
Requirement REQ_SD_044_E01: OK (implemented and tested)
Requirement REQ_SD_063: OK (implemented and tested)
Requirement REQ_SER_017: OK (implemented and tested)
Requirement REQ_E2E_PLUGIN_005: OK (implemented and tested)
Requirement REQ_MSG_022: OK (implemented and tested)
Requirement REQ_SD_200A: OK (implemented and tested)
Requirement REQ_TRANSPORT_002B: OK (implemented and tested)
Requirement REQ_MSG_070: OK (implemented and tested)
Requirement REQ_TRANSPORT_016_E01: OK (implemented and tested)
Requirement REQ_SER_056: OK (implemented and tested)
Requirement REQ_SD_053: OK (implemented and tested)
Requirement REQ_MSG_110: OK (implemented and tested)
Requirement REQ_SD_081: OK (implemented and tested)
Requirement REQ_PLATFORM_ZEPHYR_001: OK (implemented and tested)
Requirement REQ_PAL_LOCK_ACQUIRE: OK (implemented and tested)
Requirement REQ_SD_312: OK (implemented and tested)
Requirement REQ_ARCH_005: OK (implemented and tested)
Requirement REQ_COMPAT_030: OK (implemented and tested)
Requirement REQ_TP_020: OK (implemented and tested)
Requirement REQ_MSG_054: OK (implemented and tested)
Requirement REQ_MSG_003: OK (implemented and tested)
Requirement REQ_TRANSPORT_002_E04: OK (implemented and tested)
Requirement REQ_MSG_114_E01: OK (implemented and tested)
Requirement REQ_MSG_020_E01: OK (implemented and tested)
Requirement REQ_PAL_BYTE_HTONL: OK (implemented and tested)
Requirement REQ_SD_091: OK (implemented and tested)
Requirement REQ_SD_230: OK (implemented and tested)
Requirement REQ_TP_032: OK (implemented and tested)
Requirement REQ_SD_242: OK (implemented and tested)
Requirement REQ_SD_032: OK (implemented and tested)
Requirement REQ_SD_340: OK (implemented and tested)
Requirement REQ_MSG_007: OK (implemented and tested)
Requirement REQ_PLATFORM_FREERTOS_002: OK (implemented and tested)
Requirement REQ_PAL_MUTEX_TRYLOCK: OK (implemented and tested)
Requirement REQ_PAL_MEM_INDEPENDENT: OK (implemented and tested)
Requirement REQ_ARCH_001: OK (implemented and tested)
Requirement REQ_SER_080: OK (implemented and tested)
Requirement REQ_PAL_CV_NOTIFY_ONE: OK (implemented and tested)
Requirement REQ_SER_042: OK (implemented and tested)
Requirement REQ_MSG_110_E01: OK (implemented and tested)
Requirement REQ_PLATFORM_POSIX_003: OK (implemented and tested)
Requirement REQ_MSG_120_E01: OK (implemented and tested)
Requirement REQ_COMPAT_020_E01: OK (implemented and tested)
Requirement REQ_SD_070_E01: OK (implemented and tested)
Requirement REQ_SD_011: OK (implemented and tested)
Requirement REQ_COMPAT_001: OK (implemented and tested)
Requirement REQ_SD_356: OK (implemented and tested)
Requirement REQ_MSG_090_E01: OK (implemented and tested)
Requirement REQ_MSG_014_E02: OK (implemented and tested)
Requirement REQ_MSG_057: OK (implemented and tested)
Requirement REQ_MSG_025: OK (implemented and tested)
Requirement REQ_SD_062_E01: OK (implemented and tested)
Requirement REQ_PAL_BYTE_NTOHL: OK (implemented and tested)
Requirement REQ_MSG_004: OK (implemented and tested)
Requirement REQ_PAL_MUTEX_UNLOCK_E01: OK (implemented and tested)
Requirement REQ_TP_015: OK (implemented and tested)
Requirement REQ_TRANSPORT_004C: OK (implemented and tested)
Requirement REQ_SD_290: OK (implemented and tested)
Requirement REQ_TP_008: OK (implemented and tested)
Requirement REQ_MSG_032_E02: OK (implemented and tested)
Requirement REQ_SD_061: OK (implemented and tested)
Requirement REQ_SER_080_E01: OK (implemented and tested)
Requirement REQ_SD_120: OK (implemented and tested)
Requirement REQ_MSG_117: OK (implemented and tested)
Requirement REQ_PLATFORM_POSIX_002: OK (implemented and tested)
Requirement REQ_SER_002_E01: OK (implemented and tested)
Requirement REQ_SD_034: OK (implemented and tested)
Requirement REQ_TP_050_E02: OK (implemented and tested)
Requirement REQ_TRANSPORT_018: OK (implemented and tested)
Requirement REQ_PLATFORM_ZEPHYR_002: OK (implemented and tested)
Requirement REQ_SER_033: OK (implemented and tested)
Requirement REQ_MSG_072_E01: OK (implemented and tested)
Requirement REQ_SD_260: OK (implemented and tested)
Requirement REQ_SD_150: OK (implemented and tested)
Requirement REQ_TP_033: OK (implemented and tested)
Requirement REQ_MSG_125: OK (implemented and tested)
Requirement REQ_MSG_033: OK (implemented and tested)
Requirement REQ_TP_057: OK (implemented and tested)
Requirement REQ_TRANSPORT_004B: OK (implemented and tested)
Requirement REQ_TP_016: OK (implemented and tested)
Requirement REQ_TRANSPORT_004D: OK (implemented and tested)
Requirement REQ_TP_001: OK (implemented and tested)
Requirement REQ_TP_013: OK (implemented and tested)
Requirement REQ_SER_081: OK (implemented and tested)
Requirement REQ_MSG_012_E02: OK (implemented and tested)
Requirement REQ_TP_038: OK (implemented and tested)
Requirement REQ_SD_271: OK (implemented and tested)
Requirement REQ_SD_030_E01: OK (implemented and tested)
Requirement REQ_SD_103: OK (implemented and tested)
Requirement REQ_SER_008: OK (implemented and tested)
Requirement REQ_TP_080: OK (implemented and tested)
Requirement REQ_SER_007_E01: OK (implemented and tested)
Requirement REQ_SER_032_E01: OK (implemented and tested)
Requirement REQ_TP_018: OK (implemented and tested)
Requirement REQ_SD_346: OK (implemented and tested)
Requirement REQ_PAL_SLEEP_DURATION: OK (implemented and tested)
Requirement REQ_TP_051: OK (implemented and tested)
Requirement REQ_SD_131: OK (implemented and tested)
Requirement REQ_SD_221: OK (implemented and tested)
Requirement REQ_MSG_010: OK (implemented and tested)
Requirement REQ_SD_120_E01: OK (implemented and tested)
Requirement REQ_SD_293: OK (implemented and tested)
Requirement REQ_PAL_NET_NONBLOCK: OK (implemented and tested)
Requirement REQ_TP_010: OK (implemented and tested)
Requirement REQ_PAL_LOCK_NONCOPY: OK (implemented and tested)
Requirement REQ_MSG_015: OK (implemented and tested)
Requirement REQ_TRANSPORT_025: OK (implemented and tested)
Requirement REQ_PAL_CV_WAIT: OK (implemented and tested)
Requirement REQ_SD_116: OK (implemented and tested)
Requirement REQ_MSG_123_E01: OK (implemented and tested)
Requirement REQ_TRANSPORT_002_E03: OK (implemented and tested)
Requirement REQ_MSG_058: OK (implemented and tested)
Requirement REQ_SD_043: OK (implemented and tested)
Requirement REQ_SD_232: OK (implemented and tested)
Requirement REQ_SER_005_E01: OK (implemented and tested)
Requirement REQ_SD_331: OK (implemented and tested)
Requirement REQ_SER_001_E01: OK (implemented and tested)
Requirement REQ_MSG_118_E01: OK (implemented and tested)
Requirement REQ_SER_003: OK (implemented and tested)
Requirement REQ_MSG_111: OK (implemented and tested)
Requirement REQ_SD_033: OK (implemented and tested)
Requirement REQ_COMPAT_003_E01: OK (implemented and tested)
Requirement REQ_TP_037: OK (implemented and tested)
Requirement REQ_TP_039_E01: OK (implemented and tested)
Requirement REQ_E2E_PLUGIN_004: OK (implemented and tested)
Requirement REQ_SER_050_E02: OK (implemented and tested)
Requirement REQ_SD_343: OK (implemented and tested)
Requirement REQ_SER_007: OK (implemented and tested)
Requirement REQ_PAL_BYTE_NTOHS: OK (implemented and tested)
Requirement REQ_SER_004_E01: OK (implemented and tested)
Requirement REQ_SD_040_E01: OK (implemented and tested)
Requirement REQ_SER_071: OK (implemented and tested)
Requirement REQ_SD_201: OK (implemented and tested)
Requirement REQ_TP_013_E01: OK (implemented and tested)
Requirement REQ_MSG_006: OK (implemented and tested)
Requirement REQ_TP_040: OK (implemented and tested)
Requirement REQ_SD_051: OK (implemented and tested)
Requirement REQ_PAL_THREAD_NONCOPY: OK (implemented and tested)
Requirement REQ_SD_250: OK (implemented and tested)
Requirement REQ_MSG_061_TP: OK (implemented and tested)
Requirement REQ_MSG_126: OK (implemented and tested)
Requirement REQ_SER_055: OK (implemented and tested)
Requirement REQ_SER_072: OK (implemented and tested)
Requirement REQ_TRANSPORT_022: OK (implemented and tested)
Requirement REQ_SD_007: OK (implemented and tested)
Requirement REQ_SER_013: OK (implemented and tested)
Requirement REQ_MSG_100_E01: OK (implemented and tested)
Requirement REQ_SER_002: OK (implemented and tested)
Requirement REQ_TP_054: OK (implemented and tested)
Requirement REQ_MSG_119: OK (implemented and tested)
Requirement REQ_TRANSPORT_011: OK (implemented and tested)
Requirement REQ_TP_081: OK (implemented and tested)
Requirement REQ_SER_031: OK (implemented and tested)
Requirement REQ_TRANSPORT_002A: OK (implemented and tested)
Requirement REQ_TRANSPORT_011_E02: OK (implemented and tested)
Requirement REQ_SD_031: OK (implemented and tested)
Requirement REQ_MSG_074: OK (implemented and tested)
Requirement REQ_MSG_100: OK (implemented and tested)
Requirement REQ_SD_050: OK (implemented and tested)
Requirement REQ_SER_001: OK (implemented and tested)
Requirement REQ_TRANSPORT_012: OK (implemented and tested)
Requirement REQ_TRANSPORT_003_E01: OK (implemented and tested)
Requirement REQ_SD_084: OK (implemented and tested)
Requirement REQ_TP_082_E02: OK (implemented and tested)
Requirement REQ_MSG_132A: OK (implemented and tested)
Requirement REQ_MSG_051: OK (implemented and tested)
Requirement REQ_SD_040: OK (implemented and tested)
Requirement REQ_TP_001_E01: OK (implemented and tested)
Requirement REQ_SER_042_E01: OK (implemented and tested)
Requirement REQ_PAL_CV_EXCEPT_E01: OK (implemented and tested)
Requirement REQ_SD_020_E01: OK (implemented and tested)
Requirement REQ_MSG_078: OK (implemented and tested)
Requirement REQ_MSG_053: OK (implemented and tested)
Requirement REQ_TRANSPORT_001_E03: OK (implemented and tested)
Requirement REQ_SER_035: OK (implemented and tested)
Requirement REQ_SD_071: OK (implemented and tested)
Requirement REQ_PAL_MUTEX_LOCK: OK (implemented and tested)
Requirement REQ_MSG_050: OK (implemented and tested)
Requirement REQ_COMPAT_010: OK (implemented and tested)
Requirement REQ_SD_075_E01: OK (implemented and tested)
Requirement REQ_SD_041: OK (implemented and tested)
Requirement REQ_TP_005: OK (implemented and tested)
Requirement REQ_TRANSPORT_020: OK (implemented and tested)
Requirement REQ_SD_069: OK (implemented and tested)
Requirement REQ_MSG_060_TP: OK (implemented and tested)
Requirement REQ_SD_066: OK (implemented and tested)
Requirement REQ_SD_180: OK (implemented and tested)
Requirement REQ_SD_352: OK (implemented and tested)
Requirement REQ_MSG_125_E01: OK (implemented and tested)
Requirement REQ_SD_122: OK (implemented and tested)
Requirement REQ_PAL_SLEEP_ZERO: OK (implemented and tested)
Requirement REQ_SD_291: OK (implemented and tested)
Requirement REQ_E2E_PLUGIN_002: OK (implemented and tested)
Requirement REQ_MSG_032: OK (implemented and tested)
Requirement REQ_TRANSPORT_016: OK (implemented and tested)
Requirement REQ_TP_082_E04: OK (implemented and tested)
Requirement REQ_SER_044: OK (implemented and tested)
Requirement REQ_MSG_130: OK (implemented and tested)
Requirement REQ_SER_004: OK (implemented and tested)
Requirement REQ_SER_015: OK (implemented and tested)
Requirement REQ_TRANSPORT_004A: OK (implemented and tested)
Requirement REQ_SER_033_E01: OK (implemented and tested)
Requirement REQ_E2E_PLUGIN_001: OK (implemented and tested)
Requirement REQ_SD_274: OK (implemented and tested)
Requirement REQ_SD_004: OK (implemented and tested)
Requirement REQ_SD_200B: OK (implemented and tested)
Requirement REQ_SD_064_E01: OK (implemented and tested)
Requirement REQ_TP_056: OK (implemented and tested)
Requirement REQ_TP_076: OK (implemented and tested)
Requirement REQ_MSG_031: OK (implemented and tested)
Requirement REQ_TP_077: OK (implemented and tested)
Requirement REQ_COMPAT_003: OK (implemented and tested)
Requirement REQ_SD_080: OK (implemented and tested)
Requirement REQ_SD_119: OK (implemented and tested)
Requirement REQ_SD_030: OK (implemented and tested)
Requirement REQ_TRANSPORT_024: OK (implemented and tested)
Requirement REQ_SER_050_E01: OK (implemented and tested)
Requirement REQ_MSG_129: OK (implemented and tested)
Requirement REQ_MSG_013: OK (implemented and tested)
Requirement REQ_SER_031_E01: OK (implemented and tested)
Requirement REQ_SER_024: OK (implemented and tested)
Requirement REQ_SD_251: OK (implemented and tested)
Requirement REQ_TP_075: OK (implemented and tested)
Requirement REQ_PAL_LOCK_RELEASE: OK (implemented and tested)
Requirement REQ_MSG_075: OK (implemented and tested)
Requirement REQ_MSG_123: OK (implemented and tested)
Requirement REQ_SD_026: OK (implemented and tested)
Requirement REQ_SD_022_E01: OK (implemented and tested)
Requirement REQ_SD_060_E02: OK (implemented and tested)
Requirement REQ_TP_061: OK (implemented and tested)
Requirement REQ_TP_074: OK (implemented and tested)
Requirement REQ_MSG_118: OK (implemented and tested)
Requirement REQ_SD_344: OK (implemented and tested)
Requirement REQ_MSG_122: OK (implemented and tested)
Requirement REQ_TP_052: OK (implemented and tested)
Requirement REQ_SD_068: OK (implemented and tested)
Requirement REQ_PLATFORM_POSIX_001: OK (implemented and tested)
Requirement REQ_MSG_062_TP: OK (implemented and tested)
Requirement REQ_MSG_128: OK (implemented and tested)
Requirement REQ_PLATFORM_POSIX_004: OK (implemented and tested)
Requirement REQ_SD_042: OK (implemented and tested)
Requirement REQ_PAL_CV_OWNERSHIP: OK (implemented and tested)
Requirement REQ_MSG_124_E01: OK (implemented and tested)
Requirement REQ_TRANSPORT_011_E01: OK (implemented and tested)
Requirement REQ_MSG_004_E01: OK (implemented and tested)
Requirement REQ_SER_030: OK (implemented and tested)
Requirement REQ_SD_054: OK (implemented and tested)
Requirement REQ_SER_008_E01: OK (implemented and tested)
Requirement REQ_COMPAT_020: OK (implemented and tested)
Requirement REQ_TRANSPORT_003B: OK (implemented and tested)
Requirement REQ_SD_022: OK (implemented and tested)
Requirement REQ_SD_102: OK (implemented and tested)
Requirement REQ_SD_345: OK (implemented and tested)
Requirement REQ_SD_119_E01: OK (implemented and tested)
Requirement REQ_SD_280: OK (implemented and tested)
Requirement REQ_MSG_124: OK (implemented and tested)
Requirement REQ_TP_030_E02: OK (implemented and tested)
Requirement REQ_SD_117: OK (implemented and tested)
Requirement REQ_PAL_THREAD_CREATE_E01: OK (implemented and tested)
Requirement REQ_SD_077: OK (implemented and tested)
Requirement REQ_MSG_008: OK (implemented and tested)
Requirement REQ_SD_075: OK (implemented and tested)
Requirement REQ_SER_016: OK (implemented and tested)
Requirement REQ_TRANSPORT_006_E01: OK (implemented and tested)
Requirement REQ_TP_082_E01: OK (implemented and tested)
Requirement REQ_PAL_THREAD_CREATE: OK (implemented and tested)
Requirement REQ_SD_067: OK (implemented and tested)
Requirement REQ_SD_223: OK (implemented and tested)
Requirement REQ_PLATFORM_THREADX_002: OK (implemented and tested)
Requirement REQ_TRANSPORT_002_E01: OK (implemented and tested)
Requirement REQ_SD_350: OK (implemented and tested)
Requirement REQ_SD_161: OK (implemented and tested)
Requirement REQ_PAL_MEM_ALLOC: OK (implemented and tested)
Requirement REQ_TRANSPORT_003A: OK (implemented and tested)
Requirement REQ_SD_236: OK (implemented and tested)
Requirement REQ_MSG_064: OK (implemented and tested)
Requirement REQ_PAL_THREAD_JOINABLE: OK (implemented and tested)
Requirement REQ_SD_132: OK (implemented and tested)
Requirement REQ_TP_082: OK (implemented and tested)
Requirement REQ_SD_001_E02: OK (implemented and tested)
Requirement REQ_TP_078: OK (implemented and tested)
Requirement REQ_MSG_024_E02: OK (implemented and tested)
Requirement REQ_TP_034: OK (implemented and tested)
Requirement REQ_MSG_116: OK (implemented and tested)
Requirement REQ_MSG_093: OK (implemented and tested)
Requirement REQ_SD_272: OK (implemented and tested)
Requirement REQ_TP_031: OK (implemented and tested)
Requirement REQ_SD_023: OK (implemented and tested)
Requirement REQ_SD_140: OK (implemented and tested)
Requirement REQ_SD_341: OK (implemented and tested)
Requirement REQ_PAL_BYTE_HTONS: OK (implemented and tested)
Requirement REQ_MSG_042_E01: OK (implemented and tested)
Requirement REQ_SD_010_E01: OK (implemented and tested)
Requirement REQ_SD_281: OK (implemented and tested)
Requirement REQ_MSG_127: OK (implemented and tested)
Requirement REQ_MSG_023: OK (implemented and tested)
Requirement REQ_ARCH_007: OK (implemented and tested)
Requirement REQ_SD_310: OK (implemented and tested)
Requirement REQ_SD_302: OK (implemented and tested)
Requirement REQ_TP_021: OK (implemented and tested)
Requirement REQ_MSG_052: OK (implemented and tested)
Requirement REQ_SER_041: OK (implemented and tested)
Requirement REQ_MSG_115: OK (implemented and tested)
Requirement REQ_TP_072_E01: OK (implemented and tested)
Requirement REQ_SER_063: OK (implemented and tested)
Requirement REQ_MSG_073: OK (implemented and tested)
Requirement REQ_COMPAT_022: OK (implemented and tested)
Requirement REQ_SD_283: OK (implemented and tested)
Requirement REQ_SD_355: OK (implemented and tested)
Requirement REQ_MSG_072: OK (implemented and tested)
Requirement REQ_SD_114: OK (implemented and tested)
Requirement REQ_SD_045: OK (implemented and tested)
Requirement REQ_SER_011: OK (implemented and tested)
Requirement REQ_SD_072: OK (implemented and tested)
Requirement REQ_SD_021: OK (implemented and tested)
Requirement REQ_MSG_063: OK (implemented and tested)
Requirement REQ_SD_025: OK (implemented and tested)
Requirement REQ_SD_093: OK (implemented and tested)
Requirement REQ_COMPAT_024: OK (implemented and tested)
Requirement REQ_TP_072: OK (implemented and tested)
Requirement REQ_PAL_NET_MODE_E01: OK (implemented and tested)
Requirement REQ_TRANSPORT_017: OK (implemented and tested)
Requirement REQ_PLATFORM_THREADX_001: OK (implemented and tested)
Requirement REQ_SER_062: OK (implemented and tested)
Requirement REQ_SD_055: OK (implemented and tested)
Requirement REQ_SER_032: OK (implemented and tested)
Requirement REQ_MSG_090: OK (implemented and tested)
Requirement REQ_SER_010_E01: OK (implemented and tested)
Requirement REQ_SER_020: OK (implemented and tested)
Requirement REQ_SD_301: OK (implemented and tested)
Requirement REQ_SER_034: OK (implemented and tested)
Requirement REQ_SD_083: OK (implemented and tested)
Requirement REQ_PAL_MUTEX_UNLOCK: OK (implemented and tested)
Requirement REQ_MSG_005: OK (implemented and tested)
Requirement REQ_MSG_077: OK (implemented and tested)
Requirement REQ_MSG_012: OK (implemented and tested)
Requirement REQ_MSG_091: OK (implemented and tested)
Requirement REQ_SD_065: OK (implemented and tested)
Requirement REQ_TP_043: OK (implemented and tested)
Requirement REQ_SER_051: OK (implemented and tested)
Requirement REQ_SD_111: OK (implemented and tested)
Requirement REQ_SD_112: OK (implemented and tested)
Requirement REQ_TRANSPORT_023: OK (implemented and tested)
Requirement REQ_TP_082_E03: OK (implemented and tested)
Requirement REQ_MSG_120: OK (implemented and tested)
Requirement REQ_MSG_024_E01: OK (implemented and tested)
Requirement REQ_SD_062: OK (implemented and tested)
Requirement REQ_MSG_053_E01: OK (implemented and tested)
Requirement REQ_SD_080_E01: OK (implemented and tested)
Requirement REQ_TRANSPORT_019: OK (implemented and tested)
Requirement REQ_TP_076_E02: OK (implemented and tested)
Requirement REQ_SD_303: OK (implemented and tested)
Requirement REQ_TP_039: OK (implemented and tested)
Requirement REQ_SD_113: OK (implemented and tested)
Requirement REQ_TP_050_E01: OK (implemented and tested)
Requirement REQ_SD_050_E01: OK (implemented and tested)
Requirement REQ_SD_233: OK (implemented and tested)
Requirement REQ_SER_020_E01: OK (implemented and tested)
Requirement REQ_TP_060: OK (implemented and tested)
Requirement REQ_SD_001: OK (implemented and tested)
Requirement REQ_PLATFORM_LWIP_001: OK (implemented and tested)
Requirement REQ_SD_342: OK (implemented and tested)
Requirement REQ_SER_023: OK (implemented and tested)
Requirement REQ_MSG_021: OK (implemented and tested)
Requirement REQ_TP_014: OK (implemented and tested)
Requirement REQ_SD_292: OK (implemented and tested)
Requirement REQ_SD_141: OK (implemented and tested)
Requirement REQ_MSG_114: OK (implemented and tested)
Requirement REQ_MSG_131: OK (implemented and tested)
Requirement REQ_SD_010: OK (implemented and tested)
Requirement REQ_SD_200C: OK (implemented and tested)
Requirement REQ_SD_123: OK (implemented and tested)
Requirement REQ_MSG_059: OK (implemented and tested)
Requirement REQ_SER_061: OK (implemented and tested)
Requirement REQ_SD_064: OK (implemented and tested)
Requirement REQ_SD_012: OK (implemented and tested)
Requirement REQ_TRANSPORT_001A: OK (implemented and tested)
Requirement REQ_SD_014: OK (implemented and tested)
Requirement REQ_SD_061_E01: OK (implemented and tested)

Gap Analysis Summary:
  Total requirements: 649
  Fully traced (code + tests): 585/649 (90.1%)
  Spec-linked implementation reqs: 649/649
  Requirements with code: 587
  Requirements with tests: 647
  Orphaned requirements (no code): 62
  Missing spec links: 0
  Code references: 590
  Test references: 676

Warnings:
  - Requirement REQ_PLATFORM_ZEPHYR_003 has no code implementation
  - Requirement REQ_SER_090 has no code implementation
  - Requirement REQ_MSG_135 has no code implementation
  - Requirement REQ_SER_094A has no code implementation
  - Requirement REQ_SER_093 has no code implementation
  - Requirement REQ_SD_134_E01 has no code implementation
  - Requirement REQ_SER_092 has no code implementation
  - Requirement REQ_SER_047_E02 has no code implementation
  - Requirement REQ_SD_171 has no code implementation
  - Requirement REQ_TRANSPORT_015 has no code implementation
  - Requirement REQ_SER_091 has no code implementation
  - Requirement REQ_PLATFORM_ZEPHYR_004 has no code implementation
  - Requirement REQ_SER_070 has no code implementation
  - Requirement REQ_SER_073_E01 has no code implementation
  - Requirement REQ_SER_102 has no code implementation
  - Requirement REQ_SER_101 has no code implementation
  - Requirement REQ_TRANSPORT_013 has no code implementation
  - Requirement REQ_MSG_133B has no code implementation
  - Requirement REQ_PLATFORM_WIN32_004 has no code implementation
  - Requirement REQ_SER_074 has no code implementation
  - Requirement REQ_SER_055_E01 has no code implementation
  - Requirement REQ_SER_107 has no code implementation
  - Requirement REQ_SER_051_E01 has no code implementation
  - Requirement REQ_SD_126 has no code implementation
  - Requirement REQ_PLATFORM_LWIP_002 has no code implementation
  - Requirement REQ_SER_106 has no code implementation
  - Requirement REQ_SD_113_E01 has no code implementation
  - Requirement REQ_MSG_132B has no code implementation
  - Requirement REQ_SER_070_E01 has no code implementation
  - Requirement REQ_SER_097 has no code implementation
  - Requirement REQ_SER_070_E02 has no code implementation
  - Requirement REQ_SD_222_E01 has no code implementation
  - Requirement REQ_SER_096 has no code implementation
  - Requirement REQ_PAL_MEM_THREADSAFE_E01 has no test coverage
  - Requirement REQ_MSG_113_E01 has no code implementation
  - Requirement REQ_PLATFORM_WIN32_003 has no code implementation
  - Requirement REQ_SER_043_E02 has no code implementation
  - Requirement REQ_PLATFORM_WIN32_001 has no code implementation
  - Requirement REQ_SER_094B has no code implementation
  - Requirement REQ_SER_104 has no code implementation
  - Requirement REQ_PLATFORM_WIN32_002 has no code implementation
  - Requirement REQ_SER_053_E01 has no code implementation
  - Requirement REQ_SER_094C has no code implementation
  - Requirement REQ_SER_056_E01 has no code implementation
  - Requirement REQ_SD_125 has no code implementation
  - Requirement REQ_MSG_133A has no code implementation
  - Requirement REQ_SER_060 has no code implementation
  - Requirement REQ_SER_022_E01 has no code implementation
  - Requirement REQ_SER_034_E01 has no code implementation
  - Requirement REQ_SER_098 has no code implementation
  - Requirement REQ_SER_095 has no code implementation
  - Requirement REQ_MSG_140 has no code implementation
  - Requirement REQ_SER_094_E01 has no code implementation
  - Requirement REQ_SER_090_E01 has no code implementation
  - Requirement REQ_SER_099 has no code implementation
  - Requirement REQ_SD_170 has no code implementation
  - Requirement REQ_SER_046_E01 has no code implementation
  - Requirement REQ_SER_105 has no code implementation
  - Requirement REQ_SER_060_E02 has no code implementation
  - Requirement REQ_SER_103 has no code implementation
  - Requirement REQ_SER_100 has no code implementation
  - Requirement REQ_SER_094_E02 has no code implementation
  - Requirement REQ_SER_060_E01 has no code implementation
  - Requirement REQ_PAL_MEM_EXHAUST_E01 has no test coverage
  - Code reference to non-existent requirement: REQ_PAL_NET_SEND
  - Code reference to non-existent requirement: REQ_PAL_NET_RECV
  - Code reference to non-existent requirement: REQ_PAL_NET_SOCKOPT

Validation passed!

@github-actions
Copy link
Copy Markdown

Zephyr Test Results

15 tests  ±0   15 ✅ ±0   3s ⏱️ ±0s
 1 suites ±0    0 💤 ±0 
 1 files   ±0    0 ❌ ±0 

Results for commit 3cc4c2a. ± Comparison against base commit 35df0d1.

@github-actions
Copy link
Copy Markdown

FreeRTOS Test Results

1 tests  ±0   1 ✅ ±0   0s ⏱️ ±0s
1 suites ±0   0 💤 ±0 
1 files   ±0   0 ❌ ±0 

Results for commit 3cc4c2a. ± Comparison against base commit 35df0d1.

@github-actions
Copy link
Copy Markdown

ThreadX Test Results

1 tests  ±0   1 ✅ ±0   0s ⏱️ ±0s
1 suites ±0   0 💤 ±0 
1 files   ±0   0 ❌ ±0 

Results for commit 3cc4c2a. ± Comparison against base commit 35df0d1.

@github-actions
Copy link
Copy Markdown

Code Coverage

Package Line Rate Branch Rate Complexity Health
include.core 67% 50% 0
include.e2e 100% 50% 0
include.events 85% 75% 0
include.platform 100% 100% 0
include.platform.freertos 94% 57% 0
include.platform.host 100% 83% 0
include.platform.posix 93% 67% 0
include.platform.threadx 86% 53% 0
include.platform.zephyr 100% 64% 0
include.rpc 100% 50% 0
include.sd 97% 75% 0
include.serialization 100% 60% 0
include.someip 98% 100% 0
include.tp 100% 50% 0
include.transport 100% 100% 0
src.common 0% 0% 0
src.core 74% 44% 0
src.e2e 72% 48% 0
src.e2e.e2e_profiles 85% 48% 0
src.events 0% 0% 0
src.rpc 35% 15% 0
src.sd 57% 30% 0
src.serialization 85% 51% 0
src.someip 68% 51% 0
src.tp 84% 53% 0
src.transport 63% 40% 0
Summary 62% (2439 / 3926) 35% (1147 / 3299) 0

@github-actions
Copy link
Copy Markdown

Host Test Results

 3 files  ±0   3 suites  ±0   11s ⏱️ ±0s
15 tests ±0  15 ✅ ±0  0 💤 ±0  0 ❌ ±0 
45 runs  ±0  45 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit 3cc4c2a. ± Comparison against base commit 35df0d1.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@include/platform/posix/net_impl.h`:
- Around line 58-66: The header uses errno and POSIX error macros but doesn't
include errno.h; make the header self-contained by adding an explicit `#include`
<errno.h> at the top of include/platform/posix/net_impl.h so
someip_socket_errno() and the macros SOMEIP_EAGAIN, SOMEIP_EWOULDBLOCK,
SOMEIP_EINPROGRESS, SOMEIP_EBADF, SOMEIP_EINTR resolve reliably; ensure the
include appears before the declaration of static inline int
someip_socket_errno() and the macro definitions.

In `@include/platform/win32/net_impl.h`:
- Around line 33-74: Change all socket handle parameters and storage from int to
Winsock SOCKET to avoid 32-bit truncation: update functions someip_setsockopt,
someip_getsockopt, someip_sendto, someip_recvfrom, someip_send, someip_recv to
accept SOCKET instead of int and adjust any casts accordingly (e.g., keep
reinterpret_cast on buffer pointers, but pass the SOCKET directly to
setsockopt/getsockopt/send/recv/sendto/recvfrom). Also update transport-layer
types that store handles (references in udp_transport.cpp and tcp_transport.cpp)
from int to SOCKET, and ensure winsock2.h is included where SOCKET is used and
any socklen_t/int conversions are handled safely. Ensure builds compile with the
new signatures across all call sites.

In `@src/transport/tcp_transport.cpp`:
- Around line 483-488: In send_data() and receive_data(), extend the error
handling after someip_socket_errno() to treat SOMEIP_EINTR like
SOMEIP_EAGAIN/SOMEIP_EWOULDBLOCK by continuing and retrying the operation
instead of returning Result::NETWORK_ERROR; specifically, update the branches
that currently only check SOMEIP_EAGAIN/SOMEIP_EWOULDBLOCK to also check for
SOMEIP_EINTR (using the existing someip_socket_errno() call and the SOMEIP_EINTR
constant), so interrupted syscalls are retried rather than forcing a disconnect.
- Around line 337-340: The call to someip_getsockopt(...) that fetches SO_ERROR
isn't checking the function's return value, so if someip_getsockopt fails you
still treat the connection as successful; update the code around the
someip_getsockopt call (the block using connection_.socket_fd, SOL_SOCKET,
SO_ERROR) to capture its return value, and if the return is non-zero treat the
operation as a failure (populate/override error with a meaningful non-zero value
such as errno or a platform-specific error code) and handle that path the same
as a socket error instead of assuming success.
- Around line 271-285: The keepalive setup is incorrect: enable SO_KEEPALIVE on
non-Windows paths and pass the idle timeout value (keep_alive_interval) to
TCP_KEEPALIVE/TCP_KEEPIDLE instead of the boolean keep_alive; update the code
around someip_setsockopt/socket_fd in tcp_transport.cpp to call
someip_setsockopt(socket_fd, SOL_SOCKET, SO_KEEPALIVE, &keep_alive,
sizeof(keep_alive)) for macOS/Linux, then call someip_setsockopt with
IPPROTO_TCP and TCP_KEEPALIVE (macOS) or TCP_KEEPIDLE (Linux) using
&keep_alive_interval, and keep using TCP_KEEPINTVL and TCP_KEEPCNT with
keep_alive_interval and keep_alive respectively (and still noop
keep_alive_interval on Windows).

In `@src/transport/udp_transport.cpp`:
- Around line 423-431: The receive loop treats SOMEIP_EINTR as NOT_CONNECTED
which prematurely exits the receiver; change the error handling in the
recvfrom() error branch in udp_transport's receive_loop so that ONLY
SOMEIP_EBADF returns Result::NOT_CONNECTED, while SOMEIP_EINTR causes the loop
to retry (i.e., continue to the next recv attempt); keep the existing handling
for non-blocking EAGAIN/EWOULDBLOCK returning Result::TIMEOUT and preserve use
of someip_socket_errno(), Result::NOT_CONNECTED, Result::TIMEOUT and
config_.blocking so behavior for other cases is unchanged.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: a3dc418f-3814-4476-a0de-ddddb3408222

📥 Commits

Reviewing files that changed from the base of the PR and between 35df0d1 and 3cc4c2a.

📒 Files selected for processing (7)
  • include/platform/lwip/net_impl.h
  • include/platform/posix/net_impl.h
  • include/platform/win32/net_impl.h
  • include/platform/zephyr/net_impl.h
  • src/CMakeLists.txt
  • src/transport/tcp_transport.cpp
  • src/transport/udp_transport.cpp

Comment on lines +58 to +66
/* ---------- Error reporting (pass-through on POSIX) ------------------------ */

static inline int someip_socket_errno() { return errno; }

#define SOMEIP_EAGAIN EAGAIN
#define SOMEIP_EWOULDBLOCK EWOULDBLOCK
#define SOMEIP_EINPROGRESS EINPROGRESS
#define SOMEIP_EBADF EBADF
#define SOMEIP_EINTR EINTR
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n include/platform/posix/net_impl.h | head -80

Repository: vtz/opensomeip

Length of output: 2703


🏁 Script executed:

grep -r "SOMEIP_E\|someip_socket_errno" src/transport/ --include="*.cpp"

Repository: vtz/opensomeip

Length of output: 782


🏁 Script executed:

# Check if errno.h is included transitively through any of the currently included headers
# by checking the standard POSIX header dependencies
cat > /tmp/check_errno.c << 'EOF'
`#include` <sys/socket.h>
`#include` <sys/select.h>
`#include` <netinet/in.h>
`#include` <netinet/tcp.h>
`#include` <arpa/inet.h>
`#include` <unistd.h>
`#include` <fcntl.h>

int main() {
    // Try to use errno and E* constants without explicit errno.h
    int x = errno;
    int y = EAGAIN;
    return 0;
}
EOF
# Just check if the header will compile as-is
head -20 include/platform/posix/net_impl.h > /tmp/test_header.h
</script>

Repository: vtz/opensomeip

Length of output: 162


🏁 Script executed:

grep -B5 "SOMEIP_E\|someip_socket_errno" src/transport/tcp_transport.cpp | head -20

Repository: vtz/opensomeip

Length of output: 689


🏁 Script executed:

head -30 src/transport/tcp_transport.cpp | grep -E "#include"

Repository: vtz/opensomeip

Length of output: 254


🏁 Script executed:

cat include/platform/net.h

Repository: vtz/opensomeip

Length of output: 1039


🏁 Script executed:

# Check if other platform headers include errno.h or have similar patterns
find include/platform -name "*.h" -type f | xargs grep -l "errno"

Repository: vtz/opensomeip

Length of output: 193


🏁 Script executed:

# Check how other platforms handle errno/error codes
for file in include/platform/lwip/net_impl.h include/platform/win32/net_impl.h include/platform/zephyr/net_impl.h; do
  echo "=== $file ==="
  head -30 "$file" | grep -E "#include|errno"
done

Repository: vtz/opensomeip

Length of output: 489


🏁 Script executed:

# Check if any of the currently included headers in POSIX net_impl.h transitively include errno.h
# by searching for errno in the included headers' documentation or checking standard POSIX behavior
# Let's search for how errno is declared in standard headers
grep -r "define errno\|extern.*errno" /usr/include/ 2>/dev/null | grep -E "errno.h|sys/socket.h|unistd.h" | head -5

Repository: vtz/opensomeip

Length of output: 40


🏁 Script executed:

# Let's check what the C99/POSIX standard says about errno and these error codes
# by looking at a simple test: can we use errno and EAGAIN without errno.h?
# We'll create a minimal test file that mimics the current header

cat > /tmp/test_errno_includes.c << 'EOF'
`#include` <sys/socket.h>
`#include` <sys/select.h>
`#include` <netinet/in.h>
`#include` <netinet/tcp.h>
`#include` <arpa/inet.h>
`#include` <unistd.h>
`#include` <fcntl.h>

/* This mimics the problematic lines in net_impl.h */
int test_errno_usage() {
    return errno;  /* Line 60 equivalent */
}

int test_error_codes() {
    int codes[] = {EAGAIN, EWOULDBLOCK, EINPROGRESS, EBADF, EINTR};
    return codes[0];
}
EOF

# Try to compile it to see if we get warnings/errors about undefined symbols
gcc -c /tmp/test_errno_includes.c -o /tmp/test_errno_includes.o 2>&1 | head -20

Repository: vtz/opensomeip

Length of output: 100


🏁 Script executed:

# Check if any other source files in the codebase include errno.h to understand the pattern
grep -r "#include.*errno" --include="*.h" --include="*.cpp" --include="*.c" .

Repository: vtz/opensomeip

Length of output: 181


Include the errno declarations explicitly in this header.

Line 60 and lines 62-66 use errno and the error constants (EAGAIN, EWOULDBLOCK, EINPROGRESS, EBADF, EINTR), but this header does not explicitly include <errno.h>. While this may compile due to transitive inclusion through other headers (which is implementation-dependent), the header should be self-contained. The POSIX backend is currently include-order dependent.

Suggested fix
 `#include` <arpa/inet.h>
 `#include` <unistd.h>
 `#include` <fcntl.h>
+#include <errno.h>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@include/platform/posix/net_impl.h` around lines 58 - 66, The header uses
errno and POSIX error macros but doesn't include errno.h; make the header
self-contained by adding an explicit `#include` <errno.h> at the top of
include/platform/posix/net_impl.h so someip_socket_errno() and the macros
SOMEIP_EAGAIN, SOMEIP_EWOULDBLOCK, SOMEIP_EINPROGRESS, SOMEIP_EBADF,
SOMEIP_EINTR resolve reliably; ensure the include appears before the declaration
of static inline int someip_socket_errno() and the macro definitions.

Comment on lines +33 to +74
static inline int someip_setsockopt(int fd, int level, int optname,
const void* optval, int optlen) {
return setsockopt(fd, level, optname,
reinterpret_cast<const char*>(optval), optlen);
}

/** @implements REQ_PAL_NET_SOCKOPT */
static inline int someip_getsockopt(int fd, int level, int optname,
void* optval, socklen_t* optlen) {
return getsockopt(fd, level, optname,
reinterpret_cast<char*>(optval),
reinterpret_cast<int*>(optlen));
}

/** @implements REQ_PAL_NET_SEND */
static inline ssize_t someip_sendto(int fd, const void* buf, size_t len,
int flags, const struct sockaddr* dest,
socklen_t addrlen) {
return sendto(fd, reinterpret_cast<const char*>(buf),
static_cast<int>(len), flags, dest, addrlen);
}

/** @implements REQ_PAL_NET_RECV */
static inline ssize_t someip_recvfrom(int fd, void* buf, size_t len,
int flags, struct sockaddr* src,
socklen_t* addrlen) {
return recvfrom(fd, reinterpret_cast<char*>(buf),
static_cast<int>(len), flags, src, addrlen);
}

/** @implements REQ_PAL_NET_SEND */
static inline ssize_t someip_send(int fd, const void* buf, size_t len,
int flags) {
return send(fd, reinterpret_cast<const char*>(buf),
static_cast<int>(len), flags);
}

/** @implements REQ_PAL_NET_RECV */
static inline ssize_t someip_recv(int fd, void* buf, size_t len, int flags) {
return recv(fd, reinterpret_cast<char*>(buf),
static_cast<int>(len), flags);
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# Check the net_impl.h file structure
head -75 include/platform/win32/net_impl.h | tail -45

Repository: vtz/opensomeip

Length of output: 1882


🏁 Script executed:

# Search for socket handle declarations in transport layer
rg -A 3 -B 1 "int.*fd|int.*socket" src/transport/udp_transport.cpp | head -50

Repository: vtz/opensomeip

Length of output: 223


🏁 Script executed:

# Check tcp_transport.cpp socket usage
rg -A 3 -B 1 "int.*fd|int.*socket" src/transport/tcp_transport.cpp | head -50

Repository: vtz/opensomeip

Length of output: 1963


🏁 Script executed:

# Verify specific lines mentioned in the review
sed -n '240,250p' src/transport/udp_transport.cpp
sed -n '210,235p' src/transport/tcp_transport.cpp

Repository: vtz/opensomeip

Length of output: 925


🏁 Script executed:

# Search for SOCKET type or Winsock usage in the codebase
rg "SOCKET\s*\b" --type cpp include/ src/

Repository: vtz/opensomeip

Length of output: 1395


🌐 Web query:

Winsock SOCKET type definition 64-bit Windows UINT_PTR

💡 Result:

On Windows, Winsock’s SOCKET is defined as a pointer-sized unsigned integer:

  • In winsock2.h: typedef UINT_PTR SOCKET; [1]
  • UINT_PTR is an unsigned integer large enough to hold a pointer; on 64-bit Windows it is 64 bits (e.g., typedef unsigned __int64 UINT_PTR;) [2]

So on 64-bit Windows, SOCKET is a 64-bit unsigned integral type (pointer-width), not an int. [1][2]


🌐 Web query:

Windows setsockopt getsockopt SOCKET type vs int parameter

💡 Result:

On Windows (Winsock), the “socket” is not an int file descriptor like POSIX. It’s a distinct handle type:

  • SOCKET is typedef’d as a pointer-sized unsigned integer (UINT_PTR), so it’s 32-bit on x86 and 64-bit on x64. (doxygen.reactos.org)
  • Therefore setsockopt / getsockopt take a SOCKET s as their first parameter (the socket handle), not int. (learn.microsoft.com)

The option length parameters are still int in Winsock:

  • setsockopt(..., const char *optval, int optlen) uses optlen by value. (learn.microsoft.com)
  • getsockopt(..., char *optval, int *optlen) uses optlen as an in/out pointer. (learn.microsoft.com)

Why char*/const char* for optval? It’s historical/ABI compatibility: options are treated as a typeless byte buffer, so you pass the address of your typed value and cast it to (const char*) / (char*). (learn.microsoft.com)

Practical rules:

  • Always pass the correct size: optlen = sizeof(value) (many “boolean” options expect sizeof(int) in Winsock). (learn.microsoft.com)
  • Don’t assume POSIX types (socklen_t, timeval, etc.) match Winsock—follow the specific option’s documented type/size. (learn.microsoft.com)

Citations:


🏁 Script executed:

# Check if there's any `#include` <winsock2.h> or similar in the Windows PAL
rg "winsock|Windows\.h|ws2_32" include/platform/win32/ src/

Repository: vtz/opensomeip

Length of output: 244


🏁 Script executed:

# Check what the actual socket variable types are in transport layer
rg "socket_fd_|listen_socket_fd_|client_fd" --type cpp src/transport/ | grep -E "(int|SOCKET)" | head -20

Repository: vtz/opensomeip

Length of output: 1402


Use Winsock SOCKET type for socket handles, not int.

The wrapper functions take int fd, but Winsock's SOCKET is typedef'd as UINT_PTR—a 64-bit unsigned integer on 64-bit Windows. Passing a 64-bit handle into an int parameter truncates it to 32-bit, corrupting the socket before each API call. The transport layer (udp_transport.cpp, tcp_transport.cpp) also stores handles in int, so the type mismatch propagates throughout.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@include/platform/win32/net_impl.h` around lines 33 - 74, Change all socket
handle parameters and storage from int to Winsock SOCKET to avoid 32-bit
truncation: update functions someip_setsockopt, someip_getsockopt,
someip_sendto, someip_recvfrom, someip_send, someip_recv to accept SOCKET
instead of int and adjust any casts accordingly (e.g., keep reinterpret_cast on
buffer pointers, but pass the SOCKET directly to
setsockopt/getsockopt/send/recv/sendto/recvfrom). Also update transport-layer
types that store handles (references in udp_transport.cpp and tcp_transport.cpp)
from int to SOCKET, and ensure winsock2.h is included where SOCKET is used and
any socklen_t/int conversions are handled safely. Ensure builds compile with the
new signatures across all call sites.

Comment on lines 271 to 285
int keep_alive = 1;
#ifdef __APPLE__
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPALIVE, &keep_alive, sizeof(keep_alive));
int keep_alive_interval = static_cast<int>(config_.keep_alive_interval.count() / 1000);
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPINTVL, &keep_alive_interval, sizeof(keep_alive_interval));
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPCNT, &keep_alive, sizeof(keep_alive));
#if defined(__APPLE__)
someip_setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPALIVE, &keep_alive, sizeof(keep_alive));
#elif defined(_WIN32)
someip_setsockopt(socket_fd, SOL_SOCKET, SO_KEEPALIVE, &keep_alive, sizeof(keep_alive));
#else
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPIDLE, &keep_alive, sizeof(keep_alive));
int keep_alive_interval = static_cast<int>(config_.keep_alive_interval.count() / 1000);
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPINTVL, &keep_alive_interval, sizeof(keep_alive_interval));
setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPCNT, &keep_alive, sizeof(keep_alive));
someip_setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPIDLE, &keep_alive, sizeof(keep_alive));
#endif
#if !defined(_WIN32)
someip_setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPINTVL, &keep_alive_interval, sizeof(keep_alive_interval));
someip_setsockopt(socket_fd, IPPROTO_TCP, TCP_KEEPCNT, &keep_alive, sizeof(keep_alive));
#else
(void)keep_alive_interval;
#endif
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

find . -name "tcp_transport.cpp" -type f

Repository: vtz/opensomeip

Length of output: 91


🏁 Script executed:

cat -n src/transport/tcp_transport.cpp | sed -n '271,285p'

Repository: vtz/opensomeip

Length of output: 921


🏁 Script executed:

# Search for any documentation or comments about keepalive setup
rg "TCP_KEEP|SO_KEEPALIVE" -A 2 -B 2

Repository: vtz/opensomeip

Length of output: 1197


🏁 Script executed:

# Look for any existing documentation or comments about SO_KEEPALIVE
rg "SO_KEEPALIVE" -B 5 -A 5

Repository: vtz/opensomeip

Length of output: 1023


🏁 Script executed:

# Check if there are any man pages or documentation files
find . -name "*.md" -o -name "*.txt" -o -name "*.rst" | head -20

Repository: vtz/opensomeip

Length of output: 539


🏁 Script executed:

# Search for socket option constant definitions
rg "TCP_KEEPALIVE|TCP_KEEPIDLE|TCP_KEEPINTVL|TCP_KEEPCNT" | head -20

Repository: vtz/opensomeip

Length of output: 596


🏁 Script executed:

# Look at broader context around this keepalive setup to understand the flow
cat -n src/transport/tcp_transport.cpp | sed -n '260,295p'

Repository: vtz/opensomeip

Length of output: 1718


🌐 Web query:

TCP_KEEPIDLE TCP_KEEPALIVE socket option units seconds milliseconds

💡 Result:

  • Linux: TCP_KEEPIDLE (a.k.a. tcp_keepalive_time) is in seconds. (man7.org)
  • AIX: TCP_KEEPIDLE via setsockopt() is in seconds (even though some system tunables use half-second units). (ibm.com)
  • Solaris/illumos: TCP_KEEPIDLE is in seconds, while TCP_KEEPALIVE_THRESHOLD is in milliseconds. (docs.oracle.com)
  • TCP_KEEPALIVE option name (where it exists): commonly seconds (e.g., Solaris man page; z/OS docs). (docs.oracle.com)

If you tell me your target OS (Linux/macOS/FreeBSD/Solaris/Windows), I can map the exact option names you should use there and their units.

Citations:


🌐 Web query:

SO_KEEPALIVE must be set before TCP_KEEPIDLE TCP_KEEPINTVL

💡 Result:

On Linux, TCP_KEEPIDLE and TCP_KEEPINTVL only take effect for a socket when SO_KEEPALIVE is enabled (they control when/ how often keepalive probes are sent if SO_KEEPALIVE is set). They are effectively no-ops while SO_KEEPALIVE is off. [1]

However, the Linux API does not require a strict setsockopt call order (i.e., it’s not “must set SO_KEEPALIVE before TCP_KEEPIDLE/TCP_KEEPINTVL”); the practical requirement is simply: enable SO_KEEPALIVE at some point, otherwise no keepalive probes will be sent. [1][2]

Common pattern (for clarity/portability):

  1. setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, ...)
  2. setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, ...)
  3. setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, ...) (and optionally TCP_KEEPCNT) [2]

Sources:
[1] Linux tcp(7) man page (TCP_KEEPIDLE “... if the socket option SO_KEEPALIVE has been set ...”)
[2] TCP Keepalive HOWTO (enabling with SO_KEEPALIVE, and per-socket overrides via TCP_KEEPIDLE/TCP_KEEPINTVL)


SO_KEEPALIVE must be enabled on macOS/Linux for keepalive to work, and the idle timeout options receive the wrong values.

Line 274 (macOS) and line 278 (Linux) pass keep_alive (value 1) to TCP_KEEPALIVE and TCP_KEEPIDLE respectively; these options expect the idle timeout in seconds, so they should receive keep_alive_interval instead. Additionally, the macOS/Linux branches never enable SO_KEEPALIVE at the socket level—without it, the subsequent TCP_KEEP* options have no effect. The Windows branch correctly enables SO_KEEPALIVE (line 276), but the non-Windows paths skip this step entirely, rendering keepalive non-functional.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/transport/tcp_transport.cpp` around lines 271 - 285, The keepalive setup
is incorrect: enable SO_KEEPALIVE on non-Windows paths and pass the idle timeout
value (keep_alive_interval) to TCP_KEEPALIVE/TCP_KEEPIDLE instead of the boolean
keep_alive; update the code around someip_setsockopt/socket_fd in
tcp_transport.cpp to call someip_setsockopt(socket_fd, SOL_SOCKET, SO_KEEPALIVE,
&keep_alive, sizeof(keep_alive)) for macOS/Linux, then call someip_setsockopt
with IPPROTO_TCP and TCP_KEEPALIVE (macOS) or TCP_KEEPIDLE (Linux) using
&keep_alive_interval, and keep using TCP_KEEPINTVL and TCP_KEEPCNT with
keep_alive_interval and keep_alive respectively (and still noop
keep_alive_interval on Windows).

Comment on lines 337 to 340
int error = 0;
socklen_t len = sizeof(error);
getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);
someip_getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

wc -l src/transport/tcp_transport.cpp

Repository: vtz/opensomeip

Length of output: 93


🏁 Script executed:

sed -n '330,350p' src/transport/tcp_transport.cpp

Repository: vtz/opensomeip

Length of output: 949


🏁 Script executed:

sed -n '320,360p' src/transport/tcp_transport.cpp

Repository: vtz/opensomeip

Length of output: 1517


🏁 Script executed:

rg "someip_getsockopt" --type cpp

Repository: vtz/opensomeip

Length of output: 497


🏁 Script executed:

rg "int someip_getsockopt" -A 3 --type cpp

Repository: vtz/opensomeip

Length of output: 429


🏁 Script executed:

fd . -name "*.h" -o -name "*.hpp" | xargs rg "someip_getsockopt" -B 2 -A 5

Repository: vtz/opensomeip

Length of output: 2936


🏁 Script executed:

sed -n '310,370p' src/transport/tcp_transport.cpp

Repository: vtz/opensomeip

Length of output: 2171


🏁 Script executed:

rg "disconnect_internal" src/transport/tcp_transport.cpp -B 2 -A 2

Repository: vtz/opensomeip

Length of output: 718


Check someip_getsockopt() return value before trusting SO_ERROR.

The someip_getsockopt() call at line 339 ignores the return value. On all platforms (POSIX, Windows, Zephyr, lwip), someip_getsockopt returns 0 on success and non-zero on failure. If getsockopt(SO_ERROR) itself fails, the error variable stays at its initialized value of 0, causing the code to incorrectly report the connection as SUCCESS.

Suggested fix
             int error = 0;
             socklen_t len = sizeof(error);
-            someip_getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);
+            if (someip_getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
+                disconnect_internal();
+                return Result::NETWORK_ERROR;
+            }
 
             if (error == 0) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
int error = 0;
socklen_t len = sizeof(error);
getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);
someip_getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len);
int error = 0;
socklen_t len = sizeof(error);
if (someip_getsockopt(connection_.socket_fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
disconnect_internal();
return Result::NETWORK_ERROR;
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/transport/tcp_transport.cpp` around lines 337 - 340, The call to
someip_getsockopt(...) that fetches SO_ERROR isn't checking the function's
return value, so if someip_getsockopt fails you still treat the connection as
successful; update the code around the someip_getsockopt call (the block using
connection_.socket_fd, SOL_SOCKET, SO_ERROR) to capture its return value, and if
the return is non-zero treat the operation as a failure (populate/override error
with a meaningful non-zero value such as errno or a platform-specific error
code) and handle that path the same as a socket error instead of assuming
success.

Comment on lines 483 to 488
if (sent < 0) {
if (errno == EAGAIN || errno == EWOULDBLOCK) {
int err = someip_socket_errno();
if (err == SOMEIP_EAGAIN || err == SOMEIP_EWOULDBLOCK) {
continue; // Retry
}
return Result::NETWORK_ERROR;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, locate the tcp_transport.cpp file
find . -name "tcp_transport.cpp" -type f

Repository: vtz/opensomeip

Length of output: 91


🏁 Script executed:

#!/bin/bash
# Read the relevant sections around lines 483-488 and 511-515
# Let's get a broader context to understand the code structure
fd tcp_transport.cpp -x wc -l {}

Repository: vtz/opensomeip

Length of output: 130


🏁 Script executed:

#!/bin/bash
# Read the file with line numbers to examine the error handling
# Get lines 475-495 for the first location
fd tcp_transport.cpp -x cat -n {} | sed -n '475,495p'

Repository: vtz/opensomeip

Length of output: 1111


🏁 Script executed:

#!/bin/bash
# Get lines 505-520 for the second location
fd tcp_transport.cpp -x cat -n {} | sed -n '505,520p'

Repository: vtz/opensomeip

Length of output: 668


🏁 Script executed:

#!/bin/bash
# Search for SOMEIP_EINTR definition and usage in the codebase
rg "SOMEIP_EINTR" --type-list | head -20

Repository: vtz/opensomeip

Length of output: 447


🏁 Script executed:

#!/bin/bash
# Search for SOMEIP_EINTR
rg "SOMEIP_EINTR" -A 2 -B 2

Repository: vtz/opensomeip

Length of output: 1699


🏁 Script executed:

#!/bin/bash
# Read the actual tcp_transport.cpp implementation (not the test file)
cat -n ./src/transport/tcp_transport.cpp | sed -n '475,520p'

Repository: vtz/opensomeip

Length of output: 2054


🏁 Script executed:

#!/bin/bash
# Search for send() method and error handling in tcp_transport.cpp
rg "if.*sent.*<.*0" ./src/transport/tcp_transport.cpp -A 5 -B 2

Repository: vtz/opensomeip

Length of output: 353


🏁 Script executed:

#!/bin/bash
# Also search for the send() calls to understand the context
rg "someip_send|ssize_t.*sent" ./src/transport/tcp_transport.cpp -B 2 -A 5

Repository: vtz/opensomeip

Length of output: 368


Retry SOMEIP_EINTR in both TCP I/O paths.

Both send_data() (line 485) and receive_data() (line 512) only special-case SOMEIP_EAGAIN/SOMEIP_EWOULDBLOCK but not SOMEIP_EINTR. When a signal interrupts send() or recv(), the operation fails with EINTR, which the code currently treats as a fatal NETWORK_ERROR and forces a disconnect. Per POSIX standards, signal-interrupted system calls should be retried. The UDP transport correctly handles this pattern (checking both SOMEIP_EBADF and SOMEIP_EINTR), but TCP does not.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/transport/tcp_transport.cpp` around lines 483 - 488, In send_data() and
receive_data(), extend the error handling after someip_socket_errno() to treat
SOMEIP_EINTR like SOMEIP_EAGAIN/SOMEIP_EWOULDBLOCK by continuing and retrying
the operation instead of returning Result::NETWORK_ERROR; specifically, update
the branches that currently only check SOMEIP_EAGAIN/SOMEIP_EWOULDBLOCK to also
check for SOMEIP_EINTR (using the existing someip_socket_errno() call and the
SOMEIP_EINTR constant), so interrupted syscalls are retried rather than forcing
a disconnect.

Comment on lines 423 to 431
if (received < 0) {
// Socket was closed during shutdown
if (errno == EBADF || errno == EINTR) {
int err = someip_socket_errno();

if (err == SOMEIP_EBADF || err == SOMEIP_EINTR) {
return Result::NOT_CONNECTED;
}

// In non-blocking mode, EAGAIN/EWOULDBLOCK means no data available
if (!config_.blocking && (errno == EAGAIN || errno == EWOULDBLOCK)) {
if (!config_.blocking && (err == SOMEIP_EAGAIN || err == SOMEIP_EWOULDBLOCK)) {
return Result::TIMEOUT;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, find the file and check its structure
find . -name "udp_transport.cpp" -type f

Repository: vtz/opensomeip

Length of output: 91


🏁 Script executed:

# Read the specific lines mentioned in the review
head -n 450 src/transport/udp_transport.cpp | tail -n +400 | cat -n

Repository: vtz/opensomeip

Length of output: 1898


🏁 Script executed:

# Get more context around the error handling
sed -n '400,450p' src/transport/udp_transport.cpp | cat -n

Repository: vtz/opensomeip

Length of output: 1898


🏁 Script executed:

# Search for SOMEIP_EINTR definition
rg "SOMEIP_EINTR" --type cpp -B 2 -A 2

Repository: vtz/opensomeip

Length of output: 1699


🏁 Script executed:

# Look for the complete receive function context
ast-grep --pattern 'fn receive() {
  $$$
}'

Repository: vtz/opensomeip

Length of output: 40


🏁 Script executed:

# Search for how EINTR is handled elsewhere in the codebase
rg "EINTR" --type cpp -B 3 -A 3

Repository: vtz/opensomeip

Length of output: 2083


🏁 Script executed:

# Find callers of receive_data
rg "receive_data" --type cpp -B 2 -A 2

Repository: vtz/opensomeip

Length of output: 2477


🏁 Script executed:

# Look for receive loops or retry patterns
rg "receive_data|receive|EINTR" src/transport/ --type cpp | head -40

Repository: vtz/opensomeip

Length of output: 3613


🏁 Script executed:

# Check if there's a transport loop that retries on errors
fd . src/transport --type f -name "*.cpp" -o -name "*.h" | xargs grep -l "receive_data" | head -5

Repository: vtz/opensomeip

Length of output: 288


🏁 Script executed:

# Get the full receive_loop function
sed -n '350,400p' src/transport/udp_transport.cpp

Repository: vtz/opensomeip

Length of output: 2127


🏁 Script executed:

# Check the entire receive_loop to understand how errors are handled
rg "void UdpTransport::receive_loop" -A 40 src/transport/udp_transport.cpp

Repository: vtz/opensomeip

Length of output: 1755


🏁 Script executed:

# Look at error result handling in the loop
rg "receive_loop\|Result result.*receive_data\|result == Result::" src/transport/udp_transport.cpp -A 3 -B 1

Repository: vtz/opensomeip

Length of output: 40


Retry SOMEIP_EINTR instead of exiting the receive loop.

Line 27 maps SOMEIP_EINTR to Result::NOT_CONNECTED, which causes receive_loop() to break and exit the receiver thread. EINTR (interrupted syscall) is transient—it occurs when a signal interrupts recvfrom(), not because the socket is closed. Per POSIX semantics, the syscall should be retried. Only SOMEIP_EBADF (invalid socket) justifies returning NOT_CONNECTED.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/transport/udp_transport.cpp` around lines 423 - 431, The receive loop
treats SOMEIP_EINTR as NOT_CONNECTED which prematurely exits the receiver;
change the error handling in the recvfrom() error branch in udp_transport's
receive_loop so that ONLY SOMEIP_EBADF returns Result::NOT_CONNECTED, while
SOMEIP_EINTR causes the loop to retry (i.e., continue to the next recv attempt);
keep the existing handling for non-blocking EAGAIN/EWOULDBLOCK returning
Result::TIMEOUT and preserve use of someip_socket_errno(),
Result::NOT_CONNECTED, Result::TIMEOUT and config_.blocking so behavior for
other cases is unchanged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Windows (MSVC) build fails: multiple portability issues

1 participant