• ovs-vswitchd的启动分析


    ovs-vswitchd的启动分析(无修改源码)

    (一)主要数据结构和概念了解

    1.概念

    在 OVS 中, 有几个非常重要的概念:

    Bridge: Bridge 代表一个以太网交换机(Switch),一个主机中可以创建一个或者多个 Bridge 设备。
    
    Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge。
    
    Interface: 连接到 Port 的网络接口设备。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 是一对多的关系。

    当我们创建了一个交换机(网桥)以后,此时网络功能不受影响,但是会产生一个虚拟网卡,名字就是brname,之所以会产生一个虚拟网卡,是为了实现接下来的网桥(交换机)功能。

    有了这个交换机以后,我还需要为这个交换机增加端口(port),一个端口,就是一个物理网卡,当网卡加入到这个交换机之后,其工作方式就和普通交换机的一个端口的工作方式类似了

    这里要特别注意,网卡加入网桥以后,要按照网桥的工作标准工作,那么加入的一个端口就必须是以混杂模式工作,工作在链路层,处理2层的帧,所以这个port就不需要配置IP了。(你没见过哪个交换的端口有IP的吧)

    那么接下来你可能会问,通常的交换机不都是有一个管理接口,可以telnet到交换机上进行配置吧,那么在OVS中创建的虚拟交换机有木有这种呢,有的!上面既然创建交换机brname的时候产生了一个虚拟网口brname,那么,你给这个虚拟网卡配置了IP以后,就相当于给交换机的管理接口配置了IP,此时一个正常的虚拟交换机就搞定了。

    2.数据结构

    在ofproto-provider.h中注释里是这样说的。

    这里定义了四类数据结构:

    Struct ofproto表示一个交换机
    
    Struct ofport表示交换机上的一个端口
    
    Struct rule表示交换机上的一条flow规则
    
    Struct ofgroup表示一个flow规则组

    (二)main主函数分析

    在文件openvswitch-2.11.4/vswitchd/ovs-vswitchd.c中!

    Openvswitch主要管理两种类型的设备,一个是创建的拟网桥,一个是连接到虚拟网桥上的设备

    int
    main(int argc, char *argv[])
    {
        ...   
        线程开启、网桥初始化等等
        ...
    
        while (!exiting) {
            memory_run();
            if (memory_should_report()) {
                struct simap usage;
    
                simap_init(&usage);
                bridge_get_memory_usage(&usage);
                memory_report(&usage);
                simap_destroy(&usage);
            }
            bridge_run();  //其中bridge_run就是初始化数据库中已经创建的虚拟网桥。
            unixctl_server_run(unixctl);
            netdev_run();  //在内核中添加虚拟网卡
    
            memory_wait();
            bridge_wait();
            unixctl_server_wait(unixctl);
            netdev_wait();
            if (exiting) {
                poll_immediate_wake();
            }
            poll_block();
            if (should_service_stop()) {
                exiting = true;
            }
        }
        
        ...
        退出和销毁操作
        ...
    
        return 0;
    }

  • 相关阅读:
    Ant design table实现单选和点击行选中
    汽车 Automotive > SOME/IP VS DDS调研和未来方向
    基于SqlSugar的开发框架循序渐进介绍(29)-- 快速构建系统参数管理界面-Vue3+ElementPlus
    vue里面使用EventBus(事件总线)
    应用开发平台业务支撑功能——集成阿里EasyExcel组件实现Excel导入导出功能
    AI绘画想生成好看的图,这些技巧不得不掌握
    【Leetcode每日一题:1662.检查俩个字符串数组是否相等~~~遍历+模拟+StringBuilder】
    HIDL 原理及使用详解
    Linux用户和权限
    Three.js入门详解
  • 原文地址:https://blog.csdn.net/lingshengxiyou/article/details/127972612