diff options
-rw-r--r-- | TODO-RELEASE | 1 | ||||
-rw-r--r-- | include/osmocom/gsm/gsm0808.h | 4 | ||||
-rw-r--r-- | src/gsm/gsm0808.c | 21 |
3 files changed, 16 insertions, 10 deletions
diff --git a/TODO-RELEASE b/TODO-RELEASE index 16d96ecc..8b5f841e 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -19,3 +19,4 @@ libosmogsm gsm0808_create_cipher_reject() use enum as parameter libosmogsm osmo_gsup_message extended with SMS related fields libosmogsm osmo_gsup_sms_{en|de}code_sm_rp_da GSUP SM-RP-DA coding helpers libosmogsm osmo_gsup_sms_{en|de}code_sm_rp_oa GSUP SM-RP-OA coding helpers +libosmogsm gsm0808_create_lcls_conn_ctrl() API/ABI break: change parameters from pointers to plain values diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h index 79d89e5f..ac887488 100644 --- a/include/osmocom/gsm/gsm0808.h +++ b/include/osmocom/gsm/gsm0808.h @@ -92,8 +92,8 @@ struct msgb *gsm0808_create_paging(const char *imsi, const uint32_t *tmsi, const struct gsm0808_cell_id_list *cil, const uint8_t *chan_needed) OSMO_DEPRECATED("use gsm0808_create_paging2 instead"); -struct msgb *gsm0808_create_lcls_conn_ctrl(enum gsm0808_lcls_config *config, - enum gsm0808_lcls_control *control); +struct msgb *gsm0808_create_lcls_conn_ctrl(enum gsm0808_lcls_config config, + enum gsm0808_lcls_control control); struct msgb *gsm0808_create_lcls_conn_ctrl_ack(enum gsm0808_lcls_status status); struct msgb *gsm0808_create_lcls_notification(enum gsm0808_lcls_status status, bool break_req); diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c index 485e0632..59b16575 100644 --- a/src/gsm/gsm0808.c +++ b/src/gsm/gsm0808.c @@ -312,19 +312,24 @@ struct msgb *gsm0808_create_cipher_reject_ext(enum gsm0808_cause_class class, ui * \param[in] config LCLS Configuration * \param[in] control LCLS Connection Status Control * \returns callee-allocated msgb with BSSMAP LCLS NOTIFICATION */ -struct msgb *gsm0808_create_lcls_conn_ctrl(enum gsm0808_lcls_config *config, - enum gsm0808_lcls_control *control) +struct msgb *gsm0808_create_lcls_conn_ctrl(enum gsm0808_lcls_config config, + enum gsm0808_lcls_control control) { - struct msgb *msg = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM, - "bssmap: LCLS CONN CTRL"); + struct msgb *msg; + + /* According to NOTE 1 in ยง3.2.1.91 at least one of the parameters is required */ + if (config == GSM0808_LCLS_CFG_NA && control == GSM0808_LCLS_CSC_NA) + return NULL; + + msg = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM, "bssmap: LCLS CONN CTRL"); if (!msg) return NULL; msgb_v_put(msg, BSS_MAP_MSG_LCLS_CONNECT_CTRL); - if (config) - msgb_tv_put(msg, GSM0808_IE_LCLS_CONFIG, *config); - if (control) - msgb_tv_put(msg, GSM0808_IE_LCLS_CONFIG, *control); + if (config != GSM0808_LCLS_CFG_NA) + msgb_tv_put(msg, GSM0808_IE_LCLS_CONFIG, config); + if (control != GSM0808_LCLS_CSC_NA) + msgb_tv_put(msg, GSM0808_IE_LCLS_CONFIG, control); msg->l3h = msgb_tv_push(msg, BSSAP_MSG_BSS_MANAGEMENT, msgb_length(msg)); return msg; |