欢迎来到皮皮网官网

【溪谷联运源码sdk】【redis过期key删除源码】【l浏览网站拍照源码】vsctl源码

时间:2024-12-23 04:24:30 来源:有关新闻的源码

1.基于openstack网络模式的vlan分析
2.OVS核心组件内容以及编译安装
3.OVS 总体架构、源码结构及数据流程全面解析
4.OvS-vsctl与ovsdb交互源码分析

vsctl源码

基于openstack网络模式的vlan分析

       OpenStack概念

       OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目。、

       OpenStack是溪谷联运源码sdk一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过家企业及位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。

openstack neutron中定义了四种网络模式:

       # tenant_network_type = local

       # tenant_network_type = vlan

       # Example: tenant_network_type = gre

       # Example: tenant_network_type = vxlan

       本文主要以vlan为例,并结合local来详细的分析下openstack的网络模式。

1. local模式

       此模式主要用来做测试,只能做单节点的部署(all-in-one),这是因为此网络模式下流量并不能通过真实的物理网卡流出,即neutron的integration bridge并没有与真实的物理网卡做mapping,只能保证同一主机上的vm是连通的,具体参见RDO和neutron的redis过期key删除源码配置文件。

(1)RDO配置文件(answer.conf)

       主要看下面红色的配置项,默认为空。

       复制代码

           

       代码如下:

       CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS

       openswitch默认的网桥的映射到哪,即br-int映射到哪。 正式由于br-int没有映射到任何bridge或interface,所以只能br-int上的虚拟机之间是连通的。

       复制代码

           

       代码如下:

       CONFIG_NEUTRON_OVS_BRIDGE_IFACES

       流量最后从哪块物理网卡流出配置项

       复制代码

           

       代码如下:

       # Type of network to allocate for tenant networks (eg. vlan, local,

           # gre)

           CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=local

           # A comma separated list of VLAN ranges for the Neutron openvswitch

           # plugin (eg. physnet1:1:,physnet2,physnet3::)

           CONFIG_NEUTRON_OVS_VLAN_RANGES=

           # A comma separated list of bridge mappings for the Neutron

           # openvswitch plugin (eg. physnet1:br-eth1,physnet2:br-eth2,physnet3

           # :br-eth3)

           CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=

           # A comma separated list of colon-separated OVS bridge:interface

           # pairs. The interface will be added to the associated bridge.

           CONFIG_NEUTRON_OVS_BRIDGE_IFACES=

       (2)neutron配置文件(/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini)

       复制代码

           

       代码如下:

       [ovs]

           # (StrOpt) Type of network to allocate for tenant networks. The

           # default value 'local' is useful only for single-box testing and

           # provides no connectivity between hosts. You MUST either change this

           # to 'vlan' and configure network_vlan_ranges below or change this to

           # 'gre' or 'vxlan' and configure tunnel_id_ranges below in order for

           # tenant networks to provide connectivity between hosts. Set to 'none'

           # to disable creation of tenant networks.

           #

           tenant_network_type = local

       RDO会根据answer.conf中local的配置将neutron中open vswitch配置文件中配置为local

2. vlan模式

       大家对vlan可能比较熟悉,就不再赘述,直接看RDO和neutron的配置文件。

(1)RDO配置文件

       复制代码

           

       代码如下:

       # Type of network to allocate for tenant networks (eg. vlan, local,

           # gre)

           CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=vlan //指定网络模式为vlan

           # A comma separated list of VLAN ranges for the Neutron openvswitch

           # plugin (eg. physnet1:1:,physnet2,physnet3::)

           CONFIG_NEUTRON_OVS_VLAN_RANGES=physnet1:: //设置vlan ID value为~

           # A comma separated list of bridge mappings for the Neutron

           # openvswitch plugin (eg. physnet1:br-eth1,physnet2:br-eth2,physnet3

           # :br-eth3)

           CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1 //设置将br-int映射到桥br-eth1(会自动创建phy-br-eth1和int-br-eth1来连接br-int和br-eth1)

           # A comma separated list of colon-separated OVS bridge:interface

           # pairs. The interface will be added to the associated bridge.

       CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-eth1:eth1 //设置eth0桥接到br-eth1上,即最后的网络流量从eth1流出 (会自动执行ovs-vsctl add br-eth1 eth1)

       此配置描述的网桥与网桥之间,网桥与网卡之间的映射和连接关系具体可结合 《图1 vlan模式下计算节点的网络设备拓扑结构图》和 《图2 vlan模式下网络节点的网络设备拓扑结构图 》来理解。

       思考:很多同学可能会碰到一场景:物理机只有一块网卡,或有两块网卡但只有一块网卡连接有网线

       此时,可以做如下配置

(2)单网卡:

       CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth0 //设置将br-int映射到桥br-eth

       复制代码

           

       代码如下:

       # A comma separated list of colon-separated OVS bridge:interface

           # pairs. The interface will be added to the associated bridge

           CONFIG_NEUTRON_OVS_BRIDGE_IFACES= //配置为空

       这个配置的含义是将br-int映射到br-eth0,但是br-eth0并没有与真正的物理网卡绑定,这就需要你事先在所有的计算节点(或网络节点)上事先创建好br-eth0桥,并将eth0添加到br-eth0上,l浏览网站拍照源码然后在br-eth0上配置好ip,那么RDO在安装的时候,只要建立好br-int与br-eth0之间的连接,整个网络就通了。

       此时如果网络节点也是单网卡的话,可能就不能使用float ip的功能了。

       (3)双网卡,单网线

       复制代码

           

       代码如下:

       CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-eth1 //设置将br-int映射到桥br-eth1

           /pp# A comma separated list of colon-separated OVS bridge:interface

           /pp# pairs. The interface will be added to the associated bridge.

           /ppCONFIG_NEUTRON_OVS_BRIDGE_IFACES=eth1 //配置为空

       还是默认都配置到eth1上,然后通过iptables将eth1的流量forward到eth0(没有试验过,不确定是否可行)

3. vlan网络模式详解

           图1 vlan模式下计算节点的网络设备拓扑结构图

       首先来分析下vlan网络模式下,计算节点上虚拟网络设备的拓扑结构。

(1)qbrXXX 等设备

       前面已经讲过,主要是因为不能再tap设备vnet0上配置network ACL rules而增加的

(2)qvbXXX/qvoXXX等设备

       这是一对veth pair devices,用来连接bridge device和switch,从名字猜测下:q-quantum, v-veth, b-bridge, o-open vswitch(quantum年代的遗留)。

(3) int-br-eth1和phy-br-eth1

       这也是一对veth pair devices,用来连接br-int和br-eth1, 另外,vlan ID的andlua源码打包教程转化也是在这执行的,比如从int-br-eth1进来的packets,其vlan id=会被转化成1,同理,从phy-br-eth1出去的packets,其vlan id会从1转化成

(4)br-eth1和eth1

       packets要想进入physical network最后还得到真正的物理网卡eth1,所以add eth1 to br-eth1上,整个链路才完全打通

           图2 vlan模式下网络节点的网络设备拓扑结构图

       网络节点与计算节点相比,就是多了external network,L3 agent和dhcp agent。

(1)network namespace

       每个L3 router对应一个private network,但是怎么保证每个private的ip address可以overlapping而又不相互影响呢,这就利用了linux kernel的network namespace

       (2)qr-YYY和qg-VVV等设备 (q-quantum, r-router, g-gateway)

       qr-YYY获得了一个internal的ip,qg-VVV是一个external的ip,通过iptables rules进行NAT映射。

       思考:phy-br-ex和int-br-ex是干啥的?

       坚持"所有packets必须经过物理的线路才能通"的思想,虽然 qr-YYY和qg-VVV之间建立的NAT的映射,归根到底还得通过一条物理链路,那么phy-br-ex和int-br-ex就建立了这条物理链路。云注入网页源码

OVS核心组件内容以及编译安装

       Open vSwitch(OVS)作为开源虚拟交换机,提供灵活、可编程的网络基础设施管理能力。其核心组件包括ovs-vswitchd、ovsdb-server、ovs-vsctl、ovs-ofctl和ovs-appctl。

       ovs-vswitchd为核心交换机进程,负责数据包转发与流量管理,支持多种协议与虚拟化平台集成。ovsdb-server作为数据库服务器,存储网络配置信息,为ovs-vswitchd等组件提供配置获取与更新服务。ovs-vsctl命令行工具用于管理网络配置信息,ovs-ofctl提供OpenFlow控制与流表管理功能,ovs-appctl用于管理运行状态与性能指标。

       在进行OVS的编译安装时,首先从官网下载最新源码包或使用命令下载。安装依赖库,执行编译与安装命令,初始化ovs数据库,配置启动服务即可完成。安装后需进行数据库初始化,创建目录并加载数据库文件,启动ovsdb-server。配置与启动ovs-vswitchd组件。

       此外,OVS组件提供了多种高级选项与命令行参数以满足不同需求,如ovs-appctl提供输出格式、调试模式与性能监测功能。在生产环境中使用时,需谨慎操作,只允许受信任的管理员进行管理。

OVS 总体架构、源码结构及数据流程全面解析

       OVS 是一款基于SDN理念的虚拟交换机,它在数据中心的虚拟网络中发挥着关键作用。其核心架构由控制面和数据面组成,控制面通过OpenFlow协议管理交换策略,数据面则负责实际的数据包交换。OVS的整体架构可以细分为管理面、数据面和控制面,每个部分都有特定的功能和工具以提升用户体验。

       管理面主要包括OVS提供的各种工具,如ovs-ofctl用于OpenFlow交换机的监控和管理,ovs-dpctl用于配置和管理内核模块的datapath,ovs-vsctl负责ovs-vswitchd的配置和ovsdb-server的数据库操作,ovs-appctl则集合了这些工具的功能。这些工具让用户能方便地控制底层模块。

       源码结构方面,OVS的数据交换逻辑由vswitchd和可选的datapath实现,ovsdb存储配置信息,控制面使用OVN,提供兼容性和性能。OVS的分层结构包括vswitchd与ovsdb通信,ofproto处理OpenFlow通信,dpif进行流表操作,以及netdev抽象网络设备并支持不同平台和隧道类型。

       数据转发流程中,ovs首先解析数据包信息,然后根据流表决定是否直接转发。若未命中,会将问题上交给用户态的ovs-vswitchd,进一步处理或通过OpenFlow通知控制器。ovs-vswitchd在必要时更新流表后,再将数据包返回给内核态的datapath进行转发。

       总的来说,OVS通过其强大的管理工具和精细的架构设计,简化了用户对虚拟网络的操控,确保了高效的数据传输和策略执行。

OvS-vsctl与ovsdb交互源码分析

       本文深入解析了ovs-vsctl与ovsdb交互的源码细节,旨在帮助初学者更好地理解配置过程。具体以ovs-vsctl add-port s1 vxlan为例,揭示了其在ovs基础命令框架下的执行流程。

       首先,处理命令行并更新事务。主体代码位于utilities/ovs-vsctl.c文件中,其主函数do_vsctl负责解析命令行,并将需要更新的信息同步到ovsdb。vsctl_cmd_init函数注册了vsctl的命令参数选项,并存储了各命令及回调函数等相关信息。例如,add-port命令的执行会调用cmd_add_port函数。

       在执行命令过程中,ovs利用生成的python代码(如ovsrec_port_set_name)对数据库事务(txn)进行封装。该过程涉及将datum的n、key、val信息存入row结构体中,以便后续更新。ovsrec_port_columns_init注册了column的解析和反解析函数,name字符串通过ovsdb_datum_clone调用parse函数解析到row->new中。最后,ovsdb_idl_txn_commit_block将更新后的txn同步到ovsdb。

       接着,ovs-vsctl通过默认的unix sock与ovsdb通信。Open vSwitch Database Interface Definition Language (OVSDB IDL) 描述了通信接口。stream_lookup_class用于检查stream的name为unix。stream在挂接了unix_stream_class后,进一步挂接stream_fd_class。

       对于深入学习和交流,相关资源和链接提供了一定的指导,如yuque.com/lishuhuakai/d...等,涵盖了dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/0vS/TRex/dpvs公开课程。此外,dpdk/spdk/网络协议栈的学习资料、教学视频和学习路线图可在特定学习交流群中找到,为开发者提供了丰富的学习资源和社区支持。

copyright © 2016 powered by 皮皮网   sitemap