sriov 应该是可以基于 pf vf 设置 vlan 的
1. 查看 一个 pf 以及及其 vf
# ip link show dev eth2
7: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:02:c9:e6:01:12 brd ff:ff:ff:ff:ff:ff
vf 0 MAC 00:00:00:00:00:00, vlan 4095, spoof checking off, link-state auto
vf 1 MAC 00:00:00:00:00:00, vlan 4095, spoof checking on, link-state enable
vf 2 MAC 00:00:00:00:00:00, vlan 4095, spoof checking off, link-state disable
vf 3 MAC 00:00:00:00:00:00, vlan 4095, spoof checking off, link-state auto
vf 4 MAC 00:00:00:00:00:00, vlan 4095, spoof checking off, link-state auto
vf 5 MAC 00:00:00:00:00:00, vlan 4095, spoof checking off, link-state auto
vlan 的配置
#ip link set <dev> down
#ip link set <pf> vf <vf_index> vlan <vlan id> qos <priority>
#ip link set <dev> up
ip link set eth8 down
ip link set eth2 vf 1 vlan 2
ip link set eth8 up
QoS 配置
#ip link set <pf> vf <vf_index> vlan <vlan id> qos <priority>
MAC 配置
#ip link set <pf> vf <vf_index> mac <vnic_mac>
ip link set eth2 vf 1 mac 00:52:44:11:22:33
# 在该步骤之后再应用到 vm xml
打开或者关闭 arp 欺骗检查
#ip link set <pf> vf <vf_index> spoofchk on|off
#ip link set eth2 vf 1 mac 00:52:44:11:22:33
#ip link set eth2 vf 1 spoofchk on
2. 虚拟机 vf sriov pci 设备配置
<devices>
...
<hostdev mode='subsystem' type= **'pci'** managed='yes'>
<**source**>
<address domain='0x0000' **bus**='0x04' **slot**='0x00' **function**='0x4'/>
</**source**>
<alias name='hostdev0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</hostdev>
...
</devices>
# lspci
…
**04:00.4** Network controller: Mellanox Technologies ... [ConnectX-3 Virtual Function]
#
3. macvtap 的并行虚拟化的配置
<devices>
...
<interface type= **'direct'** >
<mac address= **'52:54:00:36:5b:2c'** />
<source dev='**eth8**' mode='passthrough'/>
<target dev='macvtap0'/>
<model type='virtio'/>
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...
</devices>
华为的配置也大致类似:
VF可配置两种vlan,Transparent VLAN Tagging和Virtual Guest Tagging。
Transparent VLAN Tagging是由VF给报文添加vlan tag,相当于PVID,VM(OS)不感知vlan tag。VM发过来的报文,VF添加PVID再外发;VF接收带PVID的vlan tag的报文,去掉vlan tag后再发给VM。可使用下面命令配置Transparent VLAN Tagging。
#ip link set eth[num] vf [VF num] vlan [VLAN ID]
Virtual Guest Tagging是VF不设置PVID,由VM(OS)给报文设置vlan tag,VF不对报文的vlan tag作任何处理,直接透传。可使用下面命令配置Virtual Guest Tagging。
#ip link set eth[num] vf [VF num] vlan 4095
support.huawei.com/enterprise/…
4. 关于网络控制面如何编排
neutron 中应该有对应的 vlan 调度配置实现, 后续再梳理下:
access.redhat.com/documentati…
5. 注意点
注意:所有未设置 VLAN ID 的 VF 和 PF,可以认为是在同一个 LAN 中,不带 VLAN 的数据包在该 LAN 中按照上述规则进行处理。此外,设置了 VLAN 的 VF,发出数据包时,会自动给数据包加上 VLAN,在接收到数据包时,可以设置是否由硬件剥离 VLAN 头部。 cloud.tencent.com/developer/a…
参考: