UE Has Data… But the Network Thinks It Doesn’t | MAC Hidden Gem

UE Has Data… But the Network Thinks It Doesn’t | MAC Hidden Gem

Here’s a scenario that looks fine at first… but breaks down under the hood:

→ You see UL grants being scheduled
→ RF looks good
→ But throughput is still close to zero

At first glance… it doesn’t add up.

The catch:

In LTE/5G, uplink is not driven by “data availability”

It’s driven by what the network knows about your buffer

And that comes from:

→ BSR (Buffer Status Report)

Where things actually go wrong:

No BSR → no data driven scheduling
UE has data, but no BSR triggered
→ gNB assumes buffer = empty

BSR not received
Control channel issue or HARQ miss
→ network never “hears” it

Deadlock loop
No BSR → No UL grant
No UL grant → No way to send BSR

→ That’s why SR exists
but if SR doesn’t fire… you’re stuck

This is essentially a breakdown of the SR-BSR-Grant handshake. If the gNB misses the SR, the conversation never starts.

Grants exist… but still no throughput

You might see UL grants, but:

MAC uses them for:
• control elements (BSR, MAC CE)
• retransmissions
• headers / padding

→ What’s left for actual data (MAC SDU)? Very little.

Logical Channel prioritization
High-priority signaling takes over

→ user data stays in buffer

How you catch this in logs:

• Missing or delayed BSR MAC CE → network has no visibility of UL buffer

• SR attempts hit SR-TransMax with no DCI grant → UE is asking, network isn’t responding

• UL grants present but tiny MAC SDU → resources consumed by control / retransmissions, not user data

• RLC buffer keeps growing over time → data exists, but never makes it onto the air

And one subtle detail:
BSR doesn’t report exact bytes

– It reports a quantized (bucketed) value

→ So the scheduler is always working with an approximation

Not the exact buffer size

Key takeaway:

UL scheduling is not about “having data”
It’s about making the network aware of it, and getting usable grants

Even with perfect RF, uplink performance can still be limited purely by MAC signaling visibility and scheduling decisions

:light_bulb:So when UL looks dead…

Don’t stop at RF
→ Go one layer deeper - MAC usually tells the real story

LinnkedIn: :backhand_index_pointing_down: