首页 > 代码库 > quagga源码分析--通用库command
quagga源码分析--通用库command
quagga是一个完整又成熟的系统,作为一个路由器软件,自然要提供人机接口。
quagga提供snmp管理接口,而且,自然就会有对应的命令行管理格式,当然一般路由软件不会提供界面形式的,也许有webui,然而quagga并没有。
我们要看的就是这个命令行处理的代码 command。
接触过类似命令行的朋友肯定有一点点好奇吧,那么数量庞大的命令和参数输入,还可以提供提示和自动补齐,这肯定不是一件很简单的事情。
下面是一个配置示例:
1 !2 interface bge03 ip ospf authentication message-digest4 ip ospf message-digest-key 1 md5 ABCDEFGHIJK5 !6 router ospf7 network 192.168.0.0/16 area 0.0.0.18 area 0.0.0.1 authentication message-digest
哦哦,看到这样的命令,实在是头疼。
嗯,不废话了,我们还是看代码吧,看command是怎么处理这令人头疼的命令行吧:
1 void cmd_init(int terminal) { 2 ...... 3 4 cmdvec = vector_init(VECTOR_MIN_SIZE); 5 6 /* Install top nodes. */ 7 install_node(&view_node, NULL); 8 install_node(&enable_node, NULL); 9 10 /* Each node‘s basic commands. */11 install_element(VIEW_NODE, &show_version_cmd);12 13 .....14 }
这个就是命令行初始化的简化版本。
quagg使用了非常常见的树形列表来描述所有的命令, cmdvec包含所有的顶层命令节点,节点下面是当前节点的所包含的命令元素,而且树的depth=3.
1 struct cmd_node 2 { 3 /* Node index. */ 4 enum node_type node; 5 6 /* Prompt character at vty interface. */ 7 const char *prompt; 8 9 /* Is this node‘s configuration goes to vtysh ? */10 int vtysh;11 12 /* Node‘s configuration write function */13 int (*func) (struct vty *);14 15 /* Vector of this node‘s command list. */16 vector cmd_vector; 17 };
quagga源码分析--通用库command
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。