libosmogb
0.9.6.315-40e62
Osmocom Gb library
|
GPRS Networks Service (NS) messages on the Gb interface 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05) More...
Files | |
file | gprs_ns.h |
file | gprs_ns.c |
GPRS Networks Service (NS) messages on the Gb interface. | |
Data Structures | |
struct | gprs_ns_hdr |
Common header of GPRS NS. More... | |
Macros | |
#define | CHECK_TX_RC(rc, nsvc) |
Functions | |
struct gprs_ns_hdr | __attribute__ ((packed)) |
struct msgb * | gprs_ns_msgb_alloc (void) |
struct gprs_nsvc * | gprs_nsvc_by_nsvci (struct gprs_ns_inst *nsi, uint16_t nsvci) |
Lookup struct gprs_nsvc based on NSVCI. More... | |
struct gprs_nsvc * | gprs_nsvc_by_nsei (struct gprs_ns_inst *nsi, uint16_t nsei) |
Lookup struct gprs_nsvc based on NSEI. More... | |
static struct gprs_nsvc * | gprs_active_nsvc_by_nsei (struct gprs_ns_inst *nsi, uint16_t nsei) |
static struct gprs_nsvc * | nsvc_by_rem_addr (struct gprs_ns_inst *nsi, struct sockaddr_in *sin) |
static void | gprs_ns_timer_cb (void *data) |
struct gprs_nsvc * | gprs_nsvc_create (struct gprs_ns_inst *nsi, uint16_t nsvci) |
void | gprs_nsvc_delete (struct gprs_nsvc *nsvc) |
Delete given NS-VC. More... | |
static void | ns_osmo_signal_dispatch (struct gprs_nsvc *nsvc, unsigned int signal, uint8_t cause) |
static void | ns_osmo_signal_dispatch_mismatch (struct gprs_nsvc *nsvc, struct msgb *msg, uint8_t pdu_type, uint8_t ie_type) |
static void | ns_osmo_signal_dispatch_replaced (struct gprs_nsvc *nsvc, struct gprs_nsvc *old_nsvc) |
const char * | gprs_ns_cause_str (enum ns_cause cause) |
Obtain a human-readable string for NS cause value. More... | |
static int | nsip_sendmsg (struct gprs_nsvc *nsvc, struct msgb *msg) |
int | grps_ns_frgre_sendmsg (struct gprs_nsvc *nsvc, struct msgb *msg) |
static int | gprs_ns_tx (struct gprs_nsvc *nsvc, struct msgb *msg) |
static int | gprs_ns_tx_simple (struct gprs_nsvc *nsvc, uint8_t pdu_type) |
int | gprs_ns_tx_reset (struct gprs_nsvc *nsvc, uint8_t cause) |
Transmit a NS-RESET on a given NSVC. More... | |
int | gprs_ns_tx_status (struct gprs_nsvc *nsvc, uint8_t cause, uint16_t bvci, struct msgb *orig_msg) |
Transmit a NS-STATUS on a given NSVC. More... | |
int | gprs_ns_tx_block (struct gprs_nsvc *nsvc, uint8_t cause) |
Transmit a NS-BLOCK on a tiven NS-VC. More... | |
int | gprs_ns_tx_unblock (struct gprs_nsvc *nsvc) |
Transmit a NS-UNBLOCK on a given NS-VC. More... | |
int | gprs_ns_tx_alive (struct gprs_nsvc *nsvc) |
Transmit a NS-ALIVE on a given NS-VC. More... | |
int | gprs_ns_tx_alive_ack (struct gprs_nsvc *nsvc) |
Transmit a NS-ALIVE-ACK on a given NS-VC. More... | |
static void | nsvc_start_timer (struct gprs_nsvc *nsvc, enum nsvc_timer_mode mode) |
static int | nsvc_timer_elapsed_ms (struct gprs_nsvc *nsvc) |
static int | gprs_ns_tx_reset_ack (struct gprs_nsvc *nsvc) |
int | gprs_ns_sendmsg (struct gprs_ns_inst *nsi, struct msgb *msg) |
High-level function for transmitting a NS-UNITDATA messsage. More... | |
static int | gprs_ns_rx_unitdata (struct gprs_nsvc *nsvc, struct msgb *msg) |
static int | gprs_ns_rx_status (struct gprs_nsvc *nsvc, struct msgb *msg) |
static int | gprs_nsvc_replace_if_found (uint16_t nsvci, struct gprs_nsvc **nsvc, struct gprs_nsvc **old_nsvc) |
static int | gprs_ns_rx_reset (struct gprs_nsvc **nsvc, struct msgb *msg) |
static int | gprs_ns_rx_reset_ack (struct gprs_nsvc **nsvc, struct msgb *msg) |
static int | gprs_ns_rx_block (struct gprs_nsvc *nsvc, struct msgb *msg) |
int | gprs_ns_vc_create (struct gprs_ns_inst *nsi, struct msgb *msg, struct gprs_nsvc *fallback_nsvc, struct gprs_nsvc **new_nsvc) |
Create/get NS-VC independently from underlying transport layer. More... | |
int | gprs_ns_process_msg (struct gprs_ns_inst *nsi, struct msgb *msg, struct gprs_nsvc **nsvc) |
Process NS message independently from underlying transport layer. More... | |
int | gprs_ns_rcvmsg (struct gprs_ns_inst *nsi, struct msgb *msg, struct sockaddr_in *saddr, enum gprs_ns_ll ll) |
Receive incoming NS message from underlying transport layer. More... | |
const char * | gprs_ns_ll_str (struct gprs_nsvc *nsvc) |
void | gprs_ns_ll_copy (struct gprs_nsvc *nsvc, struct gprs_nsvc *other) |
void | gprs_ns_ll_clear (struct gprs_nsvc *nsvc) |
struct gprs_ns_inst * | gprs_ns_instantiate (gprs_ns_cb_t *cb, void *ctx) |
Create a new GPRS NS instance. More... | |
void | gprs_ns_close (struct gprs_ns_inst *nsi) |
void | gprs_ns_destroy (struct gprs_ns_inst *nsi) |
Destroy an entire NS instance. More... | |
static struct msgb * | read_nsip_msg (struct osmo_fd *bfd, int *error, struct sockaddr_in *saddr) |
static int | handle_nsip_read (struct osmo_fd *bfd) |
static int | handle_nsip_write (struct osmo_fd *bfd) |
static int | nsip_fd_cb (struct osmo_fd *bfd, unsigned int what) |
int | gprs_ns_nsip_listen (struct gprs_ns_inst *nsi) |
Create a listening socket for GPRS NS/UDP/IP. More... | |
int | gprs_nsvc_reset (struct gprs_nsvc *nsvc, uint8_t cause) |
Initiate a RESET procedure. More... | |
struct gprs_nsvc * | gprs_ns_nsip_connect (struct gprs_ns_inst *nsi, struct sockaddr_in *dest, uint16_t nsei, uint16_t nsvci) |
Establish a NS connection (from the BSS) to the SGSN. More... | |
void | gprs_ns_set_log_ss (int ss) |
Variables | |
uint8_t | gprs_ns_hdr::pdu_type |
NS PDU type. More... | |
uint8_t | gprs_ns_hdr::data [0] |
variable-length payload More... | |
uint8_t | pdu_type |
NS PDU type. More... | |
uint8_t | data [0] |
variable-length payload More... | |
const struct value_string | gprs_ns_pdu_strings [] |
enum ns_pdu_type | __attribute__ |
static const struct tlv_definition | ns_att_tlvdef |
static const struct rate_ctr_desc | nsvc_ctr_description [] |
static const struct rate_ctr_group_desc | nsvc_ctrg_desc |
static const struct osmo_stat_item_desc | nsvc_stat_description [] |
static const struct osmo_stat_item_group_desc | nsvc_statg_desc |
const struct value_string | gprs_ns_signal_ns_names [] |
const struct value_string | gprs_ns_pdu_strings [] |
static const struct value_string | ns_cause_str [] |
static enum ns_timeout | timer_mode_tout [_NSVC_TIMER_NR] |
static const struct value_string | timer_mode_strs [] |
GPRS Networks Service (NS) messages on the Gb interface 3GPP TS 08.16 version 8.0.1 Release 1999 / ETSI TS 101 299 V8.0.1 (2002-05)
Some introduction into NS: NS is used typically on top of frame relay, but in the ip.access world it is encapsulated in UDP packets. It serves as an intermediate shim betwen BSSGP and the underlying medium. It doesn't do much, apart from providing congestion notification and status indication.
Terms:
NS Network Service NSVC NS Virtual Connection NSEI NS Entity Identifier NSVL NS Virtual Link NSVLI NS Virtual Link Identifier BVC BSSGP Virtual Connection BVCI BSSGP Virtual Connection Identifier NSVCG NS Virtual Connection Goup Blocked NS-VC cannot be used for user traffic Alive Ability of a NS-VC to provide communication
There can be multiple BSSGP virtual connections over one (group of) NSVC's. BSSGP will therefore identify the BSSGP virtual connection by a BVCI passed down to NS. NS then has to firgure out which NSVC's are responsible for this BVCI. Those mappings are administratively configured.
This implementation has the following limitations:
#define CHECK_TX_RC | ( | rc, | |
nsvc | |||
) |
Referenced by gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), and gprs_ns_vc_create().
enum ns_cause |
NS Cause (TS 08.16, Section 10.3.2, Table 13)
enum ns_ctr |
enum ns_ctrl_ie |
enum ns_pdu_type |
NS PDU Type (TS 08.16, Section 10.3.7, Table 14)
enum ns_stat |
struct gprs_ns_hdr __attribute__ | ( | (packed) | ) |
|
static |
References gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, NSE_S_ALIVE, NSE_S_BLOCKED, gprs_nsvc::nsei, and gprs_nsvc::state.
Referenced by gprs_ns_sendmsg().
const char* gprs_ns_cause_str | ( | enum ns_cause | cause | ) |
Obtain a human-readable string for NS cause value.
References ns_cause_str.
Referenced by gprs_ns_rx_reset(), gprs_ns_rx_status(), gprs_ns_tx_block(), gprs_ns_tx_reset(), and gprs_ns_tx_status().
void gprs_ns_close | ( | struct gprs_ns_inst * | nsi | ) |
References gprs_ns_inst::fd, gprs_nsvc_delete(), gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, gprs_ns_inst::nsip, and gprs_ns_inst::unknown_nsvc.
Referenced by gprs_ns_destroy().
void gprs_ns_destroy | ( | struct gprs_ns_inst * | nsi | ) |
Destroy an entire NS instance.
nsi | gprs_ns_inst that is to be destroyed |
This function releases all resources associated with the NS-instance.
References gprs_ns_close().
struct gprs_ns_inst* gprs_ns_instantiate | ( | gprs_ns_cb_t * | cb, |
void * | ctx | ||
) |
Create a new GPRS NS instance.
[in] | cb | Call-back function for incoming BSSGP data |
References gprs_ns_inst::cb, gprs_nsvc_create(), gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, NS_TOUT_TNS_ALIVE, NS_TOUT_TNS_ALIVE_RETRIES, NS_TOUT_TNS_BLOCK, NS_TOUT_TNS_BLOCK_RETRIES, NS_TOUT_TNS_RESET, NS_TOUT_TNS_RESET_RETRIES, NS_TOUT_TNS_TEST, gprs_nsvc::nsvci_is_valid, gprs_ns_inst::timeout, and gprs_ns_inst::unknown_nsvc.
void gprs_ns_ll_clear | ( | struct gprs_nsvc * | nsvc | ) |
References gprs_nsvc::frgre, GPRS_NS_LL_FR_GRE, GPRS_NS_LL_UDP, gprs_nsvc::ip, and gprs_nsvc::ll.
Referenced by gprs_ns_rx_reset(), and gprs_ns_rx_reset_ack().
References gprs_nsvc::frgre, GPRS_NS_LL_FR_GRE, GPRS_NS_LL_UDP, gprs_nsvc::ip, and gprs_nsvc::ll.
Referenced by gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), and gprs_ns_vc_create().
const char* gprs_ns_ll_str | ( | struct gprs_nsvc * | nsvc | ) |
References gprs_nsvc::ip.
Referenced by gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_vc_create(), and gprs_nsvc_replace_if_found().
struct msgb* gprs_ns_msgb_alloc | ( | void | ) |
References DNS, NS_ALLOC_HEADROOM, and NS_ALLOC_SIZE.
Referenced by gprs_ns_tx_block(), gprs_ns_tx_reset(), gprs_ns_tx_reset_ack(), gprs_ns_tx_simple(), gprs_ns_tx_status(), and read_nsip_msg().
struct gprs_nsvc* gprs_ns_nsip_connect | ( | struct gprs_ns_inst * | nsi, |
struct sockaddr_in * | dest, | ||
uint16_t | nsei, | ||
uint16_t | nsvci | ||
) |
Establish a NS connection (from the BSS) to the SGSN.
nsi | NS-instance | |
[in] | dest | Destination IP/Port |
[in] | nsei | NSEI of the to-be-established NS-VC |
[in] | nsvci | NSVCI of the to-be-established NS-VC |
This function will establish a single NS/UDP/IP connection in uplink (BSS to SGSN) direction.
References gprs_nsvc_create(), gprs_nsvc_reset(), gprs_nsvc::ip, NS_CAUSE_OM_INTERVENTION, nsei, gprs_nsvc::nsei, nsvc_by_rem_addr(), and gprs_nsvc::remote_end_is_sgsn.
int gprs_ns_nsip_listen | ( | struct gprs_ns_inst * | nsi | ) |
Create a listening socket for GPRS NS/UDP/IP.
[in] | nsi | NS protocol instance to listen |
A call to this function will create a UDP socket bound to the port number and IP address specified in the NS protocol instance. The file descriptor of the socket will be stored in nsi->nsip.fd.
References DNS, gprs_ns_inst::dscp, gprs_ns_inst::fd, gprs_ns_inst::local_ip, gprs_ns_inst::local_port, gprs_ns_inst::nsip, and nsip_fd_cb().
int gprs_ns_process_msg | ( | struct gprs_ns_inst * | nsi, |
struct msgb * | msg, | ||
struct gprs_nsvc ** | nsvc | ||
) |
Process NS message independently from underlying transport layer.
nsi | NS instance to which the data belongs | |
[in] | msg | message buffer containing newly-received data |
[in,out] | nsvc | refers to the virtual connection, may be modified when processing a NS_RESET |
This contains the main NS automaton.
References DNS, gprs_ns_rx_block(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_rx_status(), gprs_ns_rx_unitdata(), gprs_ns_tx_alive_ack(), gprs_ns_tx_simple(), gprs_ns_tx_unblock(), gprs_nsvc_reset(), msgb_nsei, NS_CAUSE_PDU_INCOMP_PSTATE, NS_CTR_BYTES_IN, NS_CTR_PKTS_IN, ns_osmo_signal_dispatch(), NS_PDUT_ALIVE, NS_PDUT_ALIVE_ACK, NS_PDUT_BLOCK, NS_PDUT_BLOCK_ACK, NS_PDUT_RESET, NS_PDUT_RESET_ACK, NS_PDUT_STATUS, NS_PDUT_UNBLOCK, NS_PDUT_UNBLOCK_ACK, NS_PDUT_UNITDATA, NS_STAT_ALIVE_DELAY, NSE_S_ALIVE, NSE_S_BLOCKED, NSE_S_RESET, nsvc_start_timer(), nsvc_timer_elapsed_ms(), NSVC_TIMER_TNS_ALIVE, NSVC_TIMER_TNS_TEST, gprs_ns_hdr::pdu_type, and S_NS_UNBLOCK.
Referenced by gprs_ns_rcvmsg().
int gprs_ns_rcvmsg | ( | struct gprs_ns_inst * | nsi, |
struct msgb * | msg, | ||
struct sockaddr_in * | saddr, | ||
enum gprs_ns_ll | ll | ||
) |
Receive incoming NS message from underlying transport layer.
nsi | NS instance to which the data belongs | |
[in] | msg | message buffer containing newly-received data |
[in] | saddr | socketaddr from which data was received |
[in] | ll | link-layer type in which data was received |
This is the main entry point int othe NS imlementation where frames from the underlying transport (normally UDP) enter.
References gprs_ns_process_msg(), gprs_ns_vc_create(), gprs_nsvc::ip, gprs_nsvc::ll, nsvc_by_rem_addr(), and gprs_ns_inst::unknown_nsvc.
Referenced by handle_nsfrgre_read(), and handle_nsip_read().
|
static |
References gprs_nsvc::ctrg, gprs_ns_hdr::data, DNS, gprs_ns_tx_simple(), gprs_ns_tx_status(), ns_att_tlvdef, NS_CAUSE_MISSING_ESSENT_IE, NS_CTR_BLOCKED, NS_IE_CAUSE, NS_IE_VCI, ns_osmo_signal_dispatch(), NS_PDUT_BLOCK_ACK, NSE_S_BLOCKED, gprs_nsvc::nsei, S_NS_BLOCK, and gprs_nsvc::state.
Referenced by gprs_ns_process_msg().
|
static |
References CHECK_TX_RC, gprs_ns_hdr::data, DNS, gprs_ns_cause_str(), gprs_ns_ll_clear(), gprs_ns_ll_copy(), gprs_ns_ll_str(), gprs_ns_tx_reset_ack(), gprs_ns_tx_simple(), gprs_ns_tx_status(), gprs_nsvc_create(), gprs_nsvc_replace_if_found(), ns_att_tlvdef, NS_CAUSE_MISSING_ESSENT_IE, NS_CTR_INV_NSEI, NS_CTR_INV_VCI, NS_CTR_NSEI_CHG, NS_CTR_REPLACED, NS_IE_CAUSE, NS_IE_NSEI, NS_IE_VCI, ns_osmo_signal_dispatch(), ns_osmo_signal_dispatch_mismatch(), ns_osmo_signal_dispatch_replaced(), NS_PDUT_ALIVE, NS_PDUT_RESET, NSE_S_ALIVE, NSE_S_BLOCKED, nsei, nsvc_start_timer(), NSVC_TIMER_TNS_TEST, and S_NS_RESET.
Referenced by gprs_ns_process_msg().
|
static |
References CHECK_TX_RC, gprs_ns_hdr::data, DNS, gprs_ns_ll_clear(), gprs_ns_ll_copy(), gprs_ns_ll_str(), gprs_ns_tx_simple(), gprs_ns_tx_status(), gprs_nsvc_replace_if_found(), ns_att_tlvdef, NS_CAUSE_MISSING_ESSENT_IE, NS_CTR_BLOCKED, NS_CTR_INV_NSEI, NS_CTR_INV_VCI, NS_CTR_NSEI_CHG, NS_CTR_REPLACED, NS_IE_NSEI, NS_IE_VCI, ns_osmo_signal_dispatch_mismatch(), ns_osmo_signal_dispatch_replaced(), NS_PDUT_ALIVE, NS_PDUT_RESET_ACK, NSE_S_ALIVE, NSE_S_BLOCKED, NSE_S_RESET, nsei, nsvc_start_timer(), and NSVC_TIMER_TNS_TEST.
Referenced by gprs_ns_process_msg().
|
static |
References gprs_ns_hdr::data, DNS, gprs_ns_cause_str(), ns_att_tlvdef, NS_IE_CAUSE, and gprs_nsvc::nsei.
Referenced by gprs_ns_process_msg().
|
static |
References bvci, gprs_ns_inst::cb, gprs_ns_hdr::data, GPRS_NS_EVT_UNIT_DATA, gprs_ns_tx_status(), msgb_bssgph, msgb_bvci, NS_CAUSE_NSVC_BLOCKED, NSE_S_BLOCKED, gprs_nsvc::nsi, and gprs_nsvc::state.
Referenced by gprs_ns_process_msg().
int gprs_ns_sendmsg | ( | struct gprs_ns_inst * | nsi, |
struct msgb * | msg | ||
) |
High-level function for transmitting a NS-UNITDATA messsage.
[in] | nsi | NS-instance on which we shall transmit |
[in] | msg | struct msgb to be trasnmitted |
This function obtains the NS-VC by the msgb_nsei(msg) and then checks if the NS-VC is ALIVEV and not BLOCKED. After that, it adds a NS header for the NS-UNITDATA message type and sends it off.
Section 9.2.10: transmit side / NS-UNITDATA-REQUEST primitive
References bvci, gprs_ns_hdr::data, DNS, gprs_active_nsvc_by_nsei(), gprs_ns_tx(), gprs_nsvc_by_nsei(), msgb_bvci, msgb_nsei, NS_PDUT_UNITDATA, and gprs_ns_hdr::pdu_type.
Referenced by _bssgp_tx_dl_ud(), bssgp_tx_bvc_block(), bssgp_tx_bvc_reset(), bssgp_tx_bvc_unblock(), bssgp_tx_fc_bvc(), bssgp_tx_fc_bvc_ack(), bssgp_tx_fc_ms(), bssgp_tx_flush_ll_ack(), bssgp_tx_llc_discarded(), bssgp_tx_paging(), bssgp_tx_ra_capa_upd(), bssgp_tx_resume(), bssgp_tx_resume_ack(), bssgp_tx_resume_nack(), bssgp_tx_simple_bvci(), bssgp_tx_status(), bssgp_tx_suspend(), bssgp_tx_suspend_ack(), bssgp_tx_suspend_nack(), bssgp_tx_ul_ud(), and common_tx_radio_status2().
void gprs_ns_set_log_ss | ( | int | ss | ) |
References DNS.
|
static |
References _NSVC_TIMER_NR, gprs_nsvc::alive_retries, gprs_nsvc::ctrg, data, DNS, gprs_ns_tx_alive(), gprs_ns_tx_reset(), NS_CAUSE_NSVC_BLOCKED, NS_CAUSE_OM_INTERVENTION, NS_CTR_BLOCKED, NS_CTR_DEAD, NS_CTR_LOST_ALIVE, NS_CTR_LOST_RESET, ns_osmo_signal_dispatch(), NS_TOUT_TNS_ALIVE_RETRIES, NSE_S_BLOCKED, NSE_S_RESET, gprs_nsvc::nsei, gprs_nsvc::nsi, nsvc_start_timer(), NSVC_TIMER_TNS_ALIVE, NSVC_TIMER_TNS_RESET, NSVC_TIMER_TNS_TEST, S_NS_ALIVE_EXP, S_NS_BLOCK, gprs_nsvc::state, gprs_ns_inst::timeout, gprs_nsvc::timer_mode, timer_mode_strs, and timer_mode_tout.
Referenced by gprs_nsvc_create().
|
static |
References gprs_nsvc::ctrg, DNS, gprs_ns_frgre_sendmsg(), GPRS_NS_LL_FR_GRE, GPRS_NS_LL_UDP, gprs_nsvc::ll, NS_CTR_BYTES_OUT, NS_CTR_PKTS_OUT, and nsip_sendmsg().
Referenced by gprs_ns_sendmsg(), gprs_ns_tx_block(), gprs_ns_tx_reset(), gprs_ns_tx_reset_ack(), gprs_ns_tx_simple(), and gprs_ns_tx_status().
int gprs_ns_tx_alive | ( | struct gprs_nsvc * | nsvc | ) |
Transmit a NS-ALIVE on a given NS-VC.
[in] | nsvc | NS-VC on which the NS-ALIVE is to be transmitted |
References DNS, gprs_ns_tx_simple(), NS_PDUT_ALIVE, gprs_nsvc::nsei, and gprs_nsvc::nsvci.
Referenced by gprs_ns_timer_cb().
int gprs_ns_tx_alive_ack | ( | struct gprs_nsvc * | nsvc | ) |
Transmit a NS-ALIVE-ACK on a given NS-VC.
[in] | nsvc | NS-VC on which the NS-ALIVE-ACK is to be transmitted |
References DNS, gprs_ns_tx_simple(), NS_PDUT_ALIVE_ACK, gprs_nsvc::nsei, and gprs_nsvc::nsvci.
Referenced by gprs_ns_process_msg().
int gprs_ns_tx_block | ( | struct gprs_nsvc * | nsvc, |
uint8_t | cause | ||
) |
Transmit a NS-BLOCK on a tiven NS-VC.
[in] | nsvc | NS-VC on which the NS-BLOCK is to be transmitted |
[in] | cause | Numeric NS Cause value |
References gprs_nsvc::ctrg, DNS, gprs_ns_cause_str(), gprs_ns_msgb_alloc(), gprs_ns_tx(), NS_CTR_BLOCKED, NS_IE_CAUSE, NS_IE_VCI, NS_PDUT_BLOCK, NSE_S_BLOCKED, gprs_nsvc::nsei, gprs_nsvc::nsvci, gprs_ns_hdr::pdu_type, and gprs_nsvc::state.
Referenced by DEFUN().
int gprs_ns_tx_reset | ( | struct gprs_nsvc * | nsvc, |
uint8_t | cause | ||
) |
Transmit a NS-RESET on a given NSVC.
[in] | nsvc | NS-VC used for transmission [in] cause Numeric NS cause value |
References DNS, gprs_ns_cause_str(), gprs_ns_msgb_alloc(), gprs_ns_tx(), NS_IE_CAUSE, NS_IE_NSEI, NS_IE_VCI, NS_PDUT_RESET, nsei, gprs_nsvc::nsei, gprs_nsvc::nsvci, and gprs_ns_hdr::pdu_type.
Referenced by gprs_ns_timer_cb(), and gprs_nsvc_reset().
|
static |
References DNS, gprs_ns_msgb_alloc(), gprs_ns_tx(), NS_IE_NSEI, NS_IE_VCI, NS_PDUT_RESET_ACK, nsei, gprs_nsvc::nsei, gprs_nsvc::nsvci, and gprs_ns_hdr::pdu_type.
Referenced by gprs_ns_rx_reset().
|
static |
References gprs_ns_msgb_alloc(), gprs_ns_tx(), and gprs_ns_hdr::pdu_type.
Referenced by gprs_ns_process_msg(), gprs_ns_rx_block(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_tx_alive(), gprs_ns_tx_alive_ack(), and gprs_ns_tx_unblock().
int gprs_ns_tx_status | ( | struct gprs_nsvc * | nsvc, |
uint8_t | cause, | ||
uint16_t | bvci, | ||
struct msgb * | orig_msg | ||
) |
Transmit a NS-STATUS on a given NSVC.
[in] | nsvc | NS-VC to be used for transmission |
[in] | cause | Numeric NS cause value |
[in] | bvci | BVCI to be reset within NSVC |
[in] | orig_msg | message causing the STATUS |
References DNS, gprs_ns_cause_str(), gprs_ns_msgb_alloc(), gprs_ns_tx(), 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, gprs_nsvc::nsei, gprs_nsvc::nsvci, and gprs_ns_hdr::pdu_type.
Referenced by gprs_ns_rx_block(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_rx_unitdata(), and gprs_ns_vc_create().
int gprs_ns_tx_unblock | ( | struct gprs_nsvc * | nsvc | ) |
Transmit a NS-UNBLOCK on a given NS-VC.
[in] | nsvc | NS-VC on which the NS-UNBLOCK is to be transmitted |
References DNS, gprs_ns_tx_simple(), NS_PDUT_UNBLOCK, gprs_nsvc::nsei, and gprs_nsvc::nsvci.
Referenced by DEFUN(), and gprs_ns_process_msg().
int gprs_ns_vc_create | ( | struct gprs_ns_inst * | nsi, |
struct msgb * | msg, | ||
struct gprs_nsvc * | fallback_nsvc, | ||
struct gprs_nsvc ** | new_nsvc | ||
) |
Create/get NS-VC independently from underlying transport layer.
nsi | NS instance to which the data belongs | |
[in] | msg | message buffer containing newly-received data |
[in] | fallback_nsvc | is used to send error messages back to the peer and to initialise the ll info of a created NS-VC object |
[out] | new_nsvc | contains a pointer to a NS-VC object if one has been created or found |
This contains the initial NS automaton state (NS-VC not yet attached).
References CHECK_TX_RC, gprs_ns_hdr::data, DNS, GPRS_NS_CS_CREATED, GPRS_NS_CS_FOUND, GPRS_NS_CS_REJECTED, GPRS_NS_CS_SKIPPED, gprs_ns_ll_copy(), gprs_ns_ll_str(), gprs_ns_pdu_strings, gprs_ns_tx_status(), gprs_nsvc_by_nsvci(), gprs_nsvc_create(), ns_att_tlvdef, NS_CAUSE_MISSING_ESSENT_IE, NS_CAUSE_PDU_INCOMP_PSTATE, NS_CTR_NSEI_CHG, NS_IE_CAUSE, NS_IE_NSEI, NS_IE_VCI, NS_PDUT_ALIVE_ACK, NS_PDUT_RESET, NS_PDUT_RESET_ACK, NS_PDUT_STATUS, NSE_S_ALIVE, nsei, gprs_nsvc::nsei, gprs_nsvc::nsvci, gprs_nsvc::nsvci_is_valid, gprs_ns_hdr::pdu_type, and gprs_nsvc::state.
Referenced by gprs_ns_rcvmsg().
struct gprs_nsvc* gprs_nsvc_by_nsei | ( | struct gprs_ns_inst * | nsi, |
uint16_t | nsei | ||
) |
Lookup struct gprs_nsvc based on NSEI.
[in] | nsi | NS instance in which to search |
[in] | nsei | NSEI to be searched |
References gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, and gprs_nsvc::nsei.
Referenced by DEFUN(), and gprs_ns_sendmsg().
struct gprs_nsvc* gprs_nsvc_by_nsvci | ( | struct gprs_ns_inst * | nsi, |
uint16_t | nsvci | ||
) |
Lookup struct gprs_nsvc based on NSVCI.
[in] | nsi | NS instance in which to search |
[in] | nsvci | NSVCI to be searched |
References gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, and gprs_nsvc::nsvci.
Referenced by DEFUN(), gprs_ns_vc_create(), and gprs_nsvc_replace_if_found().
struct gprs_nsvc* gprs_nsvc_create | ( | struct gprs_ns_inst * | nsi, |
uint16_t | nsvci | ||
) |
References gprs_nsvc::ctrg, DNS, gprs_ns_timer_cb(), gprs_ns_inst::gprs_nsvcs, gprs_nsvc::list, NSE_S_BLOCKED, gprs_nsvc::nsi, nsvc_ctrg_desc, nsvc_statg_desc, gprs_nsvc::nsvci, gprs_nsvc::nsvci_is_valid, gprs_nsvc::state, gprs_nsvc::statg, and gprs_nsvc::timer.
Referenced by DEFUN(), gprs_ns_instantiate(), gprs_ns_nsip_connect(), gprs_ns_rx_reset(), and gprs_ns_vc_create().
void gprs_nsvc_delete | ( | struct gprs_nsvc * | nsvc | ) |
Delete given NS-VC.
[in] | nsvc | gprs_nsvc to be deleted |
References gprs_nsvc::ctrg, gprs_nsvc::list, gprs_nsvc::statg, and gprs_nsvc::timer.
Referenced by gprs_ns_close().
|
static |
References DNS, gprs_ns_ll_str(), and gprs_nsvc_by_nsvci().
Referenced by gprs_ns_rx_reset(), and gprs_ns_rx_reset_ack().
int gprs_nsvc_reset | ( | struct gprs_nsvc * | nsvc, |
uint8_t | cause | ||
) |
Initiate a RESET procedure.
[in] | nsvc | NS-VC in which to start the procedure |
[in] | cause | Numeric NS cause value |
This is a high-level function initiating a NS-RESET procedure. It will not only send a NS-RESET, but also set the state to BLOCKED and start the Tns-reset timer.
References DNS, gprs_ns_tx_reset(), NSE_S_BLOCKED, NSE_S_RESET, gprs_nsvc::nsei, nsvc_start_timer(), NSVC_TIMER_TNS_RESET, and gprs_nsvc::state.
Referenced by DEFUN(), gprs_ns_nsip_connect(), and gprs_ns_process_msg().
int grps_ns_frgre_sendmsg | ( | struct gprs_nsvc * | nsvc, |
struct msgb * | msg | ||
) |
|
static |
References GPRS_NS_LL_UDP, gprs_ns_rcvmsg(), and read_nsip_msg().
Referenced by nsip_fd_cb().
|
static |
Referenced by nsip_fd_cb().
|
static |
References ns_signal_data::cause, and ns_signal_data::nsvc.
Referenced by gprs_ns_process_msg(), gprs_ns_rx_block(), gprs_ns_rx_reset(), and gprs_ns_timer_cb().
|
static |
References ns_signal_data::ie_type, ns_signal_data::msg, ns_signal_data::nsvc, pdu_type, ns_signal_data::pdu_type, and S_NS_MISMATCH.
Referenced by gprs_ns_rx_reset(), and gprs_ns_rx_reset_ack().
|
static |
References ns_signal_data::nsvc, ns_signal_data::old_nsvc, and S_NS_REPLACED.
Referenced by gprs_ns_rx_reset(), and gprs_ns_rx_reset_ack().
|
static |
References handle_nsip_read(), and handle_nsip_write().
Referenced by gprs_ns_nsip_listen().
|
static |
References gprs_ns_inst::fd, gprs_nsvc::ip, gprs_nsvc::nsi, and gprs_ns_inst::nsip.
Referenced by gprs_ns_tx().
|
static |
References gprs_ns_inst::gprs_nsvcs, gprs_nsvc::ip, and gprs_nsvc::list.
Referenced by gprs_ns_nsip_connect(), and gprs_ns_rcvmsg().
|
static |
References DNS, gprs_nsvc::nsei, gprs_nsvc::nsi, gprs_ns_inst::timeout, gprs_nsvc::timer, gprs_nsvc::timer_mode, timer_mode_strs, timer_mode_tout, and gprs_nsvc::timer_started.
Referenced by gprs_ns_process_msg(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_timer_cb(), and gprs_nsvc_reset().
|
static |
References gprs_nsvc::timer_started.
Referenced by gprs_ns_process_msg().
|
static |
References DNS, gprs_ns_msgb_alloc(), NS_ALLOC_HEADROOM, and NS_ALLOC_SIZE.
Referenced by handle_nsip_read().
enum ns_pdu_type __attribute__ |
uint8_t gprs_ns_hdr::data[0] |
variable-length payload
Referenced by gprs_ns_rx_block(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_rx_status(), gprs_ns_rx_unitdata(), gprs_ns_sendmsg(), and gprs_ns_vc_create().
uint8_t data[0] |
variable-length payload
Referenced by fc_timer_cb(), and gprs_ns_timer_cb().
const struct value_string gprs_ns_pdu_strings[] |
Referenced by gprs_ns_vc_create().
const struct value_string gprs_ns_pdu_strings[] |
Referenced by gprs_ns_vc_create().
const struct value_string gprs_ns_signal_ns_names[] |
|
static |
Referenced by gprs_ns_rx_block(), gprs_ns_rx_reset(), gprs_ns_rx_reset_ack(), gprs_ns_rx_status(), and gprs_ns_vc_create().
|
static |
Referenced by gprs_ns_cause_str().
|
static |
|
static |
Referenced by gprs_nsvc_create().
|
static |
|
static |
Referenced by gprs_nsvc_create().
uint8_t gprs_ns_hdr::pdu_type |
NS PDU type.
Referenced by gprs_ns_process_msg(), gprs_ns_sendmsg(), gprs_ns_tx_block(), gprs_ns_tx_reset(), gprs_ns_tx_reset_ack(), gprs_ns_tx_simple(), gprs_ns_tx_status(), and gprs_ns_vc_create().
uint8_t pdu_type |
NS PDU type.
Referenced by bssgp_rcvmsg(), bssgp_rx_ptp(), bssgp_rx_sign(), bssgp_tx_simple_bvci(), and ns_osmo_signal_dispatch_mismatch().
|
static |
Referenced by gprs_ns_timer_cb(), and nsvc_start_timer().
|
static |
Referenced by gprs_ns_timer_cb(), and nsvc_start_timer().