当前位置: 首页 > news >正文

基金从业培训网站互联网站

基金从业培训网站,互联网站,网站建设图片上传,网页制作素材库属不属于信息管理ZZ FROM: http://www.cnblogs.com/iTsihang/archive/2012/12/05/2783252.html zebra在设计命令格式的时候#xff0c;将命令节点Node和命令Command分开#xff0c;整个命令结构是一个树状的,如图#xff1a; NODEn表示命令节点#xff0c;CMDn表示具体的命令。在zebra的整… ZZ FROM: http://www.cnblogs.com/iTsihang/archive/2012/12/05/2783252.html zebra在设计命令格式的时候将命令节点Node和命令Command分开整个命令结构是一个树状的,如图         NODEn表示命令节点CMDn表示具体的命令。在zebra的整个命令行设计当中zebra用向量的概念将命令和节点连接起来建立起隶属关系。一个全局向量CMDVEC指向整个命令结构CMDVEC的每一个索引值都是一个具体的命令节点如果有的话在每个命令节点的结构中又存在各自的向量cmd_vector该向量将指向隶属于该节点的命令cmd_vector中的每个索引值都是一个具体的命令如果注册的话。于是从最初的CMDVEC向量开始程序就能“顺藤摸瓜“找到任何一个已经注册的命令。比如程序调用某个方法该方法对应的命令是CMD1而该命令的调用是在NODEn这个节点下那么自然而然程序就能锁定CMDVEC—NODEn—CMD1实现一条匹配。   命令的注册过程     zebra要成功注册一个命令需要以下几个步骤1 安装一个节点。如果不需要新的命令节点而使用zebra中自带的节点可省去这个步骤2 写一条命令的实现3 将一条实现了的命令安装到命令节点下。     介绍之前有必要说明一下和命令相关的数据结构。   向量 1 /* struct for vector */ 2 struct _vector 3 { 4 unsigned int max; /* max number of used slot */ 5 unsigned int alloced; /* number of allocated slot */ 6 void **index; /* index to data */ 7 }; 在zebra.h中定义表示一个向量结构。该结构中max表示目前使用的最大slotalloced表示已经分配给该向量的最大slot数max alloced。Index通过索引方式存储value。   命令节点 1 /* Node which has some commands and prompt string and configuration function pointer . */2 3 struct cmd_node 5 {7 /* Node index. */9 enum node_type node; 11 /* Prompt character at vty interface. */ 13 char *prompt; 17 /* Is this nodes configuration goes to vtysh ? */ 19 int vtysh; 23 /* Nodes configuration write function */ 25 int (*func) (struct vty *); 29 /* Vector of this nodes command list. */ 31 vector cmd_vector; 33 }; 该结构在command.h中定义用来表示一个命令节点节点的类型由node_type枚举指出节点的标识字符由prompt表示func表示该节点对应的操作方法该节点下的命令由vector定义的cmd_vector表示。例如在全局配置模式下命令节点的定义可以是 1 struct cmd_node config_node 3 {5 CONFIG_NODE,7 %s(config)# ,9 1 11 };   命令 此外command.h中还有一个重要的结构就是cmd_element结构该结构定义了一条命令的全部信息定义如下 1 /* Structure of command element. */3 struct cmd_element 5 {7 char *string; /* Command specification by string. */9 int (*func) (struct cmd_element *, struct vty *, int, char **); 11 char *doc; /* Documentation of this command. */ 13 int daemon;                 /* Daemon to which this command belong. */ 15 vector strvec; /* Pointing out each description vector. */ 17 int cmdsize; /* Command index count. */ 19 char *config; /* Configuration string */ 21 vector subconfig; /* Sub configuration string */ 23 }; string 描述了命令的实现串比如我要显示某个配置信息“show where are you from“ func 则是实现string的具体方法 doc 是string的解释zebra将string和doc 解析存储由strvec这个向量指向。   下面我们逐步使用zebra。   安装一个命令节点 zebra中安装命令节点的接口void install_node (struct cmd_node *node, int (*func) (struct vty *)) 我们知道整个zebra的框架是由一个向量指向一个节点该节点又存在另一个向量这个向量又有自己的存储结构。从而将整个zebra的命令连接起来起到提纲挈领的作用。zebra中由vector定义了一个全局向量名为cmdvec也就是上文说的CMDVEC。命令节点安装的实质就是将一个cmd_node结构的地址存储到cmdvec中的一个未被使用的slot—index[i]里。 你可以将自己的命令安装在zebra原带的节点下也可以添加自己新的节点我以我的名字命名了一个新的节点。在command.c的73行定义 1 struct cmd_node tsihang_node 3 {5 TSIHANG_NODE,7 %s(tsihang)# ,9 1 11 }; 将TSIHANG_NODE添加到node_type的CONFIG_NODE之后。然后在command.c的3115行使用install_node将这个节点安装到cmdvec中install_node (tsihang_node, NULL);   写一条命令的实现方法 zebra实现命令的方法由command.h中的一个宏来实现 1 /* DEFUN for vty command interafce. */3 #define DEFUN(funcname, cmdname, cmdstr, helpstr) \5 int funcname (struct cmd_element *, struct vty *, int, char **); \7 struct cmd_element cmdname \9 { \ 11 cmdstr, \ 13 funcname, \ 15 helpstr \ 17 }; \ 19 int funcname \ 21 (struct cmd_element *self, struct vty *vty, int argc, char **argv) 这个宏很有意思它表明了一个命令的结构命令描述命令的解释和命令的具体实现方法。编辑command.c文件照着样子写一条命令实现方法。 例如我实现的一个简单方法 1 DEFUN (tsihang_hello, 3 tsihang_hello_cmd, 5 tsihang say hello,7 Greet\n9 Greet to someone\n) 11 { 13 vty_out (vty, Helloyou can do like this %s, VTY_NEWLINE); 15 return CMD_SUCCESS; 17 }   但是这样还是不够的要进入tsihang_node节点还得靠一个触发命令 1 //add by Tsihang for test cmmand3 /* Tsihang command */ 5 DEFUN (tsihang_enable, 7 tsihang_enable_cmd,9 tsihang, 11 Turn on privileged mode command\n) 13 { 15 vty-node TSIHANG_NODE; 17 return CMD_SUCCESS; 19 }   安装命令 命令的安装实质是将一个cmd_element结构存储到cmd_node结构中的成员cmd_vec向量的一个未被使用的slot里。 调用接口 /* Install a command into a node. */ void install_element (enum node_type ntype, struct cmd_element *cmd) 将刚才写好的命令安装到定义的节点下 在command.c中3192行添加 /* 为了进入自定义节点需要安装触发命令 */ install_element(ENABLE_NODE, tsihang_enable_cmd); install_element(TSIHANG_NODE, tsihang_hello_cmd);    编译运行 编译在我的博客http://www.cnblogs.com/iTsihang/archive/2012/11/22/2783249.html  中有介绍。 编译完成后进入zebra目录执行./zebra然后远程登录 telnet 127.0.0.1 2061 端口zebra的密码都在zebra.conf文件中登录后可使用。 进到tsihang节点下运行命令: 1 Router(tsihang)#tsihang say hello 3 Hello, you can do like this 5 Router(tsihang)# 本测试例子下载http://files.cnblogs.com/iTsihang/zebra-0.95a-t.tar.zip 转载于:https://www.cnblogs.com/iplus/archive/2013/01/28/4467338.html
http://www.pierceye.com/news/404461/

相关文章:

  • 做韦恩图网站课程分销平台
  • html5网站建设中企业整站推广
  • 织梦网站打开速度慢做抢单软件的网站
  • 51单片机可以做网站怎么建设游戏试玩平台网站
  • 汕头网站建设方案维护wordpress百度熊掌
  • 牛街网站建设产品vi设计都包括什么
  • 网站需要多大宽带网站发展的方向
  • 陈光锋网站运营推广新动向故城建设银行网站
  • 备案后网站可以改名吗临颖网站建设
  • 临沭县建设局官方网站怎样做外贸网站推广
  • 手机网站支付一个简单的网页代码带图片
  • 向公司申请请做网站广州网站推广教程
  • 用QQ群做网站排名交互式网站app
  • 正规免费发布信息网站国外网站界面
  • 浏览国外网站 dns网店运营推广方案
  • wordpress弹幕视频插件广西seo搜索引擎优化
  • 网站开发与维护工资多少网络公司排名兴田德润
  • wordpress主题ux壹搜网站建设优化排名
  • 试剂产品商城网站建设杭州网站现场备案
  • 高唐企业建网站服务商wordpress google
  • 重庆网站开发商城最近新闻有哪些
  • 电商网站设计线路图有哪些网络推广平台
  • 海门市建设局网站科技与应用
  • 北京做网站s免费做app网站有哪些
  • 免费制作网页的网站网络营销师报名官网
  • 长沙网站制作好公司网络服务模型
  • 网站开发的时间流程微信平台可以做微网站吗
  • 镇江网站seo天猫网店代运营
  • 吴江城乡住房和城乡建设局网站怎么给别人做网站优化
  • 名师工作室网站建设 意义网站图片上浮动文字