【问题标题】:Sending packet through linux macvtap interface通过linux macvtap接口发送数据包
【发布时间】:2015-05-04 20:56:55
【问题描述】:

Linux 支持接口类型 macvtap。我找不到很好的文档,但这是一个很好的入门:http://virt.kernelnewbies.org/MacVTap

我正在尝试使用它来创建一个新的虚拟网络设备,我可以通过编程方式读取和写入该设备以发送原始数据包。虽然我可以从 Tap 界面正常读取,但我不知道有什么方法可以写入它。

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

这可以吗?还是 macvtap 接口只支持从 tap 接口读取,需要你使用原始套接字或其他东西来发送数据包?

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

块引用

【问题讨论】:

    标签: linux sockets networking tunnel libvirt


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2018-01-22
      • 1970-01-01
      • 2017-02-25
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多