From 7f1ecd9eb43d49299660a31cef8f6fa8d78023d8 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Sat, 15 Aug 2020 22:16:30 +0700 Subject: vty: add program specific attributes to VTY commands Change-Id: I2c6c7b317b2b28ce70784c0cabd1b913e721be02 Related: SYS#4937 --- TODO-RELEASE | 2 ++ include/osmocom/vty/command.h | 29 ++++++++++++++++++++++++++++- include/osmocom/vty/vty.h | 4 ++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/TODO-RELEASE b/TODO-RELEASE index 3c2a15b8..7699aff3 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -8,3 +8,5 @@ # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line libosmogsm new API gsm0808_create_sapi_reject_cause() with cause argument +libosmovty ABI change struct cmd_element: add a field for program specific attributes +libosmovty ABI change struct vty_app_info: optional program specific attributes description diff --git a/include/osmocom/vty/command.h b/include/osmocom/vty/command.h index da8d202f..47d2e5f3 100644 --- a/include/osmocom/vty/command.h +++ b/include/osmocom/vty/command.h @@ -149,7 +149,8 @@ struct cmd_element { unsigned int cmdsize; /*!< Command index count. */ char *config; /*!< Configuration string */ vector subconfig; /*!< Sub configuration string */ - unsigned char attr; /*!< Command attributes */ + unsigned char attr; /*!< Command attributes (global) */ + unsigned int usrattr; /*!< Command attributes (program specific) */ }; /*! Command description structure. */ @@ -200,6 +201,16 @@ struct desc { .daemon = dnum, \ }; +#define DEFUN_CMD_ELEMENT_ATTR_USRATTR(funcname, cmdname, cmdstr, helpstr, attrs, usrattrs) \ + static struct cmd_element cmdname = \ + { \ + .string = cmdstr, \ + .func = funcname, \ + .doc = helpstr, \ + .attr = attrs, \ + .usrattr = usrattrs, \ + }; + #define DEFUN_CMD_FUNC_DECL(funcname) \ static int funcname (struct cmd_element *, struct vty *, int, const char *[]); \ @@ -240,6 +251,22 @@ struct desc { #define DEFUN_DEPRECATED(funcname, cmdname, cmdstr, helpstr) \ DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED) +/*! Macro for defining a VTY node and function with global & program specific attributes. + * \param[in] funcname Name of the function implementing the node. + * \param[in] cmdname Name of the command node. + * \param[in] attr Global attributes (see CMD_ATTR_*). + * \param[in] usrattr Program specific attributes. + * \param[in] cmdstr String with syntax of node. + * \param[in] helpstr String with help message of node. + */ +#define DEFUN_ATTR_USRATTR(funcname, cmdname, attr, usrattr, cmdstr, helpstr) \ + DEFUN_CMD_FUNC_DECL(funcname) \ + DEFUN_CMD_ELEMENT_ATTR_USRATTR(funcname, cmdname, cmdstr, helpstr, attr, usrattr) \ + DEFUN_CMD_FUNC_TEXT(funcname) + +#define DEFUN_USRATTR(funcname, cmdname, usrattr, cmdstr, helpstr) \ + DEFUN_ATTR_USRATTR(funcname, cmdname, 0, usrattr, cmdstr, helpstr) + /* DEFUN_NOSH for commands that vtysh should ignore */ #define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr) \ DEFUN(funcname, cmdname, cmdstr, helpstr) diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h index b63dc3bf..fcef08e0 100644 --- a/include/osmocom/vty/vty.h +++ b/include/osmocom/vty/vty.h @@ -192,6 +192,10 @@ struct vty_app_info { " no longer called, ever, and can be left NULL."); /*! Check if the config is consistent before write */ int (*config_is_consistent)(struct vty *vty); + /*! Description of the application specific VTY attributes (optional). */ + const char * usr_attr_desc[32]; + /*! Flag letters of the application specific VTY attributes (optional). */ + char usr_attr_letters[32]; }; /* Prototypes. */ -- cgit v1.2.3