Change in osmo-bsc[master]: nat: Add jitter buffer on the uplink receiver

2018-05-17 Thread Pau Espin Pedrol
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

2018-05-19 Thread Harald Welte
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

2018-05-22 Thread Pau Espin Pedrol
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

2018-05-22 Thread Harald Welte
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

2018-05-22 Thread Harald Welte
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