xua_as_fsm.c File Reference
`#include <string.h>`
`#include <arpa/inet.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/sigtran/osmo_ss7.h>`
`#include <osmocom/sigtran/sigtran_sap.h>`
`#include <osmocom/sigtran/xua_msg.h>`
`#include <osmocom/sigtran/protocol/sua.h>`
`#include <osmocom/sigtran/protocol/m3ua.h>`
`#include "xua_asp_fsm.h"`
`#include "xua_as_fsm.h"`
`#include "xua_internal.h"`

## Data Structures

struct | xua_as_fsm_priv

## Macros

#define | S(x) (1 << (x))
#define | MSEC_TO_S_US(x) (x/1000), ((x%1000)*10)

## Functions

static struct msgb * | encode_notify (const struct osmo_xlm_prim_notify *npar)
static int | as_notify_all_asp (struct osmo_ss7_as *as, struct osmo_xlm_prim_notify *npar)
static struct osmo_ss7_asp * | xua_as_select_asp_override (struct osmo_ss7_as *as)
static struct osmo_ss7_asp * | xua_as_select_asp_roundrobin (struct osmo_ss7_as *as)
int | xua_as_transmit_msg_broadcast (struct osmo_ss7_as *as, struct msgb *msg)
int | xua_as_transmit_msg (struct osmo_ss7_as *as, struct msgb *msg)
static bool | check_any_other_asp_not_down (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp_cmp)
static bool | check_any_other_asp_in_active (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp_cmp)
static void | notify_any_other_active_asp_as_inactive (struct osmo_ss7_as *as, struct osmo_ss7_asp *asp_cmp)
static void | t_r_callback (void *_fi)
static void | xua_as_fsm_down (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | xua_as_fsm_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | xua_as_fsm_inactive (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | xua_as_fsm_active (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | xua_as_fsm_pending (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | xua_as_fsm_cleanup (struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
struct osmo_fsm_inst * | xua_as_fsm_start (struct osmo_ss7_as *as, int log_level)
| Start an AS FSM for a given Application Server. More...

## Variables

static const struct value_string | xua_as_event_names []
static const struct osmo_fsm_state | xua_as_fsm_states []
struct osmo_fsm | xua_as_fsm

## Macro Definition Documentation

## MSEC_TO_S_US

#define MSEC_TO_S_US | ( |  | x | ) | (x/1000), ((x%1000)*10)

## S

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

## Function Documentation

## as_notify_all_asp()

static int as_notify_all_asp | ( | struct osmo_ss7_as * | as,
|  | struct osmo_xlm_prim_notify * | npar
| ) |  |

static

References osmo_ss7_asp::asp_id, osmo_xlm_prim_notify::asp_id, osmo_ss7_asp::asp_id_present, osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp::cfg, encode_notify(), osmo_ss7_asp::fi, NOTIFY_PAR_P_ASP_ID, OSMO_SS7_ASP_PROT_IPA, OSMO_SS7_ASP_ROLE_ASP, osmo_ss7_asp_send(), osmo_xlm_prim_notify::presence, osmo_ss7_as::proto, osmo_ss7_asp::role, and XUA_ASP_S_DOWN.

## check_any_other_asp_in_active()

static bool check_any_other_asp_in_active | ( | struct osmo_ss7_as * | as,
|  | struct osmo_ss7_asp * | asp_cmp
| ) |  |

static

References osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp::fi, and XUA_ASP_S_ACTIVE.

Referenced by xua_as_fsm_active().

## check_any_other_asp_not_down()

static bool check_any_other_asp_not_down | ( | struct osmo_ss7_as * | as,
|  | struct osmo_ss7_asp * | asp_cmp
| ) |  |

static

References osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp::fi, and XUA_ASP_S_DOWN.

Referenced by xua_as_fsm_inactive(), and xua_as_fsm_pending().

## encode_notify()

static struct msgb* encode_notify | ( | const struct osmo_xlm_prim_notify * | npar | ) |

static

References m3ua_encode_notify(), M3UA_VERSION, xua_msg_free(), and xua_to_msg().

Referenced by as_notify_all_asp(), and notify_any_other_active_asp_as_inactive().

## notify_any_other_active_asp_as_inactive()

static void notify_any_other_active_asp_as_inactive | ( | struct osmo_ss7_as * | as,
|  | struct osmo_ss7_asp * | asp_cmp
| ) |  |

static

References osmo_ss7_asp::asp_id, osmo_xlm_prim_notify::asp_id, osmo_ss7_asp::asp_id_present, osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp::cfg, encode_notify(), osmo_ss7_asp::fi, M3UA_NOTIFY_I_OT_ALT_ASP_ACT, M3UA_NOTIFY_T_OTHER, osmo_ss7_asp_active(), OSMO_SS7_ASP_PROT_IPA, osmo_ss7_asp_send(), osmo_ss7_asp::proto, osmo_xlm_prim_notify::status_type, and XUA_ASP_S_INACTIVE.

Referenced by xua_as_fsm_active().

## t_r_callback()

static void t_r_callback | ( | void * | _fi | ) |

static

References XUA_AS_E_RECOVERY_EXPD.

Referenced by xua_as_fsm_start().

## xua_as_fsm_active()

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

static

References xua_as_fsm_priv::as, osmo_ss7_as::cfg, check_any_other_asp_in_active(), data, osmo_ss7_as::mode, MSEC_TO_S_US, notify_any_other_active_asp_as_inactive(), OSMO_SS7_AS_TMOD_OVERRIDE, xua_as_fsm_priv::recovery, osmo_ss7_as::recovery_timeout_msec, xua_as_fsm_priv::t_r, XUA_AS_E_TRANSFER_REQ, XUA_AS_S_PENDING, xua_as_transmit_msg(), XUA_ASPAS_ASP_ACTIVE_IND, XUA_ASPAS_ASP_DOWN_IND, and XUA_ASPAS_ASP_INACTIVE_IND.

## xua_as_fsm_cleanup()

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

static

## xua_as_fsm_down()

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

static

References XUA_AS_S_INACTIVE, XUA_ASPAS_ASP_DOWN_IND, and XUA_ASPAS_ASP_INACTIVE_IND.

## xua_as_fsm_inactive()

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

static

References xua_as_fsm_priv::as, check_any_other_asp_not_down(), data, XUA_AS_S_ACTIVE, XUA_AS_S_DOWN, XUA_ASPAS_ASP_ACTIVE_IND, XUA_ASPAS_ASP_DOWN_IND, and XUA_ASPAS_ASP_INACTIVE_IND.

## xua_as_fsm_onenter()

static void xua_as_fsm_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state
| ) |  |

static

References xua_as_fsm_priv::as, M3UA_NOTIFY_T_STATCHG, and osmo_xlm_prim_notify::status_type.

## xua_as_fsm_pending()

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

static

References xua_as_fsm_priv::as, check_any_other_asp_not_down(), data, xua_as_fsm_priv::queued_msgs, xua_as_fsm_priv::recovery, xua_as_fsm_priv::t_r, XUA_AS_E_RECOVERY_EXPD, XUA_AS_E_TRANSFER_REQ, XUA_AS_S_ACTIVE, XUA_AS_S_DOWN, XUA_AS_S_INACTIVE, xua_as_transmit_msg(), XUA_ASPAS_ASP_ACTIVE_IND, XUA_ASPAS_ASP_DOWN_IND, and XUA_ASPAS_ASP_INACTIVE_IND.

## xua_as_fsm_start()

struct osmo_fsm_inst* xua_as_fsm_start | ( | struct osmo_ss7_as * | as,
|  | int | log_level
| ) |  |

Start an AS FSM for a given Application Server.

Parameters

  [in] | as | Application Server for which to start the AS FSM
  [in] | log_level | Logging level for logging of this FSM

Returns
  FSM instance in case of success; NULL in case of error

References xua_as_fsm_priv::as, osmo_ss7_as::cfg, osmo_ss7_as::name, xua_as_fsm_priv::queued_msgs, xua_as_fsm_priv::recovery, xua_as_fsm_priv::t_r, t_r_callback(), and xua_as_fsm.

Referenced by osmo_ss7_as_find_or_create().

## xua_as_select_asp_override()

static struct osmo_ss7_asp* xua_as_select_asp_override | ( | struct osmo_ss7_as * | as | ) |

static

References osmo_ss7_as::asps, osmo_ss7_as::cfg, and osmo_ss7_asp_active().

## xua_as_select_asp_roundrobin()

static struct osmo_ss7_asp* xua_as_select_asp_roundrobin | ( | struct osmo_ss7_as * | as | ) |

static

References osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_as::last_asp_idx_sent, and osmo_ss7_asp_active().

## xua_as_transmit_msg()

int xua_as_transmit_msg | ( | struct osmo_ss7_as * | as,
|  | struct msgb * | msg
| ) |  |

Referenced by ipa_tx_xua_as(), xua_as_fsm_active(), and xua_as_fsm_pending().

## xua_as_transmit_msg_broadcast()

int xua_as_transmit_msg_broadcast | ( | struct osmo_ss7_as * | as,
|  | struct msgb * | msg
| ) |  |

References osmo_ss7_as::asps, osmo_ss7_as::cfg, osmo_ss7_asp_active(), and osmo_ss7_asp_send().

## Variable Documentation

## xua_as_event_names

const struct value_string xua_as_event_names[]

static

Initial value:
= {
{ XUA_ASPAS_ASP_INACTIVE_IND, "ASPAS-ASP_INACTIVE.ind" },
{ XUA_ASPAS_ASP_DOWN_IND, "ASPAS-ASP_DOWN.ind" },
{ XUA_ASPAS_ASP_ACTIVE_IND, "ASPAS-ASP_ACTIVE.ind" },
{ XUA_AS_E_RECOVERY_EXPD, "AS-T_REC_EXPD.ind" },
{ XUA_AS_E_TRANSFER_REQ, "AS-TRANSFER.req" },
{ 0, NULL }
}
XUA_ASPAS_ASP_DOWN_IND
@ XUA_ASPAS_ASP_DOWN_IND
Definition: xua_as_fsm.h:14
XUA_ASPAS_ASP_ACTIVE_IND
@ XUA_ASPAS_ASP_ACTIVE_IND
Definition: xua_as_fsm.h:15
XUA_AS_E_TRANSFER_REQ
@ XUA_AS_E_TRANSFER_REQ
Definition: xua_as_fsm.h:17
XUA_ASPAS_ASP_INACTIVE_IND
@ XUA_ASPAS_ASP_INACTIVE_IND
Definition: xua_as_fsm.h:13
XUA_AS_E_RECOVERY_EXPD
@ XUA_AS_E_RECOVERY_EXPD
Definition: xua_as_fsm.h:16

## xua_as_fsm

struct osmo_fsm xua_as_fsm

Initial value:
= {
.name = "XUA_AS",
.states = xua_as_fsm_states,
.num_states = ARRAY_SIZE(xua_as_fsm_states),
.log_subsys = DLSS7,
.event_names = xua_as_event_names,
.cleanup = xua_as_fsm_cleanup,
}
xua_as_fsm_cleanup
static void xua_as_fsm_cleanup(struct osmo_fsm_inst *fi, enum osmo_fsm_term_cause cause)
Definition: xua_as_fsm.c:418
xua_as_event_names
static const struct value_string xua_as_event_names[]
Definition: xua_as_fsm.c:168
xua_as_fsm_states
static const struct osmo_fsm_state xua_as_fsm_states[]
Definition: xua_as_fsm.c:425

Referenced by osmo_ss7_init(), and xua_as_fsm_start().

## xua_as_fsm_states

const struct osmo_fsm_state xua_as_fsm_states[]

static