[MERGED] osmo-bts[master]: Optionally use adaptive RTP jitter buffering

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 Dec 21 10:35:35 UTC 2016


Harald Welte has submitted this change and it was merged.

Change subject: Optionally use adaptive RTP jitter buffering
......................................................................


Optionally use adaptive RTP jitter buffering

* add vty option to manually enable adaptive RTP jitter
  buffering (disabled by default) on per-bts level
* use this setting on per-lchan level when setting jitter parameters via
  vty at runtime
* check and log result of osmo_rtp_socket_set_param()
* note: older libosmo-abis will ignore this setting which will be
  properly detected via return value
* if jitter buffer is disabled by configuring "rtp jitter-buffer 0" than
  adaptive buffering is disabled as well but it will be used if jitter
  buffer is set to different value for a givel lchan via vty

Change-Id: I489f3c419039f40b57c2ef0641c176478b8d3566
---
M include/osmo-bts/gsm_data.h
M src/common/bts.c
M src/common/rsl.c
M src/common/vty.c
4 files changed, 34 insertions(+), 9 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h
index f1c9601..772a705 100644
--- a/include/osmo-bts/gsm_data.h
+++ b/include/osmo-bts/gsm_data.h
@@ -86,6 +86,7 @@
 	char *bsc_oml_host;
 	struct llist_head oml_queue;
 	unsigned int rtp_jitter_buf_ms;
+	bool rtp_jitter_adaptive;
 	struct {
 		uint8_t ciphers;	/* flags A5/1==0x1, A5/2==0x2, A5/3==0x4 */
 	} support;
diff --git a/src/common/bts.c b/src/common/bts.c
index 2005e42..9c2f0e0 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -109,6 +109,7 @@
 	/* configurable via VTY */
 	btsb->paging_state = paging_init(btsb, 200, 0);
 	btsb->ul_power_target = -75;	/* dBm default */
+	btsb->rtp_jitter_adaptive = false;
 
 	/* configurable via OML */
 	btsb->load.ccch.load_ind_period = 112;
diff --git a/src/common/rsl.c b/src/common/rsl.c
index 8d1175d..9e9cbb6 100644
--- a/src/common/rsl.c
+++ b/src/common/rsl.c
@@ -1652,9 +1652,19 @@
 			return tx_ipac_XXcx_nack(lchan, RSL_ERR_RES_UNAVAIL,
 						 inc_ip_port, dch->c.msg_type);
 		}
-		osmo_rtp_socket_set_param(lchan->abis_ip.rtp_socket,
-					  OSMO_RTP_P_JITBUF,
-					  btsb->rtp_jitter_buf_ms);
+		rc = osmo_rtp_socket_set_param(lchan->abis_ip.rtp_socket,
+					       btsb->rtp_jitter_adaptive ?
+					       OSMO_RTP_P_JIT_ADAP :
+					       OSMO_RTP_P_JITBUF,
+					       btsb->rtp_jitter_buf_ms);
+		if (rc < 0)
+			LOGP(DRSL, LOGL_ERROR,
+			     "%s IPAC Failed to set RTP socket parameters: %s\n",
+			     gsm_lchan_name(lchan), strerror(-rc));
+		else
+			LOGP(DRSL, LOGL_INFO,
+			     "%s IPAC set RTP socket parameters: %d\n",
+			     gsm_lchan_name(lchan), rc);
 		lchan->abis_ip.rtp_socket->priv = lchan;
 		lchan->abis_ip.rtp_socket->rx_cb = &l1sap_rtp_rx_cb;
 
diff --git a/src/common/vty.c b/src/common/vty.c
index 0fffca0..b48afa4 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -276,8 +276,10 @@
 	vty_out(vty, " ipa unit-id %u %u%s",
 		bts->ip_access.site_id, bts->ip_access.bts_id, VTY_NEWLINE);
 	vty_out(vty, " oml remote-ip %s%s", btsb->bsc_oml_host, VTY_NEWLINE);
-	vty_out(vty, " rtp jitter-buffer %u%s", btsb->rtp_jitter_buf_ms,
-		VTY_NEWLINE);
+	vty_out(vty, " rtp jitter-buffer %u", btsb->rtp_jitter_buf_ms);
+	if (btsb->rtp_jitter_adaptive)
+		vty_out(vty, " adaptive");
+	vty_out(vty, "%s", VTY_NEWLINE);
 	vty_out(vty, " paging queue-size %u%s", paging_get_queue_max(btsb->paging_state),
 		VTY_NEWLINE);
 	vty_out(vty, " paging lifetime %u%s", paging_get_lifetime(btsb->paging_state),
@@ -487,13 +489,15 @@
 
 DEFUN(cfg_bts_rtp_jitbuf,
 	cfg_bts_rtp_jitbuf_cmd,
-	"rtp jitter-buffer <0-10000>",
+	"rtp jitter-buffer <0-10000> [adaptive]",
 	RTP_STR "RTP jitter buffer\n" "jitter buffer in ms\n")
 {
 	struct gsm_bts *bts = vty->index;
 	struct gsm_bts_role_bts *btsb = bts_role_bts(bts);
 
 	btsb->rtp_jitter_buf_ms = atoi(argv[0]);
+	if (argc > 1)
+		btsb->rtp_jitter_adaptive = true;
 
 	return CMD_SUCCESS;
 }
@@ -1003,7 +1007,8 @@
 {
 	struct gsm_network *net = gsmnet_from_vty(vty);
 	struct gsm_lchan *lchan;
-	int jitbuf_ms = atoi(argv[4]);
+	struct gsm_bts_role_bts *btsb;
+	int jitbuf_ms = atoi(argv[4]), rc;
 
 	lchan = resolve_lchan(net, argv, 0);
 	if (!lchan) {
@@ -1015,8 +1020,16 @@
 			VTY_NEWLINE);
 		return CMD_WARNING;
 	}
-	osmo_rtp_socket_set_param(lchan->abis_ip.rtp_socket,
-				  OSMO_RTP_P_JITBUF, jitbuf_ms);
+	btsb = bts_role_bts(lchan->ts->trx->bts);
+	rc = osmo_rtp_socket_set_param(lchan->abis_ip.rtp_socket,
+				  btsb->rtp_jitter_adaptive ?
+				  OSMO_RTP_P_JIT_ADAP : OSMO_RTP_P_JITBUF,
+				  jitbuf_ms);
+	if (rc < 0)
+		vty_out(vty, "%% error setting jitter parameters: %s%s",
+			strerror(-rc), VTY_NEWLINE);
+	else
+		vty_out(vty, "%% jitter parameters set: %d%s", rc, VTY_NEWLINE);
 
 	return CMD_SUCCESS;
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I489f3c419039f40b57c2ef0641c176478b8d3566
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list