libosmo-sigtran 2.1.0.194-89e3 Osmocom SIGTRAN library

Macros | Functions | Variables
sua.c File Reference
`#include <stdint.h>`
`#include <errno.h>`
`#include <unistd.h>`
`#include <string.h>`
`#include <osmocom/core/utils.h>`
`#include <osmocom/core/linuxlist.h>`
`#include <osmocom/core/write_queue.h>`
`#include <osmocom/core/logging.h>`
`#include <osmocom/core/timer.h>`
`#include <osmocom/core/socket.h>`
`#include <osmocom/core/fsm.h>`
`#include <osmocom/netif/stream.h>`
`#include "xua_msg.h"`
`#include <osmocom/sigtran/sccp_sap.h>`
`#include <osmocom/sigtran/protocol/mtp.h>`
`#include <osmocom/sigtran/protocol/sua.h>`
`#include <osmocom/sigtran/protocol/m3ua.h>`
`#include <osmocom/sigtran/osmo_ss7.h>`
`#include <osmocom/sccp/sccp_types.h>`
`#include "xua_as_fsm.h"`
`#include "xua_asp_fsm.h"`
`#include "xua_internal.h"`
`#include "sccp_internal.h"`
`#include "ss7_as.h"`
`#include "ss7_asp.h"`
`#include "ss7_internal.h"`

## Macros
#define | CONNECTION_TIMER ( 1 * 60 * 100)
#define | TX_INACT_TIMER ( 7 * 60 * 100) /* RFC 3868 Ch. 8. */
#define | RX_INACT_TIMER (15 * 60 * 100) /* RFC 3868 Ch. 8. */
#define | RELEASE_TIMER ( 10 * 100)
#define | RELEASE_REP_TIMER ( 10 * 100)
#define | INT_TIMER ( 1 * 60 * 100)
#define | GUARD_TIMER (23 * 60 * 100)
#define | RESET_TIMER ( 10 * 100)
#define | SCCP_MSG_SIZE 2048
#define | SCCP_MSG_HEADROOM 512
#define | MAND_IES(msgt, ies) [msgt] = (ies)

## Functions
struct msgb * | sccp_msgb_alloc (const char *name)
static struct xua_msg * | sua_gen_error (uint32_t err_code)
static struct xua_msg * | sua_gen_error_msg (uint32_t err_code, struct msgb *msg)
static struct msgb * | sua_to_msg (struct xua_msg *xua)
static int | sua_tx_xua_asp (struct osmo_ss7_asp *asp, struct xua_msg *xua)
int | sua_tx_xua_as (struct osmo_ss7_as *as, struct xua_msg *xua)
| Send a given xUA message via a given SUA Application Server. More...
int | sua_parse_gt (struct osmo_sccp_gt *gt, const uint8_t *data, unsigned int datalen)
| Decode SUA Global Title according to RFC3868 Section 3.10.2.3. More...
int | sua_addr_parse_part (struct osmo_sccp_addr *out, const struct xua_msg_part *param)
| parse SCCP address from given xUA message part More...
int | sua_addr_parse (struct osmo_sccp_addr *out, struct xua_msg *xua, uint16_t iei)
| parse SCCP address from given xUA message IE More...
static int | sua_rx_cl (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_co (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_mgmt_err (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_mgmt_ntfy (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_mgmt (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_asp (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_snm (struct osmo_ss7_asp *asp, struct xua_msg *xua)
int | sua_rx_msg (struct osmo_ss7_asp *asp, struct msgb *msg)
| process SUA message received from socket More...
static struct xua_msg * | sua_encode_duna (const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *ssn, const uint32_t *smi, const char *info_string)
static struct xua_msg * | sua_encode_dava (const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *ssn, const uint32_t *smi, const char *info_string)
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, const uint32_t *ssn, const uint32_t *smi, const char *info_string)
static struct xua_msg * | sua_encode_dupu (const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_string)
void | sua_tx_snm_available (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, bool available)
| Transmit SSNM DUNA/DAVA message indicating [un]availability of certain point code[s]. More...
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)
| Transmit SSNM SCON message indicating congestion. More...
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)
| Transmit SSNM DAUD message requesting [un]availability status of certain point code[s]. More...
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)
| Transmit SSNM DUPU message indicating user unavailability. More...
static int | sua_rx_snm_asp (struct osmo_ss7_asp *asp, struct xua_msg *xua)
static int | sua_rx_snm_sg (struct osmo_ss7_asp *asp, struct xua_msg *xua)
const char * | osmo_sua_sccp_cause_name (uint32_t sccp_cause, char *out_buf, size_t out_buf_len)

## Variables
static const struct value_string | sua_iei_names []
static const uint16_t | cldt_mand_ies []
static const uint16_t | cldr_mand_ies []
static const struct value_string | sua_cl_msgt_names []
static const struct xua_msg_class | msg_class_cl
static const uint16_t | codt_mand_ies []
static const uint16_t | coda_mand_ies []
static const uint16_t | core_mand_ies []
static const uint16_t | coak_mand_ies []
static const uint16_t | coref_mand_ies []
static const uint16_t | relre_mand_ies []
static const uint16_t | relco_mand_ies []
static const uint16_t | resre_mand_ies []
static const uint16_t | resco_mand_ies []
static const uint16_t | coerr_mand_ies []
static const uint16_t | coit_mand_ies []
static const struct value_string | sua_co_msgt_names []
static const struct xua_msg_class | msg_class_co
const struct xua_dialect | xua_dialect_sua
static const struct xua_msg_event_map | sua_aspxm_map []
const struct value_string | sua_cause_type_names []

## Macro Definition Documentation

## ◆ CONNECTION_TIMER

#define CONNECTION_TIMER ( 1 * 60 * 100)

## ◆ GUARD_TIMER

#define GUARD_TIMER (23 * 60 * 100)

## ◆ INT_TIMER

#define INT_TIMER ( 1 * 60 * 100)

## ◆ MAND_IES

#define MAND_IES | ( |  | msgt,
|  |  | ies
| ) |  | [msgt] = (ies)

## ◆ RELEASE_REP_TIMER

#define RELEASE_REP_TIMER ( 10 * 100)

## ◆ RELEASE_TIMER

#define RELEASE_TIMER ( 10 * 100)

## ◆ RESET_TIMER

#define RESET_TIMER ( 10 * 100)

## ◆ RX_INACT_TIMER

#define RX_INACT_TIMER (15 * 60 * 100) /* RFC 3868 Ch. 8. */

## ◆ SCCP_MSG_HEADROOM

#define SCCP_MSG_HEADROOM 512

## ◆ SCCP_MSG_SIZE

#define SCCP_MSG_SIZE 2048

## ◆ TX_INACT_TIMER

#define TX_INACT_TIMER ( 7 * 60 * 100) /* RFC 3868 Ch. 8. */

## Function Documentation

## ◆ osmo_sua_sccp_cause_name()

const char * osmo_sua_sccp_cause_name | ( | uint32_t | sccp_cause,
|  | char * | out_buf,
|  | size_t | out_buf_len
| ) |  |

References NULL, SUA_CAUSE_T_ERROR, SUA_CAUSE_T_MASK, SUA_CAUSE_T_REFUSAL, SUA_CAUSE_T_RELEASE, SUA_CAUSE_T_RESET, SUA_CAUSE_T_RETURN, and sua_cause_type_names.

## ◆ sccp_msgb_alloc()

struct msgb * sccp_msgb_alloc | ( | const char * | name | ) |

References NULL, SCCP_MSG_HEADROOM, and SCCP_MSG_SIZE.

Referenced by osmo_sua_to_sccp(), sccp_lbcs_local_bcast_pcstate(), sccp_lbcs_local_bcast_state(), sccp_scmg_tx(), sclc_rx_cldr(), and sclc_rx_cldt().

## ◆ sua_addr_parse()

int sua_addr_parse | ( | struct osmo_sccp_addr * | out,
|  | struct xua_msg * | xua,
|  | uint16_t | iei
| ) |  |

parse SCCP address from given xUA message IE

Parameters

  [out] | out | caller-allocated decoded SCCP address struct
  [in] | xua | xUA message
  [in] | iei | Information Element Identifier inside xua

Returns
  0 on success; negative on error

References sua_addr_parse_part(), and xua_msg_find_tag().

Referenced by ensure_opc_in_calling_ssn(), gen_mtp_transfer_req_xua(), gen_ret_msg(), patch_sccp_with_pc(), sccp_conn_scu_gen_encode_and_send(), sccp_find_user(), sccp_scrc_rx_sclc_msg(), sccp_scrc_rx_scoc_conn_msg(), sclc_rx_cldr(), sclc_rx_cldt(), scoc_fsm_idle(), scrc_node_2(), and scrc_rx_mtp_xfer_ind_xua().

## ◆ sua_addr_parse_part()

int sua_addr_parse_part | ( | struct osmo_sccp_addr * | out,
|  | const struct xua_msg_part * | param
| ) |  |

parse SCCP address from given xUA message part

Parameters

  [out] | out | caller-allocated decoded SCCP address struct
  [in] | param | xUA message part containing address

Returns
  0 on success; negative on error

References xua_msg_part::dat, osmo_sccp_addr::gt, osmo_sccp_addr::ip, xua_msg_part::len, xua_parameter_hdr::len, OSMO_SCCP_ADDR_T_GT, OSMO_SCCP_ADDR_T_IPv4, OSMO_SCCP_ADDR_T_IPv6, OSMO_SCCP_ADDR_T_PC, OSMO_SCCP_ADDR_T_SSN, OSMO_SCCP_RI_GT, OSMO_SCCP_RI_SSN_IP, OSMO_SCCP_RI_SSN_PC, osmo_sccp_addr::pc, osmo_sccp_addr::presence, osmo_sccp_addr::ri, osmo_sccp_addr::ssn, SUA_IEI_GT, SUA_IEI_IPv4, SUA_IEI_IPv6, SUA_IEI_PC, SUA_IEI_SSN, sua_parse_gt(), SUA_RI_GT, SUA_RI_HOST, SUA_RI_SSN_IP, SUA_RI_SSN_PC, xua_msg_part::tag, xua_parameter_hdr::tag, osmo_sccp_addr::v4, and osmo_sccp_addr::v6.

Referenced by sua_addr_parse(), and sua_addr_to_sccp().

## ◆ sua_encode_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,
|  | const uint32_t * | ssn,
|  | const uint32_t * | smi,
|  | const char * | info_string
| ) |  |
| static

References xua_msg::hdr, xua_common_hdr::msg_type, smi, sua_encode_duna(), and SUA_SNM_DAUD.

Referenced by sua_tx_snm_daud().

## ◆ sua_encode_dava()

static struct xua_msg * sua_encode_dava | ( | const uint32_t * | rctx,
|  | unsigned int | num_rctx,
|  | const uint32_t * | aff_pc,
|  | unsigned int | num_aff_pc,
|  | const uint32_t * | ssn,
|  | const uint32_t * | smi,
|  | const char * | info_string
| ) |  |
| static

References xua_msg::hdr, xua_common_hdr::msg_type, smi, sua_encode_duna(), and SUA_SNM_DAVA.

Referenced by sua_tx_snm_available().

## ◆ sua_encode_duna()

static struct xua_msg * sua_encode_duna | ( | const uint32_t * | rctx,
|  | unsigned int | num_rctx,
|  | const uint32_t * | aff_pc,
|  | unsigned int | num_aff_pc,
|  | const uint32_t * | ssn,
|  | const uint32_t * | smi,
|  | const char * | info_string
| ) |  |
| static

References xua_msg::hdr, smi, SUA_IEI_AFFECTED_PC, SUA_IEI_INFO_STRING, SUA_IEI_ROUTE_CTX, SUA_IEI_SSN, SUA_MSGC_SNM, SUA_SNM_DUNA, SUA_VERSION, xua_common_hdr::version, XUA_HDR, xua_msg_add_data(), xua_msg_add_u32(), and xua_msg_alloc().

Referenced by sua_encode_daud(), sua_encode_dava(), and sua_tx_snm_available().

## ◆ sua_encode_dupu()

static struct xua_msg * sua_encode_dupu | ( | const uint32_t * | rctx,
|  | unsigned int | num_rctx,
|  | uint32_t | dpc,
|  | uint16_t | user,
|  | uint16_t | cause,
|  | const char * | info_string
| ) |  |
| static

References dpc, xua_msg::hdr, SUA_IEI_AFFECTED_PC, SUA_IEI_INFO_STRING, SUA_IEI_ROUTE_CTX, SUA_IEI_USER_CAUSE, SUA_MSGC_SNM, SUA_SNM_DUNA, SUA_VERSION, xua_common_hdr::version, XUA_HDR, xua_msg_add_data(), xua_msg_add_u32(), and xua_msg_alloc().

Referenced by sua_tx_dupu().

## ◆ sua_gen_error()

static struct xua_msg * sua_gen_error | ( | uint32_t | err_code | ) |
| static

References xua_msg::hdr, SUA_IEI_ERR_CODE, SUA_MGMT_ERR, SUA_MSGC_MGMT, SUA_VERSION, xua_common_hdr::version, XUA_HDR, xua_msg_add_u32(), and xua_msg_alloc().

Referenced by sua_gen_error_msg().

## ◆ sua_gen_error_msg()

static struct xua_msg * sua_gen_error_msg | ( | uint32_t | err_code,
|  | struct msgb * | msg
| ) |  |
| static

References sua_gen_error(), SUA_IEI_DIAG_INFO, and xua_msg_add_data().

Referenced by sua_rx_msg().

## ◆ sua_parse_gt()

int sua_parse_gt | ( | struct osmo_sccp_gt * | gt,
|  | const uint8_t * | data,
|  | unsigned int | datalen
| ) |  |

Decode SUA Global Title according to RFC3868 Section 3.10.2.3.

Parameters

  [out] | gt | User-allocated structure for decoded output
  [in] | data | binary-encoded data
  [in] | datalen | length of data in octets

References data, osmo_sccp_gt::digits, osmo_sccp_gt::gti, osmo_sccp_gt::nai, osmo_sccp_gt::npi, and osmo_sccp_gt::tt.

Referenced by sua_addr_parse_part().

## ◆ sua_rx_asp()

static int sua_rx_asp | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References xua_msg_event_map::event, osmo_ss7_asp::fi, sua_aspxm_map, SUA_ERR_UNSUPP_MSG_TYPE, and xua_msg_event_map().

Referenced by sua_rx_msg().

## ◆ sua_rx_cl()

static int sua_rx_cl | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_ss7_as::ctrg, xua_msg::hdr, osmo_ss7_as::inst, osmo_ss7_asp::inst, xua_common_hdr::msg_class, xua_common_hdr::msg_type, xua_msg::mtp, osmo_ss7_instance::sccp, scrc_rx_mtp_xfer_ind_xua(), osmo_mtp_transfer_param::sls, SS7_AS_CTR_RX_MSU_SLS_0, SS7_AS_CTR_RX_MSU_TOTAL, SUA_CL_CLDR, SUA_CL_CLDT, SUA_ERR_UNSUPP_MSG_TYPE, SUA_IEI_ROUTE_CTX, SUA_MSGC_CL, xua_find_as_for_asp(), and xua_msg_find_tag().

Referenced by sua_rx_msg().

## ◆ sua_rx_co()

static int sua_rx_co | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_ss7_as::ctrg, xua_msg::hdr, osmo_ss7_as::inst, osmo_ss7_asp::inst, xua_common_hdr::msg_class, xua_common_hdr::msg_type, xua_msg::mtp, osmo_ss7_instance::sccp, scrc_rx_mtp_xfer_ind_xua(), osmo_mtp_transfer_param::sls, SS7_AS_CTR_RX_MSU_SLS_0, SS7_AS_CTR_RX_MSU_TOTAL, SUA_CO_COAK, SUA_CO_CODA, SUA_CO_CODT, SUA_CO_COERR, SUA_CO_COIT, SUA_CO_CORE, SUA_CO_COREF, SUA_CO_RELCO, SUA_CO_RELRE, SUA_CO_RESCO, SUA_CO_RESRE, SUA_ERR_UNSUPP_MSG_TYPE, SUA_IEI_ROUTE_CTX, SUA_MSGC_CO, xua_find_as_for_asp(), and xua_msg_find_tag().

Referenced by sua_rx_msg().

## ◆ sua_rx_mgmt()

static int sua_rx_mgmt | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References xua_msg::hdr, xua_common_hdr::msg_type, SUA_ERR_UNSUPP_MSG_TYPE, SUA_MGMT_ERR, SUA_MGMT_NTFY, sua_rx_mgmt_err(), and sua_rx_mgmt_ntfy().

Referenced by sua_rx_msg().

## ◆ sua_rx_mgmt_err()

static int sua_rx_mgmt_err | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References LOGPASP, m3ua_err_names, SUA_IEI_ERR_CODE, xua_dialect_sua, xua_msg_dump(), and xua_msg_get_u32().

Referenced by sua_rx_mgmt().

## ◆ sua_rx_mgmt_ntfy()

static int sua_rx_mgmt_ntfy | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_xlm_prim_notify::info_string, LOGPASP, m3ua_decode_notify(), M3UA_NOTIFY_T_OTHER, M3UA_NOTIFY_T_STATCHG, m3ua_ntfy_other_names, m3ua_ntfy_stchg_names, m3ua_ntfy_type_names, osmo_xlm_prim_notify::status_info, and osmo_xlm_prim_notify::status_type.

Referenced by sua_rx_mgmt().

## ◆ sua_rx_msg()

int sua_rx_msg | ( | struct osmo_ss7_asp * | asp,
|  | struct msgb * | msg
| ) |  |

process SUA message received from socket

Parameters

  [in] | asp | Application Server Process receiving msg
  [in] | msg | received message buffer

Returns
  0 on success; negative on error

References osmo_ss7_asp::cfg, osmo_ss7_instance::cfg, xua_common_hdr::data, osmo_mtp_transfer_param::dpc, xua_msg::hdr, osmo_ss7_asp::inst, LOGPASP, xua_common_hdr::msg_class, xua_msg::mtp, MTP_SI_SCCP, MTP_SIO, osmo_ss7_instance::network_indicator, NULL, osmo_mtp_transfer_param::opc, OSMO_SS7_ASP_PROT_SUA, osmo_ss7_asp::proto, osmo_ss7_instance::sccp, osmo_mtp_transfer_param::sio, SUA_ERR_INVAL_STREAM_ID, SUA_ERR_INVALID_VERSION, SUA_ERR_MISSING_PARAM, SUA_ERR_PARAM_FIELD_ERR, SUA_ERR_UNSUPP_MSG_CLASS, sua_gen_error_msg(), SUA_MSGC_ASPSM, SUA_MSGC_ASPTM, SUA_MSGC_CL, SUA_MSGC_CO, SUA_MSGC_MGMT, SUA_MSGC_RKM, SUA_MSGC_SNM, sua_rx_asp(), sua_rx_cl(), sua_rx_co(), sua_rx_mgmt(), sua_rx_snm(), sua_tx_xua_asp(), SUA_VERSION, xua_common_hdr::version, xua_dialect_check_all_mand_ies(), xua_dialect_sua, xua_from_msg(), xua_hdr_dump(), and xua_msg_free().

Referenced by xua_rx_msg().

## ◆ sua_rx_snm()

static int sua_rx_snm | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_ss7_asp::cfg, osmo_ss7_asp::fi, LOGPASP, OSMO_SS7_ASP_QUIRK_SNM_INACTIVE, OSMO_SS7_ASP_ROLE_ASP, OSMO_SS7_ASP_ROLE_SG, osmo_ss7_asp::quirks, osmo_ss7_asp::role, SUA_ERR_UNEXPECTED_MSG, SUA_ERR_UNSUPP_MSG_CLASS, sua_rx_snm_asp(), sua_rx_snm_sg(), XUA_ASP_S_ACTIVE, and XUA_ASP_S_INACTIVE.

Referenced by sua_rx_msg().

## ◆ sua_rx_snm_asp()

static int sua_rx_snm_asp | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_ss7_asp::cfg, xua_msg::hdr, LOGPASP, xua_common_hdr::msg_type, NULL, OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP, osmo_ss7_asp::quirks, SUA_ERR_UNSUPP_MSG_TYPE, SUA_IEI_ROUTE_CTX, SUA_SNM_DAUD, SUA_SNM_DAVA, SUA_SNM_DRST, SUA_SNM_DUNA, SUA_SNM_DUPU, SUA_SNM_SCON, xua_find_as_for_asp(), xua_msg_find_tag(), xua_snm_rx_daud(), xua_snm_rx_dava(), xua_snm_rx_duna(), and xua_snm_rx_dupu().

Referenced by sua_rx_snm().

## ◆ sua_rx_snm_sg()

static int sua_rx_snm_sg | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References xua_msg::hdr, xua_common_hdr::msg_type, SUA_ERR_UNSUPP_MSG_TYPE, SUA_SNM_DAUD, and xua_snm_rx_daud().

Referenced by sua_rx_snm().

## ◆ sua_to_msg()

static struct msgb * sua_to_msg | ( | struct xua_msg * | xua | ) |
| static

References xua_msg::hdr, xua_common_hdr::msg_class, NULL, SUA_MSGC_CL, SUA_MSGC_CO, SUA_PPID, SUA_VERSION, and xua_to_msg().

Referenced by sua_tx_xua_asp().

## ◆ sua_tx_dupu()

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
| ) |  |

Transmit SSNM DUPU message indicating user unavailability.

Parameters

  [in] | asp | ASP through which to transmit message. Must be ACTIVE.
  [in] | rctx | array of Routing Contexts in network byte order.
  [in] | num_rctx | number of rctx
  [in] | dpc | affected point code
  [in] | user | the user (SI) that is unavailable
  [in] | cause | the cause of the user unavailability
  [in] | info_string | optional information string (can be NULL).

References dpc, sua_encode_dupu(), and sua_tx_xua_asp().

Referenced by xua_tx_upu().

## ◆ sua_tx_snm_available()

void sua_tx_snm_available | ( | 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,
|  | bool | available
| ) |  |

Transmit SSNM DUNA/DAVA message indicating [un]availability of certain point code[s].

Parameters

  [in] | asp | ASP through which to transmit message. Must be ACTIVE.
  [in] | rctx | array of Routing Contexts in network byte order.
  [in] | num_rctx | number of rctx
  [in] | aff_pc | array of 'Affected Point Code' in network byte order.
  [in] | num_aff_pc | number of aff_pc
  [in] | aff_ssn | affected SSN (optional)
  [in] | smi | subsystem multiplicity indicator (optional)
  [in] | info_string | optional information strng (can be NULL).
  [in] | available | are aff_pc now available (true) or unavailable (false)

References smi, sua_encode_dava(), sua_encode_duna(), and sua_tx_xua_asp().

Referenced by sua_snm_ssn_available(), and xua_tx_snm_available().

## ◆ sua_tx_snm_congestion()

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
| ) |  |

Transmit SSNM SCON message indicating congestion.

Parameters

  [in] | asp | ASP through which to transmit message. Must be ACTIVE.
  [in] | rctx | array of Routing Contexts in network byte order.
  [in] | num_rctx | number of rctx
  [in] | aff_pc | array of 'Affected Point Code' in network byte order.
  [in] | num_aff_pc | number of aff_pc
  [in] | ssn | optional SSN (can be NULL)
  [in] | cong_level | optional congestion level (can be NULL)
  [in] | info_string | optional information string (can be NULL).

References xua_msg::hdr, SUA_IEI_AFFECTED_PC, SUA_IEI_CONG_LEVEL, SUA_IEI_INFO_STRING, SUA_IEI_ROUTE_CTX, SUA_IEI_SSN, SUA_MSGC_SNM, SUA_SNM_SCON, SUA_VERSION, xua_common_hdr::version, XUA_HDR, xua_msg_add_data(), xua_msg_add_u32(), and xua_msg_alloc().

Referenced by xua_tx_scon().

## ◆ sua_tx_snm_daud()

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
| ) |  |

Transmit SSNM DAUD message requesting [un]availability status of certain point code[s].

Parameters

  [in] | asp | ASP through which to transmit message. Must be ACTIVE.
  [in] | rctx | array of Routing Contexts in network byte order.
  [in] | num_rctx | number of rctx
  [in] | aff_pc | array of 'Affected Point Code' in network byte order.
  [in] | num_aff_pc | number of aff_pc
  [in] | aff_ssn | affected SSN (optional)
  [in] | smi | subsystem multiplicity indicator (optional)
  [in] | info_string | optional information string (can be NULL).

References smi, sua_encode_daud(), and sua_tx_xua_asp().

Referenced by xua_tx_snm_daud().

## ◆ sua_tx_xua_as()

int sua_tx_xua_as | ( | struct osmo_ss7_as * | as,
|  | struct xua_msg * | xua
| ) |  |

Send a given xUA message via a given SUA Application Server.

Parameters

  [in] | as | Application Server through which to send xua
  [in] | xua | xUA message to be sent

Returns
  0 on success; negative on error

References osmo_ss7_as::cfg, osmo_ss7_routing_key::context, osmo_ss7_as::fi, OSMO_SS7_ASP_PROT_SUA, osmo_ss7_as::proto, osmo_ss7_as::routing_key, SUA_IEI_ROUTE_CTX, XUA_AS_E_TRANSFER_REQ, xua_msg_add_u32(), and xua_msg_free().

Referenced by gen_mtp_transfer_req_xua().

## ◆ sua_tx_xua_asp()

static int sua_tx_xua_asp | ( | struct osmo_ss7_asp * | asp,
|  | struct xua_msg * | xua
| ) |  |
| static

References osmo_ss7_asp::cfg, OSMO_SS7_ASP_PROT_SUA, osmo_ss7_asp_send(), osmo_ss7_asp::proto, sua_to_msg(), and xua_msg_free().

Referenced by sua_rx_msg(), sua_tx_dupu(), sua_tx_snm_available(), and sua_tx_snm_daud().

## Variable Documentation

## ◆ cldr_mand_ies

const uint16_t cldr_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_CAUSE, SUA_IEI_SRC_ADDR,
SUA_IEI_DEST_ADDR, 0
}
SUA_IEI_DEST_ADDR
#define SUA_IEI_DEST_ADDR
Definition: sua.h:100
SUA_IEI_SRC_ADDR
#define SUA_IEI_SRC_ADDR
Definition: sua.h:99
SUA_IEI_CAUSE
#define SUA_IEI_CAUSE
Definition: sua.h:103
SUA_IEI_ROUTE_CTX
#define SUA_IEI_ROUTE_CTX
Definition: sua.h:84

## ◆ cldt_mand_ies

const uint16_t cldt_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_PROTO_CLASS, SUA_IEI_SRC_ADDR,
SUA_IEI_DEST_ADDR, SUA_IEI_SEQ_CTRL, SUA_IEI_DATA, 0
}
SUA_IEI_SEQ_CTRL
#define SUA_IEI_SEQ_CTRL
Definition: sua.h:118
SUA_IEI_PROTO_CLASS
#define SUA_IEI_PROTO_CLASS
Definition: sua.h:117
SUA_IEI_DATA
#define SUA_IEI_DATA
Definition: sua.h:108

## ◆ coak_mand_ies

const uint16_t coak_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_PROTO_CLASS, SUA_IEI_DEST_REF,
SUA_IEI_SRC_REF, SUA_IEI_SEQ_CTRL, 0
}
SUA_IEI_DEST_REF
#define SUA_IEI_DEST_REF
Definition: sua.h:102
SUA_IEI_SRC_REF
#define SUA_IEI_SRC_REF
Definition: sua.h:101

## ◆ coda_mand_ies

const uint16_t coda_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, 0
}

## ◆ codt_mand_ies

const uint16_t codt_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_DATA, 0
}

## ◆ coerr_mand_ies

const uint16_t coerr_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_CAUSE, 0
}

## ◆ coit_mand_ies

const uint16_t coit_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_PROTO_CLASS, SUA_IEI_SRC_REF,
SUA_IEI_DEST_REF, 0
}

## ◆ core_mand_ies

const uint16_t core_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_PROTO_CLASS, SUA_IEI_SRC_REF,
SUA_IEI_DEST_ADDR, SUA_IEI_SEQ_CTRL, 0
}

## ◆ coref_mand_ies

const uint16_t coref_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_CAUSE, 0
}

## ◆ msg_class_cl

const struct xua_msg_class msg_class_cl
| static

Initial value:
= {
.name = "CL",
.msgt_names = sua_cl_msgt_names,
.iei_names = sua_iei_names,
.mand_ies = {
MAND_IES(SUA_CL_CLDT, cldt_mand_ies),
MAND_IES(SUA_CL_CLDR, cldr_mand_ies),
},
}
sua_iei_names
static const struct value_string sua_iei_names[]
Definition: sua.c:84
sua_cl_msgt_names
static const struct value_string sua_cl_msgt_names[]
Definition: sua.c:133
cldr_mand_ies
static const uint16_t cldr_mand_ies[]
Definition: sua.c:129
cldt_mand_ies
static const uint16_t cldt_mand_ies[]
Definition: sua.c:125
MAND_IES
#define MAND_IES(msgt, ies)
Definition: sua.c:123
SUA_CL_CLDR
#define SUA_CL_CLDR
Definition: sua.h:69
SUA_CL_CLDT
#define SUA_CL_CLDT
Definition: sua.h:68

## ◆ msg_class_co

const struct xua_msg_class msg_class_co
| static

Initial value:
= {
.name = "CO",
.msgt_names = sua_co_msgt_names,
.iei_names = sua_iei_names,
.mand_ies = {
MAND_IES(SUA_CO_CODT, codt_mand_ies),
MAND_IES(SUA_CO_CODA, coda_mand_ies),
MAND_IES(SUA_CO_CORE, core_mand_ies),
MAND_IES(SUA_CO_COAK, coak_mand_ies),
MAND_IES(SUA_CO_COREF, coref_mand_ies),
MAND_IES(SUA_CO_RELRE, relre_mand_ies),
MAND_IES(SUA_CO_RELCO, relco_mand_ies),
MAND_IES(SUA_CO_RESRE, resre_mand_ies),
MAND_IES(SUA_CO_RESCO, resco_mand_ies),
MAND_IES(SUA_CO_COERR, coerr_mand_ies),
MAND_IES(SUA_CO_COIT, coit_mand_ies),
},
}
coak_mand_ies
static const uint16_t coak_mand_ies[]
Definition: sua.c:158
sua_co_msgt_names
static const struct value_string sua_co_msgt_names[]
Definition: sua.c:188
core_mand_ies
static const uint16_t core_mand_ies[]
Definition: sua.c:154
coerr_mand_ies
static const uint16_t coerr_mand_ies[]
Definition: sua.c:179
relre_mand_ies
static const uint16_t relre_mand_ies[]
Definition: sua.c:165
resco_mand_ies
static const uint16_t resco_mand_ies[]
Definition: sua.c:176
relco_mand_ies
static const uint16_t relco_mand_ies[]
Definition: sua.c:169
coit_mand_ies
static const uint16_t coit_mand_ies[]
Definition: sua.c:182
coref_mand_ies
static const uint16_t coref_mand_ies[]
Definition: sua.c:162
coda_mand_ies
static const uint16_t coda_mand_ies[]
Definition: sua.c:151
codt_mand_ies
static const uint16_t codt_mand_ies[]
Definition: sua.c:148
resre_mand_ies
static const uint16_t resre_mand_ies[]
Definition: sua.c:172
SUA_CO_CORE
#define SUA_CO_CORE
Definition: sua.h:71
SUA_CO_COREF
#define SUA_CO_COREF
Definition: sua.h:73
SUA_CO_RELCO
#define SUA_CO_RELCO
Definition: sua.h:75
SUA_CO_RESRE
#define SUA_CO_RESRE
Definition: sua.h:77
SUA_CO_CODA
#define SUA_CO_CODA
Definition: sua.h:79
SUA_CO_RESCO
#define SUA_CO_RESCO
Definition: sua.h:76
SUA_CO_COIT
#define SUA_CO_COIT
Definition: sua.h:81
SUA_CO_COERR
#define SUA_CO_COERR
Definition: sua.h:80
SUA_CO_RELRE
#define SUA_CO_RELRE
Definition: sua.h:74
SUA_CO_CODT
#define SUA_CO_CODT
Definition: sua.h:78
SUA_CO_COAK
#define SUA_CO_COAK
Definition: sua.h:72

## ◆ relco_mand_ies

const uint16_t relco_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_SRC_REF, 0
}

## ◆ relre_mand_ies

const uint16_t relre_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_SRC_REF,
SUA_IEI_CAUSE, 0
}

## ◆ resco_mand_ies

const uint16_t resco_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_SRC_REF, 0
}

## ◆ resre_mand_ies

const uint16_t resre_mand_ies[]
| static

Initial value:
= {
SUA_IEI_ROUTE_CTX, SUA_IEI_DEST_REF, SUA_IEI_SRC_REF,
SUA_IEI_CAUSE, 0
}

## ◆ sua_aspxm_map

const struct xua_msg_event_map sua_aspxm_map[]
| static

Initial value:
= {
{ SUA_MSGC_ASPSM, SUA_ASPSM_UP, XUA_ASP_E_ASPSM_ASPUP },
{ SUA_MSGC_ASPSM, SUA_ASPSM_DOWN, XUA_ASP_E_ASPSM_ASPDN },
{ SUA_MSGC_ASPSM, SUA_ASPSM_BEAT, XUA_ASP_E_ASPSM_BEAT },
{ SUA_MSGC_ASPSM, SUA_ASPSM_UP_ACK, XUA_ASP_E_ASPSM_ASPUP_ACK },
{ SUA_MSGC_ASPSM, SUA_ASPSM_DOWN_ACK, XUA_ASP_E_ASPSM_ASPDN_ACK },
{ SUA_MSGC_ASPSM, SUA_ASPSM_BEAT_ACK, XUA_ASP_E_ASPSM_BEAT_ACK },
{ SUA_MSGC_ASPTM, SUA_ASPTM_ACTIVE, XUA_ASP_E_ASPTM_ASPAC },
{ SUA_MSGC_ASPTM, SUA_ASPTM_INACTIVE, XUA_ASP_E_ASPTM_ASPIA },
{ SUA_MSGC_ASPTM, SUA_ASPTM_ACTIVE_ACK, XUA_ASP_E_ASPTM_ASPAC_ACK },
{ SUA_MSGC_ASPTM, SUA_ASPTM_INACTIVE_ACK, XUA_ASP_E_ASPTM_ASPIA_ACK },
}
SUA_ASPSM_UP
#define SUA_ASPSM_UP
Definition: sua.h:51
SUA_ASPSM_DOWN_ACK
#define SUA_ASPSM_DOWN_ACK
Definition: sua.h:55
SUA_ASPSM_DOWN
#define SUA_ASPSM_DOWN
Definition: sua.h:52
SUA_ASPSM_BEAT
#define SUA_ASPSM_BEAT
Definition: sua.h:53
SUA_ASPSM_BEAT_ACK
#define SUA_ASPSM_BEAT_ACK
Definition: sua.h:56
SUA_MSGC_ASPTM
#define SUA_MSGC_ASPTM
Definition: sua.h:35
SUA_ASPTM_ACTIVE
#define SUA_ASPTM_ACTIVE
Definition: sua.h:58
SUA_ASPTM_ACTIVE_ACK
#define SUA_ASPTM_ACTIVE_ACK
Definition: sua.h:60
SUA_ASPTM_INACTIVE
#define SUA_ASPTM_INACTIVE
Definition: sua.h:59
SUA_ASPTM_INACTIVE_ACK
#define SUA_ASPTM_INACTIVE_ACK
Definition: sua.h:61
SUA_MSGC_ASPSM
#define SUA_MSGC_ASPSM
Definition: sua.h:34
SUA_ASPSM_UP_ACK
#define SUA_ASPSM_UP_ACK
Definition: sua.h:54
XUA_ASP_E_ASPTM_ASPAC_ACK
@ XUA_ASP_E_ASPTM_ASPAC_ACK
Definition: xua_asp_fsm.h:22
XUA_ASP_E_ASPSM_BEAT_ACK
@ XUA_ASP_E_ASPSM_BEAT_ACK
Definition: xua_asp_fsm.h:29
XUA_ASP_E_ASPSM_ASPDN
@ XUA_ASP_E_ASPSM_ASPDN
Definition: xua_asp_fsm.h:23
XUA_ASP_E_ASPSM_ASPUP
@ XUA_ASP_E_ASPSM_ASPUP
Definition: xua_asp_fsm.h:19
XUA_ASP_E_ASPSM_ASPDN_ACK
@ XUA_ASP_E_ASPSM_ASPDN_ACK
Definition: xua_asp_fsm.h:24
XUA_ASP_E_ASPSM_ASPUP_ACK
@ XUA_ASP_E_ASPSM_ASPUP_ACK
Definition: xua_asp_fsm.h:20
XUA_ASP_E_ASPTM_ASPAC
@ XUA_ASP_E_ASPTM_ASPAC
Definition: xua_asp_fsm.h:21
XUA_ASP_E_ASPTM_ASPIA_ACK
@ XUA_ASP_E_ASPTM_ASPIA_ACK
Definition: xua_asp_fsm.h:26
XUA_ASP_E_ASPTM_ASPIA
@ XUA_ASP_E_ASPTM_ASPIA
Definition: xua_asp_fsm.h:25
XUA_ASP_E_ASPSM_BEAT
@ XUA_ASP_E_ASPSM_BEAT
Definition: xua_asp_fsm.h:28

Referenced by sua_rx_asp().

## ◆ sua_cause_type_names

const struct value_string sua_cause_type_names[]

Initial value:
= {
{ SUA_CAUSE_T_RETURN, "Return Cause" },
{ SUA_CAUSE_T_REFUSAL, "Refusal Cause" },
{ SUA_CAUSE_T_RELEASE, "Release Cause" },
{ SUA_CAUSE_T_RESET, "Reset Cause" },
{ SUA_CAUSE_T_ERROR, "Error Cause" },
{}
}
SUA_CAUSE_T_REFUSAL
#define SUA_CAUSE_T_REFUSAL
Definition: sua.h:137
SUA_CAUSE_T_ERROR
#define SUA_CAUSE_T_ERROR
Definition: sua.h:140
SUA_CAUSE_T_RELEASE
#define SUA_CAUSE_T_RELEASE
Definition: sua.h:138
SUA_CAUSE_T_RETURN
#define SUA_CAUSE_T_RETURN
Definition: sua.h:136
SUA_CAUSE_T_RESET
#define SUA_CAUSE_T_RESET
Definition: sua.h:139

Referenced by osmo_sua_sccp_cause_name().

## ◆ sua_cl_msgt_names

const struct value_string sua_cl_msgt_names[]
| static

Initial value:
= {
{ SUA_CL_CLDT, "CLDT" },
{ SUA_CL_CLDR, "CLDR" },
{ 0, NULL }
}
NULL
int and can be left NULL
Definition: osmo_ss7.h:364

## ◆ sua_co_msgt_names

const struct value_string sua_co_msgt_names[]
| static

Initial value:
= {
{ SUA_CO_CODT, "CODT" },
{ SUA_CO_CODA, "CODA" },
{ SUA_CO_CORE, "CORE" },
{ SUA_CO_COAK, "COAK" },
{ SUA_CO_COREF, "COREF" },
{ SUA_CO_RELRE, "RELRE" },
{ SUA_CO_RELCO, "RELCO" },
{ SUA_CO_RESRE, "RESRE" },
{ SUA_CO_RESCO, "RESCO" },
{ SUA_CO_COERR, "COERR" },
{ SUA_CO_COIT, "COIT" },
{ 0, NULL }
}

## ◆ sua_iei_names

const struct value_string sua_iei_names[]
| static

## ◆ xua_dialect_sua

const struct xua_dialect xua_dialect_sua

Initial value:
= {
.name = "SUA",
.ppid = SUA_PPID,
.port = SUA_PORT,
.log_subsys = DLSUA,
.class = {
[SUA_MSGC_MGMT] = &m3ua_msg_class_mgmt,
[SUA_MSGC_SNM] = &m3ua_msg_class_snm,
[SUA_MSGC_ASPSM] = &m3ua_msg_class_aspsm,
[SUA_MSGC_ASPTM] = &m3ua_msg_class_asptm,
[SUA_MSGC_CL] = &msg_class_cl,
[SUA_MSGC_CO] = &msg_class_co,
[SUA_MSGC_RKM] = &m3ua_msg_class_rkm,
},
}
m3ua_msg_class_snm
const struct xua_msg_class m3ua_msg_class_snm
Definition: m3ua.c:191
m3ua_msg_class_rkm
const struct xua_msg_class m3ua_msg_class_rkm
Definition: m3ua.c:275
m3ua_msg_class_aspsm
const struct xua_msg_class m3ua_msg_class_aspsm
Definition: m3ua.c:214
m3ua_msg_class_asptm
const struct xua_msg_class m3ua_msg_class_asptm
Definition: m3ua.c:227
m3ua_msg_class_mgmt
const struct xua_msg_class m3ua_msg_class_mgmt
Definition: m3ua.c:245
msg_class_cl
static const struct xua_msg_class msg_class_cl
Definition: sua.c:138
msg_class_co
static const struct xua_msg_class msg_class_co
Definition: sua.c:202
SUA_MSGC_CL
#define SUA_MSGC_CL
Definition: sua.h:36
SUA_MSGC_RKM
#define SUA_MSGC_RKM
Definition: sua.h:38
SUA_MSGC_CO
#define SUA_MSGC_CO
Definition: sua.h:37
SUA_PORT
#define SUA_PORT
Definition: sua.h:29
SUA_MSGC_MGMT
#define SUA_MSGC_MGMT
Definition: sua.h:32
SUA_PPID
#define SUA_PPID
Definition: sua.h:28
SUA_MSGC_SNM
#define SUA_MSGC_SNM
Definition: sua.h:33

Referenced by ensure_opc_in_calling_ssn(), m3ua_rx_xfer(), osmo_sua_to_sccp(), sccp_conn_opt_data_send_cache(), sccp_conn_scu_gen_encode_and_send(), sccp_find_user(), sccp_rout_fail_enqueue(), sccp_sclc_rx_from_scrc(), sccp_sclc_rx_scrc_rout_fail(), sccp_scoc_rx_from_scrc(), sccp_scoc_rx_inval_opc(), sccp_scoc_rx_inval_src_ref(), sccp_scoc_rx_scrc_rout_fail(), sccp_scoc_rx_unass_local_ref(), sccp_scrc_rx_sclc_msg(), sccp_scrc_rx_scoc_conn_msg(), sclc_rx_cldr(), sclc_rx_cldt(), scoc_fsm_idle(), scrc_node_2(), scrc_rx_mtp_xfer_ind_xua(), sua_rx_mgmt_err(), and sua_rx_msg().