pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmo-sigtran/+/43156?usp=email )
Change subject: asp: Support setting timer xua beat 0 through VTY
......................................................................
asp: Support setting timer xua beat 0 through VTY
Previous VTY configured range for the set of tdefs in timer xua didn't
allow to pass a 0 to it, which "timer xua beat 0" should be able to
accept in order to disable heartbeat procedure on the ASP.
In order to fix it:
* Change VTY range to minimal accepted value to 0 for the whole tdef
set.
* Make sure the VTY command validates and rejects user trying to set a
value outside the accepted range of the specific timer.
* Set .min_val=1 in SS7_ASP_XUA_T_ACK, so it can't accept value 0.
According to spec, T(ack) is always expected to be set, even if the
resulting timeout may be handled by LM instead of simply
retransmitting the packet.
* Write vty tests to validate the restrictions are followed properly in
the VTY.
Related: SYS#8156
Change-Id: Iadd7c6751ab09640fd2df214afa2ec87274a3210
---
M src/ss7_asp.c
M src/ss7_asp_vty.c
M tests/vty/osmo_stp_test.vty
M tests/vty/ss7_asp_test.vty
4 files changed, 101 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran
refs/changes/56/43156/1
diff --git a/src/ss7_asp.c b/src/ss7_asp.c
index c47ee7c..5a47248 100644
--- a/src/ss7_asp.c
+++ b/src/ss7_asp.c
@@ -121,9 +121,10 @@
const struct osmo_tdef ss7_asp_xua_timer_defaults[SS7_ASP_XUA_TIMERS_LEN] = {
{ .T = SS7_ASP_XUA_T_ACK, .default_val =
SS7_ASP_XUA_DEFAULT_T_ACK_SEC, .unit = OSMO_TDEF_S,
- .desc = "Resend ASP Up/Down/Active/Inactive after timeout waiting for
ASP Up/Down/Active/Inactive ACK (ASP role)(s)" },
+ .desc = "T(ack): Resend ASP Up/Down/Active/Inactive after timeout
waiting for ASP Up/Down/Active/Inactive ACK (ASP role) (s)",
+ .min_val = 1 },
{ .T = SS7_ASP_XUA_T_BEAT, .default_val =
SS7_ASP_XUA_DEFAULT_T_BEAT_SEC, .unit = OSMO_TDEF_S,
- .desc = "Heartbeat Timer (0 = disabled) (s)" },
+ .desc = "T(beat): Heartbeat Timer (0 = disabled) (s)" },
{}
};
diff --git a/src/ss7_asp_vty.c b/src/ss7_asp_vty.c
index c38b5b8..21d19d6 100644
--- a/src/ss7_asp_vty.c
+++ b/src/ss7_asp_vty.c
@@ -814,20 +814,34 @@
return CMD_SUCCESS;
}
-/* timer xua <name> <1-999999>
+/* timer xua <name> <0-999999>
* (cmdstr and doc are dynamically generated from ss7_asp_xua_timer_names.) */
DEFUN_ATTR(asp_timer_xua, asp_timer_xua_cmd,
NULL, NULL, CMD_ATTR_IMMEDIATE)
{
struct osmo_ss7_asp *asp = vty->index;
enum ss7_asp_xua_timer timer =
get_string_value(ss7_asp_xua_timer_names, argv[0]);
+ int rc;
+ unsigned long new_val = atoi(argv[1]);
if (timer <= 0 || timer >= SS7_ASP_XUA_TIMERS_LEN) {
vty_out(vty, "%% Invalid timer: %s%s", argv[0], VTY_NEWLINE);
return CMD_WARNING;
}
- osmo_tdef_set(asp->cfg.T_defs_xua, timer, atoi(argv[1]), OSMO_TDEF_S);
+ rc = osmo_tdef_set(asp->cfg.T_defs_xua, timer, new_val, OSMO_TDEF_S);
+ if (rc < 0) {
+ struct osmo_tdef *t = osmo_tdef_get_entry(asp->cfg.T_defs_xua,
timer);
+ if (!t)
+ return CMD_WARNING;
+ if (!osmo_tdef_val_in_range(t, new_val)) {
+ char range_str[64];
+ osmo_tdef_range_str_buf(range_str, sizeof(range_str),
t);
+ vty_out(vty, "%% Timer %s value %lu is out of range
%s%s",
+ argv[0], new_val, range_str, VTY_NEWLINE);
+ }
+ return CMD_WARNING;
+ }
return CMD_SUCCESS;
}
@@ -861,7 +875,7 @@
def->default_val);
}
- osmo_talloc_asprintf(tall_vty_ctx, cmd_str, ") <1-999999>");
+ osmo_talloc_asprintf(tall_vty_ctx, cmd_str, ") <0-999999>");
osmo_talloc_asprintf(tall_vty_ctx, doc_str,
"Timer value, in seconds\n");
diff --git a/tests/vty/osmo_stp_test.vty b/tests/vty/osmo_stp_test.vty
index 1b452c8..2dbd5b2 100644
--- a/tests/vty/osmo_stp_test.vty
+++ b/tests/vty/osmo_stp_test.vty
@@ -302,7 +302,7 @@
no destination-audit asp-active
quirk (no_notify|daud_in_asp|snm_inactive)
no quirk (no_notify|daud_in_asp|snm_inactive)
- timer xua (ack|beat) <1-999999>
+ timer xua (ack|beat) <0-999999>
timer lm (wait_asp_up|wait_notify|wait_notify_rkm|wait_rk_reg_resp)
<1-999999>
block
no block
@@ -386,6 +386,36 @@
...
end
OsmoSTP(config-cs7-asp)# no shutdown
+
+OsmoSTP(config-cs7-asp)# ### Test ASP node timers
+OsmoSTP(config-cs7-asp)# timer ?
+ xua Configure ASP default xua timer values
+ lm Configure ASP default lm timer values
+OsmoSTP(config-cs7-asp)# timer xua ?
+ ack T(ack): Resend ASP Up/Down/Active/Inactive after timeout waiting for
ASP Up/Down/Active/Inactive ACK (ASP role) (s) (default: 2)
+ beat T(beat): Heartbeat Timer (0 = disabled) (s) (default: 30)
+OsmoSTP(config-cs7-asp)# timer xua beat 0
+OsmoSTP(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+...
+ timer xua beat 0
+...
+OsmoSTP(config-cs7-asp)# timer xua beat 5
+OsmoSTP(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+...
+ timer xua beat 5
+...
+OsmoSTP(config-cs7-asp)# timer xua beat 30
+OsmoSTP(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+... !timer xua beat 30
+...
+
+
OsmoSTP(config-cs7-asp)# exit
% NOTE: Skipping automatic restart of ASP since an explicit '[no] shutdown'
command was entered
OsmoSTP(config-cs7)# as my-ass m3ua
diff --git a/tests/vty/ss7_asp_test.vty b/tests/vty/ss7_asp_test.vty
index e93e037..f3193b6 100644
--- a/tests/vty/ss7_asp_test.vty
+++ b/tests/vty/ss7_asp_test.vty
@@ -298,7 +298,7 @@
no destination-audit asp-active
quirk (no_notify|daud_in_asp|snm_inactive)
no quirk (no_notify|daud_in_asp|snm_inactive)
- timer xua (ack|beat) <1-999999>
+ timer xua (ack|beat) <0-999999>
timer lm (wait_asp_up|wait_notify|wait_notify_rkm|wait_rk_reg_resp)
<1-999999>
block
no block
@@ -383,6 +383,55 @@
remote-ip 127.0.0.201
...
end
+
+ss7_asp_vty_test(config-cs7-asp)# ### Test ASP node timers
+ss7_asp_vty_test(config-cs7-asp)# timer ?
+ xua Configure ASP default xua timer values
+ lm Configure ASP default lm timer values
+ss7_asp_vty_test(config-cs7-asp)# timer xua ?
+ ack T(ack): Resend ASP Up/Down/Active/Inactive after timeout waiting for
ASP Up/Down/Active/Inactive ACK (ASP role) (s) (default: 2)
+ beat T(beat): Heartbeat Timer (0 = disabled) (s) (default: 30)
+ss7_asp_vty_test(config-cs7-asp)# timer xua ack 1
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+...
+ timer xua ack 1
+...
+ss7_asp_vty_test(config-cs7-asp)# timer xua ack 2
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+... !timer xua ack 1
+...
+ss7_asp_vty_test(config-cs7-asp)# timer xua ack 0
+% Timer ack value 0 is out of range [1 .. inf]
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+... !timer xua ack 0
+...
+ss7_asp_vty_test(config-cs7-asp)# timer xua beat 0
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+...
+ timer xua beat 0
+...
+ss7_asp_vty_test(config-cs7-asp)# timer xua beat 5
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+...
+ timer xua beat 5
+...
+ss7_asp_vty_test(config-cs7-asp)# timer xua beat 30
+ss7_asp_vty_test(config-cs7-asp)# show running-config
+...
+ asp my-asp 12345 54321 m3ua
+... !timer xua beat 30
+...
+
ss7_asp_vty_test(config-cs7-asp)# exit
% NOTE: Make sure to use '[no] shutdown' command in 'asp' node in order to
restart the ASP for new configs to be applied.
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/43156?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: Iadd7c6751ab09640fd2df214afa2ec87274a3210
Gerrit-Change-Number: 43156
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>