This repository has been archived by the owner on Aug 5, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
thread.h
222 lines (193 loc) · 6.12 KB
/
thread.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
/*
* BSD LICENSE
*
* Copyright(c) 2007-2017 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* version: RWPA_VNF.L.18.02.0-42
*/
#ifndef __INCLUDE_THREAD_H__
#define __INCLUDE_THREAD_H__
#ifndef APP_THREAD_TYPE_SIZE
#define APP_THREAD_TYPE_SIZE 64
#endif
#ifndef APP_MAX_THREAD_ARGS
#define APP_MAX_THREAD_ARGS 64
#endif
#define APP_MAX_THREAD_PKTQ_IN 2
#define APP_MAX_THREAD_PKTQ_OUT 2
#ifndef THREAD_MAX_PORT_IN
#define THREAD_MAX_PORT_IN 64
#endif
#ifndef THREAD_MAX_PORT_OUT
#define THREAD_MAX_PORT_OUT 64
#endif
#include <rte_common.h>
#include <rte_port_ethdev.h>
struct app_thread_params;
typedef void* (*thread_ops_init)(struct app_thread_params *params, void *arg);
typedef int (*thread_ops_free)(void *arg);
typedef int (*thread_ops_run)(void *arg);
struct thread_ops_s {
thread_ops_init f_init;
thread_ops_free f_free;
thread_ops_run f_run;
};
struct thread_type {
const char *name;
struct thread_ops_s *thread_ops;
};
enum app_pktq_in_type {
APP_PKTQ_IN_HWQ,
};
struct app_pktq_in_params {
enum app_pktq_in_type type;
uint32_t id; /* Position in the appropriate app array */
};
enum app_pktq_out_type {
APP_PKTQ_OUT_HWQ,
};
struct app_pktq_out_params {
enum app_pktq_out_type type;
uint32_t id; /* Position in the appropriate app array */
};
enum thread_port_in_type {
THREAD_PORT_IN_ETHDEV_READER,
};
enum thread_port_out_type {
THREAD_PORT_OUT_ETHDEV_WRITER,
THREAD_PORT_OUT_ETHDEV_WRITER_NODROP,
};
struct thread_port_in_params {
enum thread_port_in_type type;
union {
struct rte_port_ethdev_reader_params ethdev;
} params;
uint32_t burst_size;
};
struct thread_port_out_params {
enum thread_port_out_type type;
struct rte_eth_dev_tx_buffer *tx_buffer;
union {
struct rte_port_ethdev_writer_params ethdev;
struct rte_port_ethdev_writer_nodrop_params ethdev_nodrop;
} params;
uint32_t burst_size;
};
static inline void *
thread_port_in_params_convert(struct thread_port_in_params *p)
{
switch (p->type) {
case THREAD_PORT_IN_ETHDEV_READER:
return (void *) &p->params.ethdev;
default:
return NULL;
}
}
static inline int
thread_port_in_get_id(struct thread_port_in_params *p)
{
switch (p->type) {
case THREAD_PORT_IN_ETHDEV_READER:
return p->params.ethdev.port_id;
default:
return -1;
}
}
static inline void *
thread_port_out_params_convert(struct thread_port_out_params *p)
{
switch (p->type) {
case THREAD_PORT_OUT_ETHDEV_WRITER:
return (void *) &p->params.ethdev;
case THREAD_PORT_OUT_ETHDEV_WRITER_NODROP:
return (void *) &p->params.ethdev_nodrop;
default:
return NULL;
}
}
static inline int
thread_port_out_get_id(struct thread_port_out_params *p)
{
switch (p->type) {
case THREAD_PORT_OUT_ETHDEV_WRITER:
return p->params.ethdev.port_id;
case THREAD_PORT_OUT_ETHDEV_WRITER_NODROP:
return p->params.ethdev_nodrop.port_id;
default:
return -1;
}
}
static inline void*
thread_port_out_get_tx_buffer(struct thread_port_out_params *p)
{
switch (p->type) {
case THREAD_PORT_OUT_ETHDEV_WRITER:
case THREAD_PORT_OUT_ETHDEV_WRITER_NODROP:
return p->tx_buffer;
default:
return NULL;
}
}
static inline int
thread_port_out_get_queue_id(struct thread_port_out_params *p)
{
switch (p->type) {
case THREAD_PORT_OUT_ETHDEV_WRITER:
return p->params.ethdev.queue_id;
case THREAD_PORT_OUT_ETHDEV_WRITER_NODROP:
return p->params.ethdev_nodrop.queue_id;
default:
return -1;
}
}
struct app_thread_params {
char *name;
char type[APP_THREAD_TYPE_SIZE];
uint8_t parsed;
uint32_t socket_id;
uint32_t core_id;
uint32_t hyper_th_id;
uint32_t lcore_id;
char *args_name[APP_MAX_THREAD_ARGS];
char *args_value[APP_MAX_THREAD_ARGS];
struct thread_type *ttype;
uint32_t enabled;
struct app_pktq_in_params pktq_in[APP_MAX_THREAD_PKTQ_IN];
struct app_pktq_out_params pktq_out[APP_MAX_THREAD_PKTQ_OUT];
uint32_t n_args;
uint32_t n_pktq_in;
uint32_t n_pktq_out;
struct thread_port_in_params port_in[THREAD_MAX_PORT_IN];
struct thread_port_out_params port_out[THREAD_MAX_PORT_OUT];
uint32_t n_ports_in;
uint32_t n_ports_out;
uint16_t crypto_qp;
};
#endif // __INCLUDE_THREAD_H__