Loading...
Searching...
No Matches
xua_asp_fsm.c File Reference
`#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 <osmocom/sigtran/xua_msg.h>`
`#include <osmocom/sigtran/protocol/sua.h>`
`#include "xua_asp_fsm.h"`
`#include "xua_as_fsm.h"`
`#include "xua_internal.h"`

## Data Structures

struct | xua_asp_fsm_priv
struct | ipa_asp_fsm_priv

## Macros

#define | S(x) (1 << (x))
#define | XUA_T_ACK_SEC 2
#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

struct osmo_xlm_prim * | xua_xlm_prim_alloc (enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
void | xua_asp_send_xlm_prim (struct osmo_ss7_asp *asp, struct osmo_xlm_prim *prim)
void | xua_asp_send_xlm_prim_simple (struct osmo_ss7_asp *asp, enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
static void | send_xlm_prim_simple (struct osmo_fsm_inst *fi, enum osmo_xlm_prim_type prim_type, enum osmo_prim_operation op)
static int | determine_traf_mode (struct osmo_ss7_asp *asp)
static int | xua_msg_add_asp_rctx (struct xua_msg *xua, 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 (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)
static void | check_stop_t_ack (struct osmo_fsm_inst *fi, uint32_t event)
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 struct osmo_fsm_inst * | ipa_asp_fsm_start (struct osmo_ss7_asp *asp, enum osmo_ss7_asp_role role, int log_level)
| Start a new ASP finite stae machine for given ASP.
struct osmo_fsm_inst * | xua_asp_fsm_start (struct osmo_ss7_asp *asp, enum osmo_ss7_asp_role role, int log_level)
| Start a new ASP finite stae machine for given ASP.
static int | get_fd_from_iafp (struct ipa_asp_fsm_priv *iafp)
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_allstate (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ipa_pong_timer_cb (void *_fi)
static int | ipa_asp_fsm_timer_cb (struct osmo_fsm_inst *fi)

## 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:
do { \
struct xua_asp_fsm_priv *_xafp = fi->priv; \
if (_xafp->role != OSMO_SS7_ASP_ROLE_ASP && \
_xafp->role != OSMO_SS7_ASP_ROLE_IPSP) { \
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, _xafp->role));\
return; \
} \
} while(0)
OSMO_SS7_ASP_ROLE_ASP
@ OSMO_SS7_ASP_ROLE_ASP
Definition osmo_ss7.h:380
OSMO_SS7_ASP_ROLE_IPSP
@ OSMO_SS7_ASP_ROLE_IPSP
Definition osmo_ss7.h:382
osmo_ss7_asp_role_names
const struct value_string osmo_ss7_asp_role_names[]
Definition osmo_ss7.c:87
xua_asp_fsm_priv
Definition xua_asp_fsm.c:76
xua_asp_fsm_priv::timer
struct osmo_timer_list timer
Definition xua_asp_fsm.c:86

## ENSURE_SG_OR_IPSP

#define ENSURE_SG_OR_IPSP | ( |  | fi,
|  |  | event
| ) |  |

Value:
do { \
struct xua_asp_fsm_priv *_xafp = fi->priv; \
if (_xafp->role != OSMO_SS7_ASP_ROLE_SG && \
_xafp->role != OSMO_SS7_ASP_ROLE_IPSP) { \
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, _xafp->role));\
return; \
} \
} while(0)
OSMO_SS7_ASP_ROLE_SG
@ OSMO_SS7_ASP_ROLE_SG
Definition osmo_ss7.h:381

## S

#define S | ( |  | x | ) | (1 << (x))

## XUA_T_ACK_SEC

#define XUA_T_ACK_SEC 2

## Enumeration Type Documentation

## ipa_asp_fsm_t

enum ipa_asp_fsm_t

Enumerator
T_WAIT_ID_RESP |
T_WAIT_ID_ACK |
T_WAIT_ID_GET |

## ipa_asp_state

enum 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

## check_stop_t_ack()

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

static

References evt_ack_map, and xua_asp_fsm_priv::timer.

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

## determine_traf_mode()

static int determine_traf_mode | ( | struct osmo_ss7_asp * | asp | ) |

static

References osmo_ss7_instance::as_list, osmo_ss7_as::cfg, osmo_ss7_asp::inst, osmo_ss7_as::list, osmo_ss7_as::mode, osmo_ss7_as::mode_set_by_vty, and osmo_ss7_as_has_asp().

Referenced by peer_send().

## dispatch_to_all_as()

static void dispatch_to_all_as | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | event
| ) |  |

static

References osmo_ss7_instance::as_list, xua_asp_fsm_priv::asp, osmo_ss7_as::fi, osmo_ss7_as::inst, osmo_ss7_asp::inst, osmo_ss7_as::list, osmo_ss7_as_has_asp(), and xua_asp_fsm_priv::timer.

Referenced by ipa_asp_fsm_active_onenter(), ipa_asp_fsm_inactive_onenter(), xua_asp_fsm_active_onenter(), xua_asp_fsm_down_onenter(), and xua_asp_fsm_inactive_onenter().

## get_fd_from_iafp()

static int get_fd_from_iafp | ( | struct ipa_asp_fsm_priv * | iafp | ) |

static

References ipa_asp_fsm_priv::asp, osmo_ss7_asp::client, and osmo_ss7_asp::server.

Referenced by ipa_asp_allstate(), ipa_asp_fsm_down(), ipa_asp_fsm_wait_id_ack(), ipa_asp_fsm_wait_id_get(), and ipa_asp_fsm_wait_id_resp().

## ipa_asp_allstate()

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

static

References get_fd_from_iafp(), IPA_ASP_S_DOWN, OSMO_XLM_PRIM_M_ASP_DOWN, ipa_asp_fsm_priv::pong_timer, send_xlm_prim_simple(), XUA_ASP_E_ASPSM_BEAT, XUA_ASP_E_ASPSM_BEAT_ACK, XUA_ASP_E_SCTP_COMM_DOWN_IND, and XUA_ASP_E_SCTP_RESTART_IND.

## ipa_asp_fsm_active()

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

static

References IPA_ASP_S_DOWN, XUA_ASP_E_M_ASP_DOWN_REQ, and XUA_ASP_E_M_ASP_INACTIVE_REQ.

## ipa_asp_fsm_active_onenter()

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

static

References dispatch_to_all_as(), XUA_ASPAS_ASP_ACTIVE_IND, and XUA_ASPAS_ASP_INACTIVE_IND.

## ipa_asp_fsm_down()

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

static

References get_fd_from_iafp(), IPA_ASP_S_WAIT_ID_GET, IPA_ASP_S_WAIT_ID_RESP, OSMO_SS7_ASP_ROLE_SG, ipa_asp_fsm_priv::role, T_WAIT_ID_GET, T_WAIT_ID_RESP, XUA_ASP_E_M_ASP_UP_REQ, and XUA_ASP_E_SCTP_EST_IND.

## ipa_asp_fsm_inactive()

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

static

References IPA_ASP_S_DOWN, and XUA_ASP_E_M_ASP_DOWN_REQ.

## ipa_asp_fsm_inactive_onenter()

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

static

References dispatch_to_all_as(), and XUA_ASPAS_ASP_INACTIVE_IND.

## ipa_asp_fsm_start()

static struct osmo_fsm_inst * ipa_asp_fsm_start | ( | struct osmo_ss7_asp * | asp,
|  | enum osmo_ss7_asp_role | role,
|  | int | log_level
| ) |  |

static

Start a new ASP finite stae machine for given ASP.

Parameters

  [in] | asp | Application Server Process for which to start FSM
  [in] | role | Role (ASP, SG, IPSP) of this FSM
  [in] | log_level | Logging Level for ASP FSM logging

Returns
  FSM instance on success; NULL on error

References ipa_asp_fsm_priv::asp, osmo_ss7_asp::cfg, ipa_asp_fsm, ipa_pong_timer_cb(), ipa_asp_fsm_priv::ipa_unit, osmo_ss7_asp::name, OSMO_SS7_ASP_ROLE_ASP, ipa_asp_fsm_priv::pong_timer, ipa_asp_fsm_priv::role, and XUA_ASP_E_M_ASP_UP_REQ.

Referenced by xua_asp_fsm_start().

## ipa_asp_fsm_timer_cb()

static int ipa_asp_fsm_timer_cb | ( | struct osmo_fsm_inst * | fi | ) |

static

References ipa_asp_fsm_priv::asp, and osmo_ss7_asp_disconnect().

## ipa_asp_fsm_wait_id_ack()

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

static

References get_fd_from_iafp(), IPA_ASP_E_ID_ACK, and IPA_ASP_S_ACTIVE.

## ipa_asp_fsm_wait_id_ack2()

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

static

References IPA_ASP_E_ID_ACK, and IPA_ASP_S_ACTIVE.

## ipa_asp_fsm_wait_id_get()

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

static

References ipa_asp_fsm_priv::asp, data, get_fd_from_iafp(), IPA_ASP_E_ID_ACK, IPA_ASP_E_ID_GET, IPA_ASP_S_ACTIVE, IPA_ASP_S_WAIT_ID_ACK, ipa_asp_fsm_priv::ipa_unit, osmo_ss7_asp_send(), and T_WAIT_ID_ACK.

## ipa_asp_fsm_wait_id_resp()

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

static

References ipa_asp_fsm_priv::asp, osmo_ss7_asp::cfg, data, get_fd_from_iafp(), osmo_ss7_asp::inst, IPA_ASP_E_ID_ACK, IPA_ASP_E_ID_RESP, IPA_ASP_S_WAIT_ID_ACK2, ipa_asp_fsm_priv::ipa_id_ack_rcvd, ipa_asp_fsm_priv::ipa_unit, osmo_ss7_asp::name, osmo_ss7_as_add_asp(), osmo_ss7_as_find_by_name(), osmo_ss7_asp_disconnect(), and T_WAIT_ID_ACK.

## ipa_pong_timer_cb()

static void ipa_pong_timer_cb | ( | void * | _fi | ) |

static

References ipa_asp_fsm_priv::asp, and osmo_ss7_asp_disconnect().

Referenced by ipa_asp_fsm_start().

## peer_send()

static int peer_send | ( | struct osmo_fsm_inst * | fi,
|  | int | out_event,
|  | struct xua_msg * | in
| ) |  |

static

References xua_asp_fsm_priv::asp, osmo_ss7_asp::asp_id, osmo_ss7_asp::asp_id_present, determine_traf_mode(), xua_msg::hdr, M3UA_IEI_HEARDBT_DATA, M3UA_IEI_ROUTE_CTX, M3UA_IEI_TRAF_MODE_TYP, osmo_ss7_asp_send(), osmo_ss7_tmode_to_xua(), SUA_ASPSM_BEAT, SUA_ASPSM_BEAT_ACK, SUA_ASPSM_DOWN, SUA_ASPSM_DOWN_ACK, SUA_ASPSM_UP, SUA_ASPSM_UP_ACK, SUA_ASPTM_ACTIVE, SUA_ASPTM_ACTIVE_ACK, SUA_ASPTM_INACTIVE, SUA_ASPTM_INACTIVE_ACK, SUA_IEI_ASP_ID, SUA_MSGC_ASPSM, SUA_MSGC_ASPTM, SUA_VERSION, xua_asp_fsm_priv::timer, XUA_ASP_E_ASPSM_ASPDN, XUA_ASP_E_ASPSM_ASPDN_ACK, XUA_ASP_E_ASPSM_ASPUP, XUA_ASP_E_ASPSM_ASPUP_ACK, XUA_ASP_E_ASPSM_BEAT, XUA_ASP_E_ASPSM_BEAT_ACK, XUA_ASP_E_ASPTM_ASPAC, XUA_ASP_E_ASPTM_ASPAC_ACK, XUA_ASP_E_ASPTM_ASPIA, XUA_ASP_E_ASPTM_ASPIA_ACK, XUA_HDR, xua_msg_add_asp_rctx(), xua_msg_add_u32(), xua_msg_alloc(), xua_msg_copy_part(), xua_msg_free(), and xua_to_msg().

Referenced by peer_send_and_start_t_ack(), xua_asp_allstate(), xua_asp_fsm_active(), xua_asp_fsm_down(), xua_asp_fsm_inactive(), and xua_t_ack_cb().

## peer_send_and_start_t_ack()

static int peer_send_and_start_t_ack | ( | struct osmo_fsm_inst * | fi,
|  | int | out_event
| ) |  |

static

References xua_asp_fsm_priv::out_event, peer_send(), xua_asp_fsm_priv::timer, xua_t_ack_cb(), and XUA_T_ACK_SEC.

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

## peer_send_error()

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

static

References xua_asp_fsm_priv::asp, xua_msg::hdr, osmo_ss7_asp_send(), SUA_IEI_ERR_CODE, SUA_MGMT_ERR, SUA_MSGC_MGMT, SUA_VERSION, xua_asp_fsm_priv::timer, xua_common_hdr::version, XUA_HDR, xua_msg_add_u32(), xua_msg_alloc(), xua_msg_free(), and xua_to_msg().

Referenced by xua_asp_fsm_active(), and xua_asp_fsm_inactive().

## send_xlm_prim_simple()

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

static

References xua_asp_fsm_priv::asp, xua_asp_fsm_priv::timer, and xua_asp_send_xlm_prim_simple().

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

## xua_asp_allstate()

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

static

References data, OSMO_XLM_PRIM_M_ASP_DOWN, peer_send(), send_xlm_prim_simple(), xua_asp_fsm_priv::t_ack, xua_asp_fsm_priv::timer, XUA_ASP_E_ASPSM_BEAT, XUA_ASP_E_ASPSM_BEAT_ACK, XUA_ASP_E_SCTP_COMM_DOWN_IND, XUA_ASP_E_SCTP_RESTART_IND, and XUA_ASP_S_DOWN.

## xua_asp_fsm_active()

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

static

References check_stop_t_ack(), data, ENSURE_ASP_OR_IPSP, ENSURE_SG_OR_IPSP, M3UA_ERR_UNEXPECTED_MSG, OSMO_XLM_PRIM_M_ASP_DOWN, OSMO_XLM_PRIM_M_ASP_INACTIVE, peer_send(), peer_send_and_start_t_ack(), peer_send_error(), send_xlm_prim_simple(), XUA_ASP_E_ASPSM_ASPDN, XUA_ASP_E_ASPSM_ASPDN_ACK, XUA_ASP_E_ASPSM_ASPUP, XUA_ASP_E_ASPSM_ASPUP_ACK, XUA_ASP_E_ASPTM_ASPAC, XUA_ASP_E_ASPTM_ASPAC_ACK, XUA_ASP_E_ASPTM_ASPIA, XUA_ASP_E_ASPTM_ASPIA_ACK, XUA_ASP_E_M_ASP_DOWN_REQ, XUA_ASP_E_M_ASP_INACTIVE_REQ, XUA_ASP_S_DOWN, and XUA_ASP_S_INACTIVE.

## xua_asp_fsm_active_onenter()

static void xua_asp_fsm_active_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | prev_state
| ) |  |

static

References dispatch_to_all_as(), and XUA_ASPAS_ASP_ACTIVE_IND.

## xua_asp_fsm_cleanup()

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

static

References xua_asp_fsm_priv::timer.

## xua_asp_fsm_down()

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

static

References xua_asp_fsm_priv::asp, osmo_ss7_asp::asp_id, osmo_ss7_asp::asp_id_present, check_stop_t_ack(), data, ENSURE_ASP_OR_IPSP, ENSURE_SG_OR_IPSP, osmo_ss7_asp::lm, OSMO_XLM_PRIM_M_ASP_UP, peer_send(), peer_send_and_start_t_ack(), send_xlm_prim_simple(), SUA_IEI_ASP_ID, xua_asp_fsm_priv::timer, XUA_ASP_E_ASPSM_ASPDN, XUA_ASP_E_ASPSM_ASPDN_ACK, XUA_ASP_E_ASPSM_ASPUP, XUA_ASP_E_ASPSM_ASPUP_ACK, XUA_ASP_E_M_ASP_ACTIVE_REQ, XUA_ASP_E_M_ASP_UP_REQ, XUA_ASP_E_SCTP_EST_IND, XUA_ASP_S_INACTIVE, xua_msg_find_tag(), and xua_msg_part_get_u32().

## xua_asp_fsm_down_onenter()

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

static

References dispatch_to_all_as(), and XUA_ASPAS_ASP_DOWN_IND.

## xua_asp_fsm_inactive()

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

static

References osmo_ss7_instance::as_list, xua_asp_fsm_priv::asp, osmo_ss7_as::cfg, check_stop_t_ack(), xua_msg_part::dat, data, ENSURE_ASP_OR_IPSP, ENSURE_SG_OR_IPSP, osmo_ss7_asp::inst, xua_msg_part::len, LOGPAS, M3UA_ERR_INVAL_ROUT_CTX, M3UA_ERR_UNSUPP_TRAF_MOD_TYP, M3UA_IEI_ROUTE_CTX, M3UA_IEI_TRAF_MODE_TYP, M3UA_TMOD_BCAST, M3UA_TMOD_LOADSHARE, M3UA_TMOD_OVERRIDE, osmo_ss7_as::mode, osmo_ss7_as::mode_set_by_peer, osmo_ss7_as::mode_set_by_vty, osmo_ss7_as_find_by_rctx(), osmo_ss7_as_has_asp(), osmo_ss7_as_tmode_compatible_xua(), osmo_ss7_as_traffic_mode_name(), osmo_ss7_tmode_from_xua(), OSMO_XLM_PRIM_M_ASP_ACTIVE, OSMO_XLM_PRIM_M_ASP_DOWN, peer_send(), peer_send_and_start_t_ack(), peer_send_error(), send_xlm_prim_simple(), xua_asp_fsm_priv::timer, XUA_ASP_E_ASPSM_ASPDN, XUA_ASP_E_ASPSM_ASPDN_ACK, XUA_ASP_E_ASPSM_ASPUP, XUA_ASP_E_ASPSM_ASPUP_ACK, XUA_ASP_E_ASPTM_ASPAC, XUA_ASP_E_ASPTM_ASPAC_ACK, XUA_ASP_E_ASPTM_ASPIA, XUA_ASP_E_ASPTM_ASPIA_ACK, XUA_ASP_E_M_ASP_ACTIVE_REQ, XUA_ASP_E_M_ASP_DOWN_REQ, XUA_ASP_S_ACTIVE, XUA_ASP_S_DOWN, xua_msg_find_tag(), and xua_msg_get_u32().

## xua_asp_fsm_inactive_onenter()

static void xua_asp_fsm_inactive_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | prev_state
| ) |  |

static

References dispatch_to_all_as(), and XUA_ASPAS_ASP_INACTIVE_IND.

## xua_asp_fsm_start()

struct osmo_fsm_inst * xua_asp_fsm_start | ( | struct osmo_ss7_asp * | asp,
|  | enum osmo_ss7_asp_role | role,
|  | int | log_level
| ) |  |

Start a new ASP finite stae machine for given ASP.

Parameters

  [in] | asp | Application Server Process for which to start FSM
  [in] | role | Role (ASP, SG, IPSP) of this FSM
  [in] | log_level | Logging Level for ASP FSM logging

Returns
  FSM instance on success; NULL on error

References xua_asp_fsm_priv::asp, osmo_ss7_asp::cfg, ipa_asp_fsm_start(), osmo_ss7_asp::name, OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp::proto, xua_asp_fsm_priv::role, xua_asp_fsm_priv::timer, and xua_asp_fsm.

Referenced by osmo_ss7_asp_restart().

## xua_asp_fsm_timer_cb()

static int xua_asp_fsm_timer_cb | ( | struct osmo_fsm_inst * | fi | ) |

static

## xua_asp_send_xlm_prim()

void xua_asp_send_xlm_prim | ( | struct osmo_ss7_asp * | asp,
|  | struct osmo_xlm_prim * | prim
| ) |  |

References osmo_ss7_asp::lm, LOGPASP, osmo_xlm_prim::oph, osmo_xlm_prim_name(), and osmo_xua_layer_manager::prim_cb.

Referenced by handle_rkey_dereg_resp(), handle_rkey_reg_resp(), m3ua_rx_mgmt_err(), m3ua_rx_mgmt_ntfy(), and xua_asp_send_xlm_prim_simple().

## xua_asp_send_xlm_prim_simple()

void xua_asp_send_xlm_prim_simple | ( | struct osmo_ss7_asp * | asp,
|  | enum osmo_xlm_prim_type | prim_type,
|  | enum osmo_prim_operation | op
| ) |  |

References xua_asp_send_xlm_prim(), and xua_xlm_prim_alloc().

Referenced by send_xlm_prim_simple(), xua_accept_cb(), xua_cli_close(), xua_cli_connect_cb(), xua_cli_read_cb(), xua_srv_conn_cb(), and xua_srv_conn_closed_cb().

## xua_msg_add_asp_rctx()

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

static

References osmo_ss7_instance::as_list, osmo_ss7_as::cfg, osmo_ss7_routing_key::context, osmo_ss7_asp::inst, osmo_ss7_as::list, M3UA_IEI_ROUTE_CTX, osmo_ss7_as_has_asp(), osmo_ss7_as::routing_key, and xua_msg_add_data().

Referenced by peer_send().

## xua_t_ack_cb()

static void xua_t_ack_cb | ( | void * | data | ) |

static

References data, peer_send(), xua_asp_fsm_priv::timer, and XUA_T_ACK_SEC.

Referenced by peer_send_and_start_t_ack().

## xua_xlm_prim_alloc()

struct osmo_xlm_prim * xua_xlm_prim_alloc | ( | enum osmo_xlm_prim_type | prim_type,
|  | enum osmo_prim_operation | op
| ) |  |

References osmo_xlm_prim::oph, and XUA_SAP_LM.

Referenced by handle_rkey_dereg_resp(), handle_rkey_reg_resp(), lm_timer_cb(), m3ua_rx_mgmt_err(), m3ua_rx_mgmt_ntfy(), and xua_asp_send_xlm_prim_simple().

## Variable Documentation

## evt_ack_map

const uint32_t evt_ack_map[_NUM_XUA_ASP_E]

static

Initial value:
= {
[XUA_ASP_E_ASPSM_ASPUP] = XUA_ASP_E_ASPSM_ASPUP_ACK,
[XUA_ASP_E_ASPTM_ASPAC] = XUA_ASP_E_ASPTM_ASPAC_ACK,
[XUA_ASP_E_ASPSM_ASPDN] = XUA_ASP_E_ASPSM_ASPDN_ACK,
[XUA_ASP_E_ASPTM_ASPIA] = XUA_ASP_E_ASPTM_ASPIA_ACK,
[XUA_ASP_E_ASPSM_BEAT] = XUA_ASP_E_ASPSM_BEAT_ACK,
}
XUA_ASP_E_ASPTM_ASPAC_ACK
@ XUA_ASP_E_ASPTM_ASPAC_ACK
Definition xua_asp_fsm.h:22
XUA_ASP_E_ASPSM_BEAT_ACK
@ XUA_ASP_E_ASPSM_BEAT_ACK
Definition xua_asp_fsm.h:29
XUA_ASP_E_ASPSM_ASPDN
@ XUA_ASP_E_ASPSM_ASPDN
Definition xua_asp_fsm.h:23
XUA_ASP_E_ASPSM_ASPUP
@ XUA_ASP_E_ASPSM_ASPUP
Definition xua_asp_fsm.h:19
XUA_ASP_E_ASPSM_ASPDN_ACK
@ XUA_ASP_E_ASPSM_ASPDN_ACK
Definition xua_asp_fsm.h:24
XUA_ASP_E_ASPSM_ASPUP_ACK
@ XUA_ASP_E_ASPSM_ASPUP_ACK
Definition xua_asp_fsm.h:20
XUA_ASP_E_ASPTM_ASPAC
@ XUA_ASP_E_ASPTM_ASPAC
Definition xua_asp_fsm.h:21
XUA_ASP_E_ASPTM_ASPIA_ACK
@ XUA_ASP_E_ASPTM_ASPIA_ACK
Definition xua_asp_fsm.h:26
XUA_ASP_E_ASPTM_ASPIA
@ XUA_ASP_E_ASPTM_ASPIA
Definition xua_asp_fsm.h:25
XUA_ASP_E_ASPSM_BEAT
@ 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) |
S(XUA_ASP_E_SCTP_RESTART_IND) |
S(XUA_ASP_E_ASPSM_BEAT) |
S(XUA_ASP_E_ASPSM_BEAT_ACK),
.allstate_action = ipa_asp_allstate,
}
ipa_asp_allstate
static void ipa_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition xua_asp_fsm.c:1051
ipa_asp_states
static const struct osmo_fsm_state ipa_asp_states[]
Definition xua_asp_fsm.c:1098
ipa_asp_fsm_timer_cb
static int ipa_asp_fsm_timer_cb(struct osmo_fsm_inst *fi)
Definition xua_asp_fsm.c:1088
S
#define S(x)
Definition xua_asp_fsm.c:34
xua_asp_event_names
static const struct value_string xua_asp_event_names[]
Definition xua_asp_fsm.c:46
XUA_ASP_E_SCTP_RESTART_IND
@ XUA_ASP_E_SCTP_RESTART_IND
Definition xua_asp_fsm.h:16
XUA_ASP_E_SCTP_COMM_DOWN_IND
@ XUA_ASP_E_SCTP_COMM_DOWN_IND
Definition xua_asp_fsm.h:15

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

Initial value:
= {
{ XUA_ASP_E_M_ASP_UP_REQ, "M-ASP_UP.req" },
{ XUA_ASP_E_M_ASP_ACTIVE_REQ, "M-ASP_ACTIVE.req" },
{ XUA_ASP_E_M_ASP_DOWN_REQ, "M-ASP_DOWN.req" },
{ XUA_ASP_E_M_ASP_INACTIVE_REQ, "M-ASP_INACTIVE.req" },
{ XUA_ASP_E_SCTP_COMM_DOWN_IND, "SCTP-COMM_DOWN.ind" },
{ XUA_ASP_E_SCTP_RESTART_IND, "SCTP-RESTART.ind" },
{ XUA_ASP_E_SCTP_EST_IND, "SCTP-EST.ind" },
{ XUA_ASP_E_ASPSM_ASPUP, "ASPSM-ASP_UP" },
{ XUA_ASP_E_ASPSM_ASPUP_ACK, "ASPSM-ASP_UP_ACK" },
{ XUA_ASP_E_ASPTM_ASPAC, "ASPTM-ASP_AC" },
{ XUA_ASP_E_ASPTM_ASPAC_ACK, "ASPTM-ASP_AC_ACK" },
{ XUA_ASP_E_ASPSM_ASPDN, "ASPSM-ASP_DN" },
{ XUA_ASP_E_ASPSM_ASPDN_ACK, "ASPSM-ASP_DN_ACK" },
{ XUA_ASP_E_ASPTM_ASPIA, "ASPTM-ASP_IA" },
{ XUA_ASP_E_ASPTM_ASPIA_ACK, "ASPTM_ASP_IA_ACK" },
{ XUA_ASP_E_ASPSM_BEAT, "ASPSM_BEAT" },
{ XUA_ASP_E_ASPSM_BEAT_ACK, "ASPSM_BEAT_ACK" },
{ IPA_ASP_E_ID_RESP, "IPA_CCM_ID_RESP" },
{ IPA_ASP_E_ID_GET, "IPA_CCM_ID_GET" },
{ IPA_ASP_E_ID_ACK, "IPA_CCM_ID_ACK" },
{ 0, NULL }
}
XUA_ASP_E_SCTP_EST_IND
@ XUA_ASP_E_SCTP_EST_IND
Definition xua_asp_fsm.h:17
IPA_ASP_E_ID_RESP
@ IPA_ASP_E_ID_RESP
Definition xua_asp_fsm.h:32
IPA_ASP_E_ID_ACK
@ IPA_ASP_E_ID_ACK
Definition xua_asp_fsm.h:33
XUA_ASP_E_M_ASP_INACTIVE_REQ
@ XUA_ASP_E_M_ASP_INACTIVE_REQ
Definition xua_asp_fsm.h:13
XUA_ASP_E_M_ASP_ACTIVE_REQ
@ XUA_ASP_E_M_ASP_ACTIVE_REQ
Definition xua_asp_fsm.h:11
IPA_ASP_E_ID_GET
@ IPA_ASP_E_ID_GET
Definition xua_asp_fsm.h:34
XUA_ASP_E_M_ASP_UP_REQ
@ XUA_ASP_E_M_ASP_UP_REQ
Definition xua_asp_fsm.h:10
XUA_ASP_E_M_ASP_DOWN_REQ
@ XUA_ASP_E_M_ASP_DOWN_REQ
Definition xua_asp_fsm.h:12

## 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) |
S(XUA_ASP_E_SCTP_RESTART_IND) |
S(XUA_ASP_E_ASPSM_BEAT) |
S(XUA_ASP_E_ASPSM_BEAT_ACK),
.allstate_action = xua_asp_allstate,
.cleanup = xua_asp_fsm_cleanup,
}
xua_asp_fsm_timer_cb
static int xua_asp_fsm_timer_cb(struct osmo_fsm_inst *fi)
Definition xua_asp_fsm.c:688
xua_asp_allstate
static void xua_asp_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition xua_asp_fsm.c:663
xua_asp_fsm_cleanup
static void xua_asp_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
Definition xua_asp_fsm.c:695
xua_asp_states
static const struct osmo_fsm_state xua_asp_states[]
Definition xua_asp_fsm.c:702

Referenced by osmo_ss7_init(), and xua_asp_fsm_start().

## xua_asp_states

const struct osmo_fsm_state xua_asp_states[]

static