[PATCH] osmo-bts[master]: rsl: Properly NACK CHAN_ACKT / MODE_MODIFY

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Wed May 9 18:11:32 UTC 2018


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

rsl: Properly NACK CHAN_ACKT / MODE_MODIFY

Whenever we encounter an error condition during processing of RSL CHAN
ACT or RSL MODE MODIFY, it's insufficient to simply send an RSL ERROR
INDICATION, but we also must send a proper NACK back to the BSC.

Change-Id: I4dd7ff2fd2cdbc6e892cd329c826ac1bc3b16bb9
---
M src/common/rsl.c
1 file changed, 17 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/93/8093/1

diff --git a/src/common/rsl.c b/src/common/rsl.c
index 6fc3ac8..1a97c5d 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -1005,15 +1005,17 @@
 			uint8_t osmo_si;
 
 			if (!OSMO_IN_ARRAY(rsl_si, rsl_sacch_sitypes)) {
-				return rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT,
-							   &dch->chan_nr, NULL, msg);
+				rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT,
+						    &dch->chan_nr, NULL, msg);
+				return rsl_tx_chan_act_acknack(lchan, RSL_ERR_IE_CONTENT);
 			}
 
 			osmo_si = osmo_rsl2sitype(rsl_si);
 			if (osmo_si == SYSINFO_TYPE_NONE) {
 				LOGP(DRSL, LOGL_NOTICE, " Rx SACCH SI 0x%02x not supported.\n", rsl_si);
-				return rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
-							   NULL, msg);
+				rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
+						    NULL, msg);
+				return rsl_tx_chan_act_acknack(lchan, RSL_ERR_IE_CONTENT);
 			}
 
 			lapdm_ui_prefix_lchan(lchan, cur, osmo_si, si_len);
@@ -1021,8 +1023,9 @@
 			cur += si_len;
 			if (cur >= val + tot_len) {
 				LOGP(DRSL, LOGL_ERROR, "Error parsing SACCH INFO IE\n");
-				return rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
-							   NULL, msg);
+				rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
+						    NULL, msg);
+				return rsl_tx_chan_act_acknack(lchan, RSL_ERR_IE_CONTENT);
 			}
 		}
 	} else {
@@ -1033,8 +1036,8 @@
 	if (TLVP_PRESENT(&tp, RSL_IE_MR_CONFIG)) {
 		if (TLVP_LEN(&tp, RSL_IE_MR_CONFIG) > sizeof(lchan->mr_bts_lv) - 1) {
 			LOGP(DRSL, LOGL_ERROR, "Error parsing MultiRate conf IE\n");
-			return rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
-						   NULL, msg);
+			rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr, NULL, msg);
+			return rsl_tx_chan_act_acknack(lchan, RSL_ERR_IE_CONTENT);
 		}
 		memcpy(lchan->mr_bts_lv, TLVP_VAL(&tp, RSL_IE_MR_CONFIG) - 1,
 		       TLVP_LEN(&tp, RSL_IE_MR_CONFIG) + 1);
@@ -1090,9 +1093,10 @@
 			       gsm_ts_and_pchan_name(ts));
 			rc = 0;
 		}
-		if (rc)
-			return rsl_tx_error_report(msg->trx, RSL_ERR_NORMAL_UNSPEC, &dch->chan_nr,
-						   NULL, msg);
+		if (rc) {
+			rsl_tx_error_report(msg->trx, RSL_ERR_NORMAL_UNSPEC, &dch->chan_nr, NULL, msg);
+			return rsl_tx_chan_act_acknack(lchan, RSL_ERR_NORMAL_UNSPEC);
+		}
 		return 0;
 	}
 
@@ -1398,8 +1402,8 @@
 	if (TLVP_PRESENT(&tp, RSL_IE_MR_CONFIG)) {
 		if (TLVP_LEN(&tp, RSL_IE_MR_CONFIG) > sizeof(lchan->mr_bts_lv) - 1) {
 			LOGP(DRSL, LOGL_ERROR, "Error parsing MultiRate conf IE\n");
-			return rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr,
-						   NULL, msg);
+			rsl_tx_error_report(msg->trx, RSL_ERR_IE_CONTENT, &dch->chan_nr, NULL, msg);
+			return rsl_tx_mode_modif_nack(lchan, RSL_ERR_IE_CONTENT);;
 		}
 		memcpy(lchan->mr_bts_lv, TLVP_VAL(&tp, RSL_IE_MR_CONFIG) - 1,
 			TLVP_LEN(&tp, RSL_IE_MR_CONFIG) + 1);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4dd7ff2fd2cdbc6e892cd329c826ac1bc3b16bb9
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>



More information about the gerrit-log mailing list