|
libosmo-sigtran 2.1.0.172-a2b0
Osmocom SIGTRAN library
|
#include <errno.h>#include <osmocom/core/byteswap.h>#include <osmocom/core/linuxlist.h>#include <osmocom/core/logging.h>#include <osmocom/core/talloc.h>#include <osmocom/netif/ipa.h>#include <osmocom/sccp/sccp_types.h>#include <osmocom/sigtran/osmo_ss7.h>#include <osmocom/sigtran/protocol/m3ua.h>#include <osmocom/sigtran/protocol/sua.h>#include <osmocom/sigtran/protocol/mtp.h>#include <osmocom/sigtran/sccp_sap.h>#include <osmocom/tcap/OCTET_STRING.h>#include <osmocom/tcap/TCAP_TCMessage.h>#include "ss7_as.h"#include "ss7_as_loadshare_tcap.h"#include "tcap_transaction_tracking.h"#include "ss7_asp.h"#include "ss7_internal.h"#include "xua_internal.h"Data Structures | |
| struct | tcap_parsed |
| struct | ipa_tcap_routing_hdr |
| struct | ipa_tcap_routing_add_range |
| struct | ipa_tcap_routing_nack |
Macros | |
| #define | OTID_SET 1 << 0 |
| #define | DTID_SET 1 << 1 |
Enumerations | |
| enum | ipa_tcap_routing_msg_types { MT_TID_ADD_RANGE = 0x01 , MT_TID_ACK = 0x02 , MT_TID_NACK = 0x03 } |
| enum | ipa_tcap_routing_nack_error { NACK_ERR_SYS_FAILURE = 0x01 , NACK_ERR_EALREADY = 0x72 } |
Functions | |
| static uint32_t | tcap_id_from_octet_str (const OCTET_STRING_t *src) |
| static int | parse_tcap (struct osmo_ss7_as *as, const uint8_t *data, size_t len, struct tcap_parsed *ids) |
| static uint32_t | tcap_gen_hash (uint32_t pc, uint8_t ssn) |
| static uint64_t | tcap_gen_hash_addr (const struct osmo_sccp_addr *addr) |
| static struct osmo_ss7_asp * | tcap_hlist_get (struct osmo_ss7_as *as, uint32_t pc, uint8_t ssn, uint32_t tid) |
| struct osmo_ss7_asp * | find_asp_by_tcap_id (struct osmo_ss7_as *as, struct osmo_sccp_addr *calling_addr, struct osmo_sccp_addr *called_addr, uint32_t otid) |
| static struct tcap_range * | tcap_overlap_tid (struct osmo_ss7_as *as, uint32_t pc, uint8_t ssn, uint32_t tid_start, uint32_t tid_end) |
| static struct osmo_ss7_asp * | find_asp_no_tcap_range (struct osmo_ss7_as *as) |
| static bool | ssn_contains_tcap (uint8_t ssn) |
| int | ss7_asp_tcap_rx_sccp (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp, uint32_t opc, uint32_t dpc, struct msgb *sccp_msg) |
| Traffic from the TCAP ASP -> AS -> osmo-stp, only used to update transaction tracking. | |
| static int | sent_back_utds (struct osmo_ss7_as *as, const struct xua_msg *old_xua, const struct xua_msg *old_sua, uint8_t cause_code) |
| static int | asp_loadshare_tcap_sccp (struct osmo_ss7_asp **rasp, struct osmo_ss7_as *as, uint32_t opc, uint32_t dpc, struct xua_msg *xua, struct msgb *sccp_msg) |
| Traffic STP -> AS -> ASP (Tx path) Loadshare towards the TCAP routing AS. | |
| int | ss7_as_select_asp_loadshare_tcap (struct osmo_ss7_asp **asp, struct osmo_ss7_as *as, struct xua_msg *xua) |
| Entrypoint for M3UA messages towards the TCAP nodes. | |
| struct ipa_tcap_routing_hdr | __attribute__ ((packed)) |
| static struct msgb * | ipa_tcap_routing_alloc (uint32_t seq_nr, uint8_t mt) |
| static int | ipa_tx_tcap_routing_ack (struct osmo_ss7_asp *asp, uint32_t seq_nr) |
| static int | ipa_tx_tcap_routing_nack (struct osmo_ss7_asp *asp, uint32_t seq_nr, uint8_t err_code) |
| int | ipa_rx_msg_osmo_ext_tcap_routing (struct osmo_ss7_asp *asp, struct msgb *msg) |
| Entrypoint for IPA TCAP Routing messages, parses and handles those. | |
| bool | tcap_range_matches (const struct tcap_range *tcrng, uint32_t tid) |
| Checks if a tid matches to a specific range. | |
| bool | tcap_range_overlaps (const struct tcap_range *a, uint32_t tid_start, uint32_t tid_end) |
| Checks if a tid rnage overlaps with another range. | |
| struct tcap_range * | tcap_range_alloc (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp, uint32_t tid_start, uint32_t tid_end, uint32_t pc, uint8_t ssn) |
| Create and alloc a new TCAP range entry. | |
| void | tcap_range_free (struct tcap_range *tcrng) |
| Remove and free a single TCAP range entry. | |
| static void | tcap_range_as_update_pc_ssn (struct osmo_ss7_as *as) |
| static void | _tcap_range_asp_down (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp) |
| void | tcap_asp_down (struct osmo_ss7_asp *asp) |
| Called when the ASP is going down or free'd. | |
| void | tcap_enable (struct osmo_ss7_as *as) |
| void | tcap_disable (struct osmo_ss7_as *as) |
Variables | |
| uint8_t | mt |
| uint32_t | seq |
| uint8_t | data [0] |
| uint32_t | tid_start |
| uint32_t | tid_end |
| uint32_t | pc |
| uint8_t | ssn |
| uint8_t | err |
| #define DTID_SET 1 << 1 |
| #define OTID_SET 1 << 0 |
| struct ipa_tcap_routing_hdr __attribute__ | ( | (packed) | ) |
References asp_loadshare_tcap_sccp(), xua_msg_part::dat, data_hdr_from_m3ua(), m3ua_data_hdr::dpc, xua_msg::hdr, xua_msg_part::len, LOGPAS, M3UA_IEI_PROT_DATA, M3UA_MSGC_XFER, M3UA_XFER_DATA, xua_common_hdr::msg_class, xua_common_hdr::msg_type, MTP_SI_SCCP, NULL, m3ua_data_hdr::opc, m3ua_data_hdr::si, and xua_msg_find_tag().
|
static |
References osmo_ss7_as::tcap, tcap_range_free(), and tcap_trxn_track_free_asp_entries().
Referenced by tcap_asp_down().
|
static |
Traffic STP -> AS -> ASP (Tx path) Loadshare towards the TCAP routing AS.
| [out] | rasp | the selected ASP if any, can be NULL |
| [in] | as | |
| [in] | opc | the OPC from MTP |
| [in] | dpc | the DPC from MTP |
| [in] | sccp_msg | the SCCP message. Callee takes ownership. |
References xua_msg_part::dat, dpc, tcap_parsed::dtid, DTID_SET, find_asp_by_tcap_id(), find_asp_no_tcap_range(), xua_msg::hdr, xua_msg_part::len, LOGPAS, xua_common_hdr::msg_class, NULL, opc, OSMO_SCCP_ADDR_T_PC, OSMO_SCCP_ADDR_T_SSN, osmo_sccp_to_xua(), tcap_parsed::otid, OTID_SET, parse_tcap(), osmo_sccp_addr::pc, osmo_sccp_addr::presence, tcap_parsed::present, sent_back_utds(), osmo_sccp_addr::ssn, ssn_contains_tcap(), sua_addr_parse(), SUA_CL_CLDT, SUA_IEI_DATA, SUA_IEI_DEST_ADDR, SUA_IEI_SRC_ADDR, SUA_MSGC_CL, tcap_trxn_track_begin(), tcap_trxn_track_continue(), tcap_trxn_track_end(), xua_msg_find_tag(), and xua_msg_free().
Referenced by __attribute__().
| struct osmo_ss7_asp * find_asp_by_tcap_id | ( | struct osmo_ss7_as * | as, |
| struct osmo_sccp_addr * | calling_addr, | ||
| struct osmo_sccp_addr * | called_addr, | ||
| uint32_t | otid | ||
| ) |
References osmo_ss7_as::contains_pc, osmo_ss7_as::contains_ssn, NULL, OSMO_SCCP_ADDR_T_PC, OSMO_SCCP_ADDR_T_SSN, osmo_sccp_addr::pc, pc, osmo_sccp_addr::presence, osmo_sccp_addr::ssn, ssn, osmo_ss7_as::tcap, tcap_hlist_get(), TCAP_PC_WILDCARD, and TCAP_SSN_WILDCARD.
Referenced by asp_loadshare_tcap_sccp().
|
static |
References osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp::enabled, NULL, and osmo_ss7_asp::tcap.
Referenced by asp_loadshare_tcap_sccp().
| int ipa_rx_msg_osmo_ext_tcap_routing | ( | struct osmo_ss7_asp * | asp, |
| struct msgb * | msg | ||
| ) |
Entrypoint for IPA TCAP Routing messages, parses and handles those.
| asp | |
| msg | the message buffer. Callee takes ownership! |
References osmo_ss7_as::contains_pc, osmo_ss7_as::contains_ssn, osmo_ss7_asp::enabled, ipa_find_as_for_asp(), ipa_tx_tcap_routing_ack(), ipa_tx_tcap_routing_nack(), LOGPASP, ipa_tcap_routing_hdr::mt, MT_TID_ACK, MT_TID_ADD_RANGE, MT_TID_NACK, NACK_ERR_EALREADY, NACK_ERR_SYS_FAILURE, ipa_tcap_routing_add_range::pc, ipa_tcap_routing_hdr::seq, ipa_tcap_routing_add_range::ssn, osmo_ss7_as::tcap, osmo_ss7_asp::tcap, tcap_overlap_tid(), TCAP_PC_WILDCARD, tcap_range_alloc(), TCAP_SSN_WILDCARD, ipa_tcap_routing_add_range::tid_end, and ipa_tcap_routing_add_range::tid_start.
Referenced by ipa_rx_msg().
|
static |
References mt, ipa_tcap_routing_hdr::mt, and NULL.
Referenced by ipa_tx_tcap_routing_ack(), and ipa_tx_tcap_routing_nack().
|
static |
References ipa_tcap_routing_alloc(), MT_TID_ACK, and osmo_ss7_asp_send().
Referenced by ipa_rx_msg_osmo_ext_tcap_routing().
|
static |
References ipa_tcap_routing_alloc(), MT_TID_NACK, and osmo_ss7_asp_send().
Referenced by ipa_rx_msg_osmo_ext_tcap_routing().
|
static |
References data, tcap_parsed::dtid, DTID_SET, len, LOGPAS, tcap_parsed::otid, OTID_SET, tcap_parsed::present, and tcap_id_from_octet_str().
Referenced by asp_loadshare_tcap_sccp(), and ss7_asp_tcap_rx_sccp().
|
static |
References data_hdr_from_m3ua(), osmo_mtp_transfer_param::dpc, m3ua_data_hdr::dpc, xua_msg::hdr, osmo_ss7_as::inst, m3ua_hmdc_rx_from_l2(), m3ua_xfer_from_data(), xua_common_hdr::msg_class, xua_common_hdr::msg_type, xua_msg::mtp, NULL, osmo_mtp_transfer_param::opc, m3ua_data_hdr::opc, osmo_sua_to_sccp(), SUA_CL_CLDR, SUA_CL_CLDT, SUA_IEI_CAUSE, SUA_IEI_DATA, SUA_IEI_DEST_ADDR, SUA_IEI_PROTO_CLASS, SUA_IEI_SRC_ADDR, SUA_MSGC_CL, SUA_VERSION, xua_common_hdr::version, XUA_HDR, xua_msg_add_u32(), xua_msg_alloc(), xua_msg_copy_part(), xua_msg_free(), and xua_msg_get_u32p().
Referenced by asp_loadshare_tcap_sccp().
| int ss7_as_select_asp_loadshare_tcap | ( | struct osmo_ss7_asp ** | asp, |
| struct osmo_ss7_as * | as, | ||
| struct xua_msg * | xua | ||
| ) |
Entrypoint for M3UA messages towards the TCAP nodes.
| [out] | asp | Result pointer of the selected asp. Set to NULL if return code is != 0 |
| [in] | as | |
| [in] | xua |
Referenced by ss7_as_select_asp().
| int ss7_asp_tcap_rx_sccp | ( | struct osmo_ss7_as * | as, |
| struct osmo_ss7_asp * | asp, | ||
| uint32_t | opc, | ||
| uint32_t | dpc, | ||
| struct msgb * | sccp_msg | ||
| ) |
Traffic from the TCAP ASP -> AS -> osmo-stp, only used to update transaction tracking.
| as | |
| asp | asp sent the sccp_msg message towards osmo-stp |
| opc | M3UA opc |
| dpc | M3UA DPC |
| sccp_msg | pointer to a msg. |
References xua_msg_part::dat, dpc, tcap_parsed::dtid, DTID_SET, xua_msg::hdr, xua_msg_part::len, LOGPAS, xua_common_hdr::msg_class, NULL, opc, OSMO_SCCP_ADDR_T_PC, osmo_sccp_to_xua(), tcap_parsed::otid, OTID_SET, parse_tcap(), osmo_sccp_addr::pc, osmo_sccp_addr::presence, tcap_parsed::present, osmo_sccp_addr::ssn, ssn_contains_tcap(), sua_addr_parse(), SUA_CL_CLDT, SUA_IEI_DATA, SUA_IEI_DEST_ADDR, SUA_IEI_SRC_ADDR, SUA_MSGC_CL, tcap_trxn_track_continue(), tcap_trxn_track_create_entry(), tcap_trxn_track_end(), and xua_msg_find_tag().
Referenced by ipa_rx_msg_sccp().
|
static |
References OSMO_SCCP_SSN_AUC, OSMO_SCCP_SSN_CAP, OSMO_SCCP_SSN_EIR, OSMO_SCCP_SSN_GGSN_MAP, OSMO_SCCP_SSN_GMLC_MAP, OSMO_SCCP_SSN_gsmSCF_MAP, OSMO_SCCP_SSN_HLR, OSMO_SCCP_SSN_MAP, OSMO_SCCP_SSN_MSC, OSMO_SCCP_SSN_SGSN_MAP, OSMO_SCCP_SSN_SIWF_MAP, OSMO_SCCP_SSN_TC_TEST, OSMO_SCCP_SSN_VLR, and ssn.
Referenced by asp_loadshare_tcap_sccp(), and ss7_asp_tcap_rx_sccp().
| void tcap_asp_down | ( | struct osmo_ss7_asp * | asp | ) |
Called when the ASP is going down or free'd.
| [in] | asp | the asp which is going to be destroyed |
References _tcap_range_asp_down(), osmo_ss7_instance::as_list, osmo_ss7_as::cfg, osmo_ss7_as::contains_pc, osmo_ss7_as::contains_ssn, osmo_ss7_as::enabled, osmo_ss7_asp::enabled, osmo_ss7_as::inst, osmo_ss7_asp::inst, osmo_ss7_as::list, osmo_ss7_as::loadshare, LOGPASP, osmo_ss7_as_has_asp(), osmo_ss7_as::tcap, osmo_ss7_asp::tcap, and tcap_range_as_update_pc_ssn().
Referenced by osmo_ss7_as_del_asp(), ss7_asp_xua_srv_conn_closed_cb(), and xua_cli_close().
| void tcap_disable | ( | struct osmo_ss7_as * | as | ) |
References osmo_ss7_as::cfg, osmo_ss7_as::contains_pc, osmo_ss7_as::contains_ssn, osmo_ss7_as::enabled, osmo_ss7_as::loadshare, osmo_ss7_as::tcap, tcap_trxn_track_free_all_entries(), and tcap_trxn_track_garbage_collect_stop().
Referenced by DEFUN_USRATTR(), DEFUN_USRATTR(), DEFUN_USRATTR(), and osmo_ss7_as_destroy().
| void tcap_enable | ( | struct osmo_ss7_as * | as | ) |
References osmo_ss7_as::cfg, osmo_ss7_as::enabled, osmo_ss7_as::loadshare, osmo_ss7_as::tcap, and tcap_trxn_track_garbage_collect_start().
Referenced by DEFUN_USRATTR().
|
inlinestatic |
Referenced by tcap_gen_hash_addr(), tcap_hlist_get(), tcap_overlap_tid(), and tcap_range_alloc().
|
inlinestatic |
References OSMO_SCCP_ADDR_T_PC, OSMO_SCCP_ADDR_T_SSN, osmo_sccp_addr::pc, pc, osmo_sccp_addr::presence, osmo_sccp_addr::ssn, ssn, and tcap_gen_hash().
|
static |
References osmo_ss7_asp::list, NULL, pc, ssn, osmo_ss7_as::tcap, tcap_gen_hash(), and tcap_range_matches().
Referenced by find_asp_by_tcap_id().
|
inlinestatic |
Referenced by parse_tcap().
|
static |
References NULL, pc, ssn, osmo_ss7_as::tcap, tcap_gen_hash(), tcap_range_overlaps(), tid_end, and tid_start.
Referenced by ipa_rx_msg_osmo_ext_tcap_routing().
| struct tcap_range * tcap_range_alloc | ( | struct osmo_ss7_as * | as, |
| struct osmo_ss7_asp * | asp, | ||
| uint32_t | tid_start, | ||
| uint32_t | tid_end, | ||
| uint32_t | pc, | ||
| uint8_t | ssn | ||
| ) |
Create and alloc a new TCAP range entry.
| [in] | as | |
| [in] | asp | |
| [in] | tid_start | |
| [in] | tid_end | |
| [in] | pc | |
| [in] | ssn |
References osmo_ss7_as::list, NULL, pc, ssn, osmo_ss7_as::tcap, tcap_gen_hash(), tid_end, and tid_start.
Referenced by ipa_rx_msg_osmo_ext_tcap_routing().
|
static |
References osmo_ss7_as::contains_pc, osmo_ss7_as::contains_ssn, osmo_ss7_as::tcap, TCAP_PC_WILDCARD, and TCAP_SSN_WILDCARD.
Referenced by tcap_asp_down().
| void tcap_range_free | ( | struct tcap_range * | tcrng | ) |
Remove and free a single TCAP range entry.
| [in] | tcrng |
Referenced by _tcap_range_asp_down().
| bool tcap_range_matches | ( | const struct tcap_range * | tcrng, |
| uint32_t | tid | ||
| ) |
Checks if a tid matches to a specific range.
| tcrng | |
| tid |
Referenced by tcap_hlist_get(), and tcap_range_overlaps().
| bool tcap_range_overlaps | ( | const struct tcap_range * | a, |
| uint32_t | tid_start, | ||
| uint32_t | tid_end | ||
| ) |
Checks if a tid rnage overlaps with another range.
| a | |
| tid_start | |
| tid_end |
References tcap_range_matches(), tid_end, and tid_start.
Referenced by tcap_overlap_tid().
| uint8_t data |
Referenced by conn_tmr_cb(), dispatch_to_all_as(), int_tmr_cb(), ipa_asp_allstate(), ipa_asp_fsm_wait_id_get(), ipa_asp_fsm_wait_id_resp(), lm_active(), lm_rkm_reg(), lm_wait_notify(), load_24be(), m3ua_xfer_from_data(), msgb_put_sccp_opt(), msgb_t16l16vp_put(), osmo_sccp_tx_conn_req(), osmo_sccp_tx_conn_resp(), osmo_sccp_tx_data(), osmo_sccp_tx_disconn_data(), osmo_sccp_tx_unitdata(), osmo_sccp_tx_unitdata_ranap(), parse_tcap(), rel_tmr_cb(), rep_rel_tmr_cb(), rx_inact_tmr_cb(), sccp_longptr_part_consistent(), sccp_ptr_part_consistent(), sccp_to_xua_opt(), scoc_fsm_active(), scoc_fsm_conn_pend_in(), scoc_fsm_conn_pend_out(), scoc_fsm_idle(), scoc_fsm_wait_conn_conf(), sua_parse_gt(), tcap_trxn_track_garbage_collect_cb(), tx_inact_tmr_cb(), xua_as_fsm_active(), xua_as_fsm_inactive(), xua_as_fsm_pending(), xua_asp_allstate(), xua_asp_fsm_active(), xua_asp_fsm_down(), xua_asp_fsm_inactive(), xua_from_msg(), xua_from_msg_common(), and xua_t_ack_cb().
| uint8_t err |
| uint8_t mt |
Referenced by ipa_tcap_routing_alloc().
| uint32_t pc |
Referenced by _rout_key(), DEFUN(), DEFUN(), DEFUN(), DEFUN_ATTR(), DEFUN_ATTR(), DEFUN_ATTR(), DEFUN_ATTR(), DEFUN_ATTR(), find_asp_by_tcap_id(), format_affected_pcs_c(), gen_hash(), gen_hash_addr(), osmo_sccp_simple_server(), osmo_sccp_simple_server_add_clnt(), osmo_sccp_simple_server_on_ss7_id(), osmo_sccp_user_bind_pc(), osmo_sccp_user_find(), osmo_ss7_pc_is_local(), osmo_ss7_pc_is_valid(), osmo_ss7_pc_normalize(), osmo_ss7_pointcode_print(), osmo_ss7_pointcode_print2(), osmo_ss7_pointcode_print_buf(), pc_comp_shift_and_mask(), sccp_scmg_tx(), sccp_user_alloc(), sccp_user_bind_pc(), sccp_user_find(), ss7_combined_linkset_alloc(), ss7_linkset_find_or_create(), ss7_route_alloc(), ss7_route_create(), ss7_route_table_find_or_create_combined_linkset(), tcap_gen_hash(), tcap_gen_hash_addr(), tcap_hlist_get(), tcap_overlap_tid(), tcap_range_alloc(), tx_daud_pc(), xua_snm_pc_available_to_sccp(), xua_snm_rx_daud(), xua_snm_rx_dava(), xua_snm_rx_duna(), xua_snm_scon_to_sccp(), xua_snm_srm_pc_available(), and xua_snm_srm_pc_available_single().
| uint32_t seq |
| uint8_t ssn |
Referenced by _rout_key(), DEFUN(), find_asp_by_tcap_id(), gen_hash(), gen_hash_addr(), osmo_sccp_addr_set_ssn(), osmo_sccp_local_addr_by_instance(), osmo_sccp_user_bind(), osmo_sccp_user_bind_pc(), osmo_sccp_user_find(), sccp_scmg_rx_ssn_allowed(), sccp_scmg_rx_ssn_prohibited(), sccp_scmg_tx(), sccp_user_alloc(), sccp_user_bind_pc(), sccp_user_find(), ssn_contains_tcap(), sua_encode_daud(), sua_encode_dava(), sua_encode_duna(), sua_tx_snm_congestion(), tcap_gen_hash(), tcap_gen_hash_addr(), tcap_hlist_get(), tcap_overlap_tid(), tcap_range_alloc(), xua_snm_rx_dava(), and xua_snm_rx_duna().
| uint32_t tid_end |
Referenced by tcap_overlap_tid(), tcap_range_alloc(), and tcap_range_overlaps().
| uint32_t tid_start |
Referenced by tcap_overlap_tid(), tcap_range_alloc(), and tcap_range_overlaps().