linux-kernel – 绑定驱动程序如何从奴役接口获取RX数据包

linux-kernel – 绑定驱动程序如何从奴役接口获取RX数据包,第1张

概述我有一个关于如何绑定驱动程序从受奴役的接口获取RX数据包的问题.我发现绑定使用dev_add_pack()来设置LACPDU和ARP数据包的处理程序,但我没有找到其他处理程序(对于其他数据包类型). 你能帮我解决一下这个问题吗? 绑定驱动程序注册自己的Rx处理程序,当奴隶接口被奴役到债券主数据时,在bond_enslave()中你可以看到: res = netdev_rx_handler_regi 我有一个关于如何绑定驱动程序从受奴役的接口获取RX数据包的问题.我发现绑定使用dev_add_pack()来设置LACPDU和ARP数据包的处理程序,但我没有找到其他处理程序(对于其他数据包类型).

你能帮我解决一下这个问题吗?

解决方法 绑定驱动程序注册自己的Rx处理程序,当奴隶接口被奴役到债券主数据时,在bond_enslave()中你可以看到:
res = netdev_rx_handler_register(slave_dev,bond_handle_frame,new_slave);

因此在bond_handle_frame()中,它会劫持从接口接收的数据包,因此绑定主机将接收数据包:

static rx_handler_result_t bond_handle_frame(struct sk_buff **pskb){        struct sk_buff *skb = *pskb;        struct slave *slave;        struct bonding *bond;        int (*recv_probe)(const struct sk_buff *,struct bonding *,struct slave *);        int ret = RX_HANDLER_ANOTHER;        skb = skb_share_check(skb,GFP_ATOMIC);        if (unlikely(!skb))                return RX_HANDLER_CONSUMED;        *pskb = skb;        slave = bond_slave_get_rcu(skb->dev);        bond = slave->bond;        if (bond->params.arp_interval)                slave->dev->last_rx = jiffIEs;        recv_probe = ACCESS_ONCE(bond->recv_probe);        if (recv_probe) {                ret = recv_probe(skb,bond,slave);                if (ret == RX_HANDLER_CONSUMED) {                        consume_skb(skb);                        return ret;                }        }        if (bond_should_deliver_exact_match(skb,slave,bond)) {                return RX_HANDLER_EXACT;        }        skb->dev = bond->dev;        if (bond->params.mode == BOND_MODE_ALB &&            bond->dev->priv_flags & IFF_BRIDGE_PORT &&            skb->pkt_type == PACKET_HOST) {                if (unlikely(skb_cow_head(skb,skb->data - skb_mac_header(skb)))) {                        kfree_skb(skb);                        return RX_HANDLER_CONSUMED;                }                memcpy(eth_hdr(skb)->h_dest,bond->dev->dev_addr,ETH_ALEN);        }        return ret;}
总结

以上是内存溢出为你收集整理的linux-kernel – 绑定驱动程序如何从奴役接口获取RX数据包全部内容,希望文章能够帮你解决linux-kernel – 绑定驱动程序如何从奴役接口获取RX数据包所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1049779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存