<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10328">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">libosmogsm: (re)introduce gsm48_push_l3hdr()<br><br>There was gsm0480_l3hdr_push() which was declared in a header,<br>but was not exposed in 'libosmogsm.map'. Also, 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 new GSM 04.08 auxiliary API, i.e. in a separate header.<br><br>Change-Id: I8a045efe8335d83fcbe8d43eb180972e3b1d9dda<br>---<br>M include/Makefile.am<br>M include/osmocom/gsm/gsm0480.h<br>A include/osmocom/gsm/gsm48_utils.h<br>M src/gsm/Makefile.am<br>M src/gsm/gsm0411_utils.c<br>M src/gsm/gsm0480.c<br>A src/gsm/gsm48_utils.c<br>M src/gsm/libosmogsm.map<br>8 files changed, 84 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/28/10328/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/Makefile.am b/include/Makefile.am</span><br><span>index ef8ec65..cc29ca8 100644</span><br><span>--- a/include/Makefile.am</span><br><span>+++ b/include/Makefile.am</span><br><span>@@ -90,6 +90,7 @@</span><br><span>                        osmocom/gsm/gsm23003.h \</span><br><span>                        osmocom/gsm/gsm48.h \</span><br><span>                        osmocom/gsm/gsm48_ie.h \</span><br><span style="color: hsl(120, 100%, 40%);">+                       osmocom/gsm/gsm48_utils.h \</span><br><span>                        osmocom/gsm/gsm_utils.h \</span><br><span>                        osmocom/gsm/gsup.h \</span><br><span>                        osmocom/gsm/ipa.h \</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_utils.h b/include/osmocom/gsm/gsm48_utils.h</span><br><span>new file mode 100644</span><br><span>index 0000000..0f19a0c</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/gsm/gsm48_utils.h</span><br><span>@@ -0,0 +1,5 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</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 tid,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   uint8_t msg_type);</span><br><span>diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am</span><br><span>index 29299a6..a945c1e 100644</span><br><span>--- a/src/gsm/Makefile.am</span><br><span>+++ b/src/gsm/Makefile.am</span><br><span>@@ -21,7 +21,7 @@</span><br><span> BUILT_SOURCES = gsm0503_conv.c</span><br><span> </span><br><span> libgsmint_la_SOURCES =  a5.c rxlev_stat.c tlv_parser.c comp128.c comp128v23.c \</span><br><span style="color: hsl(0, 100%, 40%);">-                     gsm_utils.c rsl.c gsm48.c gsm48_ie.c gsm0808.c sysinfo.c \</span><br><span style="color: hsl(120, 100%, 40%);">+                    gsm_utils.c rsl.c gsm48.c gsm48_ie.c gsm48_utils.c gsm0808.c sysinfo.c \</span><br><span>                     gprs_cipher_core.c gprs_rlc.c gsm0480.c abis_nm.c gsm0502.c \</span><br><span>                        gsm0411_utils.c gsm0411_smc.c gsm0411_smr.c gsm0414.c \</span><br><span>                      lapd_core.c lapdm.c kasumi.c gsm_04_08_gprs.c \</span><br><span>diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c</span><br><span>index 53d37a4..6384900 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,7 @@</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 style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48_utils.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 +354,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(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 3897743..ea39980 100644</span><br><span>--- a/src/gsm/gsm0480.c</span><br><span>+++ b/src/gsm/gsm0480.c</span><br><span>@@ -26,6 +26,7 @@</span><br><span>  */</span><br><span> </span><br><span> #include <osmocom/gsm/gsm0480.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48_utils.h></span><br><span> #include <osmocom/gsm/gsm_utils.h></span><br><span> </span><br><span> #include <osmocom/core/logging.h></span><br><span>@@ -863,10 +864,10 @@</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(msg, GSM48_PDISC_NC_SS,</span><br><span style="color: hsl(120, 100%, 40%);">+              trans_id | (1 << 7), /* FIXME: TI direction is always 1 ?!? */</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 +933,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 +944,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%);">+              0x00, /* 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 +960,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%);">+              0x00, /* 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_utils.c b/src/gsm/gsm48_utils.c</span><br><span>new file mode 100644</span><br><span>index 0000000..f2a166e</span><br><span>--- /dev/null</span><br><span>+++ b/src/gsm/gsm48_utils.c</span><br><span>@@ -0,0 +1,58 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*! \file gsm0408_utils.c</span><br><span style="color: hsl(120, 100%, 40%);">+ * Auxiliary utilities for GSM TS 04.08 messages */</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2016 by Neels Hofmeyr <nhofmeyr@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * SPDX-License-Identifier: GPL-2.0+</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 2 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU General Public License along</span><br><span style="color: hsl(120, 100%, 40%);">+ * with this program; if not, write to the Free Software Foundation, Inc.,</span><br><span style="color: hsl(120, 100%, 40%);">+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</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%);">+#include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm48_utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_04_08.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! \addtogroup gsm0408_utils</span><br><span style="color: hsl(120, 100%, 40%);">+ *  @{</span><br><span style="color: hsl(120, 100%, 40%);">+ *  GSM TS 04.08 auxiliary utilities</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</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</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in]  tid      GSM TS 04.07 transaction identifier</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 tid,</span><br><span style="color: hsl(120, 100%, 40%);">+                                   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 | (tid << 4);</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 style="color: hsl(120, 100%, 40%);">+/*! @} */</span><br><span>diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map</span><br><span>index 2bb9d97..ca53c8c 100644</span><br><span>--- a/src/gsm/libosmogsm.map</span><br><span>+++ b/src/gsm/libosmogsm.map</span><br><span>@@ -323,6 +323,8 @@</span><br><span> gsm48_pdisc_msgtype_name;</span><br><span> gsm48_reject_value_names;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+gsm48_push_l3hdr;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> gsm_7bit_decode;</span><br><span> gsm_7bit_decode_ussd;</span><br><span> gsm_7bit_encode;</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: newchange </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: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>