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;

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值