<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13931">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">fix regression: fix internal MNCC operation<br><br>While developing the inter-MSC handover refactoring, I was annoyed by the fact<br>that mncc_tx_to_cc() receives an MNCC message struct containing a msg_type, as<br>well as a separate msg_type argument, which may deviate from each other. So, as<br>a first step I wanted to make sure that all callers send identical values for<br>both by inserting an OSMO_ASSERT(msg_type == msg->msg_type). Later I was going<br>to remove the separate msg_type argument.<br><br>I then forgot to<br>- carry on to remove the argument and<br>- to actually test with internal MNCC (it so happens that all of our ttcn3<br> tests also use external MNCC).<br><br>As a result, the "large refactoring" patch for inter-MSC Handover breaks<br>internal MNCC operation.<br><br>Fix that: remove the separate msg_type argument and make sure that all callers<br>of mncc_tx_to_cc() indeed pass the desired msg_type in msg->msg_type, and hence<br>also remove the odd duality of arguments.<br><br>Various functions in mncc_builtin.c also exhibit this separate msg_type<br>argument, which are all unused and make absolutely no sense. Remove those as<br>well.<br><br>Related: OS#3989<br>Change-Id: I966ce764796982709ea3312e76988a95257acb8d<br>---<br>M include/osmocom/msc/gsm_04_08.h<br>M src/libmsc/gsm_04_08_cc.c<br>M src/libmsc/mncc_builtin.c<br>M src/libmsc/mncc_sock.c<br>M tests/msc_vlr/msc_vlr_test_call.c<br>M tests/msc_vlr/msc_vlr_tests.c<br>6 files changed, 57 insertions(+), 39 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/31/13931/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/gsm_04_08.h b/include/osmocom/msc/gsm_04_08.h</span><br><span>index 47747cb..661da42 100644</span><br><span>--- a/include/osmocom/msc/gsm_04_08.h</span><br><span>+++ b/include/osmocom/msc/gsm_04_08.h</span><br><span>@@ -45,7 +45,7 @@</span><br><span> int gsm48_send_rr_ass_cmd(struct gsm_lchan *dest_lchan, struct gsm_lchan *lchan, uint8_t power_class);</span><br><span> int gsm48_send_ho_cmd(struct gsm_lchan *old_lchan, struct gsm_lchan *new_lchan, uint8_t power_command, uint8_t ho_ref);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-int mncc_tx_to_cc(struct gsm_network *net, int msg_type, void *arg);</span><br><span style="color: hsl(120, 100%, 40%);">+int mncc_tx_to_cc(struct gsm_network *net, void *arg);</span><br><span> </span><br><span> /* convert a ASCII phone number to call-control BCD */</span><br><span> int encode_bcd_number(uint8_t *bcd_lv, uint8_t max_len,</span><br><span>diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c</span><br><span>index 0624d56..2869bba 100644</span><br><span>--- a/src/libmsc/gsm_04_08_cc.c</span><br><span>+++ b/src/libmsc/gsm_04_08_cc.c</span><br><span>@@ -2010,11 +2010,10 @@</span><br><span> }</span><br><span> </span><br><span> /* Demux incoming genuine calls to GSM CC from MNCC forwarding for inter-MSC handover */</span><br><span style="color: hsl(0, 100%, 40%);">-int mncc_tx_to_cc(struct gsm_network *net, int msg_type, void *arg)</span><br><span style="color: hsl(120, 100%, 40%);">+int mncc_tx_to_cc(struct gsm_network *net, void *arg)</span><br><span> {</span><br><span> const union mncc_msg *msg = arg;</span><br><span> struct mncc_call *mncc_call = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_ASSERT(msg_type == msg->msg_type);</span><br><span> </span><br><span> if (msg->msg_type == MNCC_SETUP_REQ) {</span><br><span> /* Incoming call to forward for inter-MSC Handover? */</span><br><span>diff --git a/src/libmsc/mncc_builtin.c b/src/libmsc/mncc_builtin.c</span><br><span>index 6dd7e35..5754976 100644</span><br><span>--- a/src/libmsc/mncc_builtin.c</span><br><span>+++ b/src/libmsc/mncc_builtin.c</span><br><span>@@ -67,7 +67,7 @@</span><br><span> }</span><br><span> </span><br><span> /* on incoming call, look up database and send setup to remote subscr. */</span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_setup_ind(struct gsm_call *call, int msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_setup_ind(struct gsm_call *call,</span><br><span> struct gsm_mncc *setup)</span><br><span> {</span><br><span> struct gsm_mncc mncc;</span><br><span>@@ -116,29 +116,33 @@</span><br><span> /* send call proceeding */</span><br><span> memset(&mncc, 0, sizeof(struct gsm_mncc));</span><br><span> mncc.callref = call->callref;</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.msg_type = MNCC_CALL_PROC_REQ;</span><br><span> DEBUGCC(call, remote, "Accepting call.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_CALL_PROC_REQ, &mncc);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, &mncc);</span><br><span> </span><br><span> /* modify mode */</span><br><span> memset(&mncc, 0, sizeof(struct gsm_mncc));</span><br><span> mncc.callref = call->callref;</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.msg_type = MNCC_LCHAN_MODIFY;</span><br><span> DEBUGCC(call, remote, "Modify channel mode.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_LCHAN_MODIFY, &mncc);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, &mncc);</span><br><span> </span><br><span> /* send setup to remote */</span><br><span> // setup->fields |= MNCC_F_SIGNAL;</span><br><span> // setup->signal = GSM48_SIGNAL_DIALTONE;</span><br><span> setup->callref = remote->callref;</span><br><span style="color: hsl(120, 100%, 40%);">+ setup->msg_type = MNCC_SETUP_REQ;</span><br><span> DEBUGCC(call, remote, "Forwarding SETUP to remote.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return mncc_tx_to_cc(remote->net, MNCC_SETUP_REQ, setup);</span><br><span style="color: hsl(120, 100%, 40%);">+ return mncc_tx_to_cc(remote->net, setup);</span><br><span> </span><br><span> out_reject:</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_REJ_REQ, &mncc);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc.msg_type = MNCC_REJ_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, &mncc);</span><br><span> free_call(call);</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_alert_ind(struct gsm_call *call, int msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_alert_ind(struct gsm_call *call,</span><br><span> struct gsm_mncc *alert)</span><br><span> {</span><br><span> struct gsm_call *remote;</span><br><span>@@ -147,11 +151,12 @@</span><br><span> if (!(remote = get_call_ref(call->remote_ref)))</span><br><span> return 0;</span><br><span> alert->callref = remote->callref;</span><br><span style="color: hsl(120, 100%, 40%);">+ alert->msg_type = MNCC_ALERT_REQ;</span><br><span> DEBUGCC(call, remote, "Forwarding ALERT to remote.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return mncc_tx_to_cc(remote->net, MNCC_ALERT_REQ, alert);</span><br><span style="color: hsl(120, 100%, 40%);">+ return mncc_tx_to_cc(remote->net, alert);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_notify_ind(struct gsm_call *call, int msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_notify_ind(struct gsm_call *call,</span><br><span> struct gsm_mncc *notify)</span><br><span> {</span><br><span> struct gsm_call *remote;</span><br><span>@@ -160,11 +165,12 @@</span><br><span> if (!(remote = get_call_ref(call->remote_ref)))</span><br><span> return 0;</span><br><span> notify->callref = remote->callref;</span><br><span style="color: hsl(120, 100%, 40%);">+ notify->msg_type = MNCC_NOTIFY_REQ;</span><br><span> DEBUGCC(call, remote, "Forwarding NOTIF to remote.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- return mncc_tx_to_cc(remote->net, MNCC_NOTIFY_REQ, notify);</span><br><span style="color: hsl(120, 100%, 40%);">+ return mncc_tx_to_cc(remote->net, notify);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_setup_cnf(struct gsm_call *call, int msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_setup_cnf(struct gsm_call *call,</span><br><span> struct gsm_mncc *connect)</span><br><span> {</span><br><span> struct gsm_mncc connect_ack;</span><br><span>@@ -173,26 +179,29 @@</span><br><span> </span><br><span> /* acknowledge connect */</span><br><span> memset(&connect_ack, 0, sizeof(struct gsm_mncc));</span><br><span style="color: hsl(120, 100%, 40%);">+ connect_ack.msg_type = MNCC_SETUP_COMPL_REQ;</span><br><span> connect_ack.callref = call->callref;</span><br><span> DEBUGP(DMNCC, "(call %x) Acknowledge SETUP.\n", call->callref);</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_SETUP_COMPL_REQ, &connect_ack);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, &connect_ack);</span><br><span> </span><br><span> /* send connect message to remote */</span><br><span> if (!(remote = get_call_ref(call->remote_ref)))</span><br><span> return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ connect->msg_type = MNCC_SETUP_RSP;</span><br><span> connect->callref = remote->callref;</span><br><span> DEBUGCC(call, remote, "Sending CONNECT to remote.\n");</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(remote->net, MNCC_SETUP_RSP, connect);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(remote->net, connect);</span><br><span> </span><br><span> /* bridge tch */</span><br><span style="color: hsl(120, 100%, 40%);">+ bridge.msg_type = MNCC_BRIDGE;</span><br><span> bridge.callref[0] = call->callref;</span><br><span> bridge.callref[1] = call->remote_ref;</span><br><span> DEBUGCC(call, remote, "Bridging with remote.\n");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- return mncc_tx_to_cc(call->net, MNCC_BRIDGE, &bridge);</span><br><span style="color: hsl(120, 100%, 40%);">+ return mncc_tx_to_cc(call->net, &bridge);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_disc_ind(struct gsm_call *call, int msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_disc_ind(struct gsm_call *call,</span><br><span> struct gsm_mncc *disc)</span><br><span> {</span><br><span> struct gsm_call *remote;</span><br><span>@@ -200,18 +209,20 @@</span><br><span> /* send release */</span><br><span> DEBUGP(DMNCC, "(call %x) Releasing call with cause %d\n",</span><br><span> call->callref, disc->cause.value);</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_REL_REQ, disc);</span><br><span style="color: hsl(120, 100%, 40%);">+ disc->msg_type = MNCC_REL_REQ;</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, disc);</span><br><span> </span><br><span> /* send disc to remote */</span><br><span> if (!(remote = get_call_ref(call->remote_ref))) {</span><br><span> return 0;</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ disc->msg_type = MNCC_DISC_REQ;</span><br><span> disc->callref = remote->callref;</span><br><span> DEBUGCC(call, remote, "Disconnecting remote with cause %d\n", disc->cause.value);</span><br><span style="color: hsl(0, 100%, 40%);">- return mncc_tx_to_cc(remote->net, MNCC_DISC_REQ, disc);</span><br><span style="color: hsl(120, 100%, 40%);">+ return mncc_tx_to_cc(remote->net, disc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_rel_ind(struct gsm_call *call, int msg_type, struct gsm_mncc *rel)</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_rel_ind(struct gsm_call *call, struct gsm_mncc *rel)</span><br><span> {</span><br><span> struct gsm_call *remote;</span><br><span> </span><br><span>@@ -221,6 +232,7 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rel->msg_type = MNCC_REL_REQ;</span><br><span> rel->callref = remote->callref;</span><br><span> DEBUGCC(call, remote, "Releasing remote with cause %d\n", rel->cause.value);</span><br><span> </span><br><span>@@ -230,12 +242,12 @@</span><br><span> * it and then we will end up with a double free and a crash</span><br><span> */</span><br><span> free_call(call);</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(remote->net, MNCC_REL_REQ, rel);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(remote->net, rel);</span><br><span> </span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int mncc_rel_cnf(struct gsm_call *call, int msg_type, struct gsm_mncc *rel)</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_rel_cnf(struct gsm_call *call, struct gsm_mncc *rel)</span><br><span> {</span><br><span> free_call(call);</span><br><span> return 0;</span><br><span>@@ -273,10 +285,11 @@</span><br><span> struct gsm_mncc rel;</span><br><span> </span><br><span> memset(&rel, 0, sizeof(struct gsm_mncc));</span><br><span style="color: hsl(120, 100%, 40%);">+ rel.msg_type = MNCC_REL_REQ;</span><br><span> rel.callref = callref;</span><br><span> mncc_set_cause(&rel, GSM48_CAUSE_LOC_PRN_S_LU,</span><br><span> GSM48_CC_CAUSE_RESOURCE_UNAVAIL);</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(net, MNCC_REL_REQ, &rel);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(net, &rel);</span><br><span> goto out_free;</span><br><span> }</span><br><span> llist_add_tail(&call->entry, &call_list);</span><br><span>@@ -296,47 +309,51 @@</span><br><span> </span><br><span> switch(msg_type) {</span><br><span> case MNCC_SETUP_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_setup_ind(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_setup_ind(call, arg);</span><br><span> break;</span><br><span> case MNCC_SETUP_CNF:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_setup_cnf(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_setup_cnf(call, arg);</span><br><span> break;</span><br><span> case MNCC_SETUP_COMPL_IND:</span><br><span> break;</span><br><span> case MNCC_CALL_CONF_IND:</span><br><span> /* we now need to MODIFY the channel */</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(call->net, MNCC_LCHAN_MODIFY, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_LCHAN_MODIFY;</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(call->net, data);</span><br><span> break;</span><br><span> case MNCC_ALERT_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_alert_ind(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_alert_ind(call, arg);</span><br><span> break;</span><br><span> case MNCC_NOTIFY_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_notify_ind(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_notify_ind(call, arg);</span><br><span> break;</span><br><span> case MNCC_DISC_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_disc_ind(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_disc_ind(call, arg);</span><br><span> break;</span><br><span> case MNCC_REL_IND:</span><br><span> case MNCC_REJ_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_rel_ind(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_rel_ind(call, arg);</span><br><span> break;</span><br><span> case MNCC_REL_CNF:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_rel_cnf(call, msg_type, arg);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_rel_cnf(call, arg);</span><br><span> break;</span><br><span> case MNCC_FACILITY_IND:</span><br><span> break;</span><br><span> case MNCC_START_DTMF_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(net, MNCC_START_DTMF_REJ, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_START_DTMF_REJ;</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(net, data);</span><br><span> break;</span><br><span> case MNCC_STOP_DTMF_IND:</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(net, MNCC_STOP_DTMF_RSP, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_STOP_DTMF_RSP;</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(net, data);</span><br><span> break;</span><br><span> case MNCC_MODIFY_IND:</span><br><span> mncc_set_cause(data, GSM48_CAUSE_LOC_PRN_S_LU,</span><br><span> GSM48_CC_CAUSE_SERV_OPT_UNIMPL);</span><br><span> DEBUGP(DMNCC, "(call %x) Rejecting MODIFY with cause %d\n",</span><br><span> call->callref, data->cause.value);</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(net, MNCC_MODIFY_REJ, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_MODIFY_REJ;</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(net, data);</span><br><span> break;</span><br><span> case MNCC_MODIFY_CNF:</span><br><span> break;</span><br><span>@@ -345,14 +362,16 @@</span><br><span> GSM48_CC_CAUSE_SERV_OPT_UNIMPL);</span><br><span> DEBUGP(DMNCC, "(call %x) Rejecting HOLD with cause %d\n",</span><br><span> call->callref, data->cause.value);</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(net, MNCC_HOLD_REJ, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_HOLD_REJ;</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(net, data);</span><br><span> break;</span><br><span> case MNCC_RETRIEVE_IND:</span><br><span> mncc_set_cause(data, GSM48_CAUSE_LOC_PRN_S_LU,</span><br><span> GSM48_CC_CAUSE_SERV_OPT_UNIMPL);</span><br><span> DEBUGP(DMNCC, "(call %x) Rejecting RETRIEVE with cause %d\n",</span><br><span> call->callref, data->cause.value);</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(net, MNCC_RETRIEVE_REJ, data);</span><br><span style="color: hsl(120, 100%, 40%);">+ data->msg_type = MNCC_RETRIEVE_REJ;</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(net, data);</span><br><span> break;</span><br><span> default:</span><br><span> LOGP(DMNCC, LOGL_NOTICE, "(call %x) Message unhandled\n", callref);</span><br><span>diff --git a/src/libmsc/mncc_sock.c b/src/libmsc/mncc_sock.c</span><br><span>index b2739e8..0a4e99b 100644</span><br><span>--- a/src/libmsc/mncc_sock.c</span><br><span>+++ b/src/libmsc/mncc_sock.c</span><br><span>@@ -118,7 +118,7 @@</span><br><span> </span><br><span> rc = mncc_prim_check(mncc_prim, rc);</span><br><span> if (rc == 0)</span><br><span style="color: hsl(0, 100%, 40%);">- rc = mncc_tx_to_cc(state->net, mncc_prim->msg_type, mncc_prim);</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = mncc_tx_to_cc(state->net, mncc_prim);</span><br><span> </span><br><span> /* as we always synchronously process the message in mncc_send() and</span><br><span> * its callbacks, we can free the message here. */</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_call.c b/tests/msc_vlr/msc_vlr_test_call.c</span><br><span>index 9ca3bf1..b31239e 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_call.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_call.c</span><br><span>@@ -29,7 +29,7 @@</span><br><span> static void mncc_sends_to_cc(uint32_t msg_type, struct gsm_mncc *mncc)</span><br><span> {</span><br><span> mncc->msg_type = msg_type;</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(net, msg_type, mncc);</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(net, mncc);</span><br><span> }</span><br><span> </span><br><span> /*</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_tests.c b/tests/msc_vlr/msc_vlr_tests.c</span><br><span>index 9c3ecb7..81ac3f7 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_tests.c</span><br><span>+++ b/tests/msc_vlr/msc_vlr_tests.c</span><br><span>@@ -680,7 +680,7 @@</span><br><span> log("MNCC: callref 0x%x: Call Release triggering %s", mncc->callref,</span><br><span> get_mncc_name(on_call_release_mncc_sends_to_cc_data->msg_type));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- mncc_tx_to_cc(net, on_call_release_mncc_sends_to_cc_data->msg_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ mncc_tx_to_cc(net,</span><br><span> on_call_release_mncc_sends_to_cc_data);</span><br><span> </span><br><span> on_call_release_mncc_sends_to_cc_data = NULL;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13931">change 13931</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/13931"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I966ce764796982709ea3312e76988a95257acb8d </div>
<div style="display:none"> Gerrit-Change-Number: 13931 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>