ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析

2023-05-16

4.6Ops-cli结合ovsdb部分流程及接口分析
Ops中对于ovsdb的应用主要是基于上述的ovsdb的简单用法上的一个扩展和函数封装,现在就其与之前不同的地方做补充说明并就各个函数的使用做相应的说明。
根据前面的ovsdb的数据结构描述可知,在ops-cli中我们主要是以idl来处理server中的ovsdb的信息,这里简单说明下几个结构挂接的关系:
4.6.1 ovsdb_idl_create
Ovsdb_idl结构的创建和ovsdb相关信息的初始化,这里简要说明该函数接口的用途及功能:
1、初始化其class信息,初始化为全局class;
2、初始化session,供后期transaction时的jsonrpc使用;
3、初始化table_by_name,然后为database中的所有table分配内存,然后将这些ovsdb_idl_table信息以table name(table name在全局定义号的ovsdb_idl_table_class中查找)为hash值add到table_by_name中,这些ovsdb_idl_table中包含了各自的ovsdb_idl_table_class信息,它们和ovsdb_idl_table是一一对应的关系;
4、初始化ovsdb_idl_table中的column项(这里column是根据schema定义好的数组,不用再重新分配内存),将每个ovsdb_idl_table的所有的columns以column name为hash索引add到初始化好的column中;
5、初始化table的row的hmap结构,用于存储ovsdb_idl_row各个节点的hash结构,初始时为null;
6、将每个table的idl值初始化为创建的idl结构,idl与其他所有的table的idl值相同;
7、初始化outstanding_txns,用于transaction操作中的hmap,这里每次transaction一次,就会将txn->hmap_node insert到其中一次,而其他操作比如abort、destroy等均会执行remove操作,这里不涉及到table的操作;

使用说明:该函数需要在最开始的初始化的时候进行调用并得到全局的idl结构和初始化database相关的信息,供后续使用,所需的四个参数分别为db.sock的路径、全局初始好的ovsdb_idl_class(自动创建)、ture(这里可以为true或者false,true表示缺省monitor所有的表项,如果为false,那么我们需要再手动添加部分table和column)、true;另外注意该函数还需要配合ovsdb_idl_run使用(源代码中是使用重新创建一个线程来完成的,下面分析该函数的作用);

4.6.2 ovsdb_idl_txn_create
根据前面初始化好的ovsdb_idl将ovsdb_idl_txn结构进行初始化;
1、为ovsdb_idl_txn分配内存并与ovsdb_idl中的ovsdb_idl_txn关联起来,同时ovsdb_idl_txn中的idl也合ovsdb_idl关联起来;
2、初始化ovsdb_idl_txn中的txn_rows结构;该结构主要用于存储ovsdb_idl_row中的txn_node节点;
3、初始化ovsdb_idl_txn中的inserted_rows,这里只有新的row需要insert到database的时候才会重新分配这个ovsdb_idl_txn_insert,后续会根据transaction返回来的reply结果将inserted_rows中的real uuid值赋值为实际的uuid值;

使用说明:该函数实际上是经过cli_do_config_start进行封装的,使用的时候直接使用cli_do_config_start即可,无需使用参数;

4.6.3 ovsdb_idl_txn_commit
完成ovsdb的transaction操作:
1、创建以database name为第一个参数的json array的operations;
2、根据ovsdb_idl_row中的old和new来需要如何向ovsdb server发送transaction操作,并生成相应的op的json格式,并将该op加入到上面的operations中;
3、如果需要update,此时将上面的operations做transaction操作,transaction成功时会将ovsdb_idl_txn的hmap_node节点存放在ovsdb_idl的outstanding_txns中(当每个ovsdb_idl_txn的transaction完成的时候就会完成上述的hmap_insert操作,当destroy或者abort发生时就会将其remove);
4、transaction之后,我们需要做的事情有:将所有的ovsdb_idl_row的txn_node的节点都从ovsdb_idl_txn中移除(如果old是为null的,那么也需要将ovsdb_idl_row的hmap_node节点从ovsdb_idl_table中移除并将其释放掉);释放ovsdb_idl_txn的txn_rows结构,并重新初始化,为后续的transaction来使用;

使用说明:该函数的参数为ovsdb_idl_txn,即4.6.2中创建的结构,在实际的使用中是cli_do_config_finish封装好的函数;

4.6.4 ovsdb_idl_run
完成ovsdb相关的操作,主要是处理ovsdb server回应给client的消息或者它们之间的信息交互,可能引起本地IDL的内容的改变,改变的内容就是和ovsdb server的内容同步的信息:
1、完成idl中的session的连接(为后续的transaction做准备),注意这里会改变idl中的state_seqno,它和session中的seqno做类比,这里如果不同,那么会重新将state_seqno和seqno做同步,并且开始发送get_schema的request;
2、接收ovsdb server的reply,如果为之前的get_schema的reply那么就会对database发送monitor的request(为后续的表项的变化,server通知client和同步本地、server的database提供了可能),如果为update消息,那么就会根据reply中的result对本地的idl中的内容做变更,这里实际上就是对ovsdb_idl_row中的内容做更新,如果之前该row存在则直接做修改,如果不存在则重新创建ovsdb_idl_row结构并重新insert到table中的rows结构中,如果为monitor消息,同样会和上述一样update本地的idl内容;

使用说明:参见4.6.1的使用说明;

4.6.5 ovsrec_相关函数说明
这一部分函数为python自动生成的函数,这一部分函数实际上是由我们自己设计的schema文件根据规则自动生成的和表项操作相关的函数,均是由ovsrec_开头的函数,一般使用较多的有以下几类;
1、ovsrec_
insert:由txn生成对应的ovsdb_idl_row表项并和相应的table关联起来,最后的返回值为我们定义的table相关的结构体,该结构体可作为后续的命令行对对应的表项的操作的参数;
2、ovsrec
set:用于对对应的table中的各项赋值操作,
3、ovsrec_
delete:用于删除对应的table中的各项操作;
4、ovsrec
*_first:用于查找IDL中是否有table项,返回table中的first row,同时也可以和IDL组合查找其余的row;

使用说明:可以参见ops中命令行处理时的代码;

4.6.6 show running设计方案
这一部分在ops中也提及了一个设计方案,现将设计方案做如下描述:
1、为每一个app执行一个install函数install_show_run_config_context;
2、Show running实现的函数vtysh_sh_run_iteratecontextlist,该函数主要就是完成show running的所有操作,主要的操作都是在1中实现的,包括初始化,show running和exit等;

下面为wuheshi记录:

1:写.ovsschema文件时遇到的问题,自己遇到的问题
Columns 下面的row名称不能有- 平杠,单个类型介绍不需要加点,table之间要加点。

2:在vtysh_ovsdb_if.c中进行ovsdb的初始化工作:ovsdb_init – 把相关表和表条目加入到idl缓存中。

3:DEFUN中命令包裹三层就会出现段错误。
如 : [(a|b|c)]
4:linux下打印64位int型 用’%lld”

5:ovsdb/SPEC文件定义了ovsdb的表规范,创建一个db时,需要预先准备好一个schema文件,该文件是一个JSON格式的字符串,定义了db名字,包含的所有表;每张表都包含一个columns的JSON dict,通过这个schema文件(e.g. vswitchd/vswitch.ovsschema)来创建一个db file。因此ovsdb实际是个文件数据库

6:设计表的时候主要考虑
1:设置是否方便
2:取出来比较是否方便
3:是否节约内存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析 的相关文章

随机推荐

  • OpenStack之keystone(T版)

    这里写目录标题 一 概述二 主要功能三 相关概念四 认证流程五 创建虚拟机的过程六 部署一 创建数据库实例和用户二 安装keystone Apache一 配置keystone二 初始化认证服务数据库三 初始化fernet密钥存储库四 配置b
  • OpenStack之Nova(T版)

    目录 一 概述二 Nova系统架构一 API二 Scheduler一 选择计算节点二 调度器类型三 过滤器 三 compute四 conductor五 PlacementAPl六 cell架构 三 部署一 Placement一 创建数据库二
  • 基于FreeRTOS消息缓冲区,实现STM32H7双核之间通信的原理

    FreeRTOS V10 3 1版本已发布 xff0c 官方网站也更新了 xff08 大家可以去看看 xff09 今天给大家分享的是 xff1a 使用FreeRTOS消息缓冲区 xff0c 实现简单的非对称多处理 xff08 AMP xff
  • keil mdk中文乱码,两种解决方法,字体不再难看

    方法一 xff1a 修改成Encode in UTF 8 without signature 我嘞个去 xff01 被字符编码整晕了 xff0c unicode xff0c ANSI xff0c UTF 8 xff0c GB2312 新版m
  • 迪文屏幕T5L平台学习笔记三:定时器使用

    上篇博客介绍了第一个C51程序Demo xff0c 在文本上显示一个 xff08 中英文混合 xff09 字符串 xff0c 这篇博客介绍下定时器2的使用 xff08 定时器0和1类似 xff09 一 先看定时器2的寄存器 在其他章节 xf
  • 使用闲置主机共享资源赚钱教程,收益不知道多少,不知道够不够电费的

    下载网心云的镜像ISO文件 xff0c 使用Rufus将镜像烧到一个U盘中 注意 此操作会清空U盘 xff0c 做完镜像后用U盘启动系统进入安装模式 安装完开机激活就可以了 瞧瞧我的收益 xff0c 1TB硬盘4核2G的工业主机 xff0c
  • 迪文屏幕T5L平台学习笔记七:RS485测试

    由于串口通信距离近 xff0c 且容易受到干扰 xff0c 最近改为RS485通信方案 xff0c 迪文屏幕DMG10600K070 03WTC正好也支持RS485通信 xff0c 把调试过程记录下 1 首先看下数据手册 xff1a 串口5
  • 烧录flash_烧录固件完成后,配置JFLASH让程序自动运行

    问题描述 xff1a 当使用IAR调试Cortex M0 43 产品 xff0c 在IAR MDK调试环境下烧录以后可以正常运行 xff0c 但是如果使用Segger的JFLASH直接烧录固件 bin或者 hex格式二进制文件 后程序并没有
  • 电力网络安全区域概念及划分

    笔者的专栏有很多人询问电力网络安全区的内容 xff0c 加上笔者多年来也一直看得很混乱 xff0c 这次多方收集信息 xff0c 加上自己的理解 xff0c 写成此文 内容可能更符合电网网络结构 xff0c 如有疏漏欢迎到电力知识图谱网站
  • 一文了解DTU、FTU、TTU、RTU的区别

    电力自动化有一堆 某TU xff08 不敢写X 怕被认为新设备 xff09 的设备 xff0c 搞得不做自动化的同学们很晕 xff0c 这里为大家收集下这几者的定义和区别 想要了解更加详细的内容 xff0c 可以点击电力知识图谱网站 xff
  • PIC单片机的配置字总结

    平台为 xff1a MPLAB V8 92 xff0c 这个ID有两个编译选项 xff1a DEBUG和RELEASE xff0c 那么可以根据系统预定宏来自动根据选择模式 xff0c 配置配置字 一 PIC18F系列配置字编写 MUC P
  • USB 2.0 A型、B型、Mini和Micro接口 type-c 定义及封装

    免责声明 xff1a 所有资料均来自互联网 xff0c 如有错误之处 xff0c 本人概不负责 出处 xff1a http blog 163 com wilicedon lee blog static 8158848320101174142
  • 对于嵌入式初学者建议读的书

    刚加入了几个嵌入式群 xff0c 群里提问最多的是怎么能够快速入门 xff1f 对于这个问题 xff0c 一千人个人可能有一千个答案 我也在嵌入式行业里混了几年 xff0c 虽然说技术很水 xff0c 经 验不多 xff0c 但是比起没有入
  • matlab学习笔记二:plot画图怎么设置线条类型和颜色

    出处 xff1a https jingyan baidu com article 48b558e338aaa37f38c09a80 html matlab的绘图功能很强大 xff0c 因此它在科学实验和社会调研中被广泛应用 我们在 绘制图形
  • XModem协议

    出处 xff1a XModem协议 XModem协议介绍 xff1a XModem是一种在串口通信中广泛使用的异步文件传输协议 xff0c 分为XModem和1k XModem协议两种 xff0c 前者使用128字节的数据块 xff0c 后
  • 详解,N沟道MOS管和P沟道MOS管

    出处 xff1a P沟道mos管作为开关的条件 xff08 GS gt GS xff08 TH xff09 xff09 1 P沟道mos管作为开关 xff0c 栅源的阀值为 0 4V xff0c 当栅源的电压差为 0 4V就会使DS导通 x
  • python通过pip安装torch错误及解决办法ERROR: Could not find a version that satisfies the requirement torch

    错误代码 pip install torch 61 61 1 6 0 43 cu101 to rchvision 61 61 0 7 0 43 cu101 f https download pytorch org whl torch sta
  • 智能代码补全工具 tabnine

    安装方法链接 xff1a https www tabnine com install 亲测有效 xff1a tabnine vim Without Vundle Run git clone depth 1 https github com
  • ovsdb <7> OVSDB操作实践及各种机制的分析

    4 2OVSDB操作实践及各种机制的分析 在安装了上述的openvswitch和做了相应的配置之后 xff0c 下面对openvswitch中提供的各种ovsdb的工具 操作方式和工作机制做一些简单的说明 xff1a 1 Ovsdb ser
  • ovsdb <10> Ops-cli结合ovsdb部分流程及接口分析

    4 6Ops cli结合ovsdb部分流程及接口分析 Ops中对于ovsdb的应用主要是基于上述的ovsdb的简单用法上的一个扩展和函数封装 xff0c 现在就其与之前不同的地方做补充说明并就各个函数的使用做相应的说明 根据前面的ovsdb