gpt4 book ai didi

c - 当内核需要创建 SKB 以通过网络设备接口(interface)发送时,内核如何知道要分配多少余量/余量?

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:31 26 4
gpt4 key购买 nike

我有一个场景,其中内核构建 SKB,它来到我的 .do_start_xmit Hook ,没有足够的空间用于我的额外 header 。实际上,它发生在先前的 .do_start_xmit Hook 调用返回错误(不是 0)时。从那一刻起,内核一直在尝试发送 SKB(32 字长的数据),但没有足够的空间容纳我的额外 header 。在那个错误之前,内核制作了完美的 SKB,具有足够的空间来满足我需要的一切。

当从一个用户空间向另一个用户空间发送 ping(例如)时,内核从中获取值以设置 SKB 的余量/余量大小的配置在哪里?

最佳答案

您可以在您的 NIC 驱动程序初始化时设置您的“net_device”“needed_headroom”/“needed_tailroom”字段,例如

dev->needed_headroom += EXTRA_HEADER_LENGTH;

基本逻辑是,当网络堆栈即将分配一个SKB通过接口(interface)传输时,它会考虑“needed_headroom”的值(实际上是一个宏LL_RESERVED_SPACE(dev)),SKB将有预留的大净空。这样,您的 NIC 驱动程序可以假设大多数数据包到达“do_start_xmit()”应该有足够的净空 --- 大多数,而不是全部,仍然需要净空检查。

关于c - 当内核需要创建 SKB 以通过网络设备接口(interface)发送时,内核如何知道要分配多少余量/余量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22374860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com