Review at  https://gerrit.osmocom.org/7358

RR: Send RR STATUS in case of unsupported/unknown message

This fixes BSC_Tests.TC_err_84_unknown_msg

Related: OS#2903
Change-Id: I7ecb48971c6a162c7f4c749d128c31d0dbc4916f
---
M include/osmocom/bsc/gsm_04_08_utils.h
M src/libbsc/bsc_api.c
M src/libbsc/gsm_04_08_utils.c
3 files changed, 33 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/58/7358/1

diff --git a/include/osmocom/bsc/gsm_04_08_utils.h 
b/include/osmocom/bsc/gsm_04_08_utils.h
index 34979ab..bdfca71 100644
--- a/include/osmocom/bsc/gsm_04_08_utils.h
+++ b/include/osmocom/bsc/gsm_04_08_utils.h
@@ -28,6 +28,9 @@
                            char *mi_string, uint8_t *mi_type);
 struct msgb *gsm48_create_loc_upd_rej(uint8_t cause);
 
+struct msgb *gsm48_create_rr_status(uint8_t cause);
+int gsm48_tx_rr_status(struct gsm_subscriber_connection *conn, uint8_t cause);
+
 #define GSM48_ALLOC_SIZE        2048
 #define GSM48_ALLOC_HEADROOM    256
 
diff --git a/src/libbsc/bsc_api.c b/src/libbsc/bsc_api.c
index 156ea1a..7482453 100644
--- a/src/libbsc/bsc_api.c
+++ b/src/libbsc/bsc_api.c
@@ -646,6 +646,7 @@
                        * L3 Info of 08.58 MEASUREMENT REPORT different by 
calling
                        * directly into gsm48_parse_meas_rep */
                        LOGP(DMEAS, LOGL_ERROR, "DIRECT GSM48 MEASUREMENT 
REPORT ?!? ");
+                       gsm48_tx_rr_status(conn, 
GSM48_RR_CAUSE_MSG_TYPE_N_COMPAT);
                        break;
                case GSM48_MT_RR_HANDO_COMPL:
                        handle_rr_ho_compl(msg);
@@ -692,6 +693,8 @@
                        LOGP(DRR, LOGL_NOTICE,
                             "%s Dropping %s 04.08 RR message\n",
                             gsm_lchan_name(conn->lchan), 
gsm48_rr_msg_name(msg_type));
+                       gsm48_tx_rr_status(conn, GSM48_RR_CAUSE_MSG_TYPE_N);
+                       break;
                }
                break;
        default:
diff --git a/src/libbsc/gsm_04_08_utils.c b/src/libbsc/gsm_04_08_utils.c
index b75b42f..f30640f 100644
--- a/src/libbsc/gsm_04_08_utils.c
+++ b/src/libbsc/gsm_04_08_utils.c
@@ -640,6 +640,33 @@
        return gsm0808_submit_dtap(conn, msg, 0, 0);
 }
 
+/* 9.1.29 RR Status */
+struct msgb *gsm48_create_rr_status(uint8_t cause)
+{
+       struct msgb *msg;
+       struct gsm48_hdr *gh;
+
+       msg = gsm48_msgb_alloc_name("GSM 04.08 RR STATUS");
+       if (!msg)
+               return NULL;
+
+       gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh) + 1);
+       gh->proto_discr = GSM48_PDISC_RR;
+       gh->msg_type = GSM48_MT_RR_STATUS;
+       gh->data[0] = cause;
+
+       return msg;
+}
+
+/* 9.1.29 RR Status */
+int gsm48_tx_rr_status(struct gsm_subscriber_connection *conn, uint8_t cause)
+{
+       struct msgb *msg = gsm48_create_rr_status(cause);
+       if (!msg)
+               return -1;
+       return gsm0808_submit_dtap(conn, msg, 0, 0);
+}
+
 struct msgb *gsm48_create_mm_serv_rej(enum gsm48_reject_value value)
 {
        struct msgb *msg;

-- 
To view, visit https://gerrit.osmocom.org/7358
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ecb48971c6a162c7f4c749d128c31d0dbc4916f
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <[email protected]>

Reply via email to