libosmogb 1.9.0.196-9975
Osmocom Gb library
gprs_ns2_internal.h File Reference
#include <stdbool.h>
#include <stdint.h>
#include <osmocom/core/logging.h>
#include <osmocom/core/rate_ctr.h>
#include <osmocom/gprs/protocol/gsm_08_16.h>
#include <osmocom/gprs/gprs_ns2.h>

Go to the source code of this file.

Data Structures

struct  gprs_ns2_inst
 An instance of the NS protocol stack. More...
 
struct  gprs_ns2_nse
 Structure repesenting a NSE. More...
 
struct  gprs_ns2_vc
 Structure representing a single NS-VC. More...
 
struct  gprs_ns2_vc_bind
 Structure repesenting a bind instance. More...
 
struct  gprs_ns2_vc_driver
 

Macros

#define LOGNSE(nse, lvl, fmt, args ...)    LOGP(DLNS, lvl, "NSE(%05u) " fmt, (nse)->nsei, ## args)
 
#define LOGBIND(bind, lvl, fmt, args ...)    LOGP(DLNS, lvl, "BIND(%s) " fmt, (bind)->name, ## args)
 
#define LOGNSVC_SS(ss, nsvc, lvl, fmt, args ...)
 
#define LOGNSVC(nsvc, lvl, fmt, args ...)    LOGNSVC_SS(DLNS, nsvc, lvl, fmt, ## args)
 
#define LOG_NS_SIGNAL(nsvc, direction, pdu_type, lvl, fmt, args ...)    LOGNSVC_SS(DLNSSIGNAL, nsvc, lvl, "%s %s" fmt, direction, get_value_string(gprs_ns_pdu_strings, pdu_type), ## args)
 
#define LOG_NS_DATA(nsvc, direction, pdu_type, lvl, fmt, args ...)    LOGNSVC_SS(DLNSDATA, nsvc, lvl, "%s %s" fmt, direction, get_value_string(gprs_ns_pdu_strings, pdu_type), ## args)
 
#define LOG_NS_RX_SIGNAL(nsvc, pdu_type)   LOG_NS_SIGNAL(nsvc, "Rx", pdu_type, LOGL_INFO, "\n")
 
#define LOG_NS_TX_SIGNAL(nsvc, pdu_type)   LOG_NS_SIGNAL(nsvc, "Tx", pdu_type, LOGL_INFO, "\n")
 
#define RATE_CTR_INC_NS(nsvc, ctr)
 
#define RATE_CTR_ADD_NS(nsvc, ctr, val)
 
#define NS_TIMERS_COUNT   11
 
#define TNS_BLOCK_STR   "tns-block"
 
#define TNS_BLOCK_RETRIES_STR   "tns-block-retries"
 
#define TNS_RESET_STR   "tns-reset"
 
#define TNS_RESET_RETRIES_STR   "tns-reset-retries"
 
#define TNS_TEST_STR   "tns-test"
 
#define TNS_ALIVE_STR   "tns-alive"
 
#define TNS_ALIVE_RETRIES_STR   "tns-alive-retries"
 
#define TSNS_PROV_STR   "tsns-prov"
 
#define TSNS_SIZE_RETRIES_STR   "tsns-size-retries"
 
#define TSNS_CONFIG_RETRIES_STR   "tsns-config-retries"
 
#define TSNS_PROCEDURES_RETRIES_STR   "tsns-procedures-retries"
 
#define NS_TIMERS
 
#define NS_TIMERS_HELP
 
#define NS_ALLOC_SIZE   3072
 
#define NS_ALLOC_HEADROOM   20
 
#define NS_DEFAULT_TXQUEUE_MAX_LENGTH   128
 
#define NSE_S_BLOCKED   0x0001
 
#define NSE_S_ALIVE   0x0002
 
#define NSE_S_RESET   0x0004
 
#define NS_DESC_B(st)   ((st) & NSE_S_BLOCKED ? "BLOCKED" : "UNBLOCKED")
 
#define NS_DESC_A(st)   ((st) & NSE_S_ALIVE ? "ALIVE" : "DEAD")
 
#define NS_DESC_R(st)   ((st) & NSE_S_RESET ? "RESET" : "UNRESET")
 

Enumerations

enum  ns2_timeout {
  NS_TOUT_TNS_BLOCK ,
  NS_TOUT_TNS_BLOCK_RETRIES ,
  NS_TOUT_TNS_RESET ,
  NS_TOUT_TNS_RESET_RETRIES ,
  NS_TOUT_TNS_TEST ,
  NS_TOUT_TNS_ALIVE ,
  NS_TOUT_TNS_ALIVE_RETRIES ,
  NS_TOUT_TSNS_PROV ,
  NS_TOUT_TSNS_SIZE_RETRIES ,
  NS_TOUT_TSNS_CONFIG_RETRIES ,
  NS_TOUT_TSNS_PROCEDURES_RETRIES
}
 
enum  nsvc_timer_mode {
  NSVC_TIMER_TNS_TEST ,
  NSVC_TIMER_TNS_ALIVE ,
  NSVC_TIMER_TNS_RESET ,
  _NSVC_TIMER_NR ,
  NSVC_TIMER_TNS_TEST ,
  NSVC_TIMER_TNS_ALIVE ,
  NSVC_TIMER_TNS_RESET ,
  _NSVC_TIMER_NR
}
 
enum  ns2_vc_stat { NS_STAT_ALIVE_DELAY }
 
enum  ns2_bind_stat { NS2_BIND_STAT_BACKLOG_LEN }
 
enum  ns2_cs {
  NS2_CS_CREATED ,
  NS2_CS_FOUND ,
  NS2_CS_REJECTED ,
  NS2_CS_SKIPPED ,
  NS2_CS_ERROR
}
 Osmocom NS2 VC create status. More...
 
enum  ns_ctr {
  NS_CTR_PKTS_IN ,
  NS_CTR_PKTS_OUT ,
  NS_CTR_BYTES_IN ,
  NS_CTR_BYTES_OUT ,
  NS_CTR_BLOCKED ,
  NS_CTR_DEAD ,
  NS_CTR_REPLACED ,
  NS_CTR_NSEI_CHG ,
  NS_CTR_INV_VCI ,
  NS_CTR_INV_NSEI ,
  NS_CTR_LOST_ALIVE ,
  NS_CTR_LOST_RESET ,
  NS_CTR_PKTS_IN ,
  NS_CTR_PKTS_OUT ,
  NS_CTR_PKTS_OUT_DROP ,
  NS_CTR_BYTES_IN ,
  NS_CTR_BYTES_OUT ,
  NS_CTR_BYTES_OUT_DROP ,
  NS_CTR_BLOCKED ,
  NS_CTR_UNBLOCKED ,
  NS_CTR_DEAD ,
  NS_CTR_REPLACED ,
  NS_CTR_NSEI_CHG ,
  NS_CTR_INV_VCI ,
  NS_CTR_INV_NSEI ,
  NS_CTR_LOST_ALIVE ,
  NS_CTR_LOST_RESET
}
 
enum  ns2_sns_event {
  NS2_SNS_EV_REQ_SELECT_ENDPOINT ,
  NS2_SNS_EV_RX_SIZE ,
  NS2_SNS_EV_RX_SIZE_ACK ,
  NS2_SNS_EV_RX_CONFIG ,
  NS2_SNS_EV_RX_CONFIG_END ,
  NS2_SNS_EV_RX_CONFIG_ACK ,
  NS2_SNS_EV_RX_ADD ,
  NS2_SNS_EV_RX_DELETE ,
  NS2_SNS_EV_RX_CHANGE_WEIGHT ,
  NS2_SNS_EV_RX_ACK ,
  NS2_SNS_EV_REQ_NO_NSVC ,
  NS2_SNS_EV_REQ_FREE_NSVCS ,
  NS2_SNS_EV_REQ_NSVC_ALIVE ,
  NS2_SNS_EV_REQ_ADD_BIND ,
  NS2_SNS_EV_REQ_DELETE_BIND ,
  NS2_SNS_EV_REQ_CHANGE_WEIGHT
}
 

Functions

enum ns2_cs ns2_create_vc (struct gprs_ns2_vc_bind *bind, struct msgb *msg, const struct osmo_sockaddr *remote, const char *logname, struct msgb **reject, struct gprs_ns2_vc **success)
 Create a new NS-VC based on a [received] message. More...
 
int ns2_recv_vc (struct gprs_ns2_vc *nsvc, struct msgb *msg)
 Bottom-side entry-point for received NS PDU from the driver/bind. More...
 
struct gprs_ns2_vcns2_vc_alloc (struct gprs_ns2_vc_bind *bind, struct gprs_ns2_nse *nse, bool initiater, enum gprs_ns2_vc_mode vc_mode, const char *id)
 Allocate a NS-VC within the given bind + NSE. More...
 
void ns2_free_nsvcs (struct gprs_ns2_nse *nse)
 
int ns2_bind_alloc (struct gprs_ns2_inst *nsi, const char *name, struct gprs_ns2_vc_bind **result)
 common allocation + low-level initialization of a bind. More...
 
struct msgbns2_msgb_alloc (void)
 Allocate a message buffer for use with the NS2 stack. More...
 
void ns2_sns_write_vty (struct vty *vty, const struct gprs_ns2_nse *nse)
 write IP-SNS to a vty More...
 
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. More...
 
void ns2_prim_status_ind (struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc, uint16_t bvci, enum gprs_ns2_affecting_cause cause)
 Send a STATUS.ind primitive to the specified NS instance user. More...
 
void ns2_nse_notify_alive (struct gprs_ns2_vc *nsvc, bool alive)
 
void ns2_nse_update_mtu (struct gprs_ns2_nse *nse)
 
int ns2_nse_set_dialect (struct gprs_ns2_nse *nse, enum gprs_ns2_dialect dialect)
 
int ns2_validate (struct gprs_ns2_vc *nsvc, uint8_t pdu_type, struct msgb *msg, struct tlv_parsed *tp, uint8_t *cause)
 
int ns2_tx_sns_ack (struct gprs_ns2_vc *nsvc, uint8_t trans_id, uint8_t *cause, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems, const struct gprs_ns_ie_ip6_elem *ip6_elems, unsigned int num_ip6_elems)
 Encode + Transmit a SNS-ACK as per Section 9.3.1. More...
 
int ns2_tx_sns_config (struct gprs_ns2_vc *nsvc, bool end_flag, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems, const struct gprs_ns_ie_ip6_elem *ip6_elems, unsigned int num_ip6_elems)
 Encode + Transmit a SNS-CONFIG as per Section 9.3.4. More...
 
int ns2_tx_sns_config_ack (struct gprs_ns2_vc *nsvc, uint8_t *cause)
 Encode + Transmit a SNS-CONFIG-ACK as per Section 9.3.5. More...
 
int ns2_tx_sns_size (struct gprs_ns2_vc *nsvc, bool reset_flag, uint16_t max_nr_nsvc, int ip4_ep_nr, int ip6_ep_nr)
 Encode + transmit a SNS-SIZE as per Section 9.3.7. More...
 
int ns2_tx_sns_size_ack (struct gprs_ns2_vc *nsvc, uint8_t *cause)
 Encode + Transmit a SNS-SIZE-ACK as per Section 9.3.8. More...
 
int ns2_tx_sns_add (struct gprs_ns2_vc *nsvc, uint8_t trans_id, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems, const struct gprs_ns_ie_ip6_elem *ip6_elems, unsigned int num_ip6_elems)
 Encode + Transmit a SNS-ADD as per Section 9.3.2. More...
 
int ns2_tx_sns_change_weight (struct gprs_ns2_vc *nsvc, uint8_t trans_id, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems, const struct gprs_ns_ie_ip6_elem *ip6_elems, unsigned int num_ip6_elems)
 Encode + Transmit a SNS-CHANGE-WEIGHT as per Section 9.3.3. More...
 
int ns2_tx_sns_del (struct gprs_ns2_vc *nsvc, uint8_t trans_id, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems, const struct gprs_ns_ie_ip6_elem *ip6_elems, unsigned int num_ip6_elems)
 Encode + Transmit a SNS-DEL as per Section 9.3.6. More...
 
int ns2_tx_block (struct gprs_ns2_vc *nsvc, uint8_t cause, uint16_t *nsvci)
 Transmit a NS-BLOCK on a given NS-VC. More...
 
int ns2_tx_block_ack (struct gprs_ns2_vc *nsvc, uint16_t *nsvci)
 Transmit a NS-BLOCK-ACK on a given NS-VC. More...
 
int ns2_tx_reset (struct gprs_ns2_vc *nsvc, uint8_t cause)
 Transmit a NS-RESET on a given NS-VC. More...
 
int ns2_tx_reset_ack (struct gprs_ns2_vc *nsvc)
 Transmit a NS-RESET-ACK on a given NS-VC. More...
 
int ns2_tx_unblock (struct gprs_ns2_vc *nsvc)
 Transmit a NS-UNBLOCK on a given NS-VC. More...
 
int ns2_tx_unblock_ack (struct gprs_ns2_vc *nsvc)
 Transmit a NS-UNBLOCK-ACK on a given NS-VC. More...
 
int ns2_tx_alive (struct gprs_ns2_vc *nsvc)
 Transmit a NS-ALIVE on a given NS-VC. More...
 
int ns2_tx_alive_ack (struct gprs_ns2_vc *nsvc)
 Transmit a NS-ALIVE-ACK on a given NS-VC. More...
 
int ns2_tx_unit_data (struct gprs_ns2_vc *nsvc, uint16_t bvci, uint8_t sducontrol, struct msgb *msg)
 Transmit NS-UNITDATA on a given NS-VC. More...
 
int ns2_tx_status (struct gprs_ns2_vc *nsvc, uint8_t cause, uint16_t bvci, struct msgb *orig_msg, uint16_t *nsvci)
 Transmit a NS-STATUS on a given NS-VC. More...
 
struct gprs_ns2_vcns2_ip_bind_connect (struct gprs_ns2_vc_bind *bind, struct gprs_ns2_nse *nse, const struct osmo_sockaddr *remote)
 Create new NS-VC to a given remote address. More...
 
int ns2_ip_count_bind (struct gprs_ns2_inst *nsi, struct osmo_sockaddr *remote)
 Count UDP binds compatible with remote. More...
 
struct gprs_ns2_vc_bindns2_ip_get_bind_by_index (struct gprs_ns2_inst *nsi, struct osmo_sockaddr *remote, int index)
 
void ns2_ip_set_txqueue_max_length (struct gprs_ns2_vc_bind *bind, unsigned int max_length)
 
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. More...
 
struct osmo_fsm_instns2_sns_bss_fsm_alloc (struct gprs_ns2_nse *nse, const char *id)
 Allocate an IP-SNS FSM for the BSS side. More...
 
struct osmo_fsm_instns2_sns_sgsn_fsm_alloc (struct gprs_ns2_nse *nse, const char *id)
 Allocate an IP-SNS FSM for the SGSN side. More...
 
void ns2_sns_replace_nsvc (struct gprs_ns2_vc *nsvc)
 called when a nsvc is beeing freed or the nsvc became dead More...
 
void ns2_sns_notify_alive (struct gprs_ns2_nse *nse, struct gprs_ns2_vc *nsvc, bool alive)
 
void ns2_sns_update_weights (struct gprs_ns2_vc_bind *bind)
 
struct osmo_fsm_instns2_vc_fsm_alloc (struct gprs_ns2_vc *nsvc, const char *id, bool initiate)
 gprs_ns2_vc_fsm_alloc More...
 
int ns2_vc_fsm_start (struct gprs_ns2_vc *nsvc)
 Start a NS-VC FSM. More...
 
int ns2_vc_force_unconfigured (struct gprs_ns2_vc *nsvc)
 Reset a NS-VC FSM. More...
 
int ns2_vc_rx (struct gprs_ns2_vc *nsvc, struct msgb *msg, struct tlv_parsed *tp)
 entry point for messages from the driver/VL More...
 
int ns2_vc_is_alive (struct gprs_ns2_vc *nsvc)
 
int ns2_vc_is_unblocked (struct gprs_ns2_vc *nsvc)
 is the given NS-VC unblocked? More...
 
int ns2_vc_block (struct gprs_ns2_vc *nsvc)
 Block a NS-VC. More...
 
int ns2_vc_reset (struct gprs_ns2_vc *nsvc)
 Reset a NS-VC. More...
 
int ns2_vc_unblock (struct gprs_ns2_vc *nsvc)
 Unblock a NS-VC. More...
 
void ns2_vty_dump_nsvc (struct vty *vty, struct gprs_ns2_vc *nsvc, bool stats)
 
void ns2_nse_notify_unblocked (struct gprs_ns2_vc *nsvc, bool unblocked)
 Notify a nse about the change of a NS-VC. More...
 
enum gprs_ns2_vc_mode ns2_dialect_to_vc_mode (enum gprs_ns2_dialect dialect)
 
int ns2_count_transfer_cap (struct gprs_ns2_nse *nse, uint16_t bvci)
 calculate the transfer capabilities for a nse More...
 
int ns2_sns_add_sns_default_binds (struct gprs_ns2_nse *nse)
 

Macro Definition Documentation

◆ LOG_NS_DATA

#define LOG_NS_DATA (   nsvc,
  direction,
  pdu_type,
  lvl,
  fmt,
  args ... 
)     LOGNSVC_SS(DLNSDATA, nsvc, lvl, "%s %s" fmt, direction, get_value_string(gprs_ns_pdu_strings, pdu_type), ## args)

◆ LOG_NS_RX_SIGNAL

#define LOG_NS_RX_SIGNAL (   nsvc,
  pdu_type 
)    LOG_NS_SIGNAL(nsvc, "Rx", pdu_type, LOGL_INFO, "\n")

◆ LOG_NS_SIGNAL

#define LOG_NS_SIGNAL (   nsvc,
  direction,
  pdu_type,
  lvl,
  fmt,
  args ... 
)     LOGNSVC_SS(DLNSSIGNAL, nsvc, lvl, "%s %s" fmt, direction, get_value_string(gprs_ns_pdu_strings, pdu_type), ## args)

◆ LOG_NS_TX_SIGNAL

#define LOG_NS_TX_SIGNAL (   nsvc,
  pdu_type 
)    LOG_NS_SIGNAL(nsvc, "Tx", pdu_type, LOGL_INFO, "\n")

◆ LOGBIND

#define LOGBIND (   bind,
  lvl,
  fmt,
  args ... 
)     LOGP(DLNS, lvl, "BIND(%s) " fmt, (bind)->name, ## args)

◆ LOGNSE

#define LOGNSE (   nse,
  lvl,
  fmt,
  args ... 
)     LOGP(DLNS, lvl, "NSE(%05u) " fmt, (nse)->nsei, ## args)

◆ LOGNSVC

#define LOGNSVC (   nsvc,
  lvl,
  fmt,
  args ... 
)     LOGNSVC_SS(DLNS, nsvc, lvl, fmt, ## args)

◆ LOGNSVC_SS

#define LOGNSVC_SS (   ss,
  nsvc,
  lvl,
  fmt,
  args ... 
)
Value:
do { \
if ((nsvc)->nsvci_is_valid) { \
LOGP(ss, lvl, "NSE(%05u)-NSVC(%05u) " fmt, \
(nsvc)->nse->nsei, (nsvc)->nsvci, ## args); \
} else { \
LOGP(ss, lvl, "NSE(%05u)-NSVC(none) " fmt, \
(nsvc)->nse->nsei, ## args); \
} \
} while (0)

◆ NS_ALLOC_HEADROOM

#define NS_ALLOC_HEADROOM   20

◆ NS_ALLOC_SIZE

#define NS_ALLOC_SIZE   3072

◆ NS_DEFAULT_TXQUEUE_MAX_LENGTH

#define NS_DEFAULT_TXQUEUE_MAX_LENGTH   128

◆ NS_DESC_A

#define NS_DESC_A (   st)    ((st) & NSE_S_ALIVE ? "ALIVE" : "DEAD")

◆ NS_DESC_B

#define NS_DESC_B (   st)    ((st) & NSE_S_BLOCKED ? "BLOCKED" : "UNBLOCKED")

◆ NS_DESC_R

#define NS_DESC_R (   st)    ((st) & NSE_S_RESET ? "RESET" : "UNRESET")

◆ NS_TIMERS

#define NS_TIMERS
Value:
TSNS_PROCEDURES_RETRIES_STR ")"
#define TNS_RESET_RETRIES_STR
Definition: gprs_ns2_internal.h:69
#define TNS_TEST_STR
Definition: gprs_ns2_internal.h:70
#define TSNS_CONFIG_RETRIES_STR
Definition: gprs_ns2_internal.h:75
#define TSNS_SIZE_RETRIES_STR
Definition: gprs_ns2_internal.h:74
#define TNS_BLOCK_STR
Definition: gprs_ns2_internal.h:66
#define TNS_BLOCK_RETRIES_STR
Definition: gprs_ns2_internal.h:67
#define TNS_RESET_STR
Definition: gprs_ns2_internal.h:68
#define TSNS_PROV_STR
Definition: gprs_ns2_internal.h:73
#define TNS_ALIVE_RETRIES_STR
Definition: gprs_ns2_internal.h:72

◆ NS_TIMERS_COUNT

#define NS_TIMERS_COUNT   11

◆ NS_TIMERS_HELP

#define NS_TIMERS_HELP
Value:
"(un)blocking Timer (Tns-block) timeout\n" \
"(un)blocking Timer (Tns-block) number of retries\n" \
"Reset Timer (Tns-reset) timeout\n" \
"Reset Timer (Tns-reset) number of retries\n" \
"Test Timer (Tns-test) timeout\n" \
"Alive Timer (Tns-alive) timeout\n" \
"Alive Timer (Tns-alive) number of retries\n" \
"SNS Provision Timer (Tsns-prov) timeout\n" \
"SNS Size number of retries\n" \
"SNS Config number of retries\n" \
"SNS Procedures number of retries\n" \

◆ NSE_S_ALIVE

#define NSE_S_ALIVE   0x0002

◆ NSE_S_BLOCKED

#define NSE_S_BLOCKED   0x0001

◆ NSE_S_RESET

#define NSE_S_RESET   0x0004

◆ RATE_CTR_ADD_NS

#define RATE_CTR_ADD_NS (   nsvc,
  ctr,
  val 
)
Value:
do { \
struct gprs_ns2_vc *_nsvc = (nsvc); \
rate_ctr_add(rate_ctr_group_get_ctr(_nsvc->ctrg, ctr), val); \
rate_ctr_add(rate_ctr_group_get_ctr(_nsvc->nse->ctrg, ctr), val); \
} while (0)
struct rate_ctr * rate_ctr_group_get_ctr(struct rate_ctr_group *grp, unsigned int idx)
Structure representing a single NS-VC.
Definition: gprs_ns2_internal.h:246

◆ RATE_CTR_INC_NS

#define RATE_CTR_INC_NS (   nsvc,
  ctr 
)
Value:
do { \
struct gprs_ns2_vc *_nsvc = (nsvc); \
rate_ctr_inc(rate_ctr_group_get_ctr(_nsvc->ctrg, ctr)); \
rate_ctr_inc(rate_ctr_group_get_ctr(_nsvc->nse->ctrg, ctr)); \
} while (0)

◆ TNS_ALIVE_RETRIES_STR

#define TNS_ALIVE_RETRIES_STR   "tns-alive-retries"

◆ TNS_ALIVE_STR

#define TNS_ALIVE_STR   "tns-alive"

◆ TNS_BLOCK_RETRIES_STR

#define TNS_BLOCK_RETRIES_STR   "tns-block-retries"

◆ TNS_BLOCK_STR

#define TNS_BLOCK_STR   "tns-block"

◆ TNS_RESET_RETRIES_STR

#define TNS_RESET_RETRIES_STR   "tns-reset-retries"

◆ TNS_RESET_STR

#define TNS_RESET_STR   "tns-reset"

◆ TNS_TEST_STR

#define TNS_TEST_STR   "tns-test"

◆ TSNS_CONFIG_RETRIES_STR

#define TSNS_CONFIG_RETRIES_STR   "tsns-config-retries"

◆ TSNS_PROCEDURES_RETRIES_STR

#define TSNS_PROCEDURES_RETRIES_STR   "tsns-procedures-retries"

◆ TSNS_PROV_STR

#define TSNS_PROV_STR   "tsns-prov"

◆ TSNS_SIZE_RETRIES_STR

#define TSNS_SIZE_RETRIES_STR   "tsns-size-retries"

Enumeration Type Documentation

◆ ns2_bind_stat

Enumerator
NS2_BIND_STAT_BACKLOG_LEN 

◆ ns2_cs

enum ns2_cs

Osmocom NS2 VC create status.

Enumerator
NS2_CS_CREATED 

A NSVC object has been created.

NS2_CS_FOUND 

A NSVC object has been found.

NS2_CS_REJECTED 

Rejected and answered message.

NS2_CS_SKIPPED 

Skipped message.

NS2_CS_ERROR 

Failed to process message.

◆ ns2_sns_event

Enumerator
NS2_SNS_EV_REQ_SELECT_ENDPOINT 

Select a SNS endpoint from the list.

NS2_SNS_EV_RX_SIZE 
NS2_SNS_EV_RX_SIZE_ACK 
NS2_SNS_EV_RX_CONFIG 
NS2_SNS_EV_RX_CONFIG_END 

SNS-CONFIG with end flag received.

NS2_SNS_EV_RX_CONFIG_ACK 
NS2_SNS_EV_RX_ADD 
NS2_SNS_EV_RX_DELETE 
NS2_SNS_EV_RX_CHANGE_WEIGHT 
NS2_SNS_EV_RX_ACK 

Rx of SNS-ACK (response to ADD/DELETE/CHG_WEIGHT.

NS2_SNS_EV_REQ_NO_NSVC 

no more NS-VC remaining (all dead)

NS2_SNS_EV_REQ_FREE_NSVCS 

free all NS-VCs

NS2_SNS_EV_REQ_NSVC_ALIVE 

a NS-VC became alive

NS2_SNS_EV_REQ_ADD_BIND 

add a new local bind to this NSE

NS2_SNS_EV_REQ_DELETE_BIND 

remove a local bind from this NSE

NS2_SNS_EV_REQ_CHANGE_WEIGHT 

a bind changed its weight

◆ ns2_timeout

Enumerator
NS_TOUT_TNS_BLOCK 
NS_TOUT_TNS_BLOCK_RETRIES 
NS_TOUT_TNS_RESET 
NS_TOUT_TNS_RESET_RETRIES 
NS_TOUT_TNS_TEST 
NS_TOUT_TNS_ALIVE 
NS_TOUT_TNS_ALIVE_RETRIES 
NS_TOUT_TSNS_PROV 
NS_TOUT_TSNS_SIZE_RETRIES 
NS_TOUT_TSNS_CONFIG_RETRIES 
NS_TOUT_TSNS_PROCEDURES_RETRIES 

◆ ns2_vc_stat

Enumerator
NS_STAT_ALIVE_DELAY 

◆ ns_ctr

enum ns_ctr
Enumerator
NS_CTR_PKTS_IN 
NS_CTR_PKTS_OUT 
NS_CTR_BYTES_IN 
NS_CTR_BYTES_OUT 
NS_CTR_BLOCKED 
NS_CTR_DEAD 
NS_CTR_REPLACED 
NS_CTR_NSEI_CHG 
NS_CTR_INV_VCI 
NS_CTR_INV_NSEI 
NS_CTR_LOST_ALIVE 
NS_CTR_LOST_RESET 
NS_CTR_PKTS_IN 
NS_CTR_PKTS_OUT 
NS_CTR_PKTS_OUT_DROP 
NS_CTR_BYTES_IN 
NS_CTR_BYTES_OUT 
NS_CTR_BYTES_OUT_DROP 
NS_CTR_BLOCKED 
NS_CTR_UNBLOCKED 
NS_CTR_DEAD 
NS_CTR_REPLACED 
NS_CTR_NSEI_CHG 
NS_CTR_INV_VCI 
NS_CTR_INV_NSEI 
NS_CTR_LOST_ALIVE 
NS_CTR_LOST_RESET 

◆ nsvc_timer_mode

Enumerator
NSVC_TIMER_TNS_TEST 
NSVC_TIMER_TNS_ALIVE 
NSVC_TIMER_TNS_RESET 
_NSVC_TIMER_NR 
NSVC_TIMER_TNS_TEST 
NSVC_TIMER_TNS_ALIVE 
NSVC_TIMER_TNS_RESET 
_NSVC_TIMER_NR 

Function Documentation

◆ ns2_ip_bind_connect()

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

Create new NS-VC to a given remote address.

Parameters
[in]bindthe bind we want to connect
[in]nseNS entity to be used for the new NS-VC
[in]remoteremote address to connect to
Returns
pointer to newly-allocated and connected NS-VC; NULL on error

References gprs_ns2_nse::dialect, gprs_ns2_free_nsvc(), gprs_ns2_ip_bind_sockaddr(), gprs_ns2_is_ip_bind(), gprs_ns2_lltype_str(), gprs_ns2_nsvc_by_sockaddr_bind(), gprs_ns2_nse::ll, LOGL_ERROR, LOGNSE, ns2_dialect_to_vc_mode(), ns2_vc_alloc(), gprs_ns2_nse::nsei, OSMO_ASSERT, osmo_identifier_sanitize_buf(), osmo_sockaddr_to_str(), osmo_sockaddr_to_str_buf(), gprs_ns2_vc::priv, and priv_vc::remote.

Referenced by gprs_ns2_ip_connect_inactive(), ns2_create_vc_sns(), and ns2_sns_st_bss_size_onenter().

◆ ns2_ip_count_bind()

int ns2_ip_count_bind ( struct gprs_ns2_inst nsi,
struct osmo_sockaddr remote 
)

◆ ns2_ip_get_bind_by_index()

struct gprs_ns2_vc_bind * ns2_ip_get_bind_by_index ( struct gprs_ns2_inst nsi,
struct osmo_sockaddr remote,
int  index 
)

◆ ns2_ip_set_txqueue_max_length()

void ns2_ip_set_txqueue_max_length ( struct gprs_ns2_vc_bind bind,
unsigned int  max_length 
)

◆ ns2_nse_notify_alive()

void ns2_nse_notify_alive ( struct gprs_ns2_vc nsvc,
bool  alive 
)

◆ ns2_sns_add_sns_default_binds()

◆ ns2_sns_bss_fsm_alloc()

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

◆ 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]vtyVTY to which the state shall be printed
[in]prefixprefix to print at start of each line (typically indenting)
[in]nseNS Entity whose IP-SNS state shall be printed
[in]statsWhether 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(), vty_dump_sns_ip6(), VTY_NEWLINE, vty_out(), and vty_out_fsm_inst2().

Referenced by dump_nse().

◆ ns2_sns_notify_alive()

◆ ns2_sns_replace_nsvc()

◆ ns2_sns_rx()

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

◆ 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]nseNS Entity in which the FSM runs
[in]idstring identifier
Returns
FSM instance on success; NULL on error

References ns2_sns_state::binds, gprs_ns2_sns_sgsn_fsm, GPRS_SNS_ROLE_SGSN, INIT_LLIST_HEAD, LOGL_DEBUG, ns2_sns_state::nse, osmo_fsm_inst_alloc(), osmo_fsm_inst_term, OSMO_FSM_TERM_ERROR, 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_update_weights()

◆ 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]vtyVTY to which the state shall be printed
[in]nseNS Entity whose IP-SNS state shall be printed

References gprs_ns2_nse::bss_sns_fi, osmo_sockaddr_str::ip, list, llist_for_each_entry, ns2_sns_state::nse, osmo_sockaddr_str_from_sockaddr(), osmo_sockaddr_str::port, osmo_fsm_inst::priv, sns_endpoint::saddr, osmo_sockaddr::sas, ns2_sns_state::sns_endpoints, osmo_sockaddr::u, VTY_NEWLINE, and vty_out().

Referenced by _config_write_ns_nse().

◆ ns2_tx_alive()

int ns2_tx_alive ( struct gprs_ns2_vc nsvc)

Transmit a NS-ALIVE on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-ALIVE is to be transmitted
Returns
0 in case of success

References LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, log_set_context(), ns2_tx_simple(), NS_PDUT_ALIVE, and gprs_ns2_vc::nse.

Referenced by alive_timeout_handler(), and start_test_procedure().

◆ ns2_tx_alive_ack()

int ns2_tx_alive_ack ( struct gprs_ns2_vc nsvc)

Transmit a NS-ALIVE-ACK on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-ALIVE-ACK is to be transmitted
Returns
0 in case of success

References LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, log_set_context(), ns2_tx_simple(), NS_PDUT_ALIVE_ACK, and gprs_ns2_vc::nse.

Referenced by ns2_vc_fsm_allstate_action().

◆ ns2_tx_block()

int ns2_tx_block ( struct gprs_ns2_vc nsvc,
uint8_t  cause,
uint16_t *  nsvci 
)

Transmit a NS-BLOCK on a given NS-VC.

Parameters
[in]vcNS-VC on which the NS-BLOCK is to be transmitted
[in]causeNumeric NS Cause value
[in]nsvciif given this NSVCI will be encoded. If NULL the nsvc->nsvci will be used.
Returns
0 in case of success

References cause, gprs_ns2_vc::ctrg, ERR_IF_NSVC_USES_SNS, gprs_ns2_cause_str(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_INFO, msg, msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_CTR_BLOCKED, NS_IE_CAUSE, NS_IE_VCI, NS_PDUT_BLOCK, ns_vc_tx(), gprs_ns2_vc::nse, gprs_ns2_vc::nsvci, osmo_htons, gprs_ns_hdr::pdu_type, rate_ctr_group_get_ctr(), and rate_ctr_inc().

Referenced by ns2_st_blocked(), and ns2_st_blocked_onenter().

◆ ns2_tx_block_ack()

int ns2_tx_block_ack ( struct gprs_ns2_vc nsvc,
uint16_t *  nsvci 
)

Transmit a NS-BLOCK-ACK on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-BLOCK is to be transmitted
[in]nsvciif given this NSVCI will be encoded. If NULL the nsvc->nsvci will be used.
Returns
0 in case of success

References ERR_IF_NSVC_USES_SNS, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_TX_SIGNAL, log_set_context(), msg, msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_VCI, NS_PDUT_BLOCK_ACK, ns_vc_tx(), gprs_ns2_vc::nse, gprs_ns2_vc::nsvci, osmo_htons, and gprs_ns_hdr::pdu_type.

Referenced by ns2_st_blocked(), ns2_st_unblocked(), and ns2_vc_rx().

◆ ns2_tx_reset()

int ns2_tx_reset ( struct gprs_ns2_vc nsvc,
uint8_t  cause 
)

Transmit a NS-RESET on a given NS-VC.

Parameters
[in]nsvcNS-VC used for transmission
[in]causeNumeric NS cause value
Returns
0 in case of success

References cause, ERR_IF_NSVC_USES_SNS, gprs_ns2_cause_str(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_INFO, msg, msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_CAUSE, NS_IE_NSEI, NS_IE_VCI, NS_PDUT_RESET, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, gprs_ns2_vc::nsvci, osmo_htons, and gprs_ns_hdr::pdu_type.

Referenced by ns2_st_reset_onenter().

◆ ns2_tx_reset_ack()

int ns2_tx_reset_ack ( struct gprs_ns2_vc nsvc)

Transmit a NS-RESET-ACK on a given NS-VC.

Parameters
[in]nsvcNS-VC used for transmission
Returns
0 in case of success

References ERR_IF_NSVC_USES_SNS, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_TX_SIGNAL, log_set_context(), msg, msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_NSEI, NS_IE_VCI, NS_PDUT_RESET_ACK, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, gprs_ns2_vc::nsvci, osmo_htons, and gprs_ns_hdr::pdu_type.

Referenced by ns2_st_reset(), and ns2_vc_rx().

◆ ns2_tx_sns_ack()

int ns2_tx_sns_ack ( struct gprs_ns2_vc nsvc,
uint8_t  trans_id,
uint8_t *  cause,
const struct gprs_ns_ie_ip4_elem ip4_elems,
unsigned int  num_ip4_elems,
const struct gprs_ns_ie_ip6_elem ip6_elems,
unsigned int  num_ip6_elems 
)

Encode + Transmit a SNS-ACK as per Section 9.3.1.

Parameters
[in]nsvcNS-VC through which to transmit the ACK
[in]trans_idTransaction ID which to acknowledge
[in]causePointer to cause value (NULL if no cause to be sent)
[in]ip4_elemsArray of IPv4 Elements
[in]num_ip4_elemsnumber of ip4_elems
Returns
0 on success; negative in case of error

References gprs_ns2_nse::bss_sns_fi, cause, gprs_ns2_cause_str(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_put(), msgb_tvlv_put(), msgb_v_put(), ns2_msgb_alloc(), NS_IE_CAUSE, NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, NS_IE_NSEI, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, osmo_htons, gprs_ns_hdr::pdu_type, and SNS_PDUT_ACK.

Referenced by ns2_sns_st_configured_add(), ns2_sns_st_configured_change(), and ns2_sns_st_configured_delete().

◆ ns2_tx_sns_add()

int ns2_tx_sns_add ( struct gprs_ns2_vc nsvc,
uint8_t  trans_id,
const struct gprs_ns_ie_ip4_elem ip4_elems,
unsigned int  num_ip4_elems,
const struct gprs_ns_ie_ip6_elem ip6_elems,
unsigned int  num_ip6_elems 
)

Encode + Transmit a SNS-ADD as per Section 9.3.2.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-CONFIG
[in]trans_idThe transaction id
[in]ip4_elemsArray of IPv4 Elements
[in]num_ip4_elemsnumber of ip4_elems
[in]ip6_elemsArray of IPv6 Elements
[in]num_ip6_elemsnumber of ip6_elems
Returns
0 on success; negative in case of error

References ns2_tx_sns_procedure(), and SNS_PDUT_ADD.

Referenced by ns2_sns_st_local_procedure_onenter().

◆ ns2_tx_sns_change_weight()

int ns2_tx_sns_change_weight ( struct gprs_ns2_vc nsvc,
uint8_t  trans_id,
const struct gprs_ns_ie_ip4_elem ip4_elems,
unsigned int  num_ip4_elems,
const struct gprs_ns_ie_ip6_elem ip6_elems,
unsigned int  num_ip6_elems 
)

Encode + Transmit a SNS-CHANGE-WEIGHT as per Section 9.3.3.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-CONFIG
[in]trans_idThe transaction id
[in]ip4_elemsArray of IPv4 Elements
[in]num_ip4_elemsnumber of ip4_elems
[in]ip6_elemsArray of IPv6 Elements
[in]num_ip6_elemsnumber of ip6_elems
Returns
0 on success; negative in case of error

References ns2_tx_sns_procedure(), and SNS_PDUT_CHANGE_WEIGHT.

Referenced by ns2_sns_st_local_procedure_onenter().

◆ ns2_tx_sns_config()

int ns2_tx_sns_config ( struct gprs_ns2_vc nsvc,
bool  end_flag,
const struct gprs_ns_ie_ip4_elem ip4_elems,
unsigned int  num_ip4_elems,
const struct gprs_ns_ie_ip6_elem ip6_elems,
unsigned int  num_ip6_elems 
)

Encode + Transmit a SNS-CONFIG as per Section 9.3.4.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-CONFIG
[in]end_flagWhether or not this is the last SNS-CONFIG
[in]ip4_elemsArray of IPv4 Elements
[in]num_ip4_elemsnumber of ip4_elems
Returns
0 on success; negative in case of error

References gprs_ns2_nse::bss_sns_fi, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_put(), msgb_tvlv_put(), msgb_v_put(), ns2_msgb_alloc(), NS_IE_IPv4_LIST, NS_IE_IPv6_LIST, NS_IE_NSEI, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, osmo_htons, gprs_ns_hdr::pdu_type, and SNS_PDUT_CONFIG.

Referenced by ns2_sns_st_bss_config_bss_onenter(), and ns2_sns_st_sgsn_wait_config_ack_onenter().

◆ ns2_tx_sns_config_ack()

int ns2_tx_sns_config_ack ( struct gprs_ns2_vc nsvc,
uint8_t *  cause 
)

Encode + Transmit a SNS-CONFIG-ACK as per Section 9.3.5.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-CONFIG-ACK
[in]causePointer to cause value (NULL if no cause to be sent)
Returns
0 on success; negative in case of error

References gprs_ns2_nse::bss_sns_fi, cause, gprs_ns2_cause_str(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_TX_SIGNAL, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_CAUSE, NS_IE_NSEI, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, osmo_htons, gprs_ns_hdr::pdu_type, and SNS_PDUT_CONFIG_ACK.

Referenced by ns2_sns_st_bss_config_sgsn(), and ns2_sns_st_sgsn_wait_config().

◆ ns2_tx_sns_del()

int ns2_tx_sns_del ( struct gprs_ns2_vc nsvc,
uint8_t  trans_id,
const struct gprs_ns_ie_ip4_elem ip4_elems,
unsigned int  num_ip4_elems,
const struct gprs_ns_ie_ip6_elem ip6_elems,
unsigned int  num_ip6_elems 
)

Encode + Transmit a SNS-DEL as per Section 9.3.6.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-CONFIG
[in]trans_idThe transaction id
[in]ip4_elemsArray of IPv4 Elements
[in]num_ip4_elemsnumber of ip4_elems
[in]ip6_elemsArray of IPv6 Elements
[in]num_ip6_elemsnumber of ip6_elems
Returns
0 on success; negative in case of error

References ns2_tx_sns_procedure(), and SNS_PDUT_DELETE.

Referenced by ns2_sns_st_local_procedure_onenter().

◆ ns2_tx_sns_size()

int ns2_tx_sns_size ( struct gprs_ns2_vc nsvc,
bool  reset_flag,
uint16_t  max_nr_nsvc,
int  ip4_ep_nr,
int  ip6_ep_nr 
)

Encode + transmit a SNS-SIZE as per Section 9.3.7.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-SIZE
[in]reset_flagWhether or not to add a RESET flag
[in]max_nr_nsvcMaximum number of NS-VCs
[in]ip4_ep_nrNumber of IPv4 endpoints (< 0 will omit the TLV)
[in]ip6_ep_nrNumber of IPv6 endpoints (< 0 will omit the TLV)
Returns
0 on success; negative in case of error

References gprs_ns2_nse::bss_sns_fi, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_put(), msgb_tv16_put(), msgb_tv_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_IPv4_EP_NR, NS_IE_IPv6_EP_NR, NS_IE_MAX_NR_NSVC, NS_IE_NSEI, NS_IE_RESET_FLAG, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, osmo_htons, gprs_ns_hdr::pdu_type, and SNS_PDUT_SIZE.

Referenced by ns2_sns_st_bss_size_onenter().

◆ ns2_tx_sns_size_ack()

int ns2_tx_sns_size_ack ( struct gprs_ns2_vc nsvc,
uint8_t *  cause 
)

Encode + Transmit a SNS-SIZE-ACK as per Section 9.3.8.

Parameters
[in]nsvcNS-VC through which to transmit the SNS-SIZE-ACK
[in]causePointer to cause value (NULL if no cause to be sent)
Returns
0 on success; negative in case of error

References gprs_ns2_nse::bss_sns_fi, cause, gprs_ns2_cause_str(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_put(), msgb_tvlv_put(), ns2_msgb_alloc(), NS_IE_CAUSE, NS_IE_NSEI, ns_vc_tx(), gprs_ns2_vc::nse, nsei, gprs_ns2_nse::nsei, osmo_htons, gprs_ns_hdr::pdu_type, and SNS_PDUT_SIZE_ACK.

Referenced by ns2_sns_st_all_action_sgsn().

◆ ns2_tx_status()

int ns2_tx_status ( struct gprs_ns2_vc nsvc,
uint8_t  cause,
uint16_t  bvci,
struct msgb orig_msg,
uint16_t *  nsvci 
)

Transmit a NS-STATUS on a given NS-VC.

Parameters
[in]nsvcNS-VC to be used for transmission
[in]causeNumeric NS cause value
[in]bvciBVCI to be reset within NSVC
[in]orig_msgmessage causing the STATUS
[in]nsvciif given this NSVCI will be encoded. If NULL the nsvc->nsvci will be used.
Returns
0 in case of success

References gprs_ns2_vc::bind, bvci, cause, gprs_ns2_cause_str(), msgb::l2h, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_SIGNAL, log_set_context(), LOGL_INFO, msg, msgb_l2len(), msgb_length(), msgb_put(), msgb_tvlv_put(), gprs_ns2_vc_bind::mtu, ns2_msgb_alloc(), NS_CAUSE_BVCI_UNKNOWN, NS_CAUSE_INVAL_ESSENT_IE, NS_CAUSE_MISSING_ESSENT_IE, NS_CAUSE_NSVC_BLOCKED, NS_CAUSE_NSVC_UNKNOWN, NS_CAUSE_PDU_INCOMP_PSTATE, NS_CAUSE_PROTO_ERR_UNSPEC, NS_CAUSE_SEM_INCORR_PDU, NS_IE_CAUSE, NS_IE_PDU, NS_IE_VCI, NS_PDUT_STATUS, ns_vc_tx(), gprs_ns2_vc::nse, gprs_ns2_vc::nsvci, osmo_htons, gprs_ns_hdr::pdu_type, and TVLV_GROSS_LEN().

Referenced by ns2_vc_fsm_allstate_action(), and ns2_vc_rx().

◆ ns2_tx_unblock()

int ns2_tx_unblock ( struct gprs_ns2_vc nsvc)

Transmit a NS-UNBLOCK on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-UNBLOCK is to be transmitted
Returns
0 in case of success

References ERR_IF_NSVC_USES_SNS, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, log_set_context(), ns2_tx_simple(), NS_PDUT_UNBLOCK, and gprs_ns2_vc::nse.

Referenced by ns2_st_blocked_onenter().

◆ ns2_tx_unblock_ack()

int ns2_tx_unblock_ack ( struct gprs_ns2_vc nsvc)

Transmit a NS-UNBLOCK-ACK on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-UNBLOCK-ACK is to be transmitted
Returns
0 in case of success

References ERR_IF_NSVC_USES_SNS, LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, log_set_context(), ns2_tx_simple(), NS_PDUT_UNBLOCK_ACK, and gprs_ns2_vc::nse.

Referenced by ns2_st_blocked(), and ns2_st_unblocked().

◆ ns2_tx_unit_data()

int ns2_tx_unit_data ( struct gprs_ns2_vc nsvc,
uint16_t  bvci,
uint8_t  sducontrol,
struct msgb msg 
)

Transmit NS-UNITDATA on a given NS-VC.

Parameters
[in]nsvcNS-VC on which the NS-UNITDATA is to be transmitted
[in]bvciBVCI to encode in NS-UNITDATA header
[in]sducontrolSDU control octet of NS header
[in]msgmessage buffer containing payload
Returns
0 in case of success

References bvci, gprs_ns_hdr::data, if(), LOG_CTX_GB_NSE, LOG_CTX_GB_NSVC, LOG_NS_DATA, log_set_context(), LOGL_ERROR, LOGL_INFO, LOGNSVC, msg, msgb_free(), msgb_push(), NS_PDUT_UNITDATA, ns_vc_tx(), gprs_ns2_vc::nse, and gprs_ns_hdr::pdu_type.

Referenced by gprs_ns2_recv_prim().

◆ ns2_validate()

◆ ns2_vc_block()

int ns2_vc_block ( struct gprs_ns2_vc nsvc)

Block a NS-VC.

Parameters
nsvcthe virtual circuit
Returns
0 on success; negative on error

References gprs_ns2_vc::fi, GPRS_NS2_EV_REQ_OM_BLOCK, gprs_ns2_vc_priv::nsvc, gprs_ns2_vc::om_blocked, osmo_fsm_inst_dispatch, and osmo_fsm_inst::priv.

Referenced by DEFUN().

◆ ns2_vc_force_unconfigured()

int ns2_vc_force_unconfigured ( struct gprs_ns2_vc nsvc)

Reset a NS-VC FSM.

Parameters
nsvcthe virtual circuit
Returns
0 on success; negative on error

References gprs_ns2_vc::fi, GPRS_NS2_EV_REQ_FORCE_UNCONFIGURED, gprs_ns2_vc_priv::nsvc, and osmo_fsm_inst_dispatch.

Referenced by fr_dlci_status_cb(), ns2_sns_st_all_action_sgsn(), and nsvc_force_unconf_cb().

◆ ns2_vc_fsm_alloc()

struct osmo_fsm_inst * ns2_vc_fsm_alloc ( struct gprs_ns2_vc nsvc,
const char *  id,
bool  initiator 
)

gprs_ns2_vc_fsm_alloc

Parameters
ctx
vc
ida char representation of the virtual curcuit
initiatorinitiator is the site which starts the connection. Usually the BSS.
Returns
NULL on error, otherwise the fsm

References gprs_ns2_vc_priv::alive, alive_timeout_handler(), gprs_ns2_vc::fi, gprs_ns2_vc_priv::initiator, LOGL_DEBUG, ns2_vc_fsm, gprs_ns2_vc_priv::nsvc, osmo_fsm_inst_alloc(), osmo_timer_setup(), osmo_fsm_inst::priv, and gprs_ns2_vc_priv::timer.

Referenced by ns2_vc_alloc().

◆ ns2_vc_fsm_start()

int ns2_vc_fsm_start ( struct gprs_ns2_vc nsvc)

◆ ns2_vc_is_alive()

int ns2_vc_is_alive ( struct gprs_ns2_vc nsvc)

◆ ns2_vc_is_unblocked()

◆ ns2_vc_reset()

int ns2_vc_reset ( struct gprs_ns2_vc nsvc)

Reset a NS-VC.

Parameters
nsvcthe virtual circuit
Returns
0 on success; negative on error

References gprs_ns2_vc::fi, GPRS_NS2_EV_REQ_OM_RESET, gprs_ns2_vc_priv::nsvc, and osmo_fsm_inst_dispatch.

Referenced by DEFUN().

◆ ns2_vc_rx()

◆ ns2_vc_unblock()

int ns2_vc_unblock ( struct gprs_ns2_vc nsvc)

Unblock a NS-VC.

Parameters
nsvcthe virtual circuit
Returns
0 on success; negative on error

References gprs_ns2_vc::fi, GPRS_NS2_EV_REQ_OM_UNBLOCK, gprs_ns2_vc_priv::nsvc, gprs_ns2_vc::om_blocked, osmo_fsm_inst_dispatch, and osmo_fsm_inst::priv.

Referenced by DEFUN().

◆ ns2_vty_dump_nsvc()