IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> AUTOSAR SWS Service Discovery -> 正文阅读

[系统运维]AUTOSAR SWS Service Discovery

1. 前言

BswM – Basis software manager,基础软件管理;
DEM – Diagnostic Event Manager,诊断事件管理器;
DET – Default Error Tracer,默认错误跟踪器;
SD – Service Discovery,服务发现;
Sd – Service Discovery Module in AUTOSAR,AUTOSAR 服务发现模块;
SoAd – Socket Adaptor,套接字适配器;
SOME/IP – Scalable service-Oriented MiddlwarE over IP,基于IP的可扩展的面向服务中间件;
SOME/IP-SD – SOME/IP Service Discovery,SOME/IP服务发现;

Eventgroup:

  • 一个由一个或多个事件组成的逻辑分组服务,属于服务的一部分;

Endpoint Option:

  • 用于发布单播的地址和端口;

Multicast Option:

  • 用于发布多播的地址和端口;

Unicast event:

  • 由ServerService的ECU传输到多播端点的事件;

Multicast event:

  • 由ServerService的ECU传输到单播端点的事件;

Eventhandler multicast endpoint:

  • 描述组播地址和端口信息。该信息是为每个 Eventhandler(事件处理程序)SdServerService(服务端服务发现模块) 预先配置的;若订阅的客户端数量达到最大值,服务器将会把事件信息发送到预先配置的多播地址;Eventhandler多播端点是通过SubscribeEventgroupAck Entry引用的Multicast option发布的;

Consumed Eventgroup unicast endpoint:

  • 描述单播地址和端口信息。该信息是为每个Consumed EventGroup的SdClientService预先配置的;使用此单播地址和端口订阅的SdClientService表示要访问的SdServer端点,则应发送响应事件;已使用的Eventgroup单播端点通过SubscribeEventgroup或StopSubscribeEventgroup条目引用的Endpoint option发布;

Consumed Eventgroup multicast endpoint:

  • 描述多播地址和端口信息。该元组是为每个Consumed EventGroup的SdClientService预先配置的。使用此多播地址和端口订阅的SdClientService指示应将相应事件发送到哪个端点的SdServer。已使用的Eventgroup多播终结点通过SubscribeEventgroup或StopSubscribeEventgroup引用的Endpoint option发布;

Eventhandler multicast connection:

  • 描述SdServerService通过配置的Eventhandler多播端点提供多播事件时已建立套接字连接;

Consumed Eventgroup unicast connection :

  • 建立套接字连接后,SdClientService通过已使用的Eventgroup单播端点接收事件;

Consumed Eventgroup multicast connection:

  • 建立套接字连接后,SdClientService通过已使用的Eventgroup多播端点接收事件;

2. 简介

Sd模块提供了检测和提供可用服务的功能。如IP多播和SOME/IP-SD消息;
Sd模块位于BswM模块和SoAd模块之间,如下图所示:
SD位置示意图

3. 相关规范

AUTOSAR 提供了一个基本软件模块的通用规范[2,SWS BSW General] ,该规范也适用于服务发现。

4. 模块间的依赖

4.1 AUTOSAR BSW Scheduler

BSW 调度器调用 SD 模块的主要功能,这对 SD的循环进程是必需的。

4.2 AUTOSAR BSW Mode Manager

BswM 模块提供了通用模式请求和服务请求之间的链接。

4.3 AUTOSAR Socked Adaptor

套接字适配器在以太网栈和SD模块之间传递服务请求;
SD应可以激活和关闭PUD Router与TCP/IP套接字之间的连接,并可以触发事件初始信息传输
SoAds的套接字连接表需要预先进行配置,即用于接收其他ECUs SD模块发送的单播和多播信息。因为ECU可能连接多个(虚拟)网络,存在多个SD实例,这些SD实例可能有多个 Socket 连接表条目。每个(虚拟)接口的 Unicast Rx、 Multicast Rx 和Tx PduIDs 的三元组需要在SoAds 中配置,并且要被SD模块知道;
此外,SD 模块从接收的 SD 消息中获取SD 模块更新套接字连接(SoAd Socket Connection)中的端点信息(IP 地址和端口号) ;
出于对代码健壮性的考虑,只使用UDP套接字传输SD消息,并且应该打开soadsocketudpstrictheaderlencheckenabledoption 选项

4.4 AUTOSAR Default Error Tracer(追踪器)

即默认的错误处理函数。

4.5 AUTOSAR Diagnostic Event Manager

为了更好的报告错误信息,SD模块将访问Diagnostic Event Manager。是为了将错误码对上错误信息?

4.6 文件结构

4.6.1 代码文件结构

  • [SWS_Sd_00001] 代码文件结构不应在本规范中完全定义。但代码文件结构应该包括以下文件命名:
  1. Sd _ lcfg.c - 链路时间可配置参数;
  2. Sd_PBcfg.c - 用于构建后时间可配置参数;
    这些文件应该包含连接事件和构建事件的可配置参数。

4.6.2 头文件结构

  • [SWS_Sd_00003] 模块中应包括 Dem.h 文件,用于APIs报告错误信息以及所需的 Event IDs 符号;

5. 功能规范

5.1 背景和依据

  • Service Discovery 模块主要是管理车载通信中的服务实例和控制事件消息的发送,可以将事件消息只发送给订阅者;
  • ECUs通过SD 实现创造、查找、关闭服务实例;
  • Service Discovery 模块可以管理服务实例状态、Event消息的发送,同时也可以订阅/发布这个Events组成的Eventgroups,并控制Eventgroups事件信息的发送与接收;

一个本地ECU需要处理两种不同的服务:

  • 服务端服务 - 本地 ECU 向车辆的其他部分提供服务器服务实例(即位于本地) ,并且可以被视为此服务实例的服务器;
  • 客户端服务 - 本地 ECU 可以使用车辆内另一个 ECU 提供的服务器服务实例,并且可以被认为是这个服务实例的客户端;

对服务端服务来说,本地ECUs的 Service Discovery 模块必须可以满足如下条件:

  • 提供本地服务,即ECU的服务要为可用状态;
  • 若服务为不可用时,应停止提供服务,并回应其他ECUs的发现服务请求;

对客户端服务来说,本地ECUs Service Discovery 模块必须可以满足如下条件:

  • 依据配置的不同,提供者和查找者侦听取决于存储在易失性存储器中配置信息;
  • 侦听停止,也取决于存储在易失性存储器中配置信息;
  • 发送发现服务,取决于当前ECUs和ECUs基础软件组件的状态;

Service Discovery 可用于管理发布/订阅关系;
Service Discovery 消息中定义了订阅消息,发布则是基于服务实例本身的可用性。基于提供的服务实例,Publish/Subscribe 客户端可以通过 SubscribeEventgroup 条目进行订阅。服务端将订阅客户端指定为某些消息的兴趣方,并在某个事件或超时之前开始将该信息发送到 Publish/Subscribe 客户端;
Service Discovery 模块支持多播消息向多个客户端发送事件消息,而不是每个客户端使用单播消息,前提是必须在服务端和客户端预先配置多播端点信息,但服务端和客户端之间存在一定的差异,如下所示:

  1. 如果 SdServerService 每个 even-handler 都有一个预先配置的多播地址和端口,那么如果已经达到了具有不同端点信息的订阅 sdClientServices 的阈值(SdEventHandler-MulticastThreshold) 后,SdServerService 将切换到这个多播地址和端口(所谓的“ Eventhandler 多播端点”);
  2. 如果 SdClientService 订阅了多播地址和端口(称为“ Consumed Eventgroup 多播端点”) ,则 SdServerService 在订阅了 Consumed Eventgroup 多播端点(多播地址和端口)后发送其事件;
    服务与事件组概述

5.2 要求

5.2.1 基础要求

  • [SWS_Sd_00400] dIt 应该可以将 Service Discovery 模块配置为一个可选的 AUTOSAR BSW 模块(参考SystemTemplate for configu-ration.c);
  • [SWS_Sd_00004] Service Discovery 应该实现一个主函数,该函数应该根据配置参数循环调用;
  • [SWS_Sd_00005] Service Discovery 模块应该存储通过 BswM 调用以下 api 提供的 ServiceModeRe-quest:
    如果SdServerService 和 sdclientservice 分别没有引用 SdServiceGroup,则调用Sd_ServerServiceSetState() 和Sd_ClientServiceSetState();
    如果 SdServerService 和 SdClientService 分别引用了 SdServiceGroup,则调用Sd_ServiceGroupStart()和SdServiceGroupStop();
    如果 SdClientService 重新请求专用的SdEventGroupS,则调用Sd_consumedeventgroupsetstate (),(注意: 这个 API 调用允许独立于对 SdClientService 的SdServiceGroup 的引用);
    Sd_EventHandlerSetState() 目前不存在,因为这个状态是由 Service Discovery 从服务器服务的状态直接推导出来的。
  • 基于与 SWCs 的交互,Bswm 模块可以请求以下模式:
    Server SWCs通过Sd_ServerServiceSetState() 或者Sd_ServiceGroupStart()和Sd_ServiceGroupStop ():
    ? SD_SERVER_SERVICE_DOWN
    ? SD_SERVER_SERVICE_AVAILABLE
    Client SWCs通过Sd_ClientServiceSetState()或者Sd_ServiceGroupStart()和Sd_ServiceGroupStop():
    ? SD_CLIENT_SERVICE_RELEASED
    ? SD_CLIENT_SERVICE_REQUESTED
    Client SWCs通过Sd_ConsumedEventGroupSetState():
    ? SD_CONSUMED_EVENTGROUP_RELEASED
    ? SD_CONSUMED_EVENTGROUP_REQUESTED

“SD_SERVER_SERVICE_DOWN” 提供此服务实例的本地 SWC 尚未准备好进行通信;
“SD_SERVER_SERVICE_AVAILABLE” 提供这个服务器服务实例的本地 SWC 已经准备好进行通信;
“SD_CLIENT_SERVICE_RELEASED” 使用此服务实例的本地 SWC 不需要与此服务实例通信;
“SD_CLIENT_SERVICE_REQUESTED” 使用此服务的本地 SWC 已准备好与此服务实例通信,并且需要此服务;
“SD_CONSUMED_EVENTGROUP_RELEASED” 使用该 Consumed Eventgroup 的本地 SWC 不需要该 Consumed Eventgroup 的事件;
“SD_CONSUMED_EVENTGROUP_REQUESTED” 使用这个 Consumed Eventgroup 的本地 SWC 需要这个 Consumed Eventgroup 的事件;

  • [SWS_Sd_00007] 下列状态分别可以通过BswM_Sd_ClientServiceCurrentState(), BswM_Sd_ConsumedEvent
    GroupCurrentState(),和BswM_Sd_EventHandlerCurrentState() 向BswM模块报告:
    “SD_CLIENT_SERVICE_DOWN” 告诉本地 SWC 此服务实例不可用;
    “SD_CLIENT_SERVICE_AVAILABLE” 告诉本地 SWC 这个 Service Instance 是可用的;
    “SD_CONSUMED_EVENTGROUP_DOWN” 告诉本地 SWC 这个 conconsumed Eventgroup 当前没有订阅;
    “SD_CONSUMED_EVENTGROUP_AVAILABLE” 告诉本地 SWC 这个 conconsumed Eventgroup 当前已订阅(即已接收事件) ;
    “SD_EVENT_HANDLER_RELEASED” 告诉本地 SWC 当前没有客户机订阅此 Eventgroup;
    “SD_EVENT_HANDLER_REQUESTED” 告诉本地 SWC 至少有一个客户端当前订阅了这个Eventgroup;

  • [SWS_Sd_00011] 每个已配置的服务器服务实例都应该有一个 ECU 范围内唯一的 SdServerServiceHandleId;

  • [SWS_Sd_00437] 每个配置的客户服务实例都应该有一个 ECU 范围内唯一的SdClientServiceHandleId;

  • [SWS_Sd_00438] 每个已配置的消费事件组都应该有一个 ECU 范围内唯一的SdConsumedEventGroupHandleId;

  • [SWS_Sd_00439] 每个配置的事件处理程序应该有一个 ECU 范围内唯一的SdEventHandlerHandleId;
    注:
    为了识别 Sd 和 BswM 之间控制 API 中的服务实例和事件组,需要上述需求定义的 id;对于具有相同服务 ID 和/或相同服务实例 ID 的实例或事件组也是有效的;

5.2.2 以太网通信

  • [SWS_Sd_00013] 服务发现配置实例(参见配置容器 SdInstance)至少应该有一个 TxPdu ID,一个 RxPdu ID 用于单播,一个 RxPdu ID 用于多播;
  • [SWS_Sd_00017] 对于不同的链接,应该配置单独的 Service Discovery 实例容器;
    注:这方面的链接还包括使用 Ethernet vlan 的不同虚拟链接;
  • [SWS_Sd_00697] 一个 SD实例 只支持一个地址族(即 ipv4 或 IPv6)。这个地址族应该通过SdInstanceTxPdu、 SdInstanceUnicastRxPdu 和 SdInstanceMulticastRxPdu (本地地址)的 SoAd 来配置;
  • [SWS_Sd_00723] 在 SD 模块初始化期间,对于与 SdInstanceTxPdu、 SdInstanceUnicastRxPdu 和 SdInstanceMulticastRxPdu ()相关联的所有 Socket 连接,应调用 API SoAd_opensocon();
    注:
    在初始化 SD 模块之前,SoAd 模块需要被初始化;
    实现者必须通过验证 Service Discovery 和 Socket adapter 的源代码和配置来保证SoAd_setuniqueremoteaddr()、 SoAd_getlo-caladdr()和 SoAd_setremoteaddr()永远不会返回错误。SoAd_SetUniqueRemoteAddr()、 SoAd_getlocaladdr()和SoAd_setremoteaddr()的故障无法从中恢复;

5.2.3 状态处理

  • [SWS_Sd_00019] Service Discovery 模块应该分别存储所有静态配置的服务实例和事件组的状态;
  • [SWS_Sd_00020] 通过调用 API SD _ init ()初始化 Service Discovery 模块之后,所有配置的服务器服务实例都应该具有状态“ SD_SERVER_Service_down”,除非服务器服务实例将 SdServerService AutoAvailable 设置为 true,否则该状态应该设置为“ SD_SERVER_Service_AVAILABLE”;
    注:
    SdServerServiceAutoAvailable 设置为 true,只允许不引用 SdServiceGroup 的服务器服务使用;
  • [SWS_Sd_00021] 通过调用 API SD_init ()初始化 Service Discovery 模块之后,所有配置的客户服务实例都应该具有状态“ SD _ CLIENT_Service_released”,除非客户服务实例将 SdClientSer-viceAutoRequired 设置为 true,否则该状态应该设置为“ SD _ CLIENT _ Service _ REQUESTED”;
    注:
    SdClientServiceAutoRequire 设置为 true,仅允许不引用 SdServiceGroup 的客户端服务使用;
  • [SWS_Sd_00440] 在通过调用 API SD _ init ()初始化 Service Discovery 模块之后,所有配置的事件组都应该具有状态“ "SD_CONSUMED_
    EVENTGROUP_ RELEASED” ,除非 Consumed EVENTGROUP 将 “ SdConsumed EventGroupAutoRequired”设置为 true,否则在请求关联的客户端服务实例时,状态应该设置为“ "SD_CONSUMED_ EVENTGROUP_REQUESTED”;
  • [SWS_Sd_00402] Service Discovery 模块应该存储服务器和客户端服务实例引用的所有 IP 地址分配状态;
  • [SWS_Sd_00442] SD_CONSUMED_EVENTGROUP_REQUESTED在其客户服务实例仍在重新租借期间被 SD_CLIENT_SERVICE_RELEASED 调用(SD _ Client _ Service _ released);
  • [SWS_Sd_00443] 如果一个 SdClientService 被设置为 SD_CLIENT_SERVICE_RELEASED (通过 Sd_ClientServiceSetState()或Sd_ServiceGroupStop()) ,而它的一个或多个事件组仍然被请求(SD_CONSUMED_EVENTGROUP_REQUESTED) ,则 Service Discovery 将以 SD_CONSUMED_EVENTGROUP_RELEASED 调用这些事件组相同的方式解释这个请求;

5.2.4 与Socket Adaptor的交互

  • [SWS_Sd_00024] Service Discovery 模块应该能够使用 SoAd_EnableRouting(), SoAd_Dis-ableRouting(), SoAd_EnableSpecificRouting(), 和SoAd_DisableSpecificRouting()为服务器和客户端服务实例启用/禁用 SoAd 模块中的路由组;
  • [SWS_Sd_00699] Service Discovery 模块应该能够使用 API SoAd _ ifspecificroutinggrouptransmission ()触发初始事件的发送;
  • [SWS_Sd_00026] Service Discovery 模块应该能够 根据每个 Service Instance/Eventgroup 引用路由组,参考如下配置参数:
    ? SdClientServiceActivationRef (in SdConsumedMethods)
    ? SdConsumedEventGroupMulticastActivationRef
    ? SdConsumedEventGroupTcpActivationRef
    ? SdConsumedEventGroupUdpActivationRef
    ? SdServerServiceActivationRef (in SdProvidedMethods)
    ? SdEventActivationRef (in SdEventHandlerMulticast)
    ? SdEventActivationRef (in SdEventHandlerTcp)
    ? SdEventTriggeringRef (in SdEventHandlerTcp)
    ? SdEventActivationRef (in SdEventHandlerUdp)
    ? SdEventTriggeringRef (in SdEventHandlerUdp)
  • [SWS_Sd_00700] 服务发现模块应该能够引用每个服务实例/事件组的 Socket 连接和 Socket 连接组,参见以下配置参数:
    ? SdClientServiceTcpRef (Service Instance and Eventgroups)
    ? SdClientServiceUdpRef (Service Instance and Eventgroups)
    ? SdConsumedEventGroupMulticastGroupRef (Eventgroup)
    ? SdServerServiceTcpRef (Service Instance and Eventgroups)
    ? SdServerServiceUdpRef (Service Instance and Eventgroups)
    ? SdMulticastEventSoConRef in SdEventHandlerMulticast (Eventgroup)
  • [SWS_Sd_00029] Service Discovery 模块只有在分配了 IP 地址的情况下才会调用 SoAd_IfTransmit() ,即: Sd_LocalIpAddrAssignmentChg() 已被TCPIP_IPADDR_STATE_ASSIGNED()调用;
  • [SWS_Sd_00709] 如果 SoAd_IfTransmit()返回E_NOT_OK,则应该被忽略;
  • [SWS_Sd_00481] 每个通配符套接字连接应该使用SoAd_ReleaseRemoteAddr()接口,如果满足如下条件:
    ? 套接字连接的远程地址已由 SD 设置;
    ? 客户端服务不再使用套接字连接。即,没有收到提供服务、收到停止提供服务或 TTL 已经过期;
    ? 套接字连接不再由 Eventhandler 使用。即,客户端已经取消了使用这个套接字连接的所有 Eventgroups。如果路由被禁用,套接字连接不应该被重置,因为 SdEventHan-dlerMulticastThreshold 已经到达;
    注:
    这个要求不适用于用于服务发现的套接字连接

5.2.5 Subscribe Eventgroup 重试机制

  • Subscribe Eventgroup 重试机制是 ClientServices 的一个可选特性。如果 SOME/IPSD 消息丢失(例如 SubscribeEventGroupAck) ,并且周期提供之间的间隔过大,则可以使用这种方法加快恢复速度; 如果在两个周期提供之间的某个位置请求 Eventgroup,则可以使用这种方法加快订阅速度。Subscribe Eventgroup 重试机制的计时行为可以按照 ClientService 配置,并且必须匹配相应服务器服务的计时行为(参见 TPS SysT constr _ 5095)。对于其 TLL (SdServerTimerTTL)设置为 0xffffff 且其主阶段循环提供之间的间隔 (SdServerTimerOfferCyclicDelay) 设置为0的服务器服务 ,可以将Subscribe Eventgroup 重试设置为 0xff (参见 TPS SysT constr _ 5096)。这将意味着在 EventGroup 设置为 SD _ consumed _ EventGroup _ requested 且未接收SubscribeEventGroup Ack 时重试对 EventGroup 的订阅。
  • [SWS_Sd_00735] 订阅 Eventgroup 重试处理只能针对服务器服务的Eventgroups 进行处理,其中
    ? SdSubscribeEventgroupRetryMax大于0;
    ? SdSubscribeEventgroupRetryEnable等于TRUE;
  • [SWS_Sd_00736] 如果SdSubscribeEventgroupRetryEnable 设置为 TRUE,SdSubscribeEventgroupRetryMax 设置为大于 0 的值,每次 Consumed Eventgroup 转移到 SD_CONSUMED_EVENTGROUP_REQUESTED 状态时,应执行以下操作:
    ? 如果计时器尚未运行,对应的客户服务订阅重试延迟计时器应该启动并设置为SdSubscribeEventgroupRetryDelay;
    ? Eventgroup 订阅重试计数器的值初始化为 1;
  • [SWS_Sd_00737] 如果客户端服务订阅重试延迟计时器已经过期,并且已配置的Eventgroup 的订阅重试次数(SdSubscribeEventgroupRetryMax)没有超过,则通过发送 StopSubscribeEventgroup/SubscribeEventgroup 的组合来重新触发 Eventgroup 的订阅,并且重试计数器应该递增。如果订阅的重试次数(SdSubscribe EventgroupRetryMax)超过,ServiceDiscovery 模块将引发运行时错误“ SD_E_COUNT_OF_RETRY_SUBSCRIPTION_EXCEEDED”;
  • [SWS_Sd_00738] 对请求的 Eventgroup 的订阅的重试应在以下条件下停止:
    ? 如果收到请求的 Eventgroup 的 SubscribeEventGroupAck 或 SubscribeEventGroupNack;
    ? 如果重试次数超过请求的 Eventgroup 的 SdEventgroupSubscribeRetryMax;
    ? 如果请求的 Eventgroup 被设置为SD_CONSUMED_EVENTGROUP_RELEASED;
  • [SWS_Sd_00739] 如果SdSubscribeEventgroupRetryEnable 设置为 TRUE,Sub-scribeEventgroupRetryMax 设置为 0xff,只要满足以下所有条件,订阅的重试将继续:
    ? 相应的 Eventgroup 被设置为 “SD_CONSUMED_EVENTGROUP_REQUESTED”;
    ? 没有接收到 subscribeeventgrouppack 或 SubscribeEventGroupAck;
  • [SWS_Sd_00740] 如果根据 SWS _ SD _ 00738 对客户服务的所有事件组完成了重试,则客户服务订阅重试延迟计时器应该是可以取消的;
    ? 当客户端在接收到下一个 offer 服务之前没有接收到初始事件时,它应该停止请求事件组,即触发 StopSubscribeEventgroup,并在接收到下一个 offer 服务时恢复请求事件组,即触发 SubscribeEventgroup;
    ? 此过程可以在应用程序级别上触发,并在丢失 Sub-scribeEventgroupAck 之后在功能上对应于 StopSubscribeEventgroup/SubscribeEventgroup 组合。这可能意味着通知SD-Module 接收每个字段的初始事件,或者其他适当的方法;
    ? 如果应用程序无法实现前面段落中描述的过程,则应将重试机制外包给 BswM,该规则通过在检测到已建立安全关联时触发StopSubscribeEventgroup/-SubscribeEventgroup SD 消息启动初始事件的重新发送,以至少提高基于安全关联的通信的健壮性;
    ? 由于安全关联的设置是异步的,因此BswM规则(BswMmoderequestsource/BswMTimer)应该延迟发送StopSubscribeEventgroup/SubscribeEventgroup的适当时间,允许两个对等点完成安全关联的设置;
    ? 如果 Subscribe Eventgroup Ack 条目在发送下一个 Subscribe 事件组条目之前没有到达(参见 PRS _ someipsd _ 00463) ,或者如果客户端在接收下一个 offer 服务之前没有收到初始事件,那么如果当前连接正在设置或已经设置,则不应重新建立安全关联连接;
    ? 对于使用安全关联传输的事件,客户端必须确保安全关联已经建立,并且在发送SubscribeEventgroup 条目之前已经准备好接收消息(参见[ SWS _ sd _ 00761])。另一方面,服务器必须确保安全关联已经建立,并且能够在发送 SubscribeEventgroupAck 条目之前发送消息;
  • [SWS_Sd_00759] 如果收到一个 SubscribeEventgroup 条目,该条目需要安全关联,若该安全关联尚未建立,则应使用 SubscribeEventgroupNack 条目回答该条目;

5.3 消息格式

SD消息格式如下所示:
SD消息格式

  • [SWS_Sd_00037] 如果没有另外定义,则SD消息中的所有字段都应该按照网络字节顺序(即 Big Endian 字节顺序);

5.3.1 Request ID

  • Request ID由Client ID和Session ID组成。虽然Client ID不用于 Service Discovery,但Session ID用于检测车辆中其他 Service Discovery
    实例的重启或重新启动,以修复 Service Discovery 模块的本地状态;
  • [SWS_Sd_00034] Service Discovery 模块初始化后,本地 ECU 发送的消息的Session ID 应为 0x0001;
    注:
    这意味着发出的第一个 SD 消息的 Session ID 设置为0x0001。Service Discovery 模块必须处理每个通信伙伴的 Session ID。因此,发送到多播端点的第一个 SD 消息以及发送到任何单播端点的第一个 SD 消息的 Session ID 都应该设置为 0x0001;

5.3.2 Protocol Version

描述 SOME/IP 的当前版本。

5.3.3 Interface Version

于描述 SOME/IP 服务的当前版本,SOME/IP-SD本身的版本。

5.3.4 Message Type

用于区分 SOME/IP 消息的类型。
SOME/IP-SD 只使用事件消息, 因此,它总是使用相同的类型。

5.3.5 Return Code

码用于表示请求是否已成功处理。
这不适用于 SOME/IP-SD; 因此,返回代码将静态设置为 0x00。

留言

后面,没必要看了,因为这是AUTOSAR实现的代码规范,据说普通厂商是拿不到代码的。。。goodbye

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:25:00  更:2022-04-18 18:25:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:33:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码