对quagga(zebra)的cmd声明宏的学习

本文探讨了开源软件quagga中CMD宏的使用,包括DEFUN、DEFSH和DEFUNSH等,解析了它们如何创建命令结构和函数声明。通过实例展示了宏的预处理效果,并解释了命令结构体如何挂在不同视图节点下,以及install_element函数的作用。对于理解quagga的代码结构和命令处理机制有一定帮助。
摘要由CSDN通过智能技术生成

之前一直在看quagga的程序,看到里面的宏的声明神乎其神,通过宏的组合一次性形成多个对象,十分简便。但是也有部分地方看不懂,最终经过请教和提问和自己的尝试才理解,在这里做个小小的总结。

首先,quagga中cmd宏的全貌:

/* DEFUN for vty command interafce. Little bit hacky ;-). */
#define DEFUN(funcname, cmdname, cmdstr, helpstr) \
  DEFUN_CMD_FUNC_DECL(funcname) \
  DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) \
  DEFUN_CMD_FUNC_TEXT(funcname)

/* DEFSH for vtysh. */
#define DEFSH(daemon, cmdname, cmdstr, helpstr) \
  DEFUN_CMD_ELEMENT(NULL, cmdname, cmdstr, helpstr, 0, daemon) \

/* DEFUN + DEFSH */
#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \
  DEFUN_CMD_FUNC_DECL(funcname) \
  DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon) \
  DEFUN_CMD_FUNC_TEXT(funcname)

DEFUN是最常用的宏,它用作直接定义命令结构和命令执行的函数;DEFSH是在VTYSH中使用的宏,它只定义命令结构,而实现的话是通过将命令传到模块,有模块中相应定义的DEFUN中定义的函数实现;DEFUNSH则是二者的组合。


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值