Service Discovery Configuration Parameters
What is SOME/IP Service Discovery (SD)?
To use a SOME/IP service, a client must know the service location—the IP address and port where the service can be accessed. A server providing a service must know the recipients of event messages. Events are delivered only to subscribers (publish-subscribe).
SOME/IP SD provides these capabilities:
Locating service instances
Handling publish-subscribe behavior
SD uses UDP multicast. By joining the multicast group, applications can listen to or send SD messages.
The offering application periodically sends a SOME/IP SD message containing an offer entry to all multicast participants. The offer entry includes the service location (IP and port), instance ID, service ID, major and minor versions, and a TTL for the offer. Subscribers can send back a SOME/IP SD subscribe entry for the eventgroup, including the instance ID, service ID, major version, eventgroup ID, the subscription TTL, and the client endpoint (IP and port). The server responds with a subscribe_acknowledge entry. This handshake implements publish-subscribe. The actual event messages are delivered to the subscribers.
An alternative is to send a find_service entry to query whether a participant offers a specific service. If offered, the participant responds with an offer_service entry, after which subscription proceeds as above. Participants can also send stop_offer entries to indicate shutdown.
SD messages are SOME/IP messages marked with specific magic numbers. For example, the message ID is 0xFFFF81000 and the protocol and interface version are 0x01.
The SOME/IP SD protocol specification is available here.
Service Discovery Parameters in the someipy Daemon
As shown in the someipy Daemon guide, the daemon handles all communication with the SOME/IP network, including service discovery, and uses a specific configuration for SD messages.
The configuration is a JSON file with optional parameters:
{
"sd_address": "224.224.224.245",
"sd_port": 30490,
"interface": "127.0.0.1",
}
sd_address: Multicast address for SD. Default: “224.224.224.245”.sd_port: SD port. Default: 30490.interface: Network interface IP the daemon listens on. Default: “127.0.0.1”.
Server-Side Parameters
Offering a service uses ServerServiceInstance. The constructor accepts SD-related parameters:
service_instance_temperature = ServerServiceInstance(
daemon=someipy_daemon,
service=temperature_service,
instance_id=SAMPLE_INSTANCE_ID,
endpoint_ip=interface_ip,
endpoint_port=3000,
ttl=5,
cyclic_offer_delay_ms=2000,
)
ttl: Lifetime of the SD offer entries in seconds. The offer entries are repeated while valid.cyclic_offer_delay_ms: Interval in milliseconds between consecutive SD offer messages.
Ensure ttl > cyclic_offer_delay_ms; otherwise the service may appear unavailable briefly (for example, ttl=1 s and cyclic_offer_delay_ms=2000 ms).
Client-Side Parameters
When subscribing to eventgroups as a client, the subscription lifetime is set with ttl_subscription_seconds in subscribe_eventgroup. If not renewed, the subscription will be removed after this period. Ensure ttl_subscription_seconds > cyclic_offer_delay_ms; otherwise, the subscription may be removed before the next offer and events will not be delivered.
service_instance_temperature.subscribe_eventgroup(temperature_eventgroup, ttl_subscription_seconds=5.0)