pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/42528?usp=email )
Change subject: asp: Configure block and shutdown adm state independently ......................................................................
asp: Configure block and shutdown adm state independently
The block/no block and shutdown/no shutdown commands tweak independent states; adapt the code to what's presented to the user. This simplifies handling of both states, since the user may want eg. have it blocked and shutdown, and then "no shutdown" it but make sure it stays blocked so no race condition happens.
Related: OS#6752 Change-Id: I3ab81a4f6f6b72015c5068d5a27128642622cf99 --- M include/osmocom/sigtran/osmo_ss7.h M src/ss7_asp.c M src/ss7_asp.h M src/ss7_asp_vty.c M src/ss7_xua_srv.c 5 files changed, 22 insertions(+), 45 deletions(-)
Approvals: laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified pespin: Looks good to me, approved osmith: Looks good to me, but someone else must approve
diff --git a/include/osmocom/sigtran/osmo_ss7.h b/include/osmocom/sigtran/osmo_ss7.h index 162994e..074027f 100644 --- a/include/osmocom/sigtran/osmo_ss7.h +++ b/include/osmocom/sigtran/osmo_ss7.h @@ -240,16 +240,6 @@ * SS7 Application Server Processes ***********************************************************************/
-enum osmo_ss7_asp_admin_state { - /*! no SCTP association with peer */ - OSMO_SS7_ASP_ADM_S_SHUTDOWN, - /*! SCP association, but reject ASP-ACTIVE */ - OSMO_SS7_ASP_ADM_S_BLOCKED, - /*! in normal operation */ - OSMO_SS7_ASP_ADM_S_ENABLED, -}; -extern const struct value_string osmo_ss7_asp_admin_state_names[]; - enum osmo_ss7_asp_role { OSMO_SS7_ASP_ROLE_ASP, OSMO_SS7_ASP_ROLE_SG, diff --git a/src/ss7_asp.c b/src/ss7_asp.c index 40433d0..f83de19 100644 --- a/src/ss7_asp.c +++ b/src/ss7_asp.c @@ -149,13 +149,6 @@ { 0, NULL } };
-const struct value_string osmo_ss7_asp_admin_state_names[] = { - { OSMO_SS7_ASP_ADM_S_SHUTDOWN, "SHUTDOWN" }, - { OSMO_SS7_ASP_ADM_S_BLOCKED, "BLOCKED" }, - { OSMO_SS7_ASP_ADM_S_ENABLED, "ENABLED" }, - { 0, NULL } -}; - const struct value_string osmo_ss7_asp_role_names[] = { { OSMO_SS7_ASP_ROLE_ASP, "ASP" }, { OSMO_SS7_ASP_ROLE_SG, "SG" }, @@ -744,7 +737,7 @@ asp->inst = inst; INIT_LLIST_HEAD(&asp->assoc_as_list); /* ASP in "no shutdown" state by default: */ - asp->cfg.adm_state = OSMO_SS7_ASP_ADM_S_ENABLED; + asp->cfg.adm_state.shutdown = false; ss7_asp_peer_init(&asp->cfg.remote); asp->cfg.remote.port = remote_port; ss7_asp_peer_init(&asp->cfg.local); @@ -938,9 +931,8 @@ return rc; OSMO_ASSERT(asp->fi);
- if (asp->cfg.adm_state == OSMO_SS7_ASP_ADM_S_SHUTDOWN) { - LOGPASP(asp, DLSS7, LOGL_NOTICE, "Skipping start for ASP in administrative state %s\n", - get_value_string(osmo_ss7_asp_admin_state_names, OSMO_SS7_ASP_ADM_S_SHUTDOWN)); + if (asp->cfg.adm_state.shutdown) { + LOGPASP(asp, DLSS7, LOGL_NOTICE, "Skipping start for ASP in administrative state 'shutdown'\n"); return 0; }
@@ -1256,7 +1248,7 @@ struct osmo_ss7_asp *asp = osmo_stream_cli_get_data(cli); LOGPASP(asp, DLSS7, LOGL_NOTICE, "Closing and reconnecting ASP\n"); xua_cli_close(cli); - if (asp->cfg.adm_state != OSMO_SS7_ASP_ADM_S_SHUTDOWN) + if (!asp->cfg.adm_state.shutdown) osmo_stream_cli_reconnect(cli); return 0; } diff --git a/src/ss7_asp.h b/src/ss7_asp.h index 7bce2d4..834f910 100644 --- a/src/ss7_asp.h +++ b/src/ss7_asp.h @@ -112,7 +112,12 @@ char *name; char *description; enum osmo_ss7_asp_protocol proto; - enum osmo_ss7_asp_admin_state adm_state; + struct { + /*! no SCTP association with peer */ + bool shutdown:1; + /*! SCP association, but reject ASP-ACTIVE */ + bool blocked:1; + } adm_state; bool is_server; enum osmo_ss7_asp_role role; bool role_set_by_vty; diff --git a/src/ss7_asp_vty.c b/src/ss7_asp_vty.c index f13cb60..3cae016 100644 --- a/src/ss7_asp_vty.c +++ b/src/ss7_asp_vty.c @@ -717,12 +717,11 @@ { struct osmo_ss7_asp *asp = vty->index;
- LOGPASP(asp, DLSS7, LOGL_NOTICE, "Applying Adm State change: %s -> %s\n", - get_value_string(osmo_ss7_asp_admin_state_names, asp->cfg.adm_state), - get_value_string(osmo_ss7_asp_admin_state_names, OSMO_SS7_ASP_ADM_S_SHUTDOWN)); + LOGPASP(asp, DLSS7, LOGL_NOTICE, "Applying Adm State change: '%sshutdown' -> 'shutdown'\n", + asp->cfg.adm_state.shutdown ? "" : "no ");
asp->cfg.explicit_shutdown_state_by_vty_since_node_enter = true; - asp->cfg.adm_state = OSMO_SS7_ASP_ADM_S_SHUTDOWN; + asp->cfg.adm_state.shutdown = true; ss7_asp_restart_after_reconfigure(asp); return CMD_SUCCESS; } @@ -734,12 +733,11 @@ { struct osmo_ss7_asp *asp = vty->index;
- LOGPASP(asp, DLSS7, LOGL_NOTICE, "Applying Adm State change: %s -> %s\n", - get_value_string(osmo_ss7_asp_admin_state_names, asp->cfg.adm_state), - get_value_string(osmo_ss7_asp_admin_state_names, OSMO_SS7_ASP_ADM_S_ENABLED)); + LOGPASP(asp, DLSS7, LOGL_NOTICE, "Applying Adm State change: '%sshutdown' -> 'no shutdown'\n", + asp->cfg.adm_state.shutdown ? "" : "no ");
asp->cfg.explicit_shutdown_state_by_vty_since_node_enter = true; - asp->cfg.adm_state = OSMO_SS7_ASP_ADM_S_ENABLED; + asp->cfg.adm_state.shutdown = false; ss7_asp_restart_after_reconfigure(asp); return CMD_SUCCESS; } @@ -1406,18 +1404,10 @@ write_asp_timers_xua(vty, " ", asp); write_asp_timers_lm(vty, " ", asp);
- switch (asp->cfg.adm_state) { - case OSMO_SS7_ASP_ADM_S_SHUTDOWN: - vty_out(vty, " shutdown%s", VTY_NEWLINE); - break; - case OSMO_SS7_ASP_ADM_S_BLOCKED: + if (asp->cfg.adm_state.blocked) vty_out(vty, " block%s", VTY_NEWLINE); - break; - case OSMO_SS7_ASP_ADM_S_ENABLED: - /* Default, no need to print: */ - vty_out(vty, " no shutdown%s", VTY_NEWLINE); - break; - } + + vty_out(vty, " %sshutdown%s", asp->cfg.adm_state.shutdown ? "" : "no ", VTY_NEWLINE); }
int ss7_vty_node_asp_go_parent(struct vty *vty) diff --git a/src/ss7_xua_srv.c b/src/ss7_xua_srv.c index deb1808..11e0d0b 100644 --- a/src/ss7_xua_srv.c +++ b/src/ss7_xua_srv.c @@ -85,10 +85,10 @@ talloc_free(sock_name); return 0; } - if (asp->cfg.adm_state == OSMO_SS7_ASP_ADM_S_SHUTDOWN) { + if (asp->cfg.adm_state.shutdown) { LOGPASP(asp, DLSS7, LOGL_NOTICE, - "Reject incoming new connection from %s for ASP in adm state %s\n", - sock_name, get_value_string(osmo_ss7_asp_admin_state_names, asp->cfg.adm_state)); + "Reject incoming new connection from %s for ASP in adm state 'shutdown'\n", + sock_name); close(fd); talloc_free(sock_name); return 0;