<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Takwa S</title>
    <description>The latest articles on DEV Community by Takwa S (@hicelltek).</description>
    <link>https://dev.to/hicelltek</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3833729%2F93266324-f94b-4fd9-bf41-43c50bf68202.jpg</url>
      <title>DEV Community: Takwa S</title>
      <link>https://dev.to/hicelltek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hicelltek"/>
    <language>en</language>
    <item>
      <title>3 RRC message traps I keep seeing in 5G NR drive tests (and how to spot them)</title>
      <dc:creator>Takwa S</dc:creator>
      <pubDate>Sat, 11 Apr 2026 22:51:38 +0000</pubDate>
      <link>https://dev.to/hicelltek/3-rrc-message-traps-i-keep-seeing-in-5g-nr-drive-tests-and-how-to-spot-them-kic</link>
      <guid>https://dev.to/hicelltek/3-rrc-message-traps-i-keep-seeing-in-5g-nr-drive-tests-and-how-to-spot-them-kic</guid>
      <description>&lt;p&gt;RRC traces look simple on the surface. You decode a few messages, you read the field names, and you think you understand what the UE and the gNB are doing. Then you spend half a day chasing a bug that was never really a bug.&lt;/p&gt;

&lt;p&gt;Three scenarios come back in almost every 5G NR drive test I analyze. Each one is easy to misread if you look at the message in isolation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trap 1 : RRCReconfiguration with an empty measConfig
&lt;/h2&gt;

&lt;p&gt;You see an &lt;code&gt;RRCReconfiguration&lt;/code&gt; in the trace, you open it, and the &lt;code&gt;measConfig&lt;/code&gt; section is empty or only has a &lt;code&gt;measObjectToRemoveList&lt;/code&gt;. First reaction of many engineers : "the network just dropped the measurement setup, that is why we lost the neighbor".&lt;/p&gt;

&lt;p&gt;Most of the time that conclusion is wrong. Per 3GPP TS 38.331, a &lt;code&gt;measConfig&lt;/code&gt; in an &lt;code&gt;RRCReconfiguration&lt;/code&gt; is a &lt;strong&gt;delta update&lt;/strong&gt;, not a full replacement. An empty delta means "keep everything you already had". It is only an actual removal if specific &lt;code&gt;MeasObjectId&lt;/code&gt; or &lt;code&gt;ReportConfigId&lt;/code&gt; values are listed in the remove lists.&lt;/p&gt;

&lt;p&gt;How to spot it : before declaring a measurement drop, reconstruct the cumulative &lt;code&gt;measConfig&lt;/code&gt; from the beginning of the RRC connection, not from this single message. The cell has been configuring you since the first &lt;code&gt;RRCSetup&lt;/code&gt;, each reconfiguration only sends the diff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trap 2 : MeasurementReport with zero neighbor results
&lt;/h2&gt;

&lt;p&gt;You open a &lt;code&gt;MeasurementReport&lt;/code&gt; and the &lt;code&gt;measResultListEUTRA&lt;/code&gt; or &lt;code&gt;measResultListNR&lt;/code&gt; field has zero entries. The local cell is there, but no neighbors. On the map, you can clearly see there is a neighbor cell visible at the UE location. Instant assumption : "the UE failed to detect the neighbor".&lt;/p&gt;

&lt;p&gt;Often the UE did detect the neighbor. It simply did not pass the event trigger. A &lt;code&gt;MeasurementReport&lt;/code&gt; is only emitted when an event condition is satisfied, typically &lt;code&gt;eventA3&lt;/code&gt; for handover, and the trigger is sensitive to offsets (&lt;code&gt;Ocn&lt;/code&gt;, &lt;code&gt;Ofn&lt;/code&gt;, hysteresis, &lt;code&gt;timeToTrigger&lt;/code&gt;) defined in the &lt;code&gt;ReportConfigNR&lt;/code&gt; that was active at that moment (TS 38.331 &lt;code&gt;ReportConfigNR&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;How to spot it : cross reference the &lt;code&gt;ReportConfig&lt;/code&gt; associated with the &lt;code&gt;measId&lt;/code&gt; in that report. If &lt;code&gt;eventA3&lt;/code&gt; requires the neighbor to be better than serving by +3 dB and the neighbor is only +1 dB above serving, you will never see it in a report, no matter how strong it is in absolute terms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trap 3 : RRCReconfigurationComplete before SecurityModeComplete
&lt;/h2&gt;

&lt;p&gt;Less common but very misleading. You see the UE send &lt;code&gt;RRCReconfigurationComplete&lt;/code&gt; and then &lt;code&gt;SecurityModeComplete&lt;/code&gt; arrives a few ms later in the trace. Some log viewers reorder messages slightly, so you end up reading what looks like "the UE completed a reconfiguration before security was even up". First reflex : security bug, or protocol violation.&lt;/p&gt;

&lt;p&gt;In practice this is almost always a display ordering artifact. The real ordering at the RRC layer is the one defined in TS 38.331 for the procedural sequence, and the security context itself is governed by TS 33.501. The PDCP sequence numbers and the actual timestamps at the lower layers are the authoritative source, not the order of pretty printed lines in a viewer.&lt;/p&gt;

&lt;p&gt;How to spot it : trust PDCP SN or raw timestamps, not the human readable sort. If the PDCP layer has security already activated when the &lt;code&gt;RRCReconfiguration&lt;/code&gt; was received, the procedure is conformant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why these traps matter
&lt;/h2&gt;

&lt;p&gt;All three traps share the same pattern. A message looks complete on its own, but its meaning depends on state that is &lt;strong&gt;not inside the message itself&lt;/strong&gt;. You need the accumulated &lt;code&gt;measConfig&lt;/code&gt;, or the currently active &lt;code&gt;ReportConfig&lt;/code&gt;, or the PDCP context. A decoder that only shows you one message at a time can make you draw the wrong conclusion very fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check any of the above on your own trace
&lt;/h2&gt;

&lt;p&gt;If you want to paste a raw hex frame and see exactly which IE values are set on &lt;code&gt;RRCReconfiguration&lt;/code&gt;, &lt;code&gt;MeasurementReport&lt;/code&gt;, or any other NR L3 message, I keep a free browser decoder at &lt;a href="https://hicelltek.com/en/decoder/" rel="noopener noreferrer"&gt;hicelltek.com/en/decoder/&lt;/a&gt;. 20 decodes per day, no signup. It is built around the 3GPP TS 38.331 ASN.1 grammar so every field maps back to the spec directly.&lt;/p&gt;

&lt;p&gt;If this is the first time you are looking at RRC hex, my earlier post &lt;a href="https://dev.to/hicelltek/how-to-decode-5g-nr-rrc-messages-online-2oo9"&gt;How to Decode 5G NR RRC Messages Online&lt;/a&gt; covers the basics first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Which RRC trap have you personally lost the most time on ? The measConfig one is the one I see daily, but I am curious if others fall more often on the measurement event conditions or the security ordering artifact. Drop it in the comments.&lt;/p&gt;

</description>
      <category>telecom</category>
      <category>networking</category>
      <category>5g</category>
      <category>wireless</category>
    </item>
    <item>
      <title>How to Decode 5G NR RRC Messages Online</title>
      <dc:creator>Takwa S</dc:creator>
      <pubDate>Thu, 19 Mar 2026 13:49:31 +0000</pubDate>
      <link>https://dev.to/hicelltek/how-to-decode-5g-nr-rrc-messages-online-2oo9</link>
      <guid>https://dev.to/hicelltek/how-to-decode-5g-nr-rrc-messages-online-2oo9</guid>
      <description>&lt;p&gt;If you work with 2G, 3G, 4G or 5G networks, you have probably spent time staring at hex dumps of RRC and NAS messages. Whether you are a field engineer debugging an attach failure, an RF optimizer analyzing handovers, or a protocol analyst investigating VoLTE drops, decoding Layer 3 signaling is a daily task.&lt;/p&gt;

&lt;p&gt;The traditional workflow involves QCAT (Qualcomm-specific, Windows-only, license required), Wireshark (needs full PCAP files), or expensive tools like TEMS and Nemo ($10K+/year). But what if you could decode a single hex frame in your browser, in under a second?&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RRC and why decode it?
&lt;/h2&gt;

&lt;p&gt;RRC (Radio Resource Control) is the Layer 3 protocol between the UE (phone) and the base station (eNB in LTE, gNB in 5G NR). It carries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection setup and release (RRCSetup, RRCRelease)&lt;/li&gt;
&lt;li&gt;Reconfiguration (RRCReconfiguration for handovers, bearer changes, CA/DC config)&lt;/li&gt;
&lt;li&gt;Measurement reports (MeasurementReport with RSRP, RSRQ, SINR from neighbor cells)&lt;/li&gt;
&lt;li&gt;System information (SIB1, SIB2 with cell parameters broadcast)&lt;/li&gt;
&lt;li&gt;UE capabilities (UECapabilityInformation with bands, features, MRDC support)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RRC messages are encoded in ASN.1 using UPER (Unaligned Packed Encoding Rules). You cannot read them without a decoder.&lt;/p&gt;

&lt;h2&gt;
  
  
  The online alternative
&lt;/h2&gt;

&lt;p&gt;HiCellTek offers a free online decoder that handles both RRC and NAS for 2G, 3G, 4G and 5G:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://hicelltek.com/en/decoder/" rel="noopener noreferrer"&gt;hicelltek.com/en/decoder/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select the technology (LTE or 5G NR) and logical channel&lt;/li&gt;
&lt;li&gt;Paste your hex frame&lt;/li&gt;
&lt;li&gt;Click Decode&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The engine is compiled C++ (asn1c) running server-side with 3GPP Release 17 support. It handles complex structures like CellGroupConfig and the LTE-to-NR tunnel (nr-SecondaryCellGroupConfig-r15).&lt;/p&gt;

&lt;h2&gt;
  
  
  How it compares to Wireshark
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Wireshark&lt;/th&gt;
&lt;th&gt;HiCellTek Decoder&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Install required&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (browser)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input format&lt;/td&gt;
&lt;td&gt;Full PCAP&lt;/td&gt;
&lt;td&gt;Single hex string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;File-dependent&lt;/td&gt;
&lt;td&gt;Sub-second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NAS decoding&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Pro plan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch mode&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Up to 1,000 frames&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Export&lt;/td&gt;
&lt;td&gt;PDML/JSON&lt;/td&gt;
&lt;td&gt;.txt and .json&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;Free (20/day) or Pro 29 EUR/mo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5G NR R17&lt;/td&gt;
&lt;td&gt;Version-dependent&lt;/td&gt;
&lt;td&gt;Full R17&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key advantage: no need to reconstruct a PCAP. Paste the hex, get the tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real use case: debugging a 5G SA registration failure
&lt;/h2&gt;

&lt;p&gt;A field engineer captures a Registration Reject from the AMF. The hex payload looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7e0046110000001001000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pasting this into the decoder reveals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Message type: Registration reject&lt;/li&gt;
&lt;li&gt;5GMM cause: #17 (Network failure)&lt;/li&gt;
&lt;li&gt;Diagnosis: the issue is core-side (AMF/UDM), not radio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a decoder, this hex string is meaningless. With one, you have a diagnosis in 2 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is this for?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;RF engineers doing drive tests and cluster optimization&lt;/li&gt;
&lt;li&gt;Protocol analysts investigating signaling flows&lt;/li&gt;
&lt;li&gt;Network operators validating SIB and CellGroupConfig parameters&lt;/li&gt;
&lt;li&gt;Telecom students learning 3GPP protocol structures&lt;/li&gt;
&lt;li&gt;Anyone who has a hex frame and needs to know what it says&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The decoder is at &lt;a href="https://hicelltek.com/en/decoder/" rel="noopener noreferrer"&gt;hicelltek.com/en/decoder/&lt;/a&gt;. 20 free RRC decodes per day, no signup required. The Pro plan (29 EUR/month) adds NAS, batch mode, JSON export and advanced filters.&lt;/p&gt;

&lt;p&gt;If you work with telecom signaling, I would love to hear your feedback. What features would make your workflow easier?&lt;/p&gt;

</description>
      <category>telecom</category>
      <category>networking</category>
      <category>androidopensource</category>
    </item>
  </channel>
</rss>
