diff options
author | Sylvain Munaut <tnt@246tNt.com> | 2011-11-13 20:24:49 +0100 |
---|---|---|
committer | Sylvain Munaut <tnt@246tNt.com> | 2011-11-13 20:24:49 +0100 |
commit | 6d06f6b9db7a8c8a011d957796a3e22cd46457c7 (patch) | |
tree | 5094df77de0df433dd39482f7cb1ce0c3105429c /src/shared/libosmocore/include | |
parent | 4789b4a6627b452041b57f81ea91878de666bcc2 (diff) | |
parent | a71b8eaca7eed4dfc96f2cebabfc26430416c2e9 (diff) |
Merge commit 'a71b8eaca7eed4dfc96f2cebabfc26430416c2e9'
Diffstat (limited to 'src/shared/libosmocore/include')
11 files changed, 160 insertions, 13 deletions
diff --git a/src/shared/libosmocore/include/osmocom/core/linuxrbtree.h b/src/shared/libosmocore/include/osmocom/core/linuxrbtree.h index ee988918..44e00a16 100644 --- a/src/shared/libosmocore/include/osmocom/core/linuxrbtree.h +++ b/src/shared/libosmocore/include/osmocom/core/linuxrbtree.h @@ -139,10 +139,10 @@ extern void rb_insert_color(struct rb_node *, struct rb_root *); extern void rb_erase(struct rb_node *, struct rb_root *); /* Find logical next and previous nodes in a tree */ -extern struct rb_node *rb_next(struct rb_node *); -extern struct rb_node *rb_prev(struct rb_node *); -extern struct rb_node *rb_first(struct rb_root *); -extern struct rb_node *rb_last(struct rb_root *); +extern struct rb_node *rb_next(const struct rb_node *); +extern struct rb_node *rb_prev(const struct rb_node *); +extern struct rb_node *rb_first(const struct rb_root *); +extern struct rb_node *rb_last(const struct rb_root *); /* Fast replacement of a single node without remove/rebalance/add/rebalance */ extern void rb_replace_node(struct rb_node *victim, struct rb_node *new, diff --git a/src/shared/libosmocore/include/osmocom/core/logging.h b/src/shared/libosmocore/include/osmocom/core/logging.h index b207c1b4..043a8509 100644 --- a/src/shared/libosmocore/include/osmocom/core/logging.h +++ b/src/shared/libosmocore/include/osmocom/core/logging.h @@ -67,7 +67,8 @@ void logp(int subsys, char *file, int line, int cont, const char *format, ...) _ #define DLMUX -4 #define DLMI -5 #define DLMIB -6 -#define OSMO_NUM_DLIB 6 +#define DLSMS -7 +#define OSMO_NUM_DLIB 7 struct log_category { uint8_t loglevel; diff --git a/src/shared/libosmocore/include/osmocom/core/utils.h b/src/shared/libosmocore/include/osmocom/core/utils.h index 940c25f8..315757c9 100644 --- a/src/shared/libosmocore/include/osmocom/core/utils.h +++ b/src/shared/libosmocore/include/osmocom/core/utils.h @@ -34,7 +34,7 @@ int osmo_hexparse(const char *str, uint8_t *b, int max_len); char *osmo_ubit_dump(const uint8_t *bits, unsigned int len); char *osmo_hexdump(const unsigned char *buf, int len); -char *osmo_osmo_hexdump_nospc(const unsigned char *buf, int len); +char *osmo_hexdump_nospc(const unsigned char *buf, int len); #define osmo_static_assert(exp, name) typedef int dummy##name [(exp) ? 1 : -1]; diff --git a/src/shared/libosmocore/include/osmocom/gsm/Makefile.am b/src/shared/libosmocore/include/osmocom/gsm/Makefile.am index 5971d0c5..fc1abfe8 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/Makefile.am +++ b/src/shared/libosmocore/include/osmocom/gsm/Makefile.am @@ -1,6 +1,7 @@ osmogsm_HEADERS = a5.h comp128.h gsm0808.h gsm48_ie.h mncc.h rxlev_stat.h \ gsm0480.h gsm48.h gsm_utils.h rsl.h tlv.h abis_nm.h \ - sysinfo.h prim.h gsm0502.h lapd_core.h lapdm.h + sysinfo.h prim.h gsm0502.h lapd_core.h lapdm.h \ + gsm0411_utils.h gsm0411_smc.h gsm0411_smr.h SUBDIRS = protocol diff --git a/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smc.h b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smc.h new file mode 100644 index 00000000..e1508a2d --- /dev/null +++ b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smc.h @@ -0,0 +1,62 @@ +#ifndef _GSM0411_SMC_H +#define _GSM0411_SMC_H + +#include <osmocom/gsm/protocol/gsm_04_11.h> + +#define GSM411_MMSMS_EST_REQ 0x310 +#define GSM411_MMSMS_EST_IND 0x312 +#define GSM411_MMSMS_EST_CNF 0x311 +#define GSM411_MMSMS_REL_REQ 0x320 +#define GSM411_MMSMS_REL_IND 0x322 +#define GSM411_MMSMS_DATA_REQ 0x330 +#define GSM411_MMSMS_DATA_IND 0x332 +#define GSM411_MMSMS_UNIT_DATA_REQ 0x340 +#define GSM411_MMSMS_UNIT_DATA_IND 0x342 +#define GSM411_MMSMS_ERR_IND 0x372 + +#define GSM411_MNSMS_ABORT_REQ 0x101 +#define GSM411_MNSMS_DATA_REQ 0x102 +#define GSM411_MNSMS_DATA_IND 0x103 +#define GSM411_MNSMS_EST_REQ 0x104 +#define GSM411_MNSMS_EST_IND 0x105 +#define GSM411_MNSMS_ERROR_IND 0x106 +#define GSM411_MNSMS_REL_REQ 0x107 + +struct gsm411_smc_inst { + int network; /* is this a MO (0) or MT (1) transfer */ + int (*mn_recv) (struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg); + int (*mm_send) (struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg, int cp_msg_type); + + enum gsm411_cp_state cp_state; + struct osmo_timer_list cp_timer; + struct msgb *cp_msg; /* store pending message */ + int cp_rel; /* store pending release */ + int cp_retx; /* retry counter */ + int cp_max_retr; /* maximum retry */ + int cp_tc1; /* timer value TC1* */ + +}; + +extern const struct value_string gsm411_cp_cause_strs[]; + +/* init a new instance */ +void gsm411_smc_init(struct gsm411_smc_inst *inst, int network, + int (*mn_recv) (struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg), + int (*mm_send) (struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg, int cp_msg_type)); + +/* clear instance */ +void gsm411_smc_clear(struct gsm411_smc_inst *inst); + +/* message from upper layer */ +int gsm411_smc_send(struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg); + +/* message from lower layer */ +int gsm411_smc_recv(struct gsm411_smc_inst *inst, int msg_type, + struct msgb *msg, int cp_msg_type); + +#endif /* _GSM0411_SMC_H */ diff --git a/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smr.h b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smr.h new file mode 100644 index 00000000..5ea8584d --- /dev/null +++ b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_smr.h @@ -0,0 +1,45 @@ +#ifndef _GSM0411_SMR_H +#define _GSM0411_SMR_H + +#include <osmocom/gsm/protocol/gsm_04_11.h> + +#define GSM411_SM_RL_DATA_REQ 0x401 +#define GSM411_SM_RL_DATA_IND 0x402 +#define GSM411_SM_RL_MEM_AVAIL_REQ 0x403 +#define GSM411_SM_RL_MEM_AVAIL_IND 0x404 +#define GSM411_SM_RL_REPORT_REQ 0x405 +#define GSM411_SM_RL_REPORT_IND 0x406 + +struct gsm411_smr_inst { + int network; /* is this a MO (0) or MT (1) transfer */ + int (*rl_recv) (struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg); + int (*mn_send) (struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg); + + enum gsm411_rp_state rp_state; + struct osmo_timer_list rp_timer; +}; + +extern const struct value_string gsm411_rp_cause_strs[]; + +/* init a new instance */ +void gsm411_smr_init(struct gsm411_smr_inst *inst, int network, + int (*rl_recv) (struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg), + int (*mn_send) (struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg)); + +/* clear instance */ +void gsm411_smr_clear(struct gsm411_smr_inst *inst); + +/* message from upper layer */ +int gsm411_smr_send(struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg); + +/* message from lower layer */ +int gsm411_smr_recv(struct gsm411_smr_inst *inst, int msg_type, + struct msgb *msg); + +#endif /* _GSM0411_SMR_H */ + diff --git a/src/shared/libosmocore/include/osmocom/gsm/gsm0411_utils.h b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_utils.h new file mode 100644 index 00000000..a030f581 --- /dev/null +++ b/src/shared/libosmocore/include/osmocom/gsm/gsm0411_utils.h @@ -0,0 +1,30 @@ +#ifndef _GSM0411_UTILS_H +#define _GSM0411_UTILS_H + +struct msgb *gsm411_msgb_alloc(void); + +/* Generate 03.40 TP-SCTS */ +void gsm340_gen_scts(uint8_t *scts, time_t time); + +/* Decode 03.40 TP-SCTS (into utc/gmt timestamp) */ +time_t gsm340_scts(uint8_t *scts); + +/* decode validity period. return minutes */ +unsigned long gsm340_validity_period(uint8_t sms_vpf, uint8_t *sms_vp); + +/* determine coding alphabet dependent on GSM 03.38 Section 4 DCS */ +enum sms_alphabet gsm338_get_sms_alphabet(uint8_t dcs); + +/* generate a TPDU address field compliant with 03.40 sec. 9.1.2.5 */ +int gsm340_gen_oa(uint8_t *oa, unsigned int oa_len, uint8_t type, + uint8_t plan, const char *number); + +/* Prefix msg with a RP header */ +int gsm411_push_rp_header(struct msgb *msg, uint8_t rp_msg_type, + uint8_t rp_msg_ref); + +/* Prefix msg with a 04.08/04.11 CP header */ +int gsm411_push_cp_header(struct msgb *msg, uint8_t proto, uint8_t trans, + uint8_t msg_type); + +#endif /* _GSM0411_UTILS_H */ diff --git a/src/shared/libosmocore/include/osmocom/gsm/lapdm.h b/src/shared/libosmocore/include/osmocom/gsm/lapdm.h index cc9c63fe..52e8fc52 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/lapdm.h +++ b/src/shared/libosmocore/include/osmocom/gsm/lapdm.h @@ -72,8 +72,8 @@ struct lapdm_msg_ctx { int lapdm_fmt; uint8_t chan_nr; uint8_t link_id; - uint8_t ta_ind; - uint8_t tx_power_ind; + uint8_t ta_ind; /* TA indicated by network */ + uint8_t tx_power_ind; /* MS power indicated by network */ }; /*! \brief LAPDm datalink like TS 04.06 / Section 3.5.2 */ @@ -113,6 +113,9 @@ struct lapdm_entity { /*! \brief pointer to \ref lapdm_channel of which we're part */ struct lapdm_channel *lapdm_ch; + + uint8_t ta; /* TA used and indicated to network */ + uint8_t tx_power; /* MS power used and indicated to network */ }; /*! \brief the two lapdm_entities that form a GSM logical channel (ACCH + DCCH) */ @@ -127,7 +130,7 @@ const char *get_rsl_name(int value); extern const char *lapdm_state_names[]; /* initialize a LAPDm entity */ -void lapdm_entity_init(struct lapdm_entity *le, enum lapdm_mode mode); +void lapdm_entity_init(struct lapdm_entity *le, enum lapdm_mode mode, int t200); void lapdm_channel_init(struct lapdm_channel *lc, enum lapdm_mode mode); /* deinitialize a LAPDm entity */ diff --git a/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_11.h b/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_11.h index c6a2b193..f37152fe 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_11.h +++ b/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_11.h @@ -5,7 +5,7 @@ /* GSM TS 04.11 definitions */ -/* Chapter 5.2.3: SMC-CS states at the network side */ +/* Chapter 5.2.3: SMC-CS states at the user/network side */ enum gsm411_cp_state { GSM411_CPS_IDLE = 0, GSM411_CPS_MM_CONN_PENDING = 1, /* only MT ! */ @@ -13,11 +13,12 @@ enum gsm411_cp_state { GSM411_CPS_MM_ESTABLISHED = 3, }; -/* Chapter 6.2.2: SMR states at the network side */ +/* Chapter 6.2.2: SMR states at the user/network side */ enum gsm411_rp_state { GSM411_RPS_IDLE = 0, GSM411_RPS_WAIT_FOR_RP_ACK = 1, GSM411_RPS_WAIT_TO_TX_RP_ACK = 3, + GSM411_RPS_WAIT_FOR_RETRANS_T = 4, }; /* Chapter 8.1.2 (refers to GSM 04.07 Chapter 11.2.3.1.1 */ @@ -95,7 +96,8 @@ enum gsm411_rp_cause { #define GSM411_TMR_TRAM 30, 0 /* 25 < x < 35 seconds */ #define GSM411_TMR_TR2M 15, 0 /* 12 < x < 20 seconds */ -#define GSM411_TMR_TC1A 30, 0 +#define GSM411_TMR_TC1A 30, 0 /* TR1M - 10 */ +#define GSM411_TMR_TC1A_SEC 30 /* TR1M - 10 */ /* Chapter 8.2.1 */ struct gsm411_rp_hdr { diff --git a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h index 9a7c9e52..2de4f192 100644 --- a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h +++ b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h @@ -48,6 +48,8 @@ struct telnet_connection { int telnet_init(void *tall_ctx, void *priv, int port); +void telnet_exit(void); + /*! }@ */ #endif /* TELNET_INTERFACE_H */ diff --git a/src/shared/libosmocore/include/osmocom/vty/vty.h b/src/shared/libosmocore/include/osmocom/vty/vty.h index ffe3c591..83506c5e 100644 --- a/src/shared/libosmocore/include/osmocom/vty/vty.h +++ b/src/shared/libosmocore/include/osmocom/vty/vty.h @@ -176,6 +176,7 @@ int vty_shell_serv (struct vty *); void vty_hello (struct vty *); void *vty_current_index(struct vty *); int vty_current_node(struct vty *vty); +enum node_type vty_go_parent(struct vty *vty); extern void *tall_vty_ctx; |