libosmo-sigtran 2.2.1.32-35c8
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
13
14#include "ss7_asp_peer.h"
15#include "ss7_internal.h"
16
17/***********************************************************************
18 * SS7 Application Server Processes
19 ***********************************************************************/
20
22
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};
33
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: */
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
53};
54
57 struct llist_head list;
59
61 struct osmo_fsm_inst *fi;
62
65 struct llist_head siblings;
66
68 struct osmo_stream_cli *client;
69 struct osmo_stream_srv *server;
71 char *sock_name;
72
73 /* ASP Identifier for ASP-UP + NTFY, as received by the peer.
74 * (In IPA ASPs it's used internally to hold 4-bit SLS).
75 * FIXME: This should actually be stored in a AS-ASP relation, since it
76 * can be different per AS, see RFC4666 3.5.1
77 * "The optional ASP Identifier parameter contains a unique value that
78 * is locally significant among the ASPs that support an AS".
79 */
80 uint32_t remote_asp_id;
82
83 /* Layer Manager to which we talk */
85
88
91
93 struct rate_ctr_group *ctrg;
94
96 struct msgb *pending_msg;
97
98 /* IPA proto ASP specific fields. */
99 struct {
100 /* Incoming IPA PDUs have no SLS field, hence a potentially
101 * unique one within AS is assigned to this ASP and applied
102 * manually when received. */
103 uint8_t sls:4;
106
107#ifdef WITH_TCAP_LOADSHARING
108 struct {
109 bool enabled;
110 } tcap;
111#endif /* WITH_TCAP_LOADSHARING */
112
113 struct {
114 char *name;
122 /* Used internally by "asp" node to figure out if "no shutdown"
123 * was done explicitly, in order to avoid automatic asp
124 * reconfiguring/restart at go_parent().
125 * Can be dropped in the future once we make sure everybody uses
126 * "[no] shutdown" explicitly in cfg files. */
128
131 uint8_t qos_class;
132 uint32_t quirks;
133
134 /* Whether to Tx xUA DAUD during ASP activation when in ASP role. */
136
137 /* T_defs used by the default_lm: */
138 struct osmo_tdef *T_defs_xua;
139
140 /* T_defs used by the default_lm: */
141 struct osmo_tdef *T_defs_lm;
142
143 struct {
151 uint16_t max_init_timeo_value; /* ms */
153
154 struct {
160 int keepalive_time_value; /* seconds */
161 int keepalive_intvl_value; /* seconds */
163 unsigned int user_timeout_value; /* milliseconds */
165
169};
170
171struct osmo_ss7_asp *ss7_asp_alloc(struct osmo_ss7_instance *inst, const char *name,
172 uint16_t remote_port, uint16_t local_port,
175bool ss7_asp_is_started(const struct osmo_ss7_asp *asp);
176int ss7_asp_get_fd(const struct osmo_ss7_asp *asp);
178
179int ss7_asp_apply_tcp_pars(const struct osmo_ss7_asp *asp);
181int ss7_asp_apply_primary_address(const struct osmo_ss7_asp *asp);
182int ss7_asp_apply_new_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx);
183int ss7_asp_apply_drop_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx);
184
186
187unsigned int ss7_asp_get_all_rctx(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size,
188 const struct osmo_ss7_as *excl_as);
189unsigned int ss7_asp_get_all_rctx_be(const struct osmo_ss7_asp *asp, uint32_t *rctx, unsigned int rctx_size,
190 const struct osmo_ss7_as *excl_as);
191
192int ss7_asp_determine_traf_mode(const struct osmo_ss7_asp *asp);
193
194#define LOGPASP(asp, subsys, level, fmt, args ...) \
195 _LOGSS7((asp)->inst, subsys, level, "ASP(%s) " fmt, (asp)->cfg.name, ## args)
osmo_ss7_asp_protocol
Definition: osmo_ss7.h:157
osmo_ss7_asp_role
Definition: osmo_ss7.h:253
osmo_ss7_asp_admin_state
Definition: osmo_ss7.h:243
int ss7_asp_determine_traf_mode(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:1594
bool ss7_asp_is_started(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:974
int ss7_asp_apply_primary_address(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:425
ss7_asp_xua_timer
Definition: ss7_asp.h:34
@ SS7_ASP_XUA_TIMERS_LEN
Definition: ss7_asp.h:39
@ SS7_ASP_XUA_T_ACK
Definition: ss7_asp.h:36
@ SS7_ASP_XUA_T_BEAT
Definition: ss7_asp.h:37
ss7_asp_ctr
Definition: ss7_asp.h:48
@ SS7_ASP_CTR_PKT_TX_TOTAL
Definition: ss7_asp.h:52
@ SS7_ASP_CTR_PKT_RX_NI_MISMATCH
Definition: ss7_asp.h:51
@ SS7_ASP_CTR_PKT_RX_UNKNOWN
Definition: ss7_asp.h:50
@ SS7_ASP_CTR_PKT_RX_TOTAL
Definition: ss7_asp.h:49
void ss7_asp_restart_after_reconfigure(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:1541
int ss7_asp_apply_peer_primary_address(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:383
int ss7_asp_get_fd(const struct osmo_ss7_asp *asp)
Get the fd of a given ASP.
Definition: ss7_asp.c:1528
int ss7_asp_disconnect_stream(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:868
const struct osmo_tdef ss7_asp_xua_timer_defaults[SS7_ASP_XUA_TIMERS_LEN]
Definition: ss7_asp.c:121
struct osmo_xua_layer_manager * xua_layer_manager_default_alloc(struct osmo_ss7_asp *asp)
Definition: xua_default_lm_fsm.c:431
int ss7_asp_apply_new_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx)
Definition: ss7_asp.c:339
int ss7_asp_apply_tcp_pars(const struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:330
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:1583
int ss7_asp_apply_drop_local_address(const struct osmo_ss7_asp *asp, unsigned int loc_idx)
Definition: ss7_asp.c:361
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:724
const struct value_string ss7_asp_xua_timer_names[]
Definition: ss7_asp.c:130
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:1576
bool ss7_asp_set_default_peer_hosts(struct osmo_ss7_asp *asp)
Definition: ss7_asp.c:564
Definition: ss7_as.h:86
Definition: ss7_asp_peer.h:11
Definition: ss7_asp.h:55
enum osmo_ss7_asp_role role
Definition: ss7_asp.h:119
char * sock_name
pre-formatted human readable local/remote socket name
Definition: ss7_asp.h:71
struct osmo_ss7_asp::@27::@28 sctp_init
bool role_set_by_vty
Definition: ss7_asp.h:120
int keepalive_time_value
Definition: ss7_asp.h:160
struct osmo_ss7_asp::@27 cfg
struct osmo_ss7_asp_peer remote
Definition: ss7_asp.h:130
bool max_attempts_present
Definition: ss7_asp.h:146
bool explicit_shutdown_state_by_vty_since_node_enter
Definition: ss7_asp.h:127
bool max_instreams_present
Definition: ss7_asp.h:145
struct osmo_tdef * T_defs_lm
Definition: ss7_asp.h:141
struct osmo_fsm_inst * fi
ASP FSM.
Definition: ss7_asp.h:61
uint16_t max_attempts_value
Definition: ss7_asp.h:150
struct osmo_tdef * T_defs_xua
Definition: ss7_asp.h:138
uint16_t max_instreams_value
Definition: ss7_asp.h:149
struct llist_head list
entry in osmo_ss7_instance::asp_list
Definition: ss7_asp.h:57
uint8_t sls
Definition: ss7_asp.h:103
enum osmo_ss7_asp_protocol proto
Definition: ss7_asp.h:116
struct osmo_ss7_instance * inst
Definition: ss7_asp.h:58
bool num_ostreams_present
Definition: ss7_asp.h:144
uint32_t remote_asp_id
Definition: ss7_asp.h:80
struct osmo_ss7_asp::@26 ipa
struct osmo_stream_srv * server
Definition: ss7_asp.h:69
uint32_t quirks
Definition: ss7_asp.h:132
bool simple_client_allocated
Were we allocated by "simple client" support?
Definition: ss7_asp.h:90
int keepalive_probes_value
Definition: ss7_asp.h:162
bool sls_assigned
Definition: ss7_asp.h:104
struct osmo_stream_cli * client
osmo_stream / libosmo-netif handles
Definition: ss7_asp.h:68
bool trans_role_set_by_vty
Definition: ss7_asp.h:121
enum osmo_ss7_asp_admin_state adm_state
Definition: ss7_asp.h:117
struct osmo_xua_server * xua_server
osmo_xua_server over which we were established
Definition: ss7_asp.h:64
struct osmo_xua_layer_manager * lm
Definition: ss7_asp.h:84
struct osmo_ss7_asp_peer local
Definition: ss7_asp.h:129
bool is_server
Definition: ss7_asp.h:118
struct osmo_ss7_asp::@27::@29 tcp
int keepalive_intvl_value
Definition: ss7_asp.h:161
bool user_timeout_present
Definition: ss7_asp.h:159
unsigned int user_timeout_value
Definition: ss7_asp.h:163
bool daud_act
Definition: ss7_asp.h:135
bool dyn_allocated
Were we dynamically allocated.
Definition: ss7_asp.h:87
bool max_init_timeo_present
Definition: ss7_asp.h:147
char * name
Definition: ss7_asp.h:114
bool keepalive_probes_present
Definition: ss7_asp.h:158
bool keepalive_time_present
Definition: ss7_asp.h:156
bool keepalive_intvl_present
Definition: ss7_asp.h:157
uint8_t qos_class
Definition: ss7_asp.h:131
struct msgb * pending_msg
Pending message for non-blocking IPA read.
Definition: ss7_asp.h:96
uint16_t num_ostreams_value
Definition: ss7_asp.h:148
int trans_proto
The underlaying transport protocol (one of IPPROTO_*)
Definition: ss7_asp.h:167
char * description
Definition: ss7_asp.h:115
bool keepalive_enable
Definition: ss7_asp.h:155
bool remote_asp_id_present
Definition: ss7_asp.h:81
struct rate_ctr_group * ctrg
Rate Counter Group.
Definition: ss7_asp.h:93
struct llist_head siblings
Definition: ss7_asp.h:65
uint16_t max_init_timeo_value
Definition: ss7_asp.h:151
Definition: ss7_instance.h:45
Definition: ss7_asp.h:23
osmo_prim_cb prim_cb
Definition: ss7_asp.h:28
void * priv
Definition: ss7_asp.h:30
void(* free_func)(struct osmo_xua_layer_manager *lm)
Definition: ss7_asp.h:29
Definition: ss7_xua_srv.h:18