当前位置: 首页 > news >正文

windows网络适配器驱动开发-泛型分段卸载(下)

用于控制 GSO 的 INF 关键字

NetAdapterCx 检查注册表关键字,并在启用主动卸载功能时遵循它们。 驱动程序不需要采取任何进一步措施。

使用注册表值启用和禁用任务卸载中指定的 LSO 关键字可用于使用注册表项设置启用/禁用 LSO 卸载。

UDP 分段卸载(USO)中指定的 USO 关键字可用于通过注册表项设置启用/禁用 USO 卸载。

关键字值的类型必须为 REG_SZ。

配置 GSO

客户端驱动程序在网络适配器初始化期间首先声明其硬件的GSO功能。 在启动网络适配器之前,可能会在其 EvtDevicePrepareHardware 回调中发生此情况。

若要配置 GSO,请使用客户端驱动程序:

  • 分配 NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES 结构。
  • 调用 NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT 来初始化结构。
  • 调用 NetAdapterOffloadSetGsoCapabilities 以向 NetAdapterCx 注册结构。

在调用 NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT 时,客户端驱动程序提供了一个指向 EVT_NET_ADAPTER_OFFLOAD_SET_GSO 回调的指针。 如果活动卸载功能发生更改,系统稍后将调用此回调。

指示硬件 GSO 功能的规则

以下规则适用于 NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES 结构:

  • 驱动程序必须设置 Layer3Flags 和 Layer4Flags。
  • 如果 NIC 支持 LSO,驱动程序必须使用 TCP 标志填充 Layer4Flags 字段 NetAdapterOffloadLayer4FlagTcpWithoutOptions 。
  • 如果 NIC 支持 USO,驱动程序必须使用 UDP 标志填充 Layer4Flags 字段 NetAdapterOffloadLayer4FlagUdp 。
  • MaximumOffloadSize 和 MinimumSegmentCount 是必填字段。
  • Layer4OffsetLimit 字段是可选的。 如果 OS 发送标头偏移大于指定限制的数据包,则不会要求执行 GSO。
  • 如果支持选项/扩展,则必须支持不带选项/扩展的 IP/TCP 数据包。

此示例演示客户端驱动程序如何设置其硬件卸载功能。

VOID MyAdapterSetOffloadCapabilities( NETADAPTER NetAdapter ) { // Configure the hardware's GSO offload capabilities NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES gsoOffloadCapabilities; auto const layer3Flags = NetAdapterOffloadLayer3FlagIPv4NoOptions | NetAdapterOffloadLayer3FlagIPv4WithOptions | NetAdapterOffloadLayer3FlagIPv6NoExtensions | NetAdapterOffloadLayer3FlagIPv6WithExtensions; auto const layer4Flags = NetAdapterOffloadLayer4FlagTcpNoOptions | NetAdapterOffloadLayer4FlagTcpWithOptions; NetAdapterOffloadLayer4FlagUdp; NET_ADAPTER_OFFLOAD_GSO_CAPABILITIES_INIT( &gsoOffloadCapabilities, layer3Flags, layer4Flags, MY_GSO_OFFLOAD_MAX_SIZE, MY_GSO_OFFLOAD_MIN_SEGMENT_COUNT, EvtAdapterOffloadSetGso); gsoOffloadCapabilities.Layer4OffsetLimit = 127; // Set the current GSO offload capabilities and register the callback for future changes in active capabilities NetAdapterOffloadSetGsoCapabilities(NetAdapter, &gsoOffloadCapabilities); }
更新硬件卸载

如果 TCP/IP 堆栈或上层协议驱动程序请求更改网络适配器的有效功能,NetAdapterCx 将调用在适配器初始化期间注册的客户端驱动程序的 EVT_NET_ADAPTER_OFFLOAD_SET_GSO 回调。 在此函数中,系统在 NETOFFLOAD 对象中提供更新的功能,客户端驱动程序查询以更新其卸载功能。

客户端驱动程序可以调用以下函数来确定已启用哪些卸载:

  • NetOffloadIsLsoIPv4Enabled
  • NetOffloadIsLsoIPv6Enabled
  • NetOffloadIsUsoIPv4Enabled
  • NetOffloadIsUsoIPv6Enabled

以下示例演示客户端驱动程序如何更新其 GSO 卸载功能:

VOID MyEvtAdapterOffloadSetGso( NETADAPTER NetAdapter, NETOFFLOAD Offload ) { PMY_NET_ADAPTER_CONTEXT adapterContext = MyGetNetAdapterContext(NetAdapter); // Store the updated information in the context adapterContext->LSOv4 = NetOffloadIsLsoIPv4Enabled(Offload) ? GsoOffloadEnabled : GsoOffloadDisabled; adapterContext->LSOv6 = NetOffloadIsLsoIPv6Enabled(Offload) ? GsoOffloadEnabled : GsoOffloadDisabled; adapterContext->USOv4 = NetOffloadIsUsoIPv4Enabled(Offload) ? GsoOffloadEnabled : GsoOffloadDisabled; adapterContext->USOv6 = NetOffloadIsUsoIPv6Enabled(Offload) ? GsoOffloadEnabled : GsoOffloadDisabled; // Enable hardware checksum if LSO/USO is enabled MyUpdateHardwareChecksum(adapterContext); }
http://www.jsqmd.com/news/1123899/

相关文章:

  • Ventoy启动界面个性化:3步打造专属启动盘视觉盛宴
  • 三步搞定E-Hentai漫画收藏:免费批量下载终极指南
  • openeuler/riscv-kernel:RISC-V架构在openEuler的统一内核解决方案
  • openEuler-lsb故障排除:常见LSB兼容性问题解决方案
  • Enigma Virtual Box解包终极指南:3分钟掌握专业脱壳技巧
  • AI赋能Selenium IDE:智能自动化测试从入门到实战
  • 如何快速掌握RenameIt:Sketch设计师必备的批量重命名终极指南
  • 终极AMD Ryzen调试工具SMUDebugTool:5步成为硬件掌控大师
  • 机器学习与模式识别 第八章 MAP与偏方差 考点压缩
  • 华硕笔记本性能控制终极秘籍:从官方软件到开源工具的蜕变之路
  • Codex 实战 Skills:发生 Bug 时,用 Skill 自动捕获堆栈并格式化推送到群聊的预警技能
  • TVA在具身智能商业化部署中的技术突破(13)
  • ICM-42605与STM32F437ZG在运动追踪中的硬件与算法实现
  • 加密货币合规工具横向评测:6 款主流产品技术分析与选型建议
  • 嵌入式精确计时系统:CS2200-CP与PIC18F2455的硬件设计与优化
  • Hetzner创建云服务器SSH Keys配置介绍(公钥、私钥、密钥配置、SSH配置)
  • 终极B站视频下载指南:用BilibiliDown实现高效离线观看
  • CI/CD是什么?使用GitHub Actions快速体验
  • 日前公司 server-side 有组件,疑似因撰写时 exception-handling 做得不周全
  • 震惊!原来毕业论文还能这样写?2026降AI率工具推荐合集
  • 好用的区域教育一体化管理平台源头厂家
  • 文心一言内测实录:中文长文本理解与企业文档处理深度评测
  • GPT-4与GPT-4 Turbo核心差异:上下文、知识、稳定性与成本的工程真相
  • 从CVE-2020-27986看SonarQube安全加固:构建纵深防御的代码审计平台
  • 一次 GitLab 大仓库 Clone 中断排查
  • git的基本了解
  • 学术科研选模型的本质:任务-能力匹配三原则
  • HackDroid:移动端Android安全测试与逆向分析工具箱实战指南
  • 无线鼠标持续充电技术的演进——6.78MHz磁共振国产方案的崛起
  • Db2数据库手工SQL注入实战:从原理到靶场复现