- DEFPY
- DEFUN
- 对比
- DEFUN和DEFPY区别
定义
#define DEFPY(funcname, cmdname, cmdstr, helpstr) DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0) funcdecl_##funcname
cmdname 结构体定义、初始化
#define DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum)
static struct cmd_element cmdname = {
.string = cmdstr,
.func = funcname,
.doc = helpstr,
.attr = attrs,
.daemon = dnum,
.name = #cmdname,
};
DEFUN
#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)
funcname 声明
#define DEFUN_CMD_FUNC_DECL(funcname) static int funcname(const struct cmd_element *, struct vty *, int, struct cmd_token *[]);
cmdname 结构体定义、初始化
#define DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum)
static struct cmd_element cmdname = {
.string = cmdstr,
.func = funcname,
.doc = helpstr,
.attr = attrs,
.daemon = dnum,
.name = #cmdname,
};
#define DEFUN_CMD_FUNC_TEXT(funcname) static int funcname(const struct cmd_element *self __attribute__((unused)), struct vty *vty __attribute__((unused)), int argc __attribute__((unused)), struct cmd_token *argv[] __attribute__((unused)))对比 DEFUN和DEFPY区别
DEFUN 和 DEFPY 都可以定义命令。DEFPY(...) 是 DEFUN() 的增强版,由python/clidef.py进行预处理。python脚本解析命令定义字符串,提取变量名称和类型,并生成一个C语言包装函数,解析变量并传递给它们。这意味着在CLI函数体中,你将收到具有适当类型的额外参数。
参考资料:
FRRouting Developer’s Guide



