diff --git a/include/osmocom/gsm/gsup.h b/include/osmocom/gsm/gsup.h index d966b2d27..523c15d43 100644 --- a/include/osmocom/gsm/gsup.h +++ b/include/osmocom/gsm/gsup.h @@ -59,6 +59,7 @@ enum osmo_gsup_iei { OSMO_GSUP_AUTN_IE = 0x25, OSMO_GSUP_AUTS_IE = 0x26, OSMO_GSUP_RES_IE = 0x27, + OSMO_GSUP_CN_DOMAIN_IE = 0x28, }; /*! GSUP message type */ @@ -97,6 +98,11 @@ enum osmo_gsup_cancel_type { OSMO_GSUP_CANCEL_TYPE_WITHDRAW = 2, /* on wire: 1 */ }; +enum osmo_gsup_cn_domain { + OSMO_GSUP_CN_DOMAIN_PS = 1, + OSMO_GSUP_CN_DOMAIN_CS = 2, +}; + /*! parsed/decoded PDP context information */ struct osmo_gsup_pdp_info { unsigned int context_id; @@ -132,6 +138,7 @@ struct osmo_gsup_message { const uint8_t *hlr_enc; size_t hlr_enc_len; const uint8_t *auts; + enum osmo_gsup_cn_domain cn_domain; }; int osmo_gsup_decode(const uint8_t *data, size_t data_len, diff --git a/src/gsm/gsup.c b/src/gsm/gsup.c index 7a439d48a..244c5fa8e 100644 --- a/src/gsm/gsup.c +++ b/src/gsm/gsup.c @@ -329,6 +329,10 @@ int osmo_gsup_decode(const uint8_t *const_data, size_t data_len, gsup_msg->hlr_enc_len = value_len; break; + case OSMO_GSUP_CN_DOMAIN_IE: + gsup_msg->cn_domain = *value; + break; + default: LOGP(DLGSUP, LOGL_NOTICE, "GSUP IE type %d unknown\n", iei); @@ -469,4 +473,9 @@ void osmo_gsup_encode(struct msgb *msg, const struct osmo_gsup_message *gsup_msg if (gsup_msg->auts) msgb_tlv_put(msg, OSMO_GSUP_AUTS_IE, 16, gsup_msg->auts); + + if (gsup_msg->cn_domain) { + uint8_t dn = gsup_msg->cn_domain; + msgb_tlv_put(msg, OSMO_GSUP_CN_DOMAIN_IE, 1, &dn); + } }