发送以太网帧

Windows TCP/IP 传输支持发送以太网帧的一组要求。 任何驱动程序 (例如,源自发送请求或修改过分驱动程序的发送请求的 MUX 中间驱动程序或筛选器驱动程序) 都必须支持 TCP/IP 传输实现的要求。

注意 如果驱动程序堆栈中的任何驱动程序不符合这些要求,基础微型端口驱动程序、MUX 中间驱动程序和筛选器驱动程序的行为可能会不可预测。

对于以太网发送请求,驱动程序必须支持以下要求:

  • 如果驱动程序源自发送请求,则驱动程序应为以太网帧分配 NET_BUFFER_LIST 结构。 每个 NET_BUFFER_LIST 结构中的 NetBufferListInfo 成员必须包含带外 (OOB) 特定用途所需的数据。 OOB 数据适用于与 NET_BUFFER_LIST 结构关联的所有NET_BUFFER结构。

  • 如果驱动程序发出发送请求,则驱动程序应为以太网帧分配一个或多个NET_BUFFER结构,并将这些结构链接到NET_BUFFER_LIST结构。 链接到NET_BUFFER_LIST结构的每个NET_BUFFER结构都描述单个以太网帧。 驱动程序可以在发送请求中链接多个NET_BUFFER_LIST结构。

  • 与 NET_BUFFER_LIST 结构关联的所有NET_BUFFER结构必须具有相同的以太网帧类型和 IP 协议版本, (IPv4 或 IPv6) 。

  • 与NET_BUFFER_LIST结构关联的所有NET_BUFFER结构必须具有相同的源和目标 MAC 地址。

  • 如果驱动程序正在发送 TCP 或 UDP 帧,则与NET_BUFFER_LIST结构关联的所有NET_BUFFER结构都必须与同一 TCP 或 UDP 连接相关联。 注意 根据以下要求,可以拆分传输的以太网帧。 也就是说,多个内存描述符列表 (MDL) 可以与发送请求中的NET_BUFFER结构相关联。

  • 不要跨多个 MDL 拆分传输以太网帧的 MAC 标头。 将虚拟 LAN (VLAN) (或 Priority) 标志(如果存在)视为 MAC 标头的一部分。 因此,此标志必须与 MAC 标头的其余部分位于同一 MDL 中。

  • 如果驱动程序在NET_BUFFER结构中更改 MDL 链中的链接或NET_BUFFER_LIST结构中的NET_BUFFER链,则驱动程序必须先将链接还原到原始配置,然后才能将NET_BUFFER_LIST的所有权返回到过度的驱动程序。 但是,驱动程序不需要还原NET_BUFFER_LIST结构之间的链接。