gpt4 book ai didi

linux - 通过linux macvtap接口(interface)发送数据包

转载 作者:IT王子 更新时间:2023-10-29 00:34:55 27 4
gpt4 key购买 nike

Linux 支持一种接口(interface)类型,macvtap。我找不到关于它的优秀文档,但这是一个很好的入门:http://virt.kernelnewbies.org/MacVTap

我正在尝试使用它来创建一个新的虚拟网络设备,我可以通过编程方式读取和写入该设备以发送原始数据包。虽然我可以很好地从 tap 接口(interface)读取数据,但我想不出任何方法来写入它。

  1. 我正在使用常规 open 系统调用打开 tap 设备。
  2. 尝试使用write 发送数据包,但我收到了一个Invalid argument (EINVAL) 错误响应。
  3. 还尝试使用 sendmsg 但当然会得到一个错误,我有一个普通的文件描述符,而不是一个套接字。

这能做到吗?还是 macvtap 接口(interface)仅支持从 tap 接口(interface)读取并要求您使用原始套接字或其他方式发送数据包?

(macvtap 的 Libvirt 代码在这里:https://gitorious.org/libvirt/libvirt/source/63889e0c775010d8d70b71d25340bab995aa83ce:src/util/virmacaddr.c)

block 引用

最佳答案

好的,我也遇到了这个。我阅读了内核源代码,结果发现 macvlan 有一个用于 tcp 校验和卸载的卸载工具和默认情况下打开的各种其他东西,并且需要一堆关于缓冲区开头的数据包的元数据,在数据包之前数据(不确定格式是否记录在案)。如果您使用 TUNSETIFF ioctl 禁用 IFF_VNET_HDR 标志,它的工作方式就像一个普通的 tap 设备。

关于linux - 通过linux macvtap接口(interface)发送数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28844825/

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