summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX/prox_compat.h
blob: d4b7f247487ae96f6a5382db7decde8fe4ab5e8b (plain)
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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
/*
// Copyright (c) 2010-2020 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#ifndef _PROX_COMPAT_H_
#define _PROX_COMPAT_H_
#include <rte_common.h>
#include <rte_table_hash.h>
#include <rte_ethdev.h>
#include <rte_hash_crc.h>
#include <rte_cryptodev.h>

#include "hash_utils.h"
#include "log.h"

/* This is a copy of the rte_table_hash_params from DPDK 17.11  *
 * So if DPDK decides to change the structure the modifications *
 * to PROX code should mainly be limited to this file           *
 */
struct prox_rte_table_params {
	const char *name;
	uint32_t key_size;
	uint32_t key_offset;
	uint8_t *key_mask;
	uint32_t n_keys;
	uint32_t n_buckets;
	rte_table_hash_op_hash f_hash;
	uint64_t seed;
};

#if RTE_VERSION < RTE_VERSION_NUM(16,4,0,0)
typedef uint8_t prox_next_hop_index_type;
#else
typedef uint32_t prox_next_hop_index_type;
#endif

#if RTE_VERSION < RTE_VERSION_NUM(16,7,0,0)
static void rte_mempool_free(struct rte_mempool *mp)
{
	plog_warn("rte_mempool_free not supported in this DPDK - upgrade DPDK to avoid memory leaks\n");
}
#endif

#if RTE_VERSION < RTE_VERSION_NUM(17,11,0,0)

static void *prox_rte_table_create(struct prox_rte_table_params *params, int socket_id, uint32_t entry_size)
{
	if (params->key_size == 8) {
		struct rte_table_hash_key8_ext_params dpdk17_08_params;
        	dpdk17_08_params.n_entries = params->n_keys;
        	dpdk17_08_params.n_entries_ext = params->n_keys >> 2;
        	dpdk17_08_params.f_hash = (rte_table_hash_op_hash)rte_hash_crc;
        	dpdk17_08_params.seed = params->seed;
        	dpdk17_08_params.signature_offset = HASH_METADATA_OFFSET(8);  // Ignored for dosig
        	dpdk17_08_params.key_offset = HASH_METADATA_OFFSET(0);
        	dpdk17_08_params.key_mask = params->key_mask;
		return rte_table_hash_key8_ext_dosig_ops.f_create(&dpdk17_08_params, socket_id, entry_size);
	} else {
		struct rte_table_hash_ext_params dpdk17_08_params;
		dpdk17_08_params.key_size = params->key_size;
		dpdk17_08_params.n_keys = params->n_keys;
		dpdk17_08_params.n_buckets = params->n_buckets;
		dpdk17_08_params.n_buckets_ext = params->n_buckets >> 1;
		dpdk17_08_params.seed = params->seed;
		dpdk17_08_params.f_hash = (rte_table_hash_op_hash)rte_hash_crc;
		dpdk17_08_params.signature_offset = HASH_METADATA_OFFSET(0);
		dpdk17_08_params.key_offset = HASH_METADATA_OFFSET(0);
		return rte_table_hash_ext_dosig_ops.f_create(&dpdk17_08_params, socket_id, entry_size);
	}
};

static inline int prox_rte_eth_dev_get_port_by_name(const char *name, uint16_t *port_id)
{
#if RTE_VERSION < RTE_VERSION_NUM(16,7,0,0)
	plog_err("Not supported in DPDK version <= 16.04 by lack of rte_eth_dev_get_port_by_name support\n");
	return -1;
#else
	return rte_eth_dev_get_port_by_name(name, (uint8_t *)port_id);
#endif
}

#define prox_rte_table_free        rte_table_hash_ext_dosig_ops.f_free
#define prox_rte_table_add         rte_table_hash_ext_dosig_ops.f_add
#define prox_rte_table_delete      rte_table_hash_ext_dosig_ops.f_delete
#define prox_rte_table_add_bulk    rte_table_hash_ext_dosig_ops.f_add_bulk
#define prox_rte_table_delete_bulk rte_table_hash_ext_dosig_ops.f_delete_bulk
#define prox_rte_table_lookup      rte_table_hash_ext_dosig_ops.f_lookup
#define prox_rte_table_stats       rte_table_hash_ext_dosig_ops.f_stats

#define prox_rte_table_key8_free        rte_table_hash_key8_ext_dosig_ops.f_free
#define prox_rte_table_key8_add         rte_table_hash_key8_ext_dosig_ops.f_add
#define prox_rte_table_key8_delete      rte_table_hash_key8_ext_dosig_ops.f_delete
#define prox_rte_table_key8_add_bulk    rte_table_hash_key8_ext_dosig_ops.f_add_bulk
#define prox_rte_table_key8_delete_bulk rte_table_hash_key8_ext_dosig_ops.f_delete_bulk
#define prox_rte_table_key8_lookup      rte_table_hash_key8_ext_dosig_ops.f_lookup
#define prox_rte_table_key8_stats       rte_table_hash_key8_ext_dosig_ops.f_stats

#define rte_log_set_global_level rte_set_log_level

#else

static void *prox_rte_table_create(struct prox_rte_table_params *params, int socket_id, uint32_t entry_size)
{
	struct rte_table_hash_params dpdk_17_11_params;
        dpdk_17_11_params.name = params->name;
        dpdk_17_11_params.key_size = params->key_size;
        dpdk_17_11_params.key_offset = params->key_offset;
        dpdk_17_11_params.key_mask = params->key_mask;
        dpdk_17_11_params.n_keys = params->n_keys;
        dpdk_17_11_params.n_buckets = rte_align32pow2(params->n_buckets);
        dpdk_17_11_params.f_hash = params->f_hash;
        dpdk_17_11_params.seed = params->seed;

	if (params->key_size == 8) {
		return rte_table_hash_key8_ext_ops.f_create(&dpdk_17_11_params, socket_id, entry_size);
	} else {
		return rte_table_hash_ext_ops.f_create(&dpdk_17_11_params, socket_id, entry_size);
	}
}

#define prox_rte_eth_dev_get_port_by_name rte_eth_dev_get_port_by_name

#define prox_rte_table_free        rte_table_hash_ext_ops.f_free
#define prox_rte_table_add         rte_table_hash_ext_ops.f_add
#define prox_rte_table_delete      rte_table_hash_ext_ops.f_delete
#define prox_rte_table_add_bulk    rte_table_hash_ext_ops.f_add_bulk
#define prox_rte_table_delete_bulk rte_table_hash_ext_ops.f_delete_bulk
#define prox_rte_table_lookup      rte_table_hash_ext_ops.f_lookup
#define prox_rte_table_stats       rte_table_hash_ext_ops.f_stats

#define prox_rte_table_key8_free        rte_table_hash_key8_ext_ops.f_free
#define prox_rte_table_key8_add         rte_table_hash_key8_ext_ops.f_add
#define prox_rte_table_key8_delete      rte_table_hash_key8_ext_ops.f_delete
#define prox_rte_table_key8_add_bulk    rte_table_hash_key8_ext_ops.f_add_bulk
#define prox_rte_table_key8_delete_bulk rte_table_hash_key8_ext_ops.f_delete_bulk
#define prox_rte_table_key8_lookup      rte_table_hash_key8_ext_ops.f_lookup
#define prox_rte_table_key8_stats       rte_table_hash_key8_ext_ops.f_stats

#endif

#if RTE_VERSION < RTE_VERSION_NUM(18,8,0,0)
#define rte_cryptodev_sym_get_private_session_size rte_cryptodev_get_private_session_size
#endif

#if RTE_VERSION < RTE_VERSION_NUM(19,2,0,0)
#define RTE_COLOR_GREEN e_RTE_METER_GREEN
#define RTE_COLOR_YELLOW e_RTE_METER_YELLOW
#define RTE_COLOR_RED e_RTE_METER_RED
#define prox_rte_color rte_meter_color
#define prox_rte_sched_port_pkt_read_tree_path(A,B,C,D,E,F) rte_sched_port_pkt_read_tree_path(B,C,D,E,F)
#define prox_rte_sched_port_pkt_write(A,B,C,D,E,F,G) rte_sched_port_pkt_write(B,C,D,E,F,G);
#else
#define prox_rte_color rte_color
#define prox_rte_sched_port_pkt_read_tree_path(A,B,C,D,E,F) rte_sched_port_pkt_read_tree_path(A,B,C,D,E,F)
#define prox_rte_sched_port_pkt_write(A,B,C,D,E,F,G) rte_sched_port_pkt_write(A,B,C,D,E,F,G);
#endif

#if RTE_VERSION < RTE_VERSION_NUM(19,8,0,0)
#if RTE_VERSION >= RTE_VERSION_NUM(18,5,0,0)
typedef struct vxlan_gpe_hdr prox_rte_vxlan_gpe_hdr;
#endif
#define PROX_RTE_ETHER_CRC_LEN ETHER_CRC_LEN
#define PROX_RTE_ETHER_MIN_LEN ETHER_MIN_LEN
#define PROX_RTE_ETHER_MAX_LEN ETHER_MAX_LEN
#define PROX_RTE_ETHER_HDR_LEN ETHER_HDR_LEN
#define PROX_RTE_TCP_SYN_FLAG TCP_SYN_FLAG
#define PROX_RTE_TCP_FIN_FLAG TCP_FIN_FLAG
#define PROX_RTE_TCP_RST_FLAG TCP_RST_FLAG
#define PROX_RTE_TCP_ACK_FLAG TCP_ACK_FLAG
#define PROX_RTE_IP_ICMP_ECHO_REPLY IP_ICMP_ECHO_REPLY
#define PROX_RTE_IP_ICMP_ECHO_REQUEST IP_ICMP_ECHO_REQUEST

#define prox_rte_ether_addr_copy ether_addr_copy
#define prox_rte_eth_random_addr eth_random_addr

typedef struct ipv6_hdr prox_rte_ipv6_hdr;
typedef struct ipv4_hdr prox_rte_ipv4_hdr;
typedef struct ether_addr prox_rte_ether_addr;
typedef struct ether_hdr prox_rte_ether_hdr;
typedef struct vlan_hdr prox_rte_vlan_hdr;
typedef struct udp_hdr prox_rte_udp_hdr;
typedef struct tcp_hdr prox_rte_tcp_hdr;
typedef struct icmp_hdr prox_rte_icmp_hdr;

#ifndef RTE_SCHED_BE_QUEUES_PER_PIPE
#define RTE_SCHED_BE_QUEUES_PER_PIPE RTE_SCHED_QUEUES_PER_PIPE
#endif

#define PROX_RTE_IS_IPV4_MCAST IS_IPV4_MCAST
#define prox_rte_is_same_ether_addr is_same_ether_addr
#define prox_rte_is_zero_ether_addr is_zero_ether_addr
#else //  >= 19.08

#define PROX_RTE_ETHER_CRC_LEN RTE_ETHER_CRC_LEN
#define PROX_RTE_ETHER_MIN_LEN RTE_ETHER_MIN_LEN
#define PROX_RTE_ETHER_MAX_LEN RTE_ETHER_MAX_LEN
#define PROX_RTE_ETHER_HDR_LEN RTE_ETHER_HDR_LEN
#define PROX_RTE_TCP_SYN_FLAG RTE_TCP_SYN_FLAG
#define PROX_RTE_TCP_FIN_FLAG RTE_TCP_FIN_FLAG
#define PROX_RTE_TCP_RST_FLAG RTE_TCP_RST_FLAG
#define PROX_RTE_TCP_ACK_FLAG RTE_TCP_ACK_FLAG
#define PROX_RTE_IP_ICMP_ECHO_REPLY RTE_IP_ICMP_ECHO_REPLY
#define PROX_RTE_IP_ICMP_ECHO_REQUEST RTE_IP_ICMP_ECHO_REQUEST

#define prox_rte_ether_addr_copy rte_ether_addr_copy
#define prox_rte_eth_random_addr rte_eth_random_addr

typedef struct rte_ipv6_hdr prox_rte_ipv6_hdr;
typedef struct rte_ipv4_hdr prox_rte_ipv4_hdr;
typedef struct rte_ether_addr prox_rte_ether_addr;
#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
typedef struct rte_ether_hdr prox_rte_ether_hdr;
#else
typedef struct prox_rte_ether_hdr
{
	struct rte_ether_addr d_addr; /**< Destination address. */
	struct rte_ether_addr s_addr; /**< Source address. */
	rte_be16_t ether_type; /**< Frame type. */
} __rte_aligned(2) prox_rte_ether_hdr;
#endif
typedef struct rte_vlan_hdr prox_rte_vlan_hdr;
typedef struct rte_vxlan_gpe_hdr prox_rte_vxlan_gpe_hdr;
typedef struct rte_udp_hdr prox_rte_udp_hdr;
typedef struct rte_tcp_hdr prox_rte_tcp_hdr;
typedef struct rte_icmp_hdr prox_rte_icmp_hdr;

#define PROX_RTE_IS_IPV4_MCAST  RTE_IS_IPV4_MCAST
#define prox_rte_is_same_ether_addr rte_is_same_ether_addr
#define prox_rte_is_zero_ether_addr rte_is_zero_ether_addr

#endif

char *prox_strncpy(char * dest, const char * src, size_t count);

#ifdef RTE_LIBRTE_PMD_AESNI_MB
#if RTE_VERSION < RTE_VERSION_NUM(19,5,0,0)
//RFC4303
struct prox_esp_hdr {
        uint32_t spi;
        uint32_t seq;
};
struct prox_rte_cryptodev_qp_conf {
	uint32_t nb_descriptors; /**< Number of descriptors per queue pair */
	struct rte_mempool * 	mp_session;
	struct rte_mempool * 	mp_session_private;
};

static int prox_rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id, struct prox_rte_cryptodev_qp_conf *qp_conf, int socket_id)
{
	struct rte_mempool *session_pool = qp_conf->mp_session;
	return rte_cryptodev_queue_pair_setup(dev_id, queue_pair_id, (struct rte_cryptodev_qp_conf *)qp_conf, socket_id, session_pool);
}

#else
#define prox_rte_cryptodev_qp_conf rte_cryptodev_qp_conf
static int prox_rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id, struct prox_rte_cryptodev_qp_conf *qp_conf, int socket_id)
{
	return rte_cryptodev_queue_pair_setup(dev_id, queue_pair_id, (struct rte_cryptodev_qp_conf *)qp_conf, socket_id);
}

#if RTE_VERSION < RTE_VERSION_NUM(19,8,0,0)
#define prox_esp_hdr esp_hdr

#else	// From DPDK 19.08
#define prox_esp_hdr rte_esp_hdr

#endif
#endif
#endif	// CONFIG_RTE_LIBRTE_PMD_AESNI_MB

#if RTE_VERSION < RTE_VERSION_NUM(19,11,0,0)
#define prox_rte_eth_dev_count_avail() rte_eth_dev_count()
#else
#define prox_rte_eth_dev_count_avail() rte_eth_dev_count_avail()
#endif

// deal with RTE_DEPRECATED symbols

#if RTE_VERSION < RTE_VERSION_NUM(20,11,0,0)
#define SKIP_MAIN			SKIP_MASTER
#define CALL_MAIN			CALL_MASTER
#define RTE_DEVTYPE_ALLOWED		RTE_DEVTYPE_WHITELISTED_PCI
#define RTE_DEVTYPE_BLOCKED		RTE_DEVTYPE_BLACKLISTED_PCI
#define RTE_LCORE_FOREACH_WORKER	RTE_LCORE_FOREACH_SLAVE
#if RTE_VERSION >= RTE_VERSION_NUM(17,8,0,0)
#define RTE_DEV_ALLOWED			RTE_DEV_WHITELISTED
#define RTE_DEV_BLOCKED			RTE_DEV_BLACKLISTED
#define RTE_BUS_SCAN_ALLOWLIST		RTE_BUS_SCAN_WHITELIST
#define RTE_BUS_SCAN_BLOCKLIST		RTE_BUS_SCAN_BLACKLIST
#endif
#endif

#if RTE_VERSION < RTE_VERSION_NUM(21,5,0,0)
#define RTE_PCI_ANY_ID			PCI_ANY_ID
#define PKT_RX_OUTER_IP_CKSUM_BAD	PKT_RX_EIP_CKSUM_BAD
#endif

#if RTE_VERSION < RTE_VERSION_NUM(21,11,0,0)
#define RTE_MEMPOOL_HEADER_SIZE		MEMPOOL_HEADER_SIZE
#define RTE_MBUF_F_RX_RSS_HASH		PKT_RX_RSS_HASH
#define RTE_MBUF_F_RX_FDIR		PKT_RX_FDIR
#define RTE_MBUF_F_RX_OUTER_IP_CKSUM_BAD	PKT_RX_OUTER_IP_CKSUM_BAD
#define RTE_MBUF_F_RX_IP_CKSUM_BAD	PKT_RX_IP_CKSUM_BAD
#define RTE_MBUF_F_RX_L4_CKSUM_BAD	PKT_RX_L4_CKSUM_BAD
#define RTE_MBUF_F_RX_IEEE1588_PTP	PKT_RX_IEEE1588_PTP
#define RTE_MBUF_F_RX_IEEE1588_TMST	PKT_RX_IEEE1588_TMST
#define RTE_MBUF_F_RX_FDIR_ID		PKT_RX_FDIR_ID
#define RTE_MBUF_F_RX_FDIR_FLX		PKT_RX_FDIR_FLX
#define RTE_MBUF_F_TX_QINQ		PKT_TX_QINQ_PKT
#define RTE_MBUF_F_TX_TCP_SEG		PKT_TX_TCP_SEG
#define RTE_MBUF_F_TX_IEEE1588_TMST	PKT_TX_IEEE1588_TMST
#define RTE_MBUF_F_TX_L4_NO_CKSUM	PKT_TX_L4_NO_CKSUM
#define RTE_MBUF_F_TX_TCP_CKSUM		PKT_TX_TCP_CKSUM
#define RTE_MBUF_F_TX_SCTP_CKSUM	PKT_TX_SCTP_CKSUM
#define RTE_MBUF_F_TX_UDP_CKSUM		PKT_TX_UDP_CKSUM
#define RTE_MBUF_F_TX_L4_MASK		PKT_TX_L4_MASK
#define RTE_MBUF_F_TX_IP_CKSUM		PKT_TX_IP_CKSUM
#define RTE_MBUF_F_TX_IPV4		PKT_TX_IPV4
#define RTE_MBUF_F_TX_IPV6		PKT_TX_IPV6
#define RTE_MBUF_F_TX_VLAN		PKT_TX_VLAN_PKT
#define RTE_MBUF_F_TX_OUTER_IP_CKSUM	PKT_TX_OUTER_IP_CKSUM
#define RTE_MBUF_F_TX_OUTER_IPV4	PKT_TX_OUTER_IPV4
#define RTE_MBUF_F_TX_OUTER_IPV6	PKT_TX_OUTER_IPV6
#define RTE_MBUF_F_INDIRECT		IND_ATTACHED_MBUF
#define RTE_ETH_LINK_SPEED_AUTONEG	ETH_LINK_SPEED_AUTONEG
#define RTE_ETH_LINK_SPEED_FIXED	ETH_LINK_SPEED_FIXED
#define RTE_ETH_LINK_SPEED_10M_HD	ETH_LINK_SPEED_10M_HD
#define RTE_ETH_LINK_SPEED_10M		ETH_LINK_SPEED_10M
#define RTE_ETH_LINK_SPEED_100M_HD	ETH_LINK_SPEED_100M_HD
#define RTE_ETH_LINK_SPEED_100M		ETH_LINK_SPEED_100M
#define RTE_ETH_LINK_SPEED_1G		ETH_LINK_SPEED_1G
#define RTE_ETH_LINK_SPEED_2_5G		ETH_LINK_SPEED_2_5G
#define RTE_ETH_LINK_SPEED_5G		ETH_LINK_SPEED_5G
#define RTE_ETH_LINK_SPEED_10G		ETH_LINK_SPEED_10G
#define RTE_ETH_LINK_SPEED_20G		ETH_LINK_SPEED_20G
#define RTE_ETH_LINK_SPEED_25G		ETH_LINK_SPEED_25G
#define RTE_ETH_LINK_SPEED_40G		ETH_LINK_SPEED_40G
#define RTE_ETH_LINK_SPEED_50G		ETH_LINK_SPEED_50G
#define RTE_ETH_LINK_SPEED_56G		ETH_LINK_SPEED_56G
#define RTE_ETH_LINK_SPEED_100G		ETH_LINK_SPEED_100G
#define RTE_ETH_SPEED_NUM_NONE		ETH_SPEED_NUM_NONE
#define RTE_ETH_SPEED_NUM_10M		ETH_SPEED_NUM_10M
#define RTE_ETH_SPEED_NUM_100M		ETH_SPEED_NUM_100M
#define RTE_ETH_SPEED_NUM_1G		ETH_SPEED_NUM_1G
#define RTE_ETH_SPEED_NUM_2_5G		ETH_SPEED_NUM_2_5G
#define RTE_ETH_SPEED_NUM_5G		ETH_SPEED_NUM_5G
#define RTE_ETH_SPEED_NUM_10G		ETH_SPEED_NUM_10G
#define RTE_ETH_SPEED_NUM_20G		ETH_SPEED_NUM_20G
#define RTE_ETH_SPEED_NUM_25G		ETH_SPEED_NUM_25G
#define RTE_ETH_SPEED_NUM_40G		ETH_SPEED_NUM_40G
#define RTE_ETH_SPEED_NUM_50G		ETH_SPEED_NUM_50G
#define RTE_ETH_SPEED_NUM_56G		ETH_SPEED_NUM_56G
#define RTE_ETH_SPEED_NUM_100G		ETH_SPEED_NUM_100G
#define RTE_ETH_LINK_HALF_DUPLEX	ETH_LINK_HALF_DUPLEX
#define RTE_ETH_LINK_FULL_DUPLEX	ETH_LINK_FULL_DUPLEX
#define RTE_ETH_LINK_DOWN		ETH_LINK_DOWN
#define RTE_ETH_LINK_UP			ETH_LINK_UP
#define RTE_ETH_LINK_FIXED		ETH_LINK_FIXED
#define RTE_ETH_LINK_AUTONEG		ETH_LINK_AUTONEG
#define RTE_ETH_MQ_RX_RSS_FLAG		ETH_MQ_RX_RSS_FLAG
#define RTE_ETH_MQ_RX_DCB_FLAG		ETH_MQ_RX_DCB_FLAG
#define RTE_ETH_MQ_RX_VMDQ_FLAG		ETH_MQ_RX_VMDQ_FLAG
#define RTE_ETH_MQ_RX_NONE		ETH_MQ_RX_NONE
#define RTE_ETH_MQ_RX_RSS		ETH_MQ_RX_RSS
#define RTE_ETH_MQ_RX_DCB		ETH_MQ_RX_DCB
#define RTE_ETH_MQ_RX_DCB_RSS		ETH_MQ_RX_DCB_RSS
#define RTE_ETH_MQ_RX_VMDQ_ONLY		ETH_MQ_RX_VMDQ_ONLY
#define RTE_ETH_MQ_RX_VMDQ_RSS		ETH_MQ_RX_VMDQ_RSS
#define RTE_ETH_MQ_RX_VMDQ_DCB		ETH_MQ_RX_VMDQ_DCB
#define RTE_ETH_MQ_RX_VMDQ_DCB_RSS	ETH_MQ_RX_VMDQ_DCB_RSS
#define RTE_ETH_MQ_TX_NONE		ETH_MQ_TX_NONE
#define RTE_ETH_MQ_TX_DCB		ETH_MQ_TX_DCB
#define RTE_ETH_MQ_TX_VMDQ_DCB		ETH_MQ_TX_VMDQ_DCB
#define RTE_ETH_MQ_TX_VMDQ_ONLY		ETH_MQ_TX_VMDQ_ONLY
#define RTE_ETH_VLAN_TYPE_UNKNOWN	ETH_VLAN_TYPE_UNKNOWN
#define RTE_ETH_VLAN_TYPE_INNER		ETH_VLAN_TYPE_INNER
#define RTE_ETH_VLAN_TYPE_OUTER		ETH_VLAN_TYPE_OUTER
#define RTE_ETH_VLAN_TYPE_MAX		ETH_VLAN_TYPE_MAX
#define RTE_ETH_RSS_IPV4		ETH_RSS_IPV4
#define RTE_ETH_RSS_FRAG_IPV4		ETH_RSS_FRAG_IPV4
#define RTE_ETH_RSS_NONFRAG_IPV4_TCP	ETH_RSS_NONFRAG_IPV4_TCP
#define RTE_ETH_RSS_NONFRAG_IPV4_UDP	ETH_RSS_NONFRAG_IPV4_UDP
#define RTE_ETH_RSS_NONFRAG_IPV4_SCTP	ETH_RSS_NONFRAG_IPV4_SCTP
#define RTE_ETH_RSS_NONFRAG_IPV4_OTHER	ETH_RSS_NONFRAG_IPV4_OTHER
#define RTE_ETH_RSS_IPV6		ETH_RSS_IPV6
#define RTE_ETH_RSS_FRAG_IPV6		ETH_RSS_FRAG_IPV6
#define RTE_ETH_RSS_NONFRAG_IPV6_TCP	ETH_RSS_NONFRAG_IPV6_TCP
#define RTE_ETH_RSS_NONFRAG_IPV6_UDP	ETH_RSS_NONFRAG_IPV6_UDP
#define RTE_ETH_RSS_NONFRAG_IPV6_SCTP	ETH_RSS_NONFRAG_IPV6_SCTP
#define RTE_ETH_RSS_NONFRAG_IPV6_OTHER	ETH_RSS_NONFRAG_IPV6_OTHER
#define RTE_ETH_RSS_L2_PAYLOAD		ETH_RSS_L2_PAYLOAD
#define RTE_ETH_RSS_IPV6_EX		ETH_RSS_IPV6_EX
#define RTE_ETH_RSS_IPV6_TCP_EX		ETH_RSS_IPV6_TCP_EX
#define RTE_ETH_RSS_IPV6_UDP_EX		ETH_RSS_IPV6_UDP_EX
#define RTE_ETH_RSS_IP			ETH_RSS_IP
#define RTE_ETH_RSS_UDP			ETH_RSS_UDP
#define RTE_ETH_RSS_TCP			ETH_RSS_TCP
#define RTE_ETH_RSS_SCTP		ETH_RSS_SCTP
#define RTE_ETH_RSS_PROTO_MASK		ETH_RSS_PROTO_MASK
#define RTE_ETH_RSS_RETA_SIZE_64	ETH_RSS_RETA_SIZE_64
#define RTE_ETH_RSS_RETA_SIZE_128	ETH_RSS_RETA_SIZE_128
#define RTE_ETH_RSS_RETA_SIZE_512	ETH_RSS_RETA_SIZE_512
#define RTE_ETH_RETA_GROUP_SIZE		RTE_RETA_GROUP_SIZE
#define RTE_ETH_VMDQ_MAX_VLAN_FILTERS	ETH_VMDQ_MAX_VLAN_FILTERS
#define RTE_ETH_DCB_NUM_USER_PRIORITIES	ETH_DCB_NUM_USER_PRIORITIES
#define RTE_ETH_VMDQ_DCB_NUM_QUEUES	ETH_VMDQ_DCB_NUM_QUEUES
#define RTE_ETH_DCB_NUM_QUEUES		ETH_DCB_NUM_QUEUES
#define RTE_ETH_DCB_PG_SUPPORT		ETH_DCB_PG_SUPPORT
#define RTE_ETH_DCB_PFC_SUPPORT		ETH_DCB_PFC_SUPPORT
#define RTE_ETH_VLAN_STRIP_OFFLOAD	ETH_VLAN_STRIP_OFFLOAD
#define RTE_ETH_VLAN_FILTER_OFFLOAD	ETH_VLAN_FILTER_OFFLOAD
#define RTE_ETH_VLAN_EXTEND_OFFLOAD	ETH_VLAN_EXTEND_OFFLOAD
#define RTE_ETH_VLAN_STRIP_MASK		ETH_VLAN_STRIP_MASK
#define RTE_ETH_VLAN_FILTER_MASK	ETH_VLAN_FILTER_MASK
#define RTE_ETH_VLAN_EXTEND_MASK	ETH_VLAN_EXTEND_MASK
#define RTE_ETH_VLAN_ID_MAX		ETH_VLAN_ID_MAX
#define RTE_ETH_NUM_RECEIVE_MAC_ADDR	ETH_NUM_RECEIVE_MAC_ADDR
#define RTE_ETH_VMDQ_NUM_UC_HASH_ARRAY	ETH_VMDQ_NUM_UC_HASH_ARRAY
#define RTE_ETH_VMDQ_ACCEPT_UNTAG	ETH_VMDQ_ACCEPT_UNTAG
#define RTE_ETH_VMDQ_ACCEPT_HASH_MC	ETH_VMDQ_ACCEPT_HASH_MC
#define RTE_ETH_VMDQ_ACCEPT_HASH_UC	ETH_VMDQ_ACCEPT_HASH_UC
#define RTE_ETH_VMDQ_ACCEPT_BROADCAST	ETH_VMDQ_ACCEPT_BROADCAST
#define RTE_ETH_VMDQ_ACCEPT_MULTICAST	ETH_VMDQ_ACCEPT_MULTICAST
#define RTE_ETH_4_TCS			ETH_4_TCS
#define RTE_ETH_8_TCS			ETH_8_TCS
#define RTE_ETH_8_POOLS			ETH_8_POOLS
#define RTE_ETH_16_POOLS		ETH_16_POOLS
#define RTE_ETH_32_POOLS		ETH_32_POOLS
#define RTE_ETH_64_POOLS		ETH_64_POOLS
#define RTE_ETH_FC_NONE			RTE_FC_NONE
#define RTE_ETH_FC_RX_PAUSE		RTE_FC_RX_PAUSE
#define RTE_ETH_FC_TX_PAUSE		RTE_FC_TX_PAUSE
#define RTE_ETH_FC_FULL			RTE_FC_FULL
#define RTE_ETH_TUNNEL_TYPE_NONE	RTE_TUNNEL_TYPE_NONE
#define RTE_ETH_TUNNEL_TYPE_VXLAN	RTE_TUNNEL_TYPE_VXLAN
#define RTE_ETH_TUNNEL_TYPE_GENEVE	RTE_TUNNEL_TYPE_GENEVE
#define RTE_ETH_TUNNEL_TYPE_TEREDO	RTE_TUNNEL_TYPE_TEREDO
#define RTE_ETH_TUNNEL_TYPE_NVGRE	RTE_TUNNEL_TYPE_NVGRE
#define RTE_ETH_TUNNEL_TYPE_IP_IN_GRE	RTE_TUNNEL_TYPE_IP_IN_GRE
#define RTE_ETH_L2_TUNNEL_TYPE_E_TAG	RTE_L2_TUNNEL_TYPE_E_TAG
#define RTE_ETH_TUNNEL_TYPE_MAX		RTE_TUNNEL_TYPE_MAX
#define RTE_ETH_FDIR_PBALLOC_64K	RTE_FDIR_PBALLOC_64K
#define RTE_ETH_FDIR_PBALLOC_128K	RTE_FDIR_PBALLOC_128K
#define RTE_ETH_FDIR_PBALLOC_256K	RTE_FDIR_PBALLOC_256K
#define RTE_ETH_RX_OFFLOAD_VLAN_STRIP	DEV_RX_OFFLOAD_VLAN_STRIP
#define RTE_ETH_RX_OFFLOAD_IPV4_CKSUM	DEV_RX_OFFLOAD_IPV4_CKSUM
#define RTE_ETH_RX_OFFLOAD_UDP_CKSUM	DEV_RX_OFFLOAD_UDP_CKSUM
#define RTE_ETH_RX_OFFLOAD_TCP_CKSUM	DEV_RX_OFFLOAD_TCP_CKSUM
#define RTE_ETH_RX_OFFLOAD_TCP_LRO	DEV_RX_OFFLOAD_TCP_LRO
#define RTE_ETH_RX_OFFLOAD_QINQ_STRIP	DEV_RX_OFFLOAD_QINQ_STRIP
#define RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM	DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM
#define RTE_ETH_TX_OFFLOAD_VLAN_INSERT	DEV_TX_OFFLOAD_VLAN_INSERT
#define RTE_ETH_TX_OFFLOAD_IPV4_CKSUM	DEV_TX_OFFLOAD_IPV4_CKSUM
#define RTE_ETH_TX_OFFLOAD_UDP_CKSUM	DEV_TX_OFFLOAD_UDP_CKSUM
#define RTE_ETH_TX_OFFLOAD_TCP_CKSUM	DEV_TX_OFFLOAD_TCP_CKSUM
#define RTE_ETH_TX_OFFLOAD_SCTP_CKSUM	DEV_TX_OFFLOAD_SCTP_CKSUM
#define RTE_ETH_TX_OFFLOAD_TCP_TSO	DEV_TX_OFFLOAD_TCP_TSO
#define RTE_ETH_TX_OFFLOAD_UDP_TSO	DEV_TX_OFFLOAD_UDP_TSO
#define RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM	DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM
#define RTE_ETH_TX_OFFLOAD_QINQ_INSERT	DEV_TX_OFFLOAD_QINQ_INSERT
#define RTE_ETH_DCB_NUM_TCS		ETH_DCB_NUM_TCS
#define RTE_ETH_MAX_VMDQ_POOL		ETH_MAX_VMDQ_POOL
#if RTE_VERSION >= RTE_VERSION_NUM(16,7,0,0)
#define RTE_MEMPOOL_REGISTER_OPS	MEMPOOL_REGISTER_OPS
#define RTE_MBUF_F_RX_VLAN_STRIPPED	PKT_RX_VLAN_STRIPPED
#define RTE_MBUF_F_RX_QINQ_STRIPPED	PKT_RX_QINQ_STRIPPED
#define RTE_ETH_RSS_PORT		ETH_RSS_PORT
#define RTE_ETH_RSS_VXLAN		ETH_RSS_VXLAN
#define RTE_ETH_RSS_GENEVE		ETH_RSS_GENEVE
#define RTE_ETH_RSS_NVGRE		ETH_RSS_NVGRE
#define RTE_ETH_RSS_TUNNEL		ETH_RSS_TUNNEL
#define RTE_ETH_RSS_RETA_SIZE_256	ETH_RSS_RETA_SIZE_256
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(16,11,0,0)
#define RTE_MBUF_F_RX_IP_CKSUM_MASK	PKT_RX_IP_CKSUM_MASK
#define RTE_MBUF_F_RX_IP_CKSUM_UNKNOWN	PKT_RX_IP_CKSUM_UNKNOWN
#define RTE_MBUF_F_RX_IP_CKSUM_GOOD	PKT_RX_IP_CKSUM_GOOD
#define RTE_MBUF_F_RX_IP_CKSUM_NONE	PKT_RX_IP_CKSUM_NONE
#define RTE_MBUF_F_RX_L4_CKSUM_MASK	PKT_RX_L4_CKSUM_MASK
#define RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN	PKT_RX_L4_CKSUM_UNKNOWN
#define RTE_MBUF_F_RX_L4_CKSUM_GOOD	PKT_RX_L4_CKSUM_GOOD
#define RTE_MBUF_F_RX_L4_CKSUM_NONE	PKT_RX_L4_CKSUM_NONE
#define RTE_MBUF_F_RX_LRO		PKT_RX_LRO
#define RTE_MBUF_F_TX_TUNNEL_VXLAN	PKT_TX_TUNNEL_VXLAN
#define RTE_MBUF_F_TX_TUNNEL_GRE	PKT_TX_TUNNEL_GRE
#define RTE_MBUF_F_TX_TUNNEL_IPIP	PKT_TX_TUNNEL_IPIP
#define RTE_MBUF_F_TX_TUNNEL_GENEVE	PKT_TX_TUNNEL_GENEVE
#define RTE_MBUF_F_TX_TUNNEL_MASK	PKT_TX_TUNNEL_MASK
#define RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO	DEV_TX_OFFLOAD_VXLAN_TNL_TSO
#define RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO		DEV_TX_OFFLOAD_GRE_TNL_TSO
#define RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO		DEV_TX_OFFLOAD_IPIP_TNL_TSO
#define RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO	DEV_TX_OFFLOAD_GENEVE_TNL_TSO
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(17,2,0,0)
#define RTE_MBUF_F_TX_MACSEC		PKT_TX_MACSEC
#define RTE_MBUF_F_TX_OFFLOAD_MASK	PKT_TX_OFFLOAD_MASK
#define RTE_ETH_RX_OFFLOAD_MACSEC_STRIP		DEV_RX_OFFLOAD_MACSEC_STRIP
#define RTE_ETH_TX_OFFLOAD_MACSEC_INSERT	DEV_TX_OFFLOAD_MACSEC_INSERT
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(17,8,0,0)
#define RTE_MBUF_F_TX_TUNNEL_MPLSINUDP	PKT_TX_TUNNEL_MPLSINUDP
#define RTE_ETH_TX_OFFLOAD_MT_LOCKFREE	DEV_TX_OFFLOAD_MT_LOCKFREE
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(17,11,0,0)
#define RTE_MBUF_F_RX_VLAN			PKT_RX_VLAN
#define RTE_MBUF_F_RX_SEC_OFFLOAD		PKT_RX_SEC_OFFLOAD
#define RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED	PKT_RX_SEC_OFFLOAD_FAILED
#define RTE_MBUF_F_RX_QINQ			PKT_RX_QINQ
#define RTE_MBUF_F_TX_SEC_OFFLOAD		PKT_TX_SEC_OFFLOAD
#define RTE_ETH_RX_OFFLOAD_HEADER_SPLIT	DEV_RX_OFFLOAD_HEADER_SPLIT
#define RTE_ETH_RX_OFFLOAD_VLAN_FILTER	DEV_RX_OFFLOAD_VLAN_FILTER
#define RTE_ETH_RX_OFFLOAD_VLAN_EXTEND	DEV_RX_OFFLOAD_VLAN_EXTEND
#define RTE_ETH_RX_OFFLOAD_SCATTER	DEV_RX_OFFLOAD_SCATTER
#define RTE_ETH_RX_OFFLOAD_TIMESTAMP	DEV_RX_OFFLOAD_TIMESTAMP
#define RTE_ETH_RX_OFFLOAD_SECURITY	DEV_RX_OFFLOAD_SECURITY
#define RTE_ETH_RX_OFFLOAD_CHECKSUM	DEV_RX_OFFLOAD_CHECKSUM
#define RTE_ETH_RX_OFFLOAD_VLAN		DEV_RX_OFFLOAD_VLAN
#define RTE_ETH_TX_OFFLOAD_MULTI_SEGS	DEV_TX_OFFLOAD_MULTI_SEGS
#define RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE	DEV_TX_OFFLOAD_MBUF_FAST_FREE
#define RTE_ETH_TX_OFFLOAD_SECURITY	DEV_TX_OFFLOAD_SECURITY
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(18,2,0,0)
#define RTE_MBUF_F_TX_UDP_SEG		PKT_TX_UDP_SEG
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(18,5,0,0)
#define RTE_MBUF_F_TX_TUNNEL_VXLAN_GPE	PKT_TX_TUNNEL_VXLAN_GPE
#define RTE_MBUF_F_TX_TUNNEL_IP		PKT_TX_TUNNEL_IP
#define RTE_MBUF_F_TX_TUNNEL_UDP	PKT_TX_TUNNEL_UDP
#define RTE_MBUF_F_EXTERNAL		EXT_ATTACHED_MBUF
#define RTE_ETH_TX_OFFLOAD_UDP_TNL_TSO	DEV_TX_OFFLOAD_UDP_TNL_TSO
#define RTE_ETH_TX_OFFLOAD_IP_TNL_TSO	DEV_TX_OFFLOAD_IP_TNL_TSO
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(18,11,0,0)
#define RTE_MBUF_F_RX_OUTER_L4_CKSUM_MASK	PKT_RX_OUTER_L4_CKSUM_MASK
#define RTE_MBUF_F_RX_OUTER_L4_CKSUM_UNKNOWN	PKT_RX_OUTER_L4_CKSUM_UNKNOWN
#define RTE_MBUF_F_RX_OUTER_L4_CKSUM_BAD	PKT_RX_OUTER_L4_CKSUM_BAD
#define RTE_MBUF_F_RX_OUTER_L4_CKSUM_GOOD	PKT_RX_OUTER_L4_CKSUM_GOOD
#define RTE_MBUF_F_RX_OUTER_L4_CKSUM_INVALID	PKT_RX_OUTER_L4_CKSUM_INVALID
#define RTE_MBUF_F_TX_OUTER_UDP_CKSUM		PKT_TX_OUTER_UDP_CKSUM
#define RTE_ETH_RX_OFFLOAD_SCTP_CKSUM		DEV_RX_OFFLOAD_SCTP_CKSUM
#define RTE_ETH_RX_OFFLOAD_OUTER_UDP_CKSUM	DEV_RX_OFFLOAD_OUTER_UDP_CKSUM
#define RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM	DEV_TX_OFFLOAD_OUTER_UDP_CKSUM
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(19,5,0,0)
#define RTE_ETH_TUNNEL_TYPE_VXLAN_GPE	RTE_TUNNEL_TYPE_VXLAN_GPE
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(19,8,0,0)
#define RTE_ETH_QINQ_STRIP_OFFLOAD	ETH_QINQ_STRIP_OFFLOAD
#define RTE_ETH_QINQ_STRIP_MASK		ETH_QINQ_STRIP_MASK
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(19,11,0,0)
#define RTE_MBUF_DYNFLAG_RX_METADATA	PKT_RX_DYNF_METADATA
#define RTE_MBUF_DYNFLAG_TX_METADATA	PKT_TX_DYNF_METADATA
#define RTE_MBUF_F_FIRST_FREE		PKT_FIRST_FREE
#define RTE_MBUF_F_LAST_FREE		PKT_LAST_FREE
#define RTE_MBUF_F_TX_TUNNEL_GTP	PKT_TX_TUNNEL_GTP
#define RTE_ETH_RSS_GTPU		ETH_RSS_GTPU
#define RTE_ETH_RSS_L3_SRC_ONLY		ETH_RSS_L3_SRC_ONLY
#define RTE_ETH_RSS_L3_DST_ONLY		ETH_RSS_L3_DST_ONLY
#define RTE_ETH_RSS_L4_SRC_ONLY		ETH_RSS_L4_SRC_ONLY
#define RTE_ETH_RSS_L4_DST_ONLY		ETH_RSS_L4_DST_ONLY
#define RTE_ETH_RX_OFFLOAD_RSS_HASH	DEV_RX_OFFLOAD_RSS_HASH
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(20,5,0,0)
#define RTE_ETH_LINK_SPEED_200G		ETH_LINK_SPEED_200G
#define RTE_ETH_SPEED_NUM_200G		ETH_SPEED_NUM_200G
#define RTE_ETH_RSS_ETH			ETH_RSS_ETH
#define RTE_ETH_RSS_S_VLAN		ETH_RSS_S_VLAN
#define RTE_ETH_RSS_C_VLAN		ETH_RSS_C_VLAN
#define RTE_ETH_RSS_ESP			ETH_RSS_ESP
#define RTE_ETH_RSS_AH			ETH_RSS_AH
#define RTE_ETH_RSS_L2TPV3		ETH_RSS_L2TPV3
#define RTE_ETH_RSS_PFCP		ETH_RSS_PFCP
#define RTE_ETH_RSS_L2_SRC_ONLY		ETH_RSS_L2_SRC_ONLY
#define RTE_ETH_RSS_L2_DST_ONLY		ETH_RSS_L2_DST_ONLY
#define RTE_ETH_RSS_VLAN		ETH_RSS_VLAN
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(20,8,0,0)
#define RTE_ETH_RSS_PPPOE		ETH_RSS_PPPOE
#define RTE_ETH_RSS_IPV6_PRE32		ETH_RSS_IPV6_PRE32
#define RTE_ETH_RSS_IPV6_PRE40		ETH_RSS_IPV6_PRE40
#define RTE_ETH_RSS_IPV6_PRE48		ETH_RSS_IPV6_PRE48
#define RTE_ETH_RSS_IPV6_PRE56		ETH_RSS_IPV6_PRE56
#define RTE_ETH_RSS_IPV6_PRE64		ETH_RSS_IPV6_PRE64
#define RTE_ETH_RSS_IPV6_PRE96		ETH_RSS_IPV6_PRE96
#define RTE_ETH_RSS_IPV6_PRE32_UDP	ETH_RSS_IPV6_PRE32_UDP
#define RTE_ETH_RSS_IPV6_PRE40_UDP	ETH_RSS_IPV6_PRE40_UDP
#define RTE_ETH_RSS_IPV6_PRE48_UDP	ETH_RSS_IPV6_PRE48_UDP
#define RTE_ETH_RSS_IPV6_PRE56_UDP	ETH_RSS_IPV6_PRE56_UDP
#define RTE_ETH_RSS_IPV6_PRE64_UDP	ETH_RSS_IPV6_PRE64_UDP
#define RTE_ETH_RSS_IPV6_PRE96_UDP	ETH_RSS_IPV6_PRE96_UDP
#define RTE_ETH_RSS_IPV6_PRE32_TCP	ETH_RSS_IPV6_PRE32_TCP
#define RTE_ETH_RSS_IPV6_PRE40_TCP	ETH_RSS_IPV6_PRE40_TCP
#define RTE_ETH_RSS_IPV6_PRE48_TCP	ETH_RSS_IPV6_PRE48_TCP
#define RTE_ETH_RSS_IPV6_PRE56_TCP	ETH_RSS_IPV6_PRE56_TCP
#define RTE_ETH_RSS_IPV6_PRE64_TCP	ETH_RSS_IPV6_PRE64_TCP
#define RTE_ETH_RSS_IPV6_PRE96_TCP	ETH_RSS_IPV6_PRE96_TCP
#define RTE_ETH_RSS_IPV6_PRE32_SCTP	ETH_RSS_IPV6_PRE32_SCTP
#define RTE_ETH_RSS_IPV6_PRE40_SCTP	ETH_RSS_IPV6_PRE40_SCTP
#define RTE_ETH_RSS_IPV6_PRE48_SCTP	ETH_RSS_IPV6_PRE48_SCTP
#define RTE_ETH_RSS_IPV6_PRE56_SCTP	ETH_RSS_IPV6_PRE56_SCTP
#define RTE_ETH_RSS_IPV6_PRE64_SCTP	ETH_RSS_IPV6_PRE64_SCTP
#define RTE_ETH_RSS_IPV6_PRE96_SCTP	ETH_RSS_IPV6_PRE96_SCTP
#define RTE_ETH_TX_OFFLOAD_SEND_ON_TIMESTAMP	DEV_TX_OFFLOAD_SEND_ON_TIMESTAMP
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(20,11,0,0)
#define RTE_ETH_SPEED_NUM_UNKNOWN	ETH_SPEED_NUM_UNKNOWN
#define RTE_ETH_RSS_ECPRI		ETH_RSS_ECPRI
#define RTE_ETH_RSS_LEVEL_PMD_DEFAULT	ETH_RSS_LEVEL_PMD_DEFAULT
#define RTE_ETH_RSS_LEVEL_OUTERMOST	ETH_RSS_LEVEL_OUTERMOST
#define RTE_ETH_RSS_LEVEL_INNERMOST	ETH_RSS_LEVEL_INNERMOST
#define RTE_ETH_RSS_LEVEL_MASK		ETH_RSS_LEVEL_MASK
#define RTE_ETH_RSS_LEVEL		ETH_RSS_LEVEL
#endif
#if RTE_VERSION >= RTE_VERSION_NUM(21,2,0,0)
#define RTE_ETH_RSS_MPLS		ETH_RSS_MPLS
#define RTE_ETH_TUNNEL_TYPE_ECPRI	RTE_TUNNEL_TYPE_ECPRI
#endif

#ifndef DEV_RX_OFFLOAD_JUMBO_FRAME
#define RTE_ETH_RX_OFFLOAD_JUMBO_FRAME	0x00000800
#else
#define RTE_ETH_RX_OFFLOAD_JUMBO_FRAME	DEV_RX_OFFLOAD_JUMBO_FRAME
#endif

#ifndef DEV_RX_OFFLOAD_KEEP_CRC
#ifndef DEV_RX_OFFLOAD_CRC_STRIP
#define RTE_ETH_RX_OFFLOAD_CRC_STRIP	0x00001000
#else
#define RTE_ETH_RX_OFFLOAD_CRC_STRIP	DEV_RX_OFFLOAD_CRC_STRIP
#endif
#define RTE_ETH_RX_OFFLOAD_KEEP_CRC	_force_error_if_defined_
#undef  RTE_ETH_RX_OFFLOAD_KEEP_CRC

#else
#ifndef DEV_RX_OFFLOAD_CRC_STRIP
#define RTE_ETH_RX_OFFLOAD_CRC_STRIP	_force_error_if_defined_
#undef  RTE_ETH_RX_OFFLOAD_CRC_STRIP
#else
#define RTE_ETH_RX_OFFLOAD_CRC_STRIP	DEV_RX_OFFLOAD_CRC_STRIP
#endif
#define RTE_ETH_RX_OFFLOAD_KEEP_CRC	DEV_RX_OFFLOAD_KEEP_CRC
#endif

#else //  >= 21.11
#define RTE_ETH_RX_OFFLOAD_JUMBO_FRAME	RTE_BIT64(11)
#define RTE_ETH_RX_OFFLOAD_CRC_STRIP	_force_error_if_defined_
#undef  RTE_ETH_RX_OFFLOAD_CRC_STRIP
#endif

#endif // _PROX_COMPAT_H