ovs-vsctl与ovsdb交互源码分析

Linux version 4.4.0-142-generic
ovs_version: “2.5.0”

在这里插入图片描述
作为一个初学者,从ovs基础命令入手学习源码。本文主要关注ovs-vsctl命令下发配置到ovsdb生效的代码流程。以ovs-vsctl add-port s1 vxlan 为例。

1. 处理命令行并更新transaction

ovs-vsctl的主体代码在utilities/ovs-vsctl.c文件中。
do_vsctl是ovs-vsctl模块的循环主函数,解析处理命令行,并将需要更新的信息同步到ovsdb。

static void
do_vsctl(const char *args, struct ctl_command *commands, size_t n_commands,
         struct ovsdb_idl *idl)
{
	....
	        if (c->syntax->run) {
      		      (c->syntax->run)(&vsctl_ctx.base);
    	     }
	....
	    status = ovsdb_idl_txn_commit_block(txn);
	....
}

static void vsctl_cmd_init(void)注册了vsctl的命令参数选项如show、add-port等。vsctl_commands存储了各命令及回调函数(ctl_command_syntax结构体的run函数指针)等相关信息。因此add-port命令会调用到cmd_add_port函数。

以写端口名为例,ovsrec_port_set_name是ovs在编译后由python生成的代码,这些生成的代码是各个配置动作下发后对对应更新数据库Transaction代码的封装。
txn应该是Transaction的缩写,也就是数据库动作。
在这里插入图片描述

这一过程是将datum的n、key、val信息存到row结构体需要更改的数据中

ovsrec_port_columns_init注册了column的parse和unparse函数,

    c->parse = ovsrec_port_parse_name;
    c->unparse = ovsrec_port_unparse_name;

name字符串由ovsdb_datum_clone调用parse 函数解析到row->new中

ovsdb_idl_txn_commit_block将更新后的txn同步到ovsdb

2. 与ovsdb通信

ovs-vsctl默认使用unix sock与ovsdb通信。

   --db=server
          Sets server as the database server that  ovs-vsctl  contacts  to query or modify 
          configuration.  server may be an OVSDB active or passive  connection  method, as  
          described  in  ovsdb(7).  
          The default is unix:/var/run/openvswitch/db.sock. 

Open vSwitch Database Interface Definition Language (OVSDB IDL).

  • session初始化
    在这里插入图片描述

  • stream初始化过程

在这里插入图片描述
其中stream_lookup_class检查到stream的name是unix。stream先挂接了unix_stream_class然后又挂接了stream_fd_class

  • transaction发送过程
    在这里插入图片描述

菜鸟一枚,才疏学浅,做些笔记仅供参考,不当之处欢迎大家指正。

相关链接:https://www.yuque.com/lishuhuakai/dqbrkg/zq7uud

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值