pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/libosmo-sigtran/+/42115?usp=email )
Change subject: Allow configuring local ASP Identifier
......................................................................
Allow configuring local ASP Identifier
If configured, it will be transmitted during ASP UP and ASP UP ACK.
This may be needed if facing an SG/IPSP peer who requires ASP Identifier
to be set.
Related: OS#6953
Change-Id: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
---
M src/ss7_asp.h
M src/ss7_asp_vty.c
M src/xua_asp_fsm.c
M tests/vty/osmo_stp_test.vty
M tests/vty/ss7_asp_test.vty
5 files changed, 55 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-sigtran
refs/changes/15/42115/1
diff --git a/src/ss7_asp.h b/src/ss7_asp.h
index 0d047cb..75be6cc 100644
--- a/src/ss7_asp.h
+++ b/src/ss7_asp.h
@@ -73,12 +73,8 @@
/*! pre-formatted human readable local/remote socket name */
char *sock_name;
- /* ASP Identifier for ASP-UP + NTFY, as received by the peer.
- * FIXME: This should actually be stored in a AS-ASP relation, since it
- * can be different per AS, see RFC4666 3.5.1
- * "The optional ASP Identifier parameter contains a unique value that
- * is locally significant among the ASPs that support an AS".
- */
+ /* Peer's ASP Identifier, as received during ASPUP (SG/IPSP) and ASPUP
ACK (IPSP),
+ * and transmitted during NOTIFY. */
uint32_t remote_asp_id;
bool remote_asp_id_present;
@@ -128,6 +124,13 @@
* "[no] shutdown" explicitly in cfg files. */
bool explicit_shutdown_state_by_vty_since_node_enter;
+ /* Local ASP Identifier transmitted during ASPUP (ASP/IPSP) and
ASPUP ACK (IPSP),
+ * and received during NOTIFY.
+ * "The optional ASP Identifier parameter contains a unique value
+ * that is locally significant among the ASPs that support an
AS". */
+ uint32_t local_asp_id;
+ bool local_asp_id_present;
+
struct osmo_ss7_asp_peer local;
struct osmo_ss7_asp_peer remote;
uint8_t qos_class;
diff --git a/src/ss7_asp_vty.c b/src/ss7_asp_vty.c
index 241863a..6b03275 100644
--- a/src/ss7_asp_vty.c
+++ b/src/ss7_asp_vty.c
@@ -28,6 +28,7 @@
#include <errno.h>
#include <stdint.h>
#include <string.h>
+#include <inttypes.h>
#include <netdb.h>
#include <arpa/inet.h>
@@ -453,6 +454,35 @@
return CMD_SUCCESS;
}
+DEFUN_ATTR(asp_identifier, asp_identifier_cmd,
+ "asp-identifier <0-4294967295>",
+ "Specify ASP Identifier for this ASP\n"
+ "ASP Identifier\n",
+ CMD_ATTR_NODE_EXIT)
+{
+ struct osmo_ss7_asp *asp = vty->index;
+ int64_t id64 = 0;
+ int rc = osmo_str_to_int64(&id64, argv[0], 10, 0, UINT32_MAX);
+ if (rc < 0)
+ return CMD_WARNING;
+
+ asp->cfg.local_asp_id_present = true;
+ asp->cfg.local_asp_id = (uint32_t)id64;
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(asp_no_identifier, asp_no_identifier_cmd,
+ "no asp-identifier",
+ NO_STR "Specify ASP Identifier for this ASP\n",
+ CMD_ATTR_NODE_EXIT)
+{
+ struct osmo_ss7_asp *asp = vty->index;
+
+ asp->cfg.local_asp_id_present = false;
+ asp->cfg.local_asp_id = 0;
+ return CMD_SUCCESS;
+}
+
DEFUN_ATTR(asp_transport_role, asp_transport_role_cmd,
"transport-role (client|server)",
"Specify the transport layer role for this ASP\n"
@@ -1322,6 +1352,8 @@
vty_out(vty, "%s", VTY_NEWLINE);
if (asp->cfg.description)
vty_out(vty, " description %s%s", asp->cfg.description,
VTY_NEWLINE);
+ if (asp->cfg.local_asp_id_present)
+ vty_out(vty, " asp-identifier %" PRIu32 "%s",
asp->cfg.local_asp_id, VTY_NEWLINE);
for (i = 0; i < asp->cfg.local.host_cnt; i++) {
if (asp->cfg.local.host[i])
vty_out(vty, " local-ip %s%s%s",
asp->cfg.local.host[i],
@@ -1443,6 +1475,8 @@
install_lib_element(L_CS7_NODE, &cs7_asp_trans_proto_cmd);
install_lib_element(L_CS7_NODE, &no_cs7_asp_cmd);
install_lib_element(L_CS7_ASP_NODE, &cfg_description_cmd);
+ install_lib_element(L_CS7_ASP_NODE, &asp_identifier_cmd);
+ install_lib_element(L_CS7_ASP_NODE, &asp_no_identifier_cmd);
install_lib_element(L_CS7_ASP_NODE, &asp_remote_ip_cmd);
install_lib_element(L_CS7_ASP_NODE, &asp_no_remote_ip_cmd);
install_lib_element(L_CS7_ASP_NODE, &asp_local_ip_cmd);
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c
index 4204e31..ff83f51 100644
--- a/src/xua_asp_fsm.c
+++ b/src/xua_asp_fsm.c
@@ -226,6 +226,8 @@
/* RFC 3868 Ch. 3.5.1 */
xua->hdr = XUA_HDR(SUA_MSGC_ASPSM, SUA_ASPSM_UP);
/* Optional: ASP ID */
+ if (asp->cfg.local_asp_id_present)
+ xua_msg_add_u32(xua, SUA_IEI_ASP_ID,
asp->cfg.local_asp_id);
#if 0
/* TODO: RFC 4666 3.8.1:
* 'The "ASP Identifier Required" error is sent by an SGP in
@@ -243,6 +245,8 @@
/* RFC3868 Ch. 3.5.2 */
xua->hdr = XUA_HDR(SUA_MSGC_ASPSM, SUA_ASPSM_UP_ACK);
/* Optional: ASP ID */
+ if (asp->cfg.local_asp_id_present)
+ xua_msg_add_u32(xua, SUA_IEI_ASP_ID,
asp->cfg.local_asp_id);
#if 0
/* TODO: RFC 4666 3.5.2:
* "The optional ASP Identifier parameter is specifically
useful for IPSP
diff --git a/tests/vty/osmo_stp_test.vty b/tests/vty/osmo_stp_test.vty
index 72eb0de..6e98bb4 100644
--- a/tests/vty/osmo_stp_test.vty
+++ b/tests/vty/osmo_stp_test.vty
@@ -279,6 +279,8 @@
OsmoSTP(config-cs7-asp)# list
...
description .TEXT
+ asp-identifier <0-4294967295>
+ no asp-identifier
remote-ip (A.B.C.D|X:X::X:X) [primary]
no remote-ip (A.B.C.D|X:X::X:X)
local-ip (A.B.C.D|X:X::X:X) [primary]
@@ -308,8 +310,9 @@
OsmoSTP(config-cs7-asp)# ?
...
description Save human-readable description of the object
- remote-ip Specify Remote IP Address of ASP
+ asp-identifier Specify ASP Identifier for this ASP
no Negate a command or set its defaults
+ remote-ip Specify Remote IP Address of ASP
local-ip Specify Local IP Address from which to contact ASP
qos-class Specify QoS Class of ASP
role Specify the xUA role for this ASP
diff --git a/tests/vty/ss7_asp_test.vty b/tests/vty/ss7_asp_test.vty
index 1ff4e36..ee6f9c2 100644
--- a/tests/vty/ss7_asp_test.vty
+++ b/tests/vty/ss7_asp_test.vty
@@ -275,6 +275,8 @@
ss7_asp_vty_test(config-cs7-asp)# list
...
description .TEXT
+ asp-identifier <0-4294967295>
+ no asp-identifier
remote-ip (A.B.C.D|X:X::X:X) [primary]
no remote-ip (A.B.C.D|X:X::X:X)
local-ip (A.B.C.D|X:X::X:X) [primary]
@@ -304,8 +306,9 @@
ss7_asp_vty_test(config-cs7-asp)# ?
...
description Save human-readable description of the object
- remote-ip Specify Remote IP Address of ASP
+ asp-identifier Specify ASP Identifier for this ASP
no Negate a command or set its defaults
+ remote-ip Specify Remote IP Address of ASP
local-ip Specify Local IP Address from which to contact ASP
qos-class Specify QoS Class of ASP
role Specify the xUA role for this ASP
--
To view, visit https://gerrit.osmocom.org/c/libosmo-sigtran/+/42115?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: Ib94d542f940e13d5c007bc3319e7dde65cf81f12
Gerrit-Change-Number: 42115
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>