通过linux macvtap接口发送数据包

Linux支持接口typesmacvtap。 我找不到很好的文档,但这是一个很好的开始: http : //virt.kernelnewbies.org/MacVTap

我试图用这个来创build一个新的虚拟networking设备,我可以编程读取和写入发送原始数据包。 虽然我可以从龙头界面读取罚款,我想不出任何方式写入它。

  1. 我打开常规open系统调用水龙头设备。
  2. 尝试使用write来发送一个数据包,但我得到一个Invalid argument (EINVAL)错误响应。
  3. 也尝试使用sendmsg但当然得到一个错误,我有一个纯文件描述符,而不是一个套接字

可以这样做吗? 或者,macvtap接口只支持从tap界面读取数据,并要求使用raw socket或其他方法发送数据包?

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

大段引用

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