你能帮我解决一下这个问题吗?
解决方法 绑定驱动程序注册自己的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数据包所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)