|
libosmo-sigtran 2.2.1.4-74d0
Osmocom SIGTRAN library
|
#include <errno.h>#include <osmocom/core/bit32gen.h>#include <osmocom/core/byteswap.h>#include <osmocom/core/linuxlist.h>#include <osmocom/core/logging.h>#include <osmocom/core/rate_ctr.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 <osmocom/tcap/tcap.h>#include "mtp3_hmrt.h"#include "ss7_as.h"#include "sccp_internal.h"#include "ss7_asp.h"#include "ss7_internal.h"#include "ss7_vty.h"#include "tcap_as_loadshare.h"#include "tcap_trans_tracking.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 (const struct osmo_ss7_as *as, uint32_t pc, uint8_t ssn, uint32_t tid) |
| struct osmo_ss7_asp * | tcap_as_asp_find_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 | tcap_as_rx_sccp_asp (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. More... | |
| static int | send_back_udts (struct osmo_ss7_as *as, const struct osmo_mtp_transfer_param *orig_mtp, const struct xua_msg *orig_sua, uint8_t cause_code) |
| Send UDTS to indicate that the originating UDT could not be delivered to its destination. More... | |
| static int | asp_loadshare_tcap_sccp (struct osmo_ss7_asp **rasp, struct osmo_ss7_as *as, const struct osmo_mtp_transfer_param *mtp, struct msgb *sccp_msg) |
| Traffic STP -> AS -> ASP (Tx path) Loadshare towards the TCAP routing AS. More... | |
| int | tcap_as_select_asp_loadshare (struct osmo_ss7_asp **asp, struct osmo_ss7_as *as, const struct xua_msg *xua) |
| Entrypoint for M3UA messages towards the TCAP nodes. More... | |
| 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. More... | |
| static void | tcap_range_as_update_pc_ssn (struct osmo_ss7_as *as) |
| 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. More... | |
| void | tcap_range_free (struct tcap_range *tcrng) |
| Remove and free a single TCAP range entry. More... | |
| bool | tcap_range_matches (const struct tcap_range *tcrng, uint32_t tid) |
| Checks if a tid matches to a specific range. More... | |
| 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. More... | |
| static void | _tcap_range_asp_down (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp) |
| void | tcap_as_del_asp (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp) |
| 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) | ) |
|
static |
References tcap_range::asp, tcap_range_free(), and tcap_trans_track_entries_free_by_asp().
Referenced by tcap_as_del_asp().
|
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] | mtp | MTP routing information |
| [in] | sccp_msg | the SCCP message. Callee takes ownership. |
References osmo_ss7_as::ctrg, xua_msg_part::dat, osmo_mtp_transfer_param::dpc, tcap_parsed::dtid, DTID_SET, find_asp_no_tcap_range(), xua_msg::hdr, xua_msg_part::len, LOGPAS, xua_common_hdr::msg_class, NULL, osmo_mtp_transfer_param::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, send_back_udts(), 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_as_asp_find_by_tcap_id(), tcap_trans_track_begin(), tcap_trans_track_continue(), tcap_trans_track_end(), xua_msg_find_tag(), and xua_msg_free().
Referenced by __attribute__().
|
static |
References osmo_ss7_as::asps, osmo_ss7_as::cfg, and NULL.
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. It is kept owned by the caller. |
References tcap_range::asp, osmo_ss7_as::cfg, osmo_ss7_asp::cfg, cs7_role, CS7_ROLE_SG, ipa_find_as_for_asp(), ipa_tx_tcap_routing_ack(), ipa_tx_tcap_routing_nack(), osmo_ss7_as::loadshare, LOGPASP, osmo_ss7_as::mode, ipa_tcap_routing_hdr::mt, MT_TID_ACK, MT_TID_ADD_RANGE, MT_TID_NACK, NACK_ERR_EALREADY, NACK_ERR_SYS_FAILURE, osmo_ss7_as::name, osmo_ss7_asp::name, OSMO_SS7_AS_TMOD_LOADSHARE, osmo_ss7_as_traffic_mode_name(), ipa_tcap_routing_add_range::pc, ipa_tcap_routing_hdr::seq, ipa_tcap_routing_add_range::ssn, tcap_overlap_tid(), TCAP_PC_WILDCARD, tcap_range_alloc(), TCAP_SSN_WILDCARD, ipa_tcap_routing_add_range::tid_end, tcap_range::tid_end, ipa_tcap_routing_add_range::tid_start, and tcap_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 tcap_as_rx_sccp_asp().
|
static |
Send UDTS to indicate that the originating UDT could not be delivered to its destination.
| as | |
| orig_mtp | MTP routing information of the originating message (message that could not be delivered) |
| orig_sua | Originating message that could not be delivered |
| cause_code | the return cause of the UDTS |
References osmo_mtp_transfer_param::dpc, xua_msg::hdr, osmo_ss7_as::inst, LOGPAS, xua_common_hdr::msg_class, xua_common_hdr::msg_type, mtp3_hmrt_mtp_xfer_request_l4_to_l3(), osmo_mtp_transfer_param::opc, osmo_sua_to_sccp(), SUA_CL_CLDT, sua_gen_cldr(), SUA_IEI_PROTO_CLASS, SUA_IEI_ROUTE_CTX, SUA_MSGC_CL, xua_dialect_sua, xua_msg_dump(), xua_msg_find_tag(), xua_msg_free(), xua_msg_get_u32p(), and xua_msg_part_get_u32().
Referenced by asp_loadshare_tcap_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 tcap_as_rx_sccp_asp().
| struct osmo_ss7_asp * tcap_as_asp_find_by_tcap_id | ( | struct osmo_ss7_as * | as, |
| struct osmo_sccp_addr * | calling_addr, | ||
| struct osmo_sccp_addr * | called_addr, | ||
| uint32_t | otid | ||
| ) |
References 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, tcap_hlist_get(), TCAP_PC_WILDCARD, and TCAP_SSN_WILDCARD.
Referenced by asp_loadshare_tcap_sccp().
| void tcap_as_del_asp | ( | struct osmo_ss7_as * | as, |
| struct osmo_ss7_asp * | asp | ||
| ) |
References _tcap_range_asp_down(), and tcap_range_as_update_pc_ssn().
Referenced by common_asp_fsm_down_onenter(), and ss7_as_del_asp().
| int tcap_as_rx_sccp_asp | ( | 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_trans_track_continue(), tcap_trans_track_end(), tcap_trans_track_entry_create(), and xua_msg_find_tag().
Referenced by ipa_rx_msg_up().
| int tcap_as_select_asp_loadshare | ( | struct osmo_ss7_asp ** | asp, |
| struct osmo_ss7_as * | as, | ||
| const 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().
| void tcap_disable | ( | struct osmo_ss7_as * | as | ) |
References osmo_ss7_as::cfg, osmo_ss7_as::loadshare, tcap_trans_track_entries_free_all(), and tcap_trans_track_garbage_collect_stop().
Referenced by osmo_ss7_as_destroy().
| void tcap_enable | ( | struct osmo_ss7_as * | as | ) |
References osmo_ss7_as::cfg, osmo_ss7_as::loadshare, and tcap_trans_track_garbage_collect_start().
|
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 tcap_range::asp, osmo_ss7_asp::list, NULL, pc, tcap_range::pc, ssn, tcap_range::ssn, tcap_gen_hash(), and tcap_range_matches().
Referenced by tcap_as_asp_find_by_tcap_id().
|
inlinestatic |
Referenced by parse_tcap().
|
static |
References tcap_range::list, NULL, pc, tcap_range::pc, ssn, tcap_range::ssn, 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 tcap_range::asp, tcap_range::list, NULL, pc, tcap_range::pc, ssn, tcap_range::ssn, tcap_gen_hash(), tid_end, tcap_range::tid_end, tid_start, and tcap_range::tid_start.
Referenced by ipa_rx_msg_osmo_ext_tcap_routing().
|
static |
References tcap_range::pc, tcap_range::ssn, TCAP_PC_WILDCARD, and TCAP_SSN_WILDCARD.
Referenced by tcap_as_del_asp().
| void tcap_range_free | ( | struct tcap_range * | tcrng | ) |
Remove and free a single TCAP range entry.
| [in] | tcrng |
References tcap_range::list.
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 |
References tcap_range::tid_end, and tcap_range::tid_start.
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, tcap_range::tid_end, tid_start, and tcap_range::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_trans_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_ATTR(), format_affected_pcs_c(), gen_hash(), gen_hash_addr(), mtp_pause_ind_up_to_all_users(), mtp_prim_pause_ind_alloc(), mtp_prim_resume_ind_alloc(), mtp_resume_ind_up_to_all_users(), 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_as_asp_find_by_tcap_id(), tcap_gen_hash(), tcap_gen_hash_addr(), tcap_hlist_get(), tcap_overlap_tid(), tcap_range_alloc(), tx_daud_pc(), xua_snm_pc_available_to_mtp_users(), xua_snm_rx_daud(), xua_snm_rx_dava(), xua_snm_rx_duna(), xua_snm_scon_to_mtp_users(), xua_snm_srm_pc_available(), and xua_snm_srm_pc_available_single().
| uint32_t seq |
| uint8_t ssn |
Referenced by _rout_key(), DEFUN(), 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_as_asp_find_by_tcap_id(), 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 DEFUN(), tcap_overlap_tid(), tcap_range_alloc(), and tcap_range_overlaps().