包格式注册细节
dlpi 驱动程序通过允许用户指定在其上创建流的传输介质所需的特定包格式来支持通用公共数据链路接口 (CDLI) 网络接口。
通过使用 M_IOCTL 或 M_CTL 流消息,用户可以指定包格式。 如果未指定包格式,那么缺省值为 NS_PROTO。
DLPI 用户通过 STREAMS I_STR ioctl 指定包格式。 对于每个流,允许 DLPI 用户使用一个包格式规范。 必须在连接之后和绑定之前指定此包格式。 否则,将生成错误。
/usr/include/sys/cdli.h 中定义的包格式如下:
| 项 | 描述 |
|---|---|
| NS_PROTO | 除去所有链接级别的头。 不使用子网访问协议 (SNAP)。 |
| NS_PROTO_SNAP | 除去所有链接级别的头,包括 SNAP。 |
| NS_INCLUDE_LLC | 保留 LLC 标题。 |
| NS_INCLUDE_MAC | 请勿除去任何头。 |
/usr/include/sys/dlpi_aix.h 文件中定义的包格式为:
| 项 | 描述 |
|---|---|
| NS_PROTO_DL_COMPAT | 使用 AIX® 3.2.5 DLPI 地址格式。 |
| NS_PROTO_DL_DONTCARE | DL_UNITDATA_IND中没有地址。 对于 DL_UNITDATA_IND 原语, DLPI 提供 dl_unitdata_ind_t 结构中的头信息。 |
除 NS_INCLUDE_MAC 以外的所有包格式都接受以下格式的下游地址:
mac_addr.dsap[.snap].
单独而言,包格式具有以下需求:
| 项 | 描述 |
|---|---|
| NS_PROTO 或 NS_PROTO_SNAP | 介质访问控制 (MAC) 和逻辑链路控制 (LLC) 包括在 DLPI 头中,并且消息的数据部分仅包含数据。 NS_PROTO 头不包含 SNAP; NS_PROTO_SNAP 头不包含 SNAP。 两种包格式都将目标地址作为mac_addr和源地址作为mac_addr.ssap.dsap.ctrl[.snap]. 对于 DL_UNITDATA_REQ 原语, DLPI 用户必须在 DLPI 头中提供目标地址和可选目标服务访问点 (DSAP)。 如果 DLPI 用户未指定 DSAP ,那么将使用在绑定时指定的 DSAP。 |
| NS_PROTO_无所谓 | dlpi 驱动程序在上游 DL_UNITDATA_IND中不放置任何地址。 在 DL_UNITDATA_REQ上仍需要地址。 |
| NS_PROTO_DL_COMPAT | dlpi 驱动程序使用 AIX® 3.2.5 dlpi 驱动程序中使用的地址格式,该格式在上游和下游都相同。 源地址和目标地址显示为mac_addr.dsap[.snap]. |
| NS_INCLUDE_LLC | DLPI 头仅包含目标和源地址。 只有 LLC 放置在 DL_UNITDATA_IND 消息的 M_DATA 部分中。 源地址和目标地址都显示为mac_addr. 对于 DL_UNITDATA_REQ 原语, DLPI 用户必须在 DLPI 头中提供目标地址和可选 DSAP。 如果 DLPI 用户未指定 DSAP ,那么将使用在绑定时指定的 DSAP。 |
| NS_INCLUDE_MAC | MAC 和 LLC 都放在消息的数据部分中。 因此, DLPI 用户必须了解特定接口的 MAC 头和 LLC 体系结构,以便从消息的数据部分检索 MAC 头和 LLC。 此格式将流设置为原始方式,这不会处理入局或出局消息。 对于 DL_UNITDATA_REQ 原语, DLPI 用户必须在 DLPI 头中提供目标地址和可选 DSAP。 如果 DLPI 用户未指定 DSAP ,那么将使用在绑定时指定的 DSAP。 下游消息不需要 DL_UNITDATA_REQ 头,并且必须作为 M_DATA 消息接收。 下游消息必须包含已完成的 MAC 头,该头将复制到介质中,而无需进一步转换。 |