ipsec: reorder packet process for ESP inbound
[dpdk.git] / lib / librte_ipsec / misc.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2018 Intel Corporation
3  */
4
5 #ifndef _MISC_H_
6 #define _MISC_H_
7
8 /**
9  * @file misc.h
10  * Contains miscelaneous functions/structures/macros used internally
11  * by ipsec library.
12  */
13
14 /*
15  * Move bad (unprocessed) mbufs beyond the good (processed) ones.
16  * bad_idx[] contains the indexes of bad mbufs inside the mb[].
17  */
18 static inline void
19 move_bad_mbufs(struct rte_mbuf *mb[], const uint32_t bad_idx[], uint32_t nb_mb,
20         uint32_t nb_bad)
21 {
22         uint32_t i, j, k;
23         struct rte_mbuf *drb[nb_bad];
24
25         j = 0;
26         k = 0;
27
28         /* copy bad ones into a temp place */
29         for (i = 0; i != nb_mb; i++) {
30                 if (j != nb_bad && i == bad_idx[j])
31                         drb[j++] = mb[i];
32                 else
33                         mb[k++] = mb[i];
34         }
35
36         /* copy bad ones after the good ones */
37         for (i = 0; i != nb_bad; i++)
38                 mb[k + i] = drb[i];
39 }
40
41 #endif /* _MISC_H_ */