前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vpp cli简单介绍

vpp cli简单介绍

作者头像
dpdk-vpp源码解读
发布2023-03-07 17:17:57
6730
发布2023-03-07 17:17:57
举报
文章被收录于专栏:DPDK VPP源码分析DPDK VPP源码分析

cli简介

vpp提供了一套非常方便的cli引擎,无论是用户还是开发人员的角度,在代码调试、构造产品的可维护性方面、及配置下发等等都有使用。 要添加一个新命令,需要注册它的名称、帮助字符串及处理函数。 通过下面的测试代码来说明一下:

cli注册及回调函数

cli注册只需要使用宏VLIB_CLI_COMMAND,但是有一个地方需要注意 test_cli_config_command 需要是全局唯一的,否则会编译报错。

代码语言:javascript
复制
/*简单的回调函数*/
static clib_error_t *
test_cli_config_command_fn (vlib_main_t * vm,
                        unformat_input_t * input,
                        vlib_cli_command_t * cmd)
{
    u8 *name = NULL;

    while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    {
        if (unformat (input, "name %s", &name))
        {
            vlib_cli_output (vm, "name %s",name);
            /*这里需要注意,需要释放内存,否则导致泄漏*/
            vec_free(name);
        }
        else
        {
            return clib_error_return (0, "unknown input `%U'",
                format_unformat_error, input);
        }
    }
  return NULL;
}

VLIB_CLI_COMMAND (test_cli_config_command, static) =
{
    .path = "test cli config",
    .short_help = "test cli config name <string>",
    .function = test_cli_config_command_fn,
    .is_mp_safe = 1,
};

is_mp_safe 这个参数以前没有使用过,可以告诉用户命令行是否多线程安全。 在使用unformat是需要注意了,不如%u %d的时候必须使用int 类型来接收,否则会导致异常。%s 时 ,需要注意内存泄漏问题。

cli 使用

代码语言:javascript
复制
/*命令行测试*/
DBGvpp# test cli config name test
name test
DBGvpp#

vpp对命令行还提供了一些统计信息及安全性

代码语言:javascript
复制
/*可以查询当前命令行是否是线程安全的*/
[18:20:07]root:~$ vppctl show cli mp-safe | grep "test cli config"
test cli config
/*查询命令行使用次数*/
[18:23:31]root:~$ vppctl show cli hit
quit: 2
show cli: 1
test cli config: 1
/*清空cli统计*/
[18:24:27]root:~$ vppctl show cli clear-hit
hit counters cleared...

个人使用举例

下面是在产品中为了查询流表信息及监控资源使用情况,添加的命令行信息。 流表是基于报文五元组做key,value:是线程索引及pool资源池的索引(详细细节就不便多说了)。在查询表象信息及资源使用情况,及bihash的分布情况都非常又用。

代码语言:javascript
复制
/*查询bihash资源分布情况及内存使用情况*/
DBGvpp# show session hashv4 tables detail
Hash table ip4 session table
 /*当前桶的下表,当前桶存储数据个数,是否线性存储*/
[60517]: heap offset 6293776, len 1, refcnt 2, linear 0
/*显示key value*/
    0: Key   :sip[140.249.38.232][80]  dip[172.168.68.30][62018] proto[6]
Value : pool_index[0] thread_index[2]
   /*下面就是内存使用情况,vpp自带的打印格式*/
    1 active elements 1 active buckets
    0 free lists
    0 linear search buckets
    arena: base 7fdccfc00000, next 680000
           used 6815744 b (6 Mbytes) of 536870912 b (512 Mbytes)
/*根据vlaue查询流表信息及状态,*/
DBGvpp# show session table ipv4 index 0 2
------------------------Session info-----------------------------
Session address         : 0x0x7fdcaf5de030
Session ID              : 378114
Start and last time     : 1477.7775  1491.5501
Pool and thread id      : 0  2
Session state           : 4 <established>
Session flag            : 131
Timers handle           : 2048
Packet src address      : 172.168.68.30
       dst address      : 140.249.38.232
       src/dst port     : 62018 80
       protocol         : 6 <TCP>
/*pool 内存池资源使用情况*/       
DBGvpp# show session pool used
Session manager threads num 6:
Id      Max_elts          Mem_base          Free elts         State
1       16384             0x7fdcaf7ef000    16384             Normal
2       16384             0x7fdcaf5de000    16384             Normal
3       16384             0x7fdcaf3cd000    16384             Normal
4       16384             0x7fdcaf1bc000    16384             Normal
5       16384             0x7fdcaefab000    16384             Normal

总结

本文简单介绍了vpp中cli的使用及可能存在问题的地方。并且以自己实际工作的例子举例-产品可维护命令行。通过这些命令行的输出信息,基本上可以定位70%以上的问题。 所以要好好利用cli命令行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DPDK VPP源码分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cli简介
  • cli注册及回调函数
  • cli 使用
  • 个人使用举例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档