@@ -53,7 +53,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_smallest)
5353{
5454 const uint8_t packed_vec[] = {
5555 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
56- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
56+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
5757 0x11 , // NR-U Sequence Number (upper byte)
5858 0x22 , // NR-U Sequence Number (mid byte)
5959 0x33 , // NR-U Sequence Number (lower byte)
@@ -78,7 +78,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_dl_flush)
7878{
7979 const uint8_t packed_vec[] = {
8080 0x02 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
81- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
81+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
8282 0x11 , // NR-U Sequence Number (upper byte)
8383 0x22 , // NR-U Sequence Number (mid byte)
8484 0x33 , // NR-U Sequence Number (lower byte)
@@ -108,7 +108,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_report_polling)
108108{
109109 const uint8_t packed_vec[] = {
110110 0x01 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
111- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
111+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
112112 0x11 , // NR-U Sequence Number (upper byte)
113113 0x22 , // NR-U Sequence Number (mid byte)
114114 0x33 , // NR-U Sequence Number (lower byte)
@@ -130,11 +130,94 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_report_polling)
130130 EXPECT_EQ (out_buf, packed_buf);
131131}
132132
133+ TEST_F (nru_packing_test, unpack_nru_dl_user_data_with_request_out_of_sequence_report)
134+ {
135+ const uint8_t packed_vec[] = {
136+ 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
137+ 0x10 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
138+ 0x11 , // NR-U Sequence Number (upper byte)
139+ 0x22 , // NR-U Sequence Number (mid byte)
140+ 0x33 , // NR-U Sequence Number (lower byte)
141+ // No further fields
142+ 0x00 , // Padding
143+ };
144+
145+ byte_buffer packed_buf = byte_buffer::create (packed_vec).value ();
146+ nru_dl_user_data out_data;
147+ EXPECT_TRUE (packer->unpack (out_data, packed_buf));
148+ nru_dl_user_data exp_data{};
149+ exp_data.nru_sn = 0x112233 ;
150+ exp_data.request_out_of_seq_report = true ;
151+ EXPECT_EQ (out_data, exp_data);
152+
153+ // Test packing
154+ byte_buffer out_buf;
155+ EXPECT_TRUE (packer->pack (out_buf, exp_data));
156+ EXPECT_EQ (out_buf, packed_buf);
157+ }
158+
159+ TEST_F (nru_packing_test, unpack_nru_dl_user_data_with_report_delivered)
160+ {
161+ const uint8_t packed_vec[] = {
162+ 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
163+ 0x08 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
164+ 0x11 , // NR-U Sequence Number (upper byte)
165+ 0x22 , // NR-U Sequence Number (mid byte)
166+ 0x33 , // NR-U Sequence Number (lower byte)
167+ 0xee , // DL report NR PDCP PDU SN (upper byte)
168+ 0xdd , // DL report NR PDCP PDU SN (mid byte)
169+ 0xcc , // DL report NR PDCP PDU SN (lower byte)
170+ // No further fields
171+ 0x00 , // Padding
172+ 0x00 , // Padding
173+ };
174+
175+ byte_buffer packed_buf = byte_buffer::create (packed_vec).value ();
176+ nru_dl_user_data out_data;
177+ EXPECT_TRUE (packer->unpack (out_data, packed_buf));
178+ nru_dl_user_data exp_data{};
179+ exp_data.nru_sn = 0x112233 ;
180+ exp_data.report_delivered = true ;
181+ exp_data.dl_report_pdcp_sn = 0xeeddcc ;
182+ EXPECT_EQ (out_data, exp_data);
183+
184+ // Test packing
185+ byte_buffer out_buf;
186+ EXPECT_TRUE (packer->pack (out_buf, exp_data));
187+ EXPECT_EQ (out_buf, packed_buf);
188+ }
189+
190+ TEST_F (nru_packing_test, unpack_nru_dl_user_data_with_user_data_existence_flag)
191+ {
192+ const uint8_t packed_vec[] = {
193+ 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
194+ 0x04 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
195+ 0x11 , // NR-U Sequence Number (upper byte)
196+ 0x22 , // NR-U Sequence Number (mid byte)
197+ 0x33 , // NR-U Sequence Number (lower byte)
198+ // No further fields
199+ 0x00 , // Padding
200+ };
201+
202+ byte_buffer packed_buf = byte_buffer::create (packed_vec).value ();
203+ nru_dl_user_data out_data;
204+ EXPECT_TRUE (packer->unpack (out_data, packed_buf));
205+ nru_dl_user_data exp_data{};
206+ exp_data.nru_sn = 0x112233 ;
207+ exp_data.user_data_existence_flag = true ;
208+ EXPECT_EQ (out_data, exp_data);
209+
210+ // Test packing
211+ byte_buffer out_buf;
212+ EXPECT_TRUE (packer->pack (out_buf, exp_data));
213+ EXPECT_EQ (out_buf, packed_buf);
214+ }
215+
133216TEST_F (nru_packing_test, unpack_nru_dl_user_data_with_assist_info_flag)
134217{
135218 const uint8_t packed_vec[] = {
136219 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
137- 0x02 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
220+ 0x02 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
138221 0x11 , // NR-U Sequence Number (upper byte)
139222 0x22 , // NR-U Sequence Number (mid byte)
140223 0x33 , // NR-U Sequence Number (lower byte)
@@ -160,7 +243,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_retransmission_flag)
160243{
161244 const uint8_t packed_vec[] = {
162245 0x00 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
163- 0x01 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
246+ 0x01 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
164247 0x11 , // NR-U Sequence Number (upper byte)
165248 0x22 , // NR-U Sequence Number (mid byte)
166249 0x33 , // NR-U Sequence Number (lower byte)
@@ -186,7 +269,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_discard_blocks)
186269{
187270 const uint8_t packed_vec[] = {
188271 0x04 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
189- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
272+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
190273 0x11 , // NR-U Sequence Number (upper byte)
191274 0x22 , // NR-U Sequence Number (mid byte)
192275 0x33 , // NR-U Sequence Number (lower byte)
@@ -228,7 +311,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_invalid_pdu_type)
228311{
229312 const uint8_t packed_vec[] = {
230313 0xe0 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
231- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
314+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
232315 0x11 , // NR-U Sequence Number (upper byte)
233316 0x22 , // NR-U Sequence Number (mid byte)
234317 0x33 , // NR-U Sequence Number (lower byte)
@@ -245,7 +328,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_missing_padding)
245328{
246329 const uint8_t packed_vec[] = {
247330 0xe0 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
248- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
331+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
249332 0x11 , // NR-U Sequence Number (upper byte)
250333 0x22 , // NR-U Sequence Number (mid byte)
251334 0x33 , // NR-U Sequence Number (lower byte)
@@ -262,7 +345,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_excessive_padding)
262345{
263346 const uint8_t packed_vec[] = {
264347 0xe0 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
265- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
348+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
266349 0x11 , // NR-U Sequence Number (upper byte)
267350 0x22 , // NR-U Sequence Number (mid byte)
268351 0x33 , // NR-U Sequence Number (lower byte)
@@ -280,7 +363,7 @@ TEST_F(nru_packing_test, unpack_nru_dl_user_data_with_too_large_nof_discard_bloc
280363{
281364 const uint8_t packed_vec[] = {
282365 0x04 , // 4PDU Type | Spare | DL Discard Blocks | DL Flush | Report polling
283- 0x00 , // 6Spare | Assist Info Rep Poll Flag | Retransmission flag
366+ 0x00 , // 3Spare | Req OoS Rep | Rep Deliv | User Data Ex | Assist Info Rep Poll Flag | Retransmission flag
284367 0x11 , // NR-U Sequence Number (upper byte)
285368 0x22 , // NR-U Sequence Number (mid byte)
286369 0x33 , // NR-U Sequence Number (lower byte)
0 commit comments