libosmo-sigtran  2.2.1.6-907ee.202601311800
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>
8 #include "xua_msg.h"
9 
10 #define M3UA_MSG_SIZE 2048
11 #define M3UA_MSG_HEADROOM 512
12 
13 struct osmo_sccp_addr;
14 struct m3ua_data_hdr;
15 
16 int sua_addr_parse_part(struct osmo_sccp_addr *out,
17  const struct xua_msg_part *param);
18 int sua_addr_parse(struct osmo_sccp_addr *out, struct xua_msg *xua, uint16_t iei);
19 
20 int sua_parse_gt(struct osmo_sccp_gt *gt, const uint8_t *data, unsigned int datalen);
21 
22 struct xua_msg *osmo_sccp_to_xua(const struct msgb *msg);
23 struct msgb *osmo_sua_to_sccp(const struct xua_msg *xua);
24 
25 int sua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg);
26 
27 int sua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
28 void sua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
29  const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn,
30  const uint32_t *smi, const char *info_string, bool available);
31 void sua_tx_snm_congestion(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
32  const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *ssn,
33  const uint8_t cong_level, const char *info_string);
34 void sua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
35  const uint32_t *aff_pc, unsigned int num_aff_pc, const uint32_t *aff_ssn,
36  const uint32_t *smi, const char *info_string);
37 void sua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
38  uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
39 
40 struct xua_msg *sua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx,
41  uint32_t dpc, uint16_t user, uint16_t cause,
42  const char *info_string);
43 
44 struct xua_msg *sua_gen_cldr(const struct xua_msg *xua_in, uint32_t route_ctx, uint32_t ret_cause);
45 
46 struct msgb *m3ua_to_msg(struct xua_msg *xua);
47 int m3ua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
48 void m3ua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
49  const uint32_t *aff_pc, unsigned int num_aff_pc,
50  const char *info_string, bool available);
51 void m3ua_tx_snm_congestion(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
52  const uint32_t *aff_pc, unsigned int num_aff_pc,
53  const uint32_t *concerned_dpc, const uint8_t *cong_level,
54  const char *info_string);
55 void m3ua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
56  const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_string);
57 void m3ua_tx_dupu(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
58  uint32_t dpc, uint16_t user, uint16_t cause, const char *info_str);
59 
60 struct xua_msg *m3ua_encode_duna(const uint32_t *rctx, unsigned int num_rctx,
61  const uint32_t *aff_pc, unsigned int num_aff_pc,
62  const char *info_string);
63 struct xua_msg *m3ua_encode_dupu(const uint32_t *rctx, unsigned int num_rctx,
64  uint32_t dpc, uint16_t user, uint16_t cause,
65  const char *info_string);
66 
67 void xua_tx_snm_available(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
68  const uint32_t *aff_pc, unsigned int num_aff_pc,
69  const char *info_str, bool available);
70 
71 void xua_snm_rx_daud(struct osmo_ss7_asp *asp, struct xua_msg *xua);
72 void xua_snm_rx_duna(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua);
73 void xua_snm_rx_dava(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua);
74 void xua_snm_rx_dupu(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua);
75 void xua_snm_rx_scon(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua);
76 int m3ua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg);
77 
78 struct msgb *m3ua_msgb_alloc(const char *name);
79 struct xua_msg *m3ua_xfer_from_data(const struct m3ua_data_hdr *data_hdr,
80  const uint8_t *data, unsigned int data_len);
81 struct m3ua_data_hdr *data_hdr_from_m3ua(const struct xua_msg *xua);
83  const struct m3ua_data_hdr *mdh);
85  const struct osmo_mtp_transfer_param *param);
86 
87 
88 extern const struct xua_msg_class m3ua_msg_class_mgmt;
89 extern const struct xua_msg_class m3ua_msg_class_snm;
90 extern const struct xua_msg_class m3ua_msg_class_rkm;
91 extern const struct xua_msg_class m3ua_msg_class_aspsm;
92 extern const struct xua_msg_class m3ua_msg_class_asptm;
93 
94 extern const struct value_string m3ua_err_names[];
95 extern const struct value_string m3ua_ntfy_type_names[];
96 extern const struct value_string m3ua_ntfy_stchg_names[];
97 extern const struct value_string m3ua_ntfy_other_names[];
98 const char *m3ua_ntfy_info_name(uint16_t ntfy_status_type, uint16_t ntfy_status_info);
99 
100 struct xua_msg *m3ua_encode_notify(const struct osmo_xlm_prim_notify *npar);
101 int m3ua_decode_notify(struct osmo_xlm_prim_notify *npar, void *ctx,
102  const struct xua_msg *xua);
103 int m3ua_rx_rkm(struct osmo_ss7_asp *asp, struct xua_msg *xua);
104 
106  enum osmo_prim_operation op);
107 
108 void xua_asp_send_xlm_prim(struct osmo_ss7_asp *asp, struct osmo_xlm_prim *prim);
110  enum osmo_xlm_prim_type prim_type,
111  enum osmo_prim_operation op);
112 
113 void xua_snm_pc_available(struct osmo_ss7_as *as, const uint32_t *aff_pc,
114  unsigned int num_aff_pc, const char *info_str, bool available);
115 
116 void xua_tx_snm_daud(struct osmo_ss7_asp *asp, const uint32_t *rctx, unsigned int num_rctx,
117  const uint32_t *aff_pc, unsigned int num_aff_pc, const char *info_str);
118 
120  /* 0 kept unused on purpose since it's handled specially by osmo_fsm */
125  /* This must remain the last item: */
127 };
128 
129 extern const struct osmo_tdef ss7_asp_lm_timer_defaults[SS7_ASP_LM_TIMERS_LEN];
130 
131 extern const struct value_string ss7_asp_lm_timer_names[];
132 static inline const char *ss7_asp_lm_timer_name(enum ss7_asp_lm_timer val)
133 { return get_value_string(ss7_asp_lm_timer_names, val); }
134 
135 extern struct osmo_fsm xua_default_lm_fsm;
136 extern const struct value_string m3ua_rkm_reg_status_vals[];
137 extern const struct value_string m3ua_rkm_dereg_status_vals[];
138 
139 int xua_as_transmit_msg(struct osmo_ss7_as *as, struct xua_msg *xua);
140 
141 int xua_find_as_for_asp(struct osmo_ss7_as **as, const struct osmo_ss7_asp *asp,
142  const struct xua_msg_part *rctx_ie);
143 
144 struct msgb *ipa_gen_ping(void);
145 struct msgb *ipa_to_msg(struct xua_msg *xua);
146 int ipa_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
147 int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls);
148 struct osmo_ss7_as *ipa_find_as_for_asp(struct osmo_ss7_asp *asp);
149 
150 int osmo_isup_party_parse(char *out_digits, const uint8_t *in,
151  unsigned int in_num_bytes, bool odd);
152 int osmo_sccp_addr_parse(struct osmo_sccp_addr *out,
153  const uint8_t *addr, unsigned int addrlen);
154 int osmo_sccp_addr_encode(struct msgb *msg, const struct osmo_sccp_addr *in);
155 
156 int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg);
uint8_t sls
Definition: m3ua.h:5
uint32_t dpc
Definition: m3ua.h:1
uint8_t smi
Definition: sccp_scmg.h:3
osmo_xlm_prim_type
Definition: sigtran_sap.h:13
Definition: m3ua.h:95
Definition: mtp_sap.h:42
Definition: sccp_sap.h:183
Definition: sccp_sap.h:175
Definition: ss7_as.h:86
Definition: ss7_asp.h:45
Definition: sigtran_sap.h:37
Definition: sigtran_sap.h:67
Definition: xua_msg.h:49
Definition: xua_msg.h:39
Definition: xua_msg.h:31
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:40
const struct value_string m3ua_ntfy_type_names[]
Definition: m3ua.c:83
void xua_snm_rx_scon(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_snm.c:591
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:973
const struct value_string m3ua_err_names[]
Definition: m3ua.c:59
void xua_snm_rx_dupu(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_snm.c:557
int xua_as_transmit_msg(struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_as_fsm.c:191
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:555
int ipa_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg, uint8_t sls)
process M3UA message received from socket
Definition: ipa.c:366
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:1014
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:71
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:944
struct msgb * m3ua_msgb_alloc(const char *name)
Definition: m3ua.c:329
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:921
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:551
struct m3ua_data_hdr * data_hdr_from_m3ua(const struct xua_msg *xua)
Definition: m3ua.c:574
const struct value_string m3ua_ntfy_stchg_names[]
Definition: m3ua.c:89
struct msgb * ipa_gen_ping(void)
Definition: ipa.c:62
const struct xua_msg_class m3ua_msg_class_snm
Definition: m3ua.c:192
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:867
int m3ua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg)
process M3UA message received from socket
Definition: m3ua.c:786
int osmo_isup_party_parse(char *out_digits, const uint8_t *in, unsigned int in_num_bytes, bool odd)
Parse ISUP style address of BCD digets.
Definition: sccp2sua.c:73
struct msgb * ipa_to_msg(struct xua_msg *xua)
Definition: ipa.c:75
int m3ua_decode_notify(struct osmo_xlm_prim_notify *npar, void *ctx, const struct xua_msg *xua)
Definition: m3ua.c:447
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
void xua_snm_rx_dava(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_snm.c:522
const struct osmo_tdef ss7_asp_lm_timer_defaults[SS7_ASP_LM_TIMERS_LEN]
Definition: xua_default_lm_fsm.c:86
const struct value_string m3ua_rkm_dereg_status_vals[]
Definition: xua_rkm.c:57
int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)
Definition: ss7_asp.c:1445
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:913
int sua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg)
process SUA message received from socket
Definition: sua.c:734
struct osmo_ss7_as * ipa_find_as_for_asp(struct osmo_ss7_asp *asp)
Definition: ipa.c:172
void mtp_xfer_param_to_m3ua_dh(struct m3ua_data_hdr *mdh, const struct osmo_mtp_transfer_param *param)
Definition: m3ua.c:305
struct osmo_fsm xua_default_lm_fsm
Definition: xua_default_lm_fsm.c:383
void xua_asp_send_xlm_prim(struct osmo_ss7_asp *asp, struct osmo_xlm_prim *prim)
Definition: xua_asp_fsm.c:122
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:359
struct msgb * m3ua_to_msg(struct xua_msg *xua)
Definition: m3ua.c:506
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:945
const struct xua_msg_class m3ua_msg_class_rkm
Definition: m3ua.c:276
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:423
static const char * ss7_asp_lm_timer_name(enum ss7_asp_lm_timer val)
Definition: xua_internal.h:132
struct xua_msg * m3ua_encode_notify(const struct osmo_xlm_prim_notify *npar)
Definition: m3ua.c:415
const char * m3ua_ntfy_info_name(uint16_t ntfy_status_type, uint16_t ntfy_status_info)
Definition: m3ua.c:104
struct xua_msg * osmo_sccp_to_xua(const struct msgb *msg)
convert SCCP message to a SUA message
Definition: sccp2sua.c:1667
struct msgb * osmo_sua_to_sccp(const struct xua_msg *xua)
convert parsed SUA message to SCCP message
Definition: sccp2sua.c:1781
const struct value_string ss7_asp_lm_timer_names[]
Definition: xua_default_lm_fsm.c:99
const struct xua_msg_class m3ua_msg_class_aspsm
Definition: m3ua.c:215
const struct xua_msg_class m3ua_msg_class_asptm
Definition: m3ua.c:228
const struct value_string m3ua_ntfy_other_names[]
Definition: m3ua.c:97
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:337
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:223
int m3ua_rx_rkm(struct osmo_ss7_asp *asp, struct xua_msg *xua)
Definition: xua_rkm.c:566
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:999
void m3ua_dh_to_xfer_param(struct osmo_mtp_transfer_param *param, const struct m3ua_data_hdr *mdh)
Definition: m3ua.c:317
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:71
const struct xua_msg_class m3ua_msg_class_mgmt
Definition: m3ua.c:246
struct xua_msg * sua_gen_cldr(const struct xua_msg *xua_in, uint32_t route_ctx, uint32_t ret_cause)
Definition: sua.c:268
ss7_asp_lm_timer
Definition: xua_internal.h:119
@ SS7_ASP_LM_T_WAIT_ASP_UP
Definition: xua_internal.h:121
@ SS7_ASP_LM_TIMERS_LEN
Definition: xua_internal.h:126
@ SS7_ASP_LM_T_WAIT_NOTIFY
Definition: xua_internal.h:122
@ SS7_ASP_LM_T_WAIT_RK_REG_RESP
Definition: xua_internal.h:124
@ SS7_ASP_LM_T_WAIT_NOTIY_RKM
Definition: xua_internal.h:123
struct osmo_xlm_prim * xua_xlm_prim_alloc(enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
Definition: xua_asp_fsm.c:107
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:225
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:967
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:386
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:119
void xua_asp_send_xlm_prim_simple(struct osmo_ss7_asp *asp, enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
Definition: xua_asp_fsm.c:137
void xua_snm_rx_duna(struct osmo_ss7_asp *asp, struct osmo_ss7_as *as, struct xua_msg *xua)
Definition: xua_snm.c:487
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:87
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:989
void xua_snm_rx_daud(struct osmo_ss7_asp *asp, struct xua_msg *xua)
Definition: xua_snm.c:408
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:889