libosmogsm  1.0.1
Osmocom GSM library
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
gsm23003.c File Reference

Utility function implementations related to 3GPP TS 23.003. More...

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <osmocom/gsm/gsm23003.h>
#include <osmocom/gsm/protocol/gsm_23_003.h>
#include <osmocom/core/utils.h>

Functions

static bool is_n_digits (const char *str, int min_digits, int max_digits)
 
bool osmo_imsi_str_valid (const char *imsi)
 Determine whether the given IMSI is valid according to 3GPP TS 23.003. More...
 
bool osmo_msisdn_str_valid (const char *msisdn)
 Determine whether the given MSISDN is valid according to 3GPP TS 23.003. More...
 
bool osmo_imei_str_valid (const char *imei, bool with_15th_digit)
 Determine whether the given IMEI is valid according to 3GPP TS 23.003, Section 6.2.1. More...
 
const char * osmo_mcc_name (uint16_t mcc)
 Return MCC string as standardized 3-digit with leading zeros. More...
 
const char * osmo_mnc_name (uint16_t mnc, bool mnc_3_digits)
 Return MNC string as standardized 2- or 3-digit with leading zeros. More...
 
static void plmn_name (char *buf, size_t buflen, const struct osmo_plmn_id *plmn)
 
const char * osmo_plmn_name (const struct osmo_plmn_id *plmn)
 Return MCC-MNC string as standardized 3-digit-dash-2/3-digit with leading zeros. More...
 
const char * osmo_plmn_name2 (const struct osmo_plmn_id *plmn)
 Same as osmo_mcc_mnc_name(), but returning in a different static buffer. More...
 
const char * osmo_lai_name (const struct osmo_location_area_id *lai)
 Return MCC-MNC-LAC as string, in a static buffer. More...
 
static const char * _cgi_name (const struct osmo_cell_global_id *cgi, char *buf, size_t buflen)
 
const char * osmo_cgi_name (const struct osmo_cell_global_id *cgi)
 Return MCC-MNC-LAC-CI as string, in a static buffer. More...
 
const char * osmo_cgi_name2 (const struct osmo_cell_global_id *cgi)
 Same as osmo_cgi_name(), but uses a different static buffer. More...
 
static void to_bcd (uint8_t *bcd, uint16_t val)
 
const char * osmo_gummei_name (const struct osmo_gummei *gummei)
 
void osmo_plmn_to_bcd (uint8_t *bcd_dst, const struct osmo_plmn_id *plmn)
 
void osmo_plmn_from_bcd (const uint8_t *bcd_src, struct osmo_plmn_id *plmn)
 
int osmo_mnc_from_str (const char *mnc_str, uint16_t *mnc, bool *mnc_3_digits)
 
int osmo_mnc_cmp (uint16_t a_mnc, bool a_mnc_3_digits, uint16_t b_mnc, bool b_mnc_3_digits)
 
int osmo_plmn_cmp (const struct osmo_plmn_id *a, const struct osmo_plmn_id *b)
 
int osmo_gen_home_network_domain (char *out, const struct osmo_plmn_id *plmn)
 Generate TS 23.003 Section 19.2 Home Network Realm/Domain (text form) More...
 
int osmo_parse_home_network_domain (struct osmo_plmn_id *out, const char *in)
 Parse a TS 23.003 Section 19.2 Home Network Realm/Domain (text form) into a osmo_plmn_id. More...
 
int osmo_gen_mme_domain (char *out, const struct osmo_gummei *gummei)
 Generate TS 23.003 Section 19.4.2.4 MME Domain (text form) More...
 
int osmo_parse_mme_domain (struct osmo_gummei *out, const char *in)
 Parse a TS 23.003 Section 19.4.2.4 MME Domain (text form) into a osmo_gummei. More...
 
int osmo_gen_mme_group_domain (char *out, uint16_t mmegi, const struct osmo_plmn_id *plmn)
 Generate TS 23.003 Section 19.4.2.4 MME Group Domain (text form) More...
 

Detailed Description

Utility function implementations related to 3GPP TS 23.003.

Function Documentation

static const char* _cgi_name ( const struct osmo_cell_global_id cgi,
char *  buf,
size_t  buflen 
)
static
static bool is_n_digits ( const char *  str,
int  min_digits,
int  max_digits 
)
static
const char* osmo_cgi_name ( const struct osmo_cell_global_id cgi)

Return MCC-MNC-LAC-CI as string, in a static buffer.

Parameters
[in]cgiCGI to encode.
Returns
Static string buffer.

References _cgi_name().

Referenced by gsm0808_cell_id_u_name().

const char* osmo_cgi_name2 ( const struct osmo_cell_global_id cgi)

Same as osmo_cgi_name(), but uses a different static buffer.

Useful for printing two distinct CGIs in the same printf format.

Parameters
[in]cgiCGI to encode.
Returns
Static string buffer.

References _cgi_name().

int osmo_gen_home_network_domain ( char *  out,
const struct osmo_plmn_id plmn 
)

Generate TS 23.003 Section 19.2 Home Network Realm/Domain (text form)

Parameters
out[out]caller-provided output buffer, at least 33 bytes long
plmn[in]Osmocom representation of PLMN ID (MCC + MNC)
Returns
number of characters printed (excluding NUL); negative on error

References osmo_plmn_id::mcc, and osmo_plmn_id::mnc.

Referenced by osmo_gen_mme_domain(), and osmo_gen_mme_group_domain().

int osmo_gen_mme_domain ( char *  out,
const struct osmo_gummei gummei 
)

Generate TS 23.003 Section 19.4.2.4 MME Domain (text form)

Parameters
out[out]caller-provided output buffer, at least 56 bytes long
gummei[in]Structure representing the Globally Unique MME Identifier
Returns
number of characters printed (excluding NUL); negative on error

References osmo_mme_id::code, osmo_mme_id::group_id, GSM23003_HOME_NETWORK_DOMAIN_LEN, osmo_gummei::mme, osmo_gen_home_network_domain(), and osmo_gummei::plmn.

int osmo_gen_mme_group_domain ( char *  out,
uint16_t  mmegi,
const struct osmo_plmn_id plmn 
)

Generate TS 23.003 Section 19.4.2.4 MME Group Domain (text form)

Parameters
out[out]caller-provided output buffer, at least 56 bytes long
mmegi[in]MME Group Identifier
plmn[in]Osmocom representation of PLMN ID (MCC + MNC)
Returns
number of characters printed (excluding NUL); negative on error

References GSM23003_HOME_NETWORK_DOMAIN_LEN, and osmo_gen_home_network_domain().

const char* osmo_gummei_name ( const struct osmo_gummei gummei)
bool osmo_imei_str_valid ( const char *  imei,
bool  with_15th_digit 
)

Determine whether the given IMEI is valid according to 3GPP TS 23.003, Section 6.2.1.

It consists of 14 digits, the 15th check digit is not intended for digital transmission.

Parameters
imeiIMEI digits in ASCII string representation.
with_15th_digitwhen true, expect the 15th digit to be present and verify it.
Returns
true when the IMEI is valid, false for invalid characters or number of digits.

References is_n_digits(), and osmo_luhn().

bool osmo_imsi_str_valid ( const char *  imsi)

Determine whether the given IMSI is valid according to 3GPP TS 23.003.

Parameters
imsiIMSI digits in ASCII string representation.
Returns
true when the IMSI is valid, false for invalid characters or number of digits.

References GSM23003_IMSI_MAX_DIGITS, GSM23003_IMSI_MIN_DIGITS, and is_n_digits().

const char* osmo_lai_name ( const struct osmo_location_area_id lai)

Return MCC-MNC-LAC as string, in a static buffer.

Parameters
[in]laiLAI to encode, the rac member is ignored.
Returns
Static string buffer.

References osmo_location_area_id::lac, osmo_plmn_name(), and osmo_location_area_id::plmn.

Referenced by _cgi_name(), and gsm0808_cell_id_u_name().

const char* osmo_mcc_name ( uint16_t  mcc)

Return MCC string as standardized 3-digit with leading zeros.

Parameters
[in]mccMCC value.
Returns
string in static buffer.

Referenced by osmo_rai_name(), and plmn_name().

int osmo_mnc_cmp ( uint16_t  a_mnc,
bool  a_mnc_3_digits,
uint16_t  b_mnc,
bool  b_mnc_3_digits 
)

Referenced by osmo_plmn_cmp().

int osmo_mnc_from_str ( const char *  mnc_str,
uint16_t *  mnc,
bool *  mnc_3_digits 
)

Referenced by osmo_mcc_from_str().

const char* osmo_mnc_name ( uint16_t  mnc,
bool  mnc_3_digits 
)

Return MNC string as standardized 2- or 3-digit with leading zeros.

Parameters
[in]mncMNC value.
[in]mnc_3_digitsTrue if an MNC should fill three digits, only has an effect if MNC < 100.
Returns
string in static buffer.

Referenced by osmo_rai_name(), and plmn_name().

bool osmo_msisdn_str_valid ( const char *  msisdn)

Determine whether the given MSISDN is valid according to 3GPP TS 23.003.

Parameters
msisdnMSISDN digits in ASCII string representation.
Returns
true when the MSISDN is valid, false for invalid characters or number of digits.

References is_n_digits().

int osmo_parse_home_network_domain ( struct osmo_plmn_id out,
const char *  in 
)

Parse a TS 23.003 Section 19.2 Home Network Realm/Domain (text form) into a osmo_plmn_id.

Parameters
out[out]caller-allocated output structure
in[in]character string representation to be parsed
Returns
0 on success; negative on error

References osmo_plmn_id::mcc, and osmo_plmn_id::mnc.

int osmo_parse_mme_domain ( struct osmo_gummei out,
const char *  in 
)

Parse a TS 23.003 Section 19.4.2.4 MME Domain (text form) into a osmo_gummei.

Parameters
out[out]caller-allocated output GUMMEI structure
in[in]character string representation to be parsed
Returns
0 on success; negative on error

References osmo_mme_id::code, osmo_mme_id::group_id, osmo_plmn_id::mcc, osmo_gummei::mme, osmo_plmn_id::mnc, and osmo_gummei::plmn.

int osmo_plmn_cmp ( const struct osmo_plmn_id a,
const struct osmo_plmn_id b 
)
void osmo_plmn_from_bcd ( const uint8_t *  bcd_src,
struct osmo_plmn_id plmn 
)
const char* osmo_plmn_name ( const struct osmo_plmn_id plmn)

Return MCC-MNC string as standardized 3-digit-dash-2/3-digit with leading zeros.

Parameters
[in]plmnMCC-MNC value.
Returns
string in static buffer.

References plmn_name().

Referenced by osmo_gummei_name(), and osmo_lai_name().

const char* osmo_plmn_name2 ( const struct osmo_plmn_id plmn)

Same as osmo_mcc_mnc_name(), but returning in a different static buffer.

Parameters
[in]plmnMCC-MNC value.
Returns
string in static buffer.

References plmn_name().

void osmo_plmn_to_bcd ( uint8_t *  bcd_dst,
const struct osmo_plmn_id plmn 
)
static void plmn_name ( char *  buf,
size_t  buflen,
const struct osmo_plmn_id plmn 
)
inlinestatic
static void to_bcd ( uint8_t *  bcd,
uint16_t  val 
)
static

Referenced by osmo_plmn_to_bcd().