nova compute 如何创建 ovs 端口

最近搞 qemu 使用 ovs internal port 出现了点问题,但是 neutron ovn 好像默认就是 internal port,所以这里想看下 nova compute 到底使用的是 ovs internal port 还是 linux tap 设备

这两个场景都在这个函数 _nw_info_build_network 中

设备名应该统一为 tap<11 位 port id>

1. 上面这个方法仅在 _build_network_info_model 使用

Return list of ordered VIFs attached to instance

返回需要插入到虚拟机中的有序的虚拟网卡列表

2. 上面这个方法仅在 _get_instance_nw_info 有调用

3. 上面这个方法在这几个方法中调用

update_instance_cache_with_nw_info( # 存一下数据库,忽略 get_instance_nw_info( # 主要关注 通用场景 add_fixed_ip_to_instance( # 特别场景,忽略 remove_fixed_ip_from_instance(

4. 仅需要关注 get_instance_nw_info 在最通用的 allocate_for_instance 方法中调用

5. 仅需要关注 allocate_for_instance 在 _attach_interface 中的使用

(另一个是远程调用 neutron 分配 ip)

只需要关注 ovs vsctl 相关的 driver 中的 attach_interface 实现即可

6. 只能是 libvirt 的实现

7. 结论: 只能是 linux tap 设备

python 复制代码
    def plug_tap(self, instance, vif):
        """Plug a VIF_TYPE_TAP virtual interface."""
        dev = self.get_vif_devname(vif)
        mac = vif['details'].get(network_model.VIF_DETAILS_TAP_MAC_ADDRESS)
        image_meta = instance.image_meta
        vif_model = self.get_vif_model(image_meta=image_meta)
        # TODO(ganso): explore whether multiqueue works for other vif models
        # that go through this code path.
        multiqueue = False
        if vif_model == network_model.VIF_MODEL_VIRTIO:
            multiqueue = hardware.get_vif_multiqueue_constraint(
                instance.flavor, image_meta)
        nova.privsep.linux_net.create_tap_dev(dev, mac, multiqueue=multiqueue)
        network = vif.get('network')
        mtu = network.get_meta('mtu') if network else None
        nova.privsep.linux_net.set_device_mtu(dev, mtu)

@nova.privsep.sys_admin_pctxt.entrypoint
def create_tap_dev(dev, mac_address=None, multiqueue=False):
    if not device_exists(dev):
        try:
            # First, try with 'ip'
            cmd = ('ip', 'tuntap', 'add', dev, 'mode', 'tap')
            if multiqueue:
                cmd = cmd + ('multi_queue', )
            processutils.execute(*cmd, check_exit_code=[0, 2, 254])
        except processutils.ProcessExecutionError:
            if multiqueue:
                LOG.warning(
                    'Failed to create a tap device with ip tuntap. '
                    'tunctl does not support creation of multi-queue '
                    'enabled devices, skipping fallback.')
                raise

            # Second option: tunctl
            processutils.execute('tunctl', '-b', '-t', dev)

        if mac_address:
            _set_device_macaddr_inner(dev, mac_address)
        _set_device_enabled_inner(dev)

历史参考

我之前的笔记确实也是:port 绑定给虚拟机,即 compute livbvirt attatch port 给 br-int 实际上是调用 ovs-vsctl add-port br-int tapxxx: 参考 www.jianshu.com/p/c1c684c5b...

相关推荐
李慕婉学姐28 分钟前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
tb_first34 分钟前
SSM速通2
java·javascript·后端
一路向北⁢42 分钟前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南1 小时前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端
爱吃山竹的大肚肚1 小时前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
毕设源码-邱学长3 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
咖啡啡不加糖4 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
gAlAxy...4 小时前
SpringBoot Servlet 容器全解析:嵌入式配置与外置容器部署
spring boot·后端·servlet
BYSJMG5 小时前
计算机毕业设计选题推荐:基于Hadoop的城市交通数据可视化系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
BYSJMG5 小时前
Python毕业设计选题推荐:基于大数据的美食数据分析与可视化系统实战
大数据·vue.js·后端·python·数据分析·课程设计·美食