Add full AMR multirate IE support with VTY config for MS and BTS side
diff --git a/openbsc/src/libbsc/bsc_api.c b/openbsc/src/libbsc/bsc_api.c
index 76ceb2d..78e7c87 100644
--- a/openbsc/src/libbsc/bsc_api.c
+++ b/openbsc/src/libbsc/bsc_api.c
@@ -155,17 +155,31 @@
  * Handle the multirate config
  */
 static void handle_mr_config(struct gsm_subscriber_connection *conn,
-			     struct gsm_lchan *lchan)
+			     struct gsm_lchan *lchan, int full_rate)
 {
 	struct bsc_api *api;
 	api = conn->bts->network->bsc_api;
+	struct amr_multirate_conf *mr;
+	struct gsm48_multi_rate_conf *mr_conf;
 
 	if (api->mr_config)
-		return api->mr_config(conn, &lchan->mr_conf);
+		return api->mr_config(conn, lchan->mr_ms_lv, lchan->mr_bts_lv);
 
-	lchan->mr_conf.ver = 1;
-	lchan->mr_conf.icmi = 1;
-	lchan->mr_conf.m5_90 = 1;
+	if (full_rate)
+		mr = &lchan->ts->trx->bts->mr_full;
+	else
+		mr = &lchan->ts->trx->bts->mr_half;
+
+	mr_conf = (struct gsm48_multi_rate_conf *) mr->gsm48_ie;
+	mr_conf->ver = 1;
+
+	/* default, if no AMR codec defined */
+	if (!mr->gsm48_ie[1]) {
+		mr_conf->icmi = 1;
+		mr_conf->m5_90 = 1;
+	}
+	gsm48_multirate_config(lchan->mr_ms_lv, mr, 1);
+	gsm48_multirate_config(lchan->mr_bts_lv, mr, 0);
 }
 
 /*
@@ -209,7 +223,7 @@
 
 	/* handle AMR correctly */
 	if (chan_mode == GSM48_CMODE_SPEECH_AMR)
-		handle_mr_config(conn, new_lchan);
+		handle_mr_config(conn, new_lchan, full_rate);
 
 	if (rsl_chan_activate_lchan(new_lchan, 0x1, 0) < 0) {
 		LOGP(DHO, LOGL_ERROR, "could not activate channel\n");
@@ -382,7 +396,7 @@
 		LOGP(DMSC, LOGL_NOTICE,
 			"Sending ChanModify for speech %d %d\n", chan_mode, full_rate);
 		if (chan_mode == GSM48_CMODE_SPEECH_AMR)
-			handle_mr_config(conn, conn->lchan);
+			handle_mr_config(conn, conn->lchan, full_rate);
 
 		gsm48_lchan_modify(conn->lchan, chan_mode);
 	}