如何使用 netplan 在特定 SR-IOV vf 接口上配置 vlan 标签?我尝试了以下操作来证明 vlan 标签在常规接口上有效:
network:
ethernets:
enp94s0f2:
mtu: 1500
vlans:
enp94s0f2.1014:
id: 1014
link: ens124
mtu: 1500
这有效,vlan 接口enp94s0f2.1014@enp94s0f2
出现。
然后我尝试配置 SR-IOV VF 接口以确保它们正常工作。
network:
ethernets:
virtual-function-count: 1
enp94s0f2:
mtu: 1500
enp94s0f2v0:
link: enp94s0f2
mtu: 1500
这样就起作用了,虚函数接口enp94s0f2v0
就出现了。
然而,当我尝试将两者结合起来时,它不起作用,只出现 vf。
network:
ethernets:
virtual-function-count: 1
enp94s0f2:
mtu: 1500
enp94s0f2v0:
link: enp94s0f2
mtu: 1500
vlans:
enp94s0f2v0.1014:
id: 1014
link: enp94s0f2v0
mtu: 1500
阅读 netplan 的示例这里我没有找到有关将 VLAN 连接到 sriov 接口的任何信息。
似乎有一个 PR 于 2020 年合并,用于 netplan 将 vlan 连接到 sriov 接口,但我不清楚这是如何工作的,有人可以解释一下吗?也许我的语法错了:这里有一个链接。
我需要enp94s0f2v0.1014@enp94s0f2v0
创建。我该如何实现?此外,当我们处于 SR-IOV 和 VLAN 的世界中时,如果我删除了 VF 或 VLAN,我该如何让 netplan 自行清理?每当我使用 netplan 创建 VF 或 VLAN,然后调整我的 netplan 配置以将其删除时,netplan 都会拒绝自行清理,我必须重新启动主机。
编辑 我最初的帖子使用的是“eth124”。那是我为了向公众隐瞒我的实际端口名称。实际端口名称更长。我将它们更新为“enp94s0f2”,此更新很重要,因为问题与接口名称的长度有关。
答案1
搞清楚了。问题出在我提供的子接口名称的长度上。
enp94s0f2v0.1014
太长了。Netplan 对此没有发出任何警告,界面根本没有出现,因此无法判断为什么会发生这种情况。字符数限制似乎为 15。我提供了 16 个。
以下是对我有用的配置:
network:
ethernets:
virtual-function-count: 1
enp94s0f2:
mtu: 1500
enp94s0f2v0:
link: enp94s0f2
mtu: 1500
vlans:
e94s0f-2v0.1014:
id: 1014
link: enp94s0f2v0
mtu: 1500
注意它比一个字符e94s0f-2v0.1014
短。enp94s0f2v0.1014
编辑
因此,经过更多测试后,子接口拒绝保留 vlan 标记。我确保检查ip link
sriov 接口是否尚未标记(事实并非如此)。最后,netplan 将创建子接口,但它毫无用处。解决方法是,不要使用 netplan 从 VF 创建子接口。我仍然使用 netplan 创建 VF,这样可行。需要使用 将 vlan 标记应用于 SR-IOV 接口ip link
,然后使用 将 ip 地址直接应用于 SR-IOV VF ip a
,如下所示:
ip link set dev enp94s0f2 vf 0 vlan 1014
ip addr add 172.0.14.1/24 dev enp94s0f2v0
ip link set dev enp94s0f2v0 up
如果您检查并看到 vf 上的 ip 地址,则说明其设置正确ip -br a
。此外ip link
,pf 应该显示应用了 vlan 标签的 vf。
真遗憾,我喜欢使用 netplan,但在这种情况下它无法正常工作。