falconia has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bts/+/32970 )
Change subject: all models, HR1 codec: select RTP output format via vty option ...................................................................... all models, HR1 codec: select RTP output format via vty option The new vty option "rtp hr-format (rfc5993|ts101318)" selects the RTP output format to be used for HR1 codec, consistently across all models. The default is set to rfc5993 as a forward-looking measure: once we implement GSM 06.41 section 6.1.1 SID classification (OS#6036), the extra ToC octet of rfc5993 format (which carries SID classification status) will allow operation closer to traditional E1 Abis where this SID classification is done by the UL-receiving BTS and carried in out-of-band control bits. Closes: OS#5688 Change-Id: I168191874a062429a57904511a1e89e3f588732e --- M include/osmo-bts/bts.h M src/common/bts.c M src/common/l1sap.c M src/common/vty.c M tests/osmo-bts.vty 5 files changed, 59 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/70/32970/1 diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h index 0fff2a5..7ca3224 100644 --- a/include/osmo-bts/bts.h +++ b/include/osmo-bts/bts.h @@ -300,6 +300,7 @@ int rtp_priority; bool rtp_nogaps_mode; /* emit RTP stream without any gaps */ + bool emit_hr_rfc5993; struct { uint8_t ciphers; /* flags A5/1==0x1, A5/2==0x2, A5/3==0x4 */ diff --git a/src/common/bts.c b/src/common/bts.c index 242c5dd..802cb00 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -330,6 +330,7 @@ bts->rtp_port_range_next = bts->rtp_port_range_start; bts->rtp_ip_dscp = -1; bts->rtp_priority = -1; + bts->emit_hr_rfc5993 = true; /* Default (fall-back) MS/BS Power control parameters */ power_ctrl_params_def_reset(&bts->bs_dpc_params, true); diff --git a/src/common/l1sap.c b/src/common/l1sap.c index 75bc795..fb93e49 100644 --- a/src/common/l1sap.c +++ b/src/common/l1sap.c @@ -1643,6 +1643,24 @@ lchan->rtp_tx_marker = false; } +/* a helper function for emitting HR1 UL in RFC 5993 format */ +static void send_rtp_rfc5993(struct gsm_lchan *lchan, uint32_t fn, + const uint8_t *input_pl, uint16_t input_pl_len) +{ + uint8_t new_pl[GSM_HR_BYTES_RTP_RFC5993]; + + OSMO_ASSERT(input_pl_len == GSM_HR_BYTES); + /* FIXME: implement proper SID classification per GSM 06.41 section + * 6.1.1; see OS#6036. Until then, detect error-free SID frames + * using our existing osmo_hr_check_sid() function. */ + if (osmo_hr_check_sid(input_pl, input_pl_len)) + new_pl[0] = 0x20; + else + new_pl[0] = 0x00; + memcpy(new_pl + 1, input_pl, GSM_HR_BYTES); + send_ul_rtp_packet(lchan, fn, new_pl, GSM_HR_BYTES_RTP_RFC5993); +} + /* TCH received from bts model */ static int l1sap_tch_ind(struct gsm_bts_trx *trx, struct osmo_phsap_prim *l1sap, struct ph_tch_param *tch_ind) @@ -1682,7 +1700,11 @@ * good enough. */ if (msg->len && tch_ind->lqual_cb >= bts->min_qual_norm) { /* hand msg to RTP code for transmission */ - send_ul_rtp_packet(lchan, fn, msg->data, msg->len); + if (bts->emit_hr_rfc5993 && lchan->type == GSM_LCHAN_TCH_H && + lchan->tch_mode == GSM48_CMODE_SPEECH_V1) + send_rtp_rfc5993(lchan, fn, msg->data, msg->len); + else + send_ul_rtp_packet(lchan, fn, msg->data, msg->len); /* if loopback is enabled, also queue received RTP data */ if (lchan->loopback) { /* add new frame to queue, make sure the queue doesn't get too long */ diff --git a/src/common/vty.c b/src/common/vty.c index b17800c..8df5642 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -418,6 +418,8 @@ vty_out(vty, " rtp socket-priority %d%s", bts->rtp_priority, VTY_NEWLINE); if (bts->rtp_nogaps_mode) vty_out(vty, " rtp continuous-streaming%s", VTY_NEWLINE); + vty_out(vty, " rtp hr-format %s%s", + bts->emit_hr_rfc5993 ? "rfc5993" : "ts101318", VTY_NEWLINE); vty_out(vty, " paging queue-size %u%s", paging_get_queue_max(bts->paging_state), VTY_NEWLINE); vty_out(vty, " paging lifetime %u%s", paging_get_lifetime(bts->paging_state), @@ -797,6 +799,17 @@ return CMD_SUCCESS; } +DEFUN(cfg_bts_rtp_hr_format, + cfg_bts_rtp_hr_format_cmd, + "rtp hr-format (rfc5993|ts101318)", + RTP_STR "HRv1 codec output format\n" "RFC 5993\n" "TS 101 318\n") +{ + struct gsm_bts *bts = vty->index; + + bts->emit_hr_rfc5993 = !strcmp(argv[0], "rfc5993"); + return CMD_SUCCESS; +} + #define PAG_STR "Paging related parameters\n" DEFUN_ATTR(cfg_bts_paging_queue_size, @@ -2686,6 +2699,7 @@ install_element(BTS_NODE, &cfg_bts_rtp_priority_cmd); install_element(BTS_NODE, &cfg_bts_rtp_cont_stream_cmd); install_element(BTS_NODE, &cfg_bts_no_rtp_cont_stream_cmd); + install_element(BTS_NODE, &cfg_bts_rtp_hr_format_cmd); install_element(BTS_NODE, &cfg_bts_band_cmd); install_element(BTS_NODE, &cfg_description_cmd); install_element(BTS_NODE, &cfg_no_description_cmd); diff --git a/tests/osmo-bts.vty b/tests/osmo-bts.vty index 7f2e78c..356f2aa 100644 --- a/tests/osmo-bts.vty +++ b/tests/osmo-bts.vty @@ -235,6 +235,7 @@ rtp socket-priority <0-255> rtp continuous-streaming no rtp continuous-streaming + rtp hr-format (rfc5993|ts101318) band (450|GSM450|480|GSM480|750|GSM750|810|GSM810|850|GSM850|900|GSM900|1800|DCS1800|1900|PCS1900) description .TEXT no description -- To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/32970 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bts Gerrit-Branch: master Gerrit-Change-Id: I168191874a062429a57904511a1e89e3f588732e Gerrit-Change-Number: 32970 Gerrit-PatchSet: 1 Gerrit-Owner: falconia <fal...@freecalypso.org> Gerrit-MessageType: newchange