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/.
Max gerrit-no-reply at lists.osmocom.orgHello Neels Hofmeyr, Harald Welte, Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/1895 to look at the new patch set (#3). Use value_string for ctrl_type Use value_string for enum ctrl_type instead of custom code. Add corresponding unit tests. Related: OS#1615 Change-Id: Icd4e96dd9f00876cb70b43cfcf42ab4f10311b28 --- M .gitignore M include/osmocom/ctrl/control_cmd.h M src/ctrl/control_cmd.c M tests/Makefile.am A tests/ctrl/ctrl_test.c A tests/ctrl/ctrl_test.ok M tests/testsuite.at 7 files changed, 74 insertions(+), 37 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/95/1895/3 diff --git a/.gitignore b/.gitignore index ad8354e..48642ca 100644 --- a/.gitignore +++ b/.gitignore @@ -59,7 +59,7 @@ tests/testsuite tests/testsuite.dir/ tests/testsuite.log - +tests/ctrl/ctrl_test tests/utils/utils_test tests/stats/stats_test tests/kasumi/kasumi_test diff --git a/include/osmocom/ctrl/control_cmd.h b/include/osmocom/ctrl/control_cmd.h index a63557d..d82c9af 100644 --- a/include/osmocom/ctrl/control_cmd.h +++ b/include/osmocom/ctrl/control_cmd.h @@ -4,7 +4,7 @@ #include <osmocom/core/talloc.h> #include <osmocom/core/write_queue.h> #include <osmocom/core/logging.h> - +#include <osmocom/core/utils.h> #include <osmocom/vty/vector.h> #define CTRL_CMD_ERROR -1 @@ -22,7 +22,7 @@ }; enum ctrl_type { - CTRL_TYPE_UNKNOWN, + CTRL_TYPE_UNKNOWN = 0, CTRL_TYPE_GET, CTRL_TYPE_SET, CTRL_TYPE_GET_REPLY, @@ -31,6 +31,8 @@ CTRL_TYPE_ERROR }; +extern const struct value_string ctrl_type_vals[]; + struct ctrl_connection { struct llist_head list_entry; diff --git a/src/ctrl/control_cmd.c b/src/ctrl/control_cmd.c index 2cf66cf..1cc8247 100644 --- a/src/ctrl/control_cmd.c +++ b/src/ctrl/control_cmd.c @@ -33,41 +33,21 @@ #include <osmocom/core/msgb.h> #include <osmocom/core/talloc.h> - +#include <osmocom/core/utils.h> #include <osmocom/vty/command.h> #include <osmocom/vty/vector.h> extern vector ctrl_node_vec; -static struct ctrl_cmd_map ccm[] = { - {"GET", CTRL_TYPE_GET}, - {"SET", CTRL_TYPE_SET}, - {"GET_REPLY", CTRL_TYPE_GET_REPLY}, - {"SET_REPLY", CTRL_TYPE_SET_REPLY}, - {"TRAP", CTRL_TYPE_TRAP}, - {"ERROR", CTRL_TYPE_ERROR}, - {NULL} +const struct value_string ctrl_type_vals[] = { + { CTRL_TYPE_GET, "GET" }, + { CTRL_TYPE_SET, "SET" }, + { CTRL_TYPE_GET_REPLY, "GET_REPLY" }, + { CTRL_TYPE_SET_REPLY, "SET_REPLY" }, + { CTRL_TYPE_TRAP, "TRAP" }, + { CTRL_TYPE_ERROR, "ERROR" }, + { CTRL_TYPE_UNKNOWN, NULL } }; - -static int ctrl_cmd_str2type(char *s) -{ - int i; - for (i=0; ccm[i].cmd != NULL; i++) { - if (strcasecmp(s, ccm[i].cmd) == 0) - return ccm[i].type; - } - return CTRL_TYPE_UNKNOWN; -} - -static char *ctrl_cmd_type2str(int type) -{ - int i; - for (i=0; ccm[i].cmd != NULL; i++) { - if (ccm[i].type == type) - return ccm[i].cmd; - } - return NULL; -} /* Functions from libosmocom */ extern vector cmd_make_descvec(const char *string, const char *descstr); @@ -308,7 +288,7 @@ goto err; } - cmd->type = ctrl_cmd_str2type(tmp); + cmd->type = get_string_value(ctrl_type_vals, tmp); if (cmd->type == CTRL_TYPE_UNKNOWN) { cmd->type = CTRL_TYPE_ERROR; cmd->id = "err"; @@ -403,7 +383,8 @@ struct msgb *ctrl_cmd_make(struct ctrl_cmd *cmd) { struct msgb *msg; - char *type, *tmp; + const char *type; + char *tmp; if (!cmd->id) return NULL; @@ -412,7 +393,7 @@ if (!msg) return NULL; - type = ctrl_cmd_type2str(cmd->type); + type = get_value_string(ctrl_type_vals, cmd->type); switch (cmd->type) { case CTRL_TYPE_GET: diff --git a/tests/Makefile.am b/tests/Makefile.am index f6d4db3..35b9150 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -11,7 +11,7 @@ logging/logging_test fr/fr_test codec/codec_test \ loggingrb/loggingrb_test strrb/strrb_test \ vty/vty_test comp128/comp128_test utils/utils_test \ - smscb/gsm0341_test stats/stats_test \ + smscb/gsm0341_test stats/stats_test ctrl/ctrl_test \ bitvec/bitvec_test msgb/msgb_test bits/bitcomp_test \ tlv/tlv_test gsup/gsup_test oap/oap_test fsm/fsm_test \ write_queue/wqueue_test socket/socket_test @@ -41,6 +41,9 @@ auth_milenage_test_SOURCES = auth/milenage_test.c auth_milenage_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la + +ctrl_ctrl_test_SOURCES = ctrl/ctrl_test.c +ctrl_ctrl_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/ctrl/libosmoctrl.la gea_gea_test_SOURCES = gea/gea_test.c gea_gea_test_LDADD = $(top_builddir)/src/libosmocore.la $(top_builddir)/src/gsm/libosmogsm.la @@ -164,7 +167,7 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \ timer/timer_test.ok sms/sms_test.ok ussd/ussd_test.ok \ smscb/smscb_test.ok bits/bitrev_test.ok a5/a5_test.ok \ - conv/conv_test.ok auth/milenage_test.ok \ + conv/conv_test.ok auth/milenage_test.ok ctrl/ctrl_test.ok \ lapd/lapd_test.ok gsm0408/gsm0408_test.ok \ gsm0808/gsm0808_test.ok gb/bssgp_fc_tests.err \ gb/bssgp_fc_tests.ok gb/bssgp_fc_tests.sh \ diff --git a/tests/ctrl/ctrl_test.c b/tests/ctrl/ctrl_test.c new file mode 100644 index 0000000..3bbab76 --- /dev/null +++ b/tests/ctrl/ctrl_test.c @@ -0,0 +1,36 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <stdbool.h> + +#include <osmocom/core/utils.h> +#include <osmocom/ctrl/control_cmd.h> + +inline void check_type(enum ctrl_type c) +{ + const char *t = get_value_string(ctrl_type_vals, c); + int v = get_string_value(ctrl_type_vals, t); + + printf("ctrl type %d is %s ", c, t); + if (v < 0) + printf("[PARSE FAILED]\n"); + else + printf("-> %d %s\n", v, c != v ? "FAIL" : "OK"); +} + +int main(int argc, char **argv) +{ + printf("Checking ctrl types...\n"); + + check_type(CTRL_TYPE_UNKNOWN); + check_type(CTRL_TYPE_GET); + check_type(CTRL_TYPE_SET); + check_type(CTRL_TYPE_GET_REPLY); + check_type(CTRL_TYPE_SET_REPLY); + check_type(CTRL_TYPE_TRAP); + check_type(CTRL_TYPE_ERROR); + check_type(64); + + return 0; +} diff --git a/tests/ctrl/ctrl_test.ok b/tests/ctrl/ctrl_test.ok new file mode 100644 index 0000000..c4b05e9 --- /dev/null +++ b/tests/ctrl/ctrl_test.ok @@ -0,0 +1,9 @@ +Checking ctrl types... +ctrl type 0 is unknown 0x0 [PARSE FAILED] +ctrl type 1 is GET -> 1 OK +ctrl type 2 is SET -> 2 OK +ctrl type 3 is GET_REPLY -> 3 OK +ctrl type 4 is SET_REPLY -> 4 OK +ctrl type 5 is TRAP -> 5 OK +ctrl type 6 is ERROR -> 6 OK +ctrl type 64 is unknown 0x40 [PARSE FAILED] diff --git a/tests/testsuite.at b/tests/testsuite.at index a3be0e7..6d8c5d3 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -9,6 +9,12 @@ AT_CHECK([$abs_top_builddir/tests/a5/a5_test], [0], [expout]) AT_CLEANUP +AT_SETUP([ctrl]) +AT_KEYWORDS([ctrl]) +cat $abs_srcdir/ctrl/ctrl_test.ok > expout +AT_CHECK([$abs_top_builddir/tests/ctrl/ctrl_test], [0], [expout]) +AT_CLEANUP + AT_SETUP([kasumi]) AT_KEYWORDS([kasumi]) cat $abs_srcdir/kasumi/kasumi_test.ok > expout -- To view, visit https://gerrit.osmocom.org/1895 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Icd4e96dd9f00876cb70b43cfcf42ab4f10311b28 Gerrit-PatchSet: 3 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>