1. 基本流程
这个的主要流程比较简单,直接通过代码来看。
config acl add table
的命令处理入口:
基于上述代码分析cli命令与redis数据库的交互过程实际上就只有两个步骤:
命令行输入config acl add ...
命令,处理入口位于src/sonic-utilities/config/main.py:table()
:
- 解析命令行参数
- 连接config_db数据库,向config_db的acl_table表中写入数据,索引为:ACL_TABLE|table_name – 这个过程不会对参数信息做任何检查与验证
创建的ACL_TABLE表在CONFIG_DB中,表信息如下:
在ACL_TABLE表中只有四个字段:type、policy_desc、ports、stage
1.2 函数调用
下图是从src/sonic-utilities/config/main.py:table()
开始的函数调用,调用过程比较长,下面只分析一些主要部分
2. 命令解析
解析从命令获取的参数,并且构建成字典格式:
- table_type不做任何检查,直接写入字典
- description只做判空检查,默认为table_name
- ports只做判空检查,默认为所有的ports – 从config_db的port表中获取所有ports
- stage只做判空检查,默认为ingress
- 最终字典形式为:
table_info{"type":"","policy_desc":"","ports":"","stage":""}
- table_name: 必要的参数
- table_type: 必要的参数