MIPI UniPro Specification v2.0 Chapter 7 Network Layer (L3)
7 网络层(L3)
本章定义了网络层提供的服务、协议行为以及网络层使用的网络协议数据单元(N_PDU)。在实现高互操作性所需的限制条件下,本章旨在为实现提供尽可能大的灵活性。
【图82 网络层SAP模型 | Figure 82 Network Layer SAP Model】

图82展示了网络层使用的服务访问点(SAP)模型。网络层通过两个特定于流量类的服务访问点(N_TCx_SAP)向传输层提供网络服务。相应地,网络层依赖于对应DL_TCx_SAP提供的服务。网络层管理SAP(N_LM_SAP)向设备管理实体(DME)提供,用于配置和控制目的。N_TRAPx_SAP作为入口,用于从软件分流或注入长头部数据包,这样当未来UniPro功能可用时,现有的UniPro实现可以通过软件扩展来支持这些功能。
7.1 网络层服务功能与特性
网络层应提供以下功能和服务,以实现网络服务用户之间的用户数据传输:
-
寻址
-
数据包组帧与解帧
-
数据包格式识别
-
错误处理
-
支持至少一个流量类
-
长头部陷阱,支持L3和L4向未来UniPro版本扩展
网络层不得限制用户数据的内容和表示形式。
7.2 网络层寻址
本节定义了网络地址的抽象语法和语义。尽管当前版本的UniPro在网络层仅提供有限的功能,但为了与未来提供完整网络路由功能的扩展兼容,本规范引入了DeviceID(设备ID)概念。
通常,定义为DeviceID的网络地址标识一个网络层SAP组(N_TCx_SAP)(参见图83)。通过使用的实体(即TC0或TC1)以及网络服务用户(例如传输层L4)的寻址,DeviceID可以唯一标识任何单个网络层SAP,即N_TC0_SAP或N_TC1_SAP。UniPro网络中DeviceID的唯一性应得到保证。
【图83 N_SAP、网络地址与DeviceID | Figure 83 N_SAPs, Network Address and DeviceID】

唯一标识特定设备的DeviceID是一个7位值,范围为0到N_MaxDeviceID(见表67),这是当前版本UniPro支持的最高DeviceID值。
7.3 设备间数据通信
数据通过服务原语,由网络层与其用户之间在网络服务数据单元(N_SDU)中传递,并通过SAP附带特定参数。N_SDU是网络服务用户之间可以交换的唯一单元。数据传输通过网络协议数据单元(N_PDU,也称为数据包)执行。每个数据包都独立于其他数据包传输。数据包只能在属于同一流量类的SAP之间交换,如图84所示。
【图84 使用不同流量类的网络层数据传输 | Figure 84 Network Layer Data Transfer Using Different Traffic Classes】

此外,当出现第7.9.4节规定的某些情况(例如不支持的头部类型)时,N_SDU可能会被丢弃。传输过程中不得改变数据包的顺序,也不得复制数据包。
数据包的最大大小取决于表67中定义的N_MaxPacketSize值。用户数据的最大大小受网络层最大传输单元(N_MTU)大小限制,该值也在表67中定义。这些值代表协议定义的最大大小。UniPro协议栈可以支持小于N_MTU的用户数据大小。
UniPro协议栈支持的TC0每个数据包的最大传输载荷大小存储在T_TC0TxMaxSDUSize中。类似地,T_TC1TxMaxSDUSize存储TC1每个数据包的最大传输载荷大小。N_TC0TxMaxSDUSize和N_TC1TxMaxSDUSize的值分别不得超过((DL_TC0TxMaxSDUSize * 2) – N_MaxHdrSize)和((DL_TC1TxMaxSDUSize * 2) – N_MaxHdrSize)。属性和常量值见表49和表67。
7.4 数据链路层提供的服务假设
数据链路层通过DL_TCx_SAP向网络层提供其服务。DL_TCx_SAP的定义见第6.3节。
网络层要求数据链路层提供以下服务和特性:
-
可靠的数据传输
-
同一流量类数据的按序交付
数据包的发送和接收通过网络层与数据链路层之间交换参数和指示来支持。这些参数和指示允许网络层控制数据传输和接收,并获取相关状态信息。
网络层继承底层数据链路层服务的特性,如图85所示,以增强基本网络服务。详细的特性描述参见第6章。
【图85 网络服务特性与底层服务的关系 | Figure 85 Relationship of Network Service Characteristics and Underlying Services】

为了支持上述特性并保持其独立性,网络层模型由两个相同的TCx实体组成。
注意:尽管图中绘制了两个独立的实体TC0和TC1,但这并不意味着任何特定的实现选择。
7.5 限制与兼容性问题
如前所述,网络层的职责是将数据包从发送方资源通过网络传输到接收方资源,即基于逻辑设备标识符(DeviceID)路由数据包。在当前版本的UniPro中,仅支持点对点链路,这意味着不需要路由和交换,因此本规范未定义这些特定于网络层的功能和协议。
为了确保不同版本UniPro之间的互操作性,当前版本UniPro支持的网络层服务旨在成为任何未来UniPro网络层服务的子集。
7.6 N_TCx_SAP
N_TCx_SAP提供基本数据传输服务。
在发送端,数据通过N_TCx_SAP以N_SDU的形式传递给网络层,以传输到对等网络层。在接收端,网络层将接收到的数据以N_SDU的形式交付给上层。流量类标识基于所使用的SAP确定。
N_TCx_SAP应支持用户提供的数据在用户之间传输,服务提供者不得修改或重新排序这些数据。用户可以传输大于0且不超过N_MTU的任意整数个字节的数据。
7.6.1 数据传输原语
本节涵盖的原语列于表50。
表50 N_TCx_SAP原语 | Table 50 N_TCx_SAP Primitives
| 名称 | 请求 | 指示 | 本地响应 | 响应 | 本地确认 | 确认 |
| N_DATA_SHDR | 7.6.1.1 | 7.6.1.3 | 7.6.1.4 | – | 7.6.1.2 | – |
| N_DATA_LHDR_TRAP | 7.6.1.5 | 7.6.1.7 | 7.6.1.8 | – | 7.6.1.6 | – |
表51列出了N_TCx_SAP原语中出现的参数。
表51 N_TCx_SAP原语参数 | Table 51 N_TCx_SAP Primitive Parameters
| 名称 | 类型 | 有效范围 | 值 | 描述 |
| DestPeerDeviceID | 整数 | 0到N_MaxDeviceID | 指定N_SDU的目的设备的DeviceID | |
| DeviceIDOffset | 整数 | 0到N_MaxDeviceIDOffset | 指定用于CPortID编码和解码的DeviceID偏移量。参见第8.2节 | |
| Payload | 字节串 | 由N_DATA_SHDR.req从第4层传递,以及由N_DATA_SHDR.ind传递给第4层的数据。载荷长度应在1到N_MTU范围内 | ||
| L3ResultCode | 枚举 | SUCCESS | 0 | 指示请求的结果 |
| NO_PEER_TC | 1 | |||
| L2Payload | 字节串 | 在L3扩展与第3层之间由N_DATA_LHDR_TRAP.req和N_DATA_LHDR_TRAP.ind传递的数据。载荷长度应在1到DL_MTU范围内 | ||
| LhdrTrapStatus | 枚举 | OK | 0 | 指示由于应用程序响应缓慢,第3层是否丢失了接收的数据 |
| LOST_DATA | 1 |
7.6.1.1 N_DATA_SHDR.req
该原语请求通过DT SH N_PDU(参见第7.8.1.1节)将用户载荷传输到对等网络层,即不传输源DeviceID或其他L3特定信息。提供的DestPeerDeviceID应标识载荷的接收方。DeviceIDOffset参数应在[0, N_MaxDeviceIDOffset]范围内,该范围由传输层协议常量推导得出,定义见表67。
用户可以传输大于0且不超过N_TCxTxMaxSDUSize的任意整数个字节的数据。N_TCxTxMaxSDUSize的值取决于DL_TCxTxMaxSDUSize的值和N_MaxHdrSize的值。
该原语的语义为:
N_DATA_SHDR.req( DestPeerDeviceID, DeviceIDOffset, Payload )
生成时机
网络服务用户应生成N_DATA_SHDR.req原语,以将用户载荷发送到指定的接收方。
接收效果
被调用的网络层应启动给定载荷的传输。
7.6.1.2 N_DATA_SHDR.cnf_L
该原语通知服务用户,服务提供者(即本层L3)已准备好接受新的N_DATA_SHDR.req原语。
该原语的语义为:
N_DATA_SHDR.cnf_L( L3ResultCode )
生成时机
当网络服务提供者准备好接受新的用户载荷传输请求时,应生成该原语。
如果网络服务提供者准备好接受新的N_DATA_SHDR.req原语(这意味着对等设备中存在TCx流量类),则返回的L3ResultCode应为SUCCESS。所有其他L3ResultCode值都应指示失败。
如果对等设备未实现TCx流量类,则L3ResultCode的值应为NO_PEER_TC。当网络层接收到L2ResultCode设置为NO_PEER_TC的DL_DATA.cnf_L时,会获知对等设备未实现该TCx流量类。
接收效果
在发出N_DATA_SHDR.req原语之后且在接收到N_DATA_SHDR.cnf_L原语之前,网络层服务用户不得发出新的N_DATA_SHDR.req原语。
网络层服务用户可以在复位后立即,或者在接收到与先前发出的N_DATA_SHDR.req原语对应的N_DATA_SHDR.cnf_L原语之后,发出新的N_DATA_SHDR.req原语。
该原语由L3_TC_tx进程在离开WaitDLCnfL状态并返回Idle状态之前调用。L3_TC_tx进程定义了与N_DATA_SHDR.req和N_DATA_SHDR.cnf_L之间的握手相关的行为。
7.6.1.3 N_DATA_SHDR.ind
该原语应报告由DT SH N_PDU承载的用户载荷的接收;不标识发送方。应向服务用户提供DeviceIDOffset,供传输层解码使用(参见第8.10.4节)。载荷可以包含大于0且不超过N_MTU的任意整数个字节。
该原语的语义为:
N_DATA_SHDR.ind( DeviceIDOffset, Payload )
生成时机
当网络服务提供者成功处理了接收到的DL SH N_PDU时,应生成该原语。
接收效果
接收到N_DATA_SHDR.ind原语后,网络层服务用户应消费该载荷。
7.6.1.4 N_DATA_SHDR.rsp_L
该原语通知网络层,传输层已准备好接受新的N_DATA_SHDR.ind原语。
该原语的语义为:
N_DATA_SHDR.rsp_L( )
生成时机
当传输层准备好接受并处理新的N_PDU时,应生成该原语。
接收效果
在发出N_DATA_SHDR.ind原语之后且在接收到N_DATA_SHDR.rsp_L原语之前,网络层不得发出新的N_DATA_SHDR.ind原语。网络层只能在复位后立即,或者在接收到与先前发出的N_DATA_SHDR.ind原语对应的N_DATA_SHDR.rsp_L原语之后,发出新的N_DATA_SHDR.ind原语。
该原语由L3_TC_rx进程在离开WaitDLRspL状态并返回Idle状态之前调用。L3_TC_rx进程定义了与N_DATA_SHDR.ind和N_DATA_SHDR.rsp_L之间的握手相关的行为。
7.6.1.5 N_DATA_LHDR_TRAP.req
N_DATA_LHDR_TRAP.req原语用于提供长头部数据包,以便传输到数据链路层。
该原语的语义为:
N_DATA_LHDR_TRAP.req( L2Payload )
生成时机
网络层扩展应生成N_DATA_LHDR_TRAP.req原语,以将长头部数据包发送到数据链路层。网络层扩展的规范超出了本文档的范围。
接收效果
接收到的数据链路层载荷应不加任何处理地传输到数据链路层。
7.6.1.6 N_DATA_LHDR_TRAP.cnf_L
该原语通知网络层扩展,网络层已准备好接受新的N_DATA_LHDR_TRAP.req原语。
该原语的语义为:
N_DATA_LHDR_TRAP.cnf_L( L3ResultCode )
生成时机
当网络层准备好接受来自网络层扩展的新请求时,应生成该原语。如果网络层已准备好且对等设备中存在TCx,则返回的L3ResultCode应为SUCCESS。所有其他L3ResultCode值都应指示失败。
如果对等设备未实现TCx流量类,则L3ResultCode的值应为NO_PEER_TC。当网络层接收到L2ResultCode设置为NO_PEER_TC的DL_DATA.cnf_L时,会获知对等设备未实现该TCx流量类。
接收效果
在发出N_DATA_LHDR_TRAP.req原语之后且在接收到N_DATA_LHDR_TRAP.cnf_L原语之前,网络层扩展不得发出新的N_DATA_LHDR_TRAP.req原语。
网络层扩展可以在复位后立即,或者在接收到与先前发出的N_DATA_LHDR_TRAP.req原语对应的N_DATA_LHDR_TRAP.cnf_L原语之后,发出新的N_DATA_LHDR_TRAP.req原语。
7.6.1.7 N_DATA_LHDR_TRAP.ind
该N_DATA_LHDR_TRAP.ind原语向网络层扩展报告用户数据的接收。
该原语的语义为:
N_DATA_LHDR_TRAP.ind( L2Payload, LhdrTrapStatus )
生成时机
当从数据链路层接收到的数据链路层载荷的L3s位设置为\'0\'(指示长头部)时,应生成该原语。当前版本的UniPro无法解释长头部,因此将其转发给实现UniPro未来功能的网络层扩展。数据链路层载荷应不加修改地转发给网络层扩展。
该原语应在LhdrTrapStatus中指示自上一次生成该原语以来是否有任何数据被丢弃。LhdrTrapStatus值为OK表示没有数据被丢弃,值为LOST_DATA表示数据被丢弃。
接收效果
网络层扩展处理该长头部数据包。
7.6.1.8 N_DATA_LHDR_TRAP.rsp_L
N_DATA_LHDR_TRAP.rsp_L原语指示网络层扩展已准备好接受新的N_DATA_LHDR_TRAP.ind原语。
该原语的语义为:
N_DATA_LHDR_TRAP.rsp_L( )
生成时机
当网络层扩展准备好接受并处理新的数据链路层载荷时,应生成该原语。
接收效果
在发出N_DATA_LHDR_TRAP.ind原语之后且在接收到N_DATA_LHDR_TRAP.rsp_L原语之前,网络层不得发出新的N_DATA_LHDR_TRAP.ind原语。网络层只能在复位后立即,或者在接收到与先前发出的N_DATA_LHDR_TRAP.ind原语对应的N_DATA_LHDR_TRAP.rsp_L原语之后,发出新的N_DATA_LHDR_TRAP.ind原语。
7.7 N_LM_SAP
网络层管理(N_LM_SAP)提供三组服务原语:配置原语、控制原语和状态原语。N_LM_SAP上的原语由设备管理实体(DME)使用,用于配置和控制该层以及接收该层的状态信息。
配置原语允许访问网络层属性。这些信息表示为特定于网络层的管理信息库(N_MIB)。N_MIB被视为“包含”在N_LM实体中。通过配置原语对N_MIB的多次访问不得并发进行。可用的网络层属性定义见第7.14节。
控制原语提供对网络层的直接控制。控制原语由DME生成,可以并发发生。
状态原语指示网络层的状态信息。状态原语由网络层生成,可以并发发生。
7.7.1 配置原语
NLM_GET和N_LM*SET配置原语分别由DME用于检索和存储N_MIB中配置属性的值。
GET和SET原语表示为带有相关确认原语的请求。这些原语以N_LM为前缀。原语汇总于表52。
表52 N_LM_SAP配置原语 | Table 52 N_LM_SAP Configuration Primitives
| 名称 | 请求 | 指示 | 本地响应 | 响应 | 本地确认 | 确认 |
| N_LM_GET | 7.7.1.1 | – | – | – | 7.7.1.2 | – |
| N_LM_SET | 7.7.1.3 | – | – | – | 7.7.1.4 | – |
| N_LM_CAPABILITY_SET | 7.7.1.5 | – | – | – | 7.7.1.6 | – |
这些原语使用的参数定义于表53。
表53 N_LM_SAP配置原语参数 | Table 53 N_LM_SAP Configuration Primitive Parameters
| 名称 | 类型 | 有效范围 | 值 | 描述 |
| MIBattribute | 整数 | MIBattribute值介于0x3000和0x3FFF之间。有效的MIBattribute值定义于第7.14节 | MIB属性的地址 | |
| MIBvalue | 变量 | 如第7.14节所定义 | MIB属性的值 | |
| SetType | 枚举 | NORMAL | 0 | 选择寻址的是实际值(NORMAL)还是属性的非易失性值(STATIC) |
| STATIC | 1 | |||
| ConfigResultCode | 枚举 | SUCCESS | 0 | 指示请求的结果 |
| INVALID_MIB_ATTRIBUTE | 1 | |||
| INVALID_MIB_ATTRIBUTE_VALUE | 2 | |||
| READ_ONLY_MIB_ATTRIBUTE | 3 | |||
| WRITE_ONLY_MIB_ATTRIBUTE | 4 | |||
| DLCreditUnitMode | 枚举 | CREDIT_UNIT_32 | 0 | 定义请求的信用单元模式 |
| CREDIT_UNIT_128 | 1 |
7.7.1.1 N_LM_GET.req
该原语请求获取由MIBattribute标识的属性的值。
该原语的语义为:
N_LM_GET.req( MIBattribute )
生成时机
该原语由DME生成,用于获取由MIBattribute标识的属性的值。
接收效果
网络层实体应尝试检索请求的属性值,并使用返回检索到的值的N_LM_GET.cnf_L进行响应。
7.7.1.2 N_LM_GET.cnf_L
该原语指示N_LM_GET.req的成功或失败,如果成功,则返回属性值。
该原语的语义为:
N_LM_GET.cnf_L( ConfigResultCode, MIBvalue )
原语参数定义于表53。
表54 N_LM_GET.cnf_L ConfigResultCode值 | Table 54 N_LM_GET.cnf_L ConfigResultCode Values
| ConfigResultCode | 条件 |
| SUCCESS | 请求成功,即N_LM_GET.req的MIBattribute指示的MIB属性是可读取的。网络层应将N_LM_GET.cnf_L中的MIBvalue设置为该属性的值 |
| INVALID_MIB_ATTRIBUTE | MIBattribute指示的属性无效或未实现。N_LM_GET.cnf_L中的MIBvalue值未定义 |
| WRITE_ONLY_MIB_ATTRIBUTE | MIBattribute指示的属性存在,但不可读取。N_LM_GET.cnf_L中的MIBvalue值未定义 |
网络层应将N_LM_GET.cnf_L中的ConfigResultCode设置为表54中针对给定条件所示的值之一。网络层不应将ConfigResultCode设置为INVALID_MIB_ATTRIBUTE_VALUE或READ_ONLY_MIB_ATTRIBUTE。
生成时机
网络层实体应响应来自DME的最新N_LM_GET.req生成N_LM_GET.cnf_L原语。
接收效果
DME获知操作的结果,如果ConfigResultCode为SUCCESS,则MIBvalue携带属性值。对于任何其他ConfigResultCode值,MIBvalue未定义。
7.7.1.3 N_LM_SET.req
该原语尝试将由MIBattribute标识的属性的值(SetType = NORMAL)或复位值(SetType = STATIC)设置为MIBvalue。
该原语的语义为:
N_LM_SET.req( SetType, MIBattribute, MIBvalue )
原语参数定义于表53。
生成时机
该原语由DME生成,用于设置指示属性的值或复位值。
接收效果
如果SetType设置为NORMAL,则网络层应尝试将MIBattribute寻址的属性设置为MIBvalue。如果SetType设置为STATIC,则网络层应尝试将MIBattribute寻址的属性的复位值设置为MIBvalue。
网络层使用N_LM_SET.cnf_L向DME通知N_LM_SET.req的结果。
7.7.1.4 N_LM_SET.cnf_L
该原语报告尝试设置属性值或其复位值的结果。
该原语的语义为:
N_LM_SET.cnf_L( ConfigResultCode )
原语参数定义于表53。
表55 N_LM_SET.cnf_L ConfigResultCode值 | Table 55 N_LM_SET.cnf_L ConfigResultCode Values
| ConfigResultCode | 条件 |
| SUCCESS | 请求成功,即MIBattribute指示的属性的值或复位值已设置为MIBvalue的值 |
| INVALID_MIB_ATTRIBUTE | MIBattribute值无效,或者MIBattribute和SelectorIndex指示的属性未实现;或者如果SetType为STATIC,则MIBattribute和SelectorIndex指示的属性不支持设置其复位值 |
| READ_ONLY_MIB_ATTRIBUTE | MIBattribute指示的属性存在,但不可设置。此ConfigResultCode值仅在SetType为NORMAL时使用 |
| INVALID_MIB_ATTRIBUTE_VALUE | MIBattribute指示的属性存在且可设置(SetType = NORMAL)或允许设置其复位值(SetType = STATIC),但MIBvalue的值超出了该属性的实现范围或有效值范围 |
网络层应将N_LM_SET.cnf_L中的ConfigResultCode设置为表55中针对给定条件所示的值之一。N_LM实体不应将ConfigResultCode设置为WRITE_ONLY_MIB_ATTRIBUTE。
生成时机
网络层应响应来自DME的最新N_LM_SET.req生成N_LM_SET.cnf_L原语。
接收效果
N_LM_SET.cnf_L确认N_LM_SET.req在网络层的成功或失败,在DME处不应产生进一步的影响。
7.7.1.5 N_LM_CAPABILITY_SET.req
该原语由DME发出,请求第3层更新某些能力属性。
该原语的语义为:
N_LM_CAPABILITY_SET.req( DLCreditUnitMode )
原语参数定义于表53。
生成时机
当DME希望网络层更新某些能力属性时,应在UniPro引导过程中生成该原语(参见第9.11.2节)。
接收效果
网络层应根据参数DLCreditUnitMode指示的模式更新属性N_MaxPacketSize和N_MTU(参见表68)。之后,网络层应发出N_LM_CAPABILITY_SET.cnf_L原语。
7.7.1.6 N_LM_CAPABILITY_SET.cnf_L
该原语由第3层发出,通知DME能力属性已更新。
该原语的语义为:
N_LM_CAPABILITY_SET.cnf_L( )
生成时机
网络层应在属性N_MaxPacketSize和N_MTU已更新之后,响应来自DME的N_LM_CAPABILITY_SET.req生成N_LM_CAPABILITY_SET.cnf_L原语。
接收效果
DME获知网络层能力更新过程已完成,并应继续引导过程。
7.7.2 控制原语
本节中的服务原语用于控制网络层。
本节涵盖的原语列于表56。
表56 N_LM_SAP控制原语 | Table 56 N_LM_SAP Control Primitives
| 名称 | 请求 | 指示 | 本地响应 | 响应 | 本地确认 | 确认 |
| N_LM_RESET | 7.7.2.1 | – | – | – | 7.7.2.2 | – |
| N_LM_ENABLE_LAYER | 7.7.2.3 | – | – | – | 7.7.2.4 | – |
| N_LM_HIBERNATE_ENTER | 7.7.2.5 | – | – | – | 7.7.2.6 | – |
| N_LM_HIBERNATE_EXIT | 7.7.2.7 | – | – | – | 7.7.2.8 | – |
| N_LM_PRE_HIBERNATE_EXIT | 7.7.2.9 | – | – | – | 7.7.2.10 | – |
表57列出了N_LM_SAP控制原语中出现的参数。
表57 N_LM_SAP控制原语参数 | Table 57 N_LM_SAP Control Primitive Parameters
| 名称 | 类型 | 有效范围 | 值 | 描述 |
| ResetLevel | 枚举 | COLD | 0 | 定义请求的复位的复位级别 |
| WARM | 1 |
7.7.2.1 N_LM_RESET.req
该原语请求复位网络层。
该原语的语义为:
N_LM_RESET.req( ResetLevel )
生成时机
当DME需要复位网络层时生成该原语。网络层的复位与所有其他UniPro层的复位结合进行,如复位过程所述。
接收效果
网络层将自身设置为复位状态和属性值,并丢弃当前正在处理的所有N_SDU。然后,网络层应向DME生成N_LM_RESET.cnf_L。发出N_LM_RESET.cnf_L之后,网络层不应响应任何网络层SAP原语,除了N_LM_RESET.req和N_LM_ENABLE_LAYER.req。
ResetLevel COLD复位整个网络层,包括统计信息和配置属性。ResetLevel WARM复位网络层,但不复位统计信息。
7.7.2.2 N_LM_RESET.cnf_L
N_LM_RESET.cnf_L原语用于UniPro复位过程(参见第9.11.1节)。
该原语的语义为:
N_LM_RESET.cnf_L( )
生成时机
该原语响应N_LM_RESET.req发出给DME,以指示网络层已退出复位状态。
接收效果
DME获知网络层已退出复位状态。
7.7.2.3 N_LM_ENABLE_LAYER.req
N_LM_ENABLE_LAYER.req原语用于UniPro引导过程(参见第9.11.2节)。
该原语的语义为:
N_LM_ENABLE_LAYER.req( )
生成时机
N_LM_ENABLE_LAYER.req原语是UniPro引导过程的一部分,由DME在网络层退出复位状态且数据链路层已启用之后生成。
接收效果
网络层应向DME响应N_LM_ENABLE_LAYER.cnf_L。发出N_LM_ENABLE_LAYER.cnf_L之后,所有网络层功能和SAP原语均应启用。
7.7.2.4 N_LM_ENABLE_LAYER.cnf_L
N_LM_ENABLE_LAYER.cnf_L原语用于UniPro引导过程(参见第9.11.2节),向DME指示网络层已启用。
该原语的语义为:
N_LM_ENABLE_LAYER.cnf_L( )
生成时机
该原语响应N_LM_ENABLE_LAYER.req发出给DME,以指示网络层已启用。
接收效果
DME获知网络层已启用。
7.7.2.5 N_LM_HIBERNATE_ENTER.req
N_LM_HIBERNATE_ENTER.req原语请求网络层进入休眠状态。
该原语的语义为:
N_LM_HIBERNATE_ENTER.req( )
生成时机
DME生成N_LM_HIBERNATE_ENTER.req原语,请求网络层进入休眠状态。
接收效果
网络层应发出N_LM_HIBERNATE_ENTER.cnf_L原语,然后进入休眠状态。在休眠期间,网络层应保留下面列出的属性,并可能丢失所有其他状态信息。
-
N_DeviceID
-
N_DeviceID_valid
-
N_MaxPacketSize
-
N_MTU
-
N_TC0TxMaxSDUSize
-
N_TC1TxMaxSDUSize
7.7.2.6 N_LM_HIBERNATE_ENTER.cnf_L
N_LM_HIBERNATE_ENTER.cnf_L原语用于指示网络层即将进入休眠状态。
该原语的语义为:
N_LM_HIBERNATE_ENTER.cnf_L( )
生成时机
该原语由网络层响应N_LM_HIBERNATE_ENTER.req原语生成,指示网络层正在进入休眠状态。
接收效果
DME获知网络层正在进入休眠状态。
7.7.2.7 N_LM_HIBERNATE_EXIT.req
N_LM_HIBERNATE_EXIT.req原语用于请求网络层退出休眠状态并返回正常操作。
该原语的语义为:
N_LM_HIBERNATE_EXIT.req( )
生成时机
DME生成N_LM_HIBERNATE_EXIT.req原语,请求网络层退出休眠状态。
接收效果
网络层应进入其复位状态,并从其保留的值中恢复N_DeviceID和N_DeviceID_valid。然后,网络层应向DME发出N_LM_HIBERNATE_EXIT.cnf_L原语。
7.7.2.8 N_LM_HIBERNATE_EXIT.cnf_L
N_LM_HIBERNATE_EXIT.cnf_L原语用于向DME指示网络层已退出休眠状态并正常运行。
该原语的语义为:
N_LM_HIBERNATE_EXIT.cnf_L( )
生成时机
该原语由网络层响应N_LM_HIBERNATE_EXIT.req原语生成,指示网络层已退出休眠状态并正常运行。
接收效果
DME获知网络层已退出休眠状态。
7.7.2.9 N_LM_PRE_HIBERNATE_EXIT.req
对该原语的支持是可选的。但是,如果实现支持该原语,则应按照本节所述实现。
该原语用于请求网络层停止或准备停止休眠,并准备返回正常操作。休眠退出使用N_LM_HIBERNATE_EXIT.req原语请求。
该原语的语义为:
N_LM_PRE_HIBERNATE_EXIT.req( )
生成时机
当网络层需要在退出休眠之前准备退出休眠状态时,DME应生成该原语。
接收效果
网络层应准备退出休眠状态。
7.7.2.10 N_LM_PRE_HIBERNATE_EXIT.cnf_L
对该原语的支持是可选的。但是,如果实现支持该原语,则应按照本节所述实现。
该原语用于向DME指示网络层已准备好在休眠后返回正常操作。
该原语的语义为:
N_LM_PRE_HIBERNATE_EXIT.cnf_L( )
生成时机
该原语由网络层响应N_LM_PRE_HIBERNATE_EXIT.req原语生成,指示网络层已准备好返回正常操作。
接收效果
DME获知网络层为返回正常操作所需的所有操作已完成。
7.7.3 状态原语
本节中的服务原语用于收集网络层的状态信息。
本节涵盖的原语列于表58。
表58 N_LM_SAP状态原语 | Table 58 N_LM_SAP Status Primitives
| 名称 | 请求 | 指示 | 本地响应 | 响应 | 本地确认 | 确认 |
| N_LM_DISCARD | – | 7.7.3.1 | – | – | – | – |
表59列出了N_LM_SAP状态原语中出现的参数。
表59 N_LM_SAP状态原语参数 | Table 59 N_LM_SAP Status Primitive Parameters
| 名称 | 类型 | 有效范围 | 值 | 描述 |
| L3DiscardReasonCode | 枚举 | UNSUPPORTED_HEADER_TYPE | 1 | 接收到头部包含不支持的值的N_PDU |
| BAD_DEVICEID_ENC | 2 | N_DeviceID_valid为TRUE,并且接收到的N_PDU的DestDeviceID_Enc小于N_DeviceID,或者计算出的DeviceIDOffset大于N_MaxDeviceIDOffset | ||
| LHDR_TRAP_PACKET_DROPPING | 3 | 指示由于L3扩展不可用而无法接受数据包,导致长头部数据包被丢弃 | ||
| MAX_N_PDU_LENGTH_EXCEEDED | 4 | 指示接收到载荷长度超过N_MTU的N_PDU |
7.7.3.1 N_LM_DISCARD.ind
该原语指示已执行丢弃N_PDU功能(参见第7.9.4节),并报告触发该操作的原因。
该原语的语义为:
N_LM_DISCARD.ind( L3DiscardReasonCode )
生成N_LM_DISCARD.ind时,提供的L3DiscardReasonCode应根据第7.9.4节所述的情况进行设置。
生成时机
该原语由网络层作为执行丢弃N_PDU功能的结果生成。
接收效果
DME被通知丢弃的原因。此信息可用于采取相应措施或进行统计。
7.8 网络协议数据单元的结构与编码
本节定义了网络层协议数据单元(通常称为数据包),并展示了头部字段及其含义。
数据包(N_PDU)应包含大于0的整数个字节,且不得超过N_MaxPacketSize。此限制确保数据包始终完全适合一个DL帧。
7.8.1 数据N_PDU
表60列出了应支持的数据网络协议数据单元(DT N_PDU)类型。
表60 用户数据网络层PDU类型 | Table 60 User-Data Network Layer PDU Types
| N_PDU名称 | 助记符 | 总头部大小 | 备注/限制 | 章节 |
| 带短L3头部的数据N_PDU | DT SH N_PDU | 8位 | 载荷长度应在1到N_MTU范围内 | 7.8.1.1 |
7.8.1.1 DT SH N_PDU
如果L3s位设置为\'1\',则该N_PDU称为DT SH N_PDU,即带短L3头部的数据N_PDU。DT SH N_PDU用于将网络服务用户数据(N_SDU)传输到对等网络层。
【图86 带短头部的网络层数据N_PDU(DT SH N_PDU) | Figure 86 Network Layer Data N_PDU with Short Header (DT SH N_PDU)】

DT SH N_PDU的自然粒度为字节,即可以传输1到N_MTU范围内任意整数个字节的数据(即N_SDU)。
7.8.2 N_PDU字段
表61列出了N_PDU字段。
表61 网络层N_PDU头部字段 | Table 61 Network Layer N_PDU Header Fields
| 字段名称 | 字段描述 | 字段大小 | 备注/限制 | 章节 |
| L3s | L3头部类型字段 | 1位 | 标识N_PDU | 7.8.2.1 |
| DestDeviceID_Enc | 标识数据包目的地的地址 | 7位 | 注意:该值还编码L4 DestPeerCPortID的一部分,参见第8.10.4节 | 7.8.2.2 |
| Payload (N_SDU) | 用户数据(网络服务数据单元) | 1到N_MTU字节 | 承载数据包的载荷 | 7.8.2.3 |
7.8.2.1 L3头部类型字段(L3s)
L3s头部字段用作头部类型位。其值由所使用的服务原语确定。N_DATA_SHDR服务原语应将L3s头部字段设置为\'1\'。N_DATA_LHDR_TRAP服务原语携带一个现有的N_PDU,其中L3s位设置为\'0\'(参见第7.12节)。
接收到L3s位设置为\'1\'的N_PDU时,该N_PDU由网络层处理,其载荷通过N_DATA_SHDR.ind转发给传输层(参见第7.6.1.3节)。接收到L3s设置为\'0\'的N_PDU时,将其不加修改地转发给网络层扩展,通过N_DATA_LHDR_TRAP.ind(参见第7.12节)。
表62显示了支持的设置。
表62 L3s字段的设置 | Table 62 Settings of the L3s Field
| 字段名称 | 大小 | 值 | 含义 | 备注 |
| L3s | 1位 | 0 | 使用长头部数据N_PDU | 长头部数据N_PDU将在UniPro的未来版本中定义。目前,L3=0的N_PDU通过长头部陷阱从网络层扩展接收或转发给网络层扩展(参见第7.12节) |
| 1 | 使用短头部数据N_PDU(DT SH N_PDU) | 由N_DATA_SHDR原语的使用引起 |
7.8.2.2 目的设备ID
DestDeviceID_Enc字段应编码通过N_DATA_SHDR.req原语提供的DestPeerDeviceID和DeviceIDOffset参数。编码应遵循以下公式:
DestDeviceID_Enc = DestPeerDeviceID \+ DeviceIDOffset
应支持0到N_MaxDeviceID范围内的任意整数。
表63显示了支持的设置。
表63 DestDeviceID_Enc字段的设置 | Table 63 Settings of the DestDeviceID_Enc Field
| 字段名称 | 大小 | 值 | 含义 | 备注 |
| DestDeviceID_Enc | 7位 | 0到N_MaxDeviceID | 目标设备的编码DeviceID值 | – |
7.8.2.3 载荷——网络服务数据单元
N_SDU字段承载服务用户提供的载荷数据,因此可以承载任何值。
表64 Payload字段的设置 | Table 64 Settings of the Payload Field
| 字段名称 | 大小 | 值 | 含义 | 备注 |
| Payload | 1到N_MTU字节 | 任意字节串 | 载荷 | 大小取决于发送N_TCx实体配置的最大载荷大小(N_TCxTxMaxSDUSize) |
7.8.3 N_PDU类型选择与服务原语使用的关系
传输时和接收时应根据表65中的关联确定正确的N_PDU类型。
表65 服务原语与N_PDU关联表 | Table 65 Service Primitive to N_PDU Association Table
| 使用的服务原语 | 选择的N_PDU类型 | 备注 |
| N_DATA_SHDR | DT SH N_PDU | 数据短头部网络协议数据单元 |
7.9 协议特性
7.9.1 N_PDU组帧特性
该特性负责网络协议数据单元(N_PDU)的组帧。如图87所示,该特性为提供的N_SDU构造并添加L3头部,以形成N_PDU。头部由第7.8.2节规定的不同字段组成。
构造N_PDU需要额外的控制信息,称为协议控制信息(PCI)。PCI从本地层特定状态信息和通过服务原语请求提供的参数获取。
【图87 网络层组帧过程 | Figure 87 Network Layer Composition Process】

7.9.2 N_PDU解帧特性
该特性负责N_PDU的解帧。解帧特性提取接收到的数据包的头部信息,并使用额外的层特定本地状态信息来形成协议控制信息。
【图88 网络层解帧过程 | Figure 88 Network Layer Decomposition Process】

用户数据从N_SDU字段获取。用户数据和部分PCI应通过相应的服务原语指示提供给网络服务用户。
构造PCI时使用头部格式分析特性。
7.9.3 头部格式分析特性
该特性应确定传入N_PDU的类型,并执行DestDeviceID_Enc字段的解码。
N_PDU类型由L3s字段确定,并标识要调用的适当服务原语指示,即N_DATA_SHDR.ind(L3s=1)或N_DATA_LHDR_TRAP.ind(L3s=0)。L3s=0的N_PDU不加修改地转发给第3层扩展,如第7.12节所述。
L3s=1的N_PDU的字段按第7.8.2节所述提取,并按以下方式处理:
-
如果N_DeviceID_valid设置为TRUE,则应根据以下公式从DestDeviceID_Enc字段计算DeviceIDOffset参数:
DeviceIDOffset = DestDeviceID_Enc – N_DeviceID -
如果N_DeviceID_valid设置为FALSE,则DeviceIDOffset参数应设置为\'0\'。
计算得到的DeviceIDOffset值应通过N_DATA_SHDR.ind原语提供给传输层。
7.9.4 N_PDU丢弃特性
如果出现表59中L3DiscardReasonCode定义的任何情况,网络层应执行所有必要的操作,以释放受影响的特定进程使用的任何资源。
7.10 数据包传输
源设备应按照N_SDU到达本地TCx N_SAP的顺序传输它们。
数据包的传输应按以下顺序执行以下操作:
-
应根据第7.8.3节定义的规则确定正确的N_PDU类型
-
应通过N_PDU组帧特性并按照第7.8.2节定义的编码规则构造选定的N_PDU
-
应计算并相应设置现有的头部字段
-
应使用给定的用户数据填充Payload字段
7.11 数据包接收
接收到数据包后,应按以下顺序执行以下操作:
-
应通过N_PDU解帧特性(涉及头部格式分析特性)并按照第7.8.2节的规定分解接收到的N_PDU
-
应恢复N_PDU的类型
-
应恢复现有的头部字段
-
应根据第7.9.3节给出的公式解码DeviceIDOffset
-
应从Payload字段获取用户数据
-
如果N_DeviceID_valid为TRUE,则应将DestDeviceID_Enc与N_DeviceID进行比较,以确保数据包到达了正确的目的地。如果DestDeviceID_Enc大于或等于N_DeviceID,则接受该数据包;否则丢弃该数据包。如果N_DeviceID_valid为FALSE,则不执行此检查。
-
应根据第7.6.1节通过相应的服务原语并使用相应设置的参数向网络服务用户指示用户数据。
如果出现第7.9.4节列出的任何异常,应执行丢弃N_PDU功能。
7.12 长头部陷阱
目前,UniPro提供对第3层短头部的支持。在未来版本中,将添加对第3层长头部的支持。长头部陷阱是一项功能,允许现有的UniPro实现(例如通过软件)扩展,以支持未来的第3层长头部数据包以及基于它们的功能(例如配置)。当第3层长头部支持添加到UniPro规范时,长头部陷阱将被弃用。
长头部陷阱发送器将数据包从第3层扩展不加修改地转发到第2层。从第3层扩展接收到的数据包应将L3s位设置为\'0\',并应符合UniPro未来版本中定义的第3层长头部数据包格式。
短头部数据包和长头部数据包之间的仲裁过程未指定。但是,该过程应保证短头部数据包的传输进度。
当长头部陷阱接收器从第2层接收到L3s位设置为\'0\'的L2载荷时,应将未修改的L2载荷转发给第3层扩展。
传入短头部数据包的流不应受到长头部陷阱的影响。也就是说,如果第3层正在等待来自第3层扩展的N_DATA_LHDR_TRAP.rsp_L,则任何传入的短头部数据包(即L3s位设置为\'1\'的数据包)都应立即处理。任何传入的长头部数据包(即L3s位设置为\'0\'的数据包)都应被丢弃或存储在短头部数据包处理路径之外。当长头部数据包被丢弃时,发出N_LM_DISCARD.ind原语,其L3DiscardCode等于LHDR_TRAP_PACKET_DROPPING。
7.13 网络层与数据链路层的交互
在以下情况下,N_DATA_SHDR.req的生成会导致相应的网络层TCx实体生成特定于数据链路层的DL_DATA.req:
-
用于传输的数据包处理已成功完成
-
服务原语被正确调用,即参数在定义的有效范围内
在以下情况下,与数据单元交付相关联的特定于数据链路层的DL_DATA.ind的接收会导致相关的网络层TCx实体(即TC0或TC1)生成N_DATA_SHDR.ind:
-
用于接收的数据包处理已成功完成
-
未执行丢弃N_PDU功能
7.14 管理信息库与协议常量
表66和表68显示了网络层属性。
表67列出了协议规范使用的协议常量,并定义了属性的有效值。
所有网络层属性都应是可读取的。
复位时,可设置属性应复位为其对应的静态值(如果存在),否则复位为其复位值。更多细节参见第9章。
表66 网络层(可读取、可设置)属性 | Table 66 Network Layer (gettable, settable) Attributes
| 属性 | 属性ID | 描述 | 类型 | 单位 | 有效属性值 | 复位值 | 备注 |
| N_DeviceID | 0x3000 | 用于检查网络层头部中DestDeviceID_Enc字段的本地DeviceID(更多细节参见第7.9.3节和第7.9.4节)。此属性在休眠期间保留。 | 整数 | 0到N_MaxDeviceID | 0 | ||
| N_DeviceID_valid | 0x3001 | 指定N_DeviceID属性值是否有效,并开启对网络层头部中DestDeviceID_Enc字段的检查(更多细节参见第7.9.3节和第7.9.4节)。此属性在休眠期间保留。 | 布尔 | TRUE=1 FALSE=0 | FALSE |
表67 网络层协议常量 | Table 67 Network Layer Protocol Constants
| 属性 | 描述 | 类型 | 单位 | 值 | 备注 |
| N_MaxPacketSizeSmall | DLCreditUnit32_Mode下的最大数据包大小(PDU大小) | 整数 | 字节 | N_MTU_SMALL + N_MaxHdrSize | – |
| N_MaxPacketSizeLarge | DLCreditUnit128_Mode下的最大数据包大小(PDU大小) | 整数 | 字节 | N_MTU_LARGE + N_MaxHdrSize | – |
| N_MaxHdrSize | 最大L3头部大小 | 整数 | 字节 | 1 | – |
| N_MTU_SMALL | DLCreditUnit32_Mode下的网络层最大传输单元 | 整数 | 字节 | T_MaxSegmentSizeSmall | – |
| N_MTU_LARGE | DLCreditUnit128_Mode下的网络层最大传输单元 | 整数 | 字节 | T_MaxSegmentSizeLarge | – |
| N_MaxDeviceIDOffset | 最大DeviceID偏移量 | 整数 | – | 63 | – |
| N_MaxDeviceID | 最大DeviceID | 整数 | – | 127 | – |
表68 网络层(可读取、静态)属性 | Table 68 Network Layer (gettable, static) Attributes
| 属性 | 属性ID | 描述 | 类型 | 单位 | 有效属性值 |
| N_TC0TxMaxSDUSize 2, 3 | 0x3020 | TC0每个数据包的最大传输载荷(SDU)大小 | 整数 | 字节 | 1到N_MTU |
| N_TC1TxMaxSDUSize 2, 3 | 0x3021 | TC1每个数据包的最大传输载荷(SDU)大小 | 整数 | 字节 | 1到N_MTU |
| N_MaxPacketSize 1 | 0x3022 | 最大数据包大小(PDU大小)。在DLCreditUnit32_Mode下,N_MaxPacketSize等于N_MaxPacketSizeSmall;在DLCreditUnit128_Mode下,N_MaxPacketSize等于N_MaxPacketSizeLarge。此属性在休眠期间保留。 | 整数 | 字节 | N_MaxPacketSizeSmall, N_MaxPacketSizeLarge |
| N_MTU 1 | 0x3023 | 网络层最大传输单元。在DLCreditUnit32_Mode下,N_MTU等于N_MTU_SMALL;在DLCreditUnit128_Mode下,N_MTU等于N_MTU_LARGE。此属性在休眠期间保留。 | 整数 | 字节 | N_MTU_SMALL, N_MTU_LARGE |
脚注:
-
此属性的值在链路启动期间确定。降级后的值在DME_LINKSTARTUP.cnf_L( SUCCESS )之后有效。
-
网络层根据降级后的DLCreditUnitMode转换此属性的值,该模式在链路启动时确定。
-
此属性在休眠期间保留。
541

被折叠的 条评论
为什么被折叠?



