libosmo-sigtran
1.3.0
Osmocom SIGTRAN library
|
#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 <osmocom/sigtran/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 "xua_as_fsm.h"
#include "xua_asp_fsm.h"
#include "xua_internal.h"
#include "sccp_internal.h"
|
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) |
|
int | sua_rx_msg (struct osmo_ss7_asp *asp, struct msgb *msg) |
| process SUA message received from socket More...
|
|
◆ 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. */ |
◆ sccp_msgb_alloc()
struct msgb* sccp_msgb_alloc |
( |
const char * |
name | ) |
|
◆ sua_addr_parse()
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 gen_ret_msg(), patch_sccp_with_pc(), sccp_find_user(), sccp_scrc_rx_sclc_msg(), sccp_scrc_rx_scoc_conn_msg(), sclc_rx_cldr(), sclc_rx_cldt(), scoc_fsm_idle(), scrc_rx_mtp_xfer_ind_xua(), and scu_gen_encode_and_send().
◆ sua_addr_parse_part()
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_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_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, and osmo_sccp_addr::v4.
Referenced by sua_addr_parse(), and sua_addr_to_sccp().
◆ sua_gen_error()
static struct xua_msg* sua_gen_error |
( |
uint32_t |
err_code | ) |
|
|
static |
◆ sua_gen_error_msg()
static struct xua_msg* sua_gen_error_msg |
( |
uint32_t |
err_code, |
|
|
struct msgb * |
msg |
|
) |
| |
|
static |
◆ sua_parse_gt()
int sua_parse_gt |
( |
struct osmo_sccp_gt * |
gt, |
|
|
const uint8_t * |
data, |
|
|
unsigned int |
datalen |
|
) |
| |
◆ sua_rx_asp()
◆ sua_rx_cl()
◆ sua_rx_co()
References xua_msg::hdr, osmo_ss7_asp::inst, xua_common_hdr::msg_class, xua_common_hdr::msg_type, osmo_ss7_instance::sccp, scrc_rx_mtp_xfer_ind_xua(), 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, and SUA_MSGC_CO.
Referenced by sua_rx_msg().
◆ sua_rx_mgmt()
◆ sua_rx_mgmt_err()
◆ sua_rx_mgmt_ntfy()
◆ 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, 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, 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_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_cli_read_cb(), and xua_srv_conn_cb().
◆ sua_to_msg()
static struct msgb* sua_to_msg |
( |
struct xua_msg * |
xua | ) |
|
|
static |
◆ sua_tx_xua_as()
◆ sua_tx_xua_asp()
◆ cldr_mand_ies
const uint16_t cldr_mand_ies[] |
|
static |
◆ cldt_mand_ies
const uint16_t cldt_mand_ies[] |
|
static |
◆ coak_mand_ies
const uint16_t coak_mand_ies[] |
|
static |
◆ coda_mand_ies
const uint16_t coda_mand_ies[] |
|
static |
◆ codt_mand_ies
const uint16_t codt_mand_ies[] |
|
static |
◆ coerr_mand_ies
const uint16_t coerr_mand_ies[] |
|
static |
◆ coit_mand_ies
const uint16_t coit_mand_ies[] |
|
static |
◆ core_mand_ies
const uint16_t core_mand_ies[] |
|
static |
◆ coref_mand_ies
const uint16_t coref_mand_ies[] |
|
static |
◆ msg_class_cl
Initial value:= {
.name = "CL",
.mand_ies = {
},
}
◆ msg_class_co
Initial value:= {
.name = "CO",
.mand_ies = {
},
}
◆ relco_mand_ies
const uint16_t relco_mand_ies[] |
|
static |
◆ relre_mand_ies
const uint16_t relre_mand_ies[] |
|
static |
◆ resco_mand_ies
const uint16_t resco_mand_ies[] |
|
static |
◆ resre_mand_ies
const uint16_t resre_mand_ies[] |
|
static |
◆ sua_aspxm_map
◆ sua_cl_msgt_names
const struct value_string sua_cl_msgt_names[] |
|
static |
◆ sua_co_msgt_names
const struct value_string sua_co_msgt_names[] |
|
static |
◆ sua_iei_names
const struct value_string sua_iei_names[] |
|
static |
◆ xua_dialect_sua
Initial value:= {
.name = "SUA",
.log_subsys = DLSUA,
.class = {
},
}
Referenced by osmo_sua_to_sccp(), sccp_find_user(), sccp_sclc_rx_from_scrc(), 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(), scrc_rx_mtp_xfer_ind_xua(), sua_rx_mgmt_err(), and sua_rx_msg().
static const struct xua_msg_class msg_class_cl
Definition: sua.c:134
static const uint16_t resre_mand_ies[]
Definition: sua.c:168
#define SUA_CO_COAK
Definition: sua.h:71
static const uint16_t core_mand_ies[]
Definition: sua.c:150
#define SUA_CO_RELCO
Definition: sua.h:74
#define SUA_CL_CLDR
Definition: sua.h:68
#define SUA_CO_COREF
Definition: sua.h:72
const struct xua_msg_class m3ua_msg_class_snm
Definition: m3ua.c:175
@ XUA_ASP_E_ASPSM_BEAT
Definition: xua_asp_fsm.h:28
#define SUA_CO_CODT
Definition: sua.h:77
#define SUA_IEI_ROUTE_CTX
Definition: sua.h:83
#define SUA_ASPSM_UP_ACK
Definition: sua.h:53
#define SUA_ASPTM_ACTIVE
Definition: sua.h:57
static const uint16_t coerr_mand_ies[]
Definition: sua.c:175
#define SUA_IEI_DATA
Definition: sua.h:107
@ XUA_ASP_E_ASPTM_ASPIA
Definition: xua_asp_fsm.h:25
const struct xua_msg_class m3ua_msg_class_rkm
Definition: m3ua.c:259
#define SUA_ASPSM_BEAT_ACK
Definition: sua.h:55
#define SUA_IEI_SRC_ADDR
Definition: sua.h:98
static const uint16_t coref_mand_ies[]
Definition: sua.c:158
@ XUA_ASP_E_ASPSM_ASPDN_ACK
Definition: xua_asp_fsm.h:24
#define SUA_CL_CLDT
Definition: sua.h:67
#define SUA_IEI_SEQ_CTRL
Definition: sua.h:117
#define SUA_IEI_DEST_REF
Definition: sua.h:101
#define SUA_IEI_PROTO_CLASS
Definition: sua.h:116
#define SUA_ASPSM_BEAT
Definition: sua.h:52
@ XUA_ASP_E_ASPTM_ASPAC_ACK
Definition: xua_asp_fsm.h:22
const struct xua_msg_class m3ua_msg_class_aspsm
Definition: m3ua.c:198
static const uint16_t resco_mand_ies[]
Definition: sua.c:172
#define SUA_MSGC_CL
Definition: sua.h:35
@ XUA_ASP_E_ASPTM_ASPIA_ACK
Definition: xua_asp_fsm.h:26
static const uint16_t cldt_mand_ies[]
Definition: sua.c:121
#define SUA_ASPSM_DOWN_ACK
Definition: sua.h:54
@ XUA_ASP_E_ASPSM_ASPDN
Definition: xua_asp_fsm.h:23
static const struct value_string sua_iei_names[]
Definition: sua.c:80
static const uint16_t coak_mand_ies[]
Definition: sua.c:154
const struct xua_msg_class m3ua_msg_class_mgmt
Definition: m3ua.c:229
#define SUA_CO_RELRE
Definition: sua.h:73
@ XUA_ASP_E_ASPTM_ASPAC
Definition: xua_asp_fsm.h:21
#define SUA_ASPTM_ACTIVE_ACK
Definition: sua.h:59
static const uint16_t codt_mand_ies[]
Definition: sua.c:144
#define SUA_ASPSM_DOWN
Definition: sua.h:51
#define MAND_IES(msgt, ies)
Definition: sua.c:119
static const uint16_t relco_mand_ies[]
Definition: sua.c:165
#define SUA_MSGC_RKM
Definition: sua.h:37
@ XUA_ASP_E_ASPSM_BEAT_ACK
Definition: xua_asp_fsm.h:29
#define SUA_IEI_DEST_ADDR
Definition: sua.h:99
static const struct xua_msg_class msg_class_co
Definition: sua.c:196
@ XUA_ASP_E_ASPSM_ASPUP_ACK
Definition: xua_asp_fsm.h:20
#define SUA_MSGC_SNM
Definition: sua.h:32
#define SUA_PPID
Definition: sua.h:27
#define SUA_IEI_CAUSE
Definition: sua.h:102
static const struct value_string sua_cl_msgt_names[]
Definition: sua.c:129
#define SUA_CO_RESCO
Definition: sua.h:75
#define SUA_CO_CORE
Definition: sua.h:70
#define SUA_MSGC_MGMT
Definition: sua.h:31
@ XUA_ASP_E_ASPSM_ASPUP
Definition: xua_asp_fsm.h:19
static const uint16_t relre_mand_ies[]
Definition: sua.c:161
#define SUA_CO_COIT
Definition: sua.h:80
static const struct value_string sua_co_msgt_names[]
Definition: sua.c:182
const struct xua_msg_class m3ua_msg_class_asptm
Definition: m3ua.c:211
#define SUA_ASPSM_UP
Definition: sua.h:50
static const uint16_t cldr_mand_ies[]
Definition: sua.c:125
static const uint16_t coit_mand_ies[]
Definition: sua.c:178
#define SUA_ASPTM_INACTIVE_ACK
Definition: sua.h:60
static const uint16_t coda_mand_ies[]
Definition: sua.c:147
#define SUA_MSGC_ASPSM
Definition: sua.h:33
#define SUA_ASPTM_INACTIVE
Definition: sua.h:58
#define SUA_CO_CODA
Definition: sua.h:78
#define SUA_CO_COERR
Definition: sua.h:79
#define SUA_MSGC_ASPTM
Definition: sua.h:34
#define SUA_IEI_SRC_REF
Definition: sua.h:100
#define SUA_CO_RESRE
Definition: sua.h:76
#define SUA_PORT
Definition: sua.h:28
#define SUA_MSGC_CO
Definition: sua.h:36