我试图了解Linux内核中的vxlan驱动程序代码。
内核版本为:3.16.0-29-generic

查看vxlan.c似乎每个vni创建一个vxlan开发并将其绑定到netdevice所属的netns,并为每个dev创建一个udp套接字。

我对此感到有些困惑,因为除了全局netns之外,您不能真正将vxlan设备附加到物理设备(ethx),因为物理设备必须与vxlan设备属于同一netnet。

例如:
如果我在全局网络中创建一个vxlan链接,它将按预期工作:

ip link add vxlan0 type vxlan id 10 dev eth0
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.10.100.51/24 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:22:4d:99:32:6b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.25/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::222:4dff:fe99:326b/64 scope link
       valid_lft forever preferred_lft forever
15: vxlan0: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default
    link/ether fe:9c:49:26:ba:63 brd ff:ff:ff:ff:ff:ff


如果我尝试在网络名称空间中执行相同的操作,它将无法正常工作:

ip netns exec test0 ip link add vxlan1 type vxlan id 20 dev eth0
ip netns exec test0 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00


这里的问题是它不喜欢“ dev eth0”,因为代码检查以查看eth0是否与所添加的链接位于同一netnet中。

如果我在没有eth0的情况下创建相同的设备,则可以正常工作:

ip netns exec test0 ip link add vxlan1 type vxlan id 20
ip netns exec test0 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: vxlan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
    link/ether 46:7a:5b:87:7d:2f brd ff:ff:ff:ff:ff:ff


如果无法将运营商附加到vxlan设备,那么如何真正在主机外部收发tx / rx数据包?

这是否意味着实际上您只能将vxlan驱动程序与全局网络一起使用,或者您“必须”将其与网桥一起使用?

vxlan数据包具有与之关联的VNI。您应该能够使用它直接将数据包发送到非全局网络中的开发人员,这与macvlans确实可以实现的功能类似。

我想念什么吗?

最佳答案

原来您可以将物理设备添加到非全局网络。因此,这个问题尚无定论。
我宁愿在全局网络中看到一个vxlan设备将基于VNI的数据包发送到适当的网络,类似于在macvlans中的情况。

07-27 21:00