Loading...
Searching...
No Matches
gprs_ns2_sns.c File Reference

NS Sub-Network Service Protocol implementation 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05) as well as its successor 3GPP TS 48.016. More...

`#include <errno.h>`
`#include <netinet/in.h>`
`#include <arpa/inet.h>`
`#include <stdint.h>`
`#include <osmocom/core/fsm.h>`
`#include <osmocom/core/msgb.h>`
`#include <osmocom/core/socket.h>`
`#include <osmocom/core/sockaddr_str.h>`
`#include <osmocom/core/talloc.h>`
`#include <osmocom/gsm/tlv.h>`
`#include <osmocom/gprs/gprs_msgb.h>`
`#include <osmocom/gprs/gprs_ns2.h>`
`#include <osmocom/gprs/protocol/gsm_08_16.h>`
`#include "gprs_ns2_internal.h"`
`#include <osmocom/vty/vty.h>`
`#include <osmocom/vty/misc.h>`

## Data Structures

struct | sns_endpoint
struct | ns2_sns_bind
struct | ns2_sns_procedure
struct | ns2_sns_elems
struct | ns2_sns_state

## Macros

#define | S(x)
#define | GPRS_SNS_FLAG_KEEP_SELECT_ENDPOINT_ORDER (void *) 1
#define | sns_failed(fi, reason)
#define | ip4_weight_sum_data(elems)
#define | ip4_weight_sum_sig(elems)
#define | ip6_weight_sum_data(elems)
#define | ip6_weight_sum_sig(elems)
#define | ip46_weight_sum_data(elems)
#define | ip46_weight_sum_sig(elems)

## Enumerations

enum | ns2_sns_role { GPRS_SNS_ROLE_BSS , GPRS_SNS_ROLE_SGSN }
enum | gprs_sns_bss_state { GPRS_SNS_ST_UNCONFIGURED , GPRS_SNS_ST_BSS_SIZE , GPRS_SNS_ST_BSS_CONFIG_BSS , GPRS_SNS_ST_BSS_CONFIG_SGSN , GPRS_SNS_ST_CONFIGURED , GPRS_SNS_ST_SGSN_WAIT_CONFIG , GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK , GPRS_SNS_ST_LOCAL_PROCEDURE }
enum | sns_procedure { SNS_PROC_NONE , SNS_PROC_ADD , SNS_PROC_DEL , SNS_PROC_CHANGE_WEIGHT }

## Functions

static struct gprs_ns2_nse * | nse_inst_from_fi (struct osmo_fsm_inst *fi)
static void | _sns_failed (struct osmo_fsm_inst *fi, const char *reason, const char *file, int line)
static int | ip4_weight_sum (const struct ns2_sns_elems *elems, bool data_weight)
static int | ip6_weight_sum (const struct ns2_sns_elems *elems, bool data_weight)
static int | ip46_weight_sum (const struct ns2_sns_elems *elems, bool data_weight)
static struct gprs_ns2_vc * | nsvc_by_ip4_elem (struct gprs_ns2_nse *nse, const struct gprs_ns_ie_ip4_elem *ip4)
static struct gprs_ns2_vc * | nsvc_by_ip6_elem (struct gprs_ns2_nse *nse, const struct gprs_ns_ie_ip6_elem *ip6)
const struct osmo_sockaddr * | gprs_ns2_nse_sns_remote (struct gprs_ns2_nse *nse)
| Return the initial SNS remote socket address.
void | ns2_sns_replace_nsvc (struct gprs_ns2_vc *nsvc)
| called when a nsvc is beeing freed or the nsvc became dead
static void | ns2_clear_elems (struct ns2_sns_elems *elems)
static void | ns2_clear_procedures (struct ns2_sns_state *gss)
static void | ns2_vc_create_ip (struct osmo_fsm_inst *fi, struct gprs_ns2_nse *nse, const struct osmo_sockaddr *remote, uint8_t sig_weight, uint8_t data_weight)
static void | ns2_nsvc_create_ip4 (struct osmo_fsm_inst *fi, struct gprs_ns2_nse *nse, const struct gprs_ns_ie_ip4_elem *ip4)
static void | ns2_nsvc_create_ip6 (struct osmo_fsm_inst *fi, struct gprs_ns2_nse *nse, const struct gprs_ns_ie_ip6_elem *ip6)
static struct gprs_ns2_vc * | nsvc_for_bind_and_remote (struct gprs_ns2_nse *nse, struct gprs_ns2_vc_bind *bind, const struct osmo_sockaddr *remote)
static int | create_missing_nsvcs (struct osmo_fsm_inst *fi)
static int | add_ip4_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip4_elem *ip4)
static int | remove_ip4_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip4_elem *ip4)
static int | update_ip4_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip4_elem *ip4)
static int | add_ip6_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip6_elem *ip6)
static int | remove_ip6_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip6_elem *ip6)
static int | update_ip6_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, const struct gprs_ns_ie_ip6_elem *ip6)
static int | remove_bind_elem (struct ns2_sns_state *gss, struct ns2_sns_elems *elems, struct ns2_sns_bind *sbind)
static int | do_sns_change_weight (struct osmo_fsm_inst *fi, const struct gprs_ns_ie_ip4_elem *ip4, const struct gprs_ns_ie_ip6_elem *ip6)
static int | do_sns_delete (struct osmo_fsm_inst *fi, const struct gprs_ns_ie_ip4_elem *ip4, const struct gprs_ns_ie_ip6_elem *ip6)
static int | do_sns_add (struct osmo_fsm_inst *fi, const struct gprs_ns_ie_ip4_elem *ip4, const struct gprs_ns_ie_ip6_elem *ip6)
static void | ns2_sns_st_bss_unconfigured (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_bss_size (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int | ns2_sns_count_num_local_ep (struct osmo_fsm_inst *fi, int ip_proto)
static int | ns2_sns_copy_local_endpoints (struct ns2_sns_state *gss)
static void | ns2_sns_compute_local_ep_from_binds (struct osmo_fsm_inst *fi)
static void | ns2_sns_choose_next_bind (struct ns2_sns_state *gss)
static void | ns2_sns_st_bss_size_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | ns2_sns_st_bss_config_bss (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_bss_config_bss_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static int | ns_sns_configured_timeout (struct osmo_fsm_inst *fi)
static int | ns_sns_append_remote_eps (struct osmo_fsm_inst *fi, const struct tlv_parsed *tp)
static void | ns2_sns_st_bss_config_sgsn_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | ns2_sns_st_bss_config_sgsn (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_configured_add (struct osmo_fsm_inst *fi, struct ns2_sns_state *gss, struct tlv_parsed *tp)
static void | ns2_sns_st_configured_delete (struct osmo_fsm_inst *fi, struct ns2_sns_state *gss, struct tlv_parsed *tp)
static void | ns2_sns_st_configured_change (struct osmo_fsm_inst *fi, struct ns2_sns_state *gss, struct tlv_parsed *tp)
static void | ns2_sns_st_configured (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_configured_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | ns2_sns_st_local_procedure_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | create_nsvc_for_new_sbind (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind)
static void | ns2_sns_st_local_procedure (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int | ns2_sns_fsm_bss_timer_cb (struct osmo_fsm_inst *fi)
static struct gprs_ns_ie_ip4_elem * | ns2_get_sbind_ip4_entry (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind, struct ns2_sns_elems *endpoints)
static struct gprs_ns_ie_ip6_elem * | ns2_get_sbind_ip6_entry (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind, struct ns2_sns_elems *endpoints)
static int | ns2_update_weight_entry (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind, struct ns2_sns_elems *endpoints)
static void | ns2_add_procedure (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind, enum sns_procedure procedure_type)
static int | ns2_sns_add_elements (struct ns2_sns_state *gss, struct ns2_sns_bind *sbind, struct ns2_sns_elems *elems)
static void | ns2_sns_st_all_action (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int | ns2_sns_bss_valid_configuration (struct ns2_sns_state *gss)
static void | ns2_sns_st_all_action_bss (struct osmo_fsm_inst *fi, uint32_t event, void *data)
struct osmo_fsm_inst * | ns2_sns_bss_fsm_alloc (struct gprs_ns2_nse *nse, const char *id)
| Allocate an IP-SNS FSM for the BSS side.
int | ns2_sns_rx (struct gprs_ns2_vc *nsvc, struct msgb *msg, struct tlv_parsed *tp)
| main entry point for receiving SNS messages from the network.
static void | vty_dump_sns_ip4 (struct vty *vty, const char *prefix, const struct gprs_ns_ie_ip4_elem *ip4)
static void | vty_dump_sns_ip6 (struct vty *vty, const char *prefix, const struct gprs_ns_ie_ip6_elem *ip6)
void | ns2_sns_dump_vty (struct vty *vty, const char *prefix, const struct gprs_ns2_nse *nse, bool stats)
| Dump the IP-SNS state to a vty.
void | ns2_sns_write_vty (struct vty *vty, const struct gprs_ns2_nse *nse)
| write IP-SNS to a vty
static struct sns_endpoint * | ns2_get_sns_endpoint (struct ns2_sns_state *state, const struct osmo_sockaddr *saddr)
int | gprs_ns2_sns_add_endpoint (struct gprs_ns2_nse *nse, const struct osmo_sockaddr *saddr)
| gprs_ns2_sns_add_endpoint
int | gprs_ns2_sns_del_endpoint (struct gprs_ns2_nse *nse, const struct osmo_sockaddr *saddr)
| gprs_ns2_sns_del_endpoint
int | gprs_ns2_sns_count (struct gprs_ns2_nse *nse)
| gprs_ns2_sns_count
void | ns2_sns_notify_alive (struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc, bool alive)
int | gprs_ns2_sns_add_bind (struct gprs_ns2_nse *nse, struct gprs_ns2_vc_bind *bind)
int | gprs_ns2_sns_del_bind (struct gprs_ns2_nse *nse, struct gprs_ns2_vc_bind *bind)
void | ns2_sns_update_weights (struct gprs_ns2_vc_bind *bind)
static void | ns2_clear_sgsn (struct ns2_sns_state *gss, struct gprs_ns2_vc *size_nsvc)
static void | ns2_sns_st_sgsn_unconfigured_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | ns2_sns_st_sgsn_unconfigured (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_sgsn_wait_config (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static void | ns2_sns_st_sgsn_wait_config_ack_onenter (struct osmo_fsm_inst *fi, uint32_t old_state)
static void | ns2_sns_st_sgsn_wait_config_ack (struct osmo_fsm_inst *fi, uint32_t event, void *data)
static int | ns2_sns_fsm_sgsn_timer_cb (struct osmo_fsm_inst *fi)
static void | ns2_sns_st_all_action_sgsn (struct osmo_fsm_inst *fi, uint32_t event, void *data)
struct osmo_fsm_inst * | ns2_sns_sgsn_fsm_alloc (struct gprs_ns2_nse *nse, const char *id)
| Allocate an IP-SNS FSM for the SGSN side.
static | __attribute__ ((constructor))

## Variables

static const struct value_string | gprs_sns_event_names []
static const struct osmo_fsm_state | ns2_sns_bss_states []
static struct osmo_fsm | gprs_ns2_sns_bss_fsm
static const struct osmo_fsm_state | ns2_sns_sgsn_states []
static struct osmo_fsm | gprs_ns2_sns_sgsn_fsm

## Detailed Description

NS Sub-Network Service Protocol implementation 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05) as well as its successor 3GPP TS 48.016.

## Macro Definition Documentation

## GPRS_SNS_FLAG_KEEP_SELECT_ENDPOINT_ORDER

#define GPRS_SNS_FLAG_KEEP_SELECT_ENDPOINT_ORDER (void *) 1

Referenced by ns2_sns_st_all_action().

## ip46_weight_sum_data

#define ip46_weight_sum_data | ( |  | elems | ) |

Value:
ip46_weight_sum(elems, true)
ip46_weight_sum
static int ip46_weight_sum(const struct ns2_sns_elems *elems, bool data_weight)
Definition gprs_ns2_sns.c:250

Referenced by ns2_sns_st_bss_config_sgsn(), and ns2_sns_st_sgsn_wait_config().

## ip46_weight_sum_sig

#define ip46_weight_sum_sig | ( |  | elems | ) |

Value:
ip46_weight_sum(elems, false)

Referenced by ns2_sns_st_bss_config_sgsn(), and ns2_sns_st_sgsn_wait_config().

## ip4_weight_sum_data

#define ip4_weight_sum_data | ( |  | elems | ) |

Value:
ip4_weight_sum(elems, true)
ip4_weight_sum
static int ip4_weight_sum(const struct ns2_sns_elems *elems, bool data_weight)
Definition gprs_ns2_sns.c:217

Referenced by ns2_update_weight_entry().

## ip4_weight_sum_sig

#define ip4_weight_sum_sig | ( |  | elems | ) |

Value:
ip4_weight_sum(elems, false)

Referenced by gprs_sns_st_config_sgsn(), and ns2_update_weight_entry().

## ip6_weight_sum_data

#define ip6_weight_sum_data | ( |  | elems | ) |

Value:
ip6_weight_sum(elems, true)
ip6_weight_sum
static int ip6_weight_sum(const struct ns2_sns_elems *elems, bool data_weight)
Definition gprs_ns2_sns.c:234

Referenced by ns2_update_weight_entry().

## ip6_weight_sum_sig

#define ip6_weight_sum_sig | ( |  | elems | ) |

Value:
ip6_weight_sum(elems, false)

Referenced by ns2_update_weight_entry().

## S

#define S | ( |  | x | ) |

Value:
(1 << (x))
x
uint32_t x

## sns_failed

#define sns_failed | ( |  | fi,
|  |  | reason )

Value:
_sns_failed(fi, reason, __FILE__, __LINE__)
_sns_failed
static void _sns_failed(struct osmo_fsm_inst *fi, const char *reason, const char *file, int line)
Definition gprs_ns2_sns.c:198

Referenced by ns2_sns_fsm_bss_timer_cb(), ns2_sns_fsm_sgsn_timer_cb(), ns2_sns_notify_alive(), ns2_sns_st_all_action(), ns2_sns_st_all_action_bss(), ns2_sns_st_all_action_sgsn(), and ns2_sns_st_local_procedure().

## Enumeration Type Documentation

## gprs_sns_bss_state

enum gprs_sns_bss_state

Enumerator
GPRS_SNS_ST_UNCONFIGURED |
GPRS_SNS_ST_BSS_SIZE | SNS-SIZE procedure ongoing.
GPRS_SNS_ST_BSS_CONFIG_BSS | SNS-CONFIG procedure (BSS->SGSN) ongoing.
GPRS_SNS_ST_BSS_CONFIG_SGSN | SNS-CONFIG procedure (SGSN->BSS) ongoing.
GPRS_SNS_ST_CONFIGURED |
GPRS_SNS_ST_SGSN_WAIT_CONFIG |
GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK |
GPRS_SNS_ST_LOCAL_PROCEDURE | in process of a ADD/DEL/CHANGE procedure towards SGSN (BSS->SGSN)

## ns2_sns_role

enum ns2_sns_role

Enumerator
GPRS_SNS_ROLE_BSS |
GPRS_SNS_ROLE_SGSN |

## sns_procedure

enum sns_procedure

Enumerator
SNS_PROC_NONE | used as invalid/idle value
SNS_PROC_ADD |
SNS_PROC_DEL |
SNS_PROC_CHANGE_WEIGHT |

## Function Documentation

## __attribute__()

__attribute__ | ( | (constructor) |  | ) |

static

References gprs_ns2_sns_bss_fsm, and gprs_ns2_sns_sgsn_fsm.

## _sns_failed()

void _sns_failed | ( | struct osmo_fsm_inst * | fi,
|  | const char * | reason,
|  | const char * | file,
|  | int | line )

static

References ns2_sns_state::alive, gprs_ns2_free_nse(), GPRS_SNS_ROLE_SGSN, GPRS_SNS_ST_UNCONFIGURED, NS2_SNS_EV_REQ_SELECT_ENDPOINT, ns2_sns_state::nse, gprs_ns2_nse::nsei, gprs_ns2_nse::persistent, osmo_fsm_inst::priv, and ns2_sns_state::role.

## add_ip4_elem()

int add_ip4_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References ns2_sns_elems::ip4, gprs_ns_ie_ip4_elem::ip_addr, ns2_sns_elems::num_ip4, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by do_sns_add(), ns2_sns_add_elements(), and ns2_sns_st_local_procedure().

## add_ip6_elem()

int add_ip6_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References ns2_sns_elems::ip6, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_elems::num_ip6, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by do_sns_add(), ns2_sns_add_elements(), and ns2_sns_st_local_procedure().

## create_missing_nsvcs()

int create_missing_nsvcs | ( | struct osmo_fsm_inst * | fi | ) |

static

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, gprs_ns2_ip_connect_inactive(), GPRS_NS2_LL_UDP, ns2_sns_elems::ip4, ns2_sns_elems::ip6, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, gprs_ns2_vc_bind::ll, nse_inst_from_fi(), gprs_ns2_vc_bind::nsvc, nsvc_for_bind_and_remote(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, osmo_fsm_inst::priv, ns2_sns_state::remote, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_bss_config_sgsn(), and ns2_sns_st_sgsn_wait_config_ack().

## create_nsvc_for_new_sbind()

void create_nsvc_for_new_sbind | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind )

static

References ns2_sns_bind::bind, gprs_ns2_vc::data_weight, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, gprs_ns2_ip_connect_inactive(), GPRS_NS2_LL_UDP, ns2_sns_elems::ip4, ns2_sns_elems::ip6, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, gprs_ns2_vc_bind::ll, ns2_sns_state::nse, nsvc_for_bind_and_remote(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::remote, gprs_ns2_vc::sig_weight, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, gprs_ns2_vc::sns_only, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_local_procedure().

## do_sns_add()

int do_sns_add | ( | struct osmo_fsm_inst * | fi,
|  | const struct gprs_ns_ie_ip4_elem * | ip4,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References add_ip4_elem(), add_ip6_elem(), ns2_sns_state::family, gprs_ns2_vc::fi, ns2_nsvc_create_ip4(), ns2_nsvc_create_ip6(), NS_CAUSE_INVAL_NR_NS_VC, NS_CAUSE_PROTO_ERR_UNSPEC, gprs_ns2_vc::nse, nse_inst_from_fi(), nsvc_by_ip4_elem(), nsvc_by_ip6_elem(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, osmo_fsm_inst::priv, and ns2_sns_state::remote.

Referenced by ns2_sns_st_configured_add().

## do_sns_change_weight()

int do_sns_change_weight | ( | struct osmo_fsm_inst * | fi,
|  | const struct gprs_ns_ie_ip4_elem * | ip4,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns2_vc::data_weight, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, gprs_ns2_ip_vc_remote(), gprs_ns2_ll_str(), gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, NS_CAUSE_UNKN_IP_EP, nse_inst_from_fi(), gprs_ns2_nse::nsvc, osmo_fsm_inst::priv, ns2_sns_state::remote, osmo_sockaddr::sa, gprs_ns2_vc::sig_weight, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, gprs_ns_ie_ip4_elem::udp_port, gprs_ns_ie_ip6_elem::udp_port, update_ip4_elem(), and update_ip6_elem().

Referenced by ns2_sns_st_configured_change().

## do_sns_delete()

int do_sns_delete | ( | struct osmo_fsm_inst * | fi,
|  | const struct gprs_ns_ie_ip4_elem * | ip4,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns2_free_nsvc(), gprs_ns2_ip_vc_remote(), gprs_ns2_ll_str(), gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, NS_CAUSE_UNKN_IP_EP, nse_inst_from_fi(), gprs_ns2_nse::nsvc, osmo_fsm_inst::priv, ns2_sns_state::remote, remove_ip4_elem(), remove_ip6_elem(), osmo_sockaddr::sa, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_configured_add(), and ns2_sns_st_configured_delete().

## gprs_ns2_nse_sns_remote()

const struct osmo_sockaddr * gprs_ns2_nse_sns_remote | ( | struct gprs_ns2_nse * | nse | ) |

Return the initial SNS remote socket address.

Parameters

  nse | NS Entity

Returns
  address of the initial SNS connection; NULL in case of error

References gprs_ns2_nse::bss_sns_fi, ns2_sns_state::initial, ns2_sns_state::nse, osmo_fsm_inst::priv, and sns_endpoint::saddr.

## gprs_ns2_sns_add_bind()

int gprs_ns2_sns_add_bind | ( | struct gprs_ns2_nse * | nse,
|  | struct gprs_ns2_vc_bind * | bind )

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns2_nse::bss_sns_fi, gprs_ns2_is_ip_bind(), ns2_sns_bind::list, NS2_SNS_EV_REQ_ADD_BIND, and osmo_fsm_inst::priv.

Referenced by DEFUN(), ns2_create_vc_sns(), and ns2_sns_add_sns_default_binds().

## gprs_ns2_sns_add_endpoint()

int gprs_ns2_sns_add_endpoint | ( | struct gprs_ns2_nse * | nse,
|  | const struct osmo_sockaddr * | saddr )

gprs_ns2_sns_add_endpoint

Parameters

  [in] | nse |
  [in] | sockaddr |

Returns

References gprs_ns2_nse::bss_sns_fi, gprs_ns2_nse::dialect, GPRS_NS2_DIALECT_SNS, GPRS_NS2_LL_UDP, sns_endpoint::list, gprs_ns2_nse::ll, ns2_get_sns_endpoint(), NS2_SNS_EV_REQ_SELECT_ENDPOINT, osmo_fsm_inst::priv, sns_endpoint::saddr, and ns2_sns_state::sns_endpoints.

Referenced by DEFUN().

## gprs_ns2_sns_count()

int gprs_ns2_sns_count | ( | struct gprs_ns2_nse * | nse | ) |

gprs_ns2_sns_count

Parameters

  [in] | nse | NS Entity whose IP-SNS endpoints shall be printed

Returns
  the count of endpoints or < 0 if NSE doesn't contain sns.

References gprs_ns2_nse::bss_sns_fi, gprs_ns2_nse::dialect, GPRS_NS2_DIALECT_SNS, GPRS_NS2_LL_UDP, sns_endpoint::list, gprs_ns2_nse::ll, osmo_fsm_inst::priv, and ns2_sns_state::sns_endpoints.

Referenced by vty_nse_check_sns().

## gprs_ns2_sns_del_bind()

int gprs_ns2_sns_del_bind | ( | struct gprs_ns2_nse * | nse,
|  | struct gprs_ns2_vc_bind * | bind )

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns2_nse::bss_sns_fi, ns2_sns_state::initial_bind, ns2_sns_bind::list, NS2_SNS_EV_REQ_DELETE_BIND, llist_head::prev, and osmo_fsm_inst::priv.

Referenced by DEFUN(), and gprs_ns2_free_bind().

## gprs_ns2_sns_del_endpoint()

int gprs_ns2_sns_del_endpoint | ( | struct gprs_ns2_nse * | nse,
|  | const struct osmo_sockaddr * | saddr )

gprs_ns2_sns_del_endpoint

Parameters

  [in] | nse |
  [in] | sockaddr |

Returns
  0 on success, otherwise < 0

References gprs_ns2_nse::bss_sns_fi, gprs_ns2_nse::dialect, GPRS_NS2_DIALECT_SNS, gprs_ns2_free_nsvcs(), GPRS_NS2_LL_UDP, ns2_sns_state::initial, sns_endpoint::list, gprs_ns2_nse::ll, LOGNSE, llist_head::next, ns2_get_sns_endpoint(), llist_head::prev, osmo_fsm_inst::priv, sns_endpoint::saddr, and ns2_sns_state::sns_endpoints.

Referenced by DEFUN().

## ip46_weight_sum()

int ip46_weight_sum | ( | const struct ns2_sns_elems * | elems,
|  | bool | data_weight )

static

References data_weight, ip4_weight_sum(), and ip6_weight_sum().

Referenced by ns2_sns_st_all_action().

## ip4_weight_sum()

int ip4_weight_sum | ( | const struct ns2_sns_elems * | elems,
|  | bool | data_weight )

static

References data_weight, gprs_ns_ie_ip4_elem::data_weight, ns2_sns_elems::ip4, ns2_sns_elems::num_ip4, and gprs_ns_ie_ip4_elem::sig_weight.

Referenced by ip46_weight_sum().

## ip6_weight_sum()

int ip6_weight_sum | ( | const struct ns2_sns_elems * | elems,
|  | bool | data_weight )

static

References data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_elems::ip6, ns2_sns_elems::num_ip6, and gprs_ns_ie_ip6_elem::sig_weight.

Referenced by ip46_weight_sum().

## ns2_add_procedure()

void ns2_add_procedure | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind,
|  | enum sns_procedure | procedure_type )

static

References ns2_sns_bind::bind, gprs_ns2_nse::bss_sns_fi, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_procedure::data_weight, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_LOCAL_PROCEDURE, ns2_sns_procedure::ip4, ns2_sns_procedure::ip6, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_procedure::list, NS_TOUT_TSNS_PROV, ns2_sns_state::nse, gprs_ns2_nse::nsi, ns2_sns_procedure::procedure, ns2_sns_state::procedures, ns2_sns_procedure::running, osmo_sockaddr::sa, ns2_sns_procedure::sbind, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, ns2_sns_procedure::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, gprs_ns2_vc_bind::sns_data_weight, SNS_PROC_ADD, SNS_PROC_CHANGE_WEIGHT, SNS_PROC_DEL, gprs_ns2_vc_bind::sns_sig_weight, osmo_fsm_inst::state, gprs_ns2_inst::timeout, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_all_action().

## ns2_clear_elems()

void ns2_clear_elems | ( | struct ns2_sns_elems * | elems | ) |

static

References ns2_sns_elems::ip4, ns2_sns_elems::ip6, ns2_sns_elems::num_ip4, and ns2_sns_elems::num_ip6.

Referenced by ns2_clear_sgsn(), ns2_sns_compute_local_ep_from_binds(), and ns2_sns_st_all_action_bss().

## ns2_clear_procedures()

void ns2_clear_procedures | ( | struct ns2_sns_state * | gss | ) |

static

References ns2_sns_state::current_procedure, ns2_sns_procedure::list, ns2_sns_procedure::procedure, and ns2_sns_state::procedures.

Referenced by ns2_clear_sgsn(), and ns2_sns_st_bss_size_onenter().

## ns2_clear_sgsn()

void ns2_clear_sgsn | ( | struct ns2_sns_state * | gss,
|  | struct gprs_ns2_vc * | size_nsvc )

static

References ns2_sns_state::block_no_nsvc_events, gprs_ns2_free_nsvc(), gprs_ns2_vc::list, ns2_sns_state::local, ns2_clear_elems(), ns2_clear_procedures(), ns2_sns_state::nse, gprs_ns2_nse::nsvc, and ns2_sns_state::remote.

Referenced by ns2_sns_st_all_action_sgsn(), and ns2_sns_st_sgsn_unconfigured_onenter().

## ns2_get_sbind_ip4_entry()

struct gprs_ns_ie_ip4_elem * ns2_get_sbind_ip4_entry | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind,
|  | struct ns2_sns_elems * | endpoints )

static

References ns2_sns_bind::bind, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), ns2_sns_elems::ip4, gprs_ns_ie_ip4_elem::ip_addr, ns2_sns_elems::num_ip4, osmo_sockaddr::sa, osmo_sockaddr::sin, osmo_sockaddr::u, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by ns2_update_weight_entry().

## ns2_get_sbind_ip6_entry()

struct gprs_ns_ie_ip6_elem * ns2_get_sbind_ip6_entry | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind,
|  | struct ns2_sns_elems * | endpoints )

static

References ns2_sns_bind::bind, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), ns2_sns_elems::ip6, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_elems::num_ip6, osmo_sockaddr::sa, osmo_sockaddr::sin6, osmo_sockaddr::u, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_update_weight_entry().

## ns2_get_sns_endpoint()

struct sns_endpoint * ns2_get_sns_endpoint | ( | struct ns2_sns_state * | state,
|  | const struct osmo_sockaddr * | saddr )

static

References sns_endpoint::list, sns_endpoint::saddr, and ns2_sns_state::sns_endpoints.

Referenced by gprs_ns2_sns_add_endpoint(), and gprs_ns2_sns_del_endpoint().

## ns2_nsvc_create_ip4()

void ns2_nsvc_create_ip4 | ( | struct osmo_fsm_inst * | fi,
|  | struct gprs_ns2_nse * | nse,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip4_elem::ip_addr, ns2_vc_create_ip(), gprs_ns_ie_ip4_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::u, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by do_sns_add().

## ns2_nsvc_create_ip6()

void ns2_nsvc_create_ip6 | ( | struct osmo_fsm_inst * | fi,
|  | struct gprs_ns2_nse * | nse,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns_ie_ip6_elem::data_weight, gprs_ns_ie_ip6_elem::ip_addr, ns2_vc_create_ip(), gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin6, osmo_sockaddr::u, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by do_sns_add().

## ns2_sns_add_elements()

int ns2_sns_add_elements | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind,
|  | struct ns2_sns_elems * | elems )

static

References add_ip4_elem(), add_ip6_elem(), ns2_sns_bind::bind, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, osmo_sockaddr::sa, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, gprs_ns2_vc_bind::sns_data_weight, gprs_ns2_vc_bind::sns_sig_weight, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_all_action().

## ns2_sns_bss_fsm_alloc()

struct osmo_fsm_inst * ns2_sns_bss_fsm_alloc | ( | struct gprs_ns2_nse * | nse,
|  | const char * | id )

Allocate an IP-SNS FSM for the BSS side.

Parameters

  [in] | nse | NS Entity in which the FSM runs
  [in] | id | string identifier

Returns
  FSM instance on success; NULL on error

References ns2_sns_state::binds, gprs_ns2_sns_bss_fsm, GPRS_SNS_ROLE_BSS, ns2_sns_state::nse, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, osmo_fsm_inst::priv, ns2_sns_state::procedures, ns2_sns_state::role, and ns2_sns_state::sns_endpoints.

Referenced by ns2_nse_set_dialect().

## ns2_sns_bss_valid_configuration()

int ns2_sns_bss_valid_configuration | ( | struct ns2_sns_state * | gss | ) |

static

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns2_ip_bind_sockaddr(), osmo_sockaddr::sa, sns_endpoint::saddr, gprs_ns2_vc_bind::sns_data_weight, ns2_sns_state::sns_endpoints, gprs_ns2_vc_bind::sns_sig_weight, and osmo_sockaddr::u.

Referenced by ns2_sns_st_all_action_bss().

## ns2_sns_choose_next_bind()

void ns2_sns_choose_next_bind | ( | struct ns2_sns_state * | gss | ) |

static

References ns2_sns_state::binds, ns2_sns_state::initial_bind, ns2_sns_bind::list, and llist_head::next.

Referenced by ns2_sns_st_bss_size_onenter().

## ns2_sns_compute_local_ep_from_binds()

void ns2_sns_compute_local_ep_from_binds | ( | struct osmo_fsm_inst * | fi | ) |

static

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), gprs_ns2_ip_vc_remote(), GPRS_SNS_ROLE_BSS, ns2_sns_state::initial, ns2_sns_elems::ip4, ns2_sns_elems::ip6, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_state::local, ns2_clear_elems(), ns2_sns_copy_local_endpoints(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, ns2_sns_state::num_max_nsvcs, osmo_fsm_inst::priv, ns2_sns_state::role, osmo_sockaddr::sa, sns_endpoint::saddr, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, gprs_ns2_vc_bind::sns_data_weight, ns2_sns_state::sns_nsvc, gprs_ns2_vc_bind::sns_sig_weight, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_all_action_sgsn(), and ns2_sns_st_bss_size_onenter().

## ns2_sns_copy_local_endpoints()

int ns2_sns_copy_local_endpoints | ( | struct ns2_sns_state * | gss | ) |

static

References ns2_sns_state::family, ns2_sns_elems::ip4, ns2_sns_elems::ip6, ns2_sns_state::local, ns2_sns_state::local_procedure, ns2_sns_elems::num_ip4, and ns2_sns_elems::num_ip6.

Referenced by ns2_sns_compute_local_ep_from_binds().

## ns2_sns_count_num_local_ep()

int ns2_sns_count_num_local_ep | ( | struct osmo_fsm_inst * | fi,
|  | int | ip_proto )

static

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns2_ip_bind_sockaddr(), ns2_sns_bind::list, osmo_fsm_inst::priv, and osmo_sockaddr::sa.

Referenced by ns2_sns_st_all_action_sgsn().

## ns2_sns_dump_vty()

void ns2_sns_dump_vty | ( | struct vty * | vty,
|  | const char * | prefix,
|  | const struct gprs_ns2_nse * | nse,
|  | bool | stats )

Dump the IP-SNS state to a vty.

Parameters

  [in] | vty | VTY to which the state shall be printed
  [in] | prefix | prefix to print at start of each line (typically indenting)
  [in] | nse | NS Entity whose IP-SNS state shall be printed
  [in] | stats | Whether or not statistics shall also be printed

References gprs_ns2_nse::bss_sns_fi, ns2_sns_elems::ip4, ns2_sns_elems::ip6, ns2_sns_state::local, ns2_sns_state::nse, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, ns2_sns_state::num_max_nsvcs, osmo_fsm_inst::priv, ns2_sns_state::remote, vty_dump_sns_ip4(), and vty_dump_sns_ip6().

Referenced by dump_nse().

## ns2_sns_fsm_bss_timer_cb()

int ns2_sns_fsm_bss_timer_cb | ( | struct osmo_fsm_inst * | fi | ) |

static

References GPRS_SNS_ST_BSS_CONFIG_BSS, GPRS_SNS_ST_BSS_CONFIG_SGSN, GPRS_SNS_ST_BSS_SIZE, GPRS_SNS_ST_LOCAL_PROCEDURE, ns2_sns_state::N, NS_TOUT_TSNS_CONFIG_RETRIES, NS_TOUT_TSNS_PROV, NS_TOUT_TSNS_SIZE_RETRIES, gprs_ns2_inst::nse, nse_inst_from_fi(), osmo_fsm_inst::priv, sns_failed, osmo_fsm_inst::T, and gprs_ns2_inst::timeout.

## ns2_sns_fsm_sgsn_timer_cb()

int ns2_sns_fsm_sgsn_timer_cb | ( | struct osmo_fsm_inst * | fi | ) |

static

References GPRS_SNS_ST_LOCAL_PROCEDURE, GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK, GPRS_SNS_ST_UNCONFIGURED, ns2_sns_state::N, NS_TOUT_TSNS_CONFIG_RETRIES, NS_TOUT_TSNS_PROCEDURES_RETRIES, NS_TOUT_TSNS_PROV, gprs_ns2_inst::nse, nse_inst_from_fi(), osmo_fsm_inst::priv, sns_failed, osmo_fsm_inst::T, and gprs_ns2_inst::timeout.

## ns2_sns_notify_alive()

void ns2_sns_notify_alive | ( | struct gprs_ns2_nse * | nse,
|  | struct gprs_ns2_vc * | nsvc,
|  | bool | alive )

References ns2_sns_state::alive, ns2_sns_state::block_no_nsvc_events, gprs_ns2_nse::bss_sns_fi, GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_LOCAL_PROCEDURE, gprs_ns2_vc::list, NS2_SNS_EV_REQ_NO_NSVC, NS2_SNS_EV_REQ_NSVC_ALIVE, ns2_sns_replace_nsvc(), ns2_vc_is_unblocked(), gprs_ns2_vc::nse, gprs_ns2_nse::nsvc, osmo_fsm_inst::priv, sns_failed, ns2_sns_state::sns_nsvc, osmo_fsm_inst::state, and gprs_ns2_nse::sum_sig_weight.

Referenced by ns2_nse_notify_unblocked().

## ns2_sns_replace_nsvc()

void ns2_sns_replace_nsvc | ( | struct gprs_ns2_vc * | nsvc | ) |

called when a nsvc is beeing freed or the nsvc became dead

References ns2_sns_state::alive, ns2_sns_state::block_no_nsvc_events, gprs_ns2_nse::bss_sns_fi, NS2_SNS_EV_REQ_NO_NSVC, ns2_vc_is_unblocked(), ns2_sns_state::nse, gprs_ns2_nse::nsvc, osmo_fsm_inst::priv, and ns2_sns_state::sns_nsvc.

Referenced by gprs_ns2_free_nsvc(), and ns2_sns_notify_alive().

## ns2_sns_rx()

int ns2_sns_rx | ( | struct gprs_ns2_vc * | nsvc,
|  | struct msgb * | msg,
|  | struct tlv_parsed * | tp )

main entry point for receiving SNS messages from the network.

Parameters

  [in] | nsvc | NS-VC on which the message was received
  [in] | msg | message buffer of the IP-SNS message
  [in] | tp | parsed TLV structure of message

Returns
  0 on success; negative on error

References gprs_ns2_nse::bss_sns_fi, gprs_ns_hdr::data, gprs_ns_pdu_strings, LOGNSVC, NS2_SNS_EV_RX_ACK, NS2_SNS_EV_RX_ADD, NS2_SNS_EV_RX_CHANGE_WEIGHT, NS2_SNS_EV_RX_CONFIG, NS2_SNS_EV_RX_CONFIG_ACK, NS2_SNS_EV_RX_CONFIG_END, NS2_SNS_EV_RX_DELETE, NS2_SNS_EV_RX_SIZE, NS2_SNS_EV_RX_SIZE_ACK, gprs_ns2_vc::nse, gprs_ns2_nse::nsei, nsei, gprs_ns2_nse::nsvc, gprs_ns_hdr::pdu_type, osmo_fsm_inst::priv, ns2_sns_state::sns_nsvc, SNS_PDUT_ACK, SNS_PDUT_ADD, SNS_PDUT_CHANGE_WEIGHT, SNS_PDUT_CONFIG, SNS_PDUT_CONFIG_ACK, SNS_PDUT_DELETE, SNS_PDUT_SIZE, and SNS_PDUT_SIZE_ACK.

Referenced by ns2_recv_vc().

## ns2_sns_sgsn_fsm_alloc()

struct osmo_fsm_inst * ns2_sns_sgsn_fsm_alloc | ( | struct gprs_ns2_nse * | nse,
|  | const char * | id )

Allocate an IP-SNS FSM for the SGSN side.

Parameters

  [in] | nse | NS Entity in which the FSM runs
  [in] | id | string identifier

Returns
  FSM instance on success; NULL on error

References ns2_sns_state::binds, gprs_ns2_sns_sgsn_fsm, GPRS_SNS_ROLE_SGSN, ns2_sns_state::nse, osmo_fsm_inst::priv, ns2_sns_state::procedures, ns2_sns_state::role, and ns2_sns_state::sns_endpoints.

Referenced by ns2_nse_set_dialect().

## ns2_sns_st_all_action()

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

static

References gprs_ns2_nse::alive, ns2_sns_state::alive, gprs_ns2_vc::bind, ns2_sns_bind::bind, ns2_sns_state::block_no_nsvc_events, gprs_ns2_nse::bss_sns_fi, ns2_sns_state::family, gprs_ns2_free_nsvc(), GPRS_SNS_FLAG_KEEP_SELECT_ENDPOINT_ORDER, GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_CONFIG_BSS, GPRS_SNS_ST_BSS_CONFIG_SGSN, GPRS_SNS_ST_BSS_SIZE, GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_LOCAL_PROCEDURE, GPRS_SNS_ST_UNCONFIGURED, ip46_weight_sum(), ns2_sns_procedure::list, ns2_sns_state::local, ns2_sns_state::local_procedure, gprs_ns2_vc_bind::name, ns2_add_procedure(), ns2_sns_add_elements(), NS2_SNS_EV_REQ_ADD_BIND, NS2_SNS_EV_REQ_CHANGE_WEIGHT, NS2_SNS_EV_REQ_DELETE_BIND, NS2_SNS_EV_REQ_SELECT_ENDPOINT, ns2_update_weight_entry(), nse_inst_from_fi(), gprs_ns2_nse::nsei, gprs_ns2_nse::nsvc, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, ns2_sns_state::num_max_nsvcs, osmo_fsm_inst::priv, ns2_sns_procedure::procedure, ns2_sns_state::procedures, ns2_sns_state::remote, remove_bind_elem(), ns2_sns_state::role, ns2_sns_procedure::sbind, sns_failed, SNS_PROC_ADD, SNS_PROC_CHANGE_WEIGHT, SNS_PROC_DEL, osmo_fsm_inst::state, and gprs_ns2_nse::sum_sig_weight.

Referenced by ns2_sns_st_all_action_bss(), and ns2_sns_st_all_action_sgsn().

## ns2_sns_st_all_action_bss()

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

static

References ns2_sns_state::block_no_nsvc_events, ns2_sns_state::family, GPRS_NS2_AFF_CAUSE_SNS_NO_ENDPOINTS, GPRS_SNS_ST_BSS_SIZE, GPRS_SNS_ST_UNCONFIGURED, ns2_sns_state::initial, gprs_ns2_nse::list, sns_endpoint::list, ns2_sns_state::local, llist_head::next, ns2_clear_elems(), ns2_free_nsvcs(), ns2_prim_status_ind(), ns2_sns_bss_valid_configuration(), NS2_SNS_EV_REQ_FREE_NSVCS, NS2_SNS_EV_REQ_NO_NSVC, NS2_SNS_EV_REQ_SELECT_ENDPOINT, ns2_sns_st_all_action(), NS_TOUT_TSNS_PROV, ns2_sns_state::nse, nse_inst_from_fi(), gprs_ns2_nse::nsi, osmo_fsm_inst::priv, ns2_sns_state::remote, ns2_sns_state::reselection_running, osmo_sockaddr::sa, sns_endpoint::saddr, ns2_sns_state::sns_endpoints, sns_failed, gprs_ns2_inst::timeout, and osmo_sockaddr::u.

## ns2_sns_st_all_action_sgsn()

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

static

References ns2_sns_state::block_no_nsvc_events, gprs_ns2_vc::data_weight, ns2_sns_state::family, GPRS_SNS_ROLE_SGSN, GPRS_SNS_ST_SGSN_WAIT_CONFIG, GPRS_SNS_ST_UNCONFIGURED, ns2_sns_state::local, ns2_sns_state::N, ns2_clear_sgsn(), ns2_sns_compute_local_ep_from_binds(), ns2_sns_count_num_local_ep(), NS2_SNS_EV_REQ_FREE_NSVCS, NS2_SNS_EV_RX_SIZE, ns2_sns_st_all_action(), ns2_tx_sns_size_ack(), ns2_vc_force_unconfigured(), NS_CAUSE_INVAL_NR_IPv4_EP, NS_CAUSE_INVAL_NR_IPv6_EP, NS_CAUSE_INVAL_NR_NS_VC, NS_CAUSE_MISSING_ESSENT_IE, NS_IE_IPv4_EP_NR, NS_IE_IPv6_EP_NR, NS_IE_MAX_NR_NSVC, NS_IE_RESET_FLAG, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_ip6_remote, ns2_sns_state::num_max_nsvcs, osmo_fsm_inst::priv, ns2_sns_state::role, gprs_ns2_vc::sig_weight, sns_failed, ns2_sns_state::sns_nsvc, and osmo_fsm_inst::state.

## ns2_sns_st_bss_config_bss()

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

static

References gprs_ns2_cause_str(), GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_CONFIG_SGSN, NS2_SNS_EV_RX_CONFIG_ACK, NS_IE_CAUSE, NS_TOUT_TSNS_PROV, nse_inst_from_fi(), gprs_ns2_nse::nsi, osmo_fsm_inst::priv, ns2_sns_state::role, and gprs_ns2_inst::timeout.

## ns2_sns_st_bss_config_bss_onenter()

void ns2_sns_st_bss_config_bss_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References ns2_sns_state::family, GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_CONFIG_BSS, ns2_sns_elems::ip4, ns2_sns_elems::ip6, ns2_sns_state::local, ns2_sns_state::N, ns2_tx_sns_config(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, osmo_fsm_inst::priv, ns2_sns_state::role, and ns2_sns_state::sns_nsvc.

## ns2_sns_st_bss_config_sgsn()

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

static

References create_missing_nsvcs(), gprs_ns2_start_alive_all_nsvcs(), GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_UNCONFIGURED, ip46_weight_sum_data, ip46_weight_sum_sig, NS2_SNS_EV_RX_CONFIG, NS2_SNS_EV_RX_CONFIG_END, ns2_tx_sns_config_ack(), NS_CAUSE_INVAL_WEIGH, ns_sns_append_remote_eps(), NS_TOUT_TSNS_PROV, nse_inst_from_fi(), gprs_ns2_nse::nsi, osmo_fsm_inst::priv, ns2_sns_state::remote, ns2_sns_state::role, ns2_sns_state::sns_nsvc, gprs_ns2_inst::timeout, and osmo_fsm_inst::timer.

## ns2_sns_st_bss_config_sgsn_onenter()

void ns2_sns_st_bss_config_sgsn_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_CONFIG_SGSN, ns2_sns_state::N, osmo_fsm_inst::priv, and ns2_sns_state::role.

## ns2_sns_st_bss_size()

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

static

References gprs_ns2_cause_str(), GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_CONFIG_BSS, NS2_SNS_EV_RX_SIZE_ACK, NS_IE_CAUSE, NS_TOUT_TSNS_PROV, gprs_ns2_inst::nse, nse_inst_from_fi(), osmo_fsm_inst::priv, ns2_sns_state::role, and gprs_ns2_inst::timeout.

## ns2_sns_st_bss_size_onenter()

void ns2_sns_st_bss_size_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References ns2_sns_state::alive, ns2_sns_bind::bind, GPRS_NS2_AFF_CAUSE_SNS_FAILURE, GPRS_SNS_ROLE_BSS, GPRS_SNS_ST_BSS_SIZE, GPRS_SNS_ST_UNCONFIGURED, ns2_sns_state::initial, ns2_sns_state::initial_bind, ns2_sns_state::local, ns2_sns_state::N, ns2_clear_procedures(), ns2_ip_bind_connect(), ns2_prim_status_ind(), ns2_sns_choose_next_bind(), ns2_sns_compute_local_ep_from_binds(), ns2_tx_sns_size(), ns2_sns_state::nse, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::num_max_ip4_remote, ns2_sns_state::num_max_nsvcs, osmo_fsm_inst::priv, ns2_sns_state::role, sns_endpoint::saddr, ns2_sns_state::sns_nsvc, and gprs_ns2_vc::sns_only.

## ns2_sns_st_bss_unconfigured()

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

static

References GPRS_SNS_ROLE_BSS, osmo_fsm_inst::priv, and ns2_sns_state::role.

## ns2_sns_st_configured()

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

static

References NS2_SNS_EV_REQ_NSVC_ALIVE, NS2_SNS_EV_RX_ADD, NS2_SNS_EV_RX_CHANGE_WEIGHT, NS2_SNS_EV_RX_DELETE, ns2_sns_st_configured_add(), ns2_sns_st_configured_change(), ns2_sns_st_configured_delete(), osmo_fsm_inst::priv, and osmo_fsm_inst::timer.

## ns2_sns_st_configured_add()

void ns2_sns_st_configured_add | ( | struct osmo_fsm_inst * | fi,
|  | struct ns2_sns_state * | gss,
|  | struct tlv_parsed * | tp )

static

References do_sns_add(), do_sns_delete(), ns2_sns_state::family, gprs_ns2_start_alive_all_nsvcs(), ns2_tx_sns_ack(), NS_CAUSE_INVAL_NR_IPv4_EP, NS_CAUSE_INVAL_NR_IPv6_EP, NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, NS_IE_TRANS_ID, ns2_sns_state::nse, and ns2_sns_state::sns_nsvc.

Referenced by ns2_sns_st_configured(), and ns2_sns_st_local_procedure().

## ns2_sns_st_configured_change()

void ns2_sns_st_configured_change | ( | struct osmo_fsm_inst * | fi,
|  | struct ns2_sns_state * | gss,
|  | struct tlv_parsed * | tp )

static

References do_sns_change_weight(), ns2_tx_sns_ack(), NS_CAUSE_INVAL_NR_IPv4_EP, NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, NS_IE_TRANS_ID, and ns2_sns_state::sns_nsvc.

Referenced by ns2_sns_st_configured(), and ns2_sns_st_local_procedure().

## ns2_sns_st_configured_delete()

void ns2_sns_st_configured_delete | ( | struct osmo_fsm_inst * | fi,
|  | struct ns2_sns_state * | gss,
|  | struct tlv_parsed * | tp )

static

References do_sns_delete(), ns2_sns_state::family, ns2_sns_elems::ip4, ns2_sns_elems::ip6, ip_addr, ns2_tx_sns_ack(), NS_CAUSE_INVAL_NR_IPv4_EP, NS_CAUSE_INVAL_NR_IPv6_EP, NS_CAUSE_UNKN_IP_ADDR, NS_IE_IP_ADDR, NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, NS_IE_TRANS_ID, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, ns2_sns_state::remote, and ns2_sns_state::sns_nsvc.

Referenced by ns2_sns_st_configured(), and ns2_sns_st_local_procedure().

## ns2_sns_st_configured_onenter()

void ns2_sns_st_configured_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References ns2_sns_state::alive, gprs_ns2_nse::bss_sns_fi, GPRS_NS2_AFF_CAUSE_SNS_CONFIGURED, gprs_ns2_free_nsvc(), GPRS_SNS_ST_LOCAL_PROCEDURE, gprs_ns2_nse::list, ns2_prim_status_ind(), ns2_vc_is_unblocked(), NS_TOUT_TSNS_PROV, ns2_sns_state::nse, nse_inst_from_fi(), gprs_ns2_nse::nsi, gprs_ns2_nse::nsvc, osmo_fsm_inst::priv, ns2_sns_state::procedures, ns2_sns_state::sns_nsvc, gprs_ns2_vc::sns_only, gprs_ns2_inst::timeout, and osmo_fsm_inst::timer.

## ns2_sns_st_local_procedure()

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

static

References add_ip4_elem(), add_ip6_elem(), gprs_ns2_nse::bss_sns_fi, create_nsvc_for_new_sbind(), ns2_sns_state::current_procedure, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_state::family, gprs_ns2_start_alive_all_nsvcs(), GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_LOCAL_PROCEDURE, ns2_sns_elems::ip4, ns2_sns_procedure::ip4, ns2_sns_elems::ip6, ns2_sns_procedure::ip6, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_procedure::list, ns2_sns_state::local, NS2_SNS_EV_RX_ACK, NS2_SNS_EV_RX_ADD, NS2_SNS_EV_RX_CHANGE_WEIGHT, NS2_SNS_EV_RX_DELETE, ns2_sns_st_configured_add(), ns2_sns_st_configured_change(), ns2_sns_st_configured_delete(), NS_IE_CAUSE, NS_IE_TRANS_ID, NS_TOUT_TSNS_PROV, ns2_sns_state::nse, nse_inst_from_fi(), gprs_ns2_nse::nsei, gprs_ns2_nse::nsi, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, osmo_fsm_inst::priv, ns2_sns_procedure::procedure, ns2_sns_state::procedures, remove_ip4_elem(), remove_ip6_elem(), ns2_sns_procedure::sbind, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, sns_failed, SNS_PROC_ADD, SNS_PROC_CHANGE_WEIGHT, SNS_PROC_DEL, gprs_ns2_inst::timeout, ns2_sns_procedure::trans_id, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

## ns2_sns_st_local_procedure_onenter()

void ns2_sns_st_local_procedure_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References ns2_sns_state::current_procedure, ns2_sns_state::family, GPRS_SNS_ST_CONFIGURED, ns2_sns_procedure::ip4, ns2_sns_procedure::ip6, ns2_sns_state::N, ns2_tx_sns_add(), ns2_tx_sns_change_weight(), ns2_tx_sns_del(), osmo_fsm_inst::priv, ns2_sns_procedure::procedure, ns2_sns_state::procedures, ns2_sns_procedure::running, ns2_sns_state::sns_nsvc, SNS_PROC_ADD, SNS_PROC_CHANGE_WEIGHT, SNS_PROC_DEL, ns2_sns_procedure::trans_id, and ns2_sns_state::trans_id.

## ns2_sns_st_sgsn_unconfigured()

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

static

References GPRS_SNS_ROLE_SGSN, osmo_fsm_inst::priv, and ns2_sns_state::role.

## ns2_sns_st_sgsn_unconfigured_onenter()

void ns2_sns_st_sgsn_unconfigured_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References ns2_clear_sgsn(), and osmo_fsm_inst::priv.

## ns2_sns_st_sgsn_wait_config()

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

static

References GPRS_SNS_ROLE_SGSN, GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK, GPRS_SNS_ST_UNCONFIGURED, ip46_weight_sum_data, ip46_weight_sum_sig, NS2_SNS_EV_RX_CONFIG, NS2_SNS_EV_RX_CONFIG_END, ns2_tx_sns_config_ack(), NS_CAUSE_INVAL_WEIGH, ns_sns_append_remote_eps(), NS_TOUT_TSNS_PROV, gprs_ns2_inst::nse, nse_inst_from_fi(), osmo_fsm_inst::priv, ns2_sns_state::remote, ns2_sns_state::role, ns2_sns_state::sns_nsvc, gprs_ns2_inst::timeout, and osmo_fsm_inst::timer.

## ns2_sns_st_sgsn_wait_config_ack()

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

static

References create_missing_nsvcs(), gprs_ns2_cause_str(), gprs_ns2_start_alive_all_nsvcs(), GPRS_SNS_ROLE_SGSN, GPRS_SNS_ST_CONFIGURED, GPRS_SNS_ST_UNCONFIGURED, NS2_SNS_EV_RX_CONFIG_ACK, NS_IE_CAUSE, ns_sns_configured_timeout(), nse_inst_from_fi(), osmo_fsm_inst::priv, and ns2_sns_state::role.

## ns2_sns_st_sgsn_wait_config_ack_onenter()

void ns2_sns_st_sgsn_wait_config_ack_onenter | ( | struct osmo_fsm_inst * | fi,
|  | uint32_t | old_state )

static

References GPRS_SNS_ROLE_SGSN, ns2_sns_elems::ip4, ns2_sns_elems::ip6, ns2_sns_state::local, ns2_tx_sns_config(), ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, osmo_fsm_inst::priv, ns2_sns_state::role, and ns2_sns_state::sns_nsvc.

## ns2_sns_update_weights()

void ns2_sns_update_weights | ( | struct gprs_ns2_vc_bind * | bind | ) |

References ns2_sns_bind::bind, ns2_sns_state::binds, gprs_ns2_nse::bss_sns_fi, ns2_sns_state::family, gprs_ns2_ip_bind_sockaddr(), NS2_SNS_EV_REQ_CHANGE_WEIGHT, gprs_ns2_inst::nse, ns2_sns_state::nse, gprs_ns2_vc_bind::nsi, osmo_fsm_inst::priv, osmo_sockaddr::sa, and osmo_sockaddr::u.

Referenced by gprs_ns2_ip_bind_set_sns_weight().

## ns2_sns_write_vty()

void ns2_sns_write_vty | ( | struct vty * | vty,
|  | const struct gprs_ns2_nse * | nse )

write IP-SNS to a vty

Parameters

  [in] | vty | VTY to which the state shall be printed
  [in] | nse | NS Entity whose IP-SNS state shall be printed

References gprs_ns2_nse::bss_sns_fi, osmo_sockaddr_str::ip, ns2_sns_state::nse, osmo_sockaddr_str::port, osmo_fsm_inst::priv, sns_endpoint::saddr, osmo_sockaddr::sas, ns2_sns_state::sns_endpoints, and osmo_sockaddr::u.

Referenced by _config_write_ns_nse().

## ns2_update_weight_entry()

int ns2_update_weight_entry | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_bind * | sbind,
|  | struct ns2_sns_elems * | endpoints )

static

References ns2_sns_bind::bind, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, ns2_sns_state::family, ip4_weight_sum_data, ip4_weight_sum_sig, ip6_weight_sum_data, ip6_weight_sum_sig, ns2_get_sbind_ip4_entry(), ns2_get_sbind_ip6_entry(), gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, gprs_ns2_vc_bind::sns_data_weight, and gprs_ns2_vc_bind::sns_sig_weight.

Referenced by ns2_sns_st_all_action().

## ns2_vc_create_ip()

void ns2_vc_create_ip | ( | struct osmo_fsm_inst * | fi,
|  | struct gprs_ns2_nse * | nse,
|  | const struct osmo_sockaddr * | remote,
|  | uint8_t | sig_weight,
|  | uint8_t | data_weight )

static

References gprs_ns2_inst::binding, data_weight, gprs_ns2_ip_connect_inactive(), GPRS_NS2_LL_UDP, gprs_ns2_vc_bind::list, gprs_ns2_vc_bind::ll, gprs_ns2_inst::nse, gprs_ns2_vc_bind::nsi, gprs_ns2_vc_bind::nsvc, and sig_weight.

Referenced by ns2_nsvc_create_ip4(), and ns2_nsvc_create_ip6().

## ns_sns_append_remote_eps()

int ns_sns_append_remote_eps | ( | struct osmo_fsm_inst * | fi,
|  | const struct tlv_parsed * | tp )

static

References ns2_sns_elems::ip4, ns2_sns_elems::ip6, NS_CAUSE_INVAL_NR_IPv4_EP, NS_CAUSE_INVAL_NR_IPv6_EP, NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, ns2_sns_elems::num_ip4, ns2_sns_elems::num_ip6, osmo_fsm_inst::priv, and ns2_sns_state::remote.

Referenced by ns2_sns_st_bss_config_sgsn(), and ns2_sns_st_sgsn_wait_config().

## ns_sns_configured_timeout()

int ns_sns_configured_timeout | ( | struct osmo_fsm_inst * | fi | ) |

inline static

References NS_TOUT_TNS_ALIVE, NS_TOUT_TNS_ALIVE_RETRIES, NS_TOUT_TNS_TEST, nse_inst_from_fi(), gprs_ns2_nse::nsi, and gprs_ns2_inst::timeout.

Referenced by ns2_sns_st_sgsn_wait_config_ack().

## nse_inst_from_fi()

struct gprs_ns2_nse * nse_inst_from_fi | ( | struct osmo_fsm_inst * | fi | ) |

inline static

References ns2_sns_state::nse, and osmo_fsm_inst::priv.

Referenced by create_missing_nsvcs(), do_sns_add(), do_sns_change_weight(), do_sns_delete(), ns2_sns_fsm_bss_timer_cb(), ns2_sns_fsm_sgsn_timer_cb(), ns2_sns_st_all_action(), ns2_sns_st_all_action_bss(), ns2_sns_st_bss_config_bss(), ns2_sns_st_bss_config_sgsn(), ns2_sns_st_bss_size(), ns2_sns_st_configured_onenter(), ns2_sns_st_local_procedure(), ns2_sns_st_sgsn_wait_config(), ns2_sns_st_sgsn_wait_config_ack(), and ns_sns_configured_timeout().

## nsvc_by_ip4_elem()

struct gprs_ns2_vc * nsvc_by_ip4_elem | ( | struct gprs_ns2_nse * | nse,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References gprs_ns2_nsvc_by_sockaddr_nse(), gprs_ns_ie_ip4_elem::ip_addr, osmo_sockaddr::sa, osmo_sockaddr::sin, osmo_sockaddr::u, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by do_sns_add().

## nsvc_by_ip6_elem()

struct gprs_ns2_vc * nsvc_by_ip6_elem | ( | struct gprs_ns2_nse * | nse,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns2_nsvc_by_sockaddr_nse(), gprs_ns_ie_ip6_elem::ip_addr, osmo_sockaddr::sa, osmo_sockaddr::sin6, osmo_sockaddr::u, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by do_sns_add().

## nsvc_for_bind_and_remote()

struct gprs_ns2_vc * nsvc_for_bind_and_remote | ( | struct gprs_ns2_nse * | nse,
|  | struct gprs_ns2_vc_bind * | bind,
|  | const struct osmo_sockaddr * | remote )

static

References gprs_ns2_vc::bind, gprs_ns2_ip_vc_remote(), gprs_ns2_vc::list, gprs_ns2_vc::nse, and gprs_ns2_nse::nsvc.

Referenced by create_missing_nsvcs(), and create_nsvc_for_new_sbind().

## remove_bind_elem()

int remove_bind_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | struct ns2_sns_bind * | sbind )

static

References ns2_sns_bind::bind, gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip6_elem::data_weight, gprs_ns2_ip_bind_sockaddr(), gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip6_elem::ip_addr, remove_ip4_elem(), remove_ip6_elem(), osmo_sockaddr::sa, gprs_ns_ie_ip4_elem::sig_weight, gprs_ns_ie_ip6_elem::sig_weight, osmo_sockaddr::sin, osmo_sockaddr::sin6, gprs_ns2_vc_bind::sns_data_weight, gprs_ns2_vc_bind::sns_sig_weight, osmo_sockaddr::u, gprs_ns_ie_ip4_elem::udp_port, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_st_all_action().

## remove_ip4_elem()

int remove_ip4_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References ns2_sns_elems::ip4, gprs_ns_ie_ip4_elem::ip_addr, ns2_sns_elems::num_ip4, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by do_sns_delete(), ns2_sns_st_local_procedure(), and remove_bind_elem().

## remove_ip6_elem()

int remove_ip6_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References ns2_sns_elems::ip6, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_elems::num_ip6, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by do_sns_delete(), ns2_sns_st_local_procedure(), and remove_bind_elem().

## update_ip4_elem()

int update_ip4_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References gprs_ns_ie_ip4_elem::data_weight, ns2_sns_elems::ip4, gprs_ns_ie_ip4_elem::ip_addr, ns2_sns_elems::num_ip4, gprs_ns_ie_ip4_elem::sig_weight, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by do_sns_change_weight().

## update_ip6_elem()

int update_ip6_elem | ( | struct ns2_sns_state * | gss,
|  | struct ns2_sns_elems * | elems,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns_ie_ip6_elem::data_weight, ns2_sns_elems::ip6, gprs_ns_ie_ip6_elem::ip_addr, ns2_sns_elems::num_ip6, gprs_ns_ie_ip6_elem::sig_weight, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by do_sns_change_weight().

## vty_dump_sns_ip4()

void vty_dump_sns_ip4 | ( | struct vty * | vty,
|  | const char * | prefix,
|  | const struct gprs_ns_ie_ip4_elem * | ip4 )

static

References gprs_ns_ie_ip4_elem::data_weight, gprs_ns_ie_ip4_elem::ip_addr, gprs_ns_ie_ip4_elem::sig_weight, and gprs_ns_ie_ip4_elem::udp_port.

Referenced by ns2_sns_dump_vty().

## vty_dump_sns_ip6()

void vty_dump_sns_ip6 | ( | struct vty * | vty,
|  | const char * | prefix,
|  | const struct gprs_ns_ie_ip6_elem * | ip6 )

static

References gprs_ns_ie_ip6_elem::data_weight, gprs_ns_ie_ip6_elem::ip_addr, ip_addr, gprs_ns_ie_ip6_elem::sig_weight, and gprs_ns_ie_ip6_elem::udp_port.

Referenced by ns2_sns_dump_vty().

## Variable Documentation

## gprs_ns2_sns_bss_fsm

struct osmo_fsm gprs_ns2_sns_bss_fsm

static

Initial value:
= {
.name = "GPRS-NS2-SNS-BSS",
.states = ns2_sns_bss_states,
.num_states = ARRAY_SIZE(ns2_sns_bss_states),
.allstate_event_mask = S(NS2_SNS_EV_REQ_NO_NSVC) |
S(NS2_SNS_EV_REQ_FREE_NSVCS) |
S(NS2_SNS_EV_REQ_SELECT_ENDPOINT) |
S(NS2_SNS_EV_REQ_ADD_BIND) |
S(NS2_SNS_EV_REQ_CHANGE_WEIGHT) |
S(NS2_SNS_EV_REQ_DELETE_BIND),
.allstate_action = ns2_sns_st_all_action_bss,
.cleanup = NULL,
.timer_cb = ns2_sns_fsm_bss_timer_cb,
.event_names = gprs_sns_event_names,
.pre_term = NULL,
.log_subsys = DLNS,
}
S
#define S(x)
Definition bssgp_bvc_fsm.c:42
NS2_SNS_EV_REQ_ADD_BIND
@ NS2_SNS_EV_REQ_ADD_BIND
add a new local bind to this NSE
Definition gprs_ns2_internal.h:365
NS2_SNS_EV_REQ_NO_NSVC
@ NS2_SNS_EV_REQ_NO_NSVC
no more NS-VC remaining (all dead)
Definition gprs_ns2_internal.h:362
NS2_SNS_EV_REQ_FREE_NSVCS
@ NS2_SNS_EV_REQ_FREE_NSVCS
free all NS-VCs
Definition gprs_ns2_internal.h:363
NS2_SNS_EV_REQ_CHANGE_WEIGHT
@ NS2_SNS_EV_REQ_CHANGE_WEIGHT
a bind changed its weight
Definition gprs_ns2_internal.h:367
NS2_SNS_EV_REQ_DELETE_BIND
@ NS2_SNS_EV_REQ_DELETE_BIND
remove a local bind from this NSE
Definition gprs_ns2_internal.h:366
NS2_SNS_EV_REQ_SELECT_ENDPOINT
@ NS2_SNS_EV_REQ_SELECT_ENDPOINT
Select a SNS endpoint from the list.
Definition gprs_ns2_internal.h:352
ns2_sns_fsm_bss_timer_cb
static int ns2_sns_fsm_bss_timer_cb(struct osmo_fsm_inst *fi)
Definition gprs_ns2_sns.c:1781
gprs_sns_event_names
static const struct value_string gprs_sns_event_names[]
Definition gprs_ns2_sns.c:77
ns2_sns_st_all_action_bss
static void ns2_sns_st_all_action_bss(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition gprs_ns2_sns.c:2209
ns2_sns_bss_states
static const struct osmo_fsm_state ns2_sns_bss_states[]
Definition gprs_ns2_sns.c:1714
DLNS
#define DLNS
ARRAY_SIZE
#define ARRAY_SIZE(x)

Referenced by __attribute__(), and ns2_sns_bss_fsm_alloc().

## gprs_ns2_sns_sgsn_fsm

struct osmo_fsm gprs_ns2_sns_sgsn_fsm

static

Initial value:
= {
.name = "GPRS-NS2-SNS-SGSN",
.states = ns2_sns_sgsn_states,
.num_states = ARRAY_SIZE(ns2_sns_sgsn_states),
.allstate_event_mask = S(NS2_SNS_EV_RX_SIZE) |
S(NS2_SNS_EV_REQ_NO_NSVC) |
S(NS2_SNS_EV_REQ_FREE_NSVCS) |
S(NS2_SNS_EV_REQ_ADD_BIND) |
S(NS2_SNS_EV_REQ_CHANGE_WEIGHT) |
S(NS2_SNS_EV_REQ_DELETE_BIND),
.allstate_action = ns2_sns_st_all_action_sgsn,
.cleanup = NULL,
.timer_cb = ns2_sns_fsm_sgsn_timer_cb,
.event_names = gprs_sns_event_names,
.pre_term = NULL,
.log_subsys = DLNS,
}
NS2_SNS_EV_RX_SIZE
@ NS2_SNS_EV_RX_SIZE
Definition gprs_ns2_internal.h:353
ns2_sns_fsm_sgsn_timer_cb
static int ns2_sns_fsm_sgsn_timer_cb(struct osmo_fsm_inst *fi)
Definition gprs_ns2_sns.c:2924
ns2_sns_sgsn_states
static const struct osmo_fsm_state ns2_sns_sgsn_states[]
Definition gprs_ns2_sns.c:2866
ns2_sns_st_all_action_sgsn
static void ns2_sns_st_all_action_sgsn(struct osmo_fsm_inst *fi, uint32_t event, void *data)
Definition gprs_ns2_sns.c:2957

Referenced by __attribute__(), and ns2_sns_sgsn_fsm_alloc().

## gprs_sns_event_names

const struct value_string gprs_sns_event_names[]

static

Initial value:
= {
{ NS2_SNS_EV_REQ_SELECT_ENDPOINT, "REQ_SELECT_ENDPOINT" },
{ NS2_SNS_EV_RX_SIZE, "RX_SIZE" },
{ NS2_SNS_EV_RX_SIZE_ACK, "RX_SIZE_ACK" },
{ NS2_SNS_EV_RX_CONFIG, "RX_CONFIG" },
{ NS2_SNS_EV_RX_CONFIG_END, "RX_CONFIG_END" },
{ NS2_SNS_EV_RX_CONFIG_ACK, "RX_CONFIG_ACK" },
{ NS2_SNS_EV_RX_ADD, "RX_ADD" },
{ NS2_SNS_EV_RX_DELETE, "RX_DELETE" },
{ NS2_SNS_EV_RX_ACK, "RX_ACK" },
{ NS2_SNS_EV_RX_CHANGE_WEIGHT, "RX_CHANGE_WEIGHT" },
{ NS2_SNS_EV_REQ_NO_NSVC, "REQ_NO_NSVC" },
{ NS2_SNS_EV_REQ_FREE_NSVCS, "REQ_FREE_NSVCS" },
{ NS2_SNS_EV_REQ_NSVC_ALIVE, "REQ_NSVC_ALIVE"},
{ NS2_SNS_EV_REQ_ADD_BIND, "REQ_ADD_BIND"},
{ NS2_SNS_EV_REQ_DELETE_BIND, "REQ_DELETE_BIND"},
{ NS2_SNS_EV_REQ_CHANGE_WEIGHT, "REQ_CHANGE_WEIGHT"},
{ 0, NULL }
}
NS2_SNS_EV_REQ_NSVC_ALIVE
@ NS2_SNS_EV_REQ_NSVC_ALIVE
a NS-VC became alive
Definition gprs_ns2_internal.h:364
NS2_SNS_EV_RX_CONFIG
@ NS2_SNS_EV_RX_CONFIG
Definition gprs_ns2_internal.h:355
NS2_SNS_EV_RX_DELETE
@ NS2_SNS_EV_RX_DELETE
Definition gprs_ns2_internal.h:359
NS2_SNS_EV_RX_CONFIG_ACK
@ NS2_SNS_EV_RX_CONFIG_ACK
Definition gprs_ns2_internal.h:357
NS2_SNS_EV_RX_ADD
@ NS2_SNS_EV_RX_ADD
Definition gprs_ns2_internal.h:358
NS2_SNS_EV_RX_CONFIG_END
@ NS2_SNS_EV_RX_CONFIG_END
SNS-CONFIG with end flag received.
Definition gprs_ns2_internal.h:356
NS2_SNS_EV_RX_ACK
@ NS2_SNS_EV_RX_ACK
Rx of SNS-ACK (response to ADD/DELETE/CHG_WEIGHT.
Definition gprs_ns2_internal.h:361
NS2_SNS_EV_RX_SIZE_ACK
@ NS2_SNS_EV_RX_SIZE_ACK
Definition gprs_ns2_internal.h:354
NS2_SNS_EV_RX_CHANGE_WEIGHT
@ NS2_SNS_EV_RX_CHANGE_WEIGHT
Definition gprs_ns2_internal.h:360

## ns2_sns_bss_states

const struct osmo_fsm_state ns2_sns_bss_states[]

static

## ns2_sns_sgsn_states

const struct osmo_fsm_state ns2_sns_sgsn_states[]

static