OVS和Neutron对于网卡设备的分析

通常在测试过程中,会有PORT,TAP设备等概念,记录一下从Neutron和OpenvSwitch的角度分析的结果

首先,neutron接口查看一个普通的port

$ neutron port-show 198173a6-f20c-4d84-af4c-e07ad3508544
+-----------------------+-------------------------------------------------------------------------------------+
| Field                 | Value                                                                               |
+-----------------------+-------------------------------------------------------------------------------------+
| admin_state_up        | True                                                                                |
| allowed_address_pairs |                                                                                     |
| binding:capabilities  | {"port_filter": true}                                                               |
| binding:host_id       | 10-80-0-49                                                                          |
| binding:profile       | {}                                                                                  |
| binding:vif_type      | ovs                                                                                 |
| device_id             | 3e87528b-fe40-40df-8550-0dd3bfaba166                                                |
| device_owner          | compute:pub.pub1                                                                    |
| extra_dhcp_opts       |                                                                                     |
| filtered_ports        |                                                                                     |
| fixed_ips             | {"subnet_id": "bc9fc957-2fdf-4663-9189-65fc9b0a559d", "ip_address": "10.80.80.36"}  |
| id                    | 198173a6-f20c-4d84-af4c-e07ad3508544                                                |
| ingress_max_rate      |                                                                                     |
| mac_address           | fa:16:3e:d3:e1:69                                                                   |
| max_rate              |                                                                                     |
| name                  |                                                                                     |
| network_id            | f00eff19-afd5-4be6-ae16-dcb51c0455f7                                                |
| port_security_enabled |                                                                                     |
| prefer_rate           |                                                                                     |
| status                | ACTIVE                                                                              |
| support_azs           | pub                                                                                 |
| tenant_id             | 10e5051a1cee4f8ebb0e8b5d877de581                                                    |
+-----------------------+-------------------------------------------------------------------------------------+

这里可以看到所在节点NODE以及挂载的虚拟机UUID,也就是device_id,binding在ovs上,那么就直接去所在的节点机查看这个设备

其实根据PORT的UUID就可以得到TAP设备的Name,第一个-加后两位,前面加一个tap即可,也就是:tap198173a6-f2

直接NODE上通过virsh也可以确认一下tap设备名

$ sudo virsh dumpxml 3e87528b-fe40-40df-8550-0dd3bfaba166 | grep tap
      target dev='tap198173a6-f2'
      target dev='tap23e1c38f-4b

可以看到这个VM绑定了两个PORT,其中有一个和上面预期的一样

那么接下来通过ovs查询设备

$sudo ovs-vsctl show | less
Port "tap23e1c38f-4b"
            tag: 21
            Interface "tap23e1c38f-4b"

这样就能够在ovs上查询到该设备,最终看下这里和neutron接口查询的信息的相关性

$ sudo ovs-vsctl list interface tap198173a6-f2
_uuid               : ea5eb70c-7ccf-46e8-9f5b-09f947ea9a6c
admin_state         : up
bfd                 : {}
bfd_status          : {}
cfm_fault           : []
cfm_fault_status    : []
cfm_flap_count      : []
cfm_health          : []
cfm_mpid            : []
cfm_remote_mpids    : []
cfm_remote_opstate  : []
duplex              : full
error               : []
external_ids        : {attached-mac="fa:16:3e:d3:e1:69", iface-id="198173a6-f20c-4d84-af4c-e07ad3508544", iface-status=active, vm-id="3e87528b-fe40-40df-8550-0dd3bfaba166"}
ifindex             : 304
ingress_policing_burst: 0
ingress_policing_rate: 0
lacp_current        : []
link_resets         : 1
link_speed          : 10000000
link_state          : up
lldp                : {}
mac                 : []
mac_in_use          : "fe:16:3e:d3:e1:69"
mtu                 : 1500
name                : "tap198173a6-f2"
ofport              : 197
ofport_request      : []
省略……

看到external_ids这个字段,attached-mac为mac地址,iface-id为port uuid,vm-id为挂载的虚拟机uuid,对比neutron port-show的结果,可以发现两者是一致的

发表回复