libosmogb  1.7.0
Osmocom Gb library
gb_internal.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <osmocom/core/msgb.h>
4 #include <osmocom/gsm/tlv.h>
5 #include <osmocom/gprs/gprs_ns.h>
6 
7 /* gprs_ns_sns.c */
8 int gprs_ns_rx_sns(struct gprs_ns_inst *nsi, struct msgb *msg, struct tlv_parsed *tp);
9 
10 struct osmo_fsm_inst *gprs_sns_bss_fsm_alloc(void *ctx, struct gprs_nsvc *nsvc, const char *id);
11 int gprs_sns_bss_fsm_start(struct gprs_ns_inst *nsi);
12 
13 int gprs_sns_init(void);
14 
15 /* gprs_ns.c */
16 void gprs_nsvc_start_test(struct gprs_nsvc *nsvc);
18 int gprs_ns_tx_sns_ack(struct gprs_nsvc *nsvc, uint8_t trans_id, uint8_t *cause,
19  const struct gprs_ns_ie_ip4_elem *ip4_elems,unsigned int num_ip4_elems);
20 
21 int gprs_ns_tx_sns_config(struct gprs_nsvc *nsvc, bool end_flag,
22  const struct gprs_ns_ie_ip4_elem *ip4_elems,
23  unsigned int num_ip4_elems);
24 
25 int gprs_ns_tx_sns_config_ack(struct gprs_nsvc *nsvc, uint8_t *cause);
26 
27 int gprs_ns_tx_sns_size(struct gprs_nsvc *nsvc, bool reset_flag, uint16_t max_nr_nsvc,
28  uint16_t *ip4_ep_nr, uint16_t *ip6_ep_nr);
29 
30 int gprs_ns_tx_sns_size_ack(struct gprs_nsvc *nsvc, uint8_t *cause);
31 
32 struct vty;
33 void gprs_sns_dump_vty(struct vty *vty, const struct gprs_ns_inst *nsi, bool stats);
Q931_PDISC_CC
#define Q931_PDISC_CC
Definition: frame_relay.c:105
fr_dlc_dump_vty
static void fr_dlc_dump_vty(struct vty *vty, const struct osmo_fr_dlc *dlc)
Definition: frame_relay.c:1022
FR_ROLE_USER_EQUIPMENT
@ FR_ROLE_USER_EQUIPMENT
Definition: frame_relay.h:39
tx_lmi_q933_status_enq
static int tx_lmi_q933_status_enq(struct osmo_fr_link *link, uint8_t rep_type)
Definition: frame_relay.c:293
osmo_fr_tx_dlc
int osmo_fr_tx_dlc(struct msgb *msg)
Definition: frame_relay.c:834
osmo_fr_network_dump_vty
void osmo_fr_network_dump_vty(struct vty *vty, const struct osmo_fr_network *net)
Definition: frame_relay.c:1041
msgb_alloc_headroom
static struct msgb * msgb_alloc_headroom(uint16_t size, uint16_t headroom, const char *name)
q922_to_dlci
static uint16_t q922_to_dlci(const uint8_t *hdr)
Definition: frame_relay.c:187
endian.h
osmo_fr_network::n393
unsigned int n393
Definition: frame_relay.h:59
OSMO_TDEF_S
OSMO_TDEF_S
osmo_fr_link_free
void osmo_fr_link_free(struct osmo_fr_link *link)
Definition: frame_relay.c:955
osmo_fr_dlc::list
struct llist_head list
Definition: frame_relay.h:110
link_get_tx_seq
static uint8_t link_get_tx_seq(struct osmo_fr_link *link)
Definition: frame_relay.c:237
vty.h
Q931_MSGT_RESUME_REJ
@ Q931_MSGT_RESUME_REJ
Definition: frame_relay.c:61
parse_full_pvc_status
static int parse_full_pvc_status(struct osmo_fr_link *link, struct tlv_parsed *tp, size_t tp_len)
Definition: frame_relay.c:509
Q931_MSGT_SUSPEND_ACK
@ Q931_MSGT_SUSPEND_ACK
Definition: frame_relay.c:63
len
static size_t len(const char *str)
OSMO_ASSERT
#define OSMO_ASSERT(exp)
count_pvc_status
static size_t count_pvc_status(struct tlv_parsed *tp, size_t tp_len)
Definition: frame_relay.c:628
msgb_put
static unsigned char * msgb_put(struct msgb *msgb, unsigned int len)
utils.h
Q931_MSGT_RESUME
@ Q931_MSGT_RESUME
Definition: frame_relay.c:59
fr_t392_cb
static void fr_t392_cb(void *data)
Definition: frame_relay.c:883
data
uint8_t data[0]
variable-length payload
Definition: gsm_08_16.h:3
osmo_fr_dlc_alloc
struct osmo_fr_dlc * osmo_fr_dlc_alloc(struct osmo_fr_link *link, uint16_t dlci)
Definition: frame_relay.c:974
gprs_sns_bss_fsm_start
int gprs_sns_bss_fsm_start(struct gprs_ns_inst *nsi)
Definition: gprs_ns_sns.c:680
Q933_IEI_REPORT_TYPE
@ Q933_IEI_REPORT_TYPE
Definition: frame_relay.c:90
rx_lmi_q933_status_enq
static int rx_lmi_q933_status_enq(struct msgb *msg, struct tlv_parsed *tp)
Definition: frame_relay.c:368
tx_lmi_q933_status
static int tx_lmi_q933_status(struct osmo_fr_link *link, uint8_t rep_type)
Definition: frame_relay.c:311
TLVP_PRES_LEN
#define TLVP_PRES_LEN(tp, tag, min_len)
osmo_fr_role_str
static const char * osmo_fr_role_str(enum osmo_fr_role role)
Definition: frame_relay.h:50
Q931_MSGT_STATUS
@ Q931_MSGT_STATUS
Definition: frame_relay.c:76
VTY_NEWLINE
#define VTY_NEWLINE
msg_type
uint8_t msg_type
Definition: frame_relay.c:4
msgb.h
link_set_failed
static void link_set_failed(struct osmo_fr_link *link)
Definition: frame_relay.c:353
LMI_Q933A_CALLREF
#define LMI_Q933A_CALLREF
Definition: frame_relay.c:106
TLVP_LEN
#define TLVP_LEN(x, y)
fr_tdefs
struct osmo_tdef fr_tdefs[]
Definition: frame_relay.c:158
msg
uint8_t msg[0]
llist_for_each_entry_safe
#define llist_for_each_entry_safe(pos, n, head, member)
rx_lmi_q922
static int rx_lmi_q922(struct msgb *msg)
Definition: frame_relay.c:712
Q931_MSGT_SUSPEND
@ Q931_MSGT_SUSPEND
Definition: frame_relay.c:62
Q931_MSGT_IFORMATION
@ Q931_MSGT_IFORMATION
Definition: frame_relay.c:74
q933_a_hdr::prot_disc
uint8_t prot_disc
Definition: frame_relay.c:119
tlv_parse2
int tlv_parse2(struct tlv_parsed *dec, int dec_multiples, const struct tlv_definition *def, const uint8_t *buf, int buf_len, uint8_t lv_tag, uint8_t lv_tag2)
osmo_tdefs_reset
void osmo_tdefs_reset(struct osmo_tdef *tdefs)
INIT_LLIST_HEAD
#define INIT_LLIST_HEAD(ptr)
osmo_tdef
Q931_MSGT_RESTART_ACK
@ Q931_MSGT_RESTART_ACK
Definition: frame_relay.c:70
q933_a_hdr::call_ref
uint8_t call_ref
Definition: frame_relay.c:120
osmo_fsm_inst
osmo_fr_role_names
const struct value_string osmo_fr_role_names[]
Definition: frame_relay.c:151
Q933_REPT_SINGLE_PVC_ASYNC_STS
@ Q933_REPT_SINGLE_PVC_ASYNC_STS
Definition: frame_relay.c:85
LMI_CISCO_DLCI
#define LMI_CISCO_DLCI
Definition: frame_relay.c:110
Q931_MSGT_USER_INFO
@ Q931_MSGT_USER_INFO
Definition: frame_relay.c:64
msgb_length
uint16_t msgb_length(const struct msgb *msg)
llist_del
static void llist_del(struct llist_head *entry)
gprs_ns_inst
An instance of the NS protocol stack.
Definition: gprs_ns.h:79
TLV_TYPE_TLV
TLV_TYPE_TLV
msgb_put_pvc_status
static void msgb_put_pvc_status(struct msgb *msg, struct osmo_fr_dlc *dlc)
Definition: frame_relay.c:264
osmo_fr_dlc::add
bool add
Definition: frame_relay.h:118
tlv_definition
msgb
msgb_push
static unsigned char * msgb_push(struct msgb *msgb, unsigned int len)
Q931_MSGT_STATUS_ENQUIRY
@ Q931_MSGT_STATUS_ENQUIRY
Definition: frame_relay.c:77
LOGL_INFO
#define LOGL_INFO
Q933_PVC_STATUS_DLC_ACTIVE
@ Q933_PVC_STATUS_DLC_ACTIVE
Definition: frame_relay.c:97
gprs_ns_ie_ip4_elem
Section 10.3.2c List of IP4 Elements.
Definition: gsm_08_16.h:24
hdr
struct iuup_pdutype14_hdr hdr
msgb_l3len
static unsigned int msgb_l3len(const struct msgb *msgb)
net
uint8_t net[5]
gprs_ns_tx_sns_config
int gprs_ns_tx_sns_config(struct gprs_nsvc *nsvc, bool end_flag, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems)
Encode + Transmit a SNS-CONFIG as per Section 9.3.4.
Definition: gprs_ns.c:920
Q931_MSGT_CONNECT_ACK
@ Q931_MSGT_CONNECT_ACK
Definition: frame_relay.c:54
gprs_ns.h
Q933_REPT_FULL_STATUS
@ Q933_REPT_FULL_STATUS
Definition: frame_relay.c:83
tlv.h
Q931_MSGT_SETUP
@ Q931_MSGT_SETUP
Definition: frame_relay.c:56
msgb_free
void msgb_free(struct msgb *m)
osmo_fr_dlc::state_send
bool state_send
Definition: frame_relay.h:124
vty
MAX_SUPPORTED_PVC
#define MAX_SUPPORTED_PVC
Definition: frame_relay.c:113
osmo_fr_dlc::link
struct osmo_fr_link * link
Definition: frame_relay.h:111
tlv_definition::def
struct tlv_def def[256]
osmo_fr_dlc_by_dlci
struct osmo_fr_dlc * osmo_fr_dlc_by_dlci(struct osmo_fr_link *link, uint16_t dlci)
Definition: frame_relay.c:1007
gprs_ns_tx_sns_size
int gprs_ns_tx_sns_size(struct gprs_nsvc *nsvc, bool reset_flag, uint16_t max_nr_nsvc, uint16_t *ip4_ep_nr, uint16_t *ip6_ep_nr)
Encode + transmit a SNS-SIZE as per Section 9.3.7.
Definition: gprs_ns.c:1000
osmo_timer_schedule
void osmo_timer_schedule(struct osmo_timer_list *timer, int seconds, int microseconds)
q933_a_pvc_sts
Definition: frame_relay.c:125
Q931_MSGT_ALERTING
@ Q931_MSGT_ALERTING
Definition: frame_relay.c:51
osmo_fr_network::n392
unsigned int n392
Definition: frame_relay.h:58
msgb_tlv_put
static uint8_t * msgb_tlv_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val)
osmo_tdef::T
const int T
Q933_IEI_PVC_STATUS
@ Q933_IEI_PVC_STATUS
Definition: frame_relay.c:92
gprs_nsvc
Structure representing a single NS-VC.
Definition: gprs_ns.h:122
msgb_put_link_int_verif
static void msgb_put_link_int_verif(struct msgb *msg, struct osmo_fr_link *link)
Definition: frame_relay.c:249
q933_type_of_report
q933_type_of_report
Definition: frame_relay.c:82
q933_msgb_alloc
static struct msgb * q933_msgb_alloc(uint16_t dlci, uint8_t prot_disc, uint8_t msg_type)
Definition: frame_relay.c:212
gprs_sns_dump_vty
void gprs_sns_dump_vty(struct vty *vty, const struct gprs_ns_inst *nsi, bool stats)
Definition: gprs_ns_sns.c:753
name
const char * name
dlc_set_active
static void dlc_set_active(struct osmo_fr_dlc *dlc, bool active)
Definition: frame_relay.c:199
TLVP_PRESENT
#define TLVP_PRESENT(x, y)
Q931_MSGT_CONNECT
@ Q931_MSGT_CONNECT
Definition: frame_relay.c:53
osmo_fr_network::T_defs
struct osmo_tdef * T_defs
Definition: frame_relay.h:61
Q933_REPT_LINK_INTEGRITY_VERIF
@ Q933_REPT_LINK_INTEGRITY_VERIF
Definition: frame_relay.c:84
fr_t391_cb
static void fr_t391_cb(void *data)
Definition: frame_relay.c:869
osmo_fr_network
Definition: frame_relay.h:54
gprs_ns_tx_sns_ack
int gprs_ns_tx_sns_ack(struct gprs_nsvc *nsvc, uint8_t trans_id, uint8_t *cause, const struct gprs_ns_ie_ip4_elem *ip4_elems, unsigned int num_ip4_elems)
Encode + Transmit a SNS-ACK as per Section 9.3.1.
Definition: gprs_ns.c:875
msgb_l2len
static unsigned int msgb_l2len(const struct msgb *msgb)
osmo_timer_setup
void osmo_timer_setup(struct osmo_timer_list *timer, void(*cb)(void *data), void *data)
TLVP_VAL_MINLEN
#define TLVP_VAL_MINLEN(_tp, tag, min_len)
osmo_tdef_get
unsigned long osmo_tdef_get(const struct osmo_tdef *tdefs, int T, enum osmo_tdef_unit as_unit, long val_if_not_present)
osmo_fr_link_alloc
struct osmo_fr_link * osmo_fr_link_alloc(struct osmo_fr_network *net, enum osmo_fr_role role, const char *name)
Definition: frame_relay.c:927
timer.h
Q931_MSGT_RESUME_ACK
@ Q931_MSGT_RESUME_ACK
Definition: frame_relay.c:60
osmo_fr_network::n391
unsigned int n391
Definition: frame_relay.h:57
tdef.h
osmo_fr_role
osmo_fr_role
Definition: frame_relay.h:38
llist_for_each_entry
#define llist_for_each_entry(pos, head, member)
LOGPFRL
#define LOGPFRL(frl, lvl, fmt, args ...)
Definition: frame_relay.c:43
osmo_fr_dlc::dlci
uint16_t dlci
Definition: frame_relay.h:113
LOGL_NOTICE
#define LOGL_NOTICE
q933_pvc_status
q933_pvc_status
Definition: frame_relay.c:96
rx_lmi_q933_status
static int rx_lmi_q933_status(struct msgb *msg, struct tlv_parsed *tp)
Definition: frame_relay.c:640
value_string
FR_ROLE_NETWORK_EQUIPMENT
@ FR_ROLE_NETWORK_EQUIPMENT
Definition: frame_relay.h:40
Q931_MSGT_RELEASE_COMPLETE
@ Q931_MSGT_RELEASE_COMPLETE
Definition: frame_relay.c:68
LMI_Q933A_DLCI
#define LMI_Q933A_DLCI
Definition: frame_relay.c:109
linuxlist.h
gprs_start_alive_all_nsvcs
void gprs_start_alive_all_nsvcs(struct gprs_ns_inst *nsi)
Definition: gprs_ns.c:2241
gprs_ns_tx_sns_size_ack
int gprs_ns_tx_sns_size_ack(struct gprs_nsvc *nsvc, uint8_t *cause)
Encode + Transmit a SNS-SIZE-ACK as per Section 9.3.8.
Definition: gprs_ns.c:1040
Q931_MSGT_RESTART
@ Q931_MSGT_RESTART
Definition: frame_relay.c:69
llist_add_tail
static void llist_add_tail(struct llist_head *_new, struct llist_head *head)
parse_link_pvc_status
static int parse_link_pvc_status(struct osmo_fr_link *link, struct tlv_parsed *tp, size_t tp_len)
Definition: frame_relay.c:578
gprs_ns_rx_sns
int gprs_ns_rx_sns(struct gprs_ns_inst *nsi, struct msgb *msg, struct tlv_parsed *tp)
Definition: gprs_ns_sns.c:686
dlc_destroy
static void dlc_destroy(struct osmo_fr_dlc *dlc)
Definition: frame_relay.c:257
dlci_to_q922
static void dlci_to_q922(uint8_t *hdr, uint16_t dlci)
Definition: frame_relay.c:193
osmo_fr_dlc::status_cb
void(* status_cb)(struct osmo_fr_dlc *dlc, void *cb_data, bool active)
Definition: frame_relay.h:129
LAPF_UI
#define LAPF_UI
Definition: frame_relay.c:104
osmo_timer_del
void osmo_timer_del(struct osmo_timer_list *timer)
q931_msgtype
q931_msgtype
Definition: frame_relay.c:49
msgb_l3
#define msgb_l3(m)
gprs_sns_init
int gprs_sns_init(void)
Definition: gprs_ns_sns.c:736
Q933_PVC_STATUS_DLC_DELETE
@ Q933_PVC_STATUS_DLC_DELETE
Definition: frame_relay.c:98
q933_a_hdr
Definition: frame_relay.c:118
Q931_MSGT_SETUP_ACK
@ Q931_MSGT_SETUP_ACK
Definition: frame_relay.c:57
osmo_fr_dlc::active
bool active
Definition: frame_relay.h:116
msgb_data
uint8_t * msgb_data(const struct msgb *msg)
Q933_IEI_LINK_INT_VERIF
@ Q933_IEI_LINK_INT_VERIF
Definition: frame_relay.c:91
gprs_nsvc_start_test
void gprs_nsvc_start_test(struct gprs_nsvc *nsvc)
Start the ALIVE timer procedure in all NS-VCs part of this NS Instance.
Definition: gprs_ns.c:2231
msgb_l2
#define msgb_l2(m)
osmo_fr_network_alloc
struct osmo_fr_network * osmo_fr_network_alloc(void *ctx)
Definition: frame_relay.c:898
msgb::dst
void * dst
osmo_fr_rx
int osmo_fr_rx(struct msgb *msg)
Definition: frame_relay.c:769
osmo_fr_dlc::cb_data
void * cb_data
Definition: frame_relay.h:130
validate_pvc_status
static int validate_pvc_status(struct tlv_parsed *tp, size_t tp_len)
Definition: frame_relay.c:488
Q931_MSGT_PROGRESS
@ Q931_MSGT_PROGRESS
Definition: frame_relay.c:55
frame_relay.h
Q931_MSGT_CONGESTION_CONTROL
@ Q931_MSGT_CONGESTION_CONTROL
Definition: frame_relay.c:73
fr_link_dump_vty
static void fr_link_dump_vty(struct vty *vty, const struct osmo_fr_link *link)
Definition: frame_relay.c:1029
logging.h
gprs_ns_tx_sns_config_ack
int gprs_ns_tx_sns_config_ack(struct gprs_nsvc *nsvc, uint8_t *cause)
Encode + Transmit a SNS-CONFIG-ACK as per Section 9.3.5.
Definition: gprs_ns.c:961
list
struct llist_head list
check_link_state
static void check_link_state(struct osmo_fr_link *link, bool valid)
Definition: frame_relay.c:440
osmo_fr_dlc::rx_cb
int(* rx_cb)(void *cb_data, struct msgb *msg)
Definition: frame_relay.h:127
__attribute__
struct q933_a_hdr __attribute__((packed))
Q931_MSGT_NOTIFY
@ Q931_MSGT_NOTIFY
Definition: frame_relay.c:75
osmo_fr_dlc
Definition: frame_relay.h:108
Q931_MSGT_SEGMENT
@ Q931_MSGT_SEGMENT
Definition: frame_relay.c:72
q933_iei
q933_iei
Definition: frame_relay.c:89
osmo_fr_network_free
void osmo_fr_network_free(struct osmo_fr_network *net)
Definition: frame_relay.c:914
LOGL_DEBUG
#define LOGL_DEBUG
gprs_sns_bss_fsm_alloc
struct osmo_fsm_inst * gprs_sns_bss_fsm_alloc(void *ctx, struct gprs_nsvc *nsvc, const char *id)
Definition: gprs_ns_sns.c:630
tdef_vty.h
LOGL_ERROR
#define LOGL_ERROR
q933_a_hdr::msg_type
uint8_t msg_type
Definition: frame_relay.c:121
msgb_headroom
static int msgb_headroom(const struct msgb *msgb)
osmo_tdef_vty_out_all
void osmo_tdef_vty_out_all(struct vty *vty, struct osmo_tdef *tdefs, const char *prefix_fmt,...)
tlv_parsed
Q931_MSGT_RELEASE
@ Q931_MSGT_RELEASE
Definition: frame_relay.c:67
Q931_MSGT_DISCONNECT
@ Q931_MSGT_DISCONNECT
Definition: frame_relay.c:66
osmo_fr_dlc_free
void osmo_fr_dlc_free(struct osmo_fr_dlc *dlc)
Definition: frame_relay.c:992
vty_out
vty_out(vty, "!%s", VTY_NEWLINE)
Q933_PVC_STATUS_DLC_NEW
@ Q933_PVC_STATUS_DLC_NEW
Definition: frame_relay.c:99
Q931_MSGT_CALL_PROCEEDING
@ Q931_MSGT_CALL_PROCEEDING
Definition: frame_relay.c:52
q933_att_tlvdef
static const struct tlv_definition q933_att_tlvdef
Definition: frame_relay.c:177
osmo_fr_dlc::del
bool del
Definition: frame_relay.h:120
TLVP_VAL
#define TLVP_VAL(x, y)
prot_disc
uint8_t prot_disc
Definition: frame_relay.c:2