网站大量收购闲置独家精品文档,联系QQ:2885784924

zebra命令存储原理.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
zebra命令存储原理

zebra命令存储原理和使用方法 Zebra命令介绍zebra在设计命令格式时,将命令节点NODE和命令COMMAND分开,整个命令结构是一个树状,如图NODEn表示命令节点,CMDn表示具体命令,在zebra的整个命令行设计当中,zebra用向量的概念将命令和节点连接起来,一个全局向量CMDVEC指向整个命令结构,CMDVEC的每个索引值都是一个具体的命令节点,在每个命令节点的结构中又存在各自的命令向量cmdvector,该向量指向隶属于该节点的命令,cmd_vector终端额每个索引值都是一个具体的命令。程序索引顺序为CMDVEC-NODEn-CMDn。二、命令的注册过程zebra要成功注册一个命令,需要以下几个步骤:(1)安装一个新节点(如无需安装可省略这步)(2)写一条命令的实现(3)将一条命令挂到节点下三、zebra命令相关结构体介绍1. struct vector该节点在zebra.h中定义,表示一个向量结构,在该结构中,max表示目前使用的最大slot,alloced 表示被分配到的slot,max=alloced,index通过索引方式。存储value.2. struct cmd_node该结构在command.h中定义,用来表示一个命令节点,节点的类型由node_type枚举指出,节点的标识字符由prompt表示,func表示该节点对应的操作方法。该节点下的命令由vector定义的cmd_voctor表示,例如,在全局配置模式下,命令节点的定义可以是3. cmd_element此外,command.h中还定义了一个重要的结构,就是cmd_element结构,该结构定义了一条命令的全部信息,定义如下string描述了命令的实现串,比如我们要显示摸个配置信息“show where you are from”;func 是实现string的具体方法;doc是string的解释;zebra将string和doc解析存储,由strvec这个向量指向。四、 使用zebra安装命令1. 节点创建你可以将自己的命令安装在zebra原带的节点下,也可以添加自己新的节点,我以我的名字命名了一个新的节点。在command.c的81行定义:2. 将MENGER_NODE添加到node_type中在本例中,加在command.h的77行,如下图所示3.用install_node将这个节点安装到cmdvec中安装命令节点的接口函数: void install_node(struct cmd_node *node, int(*func)(struct vty *)) { vector_set_index(cmdvec, node-node, node);node-func = func;node-cmd_vector = vector_init(VECTOR_MIN_SIZE); } 在本例中需加在command.c文件的void cmd_init(int terminal)函数中,如下图4. 编写命令zebtas实现命令的方法由command.h中的一个宏来实现funcname:函数名称;cmdname:注册的命令名称;cmdstr: 实在vtydsh终端下输入的命令字符串;helpstr:帮助信息,当输入“?”时显示;其中结构体struct vty 在vty.h中定义;例如我在command.c 的109行实现的一个简单方法:?根据DEFUN宏定义,可展开如下5 编写menger_node节点的触发命令在command.c文件中编写6. 安装命令命令安装的实质是将一个cmd_element结构存储到cmd_node结构中的成员cmd_vec向量的一个未被使用的slot里。调用接口:void install_element(enum node_type, struct cmd_element *cmd);将刚才写好的命令安装到定义的节点下的步骤如下:6.1安装触发节点触发节点:install_element(ENABLE_NODE,menger_enable_cmd);安装如下安装在command.c文件中的void cmd_init(int terminal)函数中6.2安装自定义节点自定义节点:install_element(MENGER_NODE,menger_hello_cmd);安装如下也是安装在command.c文件中的void cmd_init(int terminal)函数中五 编译结果

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档