gpt4 book ai didi

linux-kernel - 是否可以从 Linux Kernel 中的驱动程序代码调用设备层代码

转载 作者:行者123 更新时间:2023-12-04 02:24:59 30 4
gpt4 key购买 nike

我正在浏览 Linux 网络设备驱动程序代码,想知道是否可以从驱动程序代码中调用设备层代码。

--- a/drivers/net/ethernet/realtek/8139too.c
+++ b/drivers/net/ethernet/realtek/8139too.c
@@ -1706,10 +1706,20 @@ static netdev_tx_t rtl8139_start_xmit (struct sk_buff *skb,
unsigned int entry;
unsigned int len = skb->len;
unsigned long flags;
-
+ int ret=0;
/* Calculate the next Tx descriptor entry. */
entry = tp->cur_tx % NUM_TX_DESC;

+
+ ret = dev_queue_xmit(skb);
+
+ if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {}
+
+ else {
+ dev->stats.tx_dropped++;
+
+ }
+

在上面的代码中,我尝试调用 dev_queque_xmit(skb),它是设备层的接口(interface),它与 Linux QoS 代码 Hook 。

我进行了这些更改,希望通过 tx drop byte 字段下的 ifconfig stats 捕获由于 Linux 流量控制导致的数据包丢失,但不确定这些更改是否有效?

是否可以以我尝试的这种方式从驱动程序层调用设备层?

最佳答案

至于这段代码是否可以正常工作,我对此表示怀疑。这种改变会带来麻烦,比如:

    dev_queue_xmit()
-> enqueue to QoS (I assume you mean Qdisc)
-> rtl8139_start_xmit()
-> dev_queue_xmit() # creating a loop

目前,“ifconfig”无法知道“丢弃数据包的数量(由于 QoS)”,因为“ifconfig”从/proc/net/dev 读取统计信息,而这些统计信息不包含 QoS 统计信息,而只是网卡驱动程序本身。

但是您可以通过其他方式了解“丢弃数据包的数量(由于 QoS)”。在内核源代码中,有:
   rtnl_register(PF_UNSPEC, RTM_GETQDISC, tc_get_qdisc, tc_dump_qdisc, NULL);   # it fill "gnet_stats_queue", and there is a drop counter internally.

即转储 Qdisc 状态,包括由于拥塞而导致的丢弃数。除了“/proc/net/dev”之外,它是高级用户级管理工具(不是“ifconfig”)通过 rtlink 消息检索更详细信息的接口(interface)。但是,我不确定那些高级用户级管理工具是什么(不熟悉它们)。也许“ip”命令可以??

关于linux-kernel - 是否可以从 Linux Kernel 中的驱动程序代码调用设备层代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709913/

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