1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang  *
3*4418919fSjohnjiang  * Copyright (C) 2015-2016 Freescale Semiconductor,Inc.
4*4418919fSjohnjiang  * Copyright 2018-2019 NXP
5*4418919fSjohnjiang  */
6*4418919fSjohnjiang 
7*4418919fSjohnjiang #include <time.h>
8*4418919fSjohnjiang 
9*4418919fSjohnjiang #include <rte_common.h>
10*4418919fSjohnjiang #include <rte_hexdump.h>
11*4418919fSjohnjiang #include <rte_mbuf.h>
12*4418919fSjohnjiang #include <rte_malloc.h>
13*4418919fSjohnjiang #include <rte_memcpy.h>
14*4418919fSjohnjiang #include <rte_pause.h>
15*4418919fSjohnjiang #include <rte_bus_vdev.h>
16*4418919fSjohnjiang #include <rte_byteorder.h>
17*4418919fSjohnjiang 
18*4418919fSjohnjiang #include <rte_crypto.h>
19*4418919fSjohnjiang #include <rte_cryptodev.h>
20*4418919fSjohnjiang #include <rte_cryptodev_pmd.h>
21*4418919fSjohnjiang #include <rte_security.h>
22*4418919fSjohnjiang 
23*4418919fSjohnjiang #include <rte_lcore.h>
24*4418919fSjohnjiang #include "test.h"
25*4418919fSjohnjiang #include "test_cryptodev_security_pdcp_test_func.h"
26*4418919fSjohnjiang 
cplane_encap(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off,enum auth_alg_off auth_alg_off)27*4418919fSjohnjiang static int cplane_encap(uint32_t sn_size, uint8_t dir,
28*4418919fSjohnjiang 			enum enc_alg_off enc_alg_off,
29*4418919fSjohnjiang 			enum auth_alg_off auth_alg_off)
30*4418919fSjohnjiang {
31*4418919fSjohnjiang 	int i = 0;
32*4418919fSjohnjiang 
33*4418919fSjohnjiang 	switch (sn_size) {
34*4418919fSjohnjiang 	case 5:
35*4418919fSjohnjiang 		i = PDCP_CPLANE_OFFSET + enc_alg_off +
36*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
37*4418919fSjohnjiang 				UPLINK : DOWNLINK);
38*4418919fSjohnjiang 		break;
39*4418919fSjohnjiang 	case 12:
40*4418919fSjohnjiang 		i = PDCP_CPLANE_LONG_SN_OFFSET + enc_alg_off +
41*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
42*4418919fSjohnjiang 				UPLINK : DOWNLINK);
43*4418919fSjohnjiang 		break;
44*4418919fSjohnjiang 	default:
45*4418919fSjohnjiang 		printf("\nInvalid SN: %u for %s\n", sn_size, __func__);
46*4418919fSjohnjiang 	}
47*4418919fSjohnjiang 
48*4418919fSjohnjiang 	return test_pdcp_proto_cplane_encap(i);
49*4418919fSjohnjiang }
50*4418919fSjohnjiang 
51*4418919fSjohnjiang static int
cplane_decap(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off,enum auth_alg_off auth_alg_off)52*4418919fSjohnjiang cplane_decap(uint32_t sn_size, uint8_t dir,
53*4418919fSjohnjiang 	     enum enc_alg_off enc_alg_off,
54*4418919fSjohnjiang 	     enum auth_alg_off auth_alg_off)
55*4418919fSjohnjiang {
56*4418919fSjohnjiang 	int i = 0;
57*4418919fSjohnjiang 
58*4418919fSjohnjiang 	switch (sn_size) {
59*4418919fSjohnjiang 	case 5:
60*4418919fSjohnjiang 		i = PDCP_CPLANE_OFFSET + enc_alg_off +
61*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
62*4418919fSjohnjiang 				UPLINK : DOWNLINK);
63*4418919fSjohnjiang 		break;
64*4418919fSjohnjiang 	case 12:
65*4418919fSjohnjiang 		i = PDCP_CPLANE_LONG_SN_OFFSET + enc_alg_off +
66*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
67*4418919fSjohnjiang 				UPLINK : DOWNLINK);
68*4418919fSjohnjiang 		break;
69*4418919fSjohnjiang 	default:
70*4418919fSjohnjiang 		printf("\nInvalid SN: %u for %s\n", sn_size, __func__);
71*4418919fSjohnjiang 	}
72*4418919fSjohnjiang 
73*4418919fSjohnjiang 	return test_pdcp_proto_cplane_decap(i);
74*4418919fSjohnjiang }
75*4418919fSjohnjiang 
uplane_encap_no_integrity(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off)76*4418919fSjohnjiang static int uplane_encap_no_integrity(uint32_t sn_size, uint8_t dir,
77*4418919fSjohnjiang 		enum enc_alg_off enc_alg_off)
78*4418919fSjohnjiang {
79*4418919fSjohnjiang 	int i = PDCP_UPLANE_OFFSET + ((dir == 0) ? UPLINK : DOWNLINK) +
80*4418919fSjohnjiang 			enc_alg_off;
81*4418919fSjohnjiang 
82*4418919fSjohnjiang 	switch (sn_size) {
83*4418919fSjohnjiang 	case 7:
84*4418919fSjohnjiang 		i += SHORT_SEQ_NUM_OFFSET;
85*4418919fSjohnjiang 		break;
86*4418919fSjohnjiang 	case 15:
87*4418919fSjohnjiang 		i += FIFTEEN_BIT_SEQ_NUM_OFFSET;
88*4418919fSjohnjiang 		break;
89*4418919fSjohnjiang 	case 12:
90*4418919fSjohnjiang 		i += LONG_SEQ_NUM_OFFSET;
91*4418919fSjohnjiang 		break;
92*4418919fSjohnjiang 	case 18:
93*4418919fSjohnjiang 		i += EIGHTEEN_BIT_SEQ_NUM_OFFSET;
94*4418919fSjohnjiang 		break;
95*4418919fSjohnjiang 	default:
96*4418919fSjohnjiang 		printf("\nInvalid SN: %u\n", sn_size);
97*4418919fSjohnjiang 	}
98*4418919fSjohnjiang 
99*4418919fSjohnjiang 	return test_pdcp_proto_uplane_encap(i);
100*4418919fSjohnjiang }
101*4418919fSjohnjiang 
102*4418919fSjohnjiang static int
uplane_decap_no_integrity(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off)103*4418919fSjohnjiang uplane_decap_no_integrity(uint32_t sn_size, uint8_t dir,
104*4418919fSjohnjiang 		enum enc_alg_off enc_alg_off)
105*4418919fSjohnjiang {
106*4418919fSjohnjiang 	int i = PDCP_UPLANE_OFFSET + ((dir == 0) ? UPLINK : DOWNLINK) +
107*4418919fSjohnjiang 			enc_alg_off;
108*4418919fSjohnjiang 
109*4418919fSjohnjiang 	switch (sn_size) {
110*4418919fSjohnjiang 	case 7:
111*4418919fSjohnjiang 		i += SHORT_SEQ_NUM_OFFSET;
112*4418919fSjohnjiang 		break;
113*4418919fSjohnjiang 	case 15:
114*4418919fSjohnjiang 		i += FIFTEEN_BIT_SEQ_NUM_OFFSET;
115*4418919fSjohnjiang 		break;
116*4418919fSjohnjiang 	case 12:
117*4418919fSjohnjiang 		i += LONG_SEQ_NUM_OFFSET;
118*4418919fSjohnjiang 		break;
119*4418919fSjohnjiang 	case 18:
120*4418919fSjohnjiang 		i += EIGHTEEN_BIT_SEQ_NUM_OFFSET;
121*4418919fSjohnjiang 		break;
122*4418919fSjohnjiang 	default:
123*4418919fSjohnjiang 		printf("\nInvalid SN: %u\n", sn_size);
124*4418919fSjohnjiang 	}
125*4418919fSjohnjiang 
126*4418919fSjohnjiang 	return test_pdcp_proto_uplane_decap(i);
127*4418919fSjohnjiang }
128*4418919fSjohnjiang 
129*4418919fSjohnjiang static int
uplane_encap_with_integrity(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off,enum auth_alg_off auth_alg_off)130*4418919fSjohnjiang uplane_encap_with_integrity(uint32_t sn_size, uint8_t dir,
131*4418919fSjohnjiang 		enum enc_alg_off enc_alg_off,
132*4418919fSjohnjiang 		enum auth_alg_off auth_alg_off)
133*4418919fSjohnjiang {
134*4418919fSjohnjiang 	int i = 0;
135*4418919fSjohnjiang 
136*4418919fSjohnjiang 	switch (sn_size) {
137*4418919fSjohnjiang 	case 12:
138*4418919fSjohnjiang 		i = PDCP_UPLANE_12BIT_OFFSET + enc_alg_off +
139*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
140*4418919fSjohnjiang 				UPLINK : DOWNLINK);
141*4418919fSjohnjiang 		break;
142*4418919fSjohnjiang 	case 18:
143*4418919fSjohnjiang 		i = PDCP_UPLANE_18BIT_OFFSET + enc_alg_off +
144*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
145*4418919fSjohnjiang 				UPLINK : DOWNLINK);
146*4418919fSjohnjiang 		break;
147*4418919fSjohnjiang 	default:
148*4418919fSjohnjiang 		printf("\nInvalid SN: %u\n", sn_size);
149*4418919fSjohnjiang 	}
150*4418919fSjohnjiang 
151*4418919fSjohnjiang 	return test_pdcp_proto_uplane_encap_with_int(i);
152*4418919fSjohnjiang }
153*4418919fSjohnjiang 
154*4418919fSjohnjiang static int
uplane_decap_with_integrity(uint32_t sn_size,uint8_t dir,enum enc_alg_off enc_alg_off,enum auth_alg_off auth_alg_off)155*4418919fSjohnjiang uplane_decap_with_integrity(uint32_t sn_size, uint8_t dir,
156*4418919fSjohnjiang 		enum enc_alg_off enc_alg_off,
157*4418919fSjohnjiang 		enum auth_alg_off auth_alg_off)
158*4418919fSjohnjiang {
159*4418919fSjohnjiang 	int i = 0;
160*4418919fSjohnjiang 
161*4418919fSjohnjiang 	switch (sn_size) {
162*4418919fSjohnjiang 	case 12:
163*4418919fSjohnjiang 		i = PDCP_UPLANE_12BIT_OFFSET + enc_alg_off +
164*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
165*4418919fSjohnjiang 				UPLINK : DOWNLINK);
166*4418919fSjohnjiang 		break;
167*4418919fSjohnjiang 	case 18:
168*4418919fSjohnjiang 		i = PDCP_UPLANE_18BIT_OFFSET + enc_alg_off +
169*4418919fSjohnjiang 			auth_alg_off + ((dir == 0) ?
170*4418919fSjohnjiang 				UPLINK : DOWNLINK);
171*4418919fSjohnjiang 		break;
172*4418919fSjohnjiang 	default:
173*4418919fSjohnjiang 		printf("\nInvalid SN: %u\n", sn_size);
174*4418919fSjohnjiang 	}
175*4418919fSjohnjiang 
176*4418919fSjohnjiang 	return test_pdcp_proto_uplane_decap_with_int(i);
177*4418919fSjohnjiang }
178*4418919fSjohnjiang 
179*4418919fSjohnjiang #define TEST_PDCP_COUNT(func) do {			\
180*4418919fSjohnjiang 	if (func == TEST_SUCCESS)  {			\
181*4418919fSjohnjiang 		printf("\t%d)", n++);			\
182*4418919fSjohnjiang 		printf(#func"-PASS\n");			\
183*4418919fSjohnjiang 		i++;					\
184*4418919fSjohnjiang 	} else {					\
185*4418919fSjohnjiang 		printf("\t%d)", n++);			\
186*4418919fSjohnjiang 		printf("+++++ FAILED:" #func"\n");	\
187*4418919fSjohnjiang 	}						\
188*4418919fSjohnjiang } while (0)
189*4418919fSjohnjiang 
190*4418919fSjohnjiang int
test_PDCP_PROTO_cplane_encap_all(void)191*4418919fSjohnjiang test_PDCP_PROTO_cplane_encap_all(void)
192*4418919fSjohnjiang {
193*4418919fSjohnjiang 	int i = 0, n = 0;
194*4418919fSjohnjiang 
195*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, NULL_ENC, NULL_AUTH));
196*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, NULL_ENC, NULL_AUTH));
197*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, NULL_ENC, SNOW_AUTH));
198*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, NULL_ENC, SNOW_AUTH));
199*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, NULL_ENC, AES_AUTH));
200*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, NULL_ENC, AES_AUTH));
201*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, NULL_ENC, ZUC_AUTH));
202*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, NULL_ENC, ZUC_AUTH));
203*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, SNOW_ENC, NULL_AUTH));
204*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, SNOW_ENC, NULL_AUTH));
205*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, SNOW_ENC, SNOW_AUTH));
206*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, SNOW_ENC, SNOW_AUTH));
207*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, SNOW_ENC, AES_AUTH));
208*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, SNOW_ENC, AES_AUTH));
209*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, SNOW_ENC, ZUC_AUTH));
210*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, SNOW_ENC, ZUC_AUTH));
211*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, AES_ENC, NULL_AUTH));
212*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, AES_ENC, NULL_AUTH));
213*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, AES_ENC, SNOW_AUTH));
214*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, AES_ENC, SNOW_AUTH));
215*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, AES_ENC, AES_AUTH));
216*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, AES_ENC, AES_AUTH));
217*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, AES_ENC, ZUC_AUTH));
218*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, AES_ENC, ZUC_AUTH));
219*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, ZUC_ENC, NULL_AUTH));
220*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, ZUC_ENC, NULL_AUTH));
221*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, ZUC_ENC, SNOW_AUTH));
222*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, ZUC_ENC, SNOW_AUTH));
223*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, ZUC_ENC, AES_AUTH));
224*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, ZUC_ENC, AES_AUTH));
225*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, UPLINK, ZUC_ENC, ZUC_AUTH));
226*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(5, DOWNLINK, ZUC_ENC, ZUC_AUTH));
227*4418919fSjohnjiang 
228*4418919fSjohnjiang 	/* For 12-bit SN */
229*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, NULL_ENC, NULL_AUTH));
230*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, NULL_ENC, NULL_AUTH));
231*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, NULL_ENC, SNOW_AUTH));
232*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, NULL_ENC, SNOW_AUTH));
233*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, NULL_ENC, AES_AUTH));
234*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, NULL_ENC, AES_AUTH));
235*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, NULL_ENC, ZUC_AUTH));
236*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, NULL_ENC, ZUC_AUTH));
237*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, SNOW_ENC, NULL_AUTH));
238*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, SNOW_ENC, NULL_AUTH));
239*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, SNOW_ENC, SNOW_AUTH));
240*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, SNOW_ENC, SNOW_AUTH));
241*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, SNOW_ENC, AES_AUTH));
242*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, SNOW_ENC, AES_AUTH));
243*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, SNOW_ENC, ZUC_AUTH));
244*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, SNOW_ENC, ZUC_AUTH));
245*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, AES_ENC, NULL_AUTH));
246*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, AES_ENC, NULL_AUTH));
247*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, AES_ENC, SNOW_AUTH));
248*4418919fSjohnjiang 
249*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, AES_ENC, SNOW_AUTH));
250*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, AES_ENC, AES_AUTH));
251*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, AES_ENC, AES_AUTH));
252*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, AES_ENC, ZUC_AUTH));
253*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, AES_ENC, ZUC_AUTH));
254*4418919fSjohnjiang 
255*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, ZUC_ENC, NULL_AUTH));
256*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, ZUC_ENC, NULL_AUTH));
257*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, ZUC_ENC, SNOW_AUTH));
258*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, ZUC_ENC, SNOW_AUTH));
259*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, ZUC_ENC, AES_AUTH));
260*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, ZUC_ENC, AES_AUTH));
261*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, UPLINK, ZUC_ENC, ZUC_AUTH));
262*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_encap(12, DOWNLINK, ZUC_ENC, ZUC_AUTH));
263*4418919fSjohnjiang 
264*4418919fSjohnjiang 	if (n - i)
265*4418919fSjohnjiang 		printf("## %s: %d passed out of %d\n", __func__, i, n);
266*4418919fSjohnjiang 
267*4418919fSjohnjiang 	return n - i;
268*4418919fSjohnjiang };
269*4418919fSjohnjiang 
270*4418919fSjohnjiang int
test_PDCP_PROTO_cplane_decap_all(void)271*4418919fSjohnjiang test_PDCP_PROTO_cplane_decap_all(void)
272*4418919fSjohnjiang {
273*4418919fSjohnjiang 	int i = 0, n = 0;
274*4418919fSjohnjiang 
275*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, NULL_ENC, NULL_AUTH));
276*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, NULL_ENC, NULL_AUTH));
277*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, NULL_ENC, SNOW_AUTH));
278*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, NULL_ENC, SNOW_AUTH));
279*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, NULL_ENC, AES_AUTH));
280*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, NULL_ENC, AES_AUTH));
281*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, NULL_ENC, ZUC_AUTH));
282*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, NULL_ENC, ZUC_AUTH));
283*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, SNOW_ENC, NULL_AUTH));
284*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, SNOW_ENC, NULL_AUTH));
285*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, SNOW_ENC, SNOW_AUTH));
286*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, SNOW_ENC, SNOW_AUTH));
287*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, SNOW_ENC, AES_AUTH));
288*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, SNOW_ENC, AES_AUTH));
289*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, SNOW_ENC, ZUC_AUTH));
290*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, SNOW_ENC, ZUC_AUTH));
291*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, AES_ENC, NULL_AUTH));
292*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, AES_ENC, NULL_AUTH));
293*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, AES_ENC, SNOW_AUTH));
294*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, AES_ENC, SNOW_AUTH));
295*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, AES_ENC, AES_AUTH));
296*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, AES_ENC, AES_AUTH));
297*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, AES_ENC, ZUC_AUTH));
298*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, AES_ENC, ZUC_AUTH));
299*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, ZUC_ENC, NULL_AUTH));
300*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, ZUC_ENC, NULL_AUTH));
301*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, ZUC_ENC, SNOW_AUTH));
302*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, ZUC_ENC, SNOW_AUTH));
303*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, ZUC_ENC, AES_AUTH));
304*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, ZUC_ENC, AES_AUTH));
305*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, UPLINK, ZUC_ENC, ZUC_AUTH));
306*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(5, DOWNLINK, ZUC_ENC, ZUC_AUTH));
307*4418919fSjohnjiang 
308*4418919fSjohnjiang 	/* C-plane 12-bit */
309*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, NULL_ENC, NULL_AUTH));
310*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, NULL_ENC, NULL_AUTH));
311*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, NULL_ENC, SNOW_AUTH));
312*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, NULL_ENC, SNOW_AUTH));
313*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, NULL_ENC, AES_AUTH));
314*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, NULL_ENC, AES_AUTH));
315*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, NULL_ENC, ZUC_AUTH));
316*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, NULL_ENC, ZUC_AUTH));
317*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, SNOW_ENC, NULL_AUTH));
318*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, SNOW_ENC, NULL_AUTH));
319*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, SNOW_ENC, SNOW_AUTH));
320*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, SNOW_ENC, SNOW_AUTH));
321*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, SNOW_ENC, AES_AUTH));
322*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, SNOW_ENC, AES_AUTH));
323*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, SNOW_ENC, ZUC_AUTH));
324*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, SNOW_ENC, ZUC_AUTH));
325*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, AES_ENC, NULL_AUTH));
326*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, AES_ENC, NULL_AUTH));
327*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, AES_ENC, SNOW_AUTH));
328*4418919fSjohnjiang 
329*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, AES_ENC, SNOW_AUTH));
330*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, AES_ENC, AES_AUTH));
331*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, AES_ENC, AES_AUTH));
332*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, AES_ENC, ZUC_AUTH));
333*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, AES_ENC, ZUC_AUTH));
334*4418919fSjohnjiang 
335*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, ZUC_ENC, NULL_AUTH));
336*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, ZUC_ENC, NULL_AUTH));
337*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, ZUC_ENC, SNOW_AUTH));
338*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, ZUC_ENC, SNOW_AUTH));
339*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, ZUC_ENC, AES_AUTH));
340*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, ZUC_ENC, AES_AUTH));
341*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, UPLINK, ZUC_ENC, ZUC_AUTH));
342*4418919fSjohnjiang 	TEST_PDCP_COUNT(cplane_decap(12, DOWNLINK, ZUC_ENC, ZUC_AUTH));
343*4418919fSjohnjiang 
344*4418919fSjohnjiang 	if (n - i)
345*4418919fSjohnjiang 		printf("## %s: %d passed out of %d\n", __func__, i, n);
346*4418919fSjohnjiang 
347*4418919fSjohnjiang 	return n - i;
348*4418919fSjohnjiang };
349*4418919fSjohnjiang 
350*4418919fSjohnjiang int
test_PDCP_PROTO_uplane_encap_all(void)351*4418919fSjohnjiang test_PDCP_PROTO_uplane_encap_all(void)
352*4418919fSjohnjiang {
353*4418919fSjohnjiang 	int i = 0, n = 0;
354*4418919fSjohnjiang 
355*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, UPLINK, NULL_ENC));
356*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, DOWNLINK, NULL_ENC));
357*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, UPLINK, NULL_ENC));
358*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, DOWNLINK, NULL_ENC));
359*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, UPLINK, NULL_ENC));
360*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, DOWNLINK, NULL_ENC));
361*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, UPLINK, NULL_ENC));
362*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, DOWNLINK, NULL_ENC));
363*4418919fSjohnjiang 
364*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, UPLINK, SNOW_ENC));
365*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, DOWNLINK, SNOW_ENC));
366*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, UPLINK, SNOW_ENC));
367*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, DOWNLINK, SNOW_ENC));
368*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, UPLINK, SNOW_ENC));
369*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, DOWNLINK, SNOW_ENC));
370*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, UPLINK, SNOW_ENC));
371*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, DOWNLINK, SNOW_ENC));
372*4418919fSjohnjiang 
373*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, UPLINK, AES_ENC));
374*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, DOWNLINK, AES_ENC));
375*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, UPLINK, AES_ENC));
376*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, DOWNLINK, AES_ENC));
377*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, UPLINK, AES_ENC));
378*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, DOWNLINK, AES_ENC));
379*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, UPLINK, AES_ENC));
380*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, DOWNLINK, AES_ENC));
381*4418919fSjohnjiang 
382*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, UPLINK, ZUC_ENC));
383*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(12, DOWNLINK, ZUC_ENC));
384*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, UPLINK, ZUC_ENC));
385*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(7, DOWNLINK, ZUC_ENC));
386*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, UPLINK, ZUC_ENC));
387*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(15, DOWNLINK, ZUC_ENC));
388*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, UPLINK, ZUC_ENC));
389*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_no_integrity(18, DOWNLINK, ZUC_ENC));
390*4418919fSjohnjiang 
391*4418919fSjohnjiang 	/* For 12-bit SN with integrity */
392*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, NULL_ENC, NULL_AUTH));
393*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, NULL_ENC, NULL_AUTH));
394*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, NULL_ENC, SNOW_AUTH));
395*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, NULL_ENC, SNOW_AUTH));
396*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, NULL_ENC, AES_AUTH));
397*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, NULL_ENC, AES_AUTH));
398*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, NULL_ENC, ZUC_AUTH));
399*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, NULL_ENC, ZUC_AUTH));
400*4418919fSjohnjiang 
401*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, SNOW_ENC, NULL_AUTH));
402*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, SNOW_ENC, NULL_AUTH));
403*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, SNOW_ENC, SNOW_AUTH));
404*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, SNOW_ENC, SNOW_AUTH));
405*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, SNOW_ENC, AES_AUTH));
406*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, SNOW_ENC, AES_AUTH));
407*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, SNOW_ENC, ZUC_AUTH));
408*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, SNOW_ENC, ZUC_AUTH));
409*4418919fSjohnjiang 
410*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, AES_ENC, NULL_AUTH));
411*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, AES_ENC, NULL_AUTH));
412*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, AES_ENC, SNOW_AUTH));
413*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, AES_ENC, SNOW_AUTH));
414*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, AES_ENC, AES_AUTH));
415*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, AES_ENC, AES_AUTH));
416*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, AES_ENC, ZUC_AUTH));
417*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, AES_ENC, ZUC_AUTH));
418*4418919fSjohnjiang 
419*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, ZUC_ENC, NULL_AUTH));
420*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, ZUC_ENC, NULL_AUTH));
421*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, ZUC_ENC, SNOW_AUTH));
422*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, ZUC_ENC, SNOW_AUTH));
423*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, ZUC_ENC, AES_AUTH));
424*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, ZUC_ENC, AES_AUTH));
425*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, UPLINK, ZUC_ENC, ZUC_AUTH));
426*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(12, DOWNLINK, ZUC_ENC, ZUC_AUTH));
427*4418919fSjohnjiang 
428*4418919fSjohnjiang 	/* For 18-bit SN with integrity */
429*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, NULL_ENC, NULL_AUTH));
430*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, NULL_ENC, NULL_AUTH));
431*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, NULL_ENC, SNOW_AUTH));
432*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, NULL_ENC, SNOW_AUTH));
433*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, NULL_ENC, AES_AUTH));
434*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, NULL_ENC, AES_AUTH));
435*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, NULL_ENC, ZUC_AUTH));
436*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, NULL_ENC, ZUC_AUTH));
437*4418919fSjohnjiang 
438*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, SNOW_ENC, NULL_AUTH));
439*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, SNOW_ENC, NULL_AUTH));
440*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, SNOW_ENC, SNOW_AUTH));
441*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, SNOW_ENC, SNOW_AUTH));
442*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, SNOW_ENC, AES_AUTH));
443*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, SNOW_ENC, AES_AUTH));
444*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, SNOW_ENC, ZUC_AUTH));
445*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, SNOW_ENC, ZUC_AUTH));
446*4418919fSjohnjiang 
447*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, AES_ENC, NULL_AUTH));
448*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, AES_ENC, NULL_AUTH));
449*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, AES_ENC, SNOW_AUTH));
450*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, AES_ENC, SNOW_AUTH));
451*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, AES_ENC, AES_AUTH));
452*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, AES_ENC, AES_AUTH));
453*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, AES_ENC, ZUC_AUTH));
454*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, AES_ENC, ZUC_AUTH));
455*4418919fSjohnjiang 
456*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, ZUC_ENC, NULL_AUTH));
457*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, ZUC_ENC, NULL_AUTH));
458*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, ZUC_ENC, SNOW_AUTH));
459*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, ZUC_ENC, SNOW_AUTH));
460*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, ZUC_ENC, AES_AUTH));
461*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, ZUC_ENC, AES_AUTH));
462*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, UPLINK, ZUC_ENC, ZUC_AUTH));
463*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_encap_with_integrity(18, DOWNLINK, ZUC_ENC, ZUC_AUTH));
464*4418919fSjohnjiang 
465*4418919fSjohnjiang 	if (n - i)
466*4418919fSjohnjiang 		printf("## %s: %d passed out of %d\n", __func__, i, n);
467*4418919fSjohnjiang 
468*4418919fSjohnjiang 	return n - i;
469*4418919fSjohnjiang };
470*4418919fSjohnjiang 
471*4418919fSjohnjiang int
test_PDCP_PROTO_uplane_decap_all(void)472*4418919fSjohnjiang test_PDCP_PROTO_uplane_decap_all(void)
473*4418919fSjohnjiang {
474*4418919fSjohnjiang 	int i = 0, n = 0;
475*4418919fSjohnjiang 
476*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, NULL_ENC));
477*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, NULL_ENC));
478*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, NULL_ENC));
479*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, NULL_ENC));
480*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, NULL_ENC));
481*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, NULL_ENC));
482*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, NULL_ENC));
483*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, NULL_ENC));
484*4418919fSjohnjiang 
485*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, SNOW_ENC));
486*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, SNOW_ENC));
487*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, SNOW_ENC));
488*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, SNOW_ENC));
489*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, SNOW_ENC));
490*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, SNOW_ENC));
491*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, SNOW_ENC));
492*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, SNOW_ENC));
493*4418919fSjohnjiang 
494*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, AES_ENC));
495*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, AES_ENC));
496*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, AES_ENC));
497*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, AES_ENC));
498*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, AES_ENC));
499*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, AES_ENC));
500*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, AES_ENC));
501*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, AES_ENC));
502*4418919fSjohnjiang 
503*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, UPLINK, ZUC_ENC));
504*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(12, DOWNLINK, ZUC_ENC));
505*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, UPLINK, ZUC_ENC));
506*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(7, DOWNLINK, ZUC_ENC));
507*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, UPLINK, ZUC_ENC));
508*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(15, DOWNLINK, ZUC_ENC));
509*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, UPLINK, ZUC_ENC));
510*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_no_integrity(18, DOWNLINK, ZUC_ENC));
511*4418919fSjohnjiang 
512*4418919fSjohnjiang 	/* u-plane 12-bit with integrity */
513*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, NULL_AUTH));
514*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, NULL_AUTH));
515*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, SNOW_AUTH));
516*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, SNOW_AUTH));
517*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, AES_AUTH));
518*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, AES_AUTH));
519*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, NULL_ENC, ZUC_AUTH));
520*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, NULL_ENC, ZUC_AUTH));
521*4418919fSjohnjiang 
522*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, NULL_AUTH));
523*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, NULL_AUTH));
524*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, SNOW_AUTH));
525*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, SNOW_AUTH));
526*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, AES_AUTH));
527*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, AES_AUTH));
528*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, SNOW_ENC, ZUC_AUTH));
529*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, SNOW_ENC, ZUC_AUTH));
530*4418919fSjohnjiang 
531*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, NULL_AUTH));
532*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, NULL_AUTH));
533*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, SNOW_AUTH));
534*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, SNOW_AUTH));
535*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, AES_AUTH));
536*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, AES_AUTH));
537*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, AES_ENC, ZUC_AUTH));
538*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, AES_ENC, ZUC_AUTH));
539*4418919fSjohnjiang 
540*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, NULL_AUTH));
541*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, NULL_AUTH));
542*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, SNOW_AUTH));
543*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, SNOW_AUTH));
544*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, AES_AUTH));
545*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, AES_AUTH));
546*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, UPLINK, ZUC_ENC, ZUC_AUTH));
547*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(12, DOWNLINK, ZUC_ENC, ZUC_AUTH));
548*4418919fSjohnjiang 
549*4418919fSjohnjiang 	/* u-plane 18-bit with integrity */
550*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, NULL_AUTH));
551*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, NULL_AUTH));
552*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, SNOW_AUTH));
553*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, SNOW_AUTH));
554*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, AES_AUTH));
555*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, AES_AUTH));
556*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, NULL_ENC, ZUC_AUTH));
557*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, NULL_ENC, ZUC_AUTH));
558*4418919fSjohnjiang 
559*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, NULL_AUTH));
560*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, NULL_AUTH));
561*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, SNOW_AUTH));
562*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, SNOW_AUTH));
563*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, AES_AUTH));
564*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, AES_AUTH));
565*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, SNOW_ENC, ZUC_AUTH));
566*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, SNOW_ENC, ZUC_AUTH));
567*4418919fSjohnjiang 
568*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, NULL_AUTH));
569*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, NULL_AUTH));
570*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, SNOW_AUTH));
571*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, SNOW_AUTH));
572*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, AES_AUTH));
573*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, AES_AUTH));
574*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, AES_ENC, ZUC_AUTH));
575*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, AES_ENC, ZUC_AUTH));
576*4418919fSjohnjiang 
577*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, NULL_AUTH));
578*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, NULL_AUTH));
579*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, SNOW_AUTH));
580*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, SNOW_AUTH));
581*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, AES_AUTH));
582*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, AES_AUTH));
583*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, UPLINK, ZUC_ENC, ZUC_AUTH));
584*4418919fSjohnjiang 	TEST_PDCP_COUNT(uplane_decap_with_integrity(18, DOWNLINK, ZUC_ENC, ZUC_AUTH));
585*4418919fSjohnjiang 
586*4418919fSjohnjiang 	if (n - i)
587*4418919fSjohnjiang 		printf("## %s: %d passed out of %d\n", __func__, i, n);
588*4418919fSjohnjiang 
589*4418919fSjohnjiang 	return n - i;
590*4418919fSjohnjiang };
591