libosmo-sigtran 2.2.1
Osmocom SIGTRAN library
Loading...
Searching...
No Matches
xua_asp_fsm.c File Reference
#include "config.h"
#include <errno.h>
#include <osmocom/core/fsm.h>
#include <osmocom/core/utils.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/prim.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/select.h>
#include <osmocom/gsm/ipa.h>
#include <osmocom/netif/stream.h>
#include <osmocom/netif/ipa.h>
#include <osmocom/sigtran/osmo_ss7.h>
#include <osmocom/sigtran/sigtran_sap.h>
#include "xua_msg.h"
#include <osmocom/sigtran/protocol/sua.h>
#include "ss7_as.h"
#include "ss7_asp.h"
#include "ss7_internal.h"
#include "ss7_xua_srv.h"
#include "sccp_internal.h"
#include "xua_asp_fsm.h"
#include "xua_as_fsm.h"
#include "xua_lm_sap.h"
#include "xua_internal.h"

Data Structures

struct  xua_asp_fsm_priv
struct  ipa_asp_fsm_priv

Macros

#define S(x)
#define ENSURE_ROLE_COND(fi, event, cond)
#define ENSURE_IPSP(fi, event)
#define ENSURE_ASP_OR_IPSP(fi, event)
#define ENSURE_SG_OR_IPSP(fi, event)

Enumerations

enum  ipa_asp_state {
  IPA_ASP_S_DOWN = XUA_ASP_S_DOWN , IPA_ASP_S_INACTIVE = XUA_ASP_S_INACTIVE , IPA_ASP_S_ACTIVE = XUA_ASP_S_ACTIVE , IPA_ASP_S_WAIT_ID_RESP ,
  IPA_ASP_S_WAIT_ID_GET , IPA_ASP_S_WAIT_ID_ACK , IPA_ASP_S_WAIT_ID_ACK2
}
enum  ipa_asp_fsm_t { T_WAIT_ID_RESP = 1 , T_WAIT_ID_ACK , T_WAIT_ID_GET }

Functions

static void send_xlm_prim_simple (struct osmo_fsm_inst *fi, enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
static void xua_asp_tx_snm_daud_address_book (struct osmo_ss7_asp *asp)
static int xua_msg_add_asp_rctx (struct xua_msg *xua, struct osmo_ss7_asp *asp)
static int xua_asp_tx_unsolicited_aspia_ack (struct osmo_ss7_asp *asp)
static int peer_send (struct osmo_fsm_inst *fi, int out_event, struct xua_msg *in)
static int peer_send_error_ext (struct osmo_fsm_inst *fi, uint32_t err_code, const uint8_t *rctx_be, unsigned int rctx_size)
static int peer_send_error (struct osmo_fsm_inst *fi, uint32_t err_code)
static void xua_t_ack_cb (void *data)
static int peer_send_and_start_t_ack (struct osmo_fsm_inst *fi, int out_event)
static void dispatch_to_all_as (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void stop_t_ack (struct osmo_fsm_inst *fi)
static void check_stop_t_ack (struct osmo_fsm_inst *fi, uint32_t event)
static void xua_t_beat_stop (struct osmo_fsm_inst *fi)
static void xua_t_beat_send (struct osmo_fsm_inst *fi)
static void xua_t_beat_cb (void *_fi)
static void common_asp_fsm_down_onenter (struct osmo_ss7_asp *asp)
static void xua_asp_fsm_down_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void xua_asp_fsm_down (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void xua_asp_fsm_inactive_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void xua_asp_fsm_inactive (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void xua_asp_fsm_active_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void xua_asp_fsm_active (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void xua_asp_allstate (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int xua_asp_fsm_timer_cb (struct osmo_fsm_inst *fi)
static void xua_asp_fsm_cleanup (struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
static int ipa_asp_fsm_start (struct osmo_ss7_asp *asp, int log_level)
 Start a new ASP finite state machine for given ASP (stored on asp->fi).
int xua_asp_fsm_start (struct osmo_ss7_asp *asp, int log_level)
 Start a new ASP finite state machine for given ASP (stored in asp->fi).
static int get_fd_from_iafp (struct ipa_asp_fsm_priv *iafp)
static void ipa_t_beat_stop (struct osmo_fsm_inst *fi)
static void ipa_t_beat_send (struct osmo_fsm_inst *fi)
static void ipa_t_beat_cb (void *_fi)
static void ipa_asp_fsm_down_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void ipa_asp_fsm_down (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_wait_id_resp (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_wait_id_ack2 (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_wait_id_get (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_wait_id_ack (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_active_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void ipa_asp_fsm_active (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void ipa_asp_fsm_inactive_onenter (struct osmo_fsm_inst *fi, uint32_t prev_state)
static void ipa_asp_fsm_inactive (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void _ipa_asp_pick_unused_sls (struct osmo_ss7_asp *asp, const struct osmo_ss7_as *as)
static void ipa_asp_allstate (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int ipa_asp_fsm_timer_cb (struct osmo_fsm_inst *fi)
static void ipa_asp_fsm_cleanup (struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)

Variables

static const struct value_string xua_asp_event_names []
static const uint32_t evt_ack_map [_NUM_XUA_ASP_E]
static const struct osmo_fsm_state xua_asp_states []
struct osmo_fsm xua_asp_fsm
static const struct osmo_fsm_state ipa_asp_states []
struct osmo_fsm ipa_asp_fsm

Macro Definition Documentation

◆ ENSURE_ASP_OR_IPSP

#define ENSURE_ASP_OR_IPSP ( fi,
event )
Value:
@ OSMO_SS7_ASP_ROLE_ASP
Definition osmo_ss7.h:244
@ OSMO_SS7_ASP_ROLE_IPSP
Definition osmo_ss7.h:246
#define ENSURE_ROLE_COND(fi, event, cond)
Definition xua_asp_fsm.c:487

Referenced by xua_asp_fsm_active(), xua_asp_fsm_down(), and xua_asp_fsm_inactive().

◆ ENSURE_IPSP

#define ENSURE_IPSP ( fi,
event )

◆ ENSURE_ROLE_COND

#define ENSURE_ROLE_COND ( fi,
event,
cond )
Value:
do { \
struct xua_asp_fsm_priv *_xafp = fi->priv; \
enum osmo_ss7_asp_role _role = _xafp->asp->cfg.role; \
if (!(cond)) { \
LOGPFSML(fi, LOGL_ERROR, "event %s not permitted " \
"in role %s\n", \
osmo_fsm_event_name(fi->fsm, event), \
get_value_string(osmo_ss7_asp_role_names, _role));\
return; \
} \
} while (0)
osmo_ss7_asp_role
Definition osmo_ss7.h:243
const struct value_string osmo_ss7_asp_role_names[]
Definition ss7_asp.c:154
enum osmo_ss7_asp_role role
Definition ss7_asp.h:122
struct osmo_ss7_asp::@214355324120056261055053007070051313305332212233 cfg
Definition xua_asp_fsm.c:91
struct osmo_ss7_asp * asp
Definition xua_asp_fsm.c:93

◆ ENSURE_SG_OR_IPSP

#define ENSURE_SG_OR_IPSP ( fi,
event )
Value:
@ OSMO_SS7_ASP_ROLE_SG
Definition osmo_ss7.h:245

Referenced by xua_asp_fsm_active(), xua_asp_fsm_down(), and xua_asp_fsm_inactive().

◆ S

#define S ( x)
Value:
(1 << (x))

Enumeration Type Documentation

◆ ipa_asp_fsm_t

Enumerator
T_WAIT_ID_RESP 
T_WAIT_ID_ACK 
T_WAIT_ID_GET 

◆ ipa_asp_state

Enumerator
IPA_ASP_S_DOWN 
IPA_ASP_S_INACTIVE 
IPA_ASP_S_ACTIVE 
IPA_ASP_S_WAIT_ID_RESP 
IPA_ASP_S_WAIT_ID_GET 
IPA_ASP_S_WAIT_ID_ACK 
IPA_ASP_S_WAIT_ID_ACK2 

Function Documentation

◆ _ipa_asp_pick_unused_sls()

◆ check_stop_t_ack()

void check_stop_t_ack ( struct osmo_fsm_inst * fi,
uint32_t event )
static

◆ common_asp_fsm_down_onenter()

◆ dispatch_to_all_as()

◆ get_fd_from_iafp()

◆ ipa_asp_allstate()

◆ ipa_asp_fsm_active()

void ipa_asp_fsm_active ( struct osmo_fsm_inst * fi,
uint32_t event,
void * data )
static

◆ ipa_asp_fsm_active_onenter()

void ipa_asp_fsm_active_onenter ( struct osmo_fsm_inst * fi,
uint32_t prev_state )
static

◆ ipa_asp_fsm_cleanup()

void ipa_asp_fsm_cleanup ( struct osmo_fsm_inst * fi,
enum osmo_fsm_term_cause cause )
static

◆ ipa_asp_fsm_down()

◆ ipa_asp_fsm_down_onenter()

void ipa_asp_fsm_down_onenter ( struct osmo_fsm_inst * fi,
uint32_t prev_state )
static

◆ ipa_asp_fsm_inactive()

void ipa_asp_fsm_inactive ( struct osmo_fsm_inst * fi,
uint32_t event,
void * data )
static

◆ ipa_asp_fsm_inactive_onenter()

void ipa_asp_fsm_inactive_onenter ( struct osmo_fsm_inst * fi,
uint32_t prev_state )
static

◆ ipa_asp_fsm_start()

int ipa_asp_fsm_start ( struct osmo_ss7_asp * asp,
int log_level )
static

Start a new ASP finite state machine for given ASP (stored on asp->fi).

Parameters
[in]aspApplication Server Process for which to start FSM
[in]log_levelLogging Level for ASP FSM logging
Returns
0 on success; negative on error

References _ipa_asp_pick_unused_sls(), ipa_asp_fsm_priv::asp, osmo_ss7_as::cfg, osmo_ss7_asp::cfg, osmo_ss7_asp::dyn_allocated, osmo_ss7_as::fi, osmo_ss7_asp::fi, ipa_asp_fsm, ipa_t_beat_cb(), ipa_asp_fsm_priv::ipa_unit, osmo_ss7_as::name, osmo_ss7_asp::name, NULL, OSMO_SS7_ASP_ROLE_ASP, osmo_ss7_asp::role, ss7_asp_get_first_as(), ipa_asp_fsm_priv::t_beat, ipa_asp_fsm_priv::timer, and XUA_ASP_E_M_ASP_UP_REQ.

Referenced by xua_asp_fsm_start().

◆ ipa_asp_fsm_timer_cb()

int ipa_asp_fsm_timer_cb ( struct osmo_fsm_inst * fi)
static

◆ ipa_asp_fsm_wait_id_ack()

void ipa_asp_fsm_wait_id_ack ( struct osmo_fsm_inst * fi,
uint32_t event,
void * data )
static

◆ ipa_asp_fsm_wait_id_ack2()

void ipa_asp_fsm_wait_id_ack2 ( struct osmo_fsm_inst * fi,
uint32_t event,
void * data )
static

◆ ipa_asp_fsm_wait_id_get()

void ipa_asp_fsm_wait_id_get ( struct osmo_fsm_inst * fi,
uint32_t event,
void * data )
static

◆ ipa_asp_fsm_wait_id_resp()

◆ ipa_t_beat_cb()

◆ ipa_t_beat_send()

◆ ipa_t_beat_stop()

void ipa_t_beat_stop ( struct osmo_fsm_inst * fi)
static

◆ peer_send()

◆ peer_send_and_start_t_ack()

◆ peer_send_error()

int peer_send_error ( struct osmo_fsm_inst * fi,
uint32_t err_code )
static

◆ peer_send_error_ext()

int peer_send_error_ext ( struct osmo_fsm_inst * fi,
uint32_t err_code,
const uint8_t * rctx_be,
unsigned int rctx_size )
static

◆ send_xlm_prim_simple()

void send_xlm_prim_simple ( struct osmo_fsm_inst * fi,
enum osmo_xlm_prim_type prim_type,
enum osmo_prim_operation op )
static

◆ stop_t_ack()

void stop_t_ack ( struct osmo_fsm_inst * fi)
static

◆ xua_asp_allstate()

◆ xua_asp_fsm_active()

◆ xua_asp_fsm_active_onenter()

◆ xua_asp_fsm_cleanup()

void xua_asp_fsm_cleanup ( struct osmo_fsm_inst * fi,
enum osmo_fsm_term_cause cause )
static

◆ xua_asp_fsm_down()

◆ xua_asp_fsm_down_onenter()

void xua_asp_fsm_down_onenter ( struct osmo_fsm_inst * fi,
uint32_t prev_state )
static

◆ xua_asp_fsm_inactive()

◆ xua_asp_fsm_inactive_onenter()

◆ xua_asp_fsm_start()

int xua_asp_fsm_start ( struct osmo_ss7_asp * asp,
int log_level )

Start a new ASP finite state machine for given ASP (stored in asp->fi).

Parameters
[in]aspApplication Server Process for which to start FSM
[in]log_levelLogging Level for ASP FSM logging
Returns
0 on success; negative on error

References xua_asp_fsm_priv::asp, osmo_ss7_asp::cfg, osmo_ss7_asp::fi, ipa_asp_fsm_start(), osmo_ss7_asp::name, NULL, OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp::proto, xua_asp_fsm_priv::t_beat, xua_asp_fsm_priv::timer, xua_asp_fsm, and xua_t_beat_cb().

Referenced by osmo_ss7_asp_restart(), and xua_accept_cb().

◆ xua_asp_fsm_timer_cb()

int xua_asp_fsm_timer_cb ( struct osmo_fsm_inst * fi)
static

◆ xua_asp_tx_snm_daud_address_book()

◆ xua_asp_tx_unsolicited_aspia_ack()

◆ xua_msg_add_asp_rctx()

int xua_msg_add_asp_rctx ( struct xua_msg * xua,
struct osmo_ss7_asp * asp )
static

◆ xua_t_ack_cb()

◆ xua_t_beat_cb()

◆ xua_t_beat_send()

◆ xua_t_beat_stop()

void xua_t_beat_stop ( struct osmo_fsm_inst * fi)
static

Variable Documentation

◆ evt_ack_map

const uint32_t evt_ack_map[_NUM_XUA_ASP_E]
static
Initial value:
= {
}
@ XUA_ASP_E_ASPTM_ASPAC_ACK
Definition xua_asp_fsm.h:22
@ XUA_ASP_E_ASPSM_BEAT_ACK
Definition xua_asp_fsm.h:29
@ XUA_ASP_E_ASPSM_ASPDN
Definition xua_asp_fsm.h:23
@ XUA_ASP_E_ASPSM_ASPUP
Definition xua_asp_fsm.h:19
@ XUA_ASP_E_ASPSM_ASPDN_ACK
Definition xua_asp_fsm.h:24
@ XUA_ASP_E_ASPSM_ASPUP_ACK
Definition xua_asp_fsm.h:20
@ XUA_ASP_E_ASPTM_ASPAC
Definition xua_asp_fsm.h:21
@ XUA_ASP_E_ASPTM_ASPIA_ACK
Definition xua_asp_fsm.h:26
@ XUA_ASP_E_ASPTM_ASPIA
Definition xua_asp_fsm.h:25
@ XUA_ASP_E_ASPSM_BEAT
Definition xua_asp_fsm.h:28

Referenced by check_stop_t_ack().

◆ ipa_asp_fsm

struct osmo_fsm ipa_asp_fsm
Initial value:
= {
.name = "IPA_ASP",
.states = ipa_asp_states,
.num_states = ARRAY_SIZE(ipa_asp_states),
.timer_cb = ipa_asp_fsm_timer_cb,
.log_subsys = DLSS7,
.event_names = xua_asp_event_names,
.allstate_event_mask = S(XUA_ASP_E_SCTP_COMM_DOWN_IND) |
.allstate_action = ipa_asp_allstate,
.cleanup = ipa_asp_fsm_cleanup,
}
#define S(x)
Definition sccp_scoc_fsm.c:59
static void ipa_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition xua_asp_fsm.c:1470
static const struct osmo_fsm_state ipa_asp_states[]
Definition xua_asp_fsm.c:1533
static int ipa_asp_fsm_timer_cb(struct osmo_fsm_inst *fi)
Definition xua_asp_fsm.c:1510
static void ipa_asp_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
Definition xua_asp_fsm.c:1520
static const struct value_string xua_asp_event_names[]
Definition xua_asp_fsm.c:55
@ XUA_ASP_E_SCTP_RESTART_IND
Definition xua_asp_fsm.h:16
@ XUA_ASP_E_SCTP_COMM_DOWN_IND
Definition xua_asp_fsm.h:15
@ XUA_ASP_E_AS_ASSIGNED
Definition xua_asp_fsm.h:35

Referenced by ipa_asp_fsm_start(), and osmo_ss7_init().

◆ ipa_asp_states

const struct osmo_fsm_state ipa_asp_states[]
static

◆ xua_asp_event_names

const struct value_string xua_asp_event_names[]
static

◆ xua_asp_fsm

struct osmo_fsm xua_asp_fsm
Initial value:
= {
.name = "XUA_ASP",
.states = xua_asp_states,
.num_states = ARRAY_SIZE(xua_asp_states),
.timer_cb = xua_asp_fsm_timer_cb,
.log_subsys = DLSS7,
.event_names = xua_asp_event_names,
.allstate_event_mask = S(XUA_ASP_E_SCTP_COMM_DOWN_IND) |
.allstate_action = xua_asp_allstate,
.cleanup = xua_asp_fsm_cleanup,
}
static int xua_asp_fsm_timer_cb(struct osmo_fsm_inst *fi)
Definition xua_asp_fsm.c:970
static void xua_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition xua_asp_fsm.c:880
static void xua_asp_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
Definition xua_asp_fsm.c:977
static const struct osmo_fsm_state xua_asp_states[]
Definition xua_asp_fsm.c:991
@ XUA_ASP_E_ADM_BLOCKED
Definition xua_asp_fsm.h:38
@ XUA_ASP_E_ADM_UNBLOCKED
Definition xua_asp_fsm.h:39
@ XUA_ASP_E_MGMT_ERROR
Definition xua_asp_fsm.h:32

Referenced by osmo_ss7_init(), and xua_asp_fsm_start().

◆ xua_asp_states

const struct osmo_fsm_state xua_asp_states[]
static