diff options
-rw-r--r-- | include/osmo-bts/gsm_data.h | 1 | ||||
-rw-r--r-- | src/common/bts.c | 2 | ||||
-rw-r--r-- | src/common/rsl.c | 3 | ||||
-rw-r--r-- | src/common/vty.c | 89 |
4 files changed, 94 insertions, 1 deletions
diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h index 85762ae8..8e091f2a 100644 --- a/include/osmo-bts/gsm_data.h +++ b/include/osmo-bts/gsm_data.h @@ -44,6 +44,7 @@ struct gsm_bts_role_bts { struct paging_state *paging_state; char *bsc_oml_host; char *rtp_bind_host; + unsigned int rtp_jitter_buf_ms; }; #define bts_role_bts(x) ((struct gsm_bts_role_bts *)(x)->role) diff --git a/src/common/bts.c b/src/common/bts.c index ee4808aa..88b118f6 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -66,6 +66,8 @@ int bts_init(struct gsm_bts *bts) /* FIXME: make those parameters configurable */ btsb->paging_state = paging_init(btsb, 200, 0); + btsb->rtp_jitter_buf_ms = 100; + /* set BTS to dependency */ oml_mo_state_chg(&bts->mo, -1, NM_AVSTATE_DEPENDENCY); diff --git a/src/common/rsl.c b/src/common/rsl.c index 1ccd2080..db39f812 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -1273,6 +1273,9 @@ static int rsl_rx_ipac_XXcx(struct msgb *msg) 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); lchan->abis_ip.rtp_socket->priv = lchan; lchan->abis_ip.rtp_socket->rx_cb = &bts_model_rtp_rx_cb; diff --git a/src/common/vty.c b/src/common/vty.c index 121fbdaf..b8fea042 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -29,6 +29,8 @@ #include <osmocom/vty/command.h> #include <osmocom/vty/logging.h> +#include <osmocom/trau/osmo_ortp.h> + #include <osmo-bts/logging.h> #include <osmo-bts/gsm_data.h> @@ -138,6 +140,8 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) 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 bind-ip %s%s", btsb->rtp_bind_host, VTY_NEWLINE); + vty_out(vty, " rtp jitter-buffer %u%s", btsb->rtp_jitter_buf_ms, + VTY_NEWLINE); } int config_write_bts(struct vty *vty) @@ -227,10 +231,12 @@ DEFUN(cfg_bts_oml_ip, return CMD_SUCCESS; } +#define RTP_STR "RTP parameters\n" + DEFUN(cfg_bts_rtp_bind_ip, cfg_bts_rtp_bind_ip_cmd, "rtp bind-ip A.B.C.D", - "RTP Parameters\n" "RTP local bind IP Address\n" "RTP local bind IP Address\n") + RTP_STR "RTP local bind IP Address\n" "RTP local bind IP Address\n") { struct gsm_bts *bts = vty->index; struct gsm_bts_role_bts *btsb = bts_role_bts(bts); @@ -242,6 +248,20 @@ DEFUN(cfg_bts_rtp_bind_ip, return CMD_SUCCESS; } + +DEFUN(cfg_bts_rtp_jitbuf, + cfg_bts_rtp_jitbuf_cmd, + "rtp jitter-buffer <0-10000>", + 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]); + + return CMD_SUCCESS; +} + /* ====================================================================== * SHOW * ======================================================================*/ @@ -316,6 +336,70 @@ DEFUN(show_bts, show_bts_cmd, "show bts <0-255>", return CMD_SUCCESS; } +static struct gsm_lchan *resolve_lchan(struct gsm_network *net, + const char **argv, int idx) +{ + int bts_nr = atoi(argv[idx+0]); + int trx_nr = atoi(argv[idx+1]); + int ts_nr = atoi(argv[idx+2]); + int lchan_nr = atoi(argv[idx+3]); + struct gsm_bts *bts; + struct gsm_bts_trx *trx; + struct gsm_bts_trx_ts *ts; + + bts = gsm_bts_num(net, bts_nr); + if (!bts) + return NULL; + + trx = gsm_bts_trx_num(bts, trx_nr); + if (!trx) + return NULL; + + if (ts_nr >= ARRAY_SIZE(trx->ts)) + return NULL; + ts = &trx->ts[ts_nr]; + + if (lchan_nr >= ARRAY_SIZE(ts->lchan)) + return NULL; + + return &ts->lchan[lchan_nr]; +} + +#define BTS_T_T_L_STR \ + "BTS related commands\n" \ + "BTS number\n" \ + "TRX related commands\n" \ + "TRX number\n" \ + "timeslot related commands\n" \ + "timeslot number\n" \ + "logical channel commands\n" \ + "logical channel number\n" + +DEFUN(bts_t_t_l_jitter_buf, + bts_t_t_l_jitter_buf_cmd, + "bts <0-0> trx <0-0> ts <0-7> lchan <0-1> rtp jitter-buffer <0-10000>", + BTS_T_T_L_STR "RTP settings\n" + "Jitter buffer\n" "Size of jitter buffer in (ms)\n") +{ + struct gsm_network *net = gsmnet_from_vty(vty); + struct gsm_lchan *lchan; + int jitbuf_ms = atoi(argv[4]); + + lchan = resolve_lchan(net, argv, 0); + if (!lchan) { + vty_out(vty, "%% can't find BTS%s", VTY_NEWLINE); + return CMD_WARNING; + } + if (!lchan->abis_ip.rtp_socket) { + vty_out(vty, "%% this channel has no active RTP stream%s", + VTY_NEWLINE); + return CMD_WARNING; + } + osmo_rtp_socket_set_param(lchan->abis_ip.rtp_socket, + OSMO_RTP_P_JITBUF, jitbuf_ms); + + return CMD_SUCCESS; +} int bts_vty_init(const struct log_info *cat) { @@ -329,7 +413,10 @@ int bts_vty_init(const struct log_info *cat) install_element(BTS_NODE, &cfg_bts_unit_id_cmd); install_element(BTS_NODE, &cfg_bts_oml_ip_cmd); install_element(BTS_NODE, &cfg_bts_rtp_bind_ip_cmd); + install_element(BTS_NODE, &cfg_bts_rtp_jitbuf_cmd); install_element(BTS_NODE, &cfg_bts_band_cmd); install_element(BTS_NODE, &cfg_description_cmd); install_element(BTS_NODE, &cfg_no_description_cmd); + + install_element(ENABLE_NODE, &bts_t_t_l_jitter_buf_cmd); } |