<p>Neels Hofmeyr has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10147">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cosmetic: reduce bsc_api.h<br><br>Remove as much as possible from bsc_api.h. Use '#pragma once'. Tweak head<br>comment.<br><br>BSC_API_CONN_POL_{ACCEPT,REJECT}: only user is static complete_layer3(), just<br>use a bool return value instead.<br><br>msc_connected(): only used in osmo_bsc_api.c, make static there.<br><br>Instead of including gsm_data.h, declare structs opaquely, include stdint.h.<br>codec_pref_test.c used this as indirect gsm_data.h include via osmo_bsc.h,<br>include gsm_data.h there directly.<br><br>osmo_bsc.h: instead of including bsc_api.h, declare opaque structs.<br><br>gsm_04_08_rr.h: declare opaque structs to replace indirect include of<br>gsm_data.h.<br><br>Change-Id: Ia9c0f9828317236048e40ec9ecf9990592e2190a<br>---<br>M include/osmocom/bsc/bsc_api.h<br>M include/osmocom/bsc/gsm_04_08_rr.h<br>M include/osmocom/bsc/osmo_bsc.h<br>M src/osmo-bsc/osmo_bsc_api.c<br>4 files changed, 30 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/47/10147/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/bsc_api.h b/include/osmocom/bsc/bsc_api.h</span><br><span>index dcfcc45..5241295 100644</span><br><span>--- a/include/osmocom/bsc/bsc_api.h</span><br><span>+++ b/include/osmocom/bsc/bsc_api.h</span><br><span>@@ -1,12 +1,10 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/* GSM 08.08 like API for OpenBSC */</span><br><span style="color: hsl(120, 100%, 40%);">+/* GSM 08.08 function declarations for osmo-bsc */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef OPENBSC_BSC_API_H</span><br><span style="color: hsl(0, 100%, 40%);">-#define OPENBSC_BSC_API_H</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include "gsm_data.h"</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define BSC_API_CONN_POL_ACCEPT    0</span><br><span style="color: hsl(0, 100%, 40%);">-#define BSC_API_CONN_POL_REJECT        1</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_subscriber_connection;</span><br><span> </span><br><span> void bsc_sapi_n_reject(struct gsm_subscriber_connection *conn, int dlci);</span><br><span> void bsc_cipher_mode_compl(struct gsm_subscriber_connection *conn, struct msgb *msg, uint8_t chosen_encr);</span><br><span>@@ -16,11 +14,3 @@</span><br><span> void bsc_cm_update(struct gsm_subscriber_connection *conn,</span><br><span>                  const uint8_t *cm2, uint8_t cm2_len,</span><br><span>                 const uint8_t *cm3, uint8_t cm3_len);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm0808_submit_dtap(struct gsm_subscriber_connection *conn, struct msgb *msg, uint8_t link_id,</span><br><span style="color: hsl(0, 100%, 40%);">-                      bool allow_sacch);</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm0808_assign_req(struct gsm_subscriber_connection *conn, int chan_mode, int full_rate);</span><br><span style="color: hsl(0, 100%, 40%);">-int gsm0808_clear(struct gsm_subscriber_connection *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-bool msc_connected(struct gsm_subscriber_connection *conn);</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span>diff --git a/include/osmocom/bsc/gsm_04_08_rr.h b/include/osmocom/bsc/gsm_04_08_rr.h</span><br><span>index 63bec7a..8f46922 100644</span><br><span>--- a/include/osmocom/bsc/gsm_04_08_rr.h</span><br><span>+++ b/include/osmocom/bsc/gsm_04_08_rr.h</span><br><span>@@ -1,5 +1,18 @@</span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct amr_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+struct amr_multirate_conf;</span><br><span style="color: hsl(120, 100%, 40%);">+struct bsc_subscr;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm48_chan_desc;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm48_pag_resp;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_lchan;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_meas_rep;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_network;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_subscriber_connection;</span><br><span style="color: hsl(120, 100%, 40%);">+struct msgb;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void gsm_net_update_ctype(struct gsm_network *network);</span><br><span> enum gsm_chan_t get_ctype_by_chreq(struct gsm_network *network, uint8_t ra);</span><br><span> int get_reason_by_chreq(uint8_t ra, int neci);</span><br><span>diff --git a/include/osmocom/bsc/osmo_bsc.h b/include/osmocom/bsc/osmo_bsc.h</span><br><span>index 0e19b0b..bebfb2f 100644</span><br><span>--- a/include/osmocom/bsc/osmo_bsc.h</span><br><span>+++ b/include/osmocom/bsc/osmo_bsc.h</span><br><span>@@ -2,7 +2,6 @@</span><br><span> </span><br><span> #include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/bsc/bsc_api.h></span><br><span> #include <osmocom/bsc/bsc_msg_filter.h></span><br><span> </span><br><span> #define BSS_SEND_USSD 1</span><br><span>@@ -18,6 +17,8 @@</span><br><span> struct gsm0808_channel_type;</span><br><span> struct gsm0808_speech_codec_list;</span><br><span> struct gsm_audio_support;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_subscriber_connection;</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm_bts;</span><br><span> </span><br><span> struct bsc_api *osmo_bsc_api();</span><br><span> </span><br><span>diff --git a/src/osmo-bsc/osmo_bsc_api.c b/src/osmo-bsc/osmo_bsc_api.c</span><br><span>index b4d080d..dfec19a 100644</span><br><span>--- a/src/osmo-bsc/osmo_bsc_api.c</span><br><span>+++ b/src/osmo-bsc/osmo_bsc_api.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <osmocom/bsc/bsc_subscriber.h></span><br><span> #include <osmocom/bsc/debug.h></span><br><span> #include <osmocom/bsc/paging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc/bsc_api.h></span><br><span> </span><br><span> #include <osmocom/bsc/gsm_04_80.h></span><br><span> #include <osmocom/bsc/gsm_04_08_rr.h></span><br><span>@@ -36,7 +37,7 @@</span><br><span> #include <osmocom/bsc/osmo_bsc_sigtran.h></span><br><span> </span><br><span> /* Check if we have a proper connection to the MSC */</span><br><span style="color: hsl(0, 100%, 40%);">-bool msc_connected(struct gsm_subscriber_connection *conn)</span><br><span style="color: hsl(120, 100%, 40%);">+static bool msc_connected(struct gsm_subscriber_connection *conn)</span><br><span> {</span><br><span>      /* No subscriber conn at all */</span><br><span>      if (!conn)</span><br><span>@@ -53,8 +54,8 @@</span><br><span>       return true;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int complete_layer3(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(0, 100%, 40%);">-                    struct msgb *msg, struct bsc_msc_data *msc);</span><br><span style="color: hsl(120, 100%, 40%);">+static bool complete_layer3(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(120, 100%, 40%);">+                      struct msgb *msg, struct bsc_msc_data *msc);</span><br><span> </span><br><span> static struct osmo_cell_global_id *cgi_for_msc(struct bsc_msc_data *msc, struct gsm_bts *bts)</span><br><span> {</span><br><span>@@ -438,8 +439,8 @@</span><br><span>     return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int complete_layer3(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(0, 100%, 40%);">-                       struct msgb *msg, struct bsc_msc_data *msc)</span><br><span style="color: hsl(120, 100%, 40%);">+static bool complete_layer3(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(120, 100%, 40%);">+                       struct msgb *msg, struct bsc_msc_data *msc)</span><br><span> {</span><br><span>         int con_type, rc, lu_cause;</span><br><span>  char *imsi = NULL;</span><br><span>@@ -451,7 +452,7 @@</span><br><span>                             &imsi, &con_type, &lu_cause);</span><br><span>    if (rc < 0) {</span><br><span>             bsc_maybe_lu_reject(conn, con_type, lu_cause);</span><br><span style="color: hsl(0, 100%, 40%);">-          return BSC_API_CONN_POL_REJECT;</span><br><span style="color: hsl(120, 100%, 40%);">+               return false;</span><br><span>        }</span><br><span> </span><br><span>        /* allocate resource for a new connection */</span><br><span>@@ -464,7 +465,7 @@</span><br><span>           else if (ret == BSC_CON_REJECT_RF_GRACE)</span><br><span>                     bsc_send_ussd_no_srv(conn, msg, msc->ussd_grace_txt);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            return BSC_API_CONN_POL_REJECT;</span><br><span style="color: hsl(120, 100%, 40%);">+               return false;</span><br><span>        }</span><br><span> </span><br><span>        /* TODO: also extract TMSI. We get an IMSI only when an initial L3 Complete comes in that</span><br><span>@@ -493,12 +494,12 @@</span><br><span>    resp = gsm0808_create_layer3_2(msg, cgi_for_msc(conn->sccp.msc, conn_get_bts(conn)), NULL);</span><br><span>       if (!resp) {</span><br><span>                 LOGP(DMSC, LOGL_DEBUG, "Failed to create layer3 message.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         return BSC_API_CONN_POL_REJECT;</span><br><span style="color: hsl(120, 100%, 40%);">+               return false;</span><br><span>        }</span><br><span> </span><br><span>        osmo_fsm_inst_dispatch(conn->fi, GSCON_EV_A_CONN_REQ, resp);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     return BSC_API_CONN_POL_ACCEPT;</span><br><span style="color: hsl(120, 100%, 40%);">+       return true;</span><br><span> }</span><br><span> </span><br><span> /*</span><br><span>@@ -519,7 +520,7 @@</span><br><span>     * MSC. If it fails the caller will need to handle this</span><br><span>       * properly.</span><br><span>          */</span><br><span style="color: hsl(0, 100%, 40%);">-     if (complete_layer3(_conn, msg, msc) != BSC_API_CONN_POL_ACCEPT) {</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!complete_layer3(_conn, msg, msc)) {</span><br><span>             /* FIXME: I have not the slightest idea what move_to_msc() intends to do; during lchan</span><br><span>                * FSM introduction, I changed this and hope it is the appropriate action. I actually</span><br><span>                 * assume this is unused legacy code for osmo-bsc_nat?? */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10147">change 10147</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/10147"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ia9c0f9828317236048e40ec9ecf9990592e2190a </div>
<div style="display:none"> Gerrit-Change-Number: 10147 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>