Background
I tested cross-stack SOME/IP-SD interoperability between opensomeip and vsomeip: a vsomeip publisher on one VM, an opensomeip subscriber on another, started as containers managed by Eclipse Ankaios, both using standard SOME/IP-SD multicast for discovery.
A minimal reproducible example is available here:
https://github.com/GabyUnalaq/someip-interoperability
Summary
Out of the box, the opensomeip subscriber cannot discover the vsomeip publisher. I traced this to two issues in IPv4EndpointOption in src/sd/sd_message.cpp:
- Bounds check — the deserializer checks
offset + length_ against the remaining buffer, but vsomeip sets length_ = 9 per AUTOSAR while opensomeip has already consumed the reserved byte, leaving only 8 bytes. The option is silently dropped and the SD offer is ignored.
- Byte order —
ipv4_address_ is stored as addr.s_addr (NBO bytes in a little-endian integer), but the serializer and deserializer both use MSB-first shifts, reversing the IP bytes on the wire. This cancels within opensomeip↔opensomeip but breaks against vsomeip's correct AUTOSAR NBO.
Both fixes are symmetric (serialize and deserialize change together), so opensomeip↔opensomeip communication is unaffected.
Full technical details — root cause, before/after code, and reasoning — are in docs/interop.md in the example repository.
The purpose of this issue is to raise awareness of the interoperability gap and discuss whether these fixes should be merged into opensomeip.
Background
I tested cross-stack SOME/IP-SD interoperability between opensomeip and vsomeip: a vsomeip publisher on one VM, an opensomeip subscriber on another, started as containers managed by Eclipse Ankaios, both using standard SOME/IP-SD multicast for discovery.
A minimal reproducible example is available here:
https://github.com/GabyUnalaq/someip-interoperability
Summary
Out of the box, the opensomeip subscriber cannot discover the vsomeip publisher. I traced this to two issues in
IPv4EndpointOptioninsrc/sd/sd_message.cpp:offset + length_against the remaining buffer, but vsomeip setslength_ = 9per AUTOSAR while opensomeip has already consumed the reserved byte, leaving only 8 bytes. The option is silently dropped and the SD offer is ignored.ipv4_address_is stored asaddr.s_addr(NBO bytes in a little-endian integer), but the serializer and deserializer both use MSB-first shifts, reversing the IP bytes on the wire. This cancels within opensomeip↔opensomeip but breaks against vsomeip's correct AUTOSAR NBO.Both fixes are symmetric (serialize and deserialize change together), so opensomeip↔opensomeip communication is unaffected.
Full technical details — root cause, before/after code, and reasoning — are in
docs/interop.mdin the example repository.The purpose of this issue is to raise awareness of the interoperability gap and discuss whether these fixes should be merged into opensomeip.