From 14c823037f89d924aadb7d638762142e2c2f5129 Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 17 Mar 2021 16:04:11 +0100
Subject: [PATCH] nr pdcp: bugfix: D/C bit set only for DRBs

---
 openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
index eda6888ecd..c3ccc7710e 100644
--- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
+++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c
@@ -140,16 +140,24 @@ static void nr_pdcp_entity_recv_sdu(nr_pdcp_entity_t *entity,
   int      sn;
   int      header_size;
   char     buf[size+3+4];
+  int      dc_bit;
 
   count = entity->tx_next;
   sn = entity->tx_next & entity->sn_max;
 
+  /* D/C bit is only to be set for DRBs */
+  if (entity->type == NR_PDCP_DRB_AM || entity->type == NR_PDCP_DRB_UM) {
+    dc_bit = 0x80;
+  } else {
+    dc_bit = 0;
+  }
+
   if (entity->sn_size == 12) {
-    buf[0] = 0x80 | ((sn >> 8) & 0xf);
+    buf[0] = dc_bit | ((sn >> 8) & 0xf);
     buf[1] = sn & 0xff;
     header_size = 2;
   } else {
-    buf[0] = 0x80 | ((sn >> 16) & 0x3);
+    buf[0] = dc_bit | ((sn >> 16) & 0x3);
     buf[1] = (sn >> 8) & 0xff;
     buf[2] = sn & 0xff;
     header_size = 3;
-- 
2.26.2