8. SoAd
BSW配置:ISOLAR Autosar BSW 配置 之 SoAd-CSDN博客
SoAd模块的主要目的是在使用pdu(例如PDU路由器)的自动共享通信服务模块和基于套接字的TCP/IP堆栈之间创建一个接口。它将把I-PDUid映射到套接字连接,反之亦然。
-
为了避免进一步的协议开销,这里描述了每个PDU使用单个套接字连接。然而,这种解决方案是非常资源密集型的,特别是当要传输许多小的pdu时。这里描述的一个解决方案是添加一个小的PDU标头,其中包含一个ID和长度信息。这允许通过一个套接字连接传输多个pdu。此外,本规范中还提供了一个资源保护方案。
-
为同时支持多个通信合作伙伴,每个本地套接字,套接字具有相同连接参数的连接可以分组到套接字连接组。
-
一个UDP套接字连接组中的所有套接字连接共用一个TcpIp套接字。
-
注意:TCP套接字连接组的所有套接字连接(soadsockettcplinitiate设置为FALSE)共享一个Tcplp套接字,用于接收连接请求(“Listen-Socket”),但使用由Tcplp模块创建的单独的Tcplp套接字,并在连接建立后通过SoAd_TcpAccepted()提供。
-
8.1 上层模块
PDUR给SOAD模块提供PDU路由功能。主要是针对需要大量自定义PDU的信号需求,比如Someip,需要PDUR将someip报文从LDCOM/COM模块与SOAD之间进行路由。
-
PDU Router (PduR) [12]: IF-PDU and TP-PDU API
-
UDP Network Management (UdpNm) [8]: IF-PDU API
UdpNm主要执行基于UDP报文的网络管理功能,因为UdpNm通过Soad模块的接口进行报文收发。
-
Service Discovery (Sd) [11]: IF-PDU API, Control API (8.3.4)
Sd通过Soad模块接口进行服务发现报文的收发。Sd在进行服务发现处理之后,会对Soad中的Socket Connection以及Routing Group进行控制。
-
Diagnostics over IP (DoIP) [15]: IF-PDU and TP-PDU API, Control API (8.3.4)
Doip主要完成的是基于IP的诊断协议栈的诊断报文的处理。Doip会通过Soad的接口收发以太网诊断报文。
8.2 描述
-
SoAd允许通过TCP/IP网络进行基于pdu的通信。I-PDU被映射到由SoAd配置和维护的套接字连接。
-
为了对多个I-PDU使用套接字连接,可以在每个I-PDU前面选择性地添加一个SoAd PDU头。
-
指定消息接受策略来定义接受来自远程节点的哪些TCP连接和UDP数据报。
-
套接字连接可以通过来自上层的请求自动或手动打开。对于套接字连接的断开和恢复,定义了一个策略。
-
SoAd的上层可以使用IF-API和TP-API来发送和接收PDU。一般只有DoIp(TCP)选择TP层。其余的都选IF层。
-
为了有选择地使能或使能PDU从套接字连接或到套接字连接的路由,定义了PDU路由组,由SoAd上层控制。
-
一个IF-PDU也可以转发到多个套接字连接,或者一个套接字连接收到的消息可以作为不同的IF-PDU转发到SoAd的相同或不同的上层(PDU Fan-out)。
8.3 套接字连接
-
对于TCP/IP通信的抽象,SoAd定义了套接字连接。本地套接字(即本地地址标识符和本地端口)和远程套接字(即远程IP地址和端口)
-
每个套接字连接都可以通过一个唯一的标识符(SoConId)进行标识。
-
为同时支持多个通信合作伙伴,每个本地套接字,套接字具有相同连接参数的连接可以分组到套接字连接组。
-
SoAdSocketTcpInitiate:TURE Client/FALSE Server
-
通知:SoAdSocketSoConModeChgNotification、SoAdSocketSoConModeChgNotifUpperLayerRef、SoAdSocketIpAddrAssignmentChgNotification
8.4 PDU头
PDU标头应包括一个4字节的ID字段,用于唯一标识接收端的PDU和一个4字节长度的字段,指定PDU的数据长度。
Service ID+Mothed/Event ID == MessageID
8.5 最佳匹配算法
SoAd应使用以下最佳匹配算法,根据所提供的(特定的)远程地址,选择套接字连接组的套接字连接:
-
应忽略没有(特定或通配符)远程地址集的套接字连接
-
其余插座连接的远程地址应与提供的远程地址进行比较,并根据以下订单列表选择最匹配的插座连接(后列项目优先):
-
IP地址和端口匹配
-
IP地址匹配(并为端口设置了通配符)
-
端口匹配(并为IP地址设置了通配符)
-
通配符同时用于IP地址和端口
-
不匹配(即不能选择套接字连接)
-