pespin has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-sigtran/+/40684?usp=email )
Change subject: xua: Introduce internal APIs to transmit DAUD ......................................................................
xua: Introduce internal APIs to transmit DAUD
Change-Id: Iab6126f1a9eac1a66bb8ec362b87e20a5eb795ff --- M src/m3ua.c M src/sua.c M src/xua_internal.h M src/xua_snm.c 4 files changed, 55 insertions(+), 4 deletions(-)
Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved
diff --git a/src/m3ua.c b/src/m3ua.c index f073c8e..7d3945c 100644 --- a/src/m3ua.c +++ b/src/m3ua.c @@ -883,7 +883,6 @@ return xua; }
-#if 0 /* not used so far */ /* 3.4.3 Destination Available (DAUD) */ static struct xua_msg *m3ua_encode_daud(const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, @@ -895,7 +894,6 @@ xua->hdr.msg_type = M3UA_SNM_DAUD; return xua; } -#endif
/* 3.4.5 Destination User Part Unavailable (DUPU) */ static struct xua_msg *m3ua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx, @@ -976,6 +974,21 @@ m3ua_tx_xua_asp(asp, xua); }
+/*! Transmit SSNM DAUD message requesting [un]availability status of certain point code[s] + * \param[in] asp ASP through which to transmit message. Must be ACTIVE. + * \param[in] rctx array of Routing Contexts in network byte order. + * \param[in] num_rctx number of rctx + * \param[in] aff_pc array of 'Affected Point Code' in network byte order. + * \param[in] num_aff_pc number of aff_pc + * \param[in] info_string optional information string (can be NULL). + */ +void m3ua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_string) +{ + struct xua_msg *xua = m3ua_encode_daud(rctx, num_rctx, aff_pc, num_aff_pc, info_string); + m3ua_tx_xua_asp(asp, xua); +} + /*! Transmit SSNM DUPU message indicating user unavailability. * \param[in] asp ASP through which to transmit message. Must be ACTIVE. * \param[in] rctx array of Routing Contexts in network byte order. diff --git a/src/sua.c b/src/sua.c index 7d14f3b..448bdee 100644 --- a/src/sua.c +++ b/src/sua.c @@ -825,7 +825,6 @@ return xua; }
-#if 0 /* not used so far */ /* 3.4.3 Destination Available (DAUD) */ static struct xua_msg *sua_encode_daud(const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, @@ -837,7 +836,6 @@ xua->hdr.msg_type = SUA_SNM_DAUD; return xua; } -#endif
/* 3.4.5 Destination User Part Unavailable (DUPU) */ static struct xua_msg *sua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx, @@ -914,6 +912,23 @@ xua_msg_add_data(xua, SUA_IEI_INFO_STRING, strlen(info_string)+1, (const uint8_t *) info_string); }
+/*! Transmit SSNM DAUD message requesting [un]availability status of certain point code[s] + * \param[in] asp ASP through which to transmit message. Must be ACTIVE. + * \param[in] rctx array of Routing Contexts in network byte order. + * \param[in] num_rctx number of rctx + * \param[in] aff_pc array of 'Affected Point Code' in network byte order. + * \param[in] num_aff_pc number of aff_pc + * \param[in] aff_ssn affected SSN (optional) + * \param[in] smi subsystem multiplicity indicator (optional) + * \param[in] info_string optional information string (can be NULL). + */ +void sua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn, + const uint32_t *smi, const char *info_string) +{ + struct xua_msg *xua = sua_encode_daud(rctx, num_rctx, aff_pc, num_aff_pc, aff_ssn, smi, info_string); + sua_tx_xua_asp(asp, xua); +}
/*! Transmit SSNM DUPU message indicating user unavailability. * \param[in] asp ASP through which to transmit message. Must be ACTIVE. diff --git a/src/xua_internal.h b/src/xua_internal.h index b0bc98c..0061449 100644 --- a/src/xua_internal.h +++ b/src/xua_internal.h @@ -28,6 +28,9 @@ void sua_tx_snm_congestion(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *ssn, const uint8_t cong_level, const char *info_string); +void sua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn, + const uint32_t *smi, const char *info_string); void sua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
@@ -42,6 +45,8 @@ const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *concerned_dpc, const uint8_t *cong_level, const char *info_string); +void m3ua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_string); void m3ua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
@@ -95,6 +100,9 @@ void xua_snm_pc_available(struct osmo_ss7_as *as, const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_str, bool available);
+void xua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_str); + enum ss7_asp_lm_timer { /* 0 kept unused on purpose since it's handled specially by osmo_fsm */ SS7_ASP_LM_T_WAIT_ASP_UP = 1, diff --git a/src/xua_snm.c b/src/xua_snm.c index e613573..eda03c9 100644 --- a/src/xua_snm.c +++ b/src/xua_snm.c @@ -83,6 +83,21 @@ } }
+void xua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, + const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_str) +{ + switch (asp->cfg.proto) { + case OSMO_SS7_ASP_PROT_M3UA: + m3ua_tx_snm_daud(asp, rctx, num_rctx, aff_pc, num_aff_pc, info_str); + break; + case OSMO_SS7_ASP_PROT_SUA: + sua_tx_snm_daud(asp, rctx, num_rctx, aff_pc, num_aff_pc, NULL, NULL, info_str); + break; + default: + break; + } +} + static void xua_tx_upu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str) {