Loading...
Searching...
No Matches
gprs_ns.h
Go to the documentation of this file.
#pragma once
#include <stdint.h>
/* Our Implementation */
#include <netinet/in.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/timer.h>
#include <osmocom/core/select.h>
#include <osmocom/gprs/gprs_msgb.h>
#include <osmocom/gprs/protocol/gsm_08_16.h>
#define NS_TIMERS_COUNT 8
#define NS_TIMERS "(tns-block|tns-block-retries|tns-reset|tns-reset-retries|tns-test|tns-alive|tns-alive-retries|tsns-prov)"
#define NS_TIMERS_HELP \
"(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"
/* Educated guess - LLC user payload is 1500 bytes plus possible headers */
#define NS_ALLOC_SIZE 3072
#define NS_ALLOC_HEADROOM 20
enum ns_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,
};
#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")
enum gprs_ns_ll {
GPRS_NS_LL_UDP,
GPRS_NS_LL_E1,
GPRS_NS_LL_FR_GRE,
};
enum gprs_ns_evt {
GPRS_NS_EVT_UNIT_DATA,
};
enum gprs_ns_cs {
GPRS_NS_CS_CREATED,
GPRS_NS_CS_FOUND,
GPRS_NS_CS_REJECTED,
GPRS_NS_CS_SKIPPED,
GPRS_NS_CS_ERROR,
};
struct gprs_nsvc;
typedef int gprs_ns_cb_t(enum gprs_ns_evt event, struct gprs_nsvc *nsvc,
struct msgb *msg, uint16_t bvci);
struct gprs_ns_inst {
gprs_ns_cb_t *cb;
struct llist_head gprs_nsvcs;
struct gprs_nsvc *unknown_nsvc;
uint16_t timeout[NS_TIMERS_COUNT];
struct {
struct osmo_fd fd;
uint32_t local_ip;
uint16_t local_port;
uint32_t remote_ip;
uint16_t remote_port;
int dscp;
bool use_reset_block_unblock;
} nsip;
struct {
struct osmo_fd fd;
uint32_t local_ip;
unsigned int enabled:1;
} frgre;
struct osmo_fsm_inst *bss_sns_fi;
};
enum nsvc_timer_mode {
/* standard timers */
NSVC_TIMER_TNS_TEST,
NSVC_TIMER_TNS_ALIVE,
NSVC_TIMER_TNS_RESET,
_NSVC_TIMER_NR,
};
struct gprs_nsvc {
struct llist_head list;
struct gprs_ns_inst *nsi;
uint16_t nsei;
uint16_t nsvci;
uint32_t state;
uint32_t remote_state;
struct osmo_timer_list timer;
enum nsvc_timer_mode timer_mode;
struct timeval timer_started;
int alive_retries;
unsigned int remote_end_is_sgsn:1;
unsigned int persistent:1;
unsigned int nsvci_is_valid:1;
struct rate_ctr_group *ctrg;
struct osmo_stat_item_group *statg;
enum gprs_ns_ll ll;
union {
struct {
struct sockaddr_in bts_addr;
} ip;
struct {
struct sockaddr_in bts_addr;
} frgre;
};
uint8_t sig_weight;
uint8_t data_weight;
};
/* Create a new NS protocol instance */
struct gprs_ns_inst *gprs_ns_instantiate(gprs_ns_cb_t *cb, void *ctx);
/* Close a NS protocol instance */
void gprs_ns_close(struct gprs_ns_inst *nsi);
/* Close and Destroy a NS protocol instance */
void gprs_ns_destroy(struct gprs_ns_inst *nsi);
/* Listen for incoming GPRS packets via NS/UDP */
int gprs_ns_nsip_listen(struct gprs_ns_inst *nsi);
/* Establish a connection (from the BSS) to the SGSN */
struct gprs_nsvc *gprs_ns_nsip_connect(struct gprs_ns_inst *nsi,
struct sockaddr_in *dest,
uint16_t nsei, uint16_t nsvci);
/* Establish a connection (from the BSS) to the SGSN using IP SNS */
struct gprs_nsvc *gprs_ns_nsip_connect_sns(struct gprs_ns_inst *nsi, struct sockaddr_in *dest,
uint16_t nsei, uint16_t nsvci);
struct sockaddr_in;
/* main function for higher layers (BSSGP) to send NS messages */
int gprs_ns_sendmsg(struct gprs_ns_inst *nsi, struct msgb *msg);
/* Receive incoming NS message from underlying transport layer */
int gprs_ns_rcvmsg(struct gprs_ns_inst *nsi, struct msgb *msg,
struct sockaddr_in *saddr, enum gprs_ns_ll ll);
int gprs_ns_tx_alive(struct gprs_nsvc *nsvc);
int gprs_ns_tx_alive_ack(struct gprs_nsvc *nsvc);
int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause);
int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause);
int gprs_ns_tx_unblock(struct gprs_nsvc *nsvc);
/* Listen for incoming GPRS packets via NS/FR/GRE */
int gprs_ns_frgre_listen(struct gprs_ns_inst *nsi);
struct gprs_nsvc *gprs_nsvc_create2(struct gprs_ns_inst *nsi, uint16_t nsvci,
uint8_t sig_weight, uint8_t data_weight);
void gprs_nsvc_delete(struct gprs_nsvc *nsvc);
struct gprs_nsvc *gprs_nsvc_by_nsei(struct gprs_ns_inst *nsi, uint16_t nsei);
struct gprs_nsvc *gprs_nsvc_by_nsvci(struct gprs_ns_inst *nsi, uint16_t nsvci);
struct gprs_nsvc *gprs_nsvc_by_rem_addr(struct gprs_ns_inst *nsi, const struct sockaddr_in *sin);
/* Initiate a RESET procedure (including timer start, ...)*/
int gprs_nsvc_reset(struct gprs_nsvc *nsvc, uint8_t cause);
/* Add NS-specific VTY stuff */
int gprs_ns_vty_init(struct gprs_ns_inst *nsi);
/* Resturn peer info as string (NOTE: the buffer is allocated statically) */
const char *gprs_ns_ll_str(const struct gprs_nsvc *nsvc);
/* Return peer info in user-supplied buffer */
char *gprs_ns_ll_str_buf(char *buf, size_t buf_len, const struct gprs_nsvc *nsvc);
char *gprs_ns_ll_str_c(const void *ctx, const struct gprs_nsvc *nsvc);
/* Copy the link layer info from other into nsvc */
void gprs_ns_ll_copy(struct gprs_nsvc *nsvc, struct gprs_nsvc *other);
/* Clear the link layer info (will never match a real link then) */
void gprs_ns_ll_clear(struct gprs_nsvc *nsvc);
struct msgb *gprs_ns_msgb_alloc(void);
enum signal_ns {
S_NS_RESET,
S_NS_BLOCK,
S_NS_UNBLOCK,
S_NS_ALIVE_EXP, /* Tns-alive expired more than N times */
S_NS_REPLACED, /* nsvc object is replaced (sets old_nsvc) */
S_NS_MISMATCH, /* got an unexpected IE (sets msg, pdu_type, ie_type) */
S_SNS_CONFIGURED, /* IP-SNS configuration completed */
};
extern const struct value_string gprs_ns_signal_ns_names[];
const char *gprs_ns_cause_str(enum ns_cause cause);
struct ns_signal_data {
struct gprs_nsvc *nsvc;
struct gprs_nsvc *old_nsvc;
uint8_t cause;
uint8_t pdu_type;
uint8_t ie_type;
struct msgb *msg;
};
void gprs_ns_set_log_ss(int ss);
char *gprs_nsvc_state_append(char *s, struct gprs_nsvc *nsvc);
gprs_msgb.h
bvci
uint16_t bvci
Definition gprs_msgb.h:8
nsei
uint16_t nsei
Identifiers of a BTS, equal to 'struct bssgp_bts_ctx'.
Definition gprs_msgb.h:7
gprs_ns_cs
gprs_ns_cs
Osmocom NS VC create status.
Definition gprs_ns.h:65
GPRS_NS_CS_FOUND
@ GPRS_NS_CS_FOUND
A NSVC object has been found.
Definition gprs_ns.h:67
GPRS_NS_CS_CREATED
@ GPRS_NS_CS_CREATED
A NSVC object has been created.
Definition gprs_ns.h:66
GPRS_NS_CS_REJECTED
@ GPRS_NS_CS_REJECTED
Rejected and answered message.
Definition gprs_ns.h:68
GPRS_NS_CS_SKIPPED
@ GPRS_NS_CS_SKIPPED
Skipped message.
Definition gprs_ns.h:69
GPRS_NS_CS_ERROR
@ GPRS_NS_CS_ERROR
Failed to process message.
Definition gprs_ns.h:70
nsvc_timer_mode
nsvc_timer_mode
Definition gprs_ns.h:113
NSVC_TIMER_TNS_RESET
@ NSVC_TIMER_TNS_RESET
Definition gprs_ns.h:117
NSVC_TIMER_TNS_ALIVE
@ NSVC_TIMER_TNS_ALIVE
Definition gprs_ns.h:116
NSVC_TIMER_TNS_TEST
@ NSVC_TIMER_TNS_TEST
Definition gprs_ns.h:115
_NSVC_TIMER_NR
@ _NSVC_TIMER_NR
Definition gprs_ns.h:118
signal_ns
signal_ns
Definition gprs_ns.h:232
S_SNS_CONFIGURED
@ S_SNS_CONFIGURED
Definition gprs_ns.h:239
S_NS_MISMATCH
@ S_NS_MISMATCH
Definition gprs_ns.h:238
S_NS_UNBLOCK
@ S_NS_UNBLOCK
Definition gprs_ns.h:235
S_NS_ALIVE_EXP
@ S_NS_ALIVE_EXP
Definition gprs_ns.h:236
S_NS_RESET
@ S_NS_RESET
Definition gprs_ns.h:233
S_NS_BLOCK
@ S_NS_BLOCK
Definition gprs_ns.h:234
S_NS_REPLACED
@ S_NS_REPLACED
Definition gprs_ns.h:237
gprs_ns_frgre_listen
int gprs_ns_frgre_listen(struct gprs_ns_inst *nsi)
Definition gprs_ns_frgre.c:326
gprs_ns_vty_init
int gprs_ns_vty_init(struct gprs_ns_inst *nsi)
Definition gprs_ns_vty.c:635
gprs_ns_evt
gprs_ns_evt
Osmoco NS events.
Definition gprs_ns.h:60
GPRS_NS_EVT_UNIT_DATA
@ GPRS_NS_EVT_UNIT_DATA
Definition gprs_ns.h:61
NS_TIMERS_COUNT
#define NS_TIMERS_COUNT
Definition gprs_ns.h:17
gprs_ns_ll
gprs_ns_ll
Osmocom NS link layer types.
Definition gprs_ns.h:53
GPRS_NS_LL_FR_GRE
@ GPRS_NS_LL_FR_GRE
NS/FR/GRE/IP.
Definition gprs_ns.h:56
GPRS_NS_LL_UDP
@ GPRS_NS_LL_UDP
NS/UDP/IP.
Definition gprs_ns.h:54
GPRS_NS_LL_E1
@ GPRS_NS_LL_E1
NS/E1.
Definition gprs_ns.h:55
gprs_ns_cb_t
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
ns_timeout
ns_timeout
Definition gprs_ns.h:33
NS_TOUT_TSNS_PROV
@ NS_TOUT_TSNS_PROV
Definition gprs_ns.h:41
NS_TOUT_TNS_BLOCK
@ NS_TOUT_TNS_BLOCK
Definition gprs_ns.h:34
NS_TOUT_TNS_RESET
@ NS_TOUT_TNS_RESET
Definition gprs_ns.h:36
NS_TOUT_TNS_BLOCK_RETRIES
@ NS_TOUT_TNS_BLOCK_RETRIES
Definition gprs_ns.h:35
NS_TOUT_TNS_TEST
@ NS_TOUT_TNS_TEST
Definition gprs_ns.h:38
NS_TOUT_TNS_ALIVE_RETRIES
@ NS_TOUT_TNS_ALIVE_RETRIES
Definition gprs_ns.h:40
NS_TOUT_TNS_RESET_RETRIES
@ NS_TOUT_TNS_RESET_RETRIES
Definition gprs_ns.h:37
NS_TOUT_TNS_ALIVE
@ NS_TOUT_TNS_ALIVE
Definition gprs_ns.h:39
ns_cause
ns_cause
NS Cause (TS 08.16, Section 10.3.2, Table 13)
Definition gsm_08_16.h:83
gprs_nsvc_create2
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
gprs_ns_ll_str
const char * gprs_ns_ll_str(const struct gprs_nsvc *nsvc)
Definition gprs_ns.c:1546
gprs_ns_tx_unblock
int gprs_ns_tx_unblock(struct gprs_nsvc *nsvc)
Transmit a NS-UNBLOCK on a given NS-VC.
Definition gprs_ns.c:691
gprs_ns_nsip_connect
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:2137
gprs_nsvc_by_rem_addr
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
gprs_ns_nsip_listen
int gprs_ns_nsip_listen(struct gprs_ns_inst *nsi)
Create a listening socket for GPRS NS/UDP/IP.
Definition gprs_ns.c:2048
gprs_ns_instantiate
struct gprs_ns_inst * gprs_ns_instantiate(gprs_ns_cb_t *cb, void *ctx)
Create a new GPRS NS instance.
Definition gprs_ns.c:1882
gprs_ns_ll_str_buf
char * gprs_ns_ll_str_buf(char *buf, size_t buf_len, const struct gprs_nsvc *nsvc)
Definition gprs_ns.c:1525
gprs_ns_tx_reset
int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause)
Transmit a NS-RESET on a given NSVC.
Definition gprs_ns.c:537
gprs_ns_ll_clear
void gprs_ns_ll_clear(struct gprs_nsvc *nsvc)
Definition gprs_ns.c:1576
gprs_nsvc_delete
void gprs_nsvc_delete(struct gprs_nsvc *nsvc)
Delete given NS-VC.
Definition gprs_ns.c:353
gprs_nsvc_reset
int gprs_nsvc_reset(struct gprs_nsvc *nsvc, uint8_t cause)
Initiate a RESET procedure.
Definition gprs_ns.c:2103
gprs_ns_close
void gprs_ns_close(struct gprs_ns_inst *nsi)
Definition gprs_ns.c:1922
gprs_nsvc_by_nsei
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
gprs_ns_set_log_ss
void gprs_ns_set_log_ss(int ss)
Definition gprs_ns.c:2201
gprs_ns_tx_block
int gprs_ns_tx_block(struct gprs_nsvc *nsvc, uint8_t cause)
Transmit a NS-BLOCK on a given NS-VC.
Definition gprs_ns.c:626
gprs_ns_nsip_connect_sns
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:2168
gprs_nsvc_state_append
char * gprs_nsvc_state_append(char *s, struct gprs_nsvc *nsvc)
Append the nsvc state to a talloc string.
Definition gprs_ns.c:2214
data_weight
uint8_t data_weight
Definition gsm_08_16.h:3
gprs_ns_msgb_alloc
struct msgb * gprs_ns_msgb_alloc(void)
Definition gprs_ns.c:206
gprs_ns_ll_copy
void gprs_ns_ll_copy(struct gprs_nsvc *nsvc, struct gprs_nsvc *other)
Definition gprs_ns.c:1560
sig_weight
uint8_t sig_weight
Definition gsm_08_16.h:2
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.
Definition gprs_ns.c:1494
gprs_ns_tx_alive_ack
int gprs_ns_tx_alive_ack(struct gprs_nsvc *nsvc)
Transmit a NS-ALIVE-ACK on a given NS-VC.
Definition gprs_ns.c:720
gprs_ns_ll_str_c
char * gprs_ns_ll_str_c(const void *ctx, const struct gprs_nsvc *nsvc)
Definition gprs_ns.c:1552
gprs_ns_tx_alive
int gprs_ns_tx_alive(struct gprs_nsvc *nsvc)
Transmit a NS-ALIVE on a given NS-VC.
Definition gprs_ns.c:707
gprs_ns_signal_ns_names
const struct value_string gprs_ns_signal_ns_names[]
Definition gprs_ns.c:182
gprs_ns_cause_str
const char * gprs_ns_cause_str(enum ns_cause cause)
Obtain a human-readable string for NS cause value.
Definition gprs_ns.c:445
gprs_ns_sendmsg
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:1079
gprs_ns_destroy
void gprs_ns_destroy(struct gprs_ns_inst *nsi)
Destroy an entire NS instance.
Definition gprs_ns.c:1946
gprs_nsvc_by_nsvci
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
event
event
gsm_08_16.h
GPRS Networks Service (NS) messages on the Gb interface.
linuxlist.h
msgb.h
select.h
gprs_ns_inst
An instance of the NS protocol stack.
Definition gprs_ns.h:79
gprs_ns_inst::local_ip
uint32_t local_ip
Definition gprs_ns.h:95
gprs_ns_inst::gprs_nsvcs
struct llist_head gprs_nsvcs
linked lists of all NSVC in this instance
Definition gprs_ns.h:84
gprs_ns_inst::cb
gprs_ns_cb_t * cb
callback to the user for incoming UNIT DATA IND
Definition gprs_ns.h:81
gprs_ns_inst::remote_ip
uint32_t remote_ip
Definition gprs_ns.h:97
gprs_ns_inst::timeout
uint16_t timeout[NS_TIMERS_COUNT]
Definition gprs_ns.h:90
gprs_ns_inst::dscp
int dscp
Definition gprs_ns.h:99
gprs_ns_inst::remote_port
uint16_t remote_port
Definition gprs_ns.h:98
gprs_ns_inst::enabled
unsigned int enabled
Definition gprs_ns.h:107
gprs_ns_inst::local_port
uint16_t local_port
Definition gprs_ns.h:96
gprs_ns_inst::bss_sns_fi
struct osmo_fsm_inst * bss_sns_fi
Definition gprs_ns.h:110
gprs_ns_inst::nsip
struct gprs_ns_inst::@14 nsip
NS-over-IP specific bits.
gprs_ns_inst::unknown_nsvc
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_inst::frgre
struct gprs_ns_inst::@15 frgre
NS-over-FR-over-GRE-over-IP specific bits.
gprs_ns_inst::use_reset_block_unblock
bool use_reset_block_unblock
IPA compatibility: NS-RESET/BLOCK/UNBLOCK even on IP-SNS.
Definition gprs_ns.h:101
gprs_nsvc
Structure representing a single NS-VC.
Definition gprs_ns.h:122
gprs_nsvc::remote_end_is_sgsn
unsigned int remote_end_is_sgsn
Definition gprs_ns.h:139
gprs_nsvc::statg
struct osmo_stat_item_group * statg
Definition gprs_ns.h:144
gprs_nsvc::ll
enum gprs_ns_ll ll
which link-layer are we based on?
Definition gprs_ns.h:147
gprs_nsvc::nsi
struct gprs_ns_inst * nsi
pointer to NS Instance
Definition gprs_ns.h:126
gprs_nsvc::timer
struct osmo_timer_list timer
Definition gprs_ns.h:134
gprs_nsvc::alive_retries
int alive_retries
Definition gprs_ns.h:137
gprs_nsvc::timer_started
struct timeval timer_started
Definition gprs_ns.h:136
gprs_nsvc::timer_mode
enum nsvc_timer_mode timer_mode
Definition gprs_ns.h:135
gprs_nsvc::state
uint32_t state
uniquely identifies NS-VC at SGSN
Definition gprs_ns.h:131
gprs_nsvc::nsvci
uint16_t nsvci
end-to-end significance
Definition gprs_ns.h:129
gprs_nsvc::persistent
unsigned int persistent
Definition gprs_ns.h:140
gprs_nsvc::remote_state
uint32_t remote_state
Definition gprs_ns.h:132
gprs_nsvc::sig_weight
uint8_t sig_weight
signalling weight.
Definition gprs_ns.h:160
gprs_nsvc::list
struct llist_head list
list of NS-VCs within NS Instance
Definition gprs_ns.h:124
gprs_nsvc::nsvci_is_valid
unsigned int nsvci_is_valid
Definition gprs_ns.h:141
gprs_nsvc::data_weight
uint8_t data_weight
signaling weight.
Definition gprs_ns.h:162
gprs_nsvc::nsei
uint16_t nsei
Definition gprs_ns.h:128
gprs_nsvc::ctrg
struct rate_ctr_group * ctrg
Definition gprs_ns.h:143
llist_head
msgb
ns_signal_data
Definition gprs_ns.h:245
ns_signal_data::pdu_type
uint8_t pdu_type
Definition gprs_ns.h:249
ns_signal_data::cause
uint8_t cause
Definition gprs_ns.h:248
ns_signal_data::old_nsvc
struct gprs_nsvc * old_nsvc
Definition gprs_ns.h:247
ns_signal_data::ie_type
uint8_t ie_type
Definition gprs_ns.h:250
ns_signal_data::nsvc
struct gprs_nsvc * nsvc
Definition gprs_ns.h:246
ns_signal_data::msg
struct msgb * msg
Definition gprs_ns.h:251
osmo_fd
osmo_fsm_inst
osmo_stat_item_group
osmo_timer_list
rate_ctr_group
value_string
timer.h