【AUTOSAR】SOME/IP Service Discovery Protocol Specification(R22-11)を読んでみる

【AUTOSAR】SOME/IP Service Discovery Protocol Specification(R22-11)を読んでみる

[PRS_SOMEIPSD_00351]

  • FindServeiceのフィールド設定について

  • これはパケットを見よう

[PRS_SOMEIPSD_00528]・[PRS_SOMEIPSD_00529]

  • FindServiceにはIP EndPointOptionを含めないし、含んでいた場合も無視する

[PRS_SOMEIPSD_00839]

  • サーバ側が Initial Wait Phaseの場合受信したFindServiceは無視する

  • Initial Wait Phaseについてはこの後解説があるはず

Offer Service Entry

[PRS_SOMEIPSD_00355]〜[PRS_SOMEIPSD_00827]

  • ara::com仕様書で書かれていたものと同様なので飛ばす

  • OfferServiceにはIPEndPointOptionが含まれる

  • UDPの場合、クライアントはこのIPに向けてSubscribeを出す

  • OfferServiceのTTLを0xFFFFFFにすると再起動されるまで有効となる。一方0x000000にするとStopOfferServiceとなる

5.1.2.6 Endpoint Handling for Services and Events

[PRS_SOMEIPSD_00476]

  • EndPointが静的にManifestに定義されていたとしても、実際にOfferServiceで送られてきたEndPointが異なった場合は上書きする

[PRS_SOMEIPSD_00360]

  • OfferServiceに含まれるEndPointからEventは送信される。かつ、クライアントはメソッドのReqを送る

[PRS_SOMEIPSD_00361]

  • EndPointがUDPの場合、そのままSOME/IP通信に使われる

[PRS_SOMEIPSD_00362]

  • TCPの場合、クライアントは3ウェイハンドシェイクをする

[PRS_SOMEIPSD_00801]

  • サービスはUDPとTCPの両方を同時に使用できる

  • EventはUDP、MethodはTCPとか

[PRS_SOMEIPSD_00802]

  • どのメッセージでUDP or TCPを使うかは明示的に設定する必要がある

  • ManifestにEvent、Methodごとに記載する必要がある

....

[PRS_SOMEIPSD_00481]

  • ServiceInstanceを分ける場合は、Endpointを分けることで識別する必要

Eventgroup Endpoints

[PRS_SOMEIPSD_00484]

  • Subscribe Eventgroup メッセージに含まれるEndPointへサーバはイベントを送信する

  • EventをTCPで送信する場合は、クライアントがSubscribe Eventgroup メッセージ送信前にTCPコネクションを貼り、このコネクション上でEventを送信する

[PRS_SOMEIPSD_00487]

  • 初期イベントは必ずunicastで送られる必要がある

  • Initial Eventってなんだ?

[PRS_SOMEIPSD_00488]

Subscribe Eventgroup Ackには最大1つのMulticastIPを含む必要がある

  • EventをMulticastで送る設定した場合に使用するMulticastIPのこと

サービスディスカバリからイベント・メソッドを送るまでの流れがわかりやすく書かれている:

画像

5.1.3 Service Discovery Messages

[PRS_SOMEIPSD_00600]

  • すべてのSDメッセージはSD_PORT(=30490)へ送られる

[PRS_SOMEIPSD_00601]

  • SD_PORTはunicastでもMulticastでも送信元ポートとして使われる

[PRS_SOMEIPSD_00603]

  • すべてのSDメッセージはSD_MULTICAST_IPへ送られる

5.1.3.1 Eventgroup Entry

Subscribe Eventgroup Entry

Stop Subscribe Eventgroup Entry

Subscribe Eventgroup Acknowledgement (Subscribe Eventgroup Ack) Entry

Subscribe Eventgroup Negative Acknowledgement (Subscribe Eventgroup Nack) Entry

[PRS_SOMEIPSD_00566]

  • Subscribe Eventgroup Nackは必要なTCPコネクションが存在しない場合も送られる

[PRS_SOMEIPSD_00527]

  • TCPコネクションが必要な SubscribeEventgroupについてNACKが帰ってきた場合はクライアントはTCPコネクションを再チェックして、TCPコネクションを貼り直す

  • NACKを受け取るとTCPコネクションが切れることになる

5.1.4 Service Discovery Communication Behavior

[PRS_SOMEIPSD_00800]

  • SDのメッセージをなるべく減らすため、メッセージはなるべくまとめて送るべき

  • OfferやSubscribeEventgroupAck を同じメッセージに含めて送信できる

5.1.4.1 Startup Behavior

[PRS_SOMEIPSD_00395]

  • SDにおいて各インスタンスは少なくとも以下3つの状態を実装する

  • Initial Wait Phase

  • Repetition Phase

  • Main Phase

[PRS_SOMEIPSD_00397]

  • クライアントサービスのインスタンスは以下の条件を満たした時、Initial Wait Phaseに入る

対応するインターフェースのリンクが Up 状態

アプリケーションからそのクライアントサービスが要求された

[PRS_SOMEIPSD_00133]

  • サーバサービスのインスタンスは以下の条件を満たした時、Initial Wait Phaseに入る

対応するインターフェースのリンクが Up 状態

  • サーバのサービスが提供可能になった

[PRS_SOMEIPSD_00399]

  • Initial Wait Phase に入った後、INITIAL_DELAYの時間だけ待機してから、SDメッセージを送信する

[PRS_SOMEIPSD_00400]・[PRS_SOMEIPSD_00401]

  • INITIAL_DELAYは最大値と最小値の範囲で記載され、その範囲からランダムの値を取る

  • ネットワーク負荷を下げるため

[PRS_SOMEIPSD_00404]

  • 初回のSDメッセージを送信したら、Repetition Phaseに移行する

[PRS_SOMEIPSD_00405]

  • Repetition Phaseでの待機時間はREPETITIONS_BASE_DELAYに基づく

[PRS_SOMEIPSD_00406]

  • Repetition Phaseではメッセージ送信のたびに待機時間が倍増

[PRS_SOMEIPSD_00407]

  • メッセージはREPETITIONS_MAXの回数まで送信可能

[PRS_SOMEIPSD_00408]

  • クライアントはOfferエントリを受信したらMain Phaseへ遷移し、Findメッセージを送信しない

[PRS_SOMEIPSD_00409]

  • REPETITIONS_MAX = 0と設定した場合、Repetition Phaseはスキップされ、Main Phaseへ

[PRS_SOMEIPSD_00410]

  • Repetition Phaseの後、Main Phaseに入る

[PRS_SOMEIPSD_00411]

  • Main Phaseへ遷移後、CYCLIC_OFFER_DELAYだけ待機して最初のOfferエントリを送信する

[PRS_SOMEIPSD_00412]

  • CYCLIC_OFFER_DELAYが設定されている場合は、 Main PhaseでOfferを周期的に送信する

[PRS_SOMEIPSD_00413]

  • Offerメッセージを送信したら次のメッセージ送信までCYCLIC_OFFER_DELAYだけ待つ必要がある

[PRS_SOMEIPSD_00415]

  • Main PhaseでのFindメッセージの周期的送信は禁止されている

[PRS_SOMEIPSD_00582]

Subscribe EventGroupメッセージは周期的に送信されるOfferメッセージによってトリガーされる

  • これは毎回のOfferに対してSubscribeを送れということではないっぽい

5.1.4.2 Server Answer Behavior

[PRS_SOMEIPSD_00417]

  • 以下の場合でREQUEST_RESPONSE_DELAYにもとづく遅延を入れる必要がある

  • Find(Multicats)受信からOffer送信まで

  • Offer(Multicats)受信からSubscribe送信まで

[PRS_SOMEIPSD_00419]

  • ユニキャストのメッセージにユニキャストで応答する場合は遅延の対象外

[PRS_SOMEIPSD_00422]

  • 基本的な設計としては、FindServiceへの嘔吐は全てユニキャストでOffer Serviceを返答するべき

[PRS_SOMEIPSD_00423]

  • 最適化のため、以下の振る舞いがサポートされる

Unicast Flag = 1のFindメッセージを Main Phase で受信。かつ最後の Offer 送信から CYCLIC_OFFER_DELAY の半分より短い時間であれば、ユニキャストで応答してよい

  • CYCLIC_OFFER_DELAYの半分以上であればMulticastで応答しても良い

[PRS_SOMEIPSD_00811]

  • 純粋なイベントメッセージに対して初期値を要求してはいけない
Share:Post

関連記事