<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12925">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">a_iface: Centralize/wrap BSSAP / N-DATA transmission<br><br>We don't want multiple callers to osmo_sccp_tx_data_msg() each having<br>to hex-dump a log message about the to-be-transmitted message, with<br>half of the caller sitest missing that printing.  Let's centralize<br>all calls of osmo_sccp_tx_data_msg() in a wrapper function which<br>takes care of the related OSMO_ASSERT() and the related printing.<br><br>Change-Id: I6159ea72cc8e0650eda6c49544acd65e9c15e817<br>---<br>M src/libmsc/a_iface.c<br>M tests/msc_vlr/msc_vlr_test_gsm_ciph.err<br>M tests/msc_vlr/msc_vlr_test_ms_timeout.err<br>M tests/msc_vlr/msc_vlr_tests.c<br>4 files changed, 25 insertions(+), 10 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/25/12925/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c</span><br><span>index 3a7690d..c76e5c5 100644</span><br><span>--- a/src/libmsc/a_iface.c</span><br><span>+++ b/src/libmsc/a_iface.c</span><br><span>@@ -141,6 +141,16 @@</span><br><span>         return NULL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* wrapper around osmo_sccp_tx_data_msg(): Transmit a fully encoded BSSAP (DTAP or BSSMAP) message */</span><br><span style="color: hsl(120, 100%, 40%);">+static int a_iface_tx_bssap(const struct ran_conn *conn, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_ASSERT(conn);</span><br><span style="color: hsl(120, 100%, 40%);">+    OSMO_ASSERT(conn->a.scu);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+       return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Send DTAP message via A-interface, take ownership of msg */</span><br><span> int a_iface_tx_dtap(struct msgb *msg)</span><br><span> {</span><br><span>@@ -167,9 +177,8 @@</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg_resp));</span><br><span>         /* osmo_sccp_tx_data_msg() takes ownership of msg_resp */</span><br><span style="color: hsl(0, 100%, 40%);">-       return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg_resp);</span><br><span style="color: hsl(120, 100%, 40%);">+   return a_iface_tx_bssap(conn, msg_resp);</span><br><span> }</span><br><span> </span><br><span> /* Send Cipher mode command via A-interface */</span><br><span>@@ -186,9 +195,7 @@</span><br><span>    LOGPC(DBSSAP, LOGL_DEBUG, " key %s\n", osmo_hexdump_nospc(ei->key, ei->key_len));</span><br><span> </span><br><span>        msg_resp = gsm0808_create_cipher(ei, include_imeisv ? &crm : NULL);</span><br><span style="color: hsl(0, 100%, 40%);">- LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg_resp));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg_resp);</span><br><span style="color: hsl(120, 100%, 40%);">+   return a_iface_tx_bssap(conn, msg_resp);</span><br><span> }</span><br><span> </span><br><span> /* Page a subscriber via A-interface */</span><br><span>@@ -407,9 +414,7 @@</span><br><span>   memcpy(&rtp_addr, &rtp_addr_in, sizeof(rtp_addr_in));</span><br><span> </span><br><span>    msg = gsm0808_create_ass(&ct, NULL, &rtp_addr, &scl, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg));</span><br><span style="color: hsl(0, 100%, 40%);">- return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        return a_iface_tx_bssap(conn, msg);</span><br><span> }</span><br><span> </span><br><span> /* Send clear command via A-interface */</span><br><span>@@ -425,7 +430,7 @@</span><br><span>               csfb_ind = true;</span><br><span> </span><br><span>         msg = gsm0808_create_clear_command2(GSM0808_CAUSE_CALL_CONTROL, csfb_ind);</span><br><span style="color: hsl(0, 100%, 40%);">-      return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        return a_iface_tx_bssap(conn, msg);</span><br><span> }</span><br><span> </span><br><span> int a_iface_tx_classmark_request(const struct ran_conn *conn)</span><br><span>@@ -435,7 +440,7 @@</span><br><span>  LOGPCONN(conn, LOGL_INFO, "Tx BSSMAP CLASSMARK REQUEST to BSC\n");</span><br><span> </span><br><span>     msg = gsm0808_create_classmark_request();</span><br><span style="color: hsl(0, 100%, 40%);">-       return osmo_sccp_tx_data_msg(conn->a.scu, conn->a.conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+        return a_iface_tx_bssap(conn, msg);</span><br><span> }</span><br><span> </span><br><span> /* Callback function: Close all open connections */</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_gsm_ciph.err b/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>index af11385..2fb9bd8 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_gsm_ciph.err</span><br><span>@@ -2452,6 +2452,7 @@</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: Set Ciphering Mode</span><br><span> DMM IMSI-901700000004620: to determine whether A5/3 is supported, first ask for a Classmark Update to obtain Classmark 2</span><br><span> DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: Tx BSSMAP CLASSMARK REQUEST to BSC</span><br><span style="color: hsl(120, 100%, 40%);">+DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: N-DATA.req([])</span><br><span>   BSC <--BSSAP-BSS-MANAGEMENT-- MSC: CLASSMARK REQ [L3]> 00 01 58 </span><br><span> DMM RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_WAIT_CLASSMARK_UPDATE</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: state_chg to VLR_ULA_S_WAIT_CIPH</span><br><span>@@ -2987,6 +2988,7 @@</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: Set Ciphering Mode</span><br><span> DMM IMSI-901700000004620: to determine whether A5/3 is supported, first ask for a Classmark Update to obtain Classmark 2</span><br><span> DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: Tx BSSMAP CLASSMARK REQUEST to BSC</span><br><span style="color: hsl(120, 100%, 40%);">+DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: N-DATA.req([])</span><br><span>   BSC <--BSSAP-BSS-MANAGEMENT-- MSC: CLASSMARK REQ [L3]> 00 01 58 </span><br><span> DMM RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_WAIT_CLASSMARK_UPDATE</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: state_chg to VLR_ULA_S_WAIT_CIPH</span><br><span>@@ -3295,6 +3297,7 @@</span><br><span> DVLR Process_Access_Request_VLR(IMSI-901700000004620:MSISDN-42342:GERAN-A-0:PAGING_RESP){PR_ARQ_S_WAIT_AUTH}: Set Ciphering Mode</span><br><span> DMM IMSI-901700000004620:MSISDN-42342: to determine whether A5/3 is supported, first ask for a Classmark Update to obtain Classmark 2</span><br><span> DBSSAP RAN_conn(IMSI-901700000004620:MSISDN-42342:GERAN-A-0:PAGING_RESP){RAN_CONN_S_AUTH_CIPH}: Tx BSSMAP CLASSMARK REQUEST to BSC</span><br><span style="color: hsl(120, 100%, 40%);">+DBSSAP RAN_conn(IMSI-901700000004620:MSISDN-42342:GERAN-A-0:PAGING_RESP){RAN_CONN_S_AUTH_CIPH}: N-DATA.req([])</span><br><span>   BSC <--BSSAP-BSS-MANAGEMENT-- MSC: CLASSMARK REQ [L3]> 00 01 58 </span><br><span> DMM RAN_conn(IMSI-901700000004620:MSISDN-42342:GERAN-A-0:PAGING_RESP){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_WAIT_CLASSMARK_UPDATE</span><br><span> DVLR Process_Access_Request_VLR(IMSI-901700000004620:MSISDN-42342:GERAN-A-0:PAGING_RESP){PR_ARQ_S_WAIT_AUTH}: state_chg to PR_ARQ_S_WAIT_CIPH</span><br><span>diff --git a/tests/msc_vlr/msc_vlr_test_ms_timeout.err b/tests/msc_vlr/msc_vlr_test_ms_timeout.err</span><br><span>index e09389c..72d116a 100644</span><br><span>--- a/tests/msc_vlr/msc_vlr_test_ms_timeout.err</span><br><span>+++ b/tests/msc_vlr/msc_vlr_test_ms_timeout.err</span><br><span>@@ -686,6 +686,7 @@</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: Set Ciphering Mode</span><br><span> DMM IMSI-901700000004620: to determine whether A5/3 is supported, first ask for a Classmark Update to obtain Classmark 2</span><br><span> DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: Tx BSSMAP CLASSMARK REQUEST to BSC</span><br><span style="color: hsl(120, 100%, 40%);">+DBSSAP RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: N-DATA.req([])</span><br><span>   BSC <--BSSAP-BSS-MANAGEMENT-- MSC: CLASSMARK REQ [L3]> 00 01 58 </span><br><span> DMM RAN_conn(IMSI-901700000004620:GERAN-A-0:LU){RAN_CONN_S_AUTH_CIPH}: state_chg to RAN_CONN_S_WAIT_CLASSMARK_UPDATE</span><br><span> DVLR vlr_lu_fsm(IMSI-901700000004620:GERAN-A-0:LU){VLR_ULA_S_WAIT_AUTH}: state_chg to VLR_ULA_S_WAIT_CIPH</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 eb6df09..217c647 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>@@ -192,6 +192,10 @@</span><br><span> }</span><br><span> </span><br><span> enum osmo_rat_type rx_from_ran = OSMO_RAT_GERAN_A;</span><br><span style="color: hsl(120, 100%, 40%);">+struct osmo_sccp_user {</span><br><span style="color: hsl(120, 100%, 40%);">+   uint8_t foo;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static struct osmo_sccp_user g_scu;</span><br><span> </span><br><span> struct ran_conn *conn_new(void)</span><br><span> {</span><br><span>@@ -203,6 +207,8 @@</span><br><span>                      .conn_id = 42,</span><br><span>               };</span><br><span>           conn->iu.ue_ctx = ue_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              conn->a.scu = &g_scu;</span><br><span>         }</span><br><span>    return conn;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12925">change 12925</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/12925"/><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: I6159ea72cc8e0650eda6c49544acd65e9c15e817 </div>
<div style="display:none"> Gerrit-Change-Number: 12925 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>