<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16998">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">csn1: Allow CHOICE elements to re-process the bits used for the choice<br><br>This is a port of wireshark.git commit<br>2f024256bf337400ef3a82fa75e6d48d5707e059.<br><br>From 78516187d821b8d19d16987b1d6bc855ee7cbe10 Mon Sep 17 00:00:00 2001<br>From: Sylvain Munaut <tnt@246tNt.com><br>Date: Sat, 4 Feb 2012 10:00:22 +0100<br>Subject: [PATCH 4/6] packet-csn1: Allow CHOICE elements to re-process the bits used for the choice<br><br>We may want to display more detail, or the sub-element should be<br>displayed with its headers or whatever ...<br><br>Change-Id: I3a5a95d5f918b8f17a2400a6d0c4d855ecacea7e<br>---<br>M src/csn1.cpp<br>M src/csn1.h<br>M src/gsm_rlcmac.cpp<br>3 files changed, 47 insertions(+), 44 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-pcu refs/changes/98/16998/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/csn1.cpp b/src/csn1.cpp</span><br><span>index 02b9518..d9faa8c 100644</span><br><span>--- a/src/csn1.cpp</span><br><span>+++ b/src/csn1.cpp</span><br><span>@@ -507,8 +507,10 @@</span><br><span>             pui8          = pui8DATA(data, pDescr->offset);</span><br><span>             *pui8         = i;</span><br><span>             LOGPC(DCSN1, LOGL_NOTICE, "Choice %s = %u | ", pDescr->sz , (unsigned)value);</span><br><span style="color: hsl(0, 100%, 40%);">-            bit_offset += no_of_bits;</span><br><span style="color: hsl(0, 100%, 40%);">-            remaining_bits_len -= no_of_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (!pChoice->keep_bits) {</span><br><span style="color: hsl(120, 100%, 40%);">+              bit_offset += no_of_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+              remaining_bits_len -= no_of_bits;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span> </span><br><span>             csnStreamInit(&arT, bit_offset, remaining_bits_len);</span><br><span>          Status = csnStreamDecoder(&arT, descr, vector, readIndex, data);</span><br><span>diff --git a/src/csn1.h b/src/csn1.h</span><br><span>index 39e6625..e927076 100644</span><br><span>--- a/src/csn1.h</span><br><span>+++ b/src/csn1.h</span><br><span>@@ -212,6 +212,7 @@</span><br><span> {</span><br><span>   guint8     bits;</span><br><span>   guint8     value;</span><br><span style="color: hsl(120, 100%, 40%);">+  gboolean   keep_bits;</span><br><span>   CSN_DESCR descr;</span><br><span> } CSN_ChoiceElement_t;</span><br><span> </span><br><span>diff --git a/src/gsm_rlcmac.cpp b/src/gsm_rlcmac.cpp</span><br><span>index c1d3b97..ed7c745 100644</span><br><span>--- a/src/gsm_rlcmac.cpp</span><br><span>+++ b/src/gsm_rlcmac.cpp</span><br><span>@@ -387,9 +387,9 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t IA_EGPRS_Choice[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x00, M_TYPE   (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x01, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x01, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x00, 0, M_TYPE   (IA_EGPRS_t, u.IA_EGPRS_PUA, IA_EGPRS_00_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "01 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x01, 0, CSN_ERROR(IA_EGPRS_t, "1 <IA_EGPRS>", CSN_ERROR_STREAM_NOT_SUPPORTED)}</span><br><span> };</span><br><span> </span><br><span> /* Please observe the double usage of UnionType element.</span><br><span>@@ -526,10 +526,10 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketPollingID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0,    M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x02, M_UINT(PacketPollingID_t, u.TLLI, 32)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x06, M_UINT(PacketPollingID_t, u.TQI, 16)},</span><br><span style="color: hsl(0, 100%, 40%);">-/*{3, 0x07 , M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(PacketPollingID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x02, 0, M_UINT(PacketPollingID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x06, 0, M_UINT(PacketPollingID_t, u.TQI, 16)},</span><br><span style="color: hsl(120, 100%, 40%);">+/*{3, 0x07 , 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},*/</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -605,9 +605,9 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t SI13_PBCCH_Description_Channel[] =</span><br><span> {/* this one is used in SI13*/</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x00 , M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x01 , M_UINT(PBCCH_Description_t, u.ARFCN, 10)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x01 , M_UINT(PBCCH_Description_t, u.MAIO, 6)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x00, 0, M_NULL(PBCCH_Description_t, u.dummy, 0)},/*Default to BCCH carrier*/</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x01, 0, M_UINT(PBCCH_Description_t, u.ARFCN, 10)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x01, 0, M_UINT(PBCCH_Description_t, u.MAIO, 6)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -895,12 +895,12 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t MS_RA_capability_value_Choice[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSMP,     M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSME,     M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSM1800,  M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSM1900,  M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSM850,   M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(0, 100%, 40%);">-  {4, AccTech_GSMOther, M_SERIALIZE (MS_RA_capability_value_t, u.Additional_access_technologies, 7, Additional_access_technologies_Dissector)}, /* Short Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSMP,     0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSME,     0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSM1800,  0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSM1900,  0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSM850,   0, M_SERIALIZE (MS_RA_capability_value_t, u.Content, 7, Content_Dissector)}, /* Long Form */</span><br><span style="color: hsl(120, 100%, 40%);">+  {4, AccTech_GSMOther, 0, M_SERIALIZE (MS_RA_capability_value_t, u.Additional_access_technologies, 7, Additional_access_technologies_Dissector)}, /* Short Form */</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -928,12 +928,12 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t MultibandChoice[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x00, M_UINT(Multiband_t, u.A5_Bits, 4)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x05, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x06, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x01, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x02, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x04, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x00, 0, M_UINT(Multiband_t, u.A5_Bits, 4)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x05, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x06, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x01, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x02, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x04, 0, M_TYPE(Multiband_t, u.ARC, ARC_t)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -1053,8 +1053,8 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketResourceRequestID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0,    M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x01, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(PacketResourceRequestID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x01, 0, M_UINT(PacketResourceRequestID_t, u.TLLI, 32)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -1732,10 +1732,10 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketUplinkID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0 ,    M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x02 , M_UINT(PacketUplinkID_t, u.TLLI, 32)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x06 , M_UINT(PacketUplinkID_t, u.TQI, 16)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x07 , M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(PacketUplinkID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x02, 0, M_UINT(PacketUplinkID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x06, 0, M_UINT(PacketUplinkID_t, u.TQI, 16)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x07, 0, M_TYPE(PacketUplinkID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -1866,8 +1866,8 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketDownlinkID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1,    0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x02, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1,    0, 0, M_TYPE(PacketDownlinkID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x02, 0, M_UINT(PacketDownlinkID_t, u.TLLI, 32)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -2106,9 +2106,9 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketPowerControlTimingAdvanceID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0,    M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x06, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {3, 0x07, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x06, 0, M_UINT(PacketPowerControlTimingAdvanceID_t, u.TQI, 16)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {3, 0x07, 0, M_TYPE(PacketPowerControlTimingAdvanceID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -2388,9 +2388,9 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t RejectID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x00, M_UINT(RejectID_t, u.TLLI, 32)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x02, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x03, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x00, 0, M_UINT(RejectID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x02, 0, M_TYPE(RejectID_t, u.Packet_Request_Reference, Packet_Request_Reference_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x03, 0, M_TYPE(RejectID_t, u.Global_TFI, Global_TFI_t)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -2421,8 +2421,8 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PacketCellChangeOrderID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0,    M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {2, 0x02, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(PacketCellChangeOrderID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {2, 0x02, 0, M_UINT(PacketCellChangeOrderID_t, u.TLLI, 32)},</span><br><span> };</span><br><span> /* PacketCellChangeOrderID_t; */</span><br><span> </span><br><span>@@ -3819,8 +3819,8 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t PNCDContainer[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x1, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x0, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_Without_ID, PNCD_Container_Without_ID_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x1, 0, M_TYPE(PNCDContainer_t, u.PNCD_Container_With_ID, PNCD_Container_With_ID_t)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span>@@ -4124,8 +4124,8 @@</span><br><span> static const</span><br><span> CSN_ChoiceElement_t AdditionalMsRadAccessCapID[] =</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0,    M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(0, 100%, 40%);">-  {1, 0x01, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0,    0, M_TYPE(AdditionalMsRadAccessCapID_t, u.Global_TFI, Global_TFI_t)},</span><br><span style="color: hsl(120, 100%, 40%);">+  {1, 0x01, 0, M_UINT(AdditionalMsRadAccessCapID_t, u.TLLI, 32)},</span><br><span> };</span><br><span> </span><br><span> static const</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-pcu/+/16998">change 16998</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/c/osmo-pcu/+/16998"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-pcu </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I3a5a95d5f918b8f17a2400a6d0c4d855ecacea7e </div>
<div style="display:none"> Gerrit-Change-Number: 16998 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>