zebra 命令定义的代码分析(DEFUN)

来源:互联网 发布:40本网络禁书txt 编辑:程序博客网 时间:2024/05/13 23:02

zebra实现命令的方法是由command.h中的一个宏来实现的

#define DEFUN(funcname,cmdname,cmdstr,helpstr)\int funcname(struct cmd_element *,struct vty*,int ,char **);\struct cmd_element cmdname=\{\cmdstr,\funcname,\helpstr\};\int funcname\(struct cmd_element *self,struct vty *vty,int argc,char **argv)


funcname:函数名称;

cmdname:注册的命令名称;

cmdstr: 实在vtydsh终端下输入的命令字符串,

helpstr:帮助信息,当输入“?”时显示

 

在此宏中涉及到的结构体如下:

struct cmd_element

struct cmd_element{  const char *string;                  /* Command specification by string. */  int (*func) (struct cmd_element *, struct vty *, int, const char *[]);  const char *doc;                    /* Documentation of this command. */  int daemon;                   /* Daemon to which this command belong. */  vector strvec;           /* Pointing out each description vector. */  unsigned int cmdsize;              /* Command index count. */  char *config;                   /* Configuration string */  vector subconfig;            /* Sub configuration string */  u_char attr;                     /* Command attributes */};


还有一个结构体struct vty 定义在vty.h中;

假设我们有下面的宏定义

DEFUN(vtysh_show_hello,vty_show_hello_cmd,"show hello","hello1\n""hello2\n"){printf("hello\n");return CMD_SUCCESS;}


根据DEFFUN宏定义,可展开如下:

int vtysh_show_hello(struct cmd_element*,struct vty*,int,char **);

struct cmd_element vty_show_hello_cmd=

{

   "show hello",

    "vtysh_show_hello",

    "hello1\nhello2\n"

};

int vtysh_show_hello(struct cmd_element *self,struct vty *vty,int argc,char **argv)

{

     printf("hello\n");

     return CMD_SUCCESS;

}

 

 

0 0
原创粉丝点击