Projects
osmocom:master
osmo-bts
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 64
View file
osmo-bts.spec
Changed
@@ -14,13 +14,13 @@ Name: osmo-bts Requires: osmocom-master -Version: 1.6.0.43.ac23 +Version: 1.6.0.52.2551 Release: 0 Summary: Osmocom BTS-Side code (Abis, scheduling) License: AGPL-3.0-or-later AND GPL-2.0-only Group: Productivity/Telephony/Servers URL: https://osmocom.org/projects/osmobts -Source: osmo-bts_1.6.0.43.ac23.tar.xz +Source: osmo-bts_1.6.0.52.2551.tar.xz Source1: rpmlintrc BuildRequires: autoconf BuildRequires: automake
View file
commit_2551882c1cc4de0b4168e4c25f4f6bc0ad8cdbd5.txt
Added
View file
commit_ac23ce2e03f09a3fae72e2d2f28d8d4b092543af.txt
Deleted
View file
osmo-bts_1.6.0.43.ac23.dsc -> osmo-bts_1.6.0.52.2551.dsc
Changed
@@ -2,7 +2,7 @@ Source: osmo-bts Binary: osmo-bts, osmo-bts-trx, osmo-bts-trx-dbg, osmo-bts-virtual, osmo-bts-virtual-dbg, osmo-bts-doc Architecture: any all -Version: 1.6.0.43.ac23 +Version: 1.6.0.52.2551 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://projects.osmocom.org/projects/osmobts Standards-Version: 3.9.8 @@ -17,8 +17,8 @@ osmo-bts-virtual deb net optional arch=any osmo-bts-virtual-dbg deb debug extra arch=any Checksums-Sha1: - 19828da28b48e13c1e417cb6ba30dbdbb97e8a28 462656 osmo-bts_1.6.0.43.ac23.tar.xz + da3f8747815aaedc23bd12316034e81a925cccd6 463220 osmo-bts_1.6.0.52.2551.tar.xz Checksums-Sha256: - 411b584d954a09fbba6fa546976f0abdfec852de92585df62f3365fc3a70cfdb 462656 osmo-bts_1.6.0.43.ac23.tar.xz + fed011a7aaaa8b48cebee58b90bdfc539a52d632c7b6a138dfa4788b69bbb331 463220 osmo-bts_1.6.0.52.2551.tar.xz Files: - 5bc2f55075cb21b33388ca3dce39007a 462656 osmo-bts_1.6.0.43.ac23.tar.xz + e99342c7c1d5563aea1ac2d7c73ee0bc 463220 osmo-bts_1.6.0.52.2551.tar.xz
View file
osmo-bts_1.6.0.43.ac23.tar.xz/.tarball-version -> osmo-bts_1.6.0.52.2551.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -1.6.0.43-ac23 +1.6.0.52-2551
View file
osmo-bts_1.6.0.43.ac23.tar.xz/TODO-RELEASE -> osmo-bts_1.6.0.52.2551.tar.xz/TODO-RELEASE
Changed
@@ -7,4 +7,5 @@ # If any interfaces have been added since the last public release: c:r:a + 1. # If any interfaces have been removed or changed since the last public release: c:r:0. #library what description / commit summary line +libosmocodec >1.8.0 osmo_efr_check_sid() new function libosmogsm >1.8.0 <osmocom/gsm/protocol/gsm_44_060.h> added
View file
osmo-bts_1.6.0.43.ac23.tar.xz/debian/changelog -> osmo-bts_1.6.0.52.2551.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -osmo-bts (1.6.0.43.ac23) unstable; urgency=medium +osmo-bts (1.6.0.52.2551) unstable; urgency=medium * Automatically generated changelog entry for building the Osmocom master feed - -- Osmocom OBS scripts <info@osmocom.org> Wed, 29 Mar 2023 10:22:00 +0000 + -- Osmocom OBS scripts <info@osmocom.org> Wed, 29 Mar 2023 12:02:52 +0000 osmo-bts (1.6.0) unstable; urgency=medium
View file
osmo-bts_1.6.0.43.ac23.tar.xz/include/osmo-bts/bts.h -> osmo-bts_1.6.0.52.2551.tar.xz/include/osmo-bts/bts.h
Changed
@@ -314,6 +314,8 @@ int rtp_ip_dscp; int rtp_priority; + bool rtp_nogaps_mode; /* emit RTP stream without any gaps */ + struct { uint8_t ciphers; /* flags A5/1==0x1, A5/2==0x2, A5/3==0x4 */ } support;
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/common/l1sap.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/common/l1sap.c
Changed
@@ -1247,6 +1247,18 @@ static bool rtppayload_is_valid(struct gsm_lchan *lchan, struct msgb *resp_msg) { + /* If rtp continuous-streaming is enabled, we shall emit RTP packets + * with zero-length payloads as BFI markers. In a TrFO scenario such + * RTP packets sent by call leg A will be received by call leg B, + * hence we need to handle them gracefully. For the purposes of a BTS + * that runs on its own TDMA timing and does not need timing ticks from + * an incoming RTP stream, the correct action upon receiving such + * timing-tick-only RTP packets should be the same as when receiving + * no RTP packet at all. The simplest way to produce that behavior + * is to treat zero-length RTP payloads as invalid. */ + if (resp_msg->len == 0) + return false; + /* Avoid sending bw-efficient AMR to lower layers, most bts models * don't support it. */ if (lchan->tch_mode == GSM48_CMODE_SPEECH_AMR && @@ -1567,6 +1579,21 @@ return 1; } +/* a helper function for the logic in l1sap_tch_ind() */ +static void send_ul_rtp_packet(struct gsm_lchan *lchan, uint32_t fn, + const uint8_t *rtp_pl, uint16_t rtp_pl_len) +{ + if (lchan->abis_ip.osmux.use) { + lchan_osmux_send_frame(lchan, rtp_pl, rtp_pl_len, + fn_ms_adj(fn, lchan), lchan->rtp_tx_marker); + } else if (lchan->abis_ip.rtp_socket) { + osmo_rtp_send_frame_ext(lchan->abis_ip.rtp_socket, + rtp_pl, rtp_pl_len, fn_ms_adj(fn, lchan), lchan->rtp_tx_marker); + } + /* Only clear the marker bit once we have sent a RTP packet with it */ + lchan->rtp_tx_marker = false; +} + /* 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) @@ -1605,13 +1632,7 @@ * good enough. */ if (msg->len && tch_ind->lqual_cb >= bts->min_qual_norm) { /* hand msg to RTP code for transmission */ - if (lchan->abis_ip.osmux.use) { - lchan_osmux_send_frame(lchan, msg->data, msg->len, - fn_ms_adj(fn, lchan), lchan->rtp_tx_marker); - } else if (lchan->abis_ip.rtp_socket) { - osmo_rtp_send_frame_ext(lchan->abis_ip.rtp_socket, - msg->data, msg->len, fn_ms_adj(fn, lchan), lchan->rtp_tx_marker); - } + 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 */ @@ -1619,16 +1640,20 @@ /* Return 1 to signal that we're still using msg and it should not be freed */ return 1; } - /* Only clear the marker bit once we have sent a RTP packet with it */ - lchan->rtp_tx_marker = false; } else { - DEBUGPGT(DRTP, &g_time, "Skipping RTP frame with lost payload (chan_nr=0x%02x)\n", - chan_nr); - if (lchan->abis_ip.osmux.use) - lchan_osmux_skipped_frame(lchan, fn_ms_adj(fn, lchan)); - else if (lchan->abis_ip.rtp_socket) - osmo_rtp_skipped_frame(lchan->abis_ip.rtp_socket, fn_ms_adj(fn, lchan)); - lchan->rtp_tx_marker = true; + /* Are we in rtp continuous-stream special mode? If so, send + * out a BFI packet as zero-length RTP payload. */ + if (bts->rtp_nogaps_mode) { + send_ul_rtp_packet(lchan, fn, msg->data, msg->len); + } else { + DEBUGPGT(DRTP, &g_time, "Skipping RTP frame with lost payload (chan_nr=0x%02x)\n", + chan_nr); + if (lchan->abis_ip.osmux.use) + lchan_osmux_skipped_frame(lchan, fn_ms_adj(fn, lchan)); + else if (lchan->abis_ip.rtp_socket) + osmo_rtp_skipped_frame(lchan->abis_ip.rtp_socket, fn_ms_adj(fn, lchan)); + lchan->rtp_tx_marker = true; + } } lchan->tch.last_fn = fn;
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/common/vty.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/common/vty.c
Changed
@@ -422,6 +422,8 @@ vty_out(vty, " rtp ip-dscp %d%s", bts->rtp_ip_dscp, VTY_NEWLINE); if (bts->rtp_priority != -1) 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, " 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), @@ -781,6 +783,28 @@ return CMD_SUCCESS; } +DEFUN(cfg_bts_rtp_cont_stream, + cfg_bts_rtp_cont_stream_cmd, + "rtp continuous-streaming", + RTP_STR "Always emit an RTP packet every 20 ms\n") +{ + struct gsm_bts *bts = vty->index; + + bts->rtp_nogaps_mode = true; + return CMD_SUCCESS; +} + +DEFUN(cfg_bts_no_rtp_cont_stream, + cfg_bts_no_rtp_cont_stream_cmd, + "no rtp continuous-streaming", + NO_STR RTP_STR "Always emit an RTP packet every 20 ms\n") +{ + struct gsm_bts *bts = vty->index; + + bts->rtp_nogaps_mode = false; + return CMD_SUCCESS; +} + #define PAG_STR "Paging related parameters\n" DEFUN_ATTR(cfg_bts_paging_queue_size, @@ -2681,6 +2705,8 @@ install_element(BTS_NODE, &cfg_bts_rtp_port_range_cmd); install_element(BTS_NODE, &cfg_bts_rtp_ip_dscp_cmd); 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_band_cmd); install_element(BTS_NODE, &cfg_description_cmd); install_element(BTS_NODE, &cfg_no_description_cmd);
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-lc15/l1_if.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-lc15/l1_if.c
Changed
@@ -1248,7 +1248,6 @@ Litecell15_Prim_t *sysp = msgb_sysprim(resp); GsmL1_Status_t status; int on = 0; - unsigned int i; if (sysp->id == Litecell15_PrimId_ActivateRfCnf) on = 1; @@ -1279,8 +1278,8 @@ } else { if (bts_lc15->led_ctrl_mode == LC15_LED_CONTROL_BTS) bts_update_status(BTS_STATUS_RF_ACTIVE, 0); - osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_DISABLE, NULL); - osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_DISABLE, NULL); + osmo_fsm_inst_dispatch(trx->mo.fi, NM_EV_DISABLE, NULL); + osmo_fsm_inst_dispatch(trx->bb_transc.mo.fi, NM_EV_DISABLE, NULL); } msgb_free(resp);
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-lc15/oml.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-lc15/oml.c
Changed
@@ -945,7 +945,7 @@ int j; LOGP(DL1C, LOGL_INFO, "%s: %s tch_mode=0x%02x\n", - gsm_lchan_name(lchan), __FUNCTION__, lchan->tch_mode); + gsm_lchan_name(lchan), __func__, lchan->tch_mode); switch (lchan->tch_mode) { case GSM48_CMODE_SIGN: @@ -973,7 +973,9 @@ case GSM48_CMODE_SPEECH_AMR: lch_par->tch.tchPlType = GsmL1_TchPlType_Amr; set_payload_format(lch_par); - lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; /* FIXME? */ + /* At call set-up, after every successful handover and after a channel mode modify, the + * default phase (odd) shall be used in downlink direction. */ + lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; lch_par->tch.amrInitCodecMode = amr_get_initial_mode(lchan); /* initialize to clean state */ @@ -2008,9 +2010,6 @@ */ int l1if_rsl_chan_mod(struct gsm_lchan *lchan) { - const struct lchan_sapis *s4l = &sapis_for_lchanlchan->type; - unsigned int i; - if (lchan->ho.active == HANDOVER_NONE) return -1;
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-oc2g/oml.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-oc2g/oml.c
Changed
@@ -960,7 +960,7 @@ int j; LOGP(DL1C, LOGL_INFO, "%s: %s tch_mode=0x%02x\n", - gsm_lchan_name(lchan), __FUNCTION__, lchan->tch_mode); + gsm_lchan_name(lchan), __func__, lchan->tch_mode); switch (lchan->tch_mode) { case GSM48_CMODE_SIGN: @@ -988,7 +988,9 @@ case GSM48_CMODE_SPEECH_AMR: lch_par->tch.tchPlType = GsmL1_TchPlType_Amr; set_payload_format(lch_par); - lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; /* FIXME? */ + /* At call set-up, after every successful handover and after a channel mode modify, the + * default phase (odd) shall be used in downlink direction. */ + lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; lch_par->tch.amrInitCodecMode = amr_get_initial_mode(lchan); /* initialize to clean state */ @@ -1935,7 +1937,7 @@ break; case NM_OC_CHANNEL: ts = (struct gsm_bts_trx_ts*) obj; - rc = ts_opstart(obj); + rc = ts_opstart(ts); break; case NM_OC_GPRS_NSE: case NM_OC_GPRS_CELL: @@ -2012,9 +2014,6 @@ */ int l1if_rsl_chan_mod(struct gsm_lchan *lchan) { - const struct lchan_sapis *s4l = &sapis_for_lchanlchan->type; - unsigned int i; - if (lchan->ho.active == HANDOVER_NONE) return -1;
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-octphy/l1_oml.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-octphy/l1_oml.c
Changed
@@ -259,7 +259,7 @@ int j; LOGP(DL1C, LOGL_INFO, "%s: %s tch_mode=0x%02x\n", - gsm_lchan_name(lchan), __FUNCTION__, lchan->tch_mode); + gsm_lchan_name(lchan), __func__, lchan->tch_mode); switch (lchan->tch_mode) { case GSM48_CMODE_SIGN:
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-sysmo/oml.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-sysmo/oml.c
Changed
@@ -953,7 +953,7 @@ int j; LOGP(DL1C, LOGL_INFO, "%s: %s tch_mode=0x%02x\n", - gsm_lchan_name(lchan), __FUNCTION__, lchan->tch_mode); + gsm_lchan_name(lchan), __func__, lchan->tch_mode); switch (lchan->tch_mode) { case GSM48_CMODE_SIGN: @@ -981,7 +981,9 @@ case GSM48_CMODE_SPEECH_AMR: lch_par->tch.tchPlType = GsmL1_TchPlType_Amr; set_payload_format(lch_par); - lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; /* FIXME? */ + /* At call set-up, after every successful handover and after a channel mode modify, the + * default phase (odd) shall be used in downlink direction. */ + lch_par->tch.amrCmiPhase = GsmL1_AmrCmiPhase_Odd; lch_par->tch.amrInitCodecMode = amr_get_initial_mode(lchan); /* initialize to clean state */
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-sysmo/tch.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-sysmo/tch.c
Changed
@@ -131,12 +131,8 @@ cur0 |= 0xC0; #endif /* USE_L1_RTP_MODE */ - enum osmo_amr_type ft; - enum osmo_amr_quality bfi; - uint8_t cmr; - int8_t sti, cmi; - osmo_amr_rtp_dec(l1_payload, payload_len, &cmr, &cmi, &ft, &bfi, &sti); - lchan_set_marker(ft == AMR_GSM_EFR_SID, lchan); + + lchan_set_marker(osmo_efr_check_sid(l1_payload, payload_len), lchan); return msg; } @@ -403,7 +399,10 @@ *payload_type = GsmL1_TchPlType_Efr; rc = rtppayload_to_l1_efr(l1_payload, rtp_pl, rtp_pl_len); - /* FIXME: detect and save EFR SID */ + if (rc && lchan->ts->trx->bts->dtxd) + is_sid = osmo_efr_check_sid(rtp_pl, rtp_pl_len); + if (is_sid) + dtx_cache_payload(lchan, rtp_pl, rtp_pl_len, fn, -1); break; #endif case GSM48_CMODE_SPEECH_AMR:
View file
osmo-bts_1.6.0.43.ac23.tar.xz/src/osmo-bts-trx/sched_lchan_tchf.c -> osmo-bts_1.6.0.52.2551.tar.xz/src/osmo-bts-trx/sched_lchan_tchf.c
Changed
@@ -150,6 +150,8 @@ break; case GSM48_CMODE_SPEECH_EFR: /* EFR */ rc = gsm0503_tch_fr_decode(tch_data, *bursts_p, 1, 1, &n_errors, &n_bits_total); + if (rc == GSM_EFR_BYTES) /* only for valid *speech* frames */ + lchan_set_marker(osmo_efr_check_sid(tch_data, rc), lchan); /* DTXu */ break; case GSM48_CMODE_SPEECH_AMR: /* AMR */ /* the first FN 0,8,17 defines that CMI is included in frame,
View file
osmo-bts_1.6.0.43.ac23.tar.xz/tests/agch/agch_test.c -> osmo-bts_1.6.0.52.2551.tar.xz/tests/agch/agch_test.c
Changed
@@ -124,13 +124,13 @@ for (round = 1; round <= num_rounds; round++) { for (idx = 0; idx < num_ima_per_round; idx++) { - msg = msgb_alloc(GSM_MACBLOCK_LEN, __FUNCTION__); + msg = msgb_alloc(GSM_MACBLOCK_LEN, __func__); put_imm_ass(msg, ++count); bts_agch_enqueue(bts, msg); imm_ass_count++; } for (idx = 0; idx < num_rej_per_round; idx++) { - msg = msgb_alloc(GSM_MACBLOCK_LEN, __FUNCTION__); + msg = msgb_alloc(GSM_MACBLOCK_LEN, __func__); put_imm_ass_rej(msg, ++count, 10); bts_agch_enqueue(bts, msg); imm_ass_rej_count++;
View file
osmo-bts_1.6.0.43.ac23.tar.xz/tests/osmo-bts.vty -> osmo-bts_1.6.0.52.2551.tar.xz/tests/osmo-bts.vty
Changed
@@ -233,6 +233,8 @@ rtp port-range <1-65534> <1-65534> rtp ip-dscp <0-63> rtp socket-priority <0-255> + rtp continuous-streaming + no rtp continuous-streaming band (450|GSM450|480|GSM480|750|GSM750|810|GSM810|850|GSM850|900|GSM900|1800|DCS1800|1900|PCS1900) description .TEXT no description
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.