This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
fixeria gerrit-no-reply at lists.osmocom.orgfixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/20447 )
Change subject: vty: introduce API for the library specific attributes
......................................................................
vty: introduce API for the library specific attributes
See https://lists.osmocom.org/pipermail/openbsc/2020-October/013278.html.
Change-Id: I15184569635b3ef7dfe9eeddcc19bf16cc358f66
Related: SYS#4937
---
M include/osmocom/vty/command.h
M src/vty/command.c
2 files changed, 63 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/47/20447/1
diff --git a/include/osmocom/vty/command.h b/include/osmocom/vty/command.h
index 25890a4..92adae9 100644
--- a/include/osmocom/vty/command.h
+++ b/include/osmocom/vty/command.h
@@ -141,6 +141,21 @@
CMD_ATTR_LIB_COMMAND = (1 << 3),
};
+/*! Attributes shared between libraries (up to 32 entries). */
+enum {
+ /* The entries of this enum shall conform the following requirements:
+ * 1. Naming format: 'OSMO_' + <LIBNAME> + '_LIB_ATTR_' + <ATTRNAME>,
+ * where LIBNAME is a short name of the library, e.g. 'ABIS', 'MGCP',
+ * and ATTRNAME is a brief name of the attribute, e.g. RTP_CONN_EST;
+ * for example: 'OSMO_ABIS_LIB_ATTR_RSL_LINK_UP'.
+ * 2. Brevity: shortenings and abbreviations are welcome!
+ * 3. Values are not flags but indexes, unlike CMD_ATTR_*.
+ * 4. Ordering: new entries added before _OSMO_CORE_LIB_ATTR_COUNT. */
+
+ /* Keep this floating entry last, it's needed for count check. */
+ _OSMO_CORE_LIB_ATTR_COUNT
+};
+
/*! Structure of a command element */
struct cmd_element {
const char *string; /*!< Command specification by string. */
diff --git a/src/vty/command.c b/src/vty/command.c
index c7ba9bc..a7359b4 100644
--- a/src/vty/command.c
+++ b/src/vty/command.c
@@ -630,6 +630,18 @@
{ 0, NULL }
};
+/* Description of attributes shared between the lib commands */
+static const char * const cmd_lib_attr_desc[32] = {
+ /* [OSMO_LIBNAME_LIB_ATTR_ATTRNAME] = \
+ * "Brief but meaningful description", */
+};
+
+/* Flag letters of attributes shared between the lib commands.
+ * NOTE: uppercase letters only, the rest is reserved for applications. */
+static const char cmd_lib_attr_letters[32] = {
+ /* [OSMO_LIBNAME_LIB_ATTR_ATTRNAME] = 'X', */
+};
+
/*
* Write one cmd_element as XML via a print_func_t.
*/
@@ -661,7 +673,18 @@
/* Print application specific attributes and their description */
if (cmd->usrattr != 0x00) { /* ... if at least one flag is set */
- print_func(data, " <attributes scope='application'>%s", newline);
+ const char * const *desc;
+ const char *letters;
+
+ if (cmd->attr & CMD_ATTR_LIB_COMMAND) {
+ print_func(data, " <attributes scope='library'>%s", newline);
+ letters = &cmd_lib_attr_letters[0];
+ desc = &cmd_lib_attr_desc[0];
+ } else {
+ print_func(data, " <attributes scope='application'>%s", newline);
+ letters = &host.app_info->usr_attr_letters[0];
+ desc = &host.app_info->usr_attr_desc[0];
+ }
for (i = 0; i < ARRAY_SIZE(host.app_info->usr_attr_desc); i++) {
char *xml_att_desc;
@@ -671,11 +694,11 @@
if (~cmd->usrattr & (1 << i))
continue;
- xml_att_desc = xml_escape(host.app_info->usr_attr_desc[i]);
+ xml_att_desc = xml_escape(desc[i]);
print_func(data, " <attribute doc='%s'", xml_att_desc);
talloc_free(xml_att_desc);
- if ((flag = host.app_info->usr_attr_letters[i]) != '\0')
+ if ((flag = letters[i]) != '\0')
print_func(data, " flag='%c'", flag);
print_func(data, " />%s", newline);
}
@@ -4053,4 +4076,26 @@
srand(time(NULL));
}
+/* FIXME: execute this section in the unit test instead */
+static __attribute__((constructor)) void on_dso_load(void)
+{
+ unsigned int i, j;
+
+ /* Check total number of the library specific attributes */
+ OSMO_ASSERT(_OSMO_CORE_LIB_ATTR_COUNT < 32);
+
+ /* Check for duplicates in the list of library specific flags */
+ for (i = 0; i < _OSMO_CORE_LIB_ATTR_COUNT; i++) {
+ if (cmd_lib_attr_letters[i] == '\0')
+ continue;
+
+ /* Only upper case flag letters are allowed for libraries */
+ OSMO_ASSERT(cmd_lib_attr_letters[i] >= 'A');
+ OSMO_ASSERT(cmd_lib_attr_letters[i] <= 'Z');
+
+ for (j = i + 1; j < _OSMO_CORE_LIB_ATTR_COUNT; j++)
+ OSMO_ASSERT(cmd_lib_attr_letters[i] != cmd_lib_attr_letters[j]);
+ }
+}
+
/*! @} */
--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/20447
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I15184569635b3ef7dfe9eeddcc19bf16cc358f66
Gerrit-Change-Number: 20447
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201004/ce506ddb/attachment.htm>