mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-11-03 21:43:32 +00:00 
			
		
		
		
	Revert "bsc: count the usage of codec by setting the lchan active"
This reverts commit 38e9ea3f7f.
Introduced a reproducable segfault, because msg->trx is not actually set/used
in the openbsc code paths.
 Program received signal SIGSEGV, Segmentation fault.
 count_codecs (lchan=0x1, bts=<optimized out>) at ../../../src/libbsc/abis_rsl.c:104
 104                             rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_FR]);
 (gdb) bt
 #0  count_codecs (lchan=0x1, bts=<optimized out>) at ../../../src/libbsc/abis_rsl.c:104
 #1  0x0000000000425661 in abis_rsl_rx_dchan (msg=<optimized out>) at ../../../src/libbsc/abis_rsl.c:1516
 #2  abis_rsl_rcvmsg (msg=0x8143f0) at ../../../src/libbsc/abis_rsl.c:2611
 #3  0x00007ffff71420d0 in handle_ts1_read (bfd=<optimized out>) at ../../src/input/ipaccess.c:271
 #4  ipaccess_fd_cb (bfd=0x815af8, what=1) at ../../src/input/ipaccess.c:386
 #5  0x00007ffff7779b62 in osmo_fd_disp_fds (_eset=0x7fffffffe590, _wset=0x7fffffffe510, _rset=0x7fffffffe490) at ../../src/select.c:149
 #6  osmo_select_main (polling=polling@entry=0) at ../../src/select.c:189
 #7  0x0000000000406fac in main (argc=<optimized out>, argv=0x7fffffffe738) at ../../../src/osmo-nitb/bsc_hack.c:385
			
			
This commit is contained in:
		@@ -168,11 +168,6 @@ enum {
 | 
				
			|||||||
	BSC_CTR_CHAN_RLL_ERR,
 | 
						BSC_CTR_CHAN_RLL_ERR,
 | 
				
			||||||
	BSC_CTR_BTS_OML_FAIL,
 | 
						BSC_CTR_BTS_OML_FAIL,
 | 
				
			||||||
	BSC_CTR_BTS_RSL_FAIL,
 | 
						BSC_CTR_BTS_RSL_FAIL,
 | 
				
			||||||
	BSC_CTR_CODEC_AMR_F,
 | 
					 | 
				
			||||||
	BSC_CTR_CODEC_AMR_H,
 | 
					 | 
				
			||||||
	BSC_CTR_CODEC_EFR,
 | 
					 | 
				
			||||||
	BSC_CTR_CODEC_V1_FR,
 | 
					 | 
				
			||||||
	BSC_CTR_CODEC_V1_HR,
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct rate_ctr_desc bsc_ctr_description[] = {
 | 
					static const struct rate_ctr_desc bsc_ctr_description[] = {
 | 
				
			||||||
@@ -191,11 +186,6 @@ static const struct rate_ctr_desc bsc_ctr_description[] = {
 | 
				
			|||||||
	[BSC_CTR_CHAN_RLL_ERR] = 		{"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
 | 
						[BSC_CTR_CHAN_RLL_ERR] = 		{"chan.rll_err", "Received a RLL failure with T200 cause from BTS."},
 | 
				
			||||||
	[BSC_CTR_BTS_OML_FAIL] = 		{"bts.oml_fail", "Received a TEI down on a OML link."},
 | 
						[BSC_CTR_BTS_OML_FAIL] = 		{"bts.oml_fail", "Received a TEI down on a OML link."},
 | 
				
			||||||
	[BSC_CTR_BTS_RSL_FAIL] = 		{"bts.rsl_fail", "Received a TEI down on a OML link."},
 | 
						[BSC_CTR_BTS_RSL_FAIL] = 		{"bts.rsl_fail", "Received a TEI down on a OML link."},
 | 
				
			||||||
	[BSC_CTR_CODEC_AMR_F] =			{"bts.codec_amr_f", "Count the usage of AMR/F codec by channel mode requested."},
 | 
					 | 
				
			||||||
	[BSC_CTR_CODEC_AMR_H] =			{"bts.codec_amr_h", "Count the usage of AMR/H codec by channel mode requested."},
 | 
					 | 
				
			||||||
	[BSC_CTR_CODEC_EFR] = 			{"bts.codec_efr", "Count the usage of EFR codec by channel mode requested."},
 | 
					 | 
				
			||||||
	[BSC_CTR_CODEC_V1_FR] =			{"bts.codec_fr", "Count the usage of FR codec by channel mode requested."},
 | 
					 | 
				
			||||||
	[BSC_CTR_CODEC_V1_HR] =			{"bts.codec_hr", "Count the usage of HR codec by channel mode requested."},
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,39 +82,6 @@ static void do_lchan_free(struct gsm_lchan *lchan)
 | 
				
			|||||||
	lchan_free(lchan);
 | 
						lchan_free(lchan);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void count_codecs(struct gsm_bts *bts, struct gsm_lchan *lchan)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (lchan->type == GSM_LCHAN_TCH_H) {
 | 
					 | 
				
			||||||
		switch (lchan->tch_mode) {
 | 
					 | 
				
			||||||
		case GSM48_CMODE_SPEECH_AMR:
 | 
					 | 
				
			||||||
			rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_H]);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case GSM48_CMODE_SPEECH_V1:
 | 
					 | 
				
			||||||
			rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_HR]);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else if (lchan->type == GSM_LCHAN_TCH_F) {
 | 
					 | 
				
			||||||
		switch (lchan->tch_mode) {
 | 
					 | 
				
			||||||
		case GSM48_CMODE_SPEECH_AMR:
 | 
					 | 
				
			||||||
			rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_F]);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case GSM48_CMODE_SPEECH_V1:
 | 
					 | 
				
			||||||
			rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_FR]);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case GSM48_CMODE_SPEECH_EFR:
 | 
					 | 
				
			||||||
			rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_EFR]);
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		LOGP(DRSL, LOGL_ERROR, "count_codecs unknown lchan->type %x on channel %s\n",
 | 
					 | 
				
			||||||
		     lchan->type, gsm_ts_and_pchan_name(lchan->ts));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static uint8_t mdisc_by_msgtype(uint8_t msg_type)
 | 
					static uint8_t mdisc_by_msgtype(uint8_t msg_type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* mask off the transparent bit ? */
 | 
						/* mask off the transparent bit ? */
 | 
				
			||||||
@@ -1203,7 +1170,6 @@ static int rsl_rx_chan_act_ack(struct msgb *msg)
 | 
				
			|||||||
		lchan->rqd_ta = 0;
 | 
							lchan->rqd_ta = 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	count_codecs(msg->trx->bts, lchan);
 | 
					 | 
				
			||||||
	send_lchan_signal(S_LCHAN_ACTIVATE_ACK, lchan, NULL);
 | 
						send_lchan_signal(S_LCHAN_ACTIVATE_ACK, lchan, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
@@ -1513,7 +1479,6 @@ static int abis_rsl_rx_dchan(struct msgb *msg)
 | 
				
			|||||||
		rc = rsl_rx_rf_chan_rel_ack(msg->lchan);
 | 
							rc = rsl_rx_rf_chan_rel_ack(msg->lchan);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case RSL_MT_MODE_MODIFY_ACK:
 | 
						case RSL_MT_MODE_MODIFY_ACK:
 | 
				
			||||||
		count_codecs(msg->trx->bts, msg->lchan);
 | 
					 | 
				
			||||||
		DEBUGP(DRSL, "%s CHANNEL MODE MODIFY ACK\n", ts_name);
 | 
							DEBUGP(DRSL, "%s CHANNEL MODE MODIFY ACK\n", ts_name);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case RSL_MT_MODE_MODIFY_NACK:
 | 
						case RSL_MT_MODE_MODIFY_NACK:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user