diff options
author | Luca Melette <luca@srlabs.de> | 2012-05-03 02:21:08 +0200 |
---|---|---|
committer | Luca Melette <luca@srlabs.de> | 2012-05-03 02:21:08 +0200 |
commit | 1e9d9f4c080e283298a2dce2e48019428914fa10 (patch) | |
tree | c793b796b4f795277a5311916c5af1037fe8120a /src/shared/libosmocore/include/osmocom | |
parent | 1fc5ab1d396b91e7983e8529208aa1cd21d9629c (diff) | |
parent | 186fefcc76294e69c367b2eb8796bb824927248d (diff) |
Merge branch 'master' into luca/gsmmap
Introduced code for DSP auto-reset in error conditions
Disabled by default US bands (not working yet)
Diffstat (limited to 'src/shared/libosmocore/include/osmocom')
10 files changed, 76 insertions, 21 deletions
diff --git a/src/shared/libosmocore/include/osmocom/core/gsmtap.h b/src/shared/libosmocore/include/osmocom/core/gsmtap.h index dbc3d314..a4e5d420 100644 --- a/src/shared/libosmocore/include/osmocom/core/gsmtap.h +++ b/src/shared/libosmocore/include/osmocom/core/gsmtap.h @@ -77,11 +77,19 @@ #define GSMTAP_CHANNEL_SDCCH8 0x08 #define GSMTAP_CHANNEL_TCH_F 0x09 #define GSMTAP_CHANNEL_TCH_H 0x0a -#define GSMTAP_CHANNEL_CBCH51 0x0b +#define GSMTAP_CHANNEL_PACCH 0x0b #define GSMTAP_CHANNEL_CBCH52 0x0c #define GSMTAP_CHANNEL_PDCH 0x0d #define GSMTAP_CHANNEL_PTCCH 0x0e -#define GSMTAP_CHANNEL_PACCH 0x0f +#define GSMTAP_CHANNEL_CBCH51 0x0f + +/* GPRS Coding Scheme CS1..4 */ +#define GSMTAP_GPRS_CS_BASE 0x20 +#define GSMTAP_GPRS_CS(N) (GSMTAP_GPRS_CS_BASE + N) +/* (E) GPRS Coding Scheme MCS0..9 */ +#define GSMTAP_GPRS_MCS_BASE 0x30 +#define GSMTAP_GPRS_MCS(N) (GSMTAP_GPRS_MCS_BASE + N) + #define GSMTAP_CHANNEL_ACCH 0x80 /* ====== DO NOT MAKE UNAPPROVED MODIFICATIONS HERE ===== */ diff --git a/src/shared/libosmocore/include/osmocom/core/msgb.h b/src/shared/libosmocore/include/osmocom/core/msgb.h index 9f46e6c6..e465ec2b 100644 --- a/src/shared/libosmocore/include/osmocom/core/msgb.h +++ b/src/shared/libosmocore/include/osmocom/core/msgb.h @@ -312,6 +312,32 @@ static inline void msgb_reserve(struct msgb *msg, int len) msg->tail += len; } +/*! \brief Trim the msgb to a given absolute length + * \param[in] msg message buffer + * \param[in] len new total length of buffer + * \returns 0 in case of success, negative in case of error + */ +static inline int msgb_trim(struct msgb *msg, int len) +{ + if (len > msg->data_len) + return -1; + + msg->len = len; + msg->tail = msg->data + len; + + return 0; +} + +/*! \brief Trim the msgb to a given layer3 length + * \pram[in] msg message buffer + * \param[in] l3len new layer3 length + * \returns 0 in case of success, negative in case of error + */ +static inline int msgb_l3trim(struct msgb *msg, int l3len) +{ + return msgb_trim(msg, (msg->l3h - msg->data) + l3len); +} + /*! \brief Allocate message buffer with specified headroom * \param[in] size size in bytes, including headroom * \param[in] headroom headroom in bytes diff --git a/src/shared/libosmocore/include/osmocom/core/socket.h b/src/shared/libosmocore/include/osmocom/core/socket.h index c5288dfc..88214632 100644 --- a/src/shared/libosmocore/include/osmocom/core/socket.h +++ b/src/shared/libosmocore/include/osmocom/core/socket.h @@ -12,6 +12,7 @@ #include <stdint.h> struct sockaddr; +struct osmo_fd; /* flags for osmo_sock_init. */ #define OSMO_SOCK_F_CONNECT (1 << 0) diff --git a/src/shared/libosmocore/include/osmocom/crypt/auth.h b/src/shared/libosmocore/include/osmocom/crypt/auth.h index 30e16e82..67b32009 100644 --- a/src/shared/libosmocore/include/osmocom/crypt/auth.h +++ b/src/shared/libosmocore/include/osmocom/crypt/auth.h @@ -33,6 +33,7 @@ struct osmo_sub_auth_data { uint8_t k[16]; uint8_t amf[2]; uint64_t sqn; + int opc_is_op; } umts; struct { uint8_t ki[16]; diff --git a/src/shared/libosmocore/include/osmocom/gsm/gsm0808.h b/src/shared/libosmocore/include/osmocom/gsm/gsm0808.h index 38d88ef9..5380dd9e 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/gsm0808.h +++ b/src/shared/libosmocore/include/osmocom/gsm/gsm0808.h @@ -30,7 +30,8 @@ struct msgb *gsm0808_create_clear_command(uint8_t reason); struct msgb *gsm0808_create_clear_complete(void); struct msgb *gsm0808_create_cipher_complete(struct msgb *layer3, uint8_t alg_id); struct msgb *gsm0808_create_cipher_reject(uint8_t cause); -struct msgb *gsm0808_create_classmark_update(const uint8_t *classmark, uint8_t length); +struct msgb *gsm0808_create_classmark_update(const uint8_t *cm2, uint8_t cm2_len, + const uint8_t *cm3, uint8_t cm3_len); struct msgb *gsm0808_create_sapi_reject(uint8_t link_id); struct msgb *gsm0808_create_assignment_completed(uint8_t rr_cause, uint8_t chosen_channel, uint8_t encr_alg_id, diff --git a/src/shared/libosmocore/include/osmocom/gsm/gsm48_ie.h b/src/shared/libosmocore/include/osmocom/gsm/gsm48_ie.h index f4fce25c..2e576429 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/gsm48_ie.h +++ b/src/shared/libosmocore/include/osmocom/gsm/gsm48_ie.h @@ -108,7 +108,7 @@ int gsm48_encode_more(struct msgb *msg); struct gsm_sysinfo_freq { /* if the frequency included in the sysinfo */ uint8_t mask; -}; +} __attribute__ ((packed)); /* decode "Cell Channel Description" (10.5.2.1b) and other frequency lists */ int gsm48_decode_freq_list(struct gsm_sysinfo_freq *f, uint8_t *cd, diff --git a/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_08.h b/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_08.h index ce780926..eecc27ce 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_08.h +++ b/src/shared/libosmocore/include/osmocom/gsm/protocol/gsm_04_08.h @@ -213,15 +213,15 @@ struct gsm48_chan_desc { tsc:3; uint8_t hsn:6, maio_low:2; - } h1; + } __attribute__ ((packed)) h1; struct { uint8_t arfcn_high:2, spare:2, h:1, tsc:3; uint8_t arfcn_low; - } h0; - }; + } __attribute__ ((packed)) h0; + } __attribute__ ((packed)); } __attribute__ ((packed)); /* Chapter 10.5.2.20 */ diff --git a/src/shared/libosmocore/include/osmocom/gsm/tlv.h b/src/shared/libosmocore/include/osmocom/gsm/tlv.h index 7b41d2d7..d2936d6d 100644 --- a/src/shared/libosmocore/include/osmocom/gsm/tlv.h +++ b/src/shared/libosmocore/include/osmocom/gsm/tlv.h @@ -178,28 +178,32 @@ static inline uint8_t *tv16_put(uint8_t *buf, uint8_t tag, return buf; } -/*! \brief put (append) a LV field to a \ref msgb */ +/*! \brief put (append) a LV field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_lv_put(struct msgb *msg, uint8_t len, const uint8_t *val) { uint8_t *buf = msgb_put(msg, LV_GROSS_LEN(len)); return lv_put(buf, len, val); } -/*! \brief put (append) a TLV field to a \ref msgb */ +/*! \brief put (append) a TLV field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_tlv_put(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val) { uint8_t *buf = msgb_put(msg, TLV_GROSS_LEN(len)); return tlv_put(buf, tag, len, val); } -/*! \brief put (append) a TV field to a \ref msgb */ +/*! \brief put (append) a TV field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_tv_put(struct msgb *msg, uint8_t tag, uint8_t val) { uint8_t *buf = msgb_put(msg, 2); return tv_put(buf, tag, val); } -/*! \brief put (append) a TVfixed field to a \ref msgb */ +/*! \brief put (append) a TVfixed field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_tv_fixed_put(struct msgb *msg, uint8_t tag, unsigned int len, const uint8_t *val) { @@ -207,47 +211,57 @@ static inline uint8_t *msgb_tv_fixed_put(struct msgb *msg, uint8_t tag, return tv_fixed_put(buf, tag, len, val); } -/*! \brief put (append) a V field to a \ref msgb */ +/*! \brief put (append) a V field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_v_put(struct msgb *msg, uint8_t val) { uint8_t *buf = msgb_put(msg, 1); return v_put(buf, val); } -/*! \brief put (append) a TV16 field to a \ref msgb */ +/*! \brief put (append) a TV16 field to a \ref msgb + * \returns pointer to first byte after newly-put information */ static inline uint8_t *msgb_tv16_put(struct msgb *msg, uint8_t tag, uint16_t val) { uint8_t *buf = msgb_put(msg, 3); return tv16_put(buf, tag, val); } -/*! \brief push (prepend) a TLV field to a \ref msgb */ +/*! \brief push (prepend) a TLV field to a \ref msgb + * \returns pointer to first byte of newly-pushed information */ static inline uint8_t *msgb_tlv_push(struct msgb *msg, uint8_t tag, uint8_t len, const uint8_t *val) { uint8_t *buf = msgb_push(msg, TLV_GROSS_LEN(len)); - return tlv_put(buf, tag, len, val); + tlv_put(buf, tag, len, val); + return buf; } -/*! \brief push (prepend) a TV field to a \ref msgb */ +/*! \brief push (prepend) a TV field to a \ref msgb + * \returns pointer to first byte of newly-pushed information */ static inline uint8_t *msgb_tv_push(struct msgb *msg, uint8_t tag, uint8_t val) { uint8_t *buf = msgb_push(msg, 2); - return tv_put(buf, tag, val); + tv_put(buf, tag, val); + return buf; } -/*! \brief push (prepend) a TV16 field to a \ref msgb */ +/*! \brief push (prepend) a TV16 field to a \ref msgb + * \returns pointer to first byte of newly-pushed information */ static inline uint8_t *msgb_tv16_push(struct msgb *msg, uint8_t tag, uint16_t val) { uint8_t *buf = msgb_push(msg, 3); - return tv16_put(buf, tag, val); + tv16_put(buf, tag, val); + return buf; } -/*! \brief push (prepend) a TvLV field to a \ref msgb */ +/*! \brief push (prepend) a TvLV field to a \ref msgb + * \returns pointer to first byte of newly-pushed information */ static inline uint8_t *msgb_tvlv_push(struct msgb *msg, uint8_t tag, uint16_t len, const uint8_t *val) { uint8_t *buf = msgb_push(msg, TVLV_GROSS_LEN(len)); - return tvlv_put(buf, tag, len, val); + tvlv_put(buf, tag, len, val); + return buf; } /* TLV parsing */ diff --git a/src/shared/libosmocore/include/osmocom/vty/misc.h b/src/shared/libosmocore/include/osmocom/vty/misc.h index 707f82fa..89234733 100644 --- a/src/shared/libosmocore/include/osmocom/vty/misc.h +++ b/src/shared/libosmocore/include/osmocom/vty/misc.h @@ -7,4 +7,7 @@ void vty_out_rate_ctr_group(struct vty *vty, const char *prefix, struct rate_ctr_group *ctrg); +int osmo_vty_write_config_file(const char *filename); +int osmo_vty_save_config_file(void); + #endif diff --git a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h index 2de4f192..65a1dd90 100644 --- a/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h +++ b/src/shared/libosmocore/include/osmocom/vty/telnet_interface.h @@ -47,6 +47,7 @@ struct telnet_connection { }; int telnet_init(void *tall_ctx, void *priv, int port); +int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port); void telnet_exit(void); |