Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver
Pau Espin Pedrol has uploaded this change for review. ( https://gerrit.osmocom.org/9214 Change subject: nat: Add jitter buffer on the uplink receiver .. nat: Add jitter buffer on the uplink receiver Default usage values are defined in mgcp node, and can be per-BSC overriden on each bsc node. This commit is a forward-port of openbsc.git Change-Id Ibf3932adc07442fb5e9c7a06404853f9d0a20959. Depends on osmo-mgw.git Change-Id Ie19a64ac09f9d51f2434ad0d7925610fc919a90e. Change-Id: Ie07b8a577caf731d59d68e3b3510ae2f9fd3dc93 --- M include/osmocom/bsc/bsc_nat.h M src/osmo-bsc_nat/bsc_mgcp_utils.c M src/osmo-bsc_nat/bsc_nat_vty.c 3 files changed, 96 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/14/9214/1 diff --git a/include/osmocom/bsc/bsc_nat.h b/include/osmocom/bsc/bsc_nat.h index 6146c00..bd78b9d 100644 --- a/include/osmocom/bsc/bsc_nat.h +++ b/include/osmocom/bsc/bsc_nat.h @@ -175,6 +175,16 @@ /* Osmux is enabled/disabled per BSC */ int osmux; + + /* Use a jitterbuffer on the bts-side receiver */ + bool bts_use_jibuf; + /* Minimum and maximum buffer size for the jitter buffer, in ms */ + uint32_t bts_jitter_delay_min; + uint32_t bts_jitter_delay_max; + /* Enabled if explicitly configured through VTY: */ + bool bts_use_jibuf_override; + bool bts_jitter_delay_min_override; + bool bts_jitter_delay_max_override; }; struct bsc_lac_entry { diff --git a/src/osmo-bsc_nat/bsc_mgcp_utils.c b/src/osmo-bsc_nat/bsc_mgcp_utils.c index bf6d0ad..ab06a5e 100644 --- a/src/osmo-bsc_nat/bsc_mgcp_utils.c +++ b/src/osmo-bsc_nat/bsc_mgcp_utils.c @@ -585,6 +585,17 @@ if (state == MGCP_ENDP_CRCX) { struct sockaddr_in sock; + /* set up jitter buffer parameters */ + if (bsc_endp->bsc->cfg->bts_use_jibuf_override) + mgcp_endp->bts_use_jibuf = bsc_endp->bsc->cfg->bts_use_jibuf; + + if (bsc_endp->bsc->cfg->bts_jitter_delay_min_override) + mgcp_endp->bts_jitter_delay_min = bsc_endp->bsc->cfg->bts_jitter_delay_min; + + if (bsc_endp->bsc->cfg->bts_jitter_delay_max_override) + mgcp_endp->bts_jitter_delay_max = bsc_endp->bsc->cfg->bts_jitter_delay_max; + + /* Annotate the allocated Osmux CID until the bsc confirms that * it agrees to use Osmux for this voice flow. */ diff --git a/src/osmo-bsc_nat/bsc_nat_vty.c b/src/osmo-bsc_nat/bsc_nat_vty.c index 64608bd..5d8d0c7 100644 --- a/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/src/osmo-bsc_nat/bsc_nat_vty.c @@ -173,6 +173,12 @@ vty_out(vty, " osmux only%s", VTY_NEWLINE); break; } + if (bsc->bts_use_jibuf_override) + vty_out(vty, " %sbts-jitter-buffer%s", bsc->bts_use_jibuf? "" : "no ", VTY_NEWLINE); + if (bsc->bts_jitter_delay_min_override) + vty_out(vty, " bts-jitter-delay-min %"PRIu32"%s", bsc->bts_jitter_delay_min, VTY_NEWLINE); + if (bsc->bts_jitter_delay_max_override) + vty_out(vty, " bts-jitter-delay-max %"PRIu32"%s", bsc->bts_jitter_delay_max, VTY_NEWLINE); } static int config_write_bsc(struct vty *vty) @@ -1231,6 +1237,71 @@ return CMD_SUCCESS; } +#define DEJITTER_STR "Uplink Jitter Buffer" +DEFUN(cfg_bsc_bts_use_jibuf, + cfg_bsc_bts_use_jibuf_cmd, + "bts-jitter-buffer", + DEJITTER_STR "\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_use_jibuf = true; + conf->bts_use_jibuf_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_no_bts_use_jibuf, + cfg_bsc_no_bts_use_jibuf_cmd, + "no bts-jitter-buffer", + NO_STR DEJITTER_STR "\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_use_jibuf = false; + conf->bts_use_jibuf_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_bts_jitter_delay_min, + cfg_bsc_bts_jitter_delay_min_cmd, + "bts-jitter-buffer-delay-min <1-65535>", + DEJITTER_STR " Minimum Delay in ms\n" "Minimum Delay in ms\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_jitter_delay_min = atoi(argv[0]); + if (!conf->bts_jitter_delay_min) { + vty_out(vty, "bts-jitter-buffer-delay-min cannot be zero.%s", VTY_NEWLINE); + return CMD_WARNING; + } + if (conf->bts_jitter_delay_min && conf->bts_jitter_delay_max && + conf->bts_jitter_delay_min > conf->bts_jitter_delay_max) { + vty_out(vty, "bts-jitter-buffer-delay-min cannot be bigger than " \ + "bts-jitter-buffer-delay-max.%s", VTY_NEWLINE); + return CMD_WARNING; + } + conf->bts_jitter_delay_min_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_bts_jitter_delay_max, +
Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver
Harald Welte has posted comments on this change. ( https://gerrit.osmocom.org/9214 ) Change subject: nat: Add jitter buffer on the uplink receiver .. Patch Set 1: Code-Review+1 (1 comment) https://gerrit.osmocom.org/#/c/9214/1/include/osmocom/bsc/bsc_nat.h File include/osmocom/bsc/bsc_nat.h: https://gerrit.osmocom.org/#/c/9214/1/include/osmocom/bsc/bsc_nat.h@180 PS1, Line 180: bool bts_use_jibuf; I would prefer something like a sub-structure struct { } bts_jitter; This way it's very clear whihc members of the master struct are related to the jitter buffer [only] and which not. -- To view, visit https://gerrit.osmocom.org/9214 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-MessageType: comment Gerrit-Change-Id: Ie07b8a577caf731d59d68e3b3510ae2f9fd3dc93 Gerrit-Change-Number: 9214 Gerrit-PatchSet: 1 Gerrit-Owner: Pau Espin Pedrol Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Comment-Date: Sun, 20 May 2018 06:56:11 + Gerrit-HasComments: Yes Gerrit-HasLabels: Yes
Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver
Pau Espin Pedrol has posted comments on this change. ( https://gerrit.osmocom.org/9214 ) Change subject: nat: Add jitter buffer on the uplink receiver .. Patch Set 1: (1 comment) https://gerrit.osmocom.org/#/c/9214/1/include/osmocom/bsc/bsc_nat.h File include/osmocom/bsc/bsc_nat.h: https://gerrit.osmocom.org/#/c/9214/1/include/osmocom/bsc/bsc_nat.h@180 PS1, Line 180: bool bts_use_jibuf; > I would prefer something like a sub-structure […] Makes sense. However, as this commit is just a forward-port from openbsc, I think it's better to merge this one as it is, and then do these modification in a follow-up commit. -- To view, visit https://gerrit.osmocom.org/9214 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-MessageType: comment Gerrit-Change-Id: Ie07b8a577caf731d59d68e3b3510ae2f9fd3dc93 Gerrit-Change-Number: 9214 Gerrit-PatchSet: 1 Gerrit-Owner: Pau Espin Pedrol Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pau Espin Pedrol Gerrit-Comment-Date: Tue, 22 May 2018 09:35:26 + Gerrit-HasComments: Yes Gerrit-HasLabels: No
Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver
Harald Welte has posted comments on this change. ( https://gerrit.osmocom.org/9214 ) Change subject: nat: Add jitter buffer on the uplink receiver .. Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/9214 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-MessageType: comment Gerrit-Change-Id: Ie07b8a577caf731d59d68e3b3510ae2f9fd3dc93 Gerrit-Change-Number: 9214 Gerrit-PatchSet: 1 Gerrit-Owner: Pau Espin Pedrol Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pau Espin Pedrol Gerrit-Comment-Date: Tue, 22 May 2018 09:57:17 + Gerrit-HasComments: No Gerrit-HasLabels: Yes
Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver
Harald Welte has submitted this change and it was merged. ( https://gerrit.osmocom.org/9214 ) Change subject: nat: Add jitter buffer on the uplink receiver .. nat: Add jitter buffer on the uplink receiver Default usage values are defined in mgcp node, and can be per-BSC overriden on each bsc node. This commit is a forward-port of openbsc.git Change-Id Ibf3932adc07442fb5e9c7a06404853f9d0a20959. Depends on osmo-mgw.git Change-Id Ie19a64ac09f9d51f2434ad0d7925610fc919a90e. Change-Id: Ie07b8a577caf731d59d68e3b3510ae2f9fd3dc93 --- M include/osmocom/bsc/bsc_nat.h M src/osmo-bsc_nat/bsc_mgcp_utils.c M src/osmo-bsc_nat/bsc_nat_vty.c 3 files changed, 96 insertions(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/include/osmocom/bsc/bsc_nat.h b/include/osmocom/bsc/bsc_nat.h index 6146c00..bd78b9d 100644 --- a/include/osmocom/bsc/bsc_nat.h +++ b/include/osmocom/bsc/bsc_nat.h @@ -175,6 +175,16 @@ /* Osmux is enabled/disabled per BSC */ int osmux; + + /* Use a jitterbuffer on the bts-side receiver */ + bool bts_use_jibuf; + /* Minimum and maximum buffer size for the jitter buffer, in ms */ + uint32_t bts_jitter_delay_min; + uint32_t bts_jitter_delay_max; + /* Enabled if explicitly configured through VTY: */ + bool bts_use_jibuf_override; + bool bts_jitter_delay_min_override; + bool bts_jitter_delay_max_override; }; struct bsc_lac_entry { diff --git a/src/osmo-bsc_nat/bsc_mgcp_utils.c b/src/osmo-bsc_nat/bsc_mgcp_utils.c index bf6d0ad..ab06a5e 100644 --- a/src/osmo-bsc_nat/bsc_mgcp_utils.c +++ b/src/osmo-bsc_nat/bsc_mgcp_utils.c @@ -585,6 +585,17 @@ if (state == MGCP_ENDP_CRCX) { struct sockaddr_in sock; + /* set up jitter buffer parameters */ + if (bsc_endp->bsc->cfg->bts_use_jibuf_override) + mgcp_endp->bts_use_jibuf = bsc_endp->bsc->cfg->bts_use_jibuf; + + if (bsc_endp->bsc->cfg->bts_jitter_delay_min_override) + mgcp_endp->bts_jitter_delay_min = bsc_endp->bsc->cfg->bts_jitter_delay_min; + + if (bsc_endp->bsc->cfg->bts_jitter_delay_max_override) + mgcp_endp->bts_jitter_delay_max = bsc_endp->bsc->cfg->bts_jitter_delay_max; + + /* Annotate the allocated Osmux CID until the bsc confirms that * it agrees to use Osmux for this voice flow. */ diff --git a/src/osmo-bsc_nat/bsc_nat_vty.c b/src/osmo-bsc_nat/bsc_nat_vty.c index 64608bd..5d8d0c7 100644 --- a/src/osmo-bsc_nat/bsc_nat_vty.c +++ b/src/osmo-bsc_nat/bsc_nat_vty.c @@ -173,6 +173,12 @@ vty_out(vty, " osmux only%s", VTY_NEWLINE); break; } + if (bsc->bts_use_jibuf_override) + vty_out(vty, " %sbts-jitter-buffer%s", bsc->bts_use_jibuf? "" : "no ", VTY_NEWLINE); + if (bsc->bts_jitter_delay_min_override) + vty_out(vty, " bts-jitter-delay-min %"PRIu32"%s", bsc->bts_jitter_delay_min, VTY_NEWLINE); + if (bsc->bts_jitter_delay_max_override) + vty_out(vty, " bts-jitter-delay-max %"PRIu32"%s", bsc->bts_jitter_delay_max, VTY_NEWLINE); } static int config_write_bsc(struct vty *vty) @@ -1231,6 +1237,71 @@ return CMD_SUCCESS; } +#define DEJITTER_STR "Uplink Jitter Buffer" +DEFUN(cfg_bsc_bts_use_jibuf, + cfg_bsc_bts_use_jibuf_cmd, + "bts-jitter-buffer", + DEJITTER_STR "\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_use_jibuf = true; + conf->bts_use_jibuf_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_no_bts_use_jibuf, + cfg_bsc_no_bts_use_jibuf_cmd, + "no bts-jitter-buffer", + NO_STR DEJITTER_STR "\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_use_jibuf = false; + conf->bts_use_jibuf_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_bts_jitter_delay_min, + cfg_bsc_bts_jitter_delay_min_cmd, + "bts-jitter-buffer-delay-min <1-65535>", + DEJITTER_STR " Minimum Delay in ms\n" "Minimum Delay in ms\n") +{ + struct bsc_config *conf = vty->index; + conf->bts_jitter_delay_min = atoi(argv[0]); + if (!conf->bts_jitter_delay_min) { + vty_out(vty, "bts-jitter-buffer-delay-min cannot be zero.%s", VTY_NEWLINE); + return CMD_WARNING; + } + if (conf->bts_jitter_delay_min && conf->bts_jitter_delay_max && + conf->bts_jitter_delay_min > conf->bts_jitter_delay_max) { + vty_out(vty, "bts-jitter-buffer-delay-min cannot be bigger than " \ + "bts-jitter-buffer-delay-max.%s", VTY_NEWLINE); + return CMD_WARNING; + } + conf->bts_jitter_delay_min_override = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bsc_bts_jitter