zebra 中分析DEFUN宏方法

轉載於:

https://blog.csdn.net/u010069213/article/details/18570355

 

zebra實現命令的方法是由command.h中的一個宏來實現的,他的方法DEFUN定義如下

#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
 
{
 
  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;

}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章