libosmogsm 1.11.0.26-c59d.202505152026
Osmocom GSM library
|
The Generic Subscriber Update Protocol (GSUP) is an Osmocom-specific non-standard protocol replacing MAP as the protocol between MSC/VLR/SGSN and HLR in a 3GPP cellular communications network. More...
Files | |
file | gsup.h |
Osmocom Generic Subscriber Update Protocol message encoder/decoder. | |
file | gsup_sms.h |
SMS (Short Message Service) extensions for Osmocom GSUP. | |
file | gsup.c |
Osmocom Generic Subscriber Update Protocol. | |
file | gsup_sms.c |
SMS (Short Message Service) extensions for Osmocom GSUP. | |
Data Structures | |
struct | osmo_gsup_pdp_info |
parsed/decoded PDP context information More... | |
struct | osmo_gsup_an_apdu |
AccessNetworkSignalInfo as in 3GPP TS 29.002. More... | |
struct | osmo_gsup_message |
parsed/decoded GSUP protocol message More... | |
Macros | |
#define | OSMO_GSUP_PORT 4222 |
#define | OSMO_GSUP_MAX_NUM_PDP_INFO 10 /* GSM 09.02 limits this to 50 */ |
Maximum nubmer of PDP inside osmo_gsup_message. | |
#define | OSMO_GSUP_MAX_NUM_AUTH_INFO 5 |
Maximum number of auth info inside osmo_gsup_message. | |
#define | OSMO_GSUP_MAX_MSISDN_LEN 9 |
Maximum number of octets encoding MSISDN in BCD format. | |
#define | OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN 43 /* TS 24.008 10.5.4.7 */ |
#define | OSMO_GSUP_MAX_PCO_LEN 251 |
#define | OSMO_GSUP_MSGT_E_ROUTING_ERROR OSMO_GSUP_MSGT_ROUTING_ERROR |
#define | OSMO_GSUP_IS_MSGT_REQUEST(msgt) (((msgt) & 0b00000011) == 0b00) |
#define | OSMO_GSUP_IS_MSGT_ERROR(msgt) (((msgt) & 0b00000011) == 0b01) |
#define | OSMO_GSUP_IS_MSGT_RESULT(msgt) (((msgt) & 0b00000011) == 0b10) |
#define | OSMO_GSUP_TO_MSGT_REQUEST(msgt) (((msgt) & 0b11111100)) |
#define | OSMO_GSUP_TO_MSGT_ERROR(msgt) (((msgt) & 0b11111100) | 0b01) |
#define | OSMO_GSUP_TO_MSGT_RESULT(msgt) (((msgt) & 0b11111100) | 0b10) |
The Generic Subscriber Update Protocol (GSUP) is an Osmocom-specific non-standard protocol replacing MAP as the protocol between MSC/VLR/SGSN and HLR in a 3GPP cellular communications network.
This header defines SMS (Short Message Service) extensions for Osmocom GSUP (Generic Subscriber Update Protocol).
It was designed around the same transactions and architecture as the MAP messages/operations, but without the complexity of TCAP and MAP, and without the need for ASN.1 encoding.
The purpose is to keep protocol complexity out of OsmoSGSN and OsmoMSC, while providing a clean path to an external GSUP to MAP translator.
The scope of this module is defined by 3GPP TS 29.002, section 12.
#define OSMO_GSUP_MAX_MSISDN_LEN 9 |
Maximum number of octets encoding MSISDN in BCD format.
#define OSMO_GSUP_MAX_NUM_AUTH_INFO 5 |
Maximum number of auth info inside osmo_gsup_message.
Maximum nubmer of PDP inside osmo_gsup_message.
#define OSMO_GSUP_MAX_PCO_LEN 251 |
#define OSMO_GSUP_MSGT_E_ROUTING_ERROR OSMO_GSUP_MSGT_ROUTING_ERROR |
#define OSMO_GSUP_PORT 4222 |
Information Element Identifiers for GSUP IEs.
GSUP message type Make sure that new messages follow this scheme:
-------------------------—. | Ending Bits | Category | |-------------------------—| | 00 | Request | | 01 | Error | | 10 | Result | | 11 | Other | '-------------------------—' Request, Error and Result messages must only differ in these last two bits.
|
static |
References data, DLGSUP, GMM_CAUSE_PROTO_ERR_UNSPEC, iei, len, LOGL_ERROR, LOGP, OSMO_AUTH_TYPE_GSM, OSMO_AUTH_TYPE_UMTS, OSMO_GSUP_AUTN_IE, OSMO_GSUP_CK_IE, OSMO_GSUP_IK_IE, OSMO_GSUP_KC_IE, OSMO_GSUP_RAND_IE, OSMO_GSUP_RES_IE, OSMO_GSUP_SRES_IE, and osmo_shift_tlv().
Referenced by osmo_gsup_decode().
|
static |
References data, GMM_CAUSE_PROTO_ERR_UNSPEC, len, PDP_TYPE_N_IETF_IPv4, PDP_TYPE_N_IETF_IPv4v6, PDP_TYPE_N_IETF_IPv6, PDP_TYPE_ORG_IETF, and gsm48_pdp_address::type.
Referenced by decode_pdp_info().
|
static |
References data, decode_pdp_address(), DLGSUP, GMM_CAUSE_PROTO_ERR_UNSPEC, iei, len, LOGL_ERROR, LOGP, osmo_decode_big_endian(), OSMO_GSUP_ACCESS_POINT_NAME_IE, OSMO_GSUP_CHARG_CHAR_IE, OSMO_GSUP_PDP_ADDRESS_IE, OSMO_GSUP_PDP_CONTEXT_ID_IE, OSMO_GSUP_PDP_QOS_IE, and osmo_shift_tlv().
Referenced by osmo_gsup_decode().
|
static |
References iei, len, msg, msgb_length(), msgb_tlv_put(), OSMO_AUTH_TYPE_GSM, OSMO_AUTH_TYPE_UMTS, OSMO_GSUP_AUTN_IE, OSMO_GSUP_CK_IE, OSMO_GSUP_IK_IE, OSMO_GSUP_KC_IE, OSMO_GSUP_RAND_IE, OSMO_GSUP_RES_IE, and OSMO_GSUP_SRES_IE.
Referenced by osmo_gsup_encode().
|
static |
References iei, len, msg, msgb_length(), msgb_tlv_put(), OSMO_GSUP_ACCESS_POINT_NAME_IE, OSMO_GSUP_CHARG_CHAR_IE, OSMO_GSUP_PDP_ADDRESS_IE, OSMO_GSUP_PDP_CONTEXT_ID_IE, OSMO_GSUP_PDP_QOS_IE, PDP_TYPE_N_IETF_IPv4, PDP_TYPE_N_IETF_IPv4v6, PDP_TYPE_N_IETF_IPv6, PDP_TYPE_ORG_IETF, and gsm48_pdp_address::type.
Referenced by osmo_gsup_encode().
int osmo_gsup_decode | ( | const uint8_t * | const_data, |
size_t | data_len, | ||
struct osmo_gsup_message * | gsup_msg | ||
) |
Decode (parse) a GSUP message.
[in] | const_data | input data to be parsed |
[in] | data_len | length of input (const_data) |
[out] | gsup_msg | callee-allocated output data structure |
References ARRAY_SIZE, data, decode_auth_info(), decode_pdp_info(), DLGSUP, GMM_CAUSE_COND_IE_ERR, GMM_CAUSE_INV_MAND_INFO, GMM_CAUSE_PROTO_ERR_UNSPEC, gsm48_decode_bcd_number2(), iei, len, LOGL_ERROR, LOGL_NOTICE, LOGP, osmo_decode_big_endian(), OSMO_GSUP_ACCESS_POINT_NAME_IE, OSMO_GSUP_AN_APDU_IE, OSMO_GSUP_AUTH_TUPLE_IE, OSMO_GSUP_AUTS_IE, OSMO_GSUP_CANCEL_TYPE_IE, OSMO_GSUP_CAUSE_BSSAP_IE, OSMO_GSUP_CAUSE_IE, OSMO_GSUP_CAUSE_RR_IE, OSMO_GSUP_CAUSE_SM_IE, OSMO_GSUP_CHARG_CHAR_IE, OSMO_GSUP_CN_DOMAIN_IE, OSMO_GSUP_CURRENT_RAT_TYPE_IE, osmo_gsup_decode_an_apdu(), OSMO_GSUP_DESTINATION_NAME_IE, OSMO_GSUP_FREEZE_PTMSI_IE, OSMO_GSUP_HLR_NUMBER_IE, OSMO_GSUP_IMEI_IE, OSMO_GSUP_IMEI_RESULT_IE, OSMO_GSUP_IMSI_IE, OSMO_GSUP_KC_IE, OSMO_GSUP_MAX_NUM_AUTH_INFO, OSMO_GSUP_MAX_NUM_PDP_INFO, OSMO_GSUP_MESSAGE_CLASS_IE, OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, OSMO_GSUP_MSISDN_IE, OSMO_GSUP_NUM_VECTORS_REQ_IE, OSMO_GSUP_PCO_IE, OSMO_GSUP_PDP_ADDRESS_IE, OSMO_GSUP_PDP_CONTEXT_ID_IE, OSMO_GSUP_PDP_INFO_COMPL_IE, OSMO_GSUP_PDP_INFO_IE, OSMO_GSUP_RAND_IE, OSMO_GSUP_SESSION_ID_IE, OSMO_GSUP_SESSION_STATE_IE, OSMO_GSUP_SM_ALERT_RSN_IE, OSMO_GSUP_SM_RP_CAUSE_IE, OSMO_GSUP_SM_RP_DA_IE, OSMO_GSUP_SM_RP_MMS_IE, OSMO_GSUP_SM_RP_MR_IE, OSMO_GSUP_SM_RP_OA_IE, OSMO_GSUP_SM_RP_UI_IE, osmo_gsup_sms_decode_sm_rp_da(), osmo_gsup_sms_decode_sm_rp_oa(), OSMO_GSUP_SOURCE_NAME_IE, OSMO_GSUP_SRES_IE, OSMO_GSUP_SS_INFO_IE, OSMO_GSUP_SUPPORTED_RAT_TYPES_IE, osmo_match_shift_tlv(), osmo_shift_tlv(), and osmo_shift_v_fixed().
int osmo_gsup_decode_an_apdu | ( | struct osmo_gsup_message * | gsup_msg, |
const uint8_t * | data, | ||
size_t | data_len | ||
) |
Decode AN-apdu (see 3GPP TS 29.002 7.6.9.1).
[out] | gsup_msg | abstract GSUP message structure |
[in] | data | pointer to the raw IE payload |
[in] | data_len | length of IE pointed by data |
References data, DLGSUP, len, LOGL_ERROR, and LOGP.
Referenced by osmo_gsup_decode().
Encode a GSUP message.
[out] | msg | message buffer to which encoded message is written |
[in] | gsup_msg | osmo_gsup_message data to be encoded |
References DLGSUP, encode_auth_info(), encode_pdp_info(), gsm48_encode_bcd_number(), GSM48_MI_SIZE, len, LOGL_ERROR, LOGP, msg, msgb_tl_put(), msgb_tlv_put(), msgb_v_put(), osmo_encode_big_endian(), OSMO_GSUP_AUTH_TUPLE_IE, OSMO_GSUP_AUTS_IE, OSMO_GSUP_CANCEL_TYPE_IE, OSMO_GSUP_CAUSE_BSSAP_IE, OSMO_GSUP_CAUSE_IE, OSMO_GSUP_CAUSE_RR_IE, OSMO_GSUP_CAUSE_SM_IE, OSMO_GSUP_CHARG_CHAR_IE, OSMO_GSUP_CN_DOMAIN_IE, OSMO_GSUP_CURRENT_RAT_TYPE_IE, OSMO_GSUP_DESTINATION_NAME_IE, osmo_gsup_encode_an_apdu(), OSMO_GSUP_FREEZE_PTMSI_IE, OSMO_GSUP_HLR_NUMBER_IE, OSMO_GSUP_IMEI_IE, OSMO_GSUP_IMEI_RESULT_IE, OSMO_GSUP_IMSI_IE, OSMO_GSUP_MAX_PCO_LEN, OSMO_GSUP_MESSAGE_CLASS_IE, OSMO_GSUP_MESSAGE_CLASS_UNSET, OSMO_GSUP_MSGT_SEND_AUTH_INFO_REQUEST, OSMO_GSUP_MSISDN_IE, OSMO_GSUP_NUM_VECTORS_REQ_IE, OSMO_GSUP_PCO_IE, OSMO_GSUP_PDP_CONTEXT_ID_IE, OSMO_GSUP_PDP_INFO_COMPL_IE, OSMO_GSUP_PDP_INFO_IE, OSMO_GSUP_RAND_IE, OSMO_GSUP_SESSION_ID_IE, OSMO_GSUP_SESSION_STATE_IE, OSMO_GSUP_SM_ALERT_RSN_IE, OSMO_GSUP_SM_RP_CAUSE_IE, OSMO_GSUP_SM_RP_MMS_IE, OSMO_GSUP_SM_RP_MR_IE, OSMO_GSUP_SM_RP_UI_IE, osmo_gsup_sms_encode_sm_rp_da(), osmo_gsup_sms_encode_sm_rp_oa(), OSMO_GSUP_SOURCE_NAME_IE, OSMO_GSUP_SS_INFO_IE, OSMO_GSUP_SUPPORTED_RAT_TYPES_IE, OSMO_RAT_COUNT, osmo_rat_type_name(), and OSMO_RAT_UNKNOWN.
Encode AN-apdu (see 3GPP TS 29.002 7.6.9.1).
[out] | msg | target message buffer (caller-allocated) |
[in] | gsup_msg | abstract GSUP message structure |
References osmo_gsup_an_apdu::access_network_proto, osmo_gsup_an_apdu::data, osmo_gsup_an_apdu::data_len, DLGSUP, len, LOGL_ERROR, LOGP, msg, msgb_tv_put(), msgb_v_put(), and OSMO_GSUP_AN_APDU_IE.
Referenced by osmo_gsup_encode().
int osmo_gsup_get_err_msg_type | ( | enum osmo_gsup_message_type | type_in | ) |
return the error message type corresponding to type_in.
Deprecated, use OSMO_GSUP_TO_MSGT_ERROR() instead.
References len, and OSMO_GSUP_TO_MSGT_ERROR.
|
inlinestatic |
References get_value_string(), and osmo_gsup_message_class_names.
|
inlinestatic |
References get_value_string(), and osmo_gsup_message_type_names.
|
inlinestatic |
References get_value_string(), and osmo_gsup_session_state_names.
int osmo_gsup_sms_decode_sm_rp_da | ( | struct osmo_gsup_message * | gsup_msg, |
uint8_t * | data, | ||
size_t | data_len | ||
) |
Decode SM-RP-DA IE (see 7.6.8.1), Destination Address.
[out] | gsup_msg | abstract GSUP message structure |
[in] | data | pointer to the raw IE payload |
[in] | data_len | length of IE pointed by data |
References data, DLGSUP, len, LOGL_ERROR, LOGP, OSMO_GSUP_SMS_SM_RP_ODA_IMSI, OSMO_GSUP_SMS_SM_RP_ODA_MSISDN, OSMO_GSUP_SMS_SM_RP_ODA_NONE, OSMO_GSUP_SMS_SM_RP_ODA_NULL, and OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR.
Referenced by osmo_gsup_decode().
int osmo_gsup_sms_decode_sm_rp_oa | ( | struct osmo_gsup_message * | gsup_msg, |
uint8_t * | data, | ||
size_t | data_len | ||
) |
Decode SM-RP-OA IE (see 7.6.8.2), Originating Address.
[out] | gsup_msg | abstract GSUP message structure |
[in] | data | pointer to the raw IE payload |
[in] | data_len | length of IE pointed by data |
References data, DLGSUP, len, LOGL_ERROR, LOGP, OSMO_GSUP_SMS_SM_RP_ODA_IMSI, OSMO_GSUP_SMS_SM_RP_ODA_MSISDN, OSMO_GSUP_SMS_SM_RP_ODA_NONE, OSMO_GSUP_SMS_SM_RP_ODA_NULL, and OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR.
Referenced by osmo_gsup_decode().
Encode SM-RP-DA IE (see 7.6.8.1), Destination Address.
[out] | msg | target message buffer (caller-allocated) |
[in] | gsup_msg | abstract GSUP message structure |
References DLGSUP, len, LOGL_ERROR, LOGP, msg, msgb_tv_put(), msgb_v_put(), OSMO_GSUP_SM_RP_DA_IE, OSMO_GSUP_SMS_SM_RP_ODA_IMSI, OSMO_GSUP_SMS_SM_RP_ODA_MSISDN, OSMO_GSUP_SMS_SM_RP_ODA_NONE, OSMO_GSUP_SMS_SM_RP_ODA_NULL, and OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR.
Referenced by osmo_gsup_encode().
Encode SM-RP-OA IE (see 7.6.8.2), Originating Address.
[out] | msg | target message buffer (caller-allocated) |
[in] | gsup_msg | abstract GSUP message structure |
References DLGSUP, len, LOGL_ERROR, LOGP, msg, msgb_tv_put(), msgb_v_put(), OSMO_GSUP_SM_RP_OA_IE, OSMO_GSUP_SMS_SM_RP_ODA_MSISDN, OSMO_GSUP_SMS_SM_RP_ODA_NONE, OSMO_GSUP_SMS_SM_RP_ODA_NULL, and OSMO_GSUP_SMS_SM_RP_ODA_SMSC_ADDR.
Referenced by osmo_gsup_encode().
|
extern |
Referenced by osmo_gsup_message_class_name().
const struct value_string osmo_gsup_message_class_names[] |
Referenced by osmo_gsup_message_class_name().
|
extern |
Referenced by osmo_gsup_message_type_name().
const struct value_string osmo_gsup_message_type_names[] |
Referenced by osmo_gsup_message_type_name().
|
extern |
Referenced by osmo_gsup_session_state_name().
const struct value_string osmo_gsup_session_state_names[] |
Referenced by osmo_gsup_session_state_name().