libosmo-sigtran: src/ss7_asp.h Source File

libosmo-sigtran 2.2.1.99-1c6a Osmocom SIGTRAN library

ss7_asp.h
Go to the documentation of this file.
1#pragma once
2
3#include "config.h"
4
5#include <stdint.h>
6#include <osmocom/core/linuxlist.h>
7#include <osmocom/core/fsm.h>
8#include <osmocom/core/msgb.h>
9#include <osmocom/core/tdef.h>
10#include <osmocom/netif/stream.h>
11
12#include <osmocom/sigtran/osmo_ss7.h>
13
14#include "ss7_asp_peer.h"
15#include "ss7_internal.h"
16
17/***********************************************************************
18 * SS7 Application Server Processes
19 ***********************************************************************/
20
21struct osmo_ss7_instance;
22
23 struct osmo_xua_layer_manager {
24 /* Submit primitives M3UA -> LM:
25 * oph: {sap: XUA_SAP_LM, prim: enum osmo_xlm_prim_type},
26 * cb_data: (struct osmo_ss7_asp *)
27 */
28 osmo_prim_cb prim_cb;
29 void (*free_func)(struct osmo_xua_layer_manager *lm);
30 void *priv;
31};
32struct osmo_xua_layer_manager *xua_layer_manager_default_alloc(struct osmo_ss7_asp *asp);
33
34 enum ss7_asp_xua_timer {
35 /* 0 kept unused on purpose since it's handled specially by osmo_fsm */
36 SS7_ASP_XUA_T_ACK = 1, /* RFC3868 & RFC4666 timer T(ack) */
37 SS7_ASP_XUA_T_BEAT, /* RFC3868 & RFC4666 timer T(beat) */
38 /* This must remain the last item: */
39 SS7_ASP_XUA_TIMERS_LEN
40};
41extern const struct value_string ss7_asp_xua_timer_names[];
42extern const struct osmo_tdef ss7_asp_xua_timer_defaults[SS7_ASP_XUA_TIMERS_LEN];
43/* According to SUA RFC3868 Section 8, M3UA RFC4666 Section 4.3.4.1 */
44#define SS7_ASP_XUA_DEFAULT_T_ACK_SEC 2
45/* According to SUA RFC3868 Section 8 */
46#define SS7_ASP_XUA_DEFAULT_T_BEAT_SEC 30
47
48 enum ss7_asp_ctr {
49 SS7_ASP_CTR_PKT_RX_TOTAL,
50 SS7_ASP_CTR_PKT_RX_UNKNOWN,
51 SS7_ASP_CTR_PKT_RX_NI_MISMATCH,
52 SS7_ASP_CTR_PKT_TX_TOTAL,
53};
54
55 struct osmo_ss7_asp {
57 struct llist_head list;
58 struct llist_head assoc_as_list; /* list of struct ss7_as_asp_assoc */
59 unsigned int num_assoc_as; /* amount of ss7_as_asp_assoc/ss7_as in as_list */
60
61 struct osmo_ss7_instance *inst;
62
64 struct osmo_fsm_inst *fi;
65
67 struct osmo_xua_server *xua_server;
68 struct llist_head siblings;
69
71 struct osmo_stream_cli *client;
72 struct osmo_stream_srv *server;
74 char *sock_name;
75
76 /* Peer's ASP Identifier, as received during ASPUP (SG/IPSP) and ASPUP ACK (IPSP),
77 * and transmitted during NOTIFY. */
78 uint32_t remote_asp_id;
79 bool remote_asp_id_present;
80
81 /* Layer Manager to which we talk */
82 struct osmo_xua_layer_manager *lm;
83
85 bool dyn_allocated;
86
88 bool simple_client_allocated;
89
91 struct rate_ctr_group *ctrg;
92
94 struct msgb *pending_msg;
95
96 /* IPA proto ASP specific fields. */
97 struct {
98 /* Incoming IPA PDUs have no SLS field, hence a potentially
99 * unique one within AS is assigned to this ASP and applied
100 * manually when received. */
101 uint8_t sls:4;
102 bool sls_assigned;
103 } ipa;
104
105#ifdef WITH_TCAP_LOADSHARING
106 struct {
107 bool enabled;
108 } tcap;
109#endif /* WITH_TCAP_LOADSHARING */
110
111 struct {
112 char *name;
113 char *description;
114 enum osmo_ss7_asp_protocol proto;
115 struct {
117 bool shutdown:1;
119 bool blocked:1;
120 } adm_state;
121 bool is_server;
122 enum osmo_ss7_asp_role role;
123 bool role_set_by_vty;
124 bool trans_role_set_by_vty;
125 /* Used internally by "asp" node to figure out if "no shutdown"
126 * was done explicitly, in order to avoid automatic asp
127 * reconfiguring/restart at go_parent().
128 * Can be dropped in the future once we make sure everybody uses
129 * "[no] shutdown" explicitly in cfg files. */
130 bool explicit_shutdown_state_by_vty_since_node_enter;
131
132 /* Local ASP Identifier transmitted during ASPUP (ASP/IPSP) and ASPUP ACK (IPSP),
133 * and received during NOTIFY.
134 * "The optional ASP Identifier parameter contains a unique value
135 * that is locally significant among the ASPs that support an AS". */
136 uint32_t local_asp_id;
137 bool local_asp_id_present;
138
139 struct osmo_ss7_asp_peer local;
140 struct osmo_ss7_asp_peer remote;
141 uint8_t qos_class;
142 uint32_t quirks;
143
144 /* Whether to Tx xUA DAUD during ASP activation when in ASP role. */
145 bool daud_act;
146
147 /* T_defs used by the default_lm: */
148 struct osmo_tdef *T_defs_xua;
149
150 /* T_defs used by the default_lm: */
151 struct osmo_tdef *T_defs_lm;
152
153 struct {
154 bool num_ostreams_present;
155 bool max_instreams_present;
156 bool max_attempts_present;
157 bool max_init_timeo_present;
158 uint16_t num_ostreams_value;
159 uint16_t max_instreams_value;
160 uint16_t max_attempts_value;
161 uint16_t max_init_timeo_value; /* ms */
162 } sctp_init;
163
164 struct {
165 bool keepalive_enable;
166 bool keepalive_time_present;
167 bool keepalive_intvl_present;
168 bool keepalive_probes_present;
169 bool user_timeout_present;
170 int keepalive_time_value; /* seconds */
171 int keepalive_intvl_value; /* seconds */
172 int keepalive_probes_value;
173 unsigned int user_timeout_value; /* milliseconds */
174 } tcp;
175
177 int trans_proto;
178 } cfg;
179};
180
181struct osmo_ss7_asp *ss7_asp_alloc(struct osmo_ss7_instance *inst, const char *name,
182 uint16_t remote_port, uint16_t local_port,
183 int trans_proto, enum osmo_ss7_asp_protocol proto);
184bool ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp);
185bool ss7_asp_is_started(const struct osmo_ss7_asp *asp);
186int ss7_asp_get_fd(const struct osmo_ss7_asp *asp);
187int ss7_asp_disconnect_stream(struct osmo_ss7_asp *asp);
188
189int ss7_asp_apply_tcp_pars(const struct osmo_ss7_asp *asp);
190int ss7_asp_apply_peer_primary_address(const struct osmo_ss7_asp *asp);
191int ss7_asp_apply_primary_address(const struct osmo_ss7_asp *asp);
192int ss7_asp_apply_new_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx);
193int ss7_asp_apply_drop_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx);
194
195void ss7_asp_set_blocked(struct osmo_ss7_asp *asp, bool blocked);
196void ss7_asp_restart_after_reconfigure(struct osmo_ss7_asp *asp);
197void ss7_asp_xua_layer_manager_start(struct osmo_ss7_asp *asp);
198
199unsigned int ss7_asp_get_all_rctx(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size,
200 const struct osmo_ss7_as *excl_as);
201unsigned int ss7_asp_get_all_rctx_be(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size,
202 const struct osmo_ss7_as *excl_as);
203struct osmo_ss7_as *ss7_asp_find_as_by_rctx(const struct osmo_ss7_asp *asp, uint32_t rctx);
204struct osmo_ss7_as *ss7_asp_get_first_as(const struct osmo_ss7_asp *asp);
205
206int ss7_asp_determine_traf_mode(const struct osmo_ss7_asp *asp);
207bool ss7_asp_check_remote_asp_id_unique(const struct osmo_ss7_asp *asp, uint32_t remote_asp_id);
208
209#define LOGPASP(asp, subsys, level, fmt, args ...) \
210 _LOGSS7((asp)->inst, subsys, level, "ASP(%s) " fmt, (asp)->cfg.name, ## args)
osmo_ss7.h
osmo_ss7_asp_protocol
osmo_ss7_asp_protocol
Definition: osmo_ss7.h:157
osmo_ss7_asp_role
osmo_ss7_asp_role
Definition: osmo_ss7.h:243
ss7_asp_determine_traf_mode
int ss7_asp_determine_traf_mode(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:1629
ss7_asp_is_started
bool ss7_asp_is_started(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:968
ss7_asp_apply_primary_address
int ss7_asp_apply_primary_address(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:419
ss7_asp_xua_timer
ss7_asp_xua_timer
Definition: ss7_asp.h:34
SS7_ASP_XUA_TIMERS_LEN
@ SS7_ASP_XUA_TIMERS_LEN
Definition: ss7_asp.h:39
SS7_ASP_XUA_T_ACK
@ SS7_ASP_XUA_T_ACK
Definition: ss7_asp.h:36
SS7_ASP_XUA_T_BEAT
@ SS7_ASP_XUA_T_BEAT
Definition: ss7_asp.h:37
ss7_asp_ctr
ss7_asp_ctr
Definition: ss7_asp.h:48
SS7_ASP_CTR_PKT_TX_TOTAL
@ SS7_ASP_CTR_PKT_TX_TOTAL
Definition: ss7_asp.h:52
SS7_ASP_CTR_PKT_RX_NI_MISMATCH
@ SS7_ASP_CTR_PKT_RX_NI_MISMATCH
Definition: ss7_asp.h:51
SS7_ASP_CTR_PKT_RX_UNKNOWN
@ SS7_ASP_CTR_PKT_RX_UNKNOWN
Definition: ss7_asp.h:50
SS7_ASP_CTR_PKT_RX_TOTAL
@ SS7_ASP_CTR_PKT_RX_TOTAL
Definition: ss7_asp.h:49
ss7_asp_restart_after_reconfigure
void ss7_asp_restart_after_reconfigure(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:1551
ss7_asp_set_blocked
void ss7_asp_set_blocked(struct osmo_ss7_asp *asp, bool blocked)
Definition: ss7_asp.c:1536
ss7_asp_apply_peer_primary_address
int ss7_asp_apply_peer_primary_address(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:377
ss7_asp_get_fd
int ss7_asp_get_fd(const struct osmo_ss7_asp *asp)
Get the fd of a given ASP.
Definition: ss7_asp.c:1522
ss7_asp_disconnect_stream
int ss7_asp_disconnect_stream(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:863
ss7_asp_xua_timer_defaults
const struct osmo_tdef ss7_asp_xua_timer_defaults[SS7_ASP_XUA_TIMERS_LEN]
Definition: ss7_asp.c:122
xua_layer_manager_default_alloc
struct osmo_xua_layer_manager * xua_layer_manager_default_alloc(struct osmo_ss7_asp *asp)
Definition: xua_default_lm_fsm.c:664
ss7_asp_get_first_as
struct osmo_ss7_as * ss7_asp_get_first_as(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:1615
ss7_asp_check_remote_asp_id_unique
bool ss7_asp_check_remote_asp_id_unique(const struct osmo_ss7_asp *asp, uint32_t remote_asp_id)
Definition: ss7_asp.c:1650
ss7_asp_apply_new_local_address
int ss7_asp_apply_new_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx)
Definition: ss7_asp.c:333
ss7_asp_apply_tcp_pars
int ss7_asp_apply_tcp_pars(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:324
ss7_asp_get_all_rctx
unsigned int ss7_asp_get_all_rctx(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size, const struct osmo_ss7_as *excl_as)
Definition: ss7_asp.c:1592
ss7_asp_apply_drop_local_address
int ss7_asp_apply_drop_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx)
Definition: ss7_asp.c:355
ss7_asp_alloc
struct osmo_ss7_asp * ss7_asp_alloc(struct osmo_ss7_instance *inst, const char *name, uint16_t remote_port, uint16_t local_port, int trans_proto, enum osmo_ss7_asp_protocol proto)
Definition: ss7_asp.c:718
ss7_asp_xua_timer_names
const struct value_string ss7_asp_xua_timer_names[]
Definition: ss7_asp.c:131
ss7_asp_get_all_rctx_be
unsigned int ss7_asp_get_all_rctx_be(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size, const struct osmo_ss7_as *excl_as)
Definition: ss7_asp.c:1585
ss7_asp_find_as_by_rctx
struct osmo_ss7_as * ss7_asp_find_as_by_rctx(const struct osmo_ss7_asp *asp, uint32_t rctx)
Find Application Server associated to ASP by given routing context.
Definition: ss7_asp.c:1602
ss7_asp_xua_layer_manager_start
void ss7_asp_xua_layer_manager_start(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:696
ss7_asp_set_default_peer_hosts
bool ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:558
ss7_asp_peer.h
ss7_internal.h
osmo_ss7_as
Definition: ss7_as.h:95
osmo_ss7_asp_peer
Definition: ss7_asp_peer.h:11
osmo_ss7_asp
Definition: ss7_asp.h:55
osmo_ss7_asp::role
enum osmo_ss7_asp_role role
Definition: ss7_asp.h:122
osmo_ss7_asp::sock_name
char * sock_name
pre-formatted human readable local/remote socket name
Definition: ss7_asp.h:74
osmo_ss7_asp::local_asp_id
uint32_t local_asp_id
Definition: ss7_asp.h:136
osmo_ss7_asp::role_set_by_vty
bool role_set_by_vty
Definition: ss7_asp.h:123
osmo_ss7_asp::keepalive_time_value
int keepalive_time_value
Definition: ss7_asp.h:170
osmo_ss7_asp::cfg
struct osmo_ss7_asp::@27 cfg
osmo_ss7_asp::remote
struct osmo_ss7_asp_peer remote
Definition: ss7_asp.h:140
osmo_ss7_asp::max_attempts_present
bool max_attempts_present
Definition: ss7_asp.h:156
osmo_ss7_asp::explicit_shutdown_state_by_vty_since_node_enter
bool explicit_shutdown_state_by_vty_since_node_enter
Definition: ss7_asp.h:130
osmo_ss7_asp::max_instreams_present
bool max_instreams_present
Definition: ss7_asp.h:155
osmo_ss7_asp::T_defs_lm
struct osmo_tdef * T_defs_lm
Definition: ss7_asp.h:151
osmo_ss7_asp::fi
struct osmo_fsm_inst * fi
ASP FSM.
Definition: ss7_asp.h:64
osmo_ss7_asp::max_attempts_value
uint16_t max_attempts_value
Definition: ss7_asp.h:160
osmo_ss7_asp::T_defs_xua
struct osmo_tdef * T_defs_xua
Definition: ss7_asp.h:148
osmo_ss7_asp::max_instreams_value
uint16_t max_instreams_value
Definition: ss7_asp.h:159
osmo_ss7_asp::num_assoc_as
unsigned int num_assoc_as
Definition: ss7_asp.h:59
osmo_ss7_asp::list
struct llist_head list
entry in osmo_ss7_instance::asp_list
Definition: ss7_asp.h:57
osmo_ss7_asp::sls
uint8_t sls
Definition: ss7_asp.h:101
osmo_ss7_asp::local_asp_id_present
bool local_asp_id_present
Definition: ss7_asp.h:137
osmo_ss7_asp::proto
enum osmo_ss7_asp_protocol proto
Definition: ss7_asp.h:114
osmo_ss7_asp::inst
struct osmo_ss7_instance * inst
Definition: ss7_asp.h:61
osmo_ss7_asp::adm_state
struct osmo_ss7_asp::@27::@28 adm_state
osmo_ss7_asp::num_ostreams_present
bool num_ostreams_present
Definition: ss7_asp.h:154
osmo_ss7_asp::remote_asp_id
uint32_t remote_asp_id
Definition: ss7_asp.h:78
osmo_ss7_asp::ipa
struct osmo_ss7_asp::@26 ipa
osmo_ss7_asp::server
struct osmo_stream_srv * server
Definition: ss7_asp.h:72
osmo_ss7_asp::quirks
uint32_t quirks
Definition: ss7_asp.h:142
osmo_ss7_asp::simple_client_allocated
bool simple_client_allocated
Were we allocated by "simple client" support?
Definition: ss7_asp.h:88
osmo_ss7_asp::keepalive_probes_value
int keepalive_probes_value
Definition: ss7_asp.h:172
osmo_ss7_asp::blocked
bool blocked
SCP association, but reject ASP-ACTIVE.
Definition: ss7_asp.h:119
osmo_ss7_asp::sls_assigned
bool sls_assigned
Definition: ss7_asp.h:102
osmo_ss7_asp::client
struct osmo_stream_cli * client
osmo_stream / libosmo-netif handles
Definition: ss7_asp.h:71
osmo_ss7_asp::sctp_init
struct osmo_ss7_asp::@27::@29 sctp_init
osmo_ss7_asp::trans_role_set_by_vty
bool trans_role_set_by_vty
Definition: ss7_asp.h:124
osmo_ss7_asp::xua_server
struct osmo_xua_server * xua_server
osmo_xua_server over which we were established
Definition: ss7_asp.h:67
osmo_ss7_asp::lm
struct osmo_xua_layer_manager * lm
Definition: ss7_asp.h:82
osmo_ss7_asp::local
struct osmo_ss7_asp_peer local
Definition: ss7_asp.h:139
osmo_ss7_asp::is_server
bool is_server
Definition: ss7_asp.h:121
osmo_ss7_asp::keepalive_intvl_value
int keepalive_intvl_value
Definition: ss7_asp.h:171
osmo_ss7_asp::user_timeout_present
bool user_timeout_present
Definition: ss7_asp.h:169
osmo_ss7_asp::user_timeout_value
unsigned int user_timeout_value
Definition: ss7_asp.h:173
osmo_ss7_asp::daud_act
bool daud_act
Definition: ss7_asp.h:145
osmo_ss7_asp::dyn_allocated
bool dyn_allocated
Were we dynamically allocated.
Definition: ss7_asp.h:85
osmo_ss7_asp::max_init_timeo_present
bool max_init_timeo_present
Definition: ss7_asp.h:157
osmo_ss7_asp::name
char * name
Definition: ss7_asp.h:112
osmo_ss7_asp::keepalive_probes_present
bool keepalive_probes_present
Definition: ss7_asp.h:168
osmo_ss7_asp::keepalive_time_present
bool keepalive_time_present
Definition: ss7_asp.h:166
osmo_ss7_asp::keepalive_intvl_present
bool keepalive_intvl_present
Definition: ss7_asp.h:167
osmo_ss7_asp::shutdown
bool shutdown
no SCTP association with peer
Definition: ss7_asp.h:117
osmo_ss7_asp::qos_class
uint8_t qos_class
Definition: ss7_asp.h:141
osmo_ss7_asp::pending_msg
struct msgb * pending_msg
Pending message for non-blocking IPA read.
Definition: ss7_asp.h:94
osmo_ss7_asp::tcp
struct osmo_ss7_asp::@27::@30 tcp
osmo_ss7_asp::num_ostreams_value
uint16_t num_ostreams_value
Definition: ss7_asp.h:158
osmo_ss7_asp::trans_proto
int trans_proto
The underlaying transport protocol (one of IPPROTO_*)
Definition: ss7_asp.h:177
osmo_ss7_asp::assoc_as_list
struct llist_head assoc_as_list
Definition: ss7_asp.h:58
osmo_ss7_asp::description
char * description
Definition: ss7_asp.h:113
osmo_ss7_asp::keepalive_enable
bool keepalive_enable
Definition: ss7_asp.h:165
osmo_ss7_asp::remote_asp_id_present
bool remote_asp_id_present
Definition: ss7_asp.h:79
osmo_ss7_asp::ctrg
struct rate_ctr_group * ctrg
Rate Counter Group.
Definition: ss7_asp.h:91
osmo_ss7_asp::siblings
struct llist_head siblings
Definition: ss7_asp.h:68
osmo_ss7_asp::max_init_timeo_value
uint16_t max_init_timeo_value
Definition: ss7_asp.h:161
osmo_ss7_instance
Definition: ss7_instance.h:47
osmo_xua_layer_manager
Definition: ss7_asp.h:23
osmo_xua_layer_manager::prim_cb
osmo_prim_cb prim_cb
Definition: ss7_asp.h:28
osmo_xua_layer_manager::priv
void * priv
Definition: ss7_asp.h:30
osmo_xua_layer_manager::free_func
void(* free_func)(struct osmo_xua_layer_manager *lm)
Definition: ss7_asp.h:29
osmo_xua_server
Definition: ss7_xua_srv.h:18