Projects
osmocom:master
osmo-msc
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 113
View file
commit_22d4f356462f2d0872e2454c33b2b9fff4603c61.txt
Added
View file
commit_dd37f2cfdf4cb8fb97469f1c570eae72e14eb28d.txt
Deleted
View file
osmo-msc_1.11.1.64.dd37f.dsc -> osmo-msc_1.11.1.65.22d4f3.dsc
Changed
@@ -2,7 +2,7 @@ Source: osmo-msc Binary: osmo-msc, osmo-msc-dbg, osmo-msc-doc Architecture: any all -Version: 1.11.1.64.dd37f +Version: 1.11.1.65.22d4f3 Maintainer: Osmocom team <openbsc@lists.osmocom.org> Homepage: https://osmocom.org/projects/osmomsc Standards-Version: 3.9.8 @@ -14,8 +14,8 @@ osmo-msc-dbg deb debug extra arch=any osmo-msc-doc deb doc optional arch=all Checksums-Sha1: - c86484719a4c8accae123177a039fcac5c9664a7 386940 osmo-msc_1.11.1.64.dd37f.tar.xz + c673e4ad78bf33ac9b1d2a60cde5f6553343b72e 387412 osmo-msc_1.11.1.65.22d4f3.tar.xz Checksums-Sha256: - 4449c1b5b3f056b46f5148aeb7c6c4b13d74f8fb31ec64ec5ab64784bc3d4e28 386940 osmo-msc_1.11.1.64.dd37f.tar.xz + 9e57c934d973125cfab8e5dfd2fe1a044c217f0df9a98a552cab4b24386349c8 387412 osmo-msc_1.11.1.65.22d4f3.tar.xz Files: - c50ce4d2c7676df41dbad81a4dc9c70c 386940 osmo-msc_1.11.1.64.dd37f.tar.xz + f53c002ad7e61ee0bd2fb55f428c7761 387412 osmo-msc_1.11.1.65.22d4f3.tar.xz
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/.tarball-version -> osmo-msc_1.11.1.65.22d4f3.tar.xz/.tarball-version
Changed
@@ -1 +1 @@ -1.11.1.64-dd37f +1.11.1.65-22d4f3
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/debian/changelog -> osmo-msc_1.11.1.65.22d4f3.tar.xz/debian/changelog
Changed
@@ -1,8 +1,8 @@ -osmo-msc (1.11.1.64.dd37f) unstable; urgency=medium +osmo-msc (1.11.1.65.22d4f3) unstable; urgency=medium * Automatically generated changelog entry for building the Osmocom master feed - -- Osmocom OBS scripts <info@osmocom.org> Tue, 18 Jun 2024 11:00:44 +0000 + -- Osmocom OBS scripts <info@osmocom.org> Tue, 25 Jun 2024 00:49:59 +0000 osmo-msc (1.11.1) unstable; urgency=medium
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/include/osmocom/msc/msc_a.h -> osmo-msc_1.11.1.65.22d4f3.tar.xz/include/osmocom/msc/msc_a.h
Changed
@@ -137,6 +137,8 @@ /* There may be up to 7 incoming calls for this subscriber. This is the currently serviced voice call, * as in, the other person the subscriber is currently talking to. */ struct gsm_trans *active_trans; + + struct osmo_timer_list assignment_request_pending; } cc; struct msc_ho_state ho;
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/src/libmsc/gsm_04_08_cc.c -> osmo-msc_1.11.1.65.22d4f3.tar.xz/src/libmsc/gsm_04_08_cc.c
Changed
@@ -772,7 +772,8 @@ const struct gsm_mncc_bearer_cap *bcap) { struct codec_filter *codecs = &trans->cc.codecs; - struct call_leg *cl = trans->msc_a ? trans->msc_a->cc.call_leg : NULL; + struct msc_a *msc_a = trans->msc_a; + struct call_leg *cl = msc_a ? msc_a->cc.call_leg : NULL; struct rtp_stream *rtp_cn = cl ? cl->rtpRTP_TO_CN : NULL; if (sdp0) { @@ -818,6 +819,16 @@ return; } + if (msc_a && osmo_timer_pending(&msc_a->cc.assignment_request_pending)) { + /* Still waiting for an Assignment Response. + * For example, when the remote call leg sends some MNCC with SDP with a mismatching codec, + * we start Re-Assignment to match that codec: we send an Assignment Request and wait for a response. + * When we receive another MNCC with SDP from the remote call leg before this Re-Assignment is + * completed, we must not trigger *another* Assignment Request, but instead wait for the Re-Assignment + * to come back with a response first. */ + return; + } + /* We've already completed Assignment of a voice channel (some time ago), and now the remote side has changed * to a mismatching codec (list). Try to re-assign this side to a matching codec. */ LOG_TRANS(trans, LOGL_INFO, "Remote call leg mismatches assigned codec: %s\n",
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/src/libmsc/msc_a.c -> osmo-msc_1.11.1.65.22d4f3.tar.xz/src/libmsc/msc_a.c
Changed
@@ -673,6 +673,8 @@ rtp_to_ran->codecs_known ? &rtp_to_ran->codecs : NULL, NULL); } +static void assignment_request_timeout_cb(void *data); + /* The MGW has given us a local IP address for the RAN side. Ready to start the Assignment of a voice channel. */ void msc_a_tx_assignment_cmd(struct msc_a *msc_a) { @@ -680,6 +682,19 @@ struct gsm_trans *cc_trans = msc_a->cc.active_trans; struct gsm0808_channel_type channel_type; + /* Do not dispatch another Assignment Command before an earlier assignment is completed. This is a sanity + * safeguard, ideally callers should not even invoke this function when an Assignment is already ongoing. + * (There is no osmo_fsm for Assignment / the CC trans code; when we refactor that one day, this timer should be + * an FSM state.) */ + if (osmo_timer_pending(&msc_a->cc.assignment_request_pending)) { + LOG_MSC_A(msc_a, LOGL_ERROR, + "Not transmitting Assignment, still waiting for the response to an earlier Assignment\n"); + return; + } + osmo_timer_setup(&msc_a->cc.assignment_request_pending, assignment_request_timeout_cb, msc_a); + osmo_timer_schedule(&msc_a->cc.assignment_request_pending, + osmo_tdef_get(msc_a->c.ran->tdefs, -37, OSMO_TDEF_S, 10), 0); + if (!cc_trans) { LOG_MSC_A(msc_a, LOGL_ERROR, "No CC transaction active\n"); call_leg_release(msc_a->cc.call_leg); @@ -943,6 +958,9 @@ vlr_subscr_enable_expire_lu(vsub); } + /* We no longer care about assignment responses. */ + osmo_timer_del(&msc_a->cc.assignment_request_pending); + /* If we're closing in a middle of a trans, we need to clean up */ trans_conn_closed(msc_a); @@ -1051,6 +1069,7 @@ vsub->msc_conn_ref = NULL; osmo_timer_del(&msc_a->lu_delay_timer); + osmo_timer_del(&msc_a->cc.assignment_request_pending); } const struct value_string msc_a_fsm_event_names = { @@ -1479,6 +1498,9 @@ const struct gsm0808_speech_codec *codec_if_known = ac->assignment_complete.codec_present ? &ac->assignment_complete.codec : NULL; + /* Pending assignment has worked out. We're no longer waiting for a response now. */ + osmo_timer_del(&msc_a->cc.assignment_request_pending); + /* For a voice group call, handling is performed by VGCS FSM */ gcc_trans = trans_find_by_type(msc_a, TRANS_GCC); if (gcc_trans) { @@ -1582,10 +1604,15 @@ } } +/* Invoked when Assignment has failed, either by a failure response, or by timeout. When failing on timeout, + * pass af == NULL. */ static void msc_a_up_call_assignment_failure(struct msc_a *msc_a, const struct ran_msg *af) { struct gsm_trans *trans; + /* Pending assignment has failed. We're no longer waiting for a response now. */ + osmo_timer_del(&msc_a->cc.assignment_request_pending); + /* For a normal voice call, there will be an rtp_stream FSM. */ if (msc_a->cc.call_leg && msc_a->cc.call_leg->rtpRTP_TO_RAN) { LOG_MSC_A(msc_a, LOGL_ERROR, "Assignment Failure, releasing call\n"); @@ -1617,6 +1644,12 @@ msc_a_release_cn(msc_a); } +static void assignment_request_timeout_cb(void *data) +{ + struct msc_a *msc_a = data; + msc_a_up_call_assignment_failure(msc_a, NULL); +} + static void msc_a_up_classmark_update(struct msc_a *msc_a, const struct osmo_gsm48_classmark *classmark, struct osmo_gsm48_classmark *dst) {
View file
osmo-msc_1.11.1.64.dd37f.tar.xz/src/libmsc/ran_infra.c -> osmo-msc_1.11.1.65.22d4f3.tar.xz/src/libmsc/ran_infra.c
Changed
@@ -47,6 +47,8 @@ { .T = -36, .default_val = 0, .unit = OSMO_TDEF_MS, \ .desc = "Delay connection release after LU. Useful to optimize an SMSC to dispatch " \ "pending messages within the initial connection." }, \ + { .T = -37, .default_val = 10, \ + .desc = "Voice channel Assignment sanity timeout, when no response is received (should never happen)." }, \ struct osmo_tdef msc_tdefs_geran = { RAN_TDEFS
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
.