<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/10328">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
Harald Welte: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libosmogsm: (re)introduce gsm48_push_l3hdr()<br><br>There was gsm0480_l3hdr_push() declared in a header file, but<br>not exposed in 'libosmogsm.map'. Furthermore, for some reason<br>it was a part of GSM 04.80 API, what is not actually correct.<br><br>Let's rename this symbol, and properly expose it as a part of<br>the GSM 04.08 API. Also, let's introduce an auxiliary wrapper<br>for messages, where the transaction identifier is required<br>(see GSM 04.07, section 11.2.3.1.2).<br><br>Change-Id: I8a045efe8335d83fcbe8d43eb180972e3b1d9dda<br>---<br>M TODO-RELEASE<br>M include/osmocom/gsm/gsm0480.h<br>M include/osmocom/gsm/gsm48.h<br>M src/gsm/gsm0411_utils.c<br>M src/gsm/gsm0480.c<br>M src/gsm/gsm48.c<br>M src/gsm/libosmogsm.map<br>7 files changed, 49 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 8ccfa49..64833d2 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -7,3 +7,6 @@</span><br><span> # If any interfaces have been added since the last public release: c:r:a + 1.</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library what description / commit summary line</span><br><span style="color: hsl(120, 100%, 40%);">+libosmogsm gsm0480_l3hdr_push() removed from gsm/gsm0480.h (was not exposed)</span><br><span style="color: hsl(120, 100%, 40%);">+libosmogsm gsm48_push_l3hdr() (re)introduced in gsm/gsm48.h (GSM 04.08 API)</span><br><span style="color: hsl(120, 100%, 40%);">+libosmogsm gsm48_push_l3hdr_tid() a wrapper around gsm48_push_l3hdr()</span><br><span>diff --git a/include/osmocom/gsm/gsm0480.h b/include/osmocom/gsm/gsm0480.h</span><br><span>index 246f4b3..827464e 100644</span><br><span>--- a/include/osmocom/gsm/gsm0480.h</span><br><span>+++ b/include/osmocom/gsm/gsm0480.h</span><br><span>@@ -121,6 +121,3 @@</span><br><span> </span><br><span> int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id);</span><br><span> int gsm0480_wrap_facility(struct msgb *msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t msg_type);</span><br><span>diff --git a/include/osmocom/gsm/gsm48.h b/include/osmocom/gsm/gsm48.h</span><br><span>index cfae83d..2b14e6c 100644</span><br><span>--- a/include/osmocom/gsm/gsm48.h</span><br><span>+++ b/include/osmocom/gsm/gsm48.h</span><br><span>@@ -4,6 +4,8 @@</span><br><span> </span><br><span> #include <stdbool.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <osmocom/gsm/tlv.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span> #include <osmocom/gsm/gsm48_ie.h></span><br><span>@@ -63,3 +65,9 @@</span><br><span> OSMO_DEPRECATED("Use osmo_plmn_to_bcd() instead, to not lose leading zeros in the MNC");</span><br><span> void gsm48_mcc_mnc_from_bcd(uint8_t *bcd_src, uint16_t *mcc, uint16_t *mnc)</span><br><span> OSMO_DEPRECATED("Use osmo_plmn_from_bcd() instead, to not lose leading zeros in the MNC");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t pdisc, uint8_t msg_type);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define gsm48_push_l3hdr_tid(msg, pdisc, tid, msg_type) \</span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_push_l3hdr(msg, (pdisc & 0x0f) | (tid << 4), msg_type)</span><br><span>diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c</span><br><span>index 53d37a4..ccefe54 100644</span><br><span>--- a/src/gsm/gsm0411_utils.c</span><br><span>+++ b/src/gsm/gsm0411_utils.c</span><br><span>@@ -35,7 +35,6 @@</span><br><span> #include <osmocom/core/logging.h></span><br><span> </span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include <osmocom/gsm/gsm0480.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span> #include <osmocom/gsm/protocol/gsm_03_40.h></span><br><span> #include <osmocom/gsm/protocol/gsm_04_11.h></span><br><span>@@ -354,7 +353,7 @@</span><br><span> uint8_t msg_type)</span><br><span> {</span><br><span> /* Outgoing proto_discr needs the highest bit set */</span><br><span style="color: hsl(0, 100%, 40%);">- gsm0480_l3hdr_push(msg, proto | (trans << 4), msg_type);</span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_push_l3hdr_tid(msg, proto, trans, msg_type);</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c</span><br><span>index df640b8..7756ecb 100644</span><br><span>--- a/src/gsm/gsm0480.c</span><br><span>+++ b/src/gsm/gsm0480.c</span><br><span>@@ -25,6 +25,7 @@</span><br><span> *</span><br><span> */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48.h></span><br><span> #include <osmocom/gsm/gsm0480.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span> </span><br><span>@@ -863,10 +864,11 @@</span><br><span> msgb_wrap_with_TL(msg, GSM0480_IE_FACILITY);</span><br><span> </span><br><span> /* And finally pre-pend the L3 header */</span><br><span style="color: hsl(0, 100%, 40%);">- gsm0480_l3hdr_push(msg,</span><br><span style="color: hsl(0, 100%, 40%);">- GSM48_PDISC_NC_SS | trans_id</span><br><span style="color: hsl(0, 100%, 40%);">- | (1<<7) /* TI direction = 1 */,</span><br><span style="color: hsl(0, 100%, 40%);">- GSM0480_MTYPE_RELEASE_COMPLETE);</span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_push_l3hdr_tid(msg, GSM48_PDISC_NC_SS,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: TI direction is always 1 ?!? */</span><br><span style="color: hsl(120, 100%, 40%);">+ trans_id | (1 << 7),</span><br><span style="color: hsl(120, 100%, 40%);">+ GSM0480_MTYPE_RELEASE_COMPLETE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> return msg;</span><br><span> }</span><br><span> </span><br><span>@@ -932,17 +934,6 @@</span><br><span> return msg;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr,</span><br><span style="color: hsl(0, 100%, 40%);">- uint8_t msg_type)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm48_hdr *gh;</span><br><span style="color: hsl(0, 100%, 40%);">- gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));</span><br><span style="color: hsl(0, 100%, 40%);">- gh->proto_discr = proto_discr;</span><br><span style="color: hsl(0, 100%, 40%);">- gh->msg_type = msg_type;</span><br><span style="color: hsl(0, 100%, 40%);">- return gh;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct msgb *gsm0480_create_ussd_notify(int level, const char *text)</span><br><span> {</span><br><span> struct msgb *msg;</span><br><span>@@ -954,7 +945,11 @@</span><br><span> gsm0480_wrap_invoke(msg, GSM0480_OP_CODE_USS_NOTIFY, 0);</span><br><span> gsm0480_wrap_facility(msg);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS, GSM0480_MTYPE_REGISTER);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* And finally pre-pend the L3 header */</span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: no transactionID?!? */</span><br><span style="color: hsl(120, 100%, 40%);">+ GSM0480_MTYPE_REGISTER);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> return msg;</span><br><span> }</span><br><span> </span><br><span>@@ -966,8 +961,10 @@</span><br><span> if (!msg)</span><br><span> return NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* FIXME: should this set trans_id and TI direction flag? */</span><br><span style="color: hsl(0, 100%, 40%);">- gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS,</span><br><span style="color: hsl(0, 100%, 40%);">- GSM0480_MTYPE_RELEASE_COMPLETE);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* And finally pre-pend the L3 header */</span><br><span style="color: hsl(120, 100%, 40%);">+ gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS,</span><br><span style="color: hsl(120, 100%, 40%);">+ /* FIXME: no transactionID?!? */</span><br><span style="color: hsl(120, 100%, 40%);">+ GSM0480_MTYPE_RELEASE_COMPLETE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> return msg;</span><br><span> }</span><br><span>diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c</span><br><span>index b4892de..136b937 100644</span><br><span>--- a/src/gsm/gsm48.c</span><br><span>+++ b/src/gsm/gsm48.c</span><br><span>@@ -1024,4 +1024,24 @@</span><br><span> { 0, NULL }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Wrap a given \ref msg with \ref gsm48_hdr structure</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] msg A message to be wrapped</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] pdisc GSM TS 04.07 protocol discriminator 1/2,</span><br><span style="color: hsl(120, 100%, 40%);">+ * sub-pdisc, trans_id or skip_ind 1/2,</span><br><span style="color: hsl(120, 100%, 40%);">+ * see section 11.2.3.1 for details</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] msg_type GSM TS 04.08 message type</span><br><span style="color: hsl(120, 100%, 40%);">+ * @return pointer to pushed header within \ref msg</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t pdisc, uint8_t msg_type)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm48_hdr *gh;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh));</span><br><span style="color: hsl(120, 100%, 40%);">+ gh->proto_discr = pdisc;</span><br><span style="color: hsl(120, 100%, 40%);">+ gh->msg_type = msg_type;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return gh;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! @} */</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index 2bb9d97..1da398c 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -241,6 +241,7 @@</span><br><span> </span><br><span> gsm414_msgt_names;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+gsm48_push_l3hdr;</span><br><span> gsm48_att_tlvdef;</span><br><span> gsm48_cc_msg_name;</span><br><span> gsm48_rr_msg_name;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10328">change 10328</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/10328"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I8a045efe8335d83fcbe8d43eb180972e3b1d9dda </div>
<div style="display:none"> Gerrit-Change-Number: 10328 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>