# AUTOSAR_SWS_NetworkManagement


<!--more-->

# AUTOSAR_SWS_NetworkManagement

----

## 7 功能规范

自适应网络管理提供相关服务，支持对可映射至物理网络或部分网络的逻辑网络句柄进行网络状态的请求与查询。

为此，它提供以下功能：

1. 用于请求和释放逻辑网络句柄的字段

2. 部分网络支持

### 7.1 架构概述

图 7.1 展示了自适应网络管理服务的整体架构。

下图概述了状态管理 [5] 与网络管理之间的交互，以及逻辑网络、部分网络和物理网络之间的示例映射关系。

状态管理
→ 用于网络管理请求的 ara::com 服务接口
→ 网络管理服务
→ 网络句柄实例 1 网络句柄实例 2 网络句柄实例 3
→ 部分网络状态机
→ PN1 PN2 PN3
→ 网络管理实例 1 网络管理实例 2
→ 网络状态机 网络状态机
→ 网络 1 网络 2
→ PN1 PN2 PN2 PN3

**图 7.1：网络管理架构概述**

### 7.2 网络管理算法

AUTOSAR 自适应网络管理基于**去中心化直接网络管理策略**，即每个网络节点仅根据通信系统内接收和 / 或发送的网络管理数据包，独立执行相关操作。

AUTOSAR 自适应网络管理算法基于周期性网络管理数据包运行，这些数据包通过组播方式被集群内所有节点接收。网络管理数据包的接收表明发送节点希望保持 NM 集群处于唤醒状态。如果某个节点已准备好进入休眠模式，它将停止发送网络管理数据包，但只要仍能接收到其他节点的网络管理数据包，就会推迟进入休眠模式。最终，当专用定时器因未再接收到任何网络管理数据包而超时后，所有节点将启动向休眠模式的转换。

如果 NM 集群中的任何节点需要进行总线通信，它可以通过发送网络管理数据包来保持 NM 集群处于唤醒状态。

文献 [3] 中描述的 AUTOSAR 自适应网络管理协调算法的核心概念可总结为以下关键行为：
**每个网络节点只要需要总线通信，就会周期性发送网络管理消息；否则不发送网络管理消息。**

### 7.3 网络控制

逻辑网络句柄可映射至一个或多个部分网络或物理网络，而一个部分网络本身也可映射至一个或多个物理网络。通过使用逻辑网络句柄，可对所有关联的部分网络、虚拟局域网（VLAN）及其底层物理通道进行统一控制。

随着状态管理功能集群的引入，网络管理不再直接接收来自应用程序的逻辑网络请求，而是由状态管理进行统一控制。状态管理可将一个或多个应用程序拆分为多个可能需要网络通信的功能单元。应用程序（或其部分功能）会向状态管理请求激活 / 停用不同的功能，随后状态管理会根据配置，请求 / 释放不同的逻辑网络。网络管理随后会检查所有逻辑网络句柄的请求状态，并相应地激活或停用对应的物理网络。

[SWS_ANM_00063] ⌈网络管理提供的每个端口应支持控制一个逻辑 NmNetworkHandle，该句柄可进一步映射至部分网络或虚拟局域网。⌋

**注**：在清单文件中，未标记的 VLAN 代表物理以太网通道。

[SWS_ANM_00066] ⌈每个逻辑 NmNetworkHandle 应通过 PncMappingIdent 映射至部分网络，和 / 或通过 EthernetCommunicationConnector 映射至虚拟局域网。禁止出现同一个逻辑 NmNetworkHandle 既直接映射某个 VLAN，又通过部分网络间接映射该 VLAN 的配置。⌋

[SWS_ANM_00067] ⌈如果启用部分网络功能，应在 PncMapping 中配置部分网络与 EthernetCommunicationConnector 之间的映射关系。⌋
**注**：一个部分网络可映射至多个虚拟局域网。

### 7.4 运行模式

本章描述 AUTOSAR 自适应网络管理的运行模式。

[SWS_ANM_00062]{草案} ⌈网络管理应为每个物理通道单独实现下图所示的状态机。⌋（图 7.2）

**注**：图 7.2 中的状态机适用于物理通道。在启用部分网络的情况下，网络管理模块还需处理相关的部分网络（PN）。

[SWS_ANM_00004]{草案} ⌈根据文献 [3]，AUTOSAR 自适应网络管理应包含三种运行模式：

- 网络模式

- 准备总线休眠模式

- 总线休眠模式
⌋

更多信息请参考以下章节：

- 网络模式，见 7.4.1

- 准备总线休眠模式，见 7.4.2

- 总线休眠模式，见 7.4.3

这些模式不会直接暴露给自适应应用程序。

当网络管理处于**网络模式**时，表示网络已被请求或处于激活状态，对应的逻辑网络信息位将被置为 1。

当网络管理处于**准备总线休眠模式**或**总线休眠模式**时，表示网络已被释放或处于非激活状态，对应的逻辑网络信息位将被置为 0。

下图展示了状态转换图。与模式变更相关的转换用绿色标注，与错误处理相关的转换用红色标注。

**图 7.2：状态转换图**
（状态转换逻辑：断电→总线休眠模式；等待总线休眠定时器超时→总线休眠模式；网络被请求→进入网络模式（默认重复消息状态），启动 NM 超时定时器和重复消息定时器；NM 超时定时器超时→重启定时器；收到重复消息请求位指示→进入重复消息状态，启动重复消息定时器；网络被释放→进入就绪休眠状态；就绪休眠状态下 NM 超时定时器超时→进入准备总线休眠模式；准备总线休眠模式下收到 NM 消息→回到网络模式）

#### 7.4.1 网络模式

[SWS_ANM_00005] ⌈根据文献 [3]，网络模式应包含三个内部状态：

- 重复消息状态

- 正常运行状态

- 就绪休眠状态
⌋

更多信息请参考以下章节：

- 重复消息状态，见 [7.4.1.1]\(7.4.1.1\)

- 正常运行状态，见 [7.4.1.2]\(7.4.1.2\)

- 就绪休眠状态，见 [7.4.1.3]\(7.4.1.3\)

[SWS_ANM_00006] ⌈当从总线休眠模式或准备总线休眠模式进入网络模式时，默认应进入重复消息状态。⌋

[SWS_ANM_00007] ⌈进入网络模式时，应使用 nmNetworkTimeout 值启动 NM 超时定时器。⌋

[SWS_ANM_00008] ⌈在网络模式下成功接收到网络管理消息时，应使用 nmNetworkTimeout 值重启 NM 超时定时器。⌋

[SWS_ANM_00009] ⌈在网络模式下成功发送网络管理消息时，应使用 nmNetworkTimeout 值重启 NM 超时定时器。⌋

##### [7.4.1.1]\(7.4.1.1\) 重复消息状态

重复消息状态的作用是：确保从总线休眠或准备总线休眠状态转换到网络模式的行为对网络上的其他节点可见；同时确保任何节点在激活后至少保持运行一段最短时间。

[SWS_ANM_00011] ⌈当从总线休眠模式、准备总线休眠模式或网络模式内部（正常运行状态或就绪休眠状态）进入网络模式的重复消息状态时，应（重新）启动网络管理消息的发送。⌋

[SWS_ANM_00012] ⌈在重复消息状态下 NM 超时定时器超时时，应重启该定时器。⌋

[SWS_ANM_00013] ⌈网络管理应在重复消息状态下保持一段可配置的时间（由 nmRepeatMessageTime 确定）；该时间结束后，应退出重复消息状态。⌋

[SWS_ANM_00014] ⌈退出重复消息状态时，如果网络已被请求，应进入正常运行状态。⌋

[SWS_ANM_00015] ⌈退出重复消息状态时，如果网络已被释放，应进入就绪休眠状态。⌋

[SWS_ANM_00070] ⌈当通过将 NetworkRequestedState 的值设置为 kFullCom 来请求某个网络（通道 / 部分网络集群 / VLAN），且网络管理模块需立即发送一条网络管理消息时，默认从总线休眠模式或准备总线休眠模式进入网络模式的重复消息状态。⌋

[SWS_ANM_00092]{草案} nmPnHandleMultipleNetworkRequests ⌈如果当前处于就绪休眠状态、正常运行状态或重复消息状态，且 nmPnHandleMultipleNetworkRequests 被设置为 true，同时通道 / VLAN 或关联部分网络集群的请求状态发生变化，则应（重新）进入重复消息状态。⌋

##### [7.4.1.2]\(7.4.1.2\) 正常运行状态

正常运行状态的作用是：确保任何节点只要需要网络功能，就能保持 NM 集群处于唤醒状态。

[SWS_ANM_00016] ⌈从就绪休眠状态进入正常运行状态时，应立即启动网络管理消息的发送。⌋

[SWS_ANM_00017] ⌈在正常运行状态下 NM 超时定时器超时时，应重启该定时器。⌋

[SWS_ANM_00018] ⌈当网络被释放且当前处于正常运行状态时，应退出正常运行状态并进入就绪休眠状态。⌋

[SWS_ANM_00019] ⌈在正常运行状态下收到包含重复消息请求位（已在接收的网络管理消息控制位向量中置位）的消息时，应退出正常运行状态并进入重复消息状态。⌋

##### [7.4.1.3]\(7.4.1.3\) 就绪休眠状态

就绪休眠状态的作用是：确保 NM 集群中的任何节点，只要还有其他节点保持集群唤醒，就会等待进入准备总线休眠模式。

[SWS_ANM_00020] ⌈从重复消息状态或正常运行状态进入就绪休眠状态时，应停止发送网络管理消息。⌋

[SWS_ANM_00021] ⌈在就绪休眠状态下 NM 超时定时器超时时，应退出就绪休眠状态并进入准备总线休眠模式。⌋

[SWS_ANM_00022] ⌈当网络被请求（通过将 NetworkRequestedState 的值设置为 kFullCom）且当前处于就绪休眠状态时，应退出就绪休眠状态并进入正常运行状态。⌋

[SWS_ANM_00023] ⌈在就绪休眠状态下收到包含重复消息请求位（已在接收的网络管理消息控制位向量中置位）的消息时，应退出就绪休眠状态并进入重复消息状态。⌋

**注**：同时出现多个转换条件的情况（例如 NM 超时定时器超时与网络被请求同时发生）的处理方式由具体实现决定。

#### 7.4.2 准备总线休眠模式

准备总线休眠状态的目的是：确保在进入总线休眠状态前，所有节点都有时间停止其网络活动。在此模式下，总线活动将被平息（即发送队列中的消息以清空所有发送缓冲区为目的进行传输），最终准备总线休眠模式下总线将无任何活动。

[SWS_ANM_00024] ⌈网络管理应在准备总线休眠模式下保持一段由 nmWaitBusSleepTime 确定的时间；该时间结束后，应退出准备总线休眠模式并进入总线休眠模式。⌋

[SWS_ANM_00025] ⌈在准备总线休眠模式下成功接收到网络管理消息时，应退出准备总线休眠模式并进入网络模式；默认进入重复消息状态。⌋

**原理**：集群中的其他节点可能仍处于准备总线休眠模式；在上述特殊情况下，应避免进入总线休眠模式，并尽快恢复总线通信。

#### 7.4.3 总线休眠模式

总线休眠状态的目的是：当无需交换任何消息时，降低节点的功耗。如果硬件支持，可关闭发送和接收功能。

如果网络管理集群中所有节点的 nmNetworkTimeout 与 nmWaitBusSleepTime 配置值完全相同，那么所有使用 AUTOSAR 网络管理算法进行协调的节点将几乎同时进入总线休眠模式。

[SWS_ANM_00028] ⌈当总线通信已被释放，且在一段可配置的时间（由 nmNetworkTimeout \+ nmWaitBusSleepTime 确定）内总线上未出现任何网络管理消息时，应从网络模式执行向总线休眠模式的转换。⌋

**注**：在总线休眠模式下，对应的 NetworkState.NetworkCurrentState 字段值为 kNoCom（另见 [SWS_ANM_00083]）。

**注**：本规范未明确处理总线休眠期间的消息接收（如果接收功能未被关闭），例如唤醒事件的处理属于项目特定内容。

**注**：在总线休眠模式下，假设集群中的所有节点都处于该状态。通常，所有节点会通过一个共同的触发源（例如唤醒线）几乎同时请求通信。

### 7.5 消息格式

消息布局见文献 [3] 第 5.1 章。

**注**：如文献 [3] 所述，网络管理数据包的长度不得超过底层物理传输层的最大传输单元（MTU）。

#### 7.5.1 源节点标识符

[SWS_ANM_00033] ⌈源节点标识符的位置应通过 nmNidPosition 进行配置。如果未设置 nmNidPosition，则网络管理消息中不应包含节点标识符（NID）。⌋

[SWS_ANM_00034] ⌈除非源节点标识符的位置被设置为关闭，否则源节点标识符应使用可配置的节点 ID 值 nmNodeId 进行设置。⌋

#### 7.5.2 控制位向量

控制位向量（CBV）的格式（位布局）和定义见文献 [3] 第 5.1.2 章 “控制位向量”。

[SWS_ANM_00035] ⌈控制位向量的位置应通过 nmCbvPosition 进行配置。如果未设置 nmCbvPosition，则网络管理消息中不应包含控制位向量。⌋

[SWS_ANM_00037] ⌈在发送的网络管理消息中，重复消息请求位应始终置为 0。⌋

[SWS_ANM_00038] ⌈在发送的网络管理消息中，主动唤醒位应始终置为 0。⌋

[SWS_ANM_00071] ⌈在发送的网络管理消息中，网络管理协调器休眠就绪位应始终置为 0。⌋

[SWS_ANM_00091] ⌈在发送的网络管理消息中，部分网络学习位（PNL）应始终置为 0。⌋

#### 7.5.3 用户数据

[SWS_ANM_00040] ⌈如果配置了网络管理用户数据（即 nmUserDataLength 存在且值大于 0），则用户数据应始终包含在网络管理消息中。⌋

**注**：接收的网络管理消息中包含用户数据的字节范围由 nmUserDataLength 定义。

### 7.6 网络管理传输

#### 7.6.1 传输调度

**注**：周期性传输模式适用于 “重复消息状态” 和 “正常运行状态”。

[SWS_ANM_00044]{草案} ⌈当进入重复消息状态时（[SWS_ANM_00070]），网络管理消息的发送应在进入该状态后延迟 nmMsgCycleOffset 时间。⌋

[SWS_ANM_00046]{草案} ⌈当网络管理消息的发送已启动，且网络管理消息周期定时器超时时，应发起一次网络管理消息传输。⌋

[SWS_ANM_00047]{草案} ⌈当网络管理消息周期定时器超时时，应使用 nmMsgCycleTime 值重启该定时器。⌋

[SWS_ANM_00094]{草案} 立即网络管理传输 ⌈当收到主动网络请求（对应的 NetworkRequestedState 已被设置为 true）时，应根据 PRS_Nm_00334 发送立即网络管理消息，使用 nmImmediateNmCycleTime 作为立即传输周期，使用 nmImmediateNmTransmissions 作为立即传输次数。⌋

### 7.7 网络管理用户数据处理

**注**：尽管底层协议规范 [3] 中包含用户数据相关内容，但目前尚未发现其实际用例。

### 7.8 部分网络

#### 7.8.1 部分网络状态机

图 7.1 中提到的部分网络状态机的实现由具体实现决定。
**注**：尽管实现方式可自定义，但实现的行为必须符合文献 [3] 中描述的部分网络相关要求。

#### 7.8.2 网络管理消息接收处理

**注**：文献 [3] 中描述的部分网络信息接收处理功能可通过 NmCluster.nmPncParticipation 开关启用 / 禁用。

[SWS_ANM_00051] ⌈如果 nmPncParticipation 为 TRUE 且接收的网络管理消息中的部分网络信息（PNI）位为 1，则每当网络管理消息中收到的位向量导致相关部分网络或通道的实际请求状态变为 kFullCom 时，网络管理应更新对应的 NetworkCurrentState 值。⌋

**注**：如果 nmPncParticipation 为 TRUE 但接收的网络管理消息中的 PNI 位为 0，网络管理模块仍将处理用户数据信息。

**注**：文献 [3] 中指定的 PnResetTime 应通过 pnResetTimer 进行配置。
**注**：pnResetTimer 的配置值应大于 nmMsgCycleTime。

#### 7.8.3 网络管理消息发送处理

**注**：nmPncParticipation 可启用 / 禁用文献 [3]“网络管理消息发送处理” 章节中指定的部分网络信息传输功能。

**注**：在使用部分网络功能时，必须使用控制位向量（CBV）。这一点需通过相应平台的配置来保证。

#### 7.8.4 网络管理消息过滤算法

[SWS_ANM_00055] ⌈接收的网络管理消息中包含部分网络请求信息的范围（PN 信息范围），应通过从字节 0 开始的 PN 信息偏移量（pncVectorOffset）和 PN 信息长度（pncVectorLength）来定义。⌋

**示例**：

- PN 信息偏移量 = 3

- PN 信息长度 = 2

在上述示例中，仅网络管理消息的第 3 字节和第 4 字节包含部分网络请求信息。

**注**：PN 信息范围中的每一位代表一个部分网络。如果该位被置为 1，表示请求该部分网络；如果置为 0，表示不请求该部分网络。

[SWS_ANM_00081] ⌈网络管理应可选择性地过滤掉那些不包含至少一个本 ECU 已配置部分网络对应置 1 位的部分网络请求信息消息。⌋

**注**：启用后，网络管理消息过滤算法将过滤掉所有不包含至少一个相关部分网络被请求（其在 PN 位向量中的对应位被置为 1）的网络管理消息。

[SWS_ANM_00089] allNmMessagesKeepAwake ⌈如果接收的网络管理消息中未请求任何相关部分网络，但 allNmMessagesKeepAwake 为 TRUE，则该消息不应被过滤，应继续进行后续接收指示处理。⌋

**注**：此参数用于使 ECU 能够在收到任何类型的网络管理消息时都保持唤醒状态。

### 7.9 功能集群生命周期

#### 7.9.1 启动

网络管理无需特殊的启动处理。运行环境应确保在需要网络通信时，网络管理已运行并能够处理通信请求。网络管理是否需要提前启动以及如何提前启动，取决于平台约束（例如快速重启等）。

#### 7.9.2 关闭

[SWS_ANM_00090]{草案} 通信关闭 ⌈当网络管理收到 SIGTERM 信号时，应撤销所有活跃的网络请求，并将 NetworkCurrentState 设置为 kNoCom。随后，应停止所有提供的服务。⌋

**注**：网络硬件可能会在此之后关闭。假设状态管理会确保在仍需要网络通信时不会发起关闭操作，且关闭期间出现活跃网络请求属于异常情况。

----
