From bb4131b33d532356365e0dae7225002cd6b56671 Mon Sep 17 00:00:00 2001
From: hbilel <haithem.bilel@alcatelonetouch.com>
Date: Tue, 28 Mar 2017 19:59:52 +0200
Subject: [PATCH] RLC AM add fixes

---
 openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c    | 8 ++++++++
 openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c       | 4 ++--
 openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c | 5 ++++-
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
index 4cef19253a3..fc31d6e8b6c 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
@@ -1233,6 +1233,10 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
 				  {
 					  // TO DO : RLC Notification to RRC + ReEstablishment procedure
 					  tx_data_pdu_management->flags.max_retransmit = 1;
+					  LOG_W(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RLC AM MAX RETX=%d] SN %04d\n",
+					                PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
+									tx_data_pdu_management->retx_count_next,
+					                sn);
 				  }
 			  }
 			  else if (rlc_pP->nb_bytes_requested_by_mac >= 5)
@@ -1273,6 +1277,10 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
 				  {
 					  // TO DO : RLC Notification to RRC + ReEstablishment procedure
 					  tx_data_pdu_management->flags.max_retransmit = 1;
+					  LOG_W(RLC, PROTOCOL_RLC_AM_CTXT_FMT"[RLC AM MAX RETX=%d] SN %04d\n",
+					  					                PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
+					  									tx_data_pdu_management->retx_count_next,
+					  					                sn);
 				  }
 			  }
 
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
index 7b0d74c5d9e..33b86f7948e 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_rx_list.c
@@ -261,7 +261,7 @@ mem_block_t * create_new_segment_from_pdu(
 			RLC_AM_PDU_SET_E(*pdu_segment_header_p);
 		}
 		/* SN */
-		(*pdu_segment_header_p) |= (pdu_new_segment_info_p->sn >> 8) ;
+		(*pdu_segment_header_p) |= ((pdu_new_segment_info_p->sn >> 8) & 0x3);
 		*(pdu_segment_header_p + 1) = (pdu_new_segment_info_p->sn & 0xFF);
 
 		pdu_segment_header_p += 2;
@@ -272,7 +272,7 @@ mem_block_t * create_new_segment_from_pdu(
 			RLC_AM_PDU_SET_LSF(*pdu_segment_header_p);
 		}
 		/* Store SO bytes */
-		* (pdu_segment_header_p )  		= (pdu_new_segment_info_p->so >> 8) & 0xFF;
+		* (pdu_segment_header_p )  		|= ((pdu_new_segment_info_p->so >> 8) & 0x7F);
 		* (pdu_segment_header_p + 1)  	= pdu_new_segment_info_p->so & 0xFF;
 
 		if (num_li) {
diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
index 3a00946160b..b1f53586cb2 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_status_report.c
@@ -378,7 +378,10 @@ rlc_am_receive_process_control_pdu(
             	break;
             }
           }
-          sn_cursor = (sn_cursor + 1)  & RLC_AM_SN_MASK;
+          if (prev_nack_sn != nack_sn) {
+        	  /* do not increment sn_cursor in case of several informations for the same nack_sn */
+              sn_cursor = (sn_cursor + 1)  & RLC_AM_SN_MASK;
+          }
         }
       }
 
-- 
GitLab