8 #include <netinet/in.h> 17 #define NS_TIMERS_COUNT 8 18 #define NS_TIMERS "(tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries|tsns-prov)" 19 #define NS_TIMERS_HELP \ 20 "(un)blocking Timer (Tns-block) timeout\n" \ 21 "(un)blocking Timer (Tns-block) number of retries\n" \ 22 "Reset Timer (Tns-reset) timeout\n" \ 23 "Reset Timer (Tns-reset) number of retries\n" \ 24 "Test Timer (Tns-test) timeout\n" \ 25 "Alive Timer (Tns-alive) timeout\n" \ 26 "Alive Timer (Tns-alive) number of retries\n" \ 27 "SNS Provision Timer (Tsns-prov) timeout\n" 30 #define NS_ALLOC_SIZE 3072 31 #define NS_ALLOC_HEADROOM 20 44 #define NSE_S_BLOCKED 0x0001 45 #define NSE_S_ALIVE 0x0002 46 #define NSE_S_RESET 0x0004 48 #define NS_DESC_B(st) ((st) & NSE_S_BLOCKED ? "BLOCKED" : "UNBLOCKED") 49 #define NS_DESC_A(st) ((st) & NSE_S_ALIVE ? "ALIVE" : "DEAD") 50 #define NS_DESC_R(st) ((st) & NSE_S_RESET ? "RESET" : "UNRESET") 134 struct timeval timer_started;
137 unsigned int remote_end_is_sgsn:1;
138 unsigned int persistent:1;
139 unsigned int nsvci_is_valid:1;
151 struct sockaddr_in bts_addr;
154 struct sockaddr_in bts_addr;
177 struct sockaddr_in *dest,
Definition: gprs_ns.h:232
signal_ns
Definition: gprs_ns.h:226
Definition: gprs_ns.h:230
Definition: gprs_ns.h:113
NS/FR/GRE/IP.
Definition: gprs_ns.h:56
struct msgb * gprs_ns_msgb_alloc(void)
Definition: gprs_ns.c:206
uint32_t remote_ip
Definition: gprs_ns.h:97
uint8_t sig_weight
signalling weight.
Definition: gprs_ns.h:158
Structure representing a single NS-VC.
Definition: gprs_ns.h:120
void gprs_ns_destroy(struct gprs_ns_inst *nsi)
Destroy an entire NS instance.
Definition: gprs_ns.c:1945
int gprs_ns_tx_unblock(struct gprs_nsvc *nsvc)
Transmit a NS-UNBLOCK on a given NS-VC.
Definition: gprs_ns.c:698
uint16_t nsei
Definition: gprs_ns.h:126
struct gprs_ns_inst * nsi
pointer to NS Instance
Definition: gprs_ns.h:124
void gprs_ns_close(struct gprs_ns_inst *nsi)
Definition: gprs_ns.c:1921
NS/UDP/IP.
Definition: gprs_ns.h:54
gprs_ns_cs
Osmocom NS VC create status.
Definition: gprs_ns.h:65
char * gprs_ns_ll_str_c(const void *ctx, const struct gprs_nsvc *nsvc)
Definition: gprs_ns.c:1560
int gprs_ns_sendmsg(struct gprs_ns_inst *nsi, struct msgb *msg)
High-level function for transmitting a NS-UNITDATA messsage.
Definition: gprs_ns.c:1087
uint32_t local_ip
Definition: gprs_ns.h:95
int dscp
Definition: gprs_ns.h:99
Definition: gprs_ns.h:239
struct llist_head gprs_nsvcs
linked lists of all NSVC in this instance
Definition: gprs_ns.h:84
int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause)
Transmit a NS-BLOCK on a tiven NS-VC.
Definition: gprs_ns.c:633
uint16_t remote_port
Definition: gprs_ns.h:98
struct gprs_nsvc * gprs_ns_nsip_connect_sns(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 using SNS auto-configuration.
Definition: gprs_ns.c:2172
struct gprs_ns_inst * gprs_ns_instantiate(gprs_ns_cb_t *cb, void *ctx)
Create a new GPRS NS instance.
Definition: gprs_ns.c:1886
int gprs_ns_tx_alive_ack(struct gprs_nsvc *nsvc)
Transmit a NS-ALIVE-ACK on a given NS-VC.
Definition: gprs_ns.c:727
NS/E1.
Definition: gprs_ns.h:55
struct gprs_nsvc * unknown_nsvc
a NSVC object that's needed to deal with packets for unknown NSVC
Definition: gprs_ns.h:88
gprs_ns_cb_t * cb
callback to the user for incoming UNIT DATA IND
Definition: gprs_ns.h:81
struct gprs_nsvc * gprs_nsvc_create(struct gprs_ns_inst *nsi, uint16_t nsvci)
Old API for creating a NS-VC.
Definition: gprs_ns.c:351
Skipped message.
Definition: gprs_ns.h:69
Definition: gprs_ns.h:115
An instance of the NS protocol stack.
Definition: gprs_ns.h:79
void gprs_ns_set_log_ss(int ss)
Definition: gprs_ns.c:2205
struct msgb * msg
Definition: gprs_ns.h:245
Definition: gprs_ns.h:228
void gprs_nsvc_delete(struct gprs_nsvc *nsvc)
Delete given NS-VC.
Definition: gprs_ns.c:359
const char * gprs_ns_ll_str(const struct gprs_nsvc *nsvc)
Definition: gprs_ns.c:1554
gprs_ns_evt
Osmoco NS events.
Definition: gprs_ns.h:60
struct rate_ctr_group * ctrg
Definition: gprs_ns.h:141
A NSVC object has been found.
Definition: gprs_ns.h:67
int gprs_nsvc_reset(struct gprs_nsvc *nsvc, uint8_t cause)
Initiate a RESET procedure.
Definition: gprs_ns.c:2107
const struct value_string gprs_ns_signal_ns_names[]
Definition: gprs_ns.c:182
uint16_t nsei
Identifiers of a BTS, equal to 'struct bssgp_bts_ctx'.
Definition: gprs_msgb.h:80
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.
Definition: gprs_ns.c:2141
struct gprs_nsvc * nsvc
Definition: gprs_ns.h:240
int gprs_ns_nsip_listen(struct gprs_ns_inst *nsi)
Create a listening socket for GPRS NS/UDP/IP.
Definition: gprs_ns.c:2047
Definition: gprs_ns.h:227
struct gprs_nsvc * gprs_nsvc_by_nsei(struct gprs_ns_inst *nsi, uint16_t nsei)
Lookup struct gprs_nsvc based on NSEI.
Definition: gprs_ns.c:254
Definition: gprs_ns.h:114
uint16_t local_port
Definition: gprs_ns.h:96
uint16_t bvci
Definition: gprs_msgb.h:81
void gprs_ns_ll_clear(struct gprs_nsvc *nsvc)
Definition: gprs_ns.c:1584
nsvc_timer_mode
Definition: gprs_ns.h:111
uint8_t data_weight
signaling weight.
Definition: gprs_ns.h:160
uint16_t timeout[NS_TIMERS_COUNT]
Definition: gprs_ns.h:90
#define NS_TIMERS_COUNT
Definition: gprs_ns.h:17
struct osmo_fd fd
Definition: gprs_ns.h:94
unsigned int enabled
Definition: gprs_ns.h:105
Definition: gprs_ns.h:233
int gprs_ns_cb_t(enum gprs_ns_evt event, struct gprs_nsvc *nsvc, struct msgb *msg, uint16_t bvci)
Osmocom GPRS callback function type.
Definition: gprs_ns.h:75
uint16_t nsvci
end-to-end significance
Definition: gprs_ns.h:127
uint32_t remote_state
Definition: gprs_ns.h:130
uint8_t pdu_type
Definition: gprs_ns.h:243
struct gprs_nsvc * gprs_nsvc_create2(struct gprs_ns_inst *nsi, uint16_t nsvci, uint8_t sig_weight, uint8_t data_weight)
Create a new NS-VC (Virtual Circuit) within given instance.
Definition: gprs_ns.c:311
char * gprs_nsvc_state_append(char *s, struct gprs_nsvc *nsvc)
Append the nsvc state to a talloc string.
Definition: gprs_ns.c:2218
A NSVC object has been created.
Definition: gprs_ns.h:66
Rejected and answered message.
Definition: gprs_ns.h:68
uint8_t cause
Definition: gprs_ns.h:242
int alive_retries
Definition: gprs_ns.h:135
ns_cause
NS Cause (TS 08.16, Section 10.3.2, Table 13)
Definition: gsm_08_16.h:73
void gprs_ns_ll_copy(struct gprs_nsvc *nsvc, struct gprs_nsvc *other)
Definition: gprs_ns.c:1568
const char * gprs_ns_cause_str(enum ns_cause cause)
Obtain a human-readable string for NS cause value.
Definition: gprs_ns.c:452
char * gprs_ns_ll_str_buf(char *buf, size_t buf_len, const struct gprs_nsvc *nsvc)
Definition: gprs_ns.c:1533
uint32_t state
uniquely identifies NS-VC at SGSN
Definition: gprs_ns.h:129
struct gprs_nsvc * old_nsvc
Definition: gprs_ns.h:241
struct gprs_nsvc * gprs_nsvc_by_rem_addr(struct gprs_ns_inst *nsi, const struct sockaddr_in *sin)
Lookup NS-VC based on specified remote peer socket addr.
Definition: gprs_ns.c:291
int gprs_ns_frgre_listen(struct gprs_ns_inst *nsi)
Definition: gprs_ns_frgre.c:326
uint8_t ie_type
Definition: gprs_ns.h:244
int gprs_ns_tx_alive(struct gprs_nsvc *nsvc)
Transmit a NS-ALIVE on a given NS-VC.
Definition: gprs_ns.c:714
gprs_ns_ll
Osmocom NS link layer types.
Definition: gprs_ns.h:53
GPRS Networks Service (NS) messages on the Gb interface.
struct gprs_ns_inst::@2 nsip
NS-over-IP specific bits.
Definition: gprs_ns.h:229
uint8_t data_weight
Definition: gsm_08_16.h:203
ns_timeout
Definition: gprs_ns.h:33
int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause)
Transmit a NS-RESET on a given NSVC.
Definition: gprs_ns.c:544
struct osmo_fsm_inst * bss_sns_fi
Definition: gprs_ns.h:108
struct osmo_stat_item_group * statg
Definition: gprs_ns.h:142
int gprs_ns_vty_init(struct gprs_ns_inst *nsi)
Definition: gprs_ns_vty.c:613
Definition: gprs_ns.h:231
Failed to process message.
Definition: gprs_ns.h:70
struct gprs_nsvc * gprs_nsvc_by_nsvci(struct gprs_ns_inst *nsi, uint16_t nsvci)
Lookup struct gprs_nsvc based on NSVCI.
Definition: gprs_ns.c:239
Definition: gprs_ns.h:116
uint8_t sig_weight
Definition: gsm_08_16.h:202
struct gprs_ns_inst::@3 frgre
NS-over-FR-over-GRE-over-IP specific bits.