libosmo-sigtran 2.3.0.61-fb14d
Osmocom SIGTRAN library
xua_internal.h
Go to the documentation of this file.
1#pragma once
2
3#include <unistd.h>
4#include <stdint.h>
5
6#include <osmocom/core/tdef.h>
9#include "xua_msg.h"
10
11#define M3UA_MSG_SIZE 2048
12#define M3UA_MSG_HEADROOM 512
13
14struct osmo_sccp_addr;
15struct m3ua_data_hdr;
16struct ss7_mtp3_rtlabel;
17
19 const struct xua_msg_part *param);
20int sua_addr_parse(struct osmo_sccp_addr *out, struct xua_msg *xua, uint16_t iei);
21
22int sua_parse_gt(struct osmo_sccp_gt *gt, const uint8_t *data, unsigned int datalen);
23
24struct xua_msg *osmo_sccp_to_xua(const struct msgb *msg);
25struct msgb *osmo_sua_to_sccp(const struct xua_msg *xua);
26
27int sua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg);
28
29int sua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
30void sua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
31 const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn,
32 const uint32_t *smi, const char *info_string, bool available);
33void sua_tx_snm_congestion(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
34 const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *ssn,
35 const uint8_t cong_level, const char *info_string);
36void sua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
37 const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn,
38 const uint32_t *smi, const char *info_string);
39void sua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
40 uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
41
42struct xua_msg *sua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx,
43 uint32_t dpc, uint16_t user, uint16_t cause,
44 const char *info_string);
45
46struct xua_msg *sua_gen_cldr(const struct xua_msg *xua_in, uint32_t route_ctx, uint32_t ret_cause);
47
48struct msgb *m3ua_to_msg(struct xua_msg *xua);
49int m3ua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
50void m3ua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
51 const uint32_t *aff_pc, unsigned int num_aff_pc,
52 const char *info_string, bool available);
53void m3ua_tx_snm_congestion(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
54 const uint32_t *aff_pc, unsigned int num_aff_pc,
55 const uint32_t *concerned_dpc, const uint8_t *cong_level,
56 const char *info_string);
57void m3ua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
58 const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_string);
59void m3ua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
60 uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
61
62struct xua_msg *m3ua_encode_duna(const uint32_t *rctx, unsigned int num_rctx,
63 const uint32_t *aff_pc, unsigned int num_aff_pc,
64 const char *info_string);
65struct xua_msg *m3ua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx,
66 uint32_t dpc, uint16_t user, uint16_t cause,
67 const char *info_string);
68
69void xua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
70 const uint32_t *aff_pc, unsigned int num_aff_pc,
71 const char *info_str, bool available);
72
73void xua_snm_rx_daud(struct osmo_ss7_asp *asp, const struct xua_msg *xua);
74void xua_snm_rx_duna(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua);
75void xua_snm_rx_dava(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua);
76void xua_snm_rx_dupu(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua);
77void xua_snm_rx_scon(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua);
78int m3ua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg);
79
80struct msgb *m3ua_msgb_alloc(const char *name);
81struct xua_msg *m3ua_xfer_from_data(const struct m3ua_data_hdr *data_hdr,
82 const uint8_t *data, unsigned int data_len);
83struct m3ua_data_hdr *data_hdr_from_m3ua(const struct xua_msg *xua);
85 const struct m3ua_data_hdr *mdh);
87 const struct ss7_mtp3_rtlabel *rtlb);
88
89
90extern const struct xua_msg_class m3ua_msg_class_mgmt;
91extern const struct xua_msg_class m3ua_msg_class_snm;
92extern const struct xua_msg_class m3ua_msg_class_rkm;
93extern const struct xua_msg_class m3ua_msg_class_aspsm;
94extern const struct xua_msg_class m3ua_msg_class_asptm;
98
99extern const struct xua_msg_part_class m3ua_ntfy_req_ies[];
100extern const struct xua_msg_part_class m3ua_asp_inact_ies[];
101extern const struct xua_msg_part_class m3ua_asp_act_ack_ies[];
102extern const struct xua_msg_part_class m3ua_asp_inact_ack_ies[];
103
104extern const struct value_string m3ua_snm_msgt_names[];
105extern const struct value_string m3ua_mgmt_msgt_names[];
106extern const struct value_string m3ua_asptm_msgt_names[];
107extern const struct value_string m3ua_err_names[];
108extern const struct value_string m3ua_ntfy_type_names[];
109extern const struct value_string m3ua_ntfy_stchg_names[];
110extern const struct value_string m3ua_ntfy_other_names[];
111const char *m3ua_ntfy_info_name(uint16_t ntfy_status_type, uint16_t ntfy_status_info);
112
113struct xua_msg *m3ua_encode_notify(const struct osmo_xlm_prim_notify *npar);
114int m3ua_decode_notify(struct osmo_xlm_prim_notify *npar, void *ctx,
115 const struct xua_msg *xua);
116int m3ua_rx_rkm(struct osmo_ss7_asp *asp, struct xua_msg *xua);
117
118void xua_snm_pc_available(struct osmo_ss7_as *as, const uint32_t *aff_pc,
119 unsigned int num_aff_pc, const char *info_str, bool available);
120
121void xua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
122 const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_str);
123
125 /* 0 kept unused on purpose since it's handled specially by osmo_fsm */
130 /* This must remain the last item: */
133
134extern const struct osmo_tdef ss7_asp_lm_timer_defaults[SS7_ASP_LM_TIMERS_LEN];
135
136extern const struct value_string ss7_asp_lm_timer_names[];
137static inline const char *ss7_asp_lm_timer_name(enum ss7_asp_lm_timer val)
138{ return get_value_string(ss7_asp_lm_timer_names, val); }
139
140extern struct osmo_fsm xua_default_lm_fsm;
141extern const struct value_string m3ua_rkm_reg_status_vals[];
142extern const struct value_string m3ua_rkm_dereg_status_vals[];
143extern const struct value_string m3ua_rkm_msgt_names[];
144
145int xua_as_transmit_msg(struct osmo_ss7_as *as, struct xua_msg *xua);
146
147int xua_find_as_for_asp(struct osmo_ss7_as **as, const struct osmo_ss7_asp *asp,
148 const struct xua_msg_part *rctx_ie);
149int xua_find_multiple_as_for_asp(struct osmo_ss7_as **as_array,
150 unsigned int *as_array_count,
151 unsigned int as_array_len,
152 const struct osmo_ss7_asp *asp,
153 const struct xua_msg_part *rctx_ie);
154
155struct msgb *ipa_gen_ping(void);
156struct msgb *ipa_to_msg(struct xua_msg *xua);
157int ipa_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
158int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls);
159
160int osmo_isup_party_parse(char *out_digits, size_t out_digits_size,
161 const uint8_t *in, unsigned int in_num_bytes, bool odd);
163 const uint8_t *addr, unsigned int addrlen);
164int osmo_sccp_addr_encode(struct msgb *msg, const struct osmo_sccp_addr *in);
165
166int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg);
167
168void xua_rkm_send_reg_req(struct osmo_ss7_asp *asp,
169 const struct osmo_ss7_routing_key *rkey,
170 enum osmo_ss7_as_traffic_mode traf_mode);
171void xua_rkm_send_dereg_req(struct osmo_ss7_asp *asp, uint32_t route_ctx);
uint8_t sls
Definition: m3ua.h:5
uint32_t dpc
Definition: m3ua.h:1
osmo_ss7_as_traffic_mode
Definition: osmo_ss7.h:189
uint8_t smi
Definition: sccp_scmg.h:3
Definition: m3ua.h:95
Definition: sccp_sap.h:269
Definition: sccp_sap.h:261
Definition: ss7_as.h:105
Definition: ss7_asp.h:55
Definition: osmo_ss7.h:145
Definition: sigtran_sap.h:38
Definition: ss7_route_table.h:32
Definition: xua_msg.h:76
Definition: xua_msg.h:53
Definition: xua_msg.h:42
Definition: xua_msg.h:34
uint8_t ssn
Definition: tcap_as_loadshare.c:3
uint8_t data[0]
Definition: tcap_as_loadshare.c:2
const struct value_string m3ua_rkm_reg_status_vals[]
Definition: xua_rkm.c:41
const struct value_string m3ua_ntfy_type_names[]
Definition: m3ua.c:86
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].
Definition: sua.c:1318
const struct value_string m3ua_err_names[]
Definition: m3ua.c:62
const struct xua_msg_part_class m3ua_asp_inact_ack_ies[]
Definition: m3ua.c:389
int xua_as_transmit_msg(struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_as_fsm.c:179
int sua_addr_parse(struct osmo_sccp_addr *out, struct xua_msg *xua, uint16_t iei)
parse SCCP address from given xUA message IE
Definition: sua.c:906
struct msgb * m3ua_to_msg(struct xua_msg *xua)
Definition: m3ua.c:736
int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls)
process M3UA message received from socket
Definition: ipa.c:352
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)
Transmit SSNM DUPU message indicating user unavailability.
Definition: m3ua.c:1304
int xua_find_as_for_asp(struct osmo_ss7_as **as, const struct osmo_ss7_asp *asp, const struct xua_msg_part *rctx_ie)
Find the AS for given ASP + optional routing context IE.
Definition: xua_shared.c:72
const struct value_string m3ua_rkm_msgt_names[]
Definition: m3ua.c:461
struct xua_msg * m3ua_xfer_from_data(const struct m3ua_data_hdr *data_hdr, const uint8_t *data, unsigned int data_len)
Definition: m3ua.c:554
void xua_snm_rx_duna(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua)
Definition: xua_snm.c:537
const struct value_string m3ua_asptm_msgt_names[]
Definition: m3ua.c:394
void m3ua_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 char *info_string, bool available)
Transmit SSNM DUNA/DAVA message indicating [un]availability of certain point code[s].
Definition: m3ua.c:1234
struct xua_msg * sua_gen_cldr(const struct xua_msg *xua_in, uint32_t route_ctx, uint32_t ret_cause)
Definition: sua.c:598
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].
Definition: sua.c:1266
int m3ua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua)
Send a given xUA message via a given M3UA Application Server.
Definition: m3ua.c:781
const struct value_string m3ua_ntfy_stchg_names[]
Definition: m3ua.c:92
const struct xua_msg_class m3ua_msg_class_snm
Definition: m3ua.c:310
struct msgb * ipa_to_msg(struct xua_msg *xua)
Definition: ipa.c:75
void xua_snm_rx_scon(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua)
Definition: xua_snm.c:636
int m3ua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg)
process M3UA message received from socket
Definition: m3ua.c:1076
int m3ua_decode_notify(struct osmo_xlm_prim_notify *npar, void *ctx, const struct xua_msg *xua)
RFC4666 Ch.
Definition: m3ua.c:677
int ipa_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua)
Send a given xUA message via a given IPA "Application Server".
Definition: ipa.c:132
int osmo_isup_party_parse(char *out_digits, size_t out_digits_size, const uint8_t *in, unsigned int in_num_bytes, bool odd)
Parse ISUP style address of BCD digets.
Definition: sccp2sua.c:66
struct xua_msg * m3ua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx, uint32_t dpc, uint16_t user, uint16_t cause, const char *info_string)
Definition: m3ua.c:1203
const struct osmo_tdef ss7_asp_lm_timer_defaults[SS7_ASP_LM_TIMERS_LEN]
Definition: xua_default_lm_fsm.c:103
const struct value_string m3ua_rkm_dereg_status_vals[]
Definition: xua_rkm.c:58
int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)
Definition: ss7_asp.c:1480
static const char * ss7_asp_lm_timer_name(enum ss7_asp_lm_timer val)
Definition: xua_internal.h:137
int sua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg)
process SUA message received from socket
Definition: sua.c:1079
void xua_snm_rx_dava(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua)
Definition: xua_snm.c:570
struct osmo_fsm xua_default_lm_fsm
Definition: xua_default_lm_fsm.c:621
const struct xua_msg_part_class m3ua_ntfy_req_ies[]
Definition: m3ua.c:422
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.
Definition: sua.c:689
const char * m3ua_ntfy_info_name(uint16_t ntfy_status_type, uint16_t ntfy_status_info)
Definition: m3ua.c:107
const struct xua_msg_part_class m3ua_asp_act_ack_ies[]
Definition: m3ua.c:383
void mtp3_rtlabel_to_m3ua_dh(struct m3ua_data_hdr *mdh, const struct ss7_mtp3_rtlabel *rtlb)
Definition: m3ua.c:524
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.
Definition: sua.c:1290
const struct xua_msg_class m3ua_msg_class_rkm
Definition: m3ua.c:468
int sua_addr_parse_part(struct osmo_sccp_addr *out, const struct xua_msg_part *param)
parse SCCP address from given xUA message part
Definition: sua.c:772
const struct xua_msg_part_class m3ua_rkm_dereg_rsp_deregistration_result_ies[]
Definition: m3ua.c:501
const struct value_string m3ua_mgmt_msgt_names[]
Definition: m3ua.c:429
void xua_snm_rx_daud(struct osmo_ss7_asp *asp, const struct xua_msg *xua)
Definition: xua_snm.c:449
const struct value_string m3ua_snm_msgt_names[]
Definition: m3ua.c:301
const struct xua_msg_part_class m3ua_rkm_reg_req_routing_key_ies[]
Definition: m3ua.c:481
struct xua_msg * m3ua_encode_notify(const struct osmo_xlm_prim_notify *npar)
Definition: m3ua.c:640
const struct value_string ss7_asp_lm_timer_names[]
Definition: xua_default_lm_fsm.c:120
void xua_snm_rx_dupu(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as[], unsigned int as_count, const struct xua_msg *xua)
Definition: xua_snm.c:603
const struct xua_msg_class m3ua_msg_class_aspsm
Definition: m3ua.c:356
const struct xua_msg_class m3ua_msg_class_asptm
Definition: m3ua.c:401
void m3ua_dh_to_mtp3_rtlabel(struct ss7_mtp3_rtlabel *rtlb, const struct m3ua_data_hdr *mdh)
Definition: m3ua.c:536
const struct value_string m3ua_ntfy_other_names[]
Definition: m3ua.c:100
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)
Definition: xua_snm.c:257
int m3ua_rx_rkm(struct osmo_ss7_asp *asp, struct xua_msg *xua)
Definition: xua_rkm.c:655
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)
Transmit SSNM DAUD message requesting [un]availability status of certain point code[s].
Definition: m3ua.c:1289
const struct xua_msg_part_class m3ua_asp_inact_ies[]
Definition: m3ua.c:378
void xua_rkm_send_reg_req(struct osmo_ss7_asp *asp, const struct osmo_ss7_routing_key *rkey, enum osmo_ss7_as_traffic_mode traf_mode)
Definition: xua_rkm.c:117
struct xua_msg * osmo_sccp_to_xua(const struct msgb *msg)
convert SCCP message to a SUA message
Definition: sccp2sua.c:1744
struct msgb * m3ua_msgb_alloc(const char *name)
Definition: m3ua.c:546
void xua_rkm_send_dereg_req(struct osmo_ss7_asp *asp, uint32_t route_ctx)
Definition: xua_rkm.c:144
void xua_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 char *info_str, bool available)
Definition: xua_snm.c:89
const struct xua_msg_class m3ua_msg_class_mgmt
Definition: m3ua.c:434
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)
Definition: sua.c:1234
struct xua_msg * m3ua_encode_duna(const uint32_t *rctx, unsigned int num_rctx, const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_string)
Definition: m3ua.c:1157
ss7_asp_lm_timer
Definition: xua_internal.h:124
@ SS7_ASP_LM_T_WAIT_ASP_UP
Definition: xua_internal.h:126
@ SS7_ASP_LM_TIMERS_LEN
Definition: xua_internal.h:131
@ SS7_ASP_LM_T_WAIT_NOTIFY
Definition: xua_internal.h:127
@ SS7_ASP_LM_T_WAIT_RK_REG_RESP
Definition: xua_internal.h:129
@ SS7_ASP_LM_T_WAIT_NOTIY_RKM
Definition: xua_internal.h:128
const struct xua_msg_part_class m3ua_rkm_reg_rsp_registration_result_ies[]
Definition: m3ua.c:493
struct msgb * osmo_sua_to_sccp(const struct xua_msg *xua)
convert parsed SUA message to SCCP message
Definition: sccp2sua.c:1858
int osmo_sccp_addr_encode(struct msgb *msg, const struct osmo_sccp_addr *in)
encode a SCCP address from parsed format to wire format
Definition: sccp2sua.c:240
void m3ua_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 *concerned_dpc, const uint8_t *cong_level, const char *info_string)
Transmit SSNM SCON message indicating congestion.
Definition: m3ua.c:1257
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.
Definition: sua.c:717
int osmo_sccp_addr_parse(struct osmo_sccp_addr *out, const uint8_t *addr, unsigned int addrlen)
Parse wire-encoded SCCP address into osmo_sccp_addr.
Definition: sccp2sua.c:117
struct m3ua_data_hdr * data_hdr_from_m3ua(const struct xua_msg *xua)
Definition: m3ua.c:804
struct msgb * ipa_gen_ping(void)
Definition: ipa.c:62
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)
Definition: xua_snm.c:105
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.
Definition: sua.c:1334
int xua_find_multiple_as_for_asp(struct osmo_ss7_as **as_array, unsigned int *as_array_count, unsigned int as_array_len, const struct osmo_ss7_asp *asp, const struct xua_msg_part *rctx_ie)
Find multiple AS for given ASP + optional routing context IE.
Definition: xua_shared.c:114