libosmogsm  0.9.6.315-40e62
Osmocom GSM library
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
gsm0808_utils.c File Reference
#include "config.h"
#include <osmocom/core/utils.h>
#include <osmocom/core/msgb.h>
#include <osmocom/core/byteswap.h>
#include <string.h>
#include <errno.h>
#include <osmocom/gsm/protocol/gsm_08_08.h>

Macros

#define IP_V4_ADDR_LEN   4
 
#define IP_V6_ADDR_LEN   16
 
#define IP_PORT_LEN   2
 
#define CHANNEL_TYPE_ELEMENT_MAXLEN   11
 
#define CHANNEL_TYPE_ELEMENT_MINLEN   3
 
#define ENCRYPT_INFO_ELEMENT_MINLEN   1
 

Functions

static uint8_t enc_speech_codec (struct msgb *msg, const struct gsm0808_speech_codec *sc)
 
uint8_t gsm0808_enc_speech_codec (struct msgb *msg, const struct gsm0808_speech_codec *sc)
 Encode TS 08.08 Speech Codec IE. More...
 
int gsm0808_dec_speech_codec (struct gsm0808_speech_codec *sc, const uint8_t *elem, uint8_t len)
 Decode TS 08.08 Speech Codec IE. More...
 
uint8_t gsm0808_enc_speech_codec_list (struct msgb *msg, const struct gsm0808_speech_codec_list *scl)
 Encode TS 08.08 Speech Codec list. More...
 
int gsm0808_dec_speech_codec_list (struct gsm0808_speech_codec_list *scl, const uint8_t *elem, uint8_t len)
 Decode TS 08.08 Speech Codec list IE. More...
 
uint8_t gsm0808_enc_channel_type (struct msgb *msg, const struct gsm0808_channel_type *ct)
 Encode TS 08.08 Channel Type IE. More...
 
int gsm0808_dec_channel_type (struct gsm0808_channel_type *ct, const uint8_t *elem, uint8_t len)
 Decode TS 08.08 Channel Type IE. More...
 
uint8_t gsm0808_enc_encrypt_info (struct msgb *msg, const struct gsm0808_encrypt_info *ei)
 Encode TS 08.08 Encryption Information IE. More...
 
int gsm0808_dec_encrypt_info (struct gsm0808_encrypt_info *ei, const uint8_t *elem, uint8_t len)
 Decode TS 08.08 Encryption Information IE. More...
 
uint8_t gsm0808_enc_cell_id_list (struct msgb *msg, const struct gsm0808_cell_id_list *cil)
 Encode TS 08.08 Cell Identifier List IE. More...
 
int gsm0808_dec_cell_id_list (struct gsm0808_cell_id_list *cil, const uint8_t *elem, uint8_t len)
 Decode Cell Identifier List IE. More...
 
int gsm0808_chan_type_to_speech_codec (uint8_t perm_spch)
 Convert the representation of the permitted speech codec identifier that is used in struct gsm0808_channel_type to the speech codec representation we use in struct gsm0808_speech_codec. More...
 
int gsm0808_speech_codec_from_chan_type (struct gsm0808_speech_codec *sc, uint8_t perm_spch)
 Extrapolate a speech codec field from a given permitted speech parameter (channel type). More...
 

Macro Definition Documentation

#define CHANNEL_TYPE_ELEMENT_MAXLEN   11
#define CHANNEL_TYPE_ELEMENT_MINLEN   3
#define ENCRYPT_INFO_ELEMENT_MINLEN   1
#define IP_PORT_LEN   2
#define IP_V4_ADDR_LEN   4
#define IP_V6_ADDR_LEN   16

Function Documentation

static uint8_t enc_speech_codec ( struct msgb *  msg,
const struct gsm0808_speech_codec *  sc 
)
static
int gsm0808_chan_type_to_speech_codec ( uint8_t  perm_spch)

Convert the representation of the permitted speech codec identifier that is used in struct gsm0808_channel_type to the speech codec representation we use in struct gsm0808_speech_codec.

Parameters
[in]perm_spchto be converted (see also gsm0808_permitted_speech)
Returns
GSM speech codec type; negative on error

The speech codec type, which is used in the channel type field to signal the permitted speech versions (codecs) has a different encoding than the type field in the speech codec type element (See also 3GPP TS 48.008, 3.2.2.11 and 3.2.2.103)

Referenced by gsm0808_speech_codec_from_chan_type().

int gsm0808_dec_cell_id_list ( struct gsm0808_cell_id_list *  cil,
const uint8_t *  elem,
uint8_t  len 
)

Decode Cell Identifier List IE.

Parameters
[out]cilCaller-provided memory to store Cell ID list
[in]elemIE value to be decoded
[in]lenLength of elem in bytes
Returns
number of bytes parsed; negative on error
int gsm0808_dec_channel_type ( struct gsm0808_channel_type *  ct,
const uint8_t *  elem,
uint8_t  len 
)

Decode TS 08.08 Channel Type IE.

Parameters
[out]ctCaller-provided memory to store channel type
[in]elemIE Value to be decoded
[in]lenLength of elem in bytes
Returns
number of bytes parsed; negative on error

See also 3GPP TS 48.008 3.2.2.11 Channel Type

int gsm0808_dec_encrypt_info ( struct gsm0808_encrypt_info *  ei,
const uint8_t *  elem,
uint8_t  len 
)

Decode TS 08.08 Encryption Information IE.

Parameters
[out]eiCaller-provided memory to store encryption information
[in]elemIE value to be decoded
[in]lenLength of elem in bytes
Returns
number of bytes parsed; negative on error
int gsm0808_dec_speech_codec ( struct gsm0808_speech_codec *  sc,
const uint8_t *  elem,
uint8_t  len 
)

Decode TS 08.08 Speech Codec IE.

Parameters
[out]scCaller-allocated memory for Speech Codec
[in]elemIE value to be decoded
[in]lenLength of elem in bytes
Returns
number of bytes parsed; negative on error

Referenced by gsm0808_dec_speech_codec_list().

int gsm0808_dec_speech_codec_list ( struct gsm0808_speech_codec_list *  scl,
const uint8_t *  elem,
uint8_t  len 
)

Decode TS 08.08 Speech Codec list IE.

Parameters
[out]sclCaller-provided memory to store codec list
[in]elemIE value to be decoded
[in]lenLength of elem in bytes
Returns
number of bytes parsed; negative on error

See also 3GPP TS 48.008 3.2.2.103 Speech Codec List

References gsm0808_dec_speech_codec().

uint8_t gsm0808_enc_cell_id_list ( struct msgb *  msg,
const struct gsm0808_cell_id_list *  cil 
)

Encode TS 08.08 Cell Identifier List IE.

Parameters
[out]msgMessage Buffer to which IE is to be appended
[in]cilCell ID List to be encoded
Returns
number of bytes appended to msg

Referenced by gsm0808_create_paging().

uint8_t gsm0808_enc_channel_type ( struct msgb *  msg,
const struct gsm0808_channel_type *  ct 
)

Encode TS 08.08 Channel Type IE.

Parameters
[out]msgMessage Buffer to which IE is to be appended
[in]ctChannel Type to be encoded
Returns
number of bytes added to msg

See also 3GPP TS 48.008 3.2.2.11 Channel Type

References CHANNEL_TYPE_ELEMENT_MAXLEN.

Referenced by gsm0808_create_ass().

uint8_t gsm0808_enc_encrypt_info ( struct msgb *  msg,
const struct gsm0808_encrypt_info *  ei 
)

Encode TS 08.08 Encryption Information IE.

Parameters
[out]msgMessage Buffer to which IE is to be appended
[in]eiEncryption Information to be encoded
Returns
number of bytes appended to msg

Referenced by gsm0808_create_cipher().

uint8_t gsm0808_enc_speech_codec ( struct msgb *  msg,
const struct gsm0808_speech_codec *  sc 
)

Encode TS 08.08 Speech Codec IE.

Parameters
[out]msgMessage Buffer to which IE will be appended
[in]scSpeech Codec to be encoded into IE
Returns
number of bytes appended to msg

See also 3GPP TS 48.008 3.2.2.103 Speech Codec List

References enc_speech_codec().

Referenced by gsm0808_create_ass_compl().

uint8_t gsm0808_enc_speech_codec_list ( struct msgb *  msg,
const struct gsm0808_speech_codec_list *  scl 
)

Encode TS 08.08 Speech Codec list.

Parameters
[out]msgMessage Buffer to which IE is to be appended
[in]sclSpeech Codec List to be encoded into IE
Returns
number of bytes added to msg

See also 3GPP TS 48.008 3.2.2.103 Speech Codec List

References enc_speech_codec().

Referenced by gsm0808_create_ass(), gsm0808_create_ass_compl(), gsm0808_create_ass_fail(), and gsm0808_create_layer3_aoip().

int gsm0808_speech_codec_from_chan_type ( struct gsm0808_speech_codec *  sc,
uint8_t  perm_spch 
)

Extrapolate a speech codec field from a given permitted speech parameter (channel type).

Parameters
[out]scCaller provided memory to store the resulting speech codec
[in]perm_spchvalue that is used to derive the speech codec info (see also: enum gsm0808_speech_codec_type in gsm0808_utils.h)
Returns
zero when successful; negative on error

References gsm0808_chan_type_to_speech_codec().