deepeedeekay-sys 0.1.0

Bindings to system-installed DPDK
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
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
#include "../bind.h"

/**
 Checks if a pointer is aligned to a given power-of-two value
 
in param ptr
   The pointer whose alignment is to be checked 
in param align
   The power-of-two value to which the ptr should be aligned
 
return
   True(1) where the pointer is correctly aligned, false(0) otherwise*/
int  deepeedeekay_rte_is_aligned(const void *const restrict ptr, const unsigned int align);
/**
 Copy uuid.
 
in param dst
    Destination uuid 
in param src
    Source uuid*/
void  deepeedeekay_rte_uuid_copy(unsigned char * dst, const unsigned char * src);
/**
 Get system unique thread id.
 
return
   On success, returns the thread ID of calling process.   It is always successful.*/
int  deepeedeekay_rte_gettid();
/**
 Get the target bit from a 32-bit value without memory ordering.
 
in param nr
   The target bit to get. 
in param addr
   The address holding the bit. 
return
   The target bit.*/
uint32_t  deepeedeekay_rte_bit_relaxed_get32(unsigned int nr, volatile uint32_t * addr);
/**
 Set the target bit in a 32-bit value to 1 without memory ordering.
 
in param nr
   The target bit to set. 
in param addr
   The address holding the bit.*/
void  deepeedeekay_rte_bit_relaxed_set32(unsigned int nr, volatile uint32_t * addr);
/**
 Clear the target bit in a 32-bit value to 0 without memory ordering.
 
in param nr
   The target bit to clear. 
in param addr
   The address holding the bit.*/
void  deepeedeekay_rte_bit_relaxed_clear32(unsigned int nr, volatile uint32_t * addr);
/**
 Return the original bit from a 32-bit value, then set it to 1 without memory ordering.
 
in param nr
   The target bit to get and set. 
in param addr
   The address holding the bit. 
return
   The original bit.*/
uint32_t  deepeedeekay_rte_bit_relaxed_test_and_set32(unsigned int nr, volatile uint32_t * addr);
/**
 Return the original bit from a 32-bit value, then clear it to 0 without memory ordering.
 
in param nr
   The target bit to get and clear. 
in param addr
   The address holding the bit. 
return
   The original bit.*/
uint32_t  deepeedeekay_rte_bit_relaxed_test_and_clear32(unsigned int nr, volatile uint32_t * addr);
/**
 Get the target bit from a 64-bit value without memory ordering.
 
in param nr
   The target bit to get. 
in param addr
   The address holding the bit. 
return
   The target bit.*/
uint64_t  deepeedeekay_rte_bit_relaxed_get64(unsigned int nr, volatile uint64_t * addr);
/**
 Set the target bit in a 64-bit value to 1 without memory ordering.
 
in param nr
   The target bit to set. 
in param addr
   The address holding the bit.*/
void  deepeedeekay_rte_bit_relaxed_set64(unsigned int nr, volatile uint64_t * addr);
/**
 Clear the target bit in a 64-bit value to 0 without memory ordering.
 
in param nr
   The target bit to clear. 
in param addr
   The address holding the bit.*/
void  deepeedeekay_rte_bit_relaxed_clear64(unsigned int nr, volatile uint64_t * addr);
/**
 Return the original bit from a 64-bit value, then set it to 1 without memory ordering.
 
in param nr
   The target bit to get and set. 
in param addr
   The address holding the bit. 
return
   The original bit.*/
uint64_t  deepeedeekay_rte_bit_relaxed_test_and_set64(unsigned int nr, volatile uint64_t * addr);
/**
 Return the original bit from a 64-bit value, then clear it to 0 without memory ordering.
 
in param nr
   The target bit to get and clear. 
in param addr
   The address holding the bit. 
return
   The original bit.*/
uint64_t  deepeedeekay_rte_bit_relaxed_test_and_clear64(unsigned int nr, volatile uint64_t * addr);
/**
 Get the count of leading 0-bits in v.
 
in param v
   The value. 
return
   The count of leading zero bits.*/
unsigned int  deepeedeekay_rte_clz32(uint32_t v);
/**
 Get the count of leading 0-bits in v.
 
in param v
   The value. 
return
   The count of leading zero bits.*/
unsigned int  deepeedeekay_rte_clz64(uint64_t v);
/**
 Get the count of trailing 0-bits in v.
 
in param v
   The value. 
return
   The count of trailing zero bits.*/
unsigned int  deepeedeekay_rte_ctz32(uint32_t v);
/**
 Get the count of trailing 0-bits in v.
 
in param v
   The value. 
return
   The count of trailing zero bits.*/
unsigned int  deepeedeekay_rte_ctz64(uint64_t v);
/**
 Get the count of 1-bits in v.
 
in param v
   The value. 
return
   The count of 1-bits.*/
unsigned int  deepeedeekay_rte_popcount32(uint32_t v);
/**
 Get the count of 1-bits in v.
 
in param v
   The value. 
return
   The count of 1-bits.*/
unsigned int  deepeedeekay_rte_popcount64(uint64_t v);
/**
 Combines 32b inputs most significant set bits into the least significant bits to construct a value with the same MSBs as x but all 1's under it.
 
in param x
    The integer whose MSBs need to be combined with its LSBs 
return
    The combined value.*/
uint32_t  deepeedeekay_rte_combine32ms1b(uint32_t x);
/**
 Combines 64b inputs most significant set bits into the least significant bits to construct a value with the same MSBs as x but all 1's under it.
 
in param v
    The integer whose MSBs need to be combined with its LSBs 
return
    The combined value.*/
uint64_t  deepeedeekay_rte_combine64ms1b(uint64_t v);
/**
 Searches the input parameter for the least significant set bit (starting from zero). If a least significant 1 bit is found, its bit index is returned. If the content of the input parameter is zero, then the content of the return value is undefined. 
in param v
     input parameter, should not be zero. 
return
     least significant set bit in the input parameter.*/
uint32_t  deepeedeekay_rte_bsf32(uint32_t v);
/**
 Searches the input parameter for the least significant set bit (starting from zero). Safe version (checks for input parameter being zero).
 
warning
 ``pos`` must be a valid pointer. It is not checked!
 
in param v
     The input parameter. 
in param pos
     If ``v`` was not 0, this value will contain position of least significant     bit within the input parameter. 
return
     Returns 0 if ``v`` was 0, otherwise returns 1.*/
int  deepeedeekay_rte_bsf32_safe(uint32_t v, uint32_t * pos);
/**
 Searches the input parameter for the least significant set bit (starting from zero). If a least significant 1 bit is found, its bit index is returned. If the content of the input parameter is zero, then the content of the return value is undefined. 
in param v
     input parameter, should not be zero. 
return
     least significant set bit in the input parameter.*/
uint32_t  deepeedeekay_rte_bsf64(uint64_t v);
/**
 Searches the input parameter for the least significant set bit (starting from zero). Safe version (checks for input parameter being zero).
 
warning
 ``pos`` must be a valid pointer. It is not checked!
 
in param v
     The input parameter. 
in param pos
     If ``v`` was not 0, this value will contain position of least significant     bit within the input parameter. 
return
     Returns 0 if ``v`` was 0, otherwise returns 1.*/
int  deepeedeekay_rte_bsf64_safe(uint64_t v, uint32_t * pos);
/**
 Return the last (most-significant) bit set.
 
note
 The last (most significant) bit is at position 32. 
note
 rte_fls_u32(0) = 0, rte_fls_u32(1) = 1, rte_fls_u32(0x80000000) = 32
 
in param x
     The input parameter. 
return
     The last (most-significant) bit set, or 0 if the input is 0.*/
uint32_t  deepeedeekay_rte_fls_u32(uint32_t x);
/**
 Return the last (most-significant) bit set.
 
note
 The last (most significant) bit is at position 64. 
note
 rte_fls_u64(0) = 0, rte_fls_u64(1) = 1,       rte_fls_u64(0x8000000000000000) = 64
 
in param x
     The input parameter. 
return
     The last (most-significant) bit set, or 0 if the input is 0.*/
uint32_t  deepeedeekay_rte_fls_u64(uint64_t x);
/**
 Returns true if n is a power of 2 
in param n
     Number to check 
return
 1 if true, 0 otherwise*/
int  deepeedeekay_rte_is_power_of_2(uint32_t n);
/**
 Aligns input parameter to the next power of 2
 
in param x
   The integer value to align
 
return
   Input parameter aligned to the next power of 2*/
uint32_t  deepeedeekay_rte_align32pow2(uint32_t x);
/**
 Aligns input parameter to the previous power of 2
 
in param x
   The integer value to align
 
return
   Input parameter aligned to the previous power of 2*/
uint32_t  deepeedeekay_rte_align32prevpow2(uint32_t x);
/**
 Aligns 64b input parameter to the next power of 2
 
in param v
   The 64b value to align
 
return
   Input parameter aligned to the next power of 2*/
uint64_t  deepeedeekay_rte_align64pow2(uint64_t v);
/**
 Aligns 64b input parameter to the previous power of 2
 
in param v
   The 64b value to align
 
return
   Input parameter aligned to the previous power of 2*/
uint64_t  deepeedeekay_rte_align64prevpow2(uint64_t v);
/**
 Return the rounded-up log2 of a integer.
 
note
 Contrary to the logarithm mathematical operation, rte_log2_u32(0) == 0 and not -inf.
 
in param v
     The input parameter. 
return
     The rounded-up log2 of the input, or 0 if the input is 0.*/
uint32_t  deepeedeekay_rte_log2_u32(uint32_t v);
/**
 Return the rounded-up log2 of a 64-bit integer.
 
note
 Contrary to the logarithm mathematical operation, rte_log2_u64(0) == 0 and not -inf.
 
in param v
     The input parameter. 
return
     The rounded-up log2 of the input, or 0 if the input is 0.*/
uint32_t  deepeedeekay_rte_log2_u64(uint64_t v);
/**
 Synchronization fence between threads based on the specified memory order.*/
void  deepeedeekay_rte_atomic_thread_fence(rte_memory_order memorder);
/**
 Atomic compare and set.
 (atomic) equivalent to:   if (*dst == exp)     *dst = src (all 16-bit words)
 
in param dst
   The destination location into which the value will be written. 
in param exp
   The expected value. 
in param src
   The new value. 
return
   Non-zero on success; 0 on failure.*/
int  deepeedeekay_rte_atomic16_cmpset(volatile uint16_t * dst, uint16_t exp, uint16_t src);
/**
 Atomic exchange.
 (atomic) equivalent to:   ret = *dst   *dst = val;   return ret;
 
in param dst
   The destination location into which the value will be written. 
in param val
   The new value. 
return
   The original value at that location*/
uint16_t  deepeedeekay_rte_atomic16_exchange(volatile uint16_t * dst, uint16_t val);
/**
 Initialize an atomic counter.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic16_init(rte_atomic16_t * v);
/**
 Atomically read a 16-bit value from a counter.
 
in param v
   A pointer to the atomic counter. 
return
   The value of the counter.*/
int16_t  deepeedeekay_rte_atomic16_read(const rte_atomic16_t * v);
/**
 Atomically set a counter to a 16-bit value.
 
in param v
   A pointer to the atomic counter. 
in param new_value
   The new value for the counter.*/
void  deepeedeekay_rte_atomic16_set(rte_atomic16_t * v, int16_t new_value);
/**
 Atomically add a 16-bit value to an atomic counter.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter.*/
void  deepeedeekay_rte_atomic16_add(rte_atomic16_t * v, int16_t inc);
/**
 Atomically subtract a 16-bit value from an atomic counter.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter.*/
void  deepeedeekay_rte_atomic16_sub(rte_atomic16_t * v, int16_t dec);
/**
 Atomically increment a counter by one.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic16_inc(rte_atomic16_t * v);
/**
 Atomically decrement a counter by one.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic16_dec(rte_atomic16_t * v);
/**
 Atomically add a 16-bit value to a counter and return the result.
 Atomically adds the 16-bits value (inc) to the atomic counter (v) and returns the value of v after addition.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter. 
return
   The value of v after the addition.*/
int16_t  deepeedeekay_rte_atomic16_add_return(rte_atomic16_t * v, int16_t inc);
/**
 Atomically subtract a 16-bit value from a counter and return the result.
 Atomically subtracts the 16-bit value (inc) from the atomic counter (v) and returns the value of v after the subtraction.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter. 
return
   The value of v after the subtraction.*/
int16_t  deepeedeekay_rte_atomic16_sub_return(rte_atomic16_t * v, int16_t dec);
/**
 Atomically increment a 16-bit counter by one and test.
 Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after the increment operation is 0; false otherwise.*/
int  deepeedeekay_rte_atomic16_inc_and_test(rte_atomic16_t * v);
/**
 Atomically decrement a 16-bit counter by one and test.
 Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after the decrement operation is 0; false otherwise.*/
int  deepeedeekay_rte_atomic16_dec_and_test(rte_atomic16_t * v);
/**
 Atomically test and set a 16-bit atomic counter.
 If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
 
in param v
   A pointer to the atomic counter. 
return
   0 if failed; else 1, success.*/
int  deepeedeekay_rte_atomic16_test_and_set(rte_atomic16_t * v);
/**
 Atomically set a 16-bit counter to 0.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic16_clear(rte_atomic16_t * v);
/**
 Atomic compare and set.
 (atomic) equivalent to:   if (*dst == exp)     *dst = src (all 32-bit words)
 
in param dst
   The destination location into which the value will be written. 
in param exp
   The expected value. 
in param src
   The new value. 
return
   Non-zero on success; 0 on failure.*/
int  deepeedeekay_rte_atomic32_cmpset(volatile uint32_t * dst, uint32_t exp, uint32_t src);
/**
 Atomic exchange.
 (atomic) equivalent to:   ret = *dst   *dst = val;   return ret;
 
in param dst
   The destination location into which the value will be written. 
in param val
   The new value. 
return
   The original value at that location*/
uint32_t  deepeedeekay_rte_atomic32_exchange(volatile uint32_t * dst, uint32_t val);
/**
 Initialize an atomic counter.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic32_init(rte_atomic32_t * v);
/**
 Atomically read a 32-bit value from a counter.
 
in param v
   A pointer to the atomic counter. 
return
   The value of the counter.*/
int32_t  deepeedeekay_rte_atomic32_read(const rte_atomic32_t * v);
/**
 Atomically set a counter to a 32-bit value.
 
in param v
   A pointer to the atomic counter. 
in param new_value
   The new value for the counter.*/
void  deepeedeekay_rte_atomic32_set(rte_atomic32_t * v, int32_t new_value);
/**
 Atomically add a 32-bit value to an atomic counter.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter.*/
void  deepeedeekay_rte_atomic32_add(rte_atomic32_t * v, int32_t inc);
/**
 Atomically subtract a 32-bit value from an atomic counter.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter.*/
void  deepeedeekay_rte_atomic32_sub(rte_atomic32_t * v, int32_t dec);
/**
 Atomically increment a counter by one.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic32_inc(rte_atomic32_t * v);
/**
 Atomically decrement a counter by one.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic32_dec(rte_atomic32_t * v);
/**
 Atomically add a 32-bit value to a counter and return the result.
 Atomically adds the 32-bits value (inc) to the atomic counter (v) and returns the value of v after addition.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter. 
return
   The value of v after the addition.*/
int32_t  deepeedeekay_rte_atomic32_add_return(rte_atomic32_t * v, int32_t inc);
/**
 Atomically subtract a 32-bit value from a counter and return the result.
 Atomically subtracts the 32-bit value (inc) from the atomic counter (v) and returns the value of v after the subtraction.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter. 
return
   The value of v after the subtraction.*/
int32_t  deepeedeekay_rte_atomic32_sub_return(rte_atomic32_t * v, int32_t dec);
/**
 Atomically increment a 32-bit counter by one and test.
 Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after the increment operation is 0; false otherwise.*/
int  deepeedeekay_rte_atomic32_inc_and_test(rte_atomic32_t * v);
/**
 Atomically decrement a 32-bit counter by one and test.
 Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after the decrement operation is 0; false otherwise.*/
int  deepeedeekay_rte_atomic32_dec_and_test(rte_atomic32_t * v);
/**
 Atomically test and set a 32-bit atomic counter.
 If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
 
in param v
   A pointer to the atomic counter. 
return
   0 if failed; else 1, success.*/
int  deepeedeekay_rte_atomic32_test_and_set(rte_atomic32_t * v);
/**
 Atomically set a 32-bit counter to 0.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic32_clear(rte_atomic32_t * v);
/**
 An atomic compare and set function used by the mutex functions. (atomic) equivalent to:   if (*dst == exp)     *dst = src (all 64-bit words)
 
in param dst
   The destination into which the value will be written. 
in param exp
   The expected value. 
in param src
   The new value. 
return
   Non-zero on success; 0 on failure.*/
int  deepeedeekay_rte_atomic64_cmpset(volatile uint64_t * dst, uint64_t exp, uint64_t src);
/**
 Atomic exchange.
 (atomic) equivalent to:   ret = *dst   *dst = val;   return ret;
 
in param dst
   The destination location into which the value will be written. 
in param val
   The new value. 
return
   The original value at that location*/
uint64_t  deepeedeekay_rte_atomic64_exchange(volatile uint64_t * dst, uint64_t val);
/**
 Initialize the atomic counter.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic64_init(rte_atomic64_t * v);
/**
 Atomically read a 64-bit counter.
 
in param v
   A pointer to the atomic counter. 
return
   The value of the counter.*/
int64_t  deepeedeekay_rte_atomic64_read(rte_atomic64_t * v);
/**
 Atomically set a 64-bit counter.
 
in param v
   A pointer to the atomic counter. 
in param new_value
   The new value of the counter.*/
void  deepeedeekay_rte_atomic64_set(rte_atomic64_t * v, int64_t new_value);
/**
 Atomically add a 64-bit value to a counter.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter.*/
void  deepeedeekay_rte_atomic64_add(rte_atomic64_t * v, int64_t inc);
/**
 Atomically subtract a 64-bit value from a counter.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter.*/
void  deepeedeekay_rte_atomic64_sub(rte_atomic64_t * v, int64_t dec);
/**
 Atomically increment a 64-bit counter by one and test.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic64_inc(rte_atomic64_t * v);
/**
 Atomically decrement a 64-bit counter by one and test.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic64_dec(rte_atomic64_t * v);
/**
 Add a 64-bit value to an atomic counter and return the result.
 Atomically adds the 64-bit value (inc) to the atomic counter (v) and returns the value of v after the addition.
 
in param v
   A pointer to the atomic counter. 
in param inc
   The value to be added to the counter. 
return
   The value of v after the addition.*/
int64_t  deepeedeekay_rte_atomic64_add_return(rte_atomic64_t * v, int64_t inc);
/**
 Subtract a 64-bit value from an atomic counter and return the result.
 Atomically subtracts the 64-bit value (dec) from the atomic counter (v) and returns the value of v after the subtraction.
 
in param v
   A pointer to the atomic counter. 
in param dec
   The value to be subtracted from the counter. 
return
   The value of v after the subtraction.*/
int64_t  deepeedeekay_rte_atomic64_sub_return(rte_atomic64_t * v, int64_t dec);
/**
 Atomically increment a 64-bit counter by one and test.
 Atomically increments the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after the addition is 0; false otherwise.*/
int  deepeedeekay_rte_atomic64_inc_and_test(rte_atomic64_t * v);
/**
 Atomically decrement a 64-bit counter by one and test.
 Atomically decrements the atomic counter (v) by one and returns true if the result is 0, or false in all other cases.
 
in param v
   A pointer to the atomic counter. 
return
   True if the result after subtraction is 0; false otherwise.*/
int  deepeedeekay_rte_atomic64_dec_and_test(rte_atomic64_t * v);
/**
 Atomically test and set a 64-bit atomic counter.
 If the counter value is already set, return 0 (failed). Otherwise, set the counter value to 1 and return 1 (success).
 
in param v
   A pointer to the atomic counter. 
return
   0 if failed; else 1, success.*/
int  deepeedeekay_rte_atomic64_test_and_set(rte_atomic64_t * v);
/**
 Atomically set a 64-bit counter to 0.
 
in param v
   A pointer to the atomic counter.*/
void  deepeedeekay_rte_atomic64_clear(rte_atomic64_t * v);
/***/
void  deepeedeekay_rte_smp_mb();
/***/
int  deepeedeekay_rte_atomic128_cmp_exchange(rte_int128_t * dst, rte_int128_t * exp, const rte_int128_t * src, unsigned int weak, int success, int failure);
/**
 Pause CPU execution for a short while
 This call is intended for tight loops which poll a shared resource or wait for an event. A short pause within the loop may reduce the power consumption.*/
void  deepeedeekay_rte_pause();
/**
 Wait for *addr to be updated with a 16-bit expected value, with a relaxed memory ordering model meaning the loads around this API can be reordered.
 
in param addr
  A pointer to the memory location. 
in param expected
  A 16-bit expected value to be in the memory location. 
in param memorder
  Two different memory orders that can be specified:  rte_memory_order_acquire and rte_memory_order_relaxed.*/
void  deepeedeekay_rte_wait_until_equal_16(volatile uint16_t * addr, uint16_t expected, rte_memory_order memorder);
/**
 Wait for *addr to be updated with a 32-bit expected value, with a relaxed memory ordering model meaning the loads around this API can be reordered.
 
in param addr
  A pointer to the memory location. 
in param expected
  A 32-bit expected value to be in the memory location. 
in param memorder
  Two different memory orders that can be specified:  rte_memory_order_acquire and rte_memory_order_relaxed.*/
void  deepeedeekay_rte_wait_until_equal_32(volatile uint32_t * addr, uint32_t expected, rte_memory_order memorder);
/**
 Wait for *addr to be updated with a 64-bit expected value, with a relaxed memory ordering model meaning the loads around this API can be reordered.
 
in param addr
  A pointer to the memory location. 
in param expected
  A 64-bit expected value to be in the memory location. 
in param memorder
  Two different memory orders that can be specified:  rte_memory_order_acquire and rte_memory_order_relaxed.*/
void  deepeedeekay_rte_wait_until_equal_64(volatile uint64_t * addr, uint64_t expected, rte_memory_order memorder);
/**
 Initialize the rwlock to an unlocked state.
 
in param rwl
   A pointer to the rwlock structure.*/
void  deepeedeekay_rte_rwlock_init(rte_rwlock_t * rwl);
/**
 Take a read lock. Loop until the lock is held.
 
note
 The RW lock isn't recursive, so calling this function on the same lock twice without releasing it could potentially result in a deadlock scenario when a write lock is involved.
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_read_lock(rte_rwlock_t * rwl);
/**
 Try to take a read lock.
 
in param rwl
   A pointer to a rwlock structure. 
return
   - zero if the lock is successfully taken   - -EBUSY if lock could not be acquired for reading because a     writer holds the lock*/
int  deepeedeekay_rte_rwlock_read_trylock(rte_rwlock_t * rwl);
/**
 Release a read lock.
 
in param rwl
   A pointer to the rwlock structure.*/
void  deepeedeekay_rte_rwlock_read_unlock(rte_rwlock_t * rwl);
/**
 Try to take a write lock.
 
in param rwl
   A pointer to a rwlock structure. 
return
   - zero if the lock is successfully taken   - -EBUSY if lock could not be acquired for writing because     it was already locked for reading or writing*/
int  deepeedeekay_rte_rwlock_write_trylock(rte_rwlock_t * rwl);
/**
 Take a write lock. Loop until the lock is held.
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_write_lock(rte_rwlock_t * rwl);
/**
 Release a write lock.
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_write_unlock(rte_rwlock_t * rwl);
/**
 Test if the write lock is taken.
 
in param rwl
   A pointer to a rwlock structure. 
return
   1 if the write lock is currently taken; 0 otherwise.*/
int  deepeedeekay_rte_rwlock_write_is_locked(rte_rwlock_t * rwl);
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available take a read lock
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_read_lock_tm(rte_rwlock_t * rwl);
/**
 Commit hardware memory transaction or release the read lock if the lock is used as a fall-back
 
in param rwl
   A pointer to the rwlock structure.*/
void  deepeedeekay_rte_rwlock_read_unlock_tm(rte_rwlock_t * rwl);
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available take a write lock
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_write_lock_tm(rte_rwlock_t * rwl);
/**
 Commit hardware memory transaction or release the write lock if the lock is used as a fall-back
 
in param rwl
   A pointer to a rwlock structure.*/
void  deepeedeekay_rte_rwlock_write_unlock_tm(rte_rwlock_t * rwl);
/**
 Return the Application thread ID of the execution unit.
 Note: in most cases the lcore id returned here will also correspond   to the processor id of the CPU on which the thread is pinned, this   will not be the case if the user has explicitly changed the thread to   core affinities using --lcores EAL argument e.g. --lcores '(0-3)@10'   to run threads with lcore IDs 0, 1, 2 and 3 on physical core 10..
 
return
  Logical core ID (in EAL thread or registered non-EAL thread) or  LCORE_ID_ANY (in unregistered non-EAL thread)*/
unsigned int  deepeedeekay_rte_lcore_id();
/**
 Initialize the spinlock to an unlocked state.
 
in param sl
   A pointer to the spinlock.*/
void  deepeedeekay_rte_spinlock_init(rte_spinlock_t * sl);
/**
 Take the spinlock.
 
in param sl
   A pointer to the spinlock.*/
void  deepeedeekay_rte_spinlock_lock(rte_spinlock_t * sl);
/**
 Release the spinlock.
 
in param sl
   A pointer to the spinlock.*/
void  deepeedeekay_rte_spinlock_unlock(rte_spinlock_t * sl);
/**
 Try to take the lock.
 
in param sl
   A pointer to the spinlock. 
return
   1 if the lock is successfully taken; 0 otherwise.*/
int  deepeedeekay_rte_spinlock_trylock(rte_spinlock_t * sl);
/**
 Test if the lock is taken.
 
in param sl
   A pointer to the spinlock. 
return
   1 if the lock is currently taken; 0 otherwise.*/
int  deepeedeekay_rte_spinlock_is_locked(rte_spinlock_t * sl);
/**
 Test if hardware transactional memory (lock elision) is supported
 
return
   1 if the hardware transactional memory is supported; 0 otherwise.*/
int  deepeedeekay_rte_tm_supported();
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available take the spinlock.
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param sl
   A pointer to the spinlock.*/
void  deepeedeekay_rte_spinlock_lock_tm(rte_spinlock_t * sl);
/**
 Commit hardware memory transaction or release the spinlock if the spinlock is used as a fall-back
 
in param sl
   A pointer to the spinlock.*/
void  deepeedeekay_rte_spinlock_unlock_tm(rte_spinlock_t * sl);
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available try to take the lock.
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param sl
   A pointer to the spinlock. 
return
   1 if the hardware memory transaction is successfully started   or lock is successfully taken; 0 otherwise.*/
int  deepeedeekay_rte_spinlock_trylock_tm(rte_spinlock_t * sl);
/**
 Initialize the recursive spinlock to an unlocked state.
 
in param slr
   A pointer to the recursive spinlock.*/
void  deepeedeekay_rte_spinlock_recursive_init(rte_spinlock_recursive_t * slr);
/**
 Take the recursive spinlock.
 
in param slr
   A pointer to the recursive spinlock.*/
void  deepeedeekay_rte_spinlock_recursive_lock(rte_spinlock_recursive_t * slr);
/**
 Release the recursive spinlock.
 
in param slr
   A pointer to the recursive spinlock.*/
void  deepeedeekay_rte_spinlock_recursive_unlock(rte_spinlock_recursive_t * slr);
/**
 Try to take the recursive lock.
 
in param slr
   A pointer to the recursive spinlock. 
return
   1 if the lock is successfully taken; 0 otherwise.*/
int  deepeedeekay_rte_spinlock_recursive_trylock(rte_spinlock_recursive_t * slr);
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available take the recursive spinlocks
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param slr
   A pointer to the recursive spinlock.*/
void  deepeedeekay_rte_spinlock_recursive_lock_tm(rte_spinlock_recursive_t * slr);
/**
 Commit hardware memory transaction or release the recursive spinlock if the recursive spinlock is used as a fall-back
 
in param slr
   A pointer to the recursive spinlock.*/
void  deepeedeekay_rte_spinlock_recursive_unlock_tm(rte_spinlock_recursive_t * slr);
/**
 Try to execute critical section in a hardware memory transaction, if it fails or not available try to take the recursive lock
 NOTE: An attempt to perform a HW I/O operation inside a hardware memory transaction always aborts the transaction since the CPU is not able to roll-back should the transaction fail. Therefore, hardware transactional locks are not advised to be used around rte_eth_rx_burst() and rte_eth_tx_burst() calls.
 
in param slr
   A pointer to the recursive spinlock. 
return
   1 if the hardware memory transaction is successfully started   or lock is successfully taken; 0 otherwise.*/
int  deepeedeekay_rte_spinlock_recursive_trylock_tm(rte_spinlock_recursive_t * slr);
/***/
unsigned int  deepeedeekay_rte_xbegin();
/***/
void  deepeedeekay_rte_xend();
/***/
int  deepeedeekay_rte_xtest();
/**
 Return the number of TSC cycles since boot
 
return
   the number of cycles*/
uint64_t  deepeedeekay_rte_get_tsc_cycles();
/**
 Get the number of cycles since boot from the default timer.
 
return
   The number of cycles*/
uint64_t  deepeedeekay_rte_get_timer_cycles();
/**
 Get the number of cycles in one second for the default timer.
 
return
   The number of cycles in one second.*/
uint64_t  deepeedeekay_rte_get_timer_hz();
/**
 Wait at least ms milliseconds.
 
in param ms
   The number of milliseconds to wait.*/
void  deepeedeekay_rte_delay_ms(unsigned int ms);
/***/
uint64_t  deepeedeekay_rte_rdtsc();
/***/
uint64_t  deepeedeekay_rte_rdtsc_precise();
/***/
int  deepeedeekay_rte_try_tm(volatile int * lock);
/**
 Enqueue several objects on the ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_enqueue_bulk_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring
 
warning
 This API is NOT multi-producers safe
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_sp_enqueue_bulk_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on the HTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_hts_enqueue_bulk_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an HTS ring (multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_hts_dequeue_bulk_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the HTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_hts_enqueue_burst_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an HTS  ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_hts_dequeue_burst_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the HTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_hts_enqueue_bulk(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an HTS ring (multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_hts_dequeue_bulk(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the HTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_hts_enqueue_burst(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an HTS  ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_hts_dequeue_burst(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the RTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_rts_enqueue_bulk_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an RTS ring (multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_rts_dequeue_bulk_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the RTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_rts_enqueue_burst_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an RTS  ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_rts_dequeue_burst_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the RTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_rts_enqueue_bulk(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an RTS ring (multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_rts_dequeue_bulk(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Enqueue several objects on the RTS ring (multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_rts_enqueue_burst(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from an RTS  ring (multi-consumers safe). When the requested objects are more than the available objects, only dequeue the actual number of objects.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_rts_dequeue_burst(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Return producer max Head-Tail-Distance (HTD).
 
in param r
   A pointer to the ring structure. 
return
   Producer HTD value, if producer is set in appropriate sync mode,   or UINT32_MAX otherwise.*/
uint32_t  deepeedeekay_rte_ring_get_prod_htd_max(const struct rte_ring * r);
/**
 Set producer max Head-Tail-Distance (HTD). Note that producer has to use appropriate sync mode (RTS).
 
in param r
   A pointer to the ring structure. 
in param v
   new HTD value to setup. 
return
   Zero on success, or negative error code otherwise.*/
int  deepeedeekay_rte_ring_set_prod_htd_max(struct rte_ring * r, uint32_t v);
/**
 Return consumer max Head-Tail-Distance (HTD).
 
in param r
   A pointer to the ring structure. 
return
   Consumer HTD value, if consumer is set in appropriate sync mode,   or UINT32_MAX otherwise.*/
uint32_t  deepeedeekay_rte_ring_get_cons_htd_max(const struct rte_ring * r);
/**
 Set consumer max Head-Tail-Distance (HTD). Note that consumer has to use appropriate sync mode (RTS).
 
in param r
   A pointer to the ring structure. 
in param v
   new HTD value to setup. 
return
   Zero on success, or negative error code otherwise.*/
int  deepeedeekay_rte_ring_set_cons_htd_max(struct rte_ring * r, uint32_t v);
/**
 Enqueue several objects on a ring.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_bulk_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Enqueue one object on a ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_mp_enqueue_elem(struct rte_ring * r, void * obj, unsigned int esize);
/**
 Enqueue one object on a ring
 
warning
 This API is NOT multi-producers safe
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_sp_enqueue_elem(struct rte_ring * r, void * obj, unsigned int esize);
/**
 Enqueue one object on a ring.
 This function calls the multi-producer or the single-producer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_enqueue_elem(struct rte_ring * r, void * obj, unsigned int esize);
/**
 Dequeue several objects from a ring (multi-consumers safe).
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_dequeue_bulk_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring (NOT multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table,   must be strictly positive. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_sc_dequeue_bulk_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring.
 This function calls the multi-consumers or the single-consumer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_dequeue_bulk_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Dequeue one object from a ring (multi-consumers safe).
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to the object that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success; objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue; no object is     dequeued.*/
int  deepeedeekay_rte_ring_mc_dequeue_elem(struct rte_ring * r, void * obj_p, unsigned int esize);
/**
 Dequeue one object from a ring (NOT multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to the object that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success; objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue, no object is     dequeued.*/
int  deepeedeekay_rte_ring_sc_dequeue_elem(struct rte_ring * r, void * obj_p, unsigned int esize);
/**
 Dequeue one object from a ring.
 This function calls the multi-consumers or the single-consumer version depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to the object that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
return
   - 0: Success, objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue, no object is     dequeued.*/
int  deepeedeekay_rte_ring_dequeue_elem(struct rte_ring * r, void * obj_p, unsigned int esize);
/**
 Enqueue several objects on the ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_enqueue_burst_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring
 
warning
 This API is NOT multi-producers safe
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_sp_enqueue_burst_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_enqueue_burst_elem(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from a ring (multi-consumers safe). When the request objects are more than the available objects, only dequeue the actual number of objects
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_dequeue_burst_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring (NOT multi-consumers safe).When the request objects are more than the available objects, only dequeue the actual number of objects
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_sc_dequeue_burst_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Dequeue multiple objects from a ring up to a maximum number.
 This function calls the multi-consumers or the single-consumer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - Number of objects dequeued*/
unsigned int  deepeedeekay_rte_ring_dequeue_burst_elem(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves for user such ability. User has to call appropriate enqueue_elem_finish() to copy objects into the queue and complete given enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_bulk_elem_start(struct rte_ring * r, unsigned int n, unsigned int * free_space);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves for user such ability. User has to call appropriate enqueue_finish() to copy objects into the queue and complete given enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_bulk_start(struct rte_ring * r, unsigned int n, unsigned int * free_space);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves for user such ability. User has to call appropriate enqueue_elem_finish() to copy objects into the queue and complete given enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   Actual number of objects that can be enqueued.*/
unsigned int  deepeedeekay_rte_ring_enqueue_burst_elem_start(struct rte_ring * r, unsigned int n, unsigned int * free_space);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves for user such ability. User has to call appropriate enqueue_finish() to copy objects into the queue and complete given enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   Actual number of objects that can be enqueued.*/
unsigned int  deepeedeekay_rte_ring_enqueue_burst_start(struct rte_ring * r, unsigned int n, unsigned int * free_space);
/**
 Complete to enqueue several objects on the ring. Note that number of objects to enqueue should not exceed previous enqueue_start return value.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to add to the ring from the obj_table.*/
void  deepeedeekay_rte_ring_enqueue_elem_finish(struct rte_ring * r, const void * obj_table, unsigned int esize, unsigned int n);
/**
 Complete to enqueue several objects on the ring. Note that number of objects to enqueue should not exceed previous enqueue_start return value.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects. 
in param n
   The number of objects to add to the ring from the obj_table.*/
void  deepeedeekay_rte_ring_enqueue_finish(struct rte_ring * r, void *const * obj_table, unsigned int n);
/**
 Start to dequeue several objects from the ring. Note that user has to call appropriate dequeue_finish() to complete given dequeue operation and actually remove objects the ring.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_dequeue_bulk_elem_start(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Start to dequeue several objects from the ring. Note that user has to call appropriate dequeue_finish() to complete given dequeue operation and actually remove objects the ring.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   Actual number of objects dequeued.*/
unsigned int  deepeedeekay_rte_ring_dequeue_bulk_start(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Start to dequeue several objects from the ring. Note that user has to call appropriate dequeue_finish() to complete given dequeue operation and actually remove objects the ring.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of objects that will be filled. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The actual number of objects dequeued.*/
unsigned int  deepeedeekay_rte_ring_dequeue_burst_elem_start(struct rte_ring * r, void * obj_table, unsigned int esize, unsigned int n, unsigned int * available);
/**
 Start to dequeue several objects from the ring. Note that user has to call appropriate dequeue_finish() to complete given dequeue operation and actually remove objects the ring.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The actual number of objects dequeued.*/
unsigned int  deepeedeekay_rte_ring_dequeue_burst_start(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Complete to dequeue several objects from the ring. Note that number of objects to dequeue should not exceed previous dequeue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring.*/
void  deepeedeekay_rte_ring_dequeue_elem_finish(struct rte_ring * r, unsigned int n);
/**
 Complete to dequeue several objects from the ring. Note that number of objects to dequeue should not exceed previous dequeue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring.*/
void  deepeedeekay_rte_ring_dequeue_finish(struct rte_ring * r, unsigned int n);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves space for the user on the ring. User has to copy objects into the queue using the returned pointers. User should call rte_ring_enqueue_zc_elem_finish to complete the enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4. 
in param n
   The number of objects to add in the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param free_space
   If non-NULL, returns the amount of space in the ring after the   reservation operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_zc_bulk_elem_start(struct rte_ring * r, unsigned int esize, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * free_space);
/**
 Start to enqueue several pointers to objects on the ring. Note that no actual pointers are put in the queue by this function, it just reserves space for the user on the ring. User has to copy pointers to objects into the queue using the returned pointers. User should call rte_ring_enqueue_zc_finish to complete the enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param free_space
   If non-NULL, returns the amount of space in the ring after the   reservation operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_zc_bulk_start(struct rte_ring * r, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * free_space);
/**
 Start to enqueue several objects on the ring. Note that no actual objects are put in the queue by this function, it just reserves space for the user on the ring. User has to copy objects into the queue using the returned pointers. User should call rte_ring_enqueue_zc_elem_finish to complete the enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4. 
in param n
   The number of objects to add in the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param free_space
   If non-NULL, returns the amount of space in the ring after the   reservation operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_zc_burst_elem_start(struct rte_ring * r, unsigned int esize, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * free_space);
/**
 Start to enqueue several pointers to objects on the ring. Note that no actual pointers are put in the queue by this function, it just reserves space for the user on the ring. User has to copy pointers to objects into the queue using the returned pointers. User should call rte_ring_enqueue_zc_finish to complete the enqueue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add in the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param free_space
   If non-NULL, returns the amount of space in the ring after the   reservation operation has finished. 
return
   The number of objects that can be enqueued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_enqueue_zc_burst_start(struct rte_ring * r, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * free_space);
/**
 Complete enqueuing several objects on the ring. Note that number of objects to enqueue should not exceed previous enqueue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to add to the ring.*/
void  deepeedeekay_rte_ring_enqueue_zc_elem_finish(struct rte_ring * r, unsigned int n);
/**
 Complete enqueuing several pointers to objects on the ring. Note that number of objects to enqueue should not exceed previous enqueue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of pointers to objects to add to the ring.*/
void  deepeedeekay_rte_ring_enqueue_zc_finish(struct rte_ring * r, unsigned int n);
/**
 Start to dequeue several objects from the ring. Note that no actual objects are copied from the queue by this function. User has to copy objects from the queue using the returned pointers. User should call rte_ring_dequeue_zc_elem_finish to complete the dequeue operation.
 
in param r
   A pointer to the ring structure. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4. 
in param n
   The number of objects to remove from the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects that can be dequeued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_dequeue_zc_bulk_elem_start(struct rte_ring * r, unsigned int esize, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * available);
/**
 Start to dequeue several pointers to objects from the ring. Note that no actual pointers are removed from the queue by this function. User has to copy pointers to objects from the queue using the returned pointers. User should call rte_ring_dequeue_zc_finish to complete the dequeue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects that can be dequeued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_dequeue_zc_bulk_start(struct rte_ring * r, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * available);
/**
 Start to dequeue several objects from the ring. Note that no actual objects are copied from the queue by this function. User has to copy objects from the queue using the returned pointers. User should call rte_ring_dequeue_zc_elem_finish to complete the dequeue operation.
 
in param r
   A pointer to the ring structure. 
in param esize
   The size of ring element, in bytes. It must be a multiple of 4.   This must be the same value used while creating the ring. Otherwise   the results are undefined. 
in param n
   The number of objects to dequeue from the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects that can be dequeued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_dequeue_zc_burst_elem_start(struct rte_ring * r, unsigned int esize, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * available);
/**
 Start to dequeue several pointers to objects from the ring. Note that no actual pointers are removed from the queue by this function. User has to copy pointers to objects from the queue using the returned pointers. User should call rte_ring_dequeue_zc_finish to complete the dequeue operation.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring. 
in param zcd
   Structure containing the pointers and length of the space   reserved on the ring storage. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects that can be dequeued, either 0 or n.*/
unsigned int  deepeedeekay_rte_ring_dequeue_zc_burst_start(struct rte_ring * r, unsigned int n, struct rte_ring_zc_data * zcd, unsigned int * available);
/**
 Complete dequeuing several objects from the ring. Note that number of objects to dequeued should not exceed previous dequeue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring.*/
void  deepeedeekay_rte_ring_dequeue_zc_elem_finish(struct rte_ring * r, unsigned int n);
/**
 Complete dequeuing several objects from the ring. Note that number of objects to dequeued should not exceed previous dequeue_start return value.
 
in param r
   A pointer to the ring structure. 
in param n
   The number of objects to remove from the ring.*/
void  deepeedeekay_rte_ring_dequeue_zc_finish(struct rte_ring * r, unsigned int n);
/**
 Enqueue several objects on the ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mp_enqueue_bulk(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring (NOT multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_sp_enqueue_bulk(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   The number of objects enqueued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_enqueue_bulk(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Enqueue one object on a ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_mp_enqueue(struct rte_ring * r, void * obj);
/**
 Enqueue one object on a ring (NOT multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_sp_enqueue(struct rte_ring * r, void * obj);
/**
 Enqueue one object on a ring.
 This function calls the multi-producer or the single-producer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj
   A pointer to the object to be added. 
return
   - 0: Success; objects enqueued.   - -ENOBUFS: Not enough room in the ring to enqueue; no object is enqueued.*/
int  deepeedeekay_rte_ring_enqueue(struct rte_ring * r, void * obj);
/**
 Dequeue several objects from a ring (multi-consumers safe).
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_mc_dequeue_bulk(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring (NOT multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table,   must be strictly positive. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_sc_dequeue_bulk(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring.
 This function calls the multi-consumers or the single-consumer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   The number of objects dequeued, either 0 or n*/
unsigned int  deepeedeekay_rte_ring_dequeue_bulk(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Dequeue one object from a ring (multi-consumers safe).
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to a void * pointer (object) that will be filled. 
return
   - 0: Success; objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue; no object is     dequeued.*/
int  deepeedeekay_rte_ring_mc_dequeue(struct rte_ring * r, void ** obj_p);
/**
 Dequeue one object from a ring (NOT multi-consumers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to a void * pointer (object) that will be filled. 
return
   - 0: Success; objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue, no object is     dequeued.*/
int  deepeedeekay_rte_ring_sc_dequeue(struct rte_ring * r, void ** obj_p);
/**
 Dequeue one object from a ring.
 This function calls the multi-consumers or the single-consumer version depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_p
   A pointer to a void * pointer (object) that will be filled. 
return
   - 0: Success, objects dequeued.   - -ENOENT: Not enough entries in the ring to dequeue, no object is     dequeued.*/
int  deepeedeekay_rte_ring_dequeue(struct rte_ring * r, void ** obj_p);
/**
 Return the number of entries in a ring.
 
in param r
   A pointer to the ring structure. 
return
   The number of entries in the ring.*/
unsigned int  deepeedeekay_rte_ring_count(const struct rte_ring * r);
/**
 Return the number of free entries in a ring.
 
in param r
   A pointer to the ring structure. 
return
   The number of free entries in the ring.*/
unsigned int  deepeedeekay_rte_ring_free_count(const struct rte_ring * r);
/**
 Test if a ring is full.
 
in param r
   A pointer to the ring structure. 
return
   - 1: The ring is full.   - 0: The ring is not full.*/
int  deepeedeekay_rte_ring_full(const struct rte_ring * r);
/**
 Test if a ring is empty.
 
in param r
   A pointer to the ring structure. 
return
   - 1: The ring is empty.   - 0: The ring is not empty.*/
int  deepeedeekay_rte_ring_empty(const struct rte_ring * r);
/**
 Return the size of the ring.
 
in param r
   A pointer to the ring structure. 
return
   The size of the data store used by the ring.   NOTE: this is not the same as the usable space in the ring. To query that   use ``rte_ring_get_capacity()``.*/
unsigned int  deepeedeekay_rte_ring_get_size(const struct rte_ring * r);
/**
 Return the number of elements which can be stored in the ring.
 
in param r
   A pointer to the ring structure. 
return
   The usable size of the ring.*/
unsigned int  deepeedeekay_rte_ring_get_capacity(const struct rte_ring * r);
/**
 Return sync type used by producer in the ring.
 
in param r
   A pointer to the ring structure. 
return
   Producer sync type value.*/
enum rte_ring_sync_type  deepeedeekay_rte_ring_get_prod_sync_type(const struct rte_ring * r);
/**
 Check is the ring for single producer.
 
in param r
   A pointer to the ring structure. 
return
   true if ring is SP, zero otherwise.*/
int  deepeedeekay_rte_ring_is_prod_single(const struct rte_ring * r);
/**
 Return sync type used by consumer in the ring.
 
in param r
   A pointer to the ring structure. 
return
   Consumer sync type value.*/
enum rte_ring_sync_type  deepeedeekay_rte_ring_get_cons_sync_type(const struct rte_ring * r);
/**
 Check is the ring for single consumer.
 
in param r
   A pointer to the ring structure. 
return
   true if ring is SC, zero otherwise.*/
int  deepeedeekay_rte_ring_is_cons_single(const struct rte_ring * r);
/**
 Enqueue several objects on the ring (multi-producers safe).
 This function uses a "compare and set" instruction to move the producer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_mp_enqueue_burst(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring (NOT multi-producers safe).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_sp_enqueue_burst(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Enqueue several objects on a ring.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the ring from the obj_table. 
in param free_space
   if non-NULL, returns the amount of space in the ring after the   enqueue operation has finished. 
return
   - n: Actual number of objects enqueued.*/
unsigned int  deepeedeekay_rte_ring_enqueue_burst(struct rte_ring * r, void *const * obj_table, unsigned int n, unsigned int * free_space);
/**
 Dequeue several objects from a ring (multi-consumers safe). When the request objects are more than the available objects, only dequeue the actual number of objects
 This function uses a "compare and set" instruction to move the consumer index atomically.
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_mc_dequeue_burst(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Dequeue several objects from a ring (NOT multi-consumers safe).When the request objects are more than the available objects, only dequeue the actual number of objects
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - n: Actual number of objects dequeued, 0 if ring is empty*/
unsigned int  deepeedeekay_rte_ring_sc_dequeue_burst(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 Dequeue multiple objects from a ring up to a maximum number.
 This function calls the multi-consumers or the single-consumer version, depending on the default behaviour that was specified at ring creation time (see flags).
 
in param r
   A pointer to the ring structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to dequeue from the ring to the obj_table. 
in param available
   If non-NULL, returns the number of remaining ring entries after the   dequeue has finished. 
return
   - Number of objects dequeued*/
unsigned int  deepeedeekay_rte_ring_dequeue_burst(struct rte_ring * r, void ** obj_table, unsigned int n, unsigned int * available);
/**
 */
size_t  deepeedeekay_rte_strlcpy(char * dst, const char * src, size_t size);
/**
 */
size_t  deepeedeekay_rte_strlcat(char * dst, const char * src, size_t size);
/**
 
warning
  this API may change without prior notice.
 Search for the first non whitespace character.
 
in param src
   The input string to be analysed.
 
return
  The address of the first non whitespace character.*/
const char * deepeedeekay_rte_str_skip_leading_spaces(const char * src);
/***/
void  deepeedeekay_rte_ethdev_trace_rx_burst(uint16_t port_id, uint16_t queue_id, void ** pkt_tbl, uint16_t nb_rx);
/***/
void  deepeedeekay_rte_ethdev_trace_tx_burst(uint16_t port_id, uint16_t queue_id, void ** pkts_tbl, uint16_t nb_pkts);
/***/
void  deepeedeekay_rte_eth_trace_call_rx_callbacks(uint16_t port_id, uint16_t queue_id, void ** rx_pkts, uint16_t nb_rx, uint16_t nb_pkts);
/***/
void  deepeedeekay_rte_eth_trace_call_tx_callbacks(uint16_t port_id, uint16_t queue_id, void ** tx_pkts, uint16_t nb_pkts);
/***/
void  deepeedeekay_rte_eth_trace_tx_buffer_drop_callback(void ** pkts, uint16_t unsent);
/***/
void  deepeedeekay_rte_eth_trace_tx_buffer_count_callback(void ** pkts, uint16_t unsent, uint64_t count);
/***/
void  deepeedeekay_rte_eth_trace_tx_queue_count(uint16_t port_id, uint16_t queue_id, int rc);
/**
 For input set change of hash filter, if SRC_ONLY and DST_ONLY of the same level are used simultaneously, it is the same case as none of them are added.
 
in param rss_hf
   RSS types with SRC/DST_ONLY. 
return
   RSS types.*/
uint64_t  deepeedeekay_rte_eth_rss_hf_refine(uint64_t rss_hf);
/**
 Copy bytes from one location to another. The locations must not overlap.
 
note
 This is implemented as a macro, so it's address should not be taken and care is needed as parameter expressions may be evaluated multiple times.
 
in param dst
   Pointer to the destination of the data. 
in param src
   Pointer to the source data. 
in param n
   Number of bytes to copy. 
return
   Pointer to the destination data.*/
void * deepeedeekay_rte_memcpy(void * dst, const void * src, size_t n);
/**
 Use the following structs to avoid violating C standard alignment requirements and to avoid strict aliasing bugs
 Copy bytes from one location to another, locations should not overlap. Use with n <= 15.*/
void * deepeedeekay_rte_mov15_or_less(void * dst, const void * src, size_t n);
/**
 Copy 16 bytes from one location to another, locations should not overlap.*/
void  deepeedeekay_rte_mov16(uint8_t * dst, const uint8_t * src);
/**
 Copy 32 bytes from one location to another, locations should not overlap.*/
void  deepeedeekay_rte_mov32(uint8_t * dst, const uint8_t * src);
/**
 Copy 64 bytes from one location to another, locations should not overlap.*/
void  deepeedeekay_rte_mov64(uint8_t * dst, const uint8_t * src);
/**
 Copy 128 bytes from one location to another, locations should not overlap.*/
void  deepeedeekay_rte_mov128(uint8_t * dst, const uint8_t * src);
/**
 Copy 256 bytes from one location to another, locations should not overlap.*/
void  deepeedeekay_rte_mov256(uint8_t * dst, const uint8_t * src);
/***/
void * deepeedeekay_rte_memcpy_generic(void * dst, const void * src, size_t n);
/***/
void * deepeedeekay_rte_memcpy_aligned(void * dst, const void * src, size_t n);
/***/
void  deepeedeekay_rte_mempool_trace_ops_dequeue_bulk(void * mempool, void ** obj_table, uint32_t nb_objs);
/***/
void  deepeedeekay_rte_mempool_trace_ops_dequeue_contig_blocks(void * mempool, void ** first_obj_table, uint32_t nb_objs);
/***/
void  deepeedeekay_rte_mempool_trace_ops_enqueue_bulk(void * mempool, void *const * obj_table, uint32_t nb_objs);
/***/
void  deepeedeekay_rte_mempool_trace_generic_put(void * mempool, void *const * obj_table, uint32_t nb_objs, void * cache);
/***/
void  deepeedeekay_rte_mempool_trace_put_bulk(void * mempool, void *const * obj_table, uint32_t nb_objs, void * cache);
/***/
void  deepeedeekay_rte_mempool_trace_generic_get(void * mempool, void *const * obj_table, uint32_t nb_objs, void * cache);
/***/
void  deepeedeekay_rte_mempool_trace_get_bulk(void * mempool, void ** obj_table, uint32_t nb_objs, void * cache);
/***/
void  deepeedeekay_rte_mempool_trace_get_contig_blocks(void * mempool, void ** first_obj_table, uint32_t nb_objs);
/***/
void  deepeedeekay_rte_mempool_trace_default_cache(void * mempool, uint32_t lcore_id, void * default_cache);
/***/
void  deepeedeekay_rte_mempool_trace_cache_flush(void * cache, void * mempool);
/***/
struct rte_mempool_objhdr * deepeedeekay_rte_mempool_get_header(void * obj);
/**
 Return a pointer to the mempool owning this object.
 
in param obj
   An object that is owned by a pool. If this is not the case,   the behavior is undefined. 
return
   A pointer to the mempool structure.*/
struct rte_mempool * deepeedeekay_rte_mempool_from_obj(void * obj);
/***/
struct rte_mempool_objtlr * deepeedeekay_rte_mempool_get_trailer(void * obj);
/**
 */
struct rte_mempool_ops * deepeedeekay_rte_mempool_get_ops(int ops_index);
/**
 */
int  deepeedeekay_rte_mempool_ops_dequeue_bulk(struct rte_mempool * mp, void ** obj_table, unsigned int n);
/**
 */
int  deepeedeekay_rte_mempool_ops_dequeue_contig_blocks(struct rte_mempool * mp, void ** first_obj_table, unsigned int n);
/**
 */
int  deepeedeekay_rte_mempool_ops_enqueue_bulk(struct rte_mempool * mp, void *const * obj_table, unsigned int n);
/**
 Get a pointer to the per-lcore default mempool cache.
 
in param mp
   A pointer to the mempool structure. 
in param lcore_id
   The logical core id. 
return
   A pointer to the mempool cache or NULL if disabled or unregistered non-EAL   thread.*/
struct rte_mempool_cache * deepeedeekay_rte_mempool_default_cache(struct rte_mempool * mp, unsigned int lcore_id);
/**
 Flush a user-owned mempool cache to the specified mempool.
 
in param cache
   A pointer to the mempool cache. 
in param mp
   A pointer to the mempool.*/
void  deepeedeekay_rte_mempool_cache_flush(struct rte_mempool_cache * cache, struct rte_mempool * mp);
/**
 */
void  deepeedeekay_rte_mempool_do_generic_put(struct rte_mempool * mp, void *const * obj_table, unsigned int n, struct rte_mempool_cache * cache);
/**
 Put several objects back in the mempool.
 
in param mp
   A pointer to the mempool structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the mempool from the obj_table. 
in param cache
   A pointer to a mempool cache structure. May be NULL if not needed.*/
void  deepeedeekay_rte_mempool_generic_put(struct rte_mempool * mp, void *const * obj_table, unsigned int n, struct rte_mempool_cache * cache);
/**
 Put several objects back in the mempool.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at mempool creation time (see flags).
 
in param mp
   A pointer to the mempool structure. 
in param obj_table
   A pointer to a table of void * pointers (objects). 
in param n
   The number of objects to add in the mempool from obj_table.*/
void  deepeedeekay_rte_mempool_put_bulk(struct rte_mempool * mp, void *const * obj_table, unsigned int n);
/**
 Put one object back in the mempool.
 This function calls the multi-producer or the single-producer version depending on the default behavior that was specified at mempool creation time (see flags).
 
in param mp
   A pointer to the mempool structure. 
in param obj
   A pointer to the object to be added.*/
void  deepeedeekay_rte_mempool_put(struct rte_mempool * mp, void * obj);
/**
 */
int  deepeedeekay_rte_mempool_do_generic_get(struct rte_mempool * mp, void ** obj_table, unsigned int n, struct rte_mempool_cache * cache);
/**
 Get several objects from the mempool.
 If cache is enabled, objects will be retrieved first from cache, subsequently from the common pool. Note that it can return -ENOENT when the local cache and common pool are empty, even if cache from other lcores are full.
 
in param mp
   A pointer to the mempool structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to get from mempool to obj_table. 
in param cache
   A pointer to a mempool cache structure. May be NULL if not needed. 
return
   - 0: Success; objects taken.   - -ENOENT: Not enough entries in the mempool; no object is retrieved.*/
int  deepeedeekay_rte_mempool_generic_get(struct rte_mempool * mp, void ** obj_table, unsigned int n, struct rte_mempool_cache * cache);
/**
 Get several objects from the mempool.
 This function calls the multi-consumers or the single-consumer version, depending on the default behaviour that was specified at mempool creation time (see flags).
 If cache is enabled, objects will be retrieved first from cache, subsequently from the common pool. Note that it can return -ENOENT when the local cache and common pool are empty, even if cache from other lcores are full.
 
in param mp
   A pointer to the mempool structure. 
in param obj_table
   A pointer to a table of void * pointers (objects) that will be filled. 
in param n
   The number of objects to get from the mempool to obj_table. 
return
   - 0: Success; objects taken   - -ENOENT: Not enough entries in the mempool; no object is retrieved.*/
int  deepeedeekay_rte_mempool_get_bulk(struct rte_mempool * mp, void ** obj_table, unsigned int n);
/**
 Get one object from the mempool.
 This function calls the multi-consumers or the single-consumer version, depending on the default behavior that was specified at mempool creation (see flags).
 If cache is enabled, objects will be retrieved first from cache, subsequently from the common pool. Note that it can return -ENOENT when the local cache and common pool are empty, even if cache from other lcores are full.
 
in param mp
   A pointer to the mempool structure. 
in param obj_p
   A pointer to a void * pointer (object) that will be filled. 
return
   - 0: Success; objects taken.   - -ENOENT: Not enough entries in the mempool; no object is retrieved.*/
int  deepeedeekay_rte_mempool_get(struct rte_mempool * mp, void ** obj_p);
/**
 Get a contiguous blocks of objects from the mempool.
 If cache is enabled, consider to flush it first, to reuse objects as soon as possible.
 The application should check that the driver supports the operation by calling rte_mempool_ops_get_info() and checking that `contig_block_size` is not zero.
 
in param mp
   A pointer to the mempool structure. 
in param first_obj_table
   A pointer to a pointer to the first object in each block. 
in param n
   The number of blocks to get from mempool. 
return
   - 0: Success; blocks taken.   - -ENOBUFS: Not enough entries in the mempool; no object is retrieved.   - -EOPNOTSUPP: The mempool driver does not support block dequeue*/
int  deepeedeekay_rte_mempool_get_contig_blocks(struct rte_mempool * mp, void ** first_obj_table, unsigned int n);
/**
 Test if the mempool is full.
 When cache is enabled, this function has to browse the length of all lcores, so it should not be used in a data path, but only for debug purposes. User-owned mempool caches are not accounted for.
 
in param mp
   A pointer to the mempool structure. 
return
   - 1: The mempool is full.   - 0: The mempool is not full.*/
int  deepeedeekay_rte_mempool_full(const struct rte_mempool * mp);
/**
 Test if the mempool is empty.
 When cache is enabled, this function has to browse the length of all lcores, so it should not be used in a data path, but only for debug purposes. User-owned mempool caches are not accounted for.
 
in param mp
   A pointer to the mempool structure. 
return
   - 1: The mempool is empty.   - 0: The mempool is not empty.*/
int  deepeedeekay_rte_mempool_empty(const struct rte_mempool * mp);
/**
 Return the IO address of elt, which is an element of the pool mp.
 
in param elt
   A pointer (virtual address) to the element of the pool. 
return
   The IO address of the elt element.   If the mempool was created with RTE_MEMPOOL_F_NO_IOVA_CONTIG, the   returned value is RTE_BAD_IOVA.*/
rte_iova_t  deepeedeekay_rte_mempool_virt2iova(const void * elt);
/**
 Return a pointer to the private data in an mempool structure.
 
in param mp
   A pointer to the mempool structure. 
return
   A pointer to the private data.*/
void * deepeedeekay_rte_mempool_get_priv(struct rte_mempool * mp);
/**
 Prefetch a cache line into all cache levels. 
in param p
   Address to prefetch*/
void  deepeedeekay_rte_prefetch0(const volatile void * p);
/**
 Prefetch a cache line into all cache levels except the 0th cache level. 
in param p
   Address to prefetch*/
void  deepeedeekay_rte_prefetch1(const volatile void * p);
/**
 Prefetch a cache line into all cache levels except the 0th and 1th cache levels. 
in param p
   Address to prefetch*/
void  deepeedeekay_rte_prefetch2(const volatile void * p);
/**
 Prefetch a cache line into all cache levels (non-temporal/transient version)
 The non-temporal prefetch is intended as a prefetch hint that processor will use the prefetched data only once or short period, unlike the rte_prefetch0() function which imply that prefetched data to use repeatedly.
 
in param p
   Address to prefetch*/
void  deepeedeekay_rte_prefetch_non_temporal(const volatile void * p);
/**
 
warning
  this API may change, or be removed, without prior notice
 Prefetch a cache line into all cache levels, with intention to write. This prefetch variant hints to the CPU that the program is expecting to write to the cache line being prefetched.
 
in param p
 Address to prefetch*/
void  deepeedeekay_rte_prefetch0_write(const void * p);
/**
 
warning
  this API may change, or be removed, without prior notice
 Prefetch a cache line into all cache levels, except the 0th, with intention to write. This prefetch variant hints to the CPU that the program is expecting to write to the cache line being prefetched.
 
in param p
 Address to prefetch*/
void  deepeedeekay_rte_prefetch1_write(const void * p);
/**
 
warning
  this API may change, or be removed, without prior notice
 Prefetch a cache line into all cache levels, except the 0th and 1st, with intention to write. This prefetch variant hints to the CPU that the program is expecting to write to the cache line being prefetched.
 
in param p
 Address to prefetch*/
void  deepeedeekay_rte_prefetch2_write(const void * p);
/**
 
warning
  this API may change, or be removed, without prior notice
 Demote a cache line to a more distant level of cache from the processor. CLDEMOTE hints to hardware to move (demote) a cache line from the closest to the processor to a level more distant from the processor. It is a hint and not guaranteed. rte_cldemote is intended to move the cache line to the more remote cache, where it expects sharing to be efficient and to indicate that a line may be accessed by a different core in the future.
 
in param p
   Address to demote*/
void  deepeedeekay_rte_cldemote(const volatile void * p);
/***/
uint16_t  deepeedeekay_rte_constant_bswap16(uint16_t x);
/***/
uint32_t  deepeedeekay_rte_constant_bswap32(uint32_t x);
/***/
uint64_t  deepeedeekay_rte_constant_bswap64(uint64_t x);
/***/
uint16_t  deepeedeekay_rte_arch_bswap16(uint16_t _x);
/***/
uint32_t  deepeedeekay_rte_arch_bswap32(uint32_t _x);
/***/
uint64_t  deepeedeekay_rte_arch_bswap64(uint64_t _x);
/**
 Prefetch the first part of the mbuf
 The first 64 bytes of the mbuf corresponds to fields that are used early in the receive path. If the cache line of the architecture is higher than 64B, the second part will also be prefetched.
 
in param m
   The pointer to the mbuf.*/
void  deepeedeekay_rte_mbuf_prefetch_part1(struct rte_mbuf * m);
/**
 Prefetch the second part of the mbuf
 The next 64 bytes of the mbuf corresponds to fields that are used in the transmit path. If the cache line of the architecture is higher than 64B, this function does nothing as it is expected that the full mbuf is already in cache.
 
in param m
   The pointer to the mbuf.*/
void  deepeedeekay_rte_mbuf_prefetch_part2(struct rte_mbuf * m);
/***/
uint16_t  deepeedeekay_rte_pktmbuf_priv_size(struct rte_mempool * mp);
/**
 Get the IOVA address of the mbuf data buffer.
 
in param m
   The pointer to the mbuf. 
return
   The IOVA address of the mbuf.*/
rte_iova_t  deepeedeekay_rte_mbuf_iova_get(const struct rte_mbuf * m);
/**
 Set the IOVA address of the mbuf data buffer.
 
in param m
   The pointer to the mbuf. 
in param iova
   Value to set as IOVA address of the mbuf.*/
void  deepeedeekay_rte_mbuf_iova_set(struct rte_mbuf * m, rte_iova_t iova);
/**
 Return the IO address of the beginning of the mbuf data
 
in param mb
   The pointer to the mbuf. 
return
   The IO address of the beginning of the mbuf data*/
rte_iova_t  deepeedeekay_rte_mbuf_data_iova(const struct rte_mbuf * mb);
/**
 Return the default IO address of the beginning of the mbuf data
 This function is used by drivers in their receive function, as it returns the location where data should be written by the NIC, taking the default headroom in account.
 
in param mb
   The pointer to the mbuf. 
return
   The IO address of the beginning of the mbuf data*/
rte_iova_t  deepeedeekay_rte_mbuf_data_iova_default(const struct rte_mbuf * mb);
/**
 Return the mbuf owning the data buffer address of an indirect mbuf.
 
in param mi
   The pointer to the indirect mbuf. 
return
   The address of the direct mbuf corresponding to buffer_addr.*/
struct rte_mbuf * deepeedeekay_rte_mbuf_from_indirect(struct rte_mbuf * mi);
/**
 Return address of buffer embedded in the given mbuf.
 The return value shall be same as mb->buf_addr if the mbuf is already initialized and direct. However, this API is useful if mempool of the mbuf is already known because it doesn't need to access mbuf contents in order to get the mempool pointer.
 
in param mb
   The pointer to the mbuf. 
in param mp
   The pointer to the mempool of the mbuf. 
return
   The pointer of the mbuf buffer.*/
char * deepeedeekay_rte_mbuf_buf_addr(struct rte_mbuf * mb, struct rte_mempool * mp);
/**
 Return the default address of the beginning of the mbuf data.
 
in param mb
   The pointer to the mbuf. 
return
   The pointer of the beginning of the mbuf data.*/
char * deepeedeekay_rte_mbuf_data_addr_default(struct rte_mbuf * mb);
/**
 Return address of buffer embedded in the given mbuf.
 
note
: Accessing mempool pointer of a mbuf is expensive because the pointer is stored in the 2nd cache line of mbuf. If mempool is known, it is better not to reference the mempool pointer in mbuf but calling rte_mbuf_buf_addr() would be more efficient.
 
in param md
   The pointer to the mbuf. 
return
   The address of the data buffer owned by the mbuf.*/
char * deepeedeekay_rte_mbuf_to_baddr(struct rte_mbuf * md);
/**
 Return the starting address of the private data area embedded in the given mbuf.
 Note that no check is made to ensure that a private data area actually exists in the supplied mbuf.
 
in param m
   The pointer to the mbuf. 
return
   The starting address of the private data area of the given mbuf.*/
void * deepeedeekay_rte_mbuf_to_priv(struct rte_mbuf * m);
/**
 Return the flags from private data in an mempool structure.
 
in param mp
   A pointer to the mempool structure. 
return
   The flags from the private data structure.*/
uint32_t  deepeedeekay_rte_pktmbuf_priv_flags(struct rte_mempool * mp);
/**
 Reads the value of an mbuf's refcnt. 
in param m
   Mbuf to read 
return
   Reference count number.*/
uint16_t  deepeedeekay_rte_mbuf_refcnt_read(const struct rte_mbuf * m);
/**
 Sets an mbuf's refcnt to a defined value. 
in param m
   Mbuf to update 
in param new_value
   Value set*/
void  deepeedeekay_rte_mbuf_refcnt_set(struct rte_mbuf * m, uint16_t new_value);
/**
 Adds given value to an mbuf's refcnt and returns its new value. 
in param m
   Mbuf to update 
in param value
   Value to add/subtract 
return
   Updated value*/
uint16_t  deepeedeekay_rte_mbuf_refcnt_update(struct rte_mbuf * m, int16_t value);
/**
 Reads the refcnt of an external buffer.
 
in param shinfo
   Shared data of the external buffer. 
return
   Reference count number.*/
uint16_t  deepeedeekay_rte_mbuf_ext_refcnt_read(const struct rte_mbuf_ext_shared_info * shinfo);
/**
 Set refcnt of an external buffer.
 
in param shinfo
   Shared data of the external buffer. 
in param new_value
   Value set*/
void  deepeedeekay_rte_mbuf_ext_refcnt_set(struct rte_mbuf_ext_shared_info * shinfo, uint16_t new_value);
/**
 Add given value to refcnt of an external buffer and return its new value.
 
in param shinfo
   Shared data of the external buffer. 
in param value
   Value to add/subtract 
return
   Updated value*/
uint16_t  deepeedeekay_rte_mbuf_ext_refcnt_update(struct rte_mbuf_ext_shared_info * shinfo, int16_t value);
/**
 Allocate an uninitialized mbuf from mempool *mp*.
 This function can be used by PMDs (especially in RX functions) to allocate an uninitialized mbuf. The driver is responsible of initializing all the required fields. See rte_pktmbuf_reset(). For standard needs, prefer rte_pktmbuf_alloc().
 The caller can expect that the following fields of the mbuf structure are initialized: buf_addr, buf_iova, buf_len, refcnt=1, nb_segs=1, next=NULL, pool, priv_size. The other fields must be initialized by the caller.
 
in param mp
   The mempool from which mbuf is allocated. 
return
   - The pointer to the new mbuf on success.   - NULL if allocation failed.*/
struct rte_mbuf * deepeedeekay_rte_mbuf_raw_alloc(struct rte_mempool * mp);
/**
 Put mbuf back into its original mempool.
 The caller must ensure that the mbuf is direct and properly reinitialized (refcnt=1, next=NULL, nb_segs=1), as done by rte_pktmbuf_prefree_seg().
 This function should be used with care, when optimization is required. For standard needs, prefer rte_pktmbuf_free() or rte_pktmbuf_free_seg().
 
in param m
   The mbuf to be freed.*/
void  deepeedeekay_rte_mbuf_raw_free(struct rte_mbuf * m);
/**
 Get the data room size of mbufs stored in a pktmbuf_pool
 The data room size is the amount of data that can be stored in a mbuf including the headroom (RTE_PKTMBUF_HEADROOM).
 
in param mp
   The packet mbuf pool. 
return
   The data room size of mbufs stored in this mempool.*/
uint16_t  deepeedeekay_rte_pktmbuf_data_room_size(struct rte_mempool * mp);
/**
 Reset the data_off field of a packet mbuf to its default value.
 The given mbuf must have only one segment, which should be empty.
 
in param m
   The packet mbuf's data_off field has to be reset.*/
void  deepeedeekay_rte_pktmbuf_reset_headroom(struct rte_mbuf * m);
/**
 Reset the fields of a packet mbuf to their default values.
 The given mbuf must have only one segment.
 
in param m
   The packet mbuf to be reset.*/
void  deepeedeekay_rte_pktmbuf_reset(struct rte_mbuf * m);
/**
 Allocate a new mbuf from a mempool.
 This new mbuf contains one segment, which has a length of 0. The pointer to data is initialized to have some bytes of headroom in the buffer (if buffer size allows).
 
in param mp
   The mempool from which the mbuf is allocated. 
return
   - The pointer to the new mbuf on success.   - NULL if allocation failed.*/
struct rte_mbuf * deepeedeekay_rte_pktmbuf_alloc(struct rte_mempool * mp);
/**
 Allocate a bulk of mbufs, initialize refcnt and reset the fields to default values.
  
in param pool
    The mempool from which mbufs are allocated.  
in param mbufs
    Array of pointers to mbufs  
in param count
    Array size  
return
   - 0: Success   - -ENOENT: Not enough entries in the mempool; no mbufs are retrieved.*/
int  deepeedeekay_rte_pktmbuf_alloc_bulk(struct rte_mempool * pool, struct rte_mbuf ** mbufs, unsigned int count);
/**
 Initialize shared data at the end of an external buffer before attaching to a mbuf by ``rte_pktmbuf_attach_extbuf()``. This is not a mandatory initialization but a helper function to simply spare a few bytes at the end of the buffer for shared data. If shared data is allocated separately, this should not be called but application has to properly initialize the shared data according to its need.
 Free callback and its argument is saved and the refcnt is set to 1.
 
warning
 The value of buf_len will be reduced to RTE_PTR_DIFF(shinfo, buf_addr) after this initialization. This shall be used for ``rte_pktmbuf_attach_extbuf()``
 
in param buf_addr
   The pointer to the external buffer. 
inout param buf_len
   The pointer to length of the external buffer. Input value must be   larger than the size of ``struct rte_mbuf_ext_shared_info`` and   padding for alignment. If not enough, this function will return NULL.   Adjusted buffer length will be returned through this pointer. 
in param free_cb
   Free callback function to call when the external buffer needs to be   freed. 
in param fcb_opaque
   Argument for the free callback function.
 
return
   A pointer to the initialized shared data on success, return NULL   otherwise.*/
struct rte_mbuf_ext_shared_info * deepeedeekay_rte_pktmbuf_ext_shinfo_init_helper(void * buf_addr, uint16_t * buf_len, rte_mbuf_extbuf_free_callback_t free_cb, void * fcb_opaque);
/**
 Attach an external buffer to a mbuf.
 User-managed anonymous buffer can be attached to an mbuf. When attaching it, corresponding free callback function and its argument should be provided via shinfo. This callback function will be called once all the mbufs are detached from the buffer (refcnt becomes zero).
 The headroom length of the attaching mbuf will be set to zero and this can be properly adjusted after attachment. For example, ``rte_pktmbuf_adj()`` or ``rte_pktmbuf_reset_headroom()`` might be used.
 Similarly, the packet length is initialized to 0. If the buffer contains data, the user has to adjust ``data_len`` and the ``pkt_len`` field of the mbuf accordingly.
 More mbufs can be attached to the same external buffer by ``rte_pktmbuf_attach()`` once the external buffer has been attached by this API.
 Detachment can be done by either ``rte_pktmbuf_detach_extbuf()`` or ``rte_pktmbuf_detach()``.
 Memory for shared data must be provided and user must initialize all of the content properly, especially free callback and refcnt. The pointer of shared data will be stored in m->shinfo. ``rte_pktmbuf_ext_shinfo_init_helper`` can help to simply spare a few bytes at the end of buffer for the shared data, store free callback and its argument and set the refcnt to 1. The following is an example:
   struct rte_mbuf_ext_shared_info *shinfo =          rte_pktmbuf_ext_shinfo_init_helper(buf_addr, &buf_len,                                             free_cb, fcb_arg);   rte_pktmbuf_attach_extbuf(m, buf_addr, buf_iova, buf_len, shinfo);   rte_pktmbuf_reset_headroom(m);   rte_pktmbuf_adj(m, data_len);
 Attaching an external buffer is quite similar to mbuf indirection in replacing buffer addresses and length of a mbuf, but a few differences: - When an indirect mbuf is attached, refcnt of the direct mbuf would be   2 as long as the direct mbuf itself isn't freed after the attachment.   In such cases, the buffer area of a direct mbuf must be read-only. But   external buffer has its own refcnt and it starts from 1. Unless   multiple mbufs are attached to a mbuf having an external buffer, the   external buffer is writable. - There's no need to allocate buffer from a mempool. Any buffer can be   attached with appropriate free callback and its IO address. - Smaller metadata is required to maintain shared data such as refcnt.
 
in param m
   The pointer to the mbuf. 
in param buf_addr
   The pointer to the external buffer. 
in param buf_iova
   IO address of the external buffer. 
in param buf_len
   The size of the external buffer. 
in param shinfo
   User-provided memory for shared data of the external buffer.*/
void  deepeedeekay_rte_pktmbuf_attach_extbuf(struct rte_mbuf * m, void * buf_addr, rte_iova_t buf_iova, uint16_t buf_len, struct rte_mbuf_ext_shared_info * shinfo);
/**
 Copy dynamic fields from msrc to mdst.
 
in param mdst
   The destination mbuf. 
in param msrc
   The source mbuf.*/
void  deepeedeekay_rte_mbuf_dynfield_copy(struct rte_mbuf * mdst, const struct rte_mbuf * msrc);
/**
 Attach packet mbuf to another packet mbuf.
 If the mbuf we are attaching to isn't a direct buffer and is attached to an external buffer, the mbuf being attached will be attached to the external buffer instead of mbuf indirection.
 Otherwise, the mbuf will be indirectly attached. After attachment we refer the mbuf we attached as 'indirect', while mbuf we attached to as 'direct'.  The direct mbuf's reference counter is incremented.
 Right now, not supported:  - attachment for already indirect mbuf (e.g. - mi has to be direct).  - mbuf we trying to attach (mi) is used by someone else    e.g. it's reference counter is greater then 1.
 
in param mi
   The indirect packet mbuf. 
in param m
   The packet mbuf we're attaching to.*/
void  deepeedeekay_rte_pktmbuf_attach(struct rte_mbuf * mi, struct rte_mbuf * m);
/**
 Detach a packet mbuf from external buffer or direct buffer.
  - decrement refcnt and free the external/direct buffer if refcnt    becomes zero.  - restore original mbuf address and length values.  - reset pktmbuf data and data_len to their default values.
 All other fields of the given packet mbuf will be left intact.
 If the packet mbuf was allocated from the pool with pinned external buffers the rte_pktmbuf_detach does nothing with the mbuf of this kind, because the pinned buffers are not supposed to be detached.
 
in param m
   The indirect attached packet mbuf.*/
void  deepeedeekay_rte_pktmbuf_detach(struct rte_mbuf * m);
/**
 Decrease reference counter and unlink a mbuf segment
 This function does the same than a free, except that it does not return the segment to its pool. It decreases the reference counter, and if it reaches 0, it is detached from its parent for an indirect mbuf.
 
in param m
   The mbuf to be unlinked 
return
   - (m) if it is the last reference. It can be recycled or freed.   - (NULL) if the mbuf still has remaining references on it.*/
struct rte_mbuf * deepeedeekay_rte_pktmbuf_prefree_seg(struct rte_mbuf * m);
/**
 Free a segment of a packet mbuf into its original mempool.
 Free an mbuf, without parsing other segments in case of chained buffers.
 
in param m
   The packet mbuf segment to be freed.*/
void  deepeedeekay_rte_pktmbuf_free_seg(struct rte_mbuf * m);
/**
 Free a packet mbuf back into its original mempool.
 Free an mbuf, and all its segments in case of chained buffers. Each segment is added back into its original mempool.
 
in param m
   The packet mbuf to be freed. If NULL, the function does nothing.*/
void  deepeedeekay_rte_pktmbuf_free(struct rte_mbuf * m);
/**
 Adds given value to the refcnt of all packet mbuf segments.
 Walks through all segments of given packet mbuf and for each of them invokes rte_mbuf_refcnt_update().
 
in param m
   The packet mbuf whose refcnt to be updated. 
in param v
   The value to add to the mbuf's segments refcnt.*/
void  deepeedeekay_rte_pktmbuf_refcnt_update(struct rte_mbuf * m, int16_t v);
/**
 Get the headroom in a packet mbuf.
 
in param m
   The packet mbuf. 
return
   The length of the headroom.*/
uint16_t  deepeedeekay_rte_pktmbuf_headroom(const struct rte_mbuf * m);
/**
 Get the tailroom of a packet mbuf.
 
in param m
   The packet mbuf. 
return
   The length of the tailroom.*/
uint16_t  deepeedeekay_rte_pktmbuf_tailroom(const struct rte_mbuf * m);
/**
 Get the last segment of the packet.
 
in param m
   The packet mbuf. 
return
   The last segment of the given mbuf.*/
struct rte_mbuf * deepeedeekay_rte_pktmbuf_lastseg(struct rte_mbuf * m);
/**
 Prepend len bytes to an mbuf data area.
 Returns a pointer to the new data start address. If there is not enough headroom in the first segment, the function will return NULL, without modifying the mbuf.
 
in param m
   The pkt mbuf. 
in param len
   The amount of data to prepend (in bytes). 
return
   A pointer to the start of the newly prepended data, or   NULL if there is not enough headroom space in the first segment*/
char * deepeedeekay_rte_pktmbuf_prepend(struct rte_mbuf * m, uint16_t len);
/**
 Append len bytes to an mbuf.
 Append len bytes to an mbuf and return a pointer to the start address of the added data. If there is not enough tailroom in the last segment, the function will return NULL, without modifying the mbuf.
 
in param m
   The packet mbuf. 
in param len
   The amount of data to append (in bytes). 
return
   A pointer to the start of the newly appended data, or   NULL if there is not enough tailroom space in the last segment*/
char * deepeedeekay_rte_pktmbuf_append(struct rte_mbuf * m, uint16_t len);
/**
 Remove len bytes at the beginning of an mbuf.
 Returns a pointer to the start address of the new data area. If the length is greater than the length of the first segment, then the function will fail and return NULL, without modifying the mbuf.
 
in param m
   The packet mbuf. 
in param len
   The amount of data to remove (in bytes). 
return
   A pointer to the new start of the data.*/
char * deepeedeekay_rte_pktmbuf_adj(struct rte_mbuf * m, uint16_t len);
/**
 Remove len bytes of data at the end of the mbuf.
 If the length is greater than the length of the last segment, the function will fail and return -1 without modifying the mbuf.
 
in param m
   The packet mbuf. 
in param len
   The amount of data to remove (in bytes). 
return
   - 0: On success.   - -1: On error.*/
int  deepeedeekay_rte_pktmbuf_trim(struct rte_mbuf * m, uint16_t len);
/**
 Test if mbuf data is contiguous.
 
in param m
   The packet mbuf. 
return
   - 1, if all data is contiguous (one segment).   - 0, if there is several segments.*/
int  deepeedeekay_rte_pktmbuf_is_contiguous(const struct rte_mbuf * m);
/**
 Read len data bytes in a mbuf at specified offset.
 If the data is contiguous, return the pointer in the mbuf data, else copy the data in the buffer provided by the user and return its pointer.
 
in param m
   The pointer to the mbuf. 
in param off
   The offset of the data in the mbuf. 
in param len
   The amount of bytes to read. 
in param buf
   The buffer where data is copied if it is not contiguous in mbuf   data. Its length should be at least equal to the len parameter. 
return
   The pointer to the data, either in the mbuf if it is contiguous,   or in the user buffer. If mbuf is too small, NULL is returned.*/
const void * deepeedeekay_rte_pktmbuf_read(const struct rte_mbuf * m, uint32_t off, uint32_t len, void * buf);
/**
 Chain an mbuf to another, thereby creating a segmented packet.
 Note: The implementation will do a linear walk over the segments to find the tail entry. For cases when there are many segments, it's better to chain the entries manually.
 
in param head
   The head of the mbuf chain (the first packet) 
in param tail
   The mbuf to put last in the chain
 
return
   - 0, on success.   - -EOVERFLOW, if the chain segment limit exceeded*/
int  deepeedeekay_rte_pktmbuf_chain(struct rte_mbuf * head, struct rte_mbuf * tail);
/**
 For given input values generate raw tx_offload value. Note that it is caller responsibility to make sure that input parameters don't exceed maximum bit-field values. 
in param il2
   l2_len value. 
in param il3
   l3_len value. 
in param il4
   l4_len value. 
in param tso
   tso_segsz value. 
in param ol3
   outer_l3_len value. 
in param ol2
   outer_l2_len value. 
in param unused
   unused value. 
return
   raw tx_offload value.*/
uint64_t  deepeedeekay_rte_mbuf_tx_offload(uint64_t il2, uint64_t il3, uint64_t il4, uint64_t tso, uint64_t ol3, uint64_t ol2, uint64_t unused);
/**
 Validate general requirements for Tx offload in mbuf.
 This function checks correctness and completeness of Tx offload settings.
 
in param m
   The packet mbuf to be validated. 
return
   0 if packet is valid*/
int  deepeedeekay_rte_validate_tx_offload(const struct rte_mbuf * m);
/**
 Linearize data in mbuf.
 This function moves the mbuf data in the first segment if there is enough tailroom. The subsequent segments are unchained and freed.
 
in param mbuf
   mbuf to linearize 
return
   - 0, on success   - -1, on error*/
int  deepeedeekay_rte_pktmbuf_linearize(struct rte_mbuf * mbuf);
/**
 Get the value of mbuf sched queue_id field.*/
uint32_t  deepeedeekay_rte_mbuf_sched_queue_get(const struct rte_mbuf * m);
/**
 Get the value of mbuf sched traffic_class field.*/
uint8_t  deepeedeekay_rte_mbuf_sched_traffic_class_get(const struct rte_mbuf * m);
/**
 Get the value of mbuf sched color field.*/
uint8_t  deepeedeekay_rte_mbuf_sched_color_get(const struct rte_mbuf * m);
/**
 Get the values of mbuf sched queue_id, traffic_class and color.
 
in param m
   Mbuf to read 
in param queue_id
  Returns the queue id 
in param traffic_class
  Returns the traffic class id 
in param color
  Returns the colour id*/
void  deepeedeekay_rte_mbuf_sched_get(const struct rte_mbuf * m, uint32_t * queue_id, uint8_t * traffic_class, uint8_t * color);
/**
 Set the mbuf sched queue_id to the defined value.*/
void  deepeedeekay_rte_mbuf_sched_queue_set(struct rte_mbuf * m, uint32_t queue_id);
/**
 Set the mbuf sched traffic_class id to the defined value.*/
void  deepeedeekay_rte_mbuf_sched_traffic_class_set(struct rte_mbuf * m, uint8_t traffic_class);
/**
 Set the mbuf sched color id to the defined value.*/
void  deepeedeekay_rte_mbuf_sched_color_set(struct rte_mbuf * m, uint8_t color);
/**
 Set the mbuf sched queue_id, traffic_class and color.
 
in param m
   Mbuf to set 
in param queue_id
  Queue id value to be set 
in param traffic_class
  Traffic class id value to be set 
in param color
  Color id to be set*/
void  deepeedeekay_rte_mbuf_sched_set(struct rte_mbuf * m, uint32_t queue_id, uint8_t traffic_class, uint8_t color);
/**
 Check if two Ethernet addresses are the same.
 
in param ea1
  A pointer to the first ether_addr structure containing  the ethernet address. 
in param ea2
  A pointer to the second ether_addr structure containing  the ethernet address.
 
return
  True  (1) if the given two ethernet address are the same;  False (0) otherwise.*/
int  deepeedeekay_rte_is_same_ether_addr(const struct rte_ether_addr * ea1, const struct rte_ether_addr * ea2);
/**
 Check if an Ethernet address is filled with zeros.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is filled with zeros;   false (0) otherwise.*/
int  deepeedeekay_rte_is_zero_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a unicast address.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is a unicast address;   false (0) otherwise.*/
int  deepeedeekay_rte_is_unicast_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a multicast address.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is a multicast address;   false (0) otherwise.*/
int  deepeedeekay_rte_is_multicast_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a broadcast address.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is a broadcast address;   false (0) otherwise.*/
int  deepeedeekay_rte_is_broadcast_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a universally assigned address.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is a universally assigned address;   false (0) otherwise.*/
int  deepeedeekay_rte_is_universal_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a locally assigned address.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is a locally assigned address;   false (0) otherwise.*/
int  deepeedeekay_rte_is_local_admin_ether_addr(const struct rte_ether_addr * ea);
/**
 Check if an Ethernet address is a valid address. Checks that the address is a unicast address and is not filled with zeros.
 
in param ea
   A pointer to a ether_addr structure containing the ethernet address   to check. 
return
   True  (1) if the given ethernet address is valid;   false (0) otherwise.*/
int  deepeedeekay_rte_is_valid_assigned_ether_addr(const struct rte_ether_addr * ea);
/**
 Copy an Ethernet address.
 
in param ea_from
   A pointer to a ether_addr structure holding the Ethernet address to copy. 
in param ea_to
   A pointer to a ether_addr structure where to copy the Ethernet address.*/
void  deepeedeekay_rte_ether_addr_copy(const struct rte_ether_addr *restrict ea_from, struct rte_ether_addr *restrict ea_to);
/**
 Extract VLAN tag information into mbuf
 Software version of VLAN stripping
 
in param m
   The packet mbuf. 
return
   - 0: Success   - 1: not a vlan packet*/
int  deepeedeekay_rte_vlan_strip(struct rte_mbuf * m);
/**
 Insert VLAN tag into mbuf.
 Software version of VLAN unstripping
 
in param m
   The packet mbuf. 
return
   - 0: On success   -EPERM: mbuf is shared overwriting would be unsafe   -ENOSPC: not enough headroom in mbuf*/
int  deepeedeekay_rte_vlan_insert(struct rte_mbuf ** m);
/**
 Get the length of an IPv4 header.
 
in param ipv4_hdr
   Pointer to the IPv4 header. 
return
   The length of the IPv4 header (with options if present) in bytes.*/
uint8_t  deepeedeekay_rte_ipv4_hdr_len(const struct rte_ipv4_hdr * ipv4_hdr);
/**
 Process the non-complemented checksum of a buffer.
 
in param buf
   Pointer to the buffer. 
in param len
   Length of the buffer. 
return
   The non-complemented checksum.*/
uint16_t  deepeedeekay_rte_raw_cksum(const void * buf, size_t len);
/**
 Compute the raw (non complemented) checksum of a packet.
 
in param m
   The pointer to the mbuf. 
in param off
   The offset in bytes to start the checksum. 
in param len
   The length in bytes of the data to checksum. 
in param cksum
   A pointer to the checksum, filled on success. 
return
   0 on success, -1 on error (bad length or offset).*/
int  deepeedeekay_rte_raw_cksum_mbuf(const struct rte_mbuf * m, uint32_t off, uint32_t len, uint16_t * cksum);
/**
 Process the IPv4 checksum of an IPv4 header.
 The checksum field must be set to 0 by the caller.
 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
return
   The complemented checksum to set in the IP packet.*/
uint16_t  deepeedeekay_rte_ipv4_cksum(const struct rte_ipv4_hdr * ipv4_hdr);
/**
 Process the pseudo-header checksum of an IPv4 header.
 The checksum field must be set to 0 by the caller.
 Depending on the ol_flags, the pseudo-header checksum expected by the drivers is not the same. For instance, when TSO is enabled, the IP payload length must not be included in the packet.
 When ol_flags is 0, it computes the standard pseudo-header checksum.
 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
in param ol_flags
   The ol_flags of the associated mbuf. 
return
   The non-complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv4_phdr_cksum(const struct rte_ipv4_hdr * ipv4_hdr, uint64_t ol_flags);
/**
 Process the IPv4 UDP or TCP checksum.
 The layer 4 checksum must be set to 0 in the L4 header by the caller.
 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
in param l4_hdr
   The pointer to the beginning of the L4 header. 
return
   The complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv4_udptcp_cksum(const struct rte_ipv4_hdr * ipv4_hdr, const void * l4_hdr);
/**
 Compute the IPv4 UDP/TCP checksum of a packet.
 
in param m
   The pointer to the mbuf. 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
in param l4_off
   The offset in bytes to start L4 checksum. 
return
   The complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv4_udptcp_cksum_mbuf(const struct rte_mbuf * m, const struct rte_ipv4_hdr * ipv4_hdr, uint16_t l4_off);
/**
 Validate the IPv4 UDP or TCP checksum.
 In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0 (i.e. no checksum).
 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
in param l4_hdr
   The pointer to the beginning of the L4 header. 
return
   Return 0 if the checksum is correct, else -1.*/
int  deepeedeekay_rte_ipv4_udptcp_cksum_verify(const struct rte_ipv4_hdr * ipv4_hdr, const void * l4_hdr);
/**
 Verify the IPv4 UDP/TCP checksum of a packet.
 In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0 (i.e. no checksum).
 
in param m
   The pointer to the mbuf. 
in param ipv4_hdr
   The pointer to the contiguous IPv4 header. 
in param l4_off
   The offset in bytes to start L4 checksum. 
return
   Return 0 if the checksum is correct, else -1.*/
int  deepeedeekay_rte_ipv4_udptcp_cksum_mbuf_verify(const struct rte_mbuf * m, const struct rte_ipv4_hdr * ipv4_hdr, uint16_t l4_off);
/**
 Process the pseudo-header checksum of an IPv6 header.
 Depending on the ol_flags, the pseudo-header checksum expected by the drivers is not the same. For instance, when TSO is enabled, the IPv6 payload length must not be included in the packet.
 When ol_flags is 0, it computes the standard pseudo-header checksum.
 
in param ipv6_hdr
   The pointer to the contiguous IPv6 header. 
in param ol_flags
   The ol_flags of the associated mbuf. 
return
   The non-complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv6_phdr_cksum(const struct rte_ipv6_hdr * ipv6_hdr, uint64_t ol_flags);
/**
 Process the IPv6 UDP or TCP checksum.
 The IPv6 header must not be followed by extension headers. The layer 4 checksum must be set to 0 in the L4 header by the caller.
 
in param ipv6_hdr
   The pointer to the contiguous IPv6 header. 
in param l4_hdr
   The pointer to the beginning of the L4 header. 
return
   The complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv6_udptcp_cksum(const struct rte_ipv6_hdr * ipv6_hdr, const void * l4_hdr);
/**
 Process the IPv6 UDP or TCP checksum of a packet.
 The IPv6 header must not be followed by extension headers. The layer 4 checksum must be set to 0 in the L4 header by the caller.
 
in param m
   The pointer to the mbuf. 
in param ipv6_hdr
   The pointer to the contiguous IPv6 header. 
in param l4_off
   The offset in bytes to start L4 checksum. 
return
   The complemented checksum to set in the L4 header.*/
uint16_t  deepeedeekay_rte_ipv6_udptcp_cksum_mbuf(const struct rte_mbuf * m, const struct rte_ipv6_hdr * ipv6_hdr, uint16_t l4_off);
/**
 Validate the IPv6 UDP or TCP checksum.
 In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0: this is either invalid or means no checksum in some situations. See 8.1 (Upper-Layer Checksums) in RFC 8200.
 
in param ipv6_hdr
   The pointer to the contiguous IPv6 header. 
in param l4_hdr
   The pointer to the beginning of the L4 header. 
return
   Return 0 if the checksum is correct, else -1.*/
int  deepeedeekay_rte_ipv6_udptcp_cksum_verify(const struct rte_ipv6_hdr * ipv6_hdr, const void * l4_hdr);
/**
 Validate the IPv6 UDP or TCP checksum of a packet.
 In case of UDP, the caller must first check if udp_hdr->dgram_cksum is 0: this is either invalid or means no checksum in some situations. See 8.1 (Upper-Layer Checksums) in RFC 8200.
 
in param m
   The pointer to the mbuf. 
in param ipv6_hdr
   The pointer to the contiguous IPv6 header. 
in param l4_off
   The offset in bytes to start L4 checksum. 
return
   Return 0 if the checksum is correct, else -1.*/
int  deepeedeekay_rte_ipv6_udptcp_cksum_mbuf_verify(const struct rte_mbuf * m, const struct rte_ipv6_hdr * ipv6_hdr, uint16_t l4_off);
/**
 Parse next IPv6 header extension
 This function checks if proto number is an IPv6 extensions and parses its data if so, providing information on next header and extension length.
 
in param p
   Pointer to an extension raw data. 
in param proto
   Protocol number extracted from the "next header" field from   the IPv6 header or the previous extension. 
in param ext_len
   Extension data length. 
return
   next protocol number if proto is an IPv6 extension, -EINVAL otherwise*/
int  deepeedeekay_rte_ipv6_get_next_ext(const uint8_t * p, int proto, size_t * ext_len);
/**
 srTCM color blind traffic metering
 
in param m
    Handle to srTCM instance 
in param p
    srTCM profile specified at srTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_srtcm_color_blind_check(struct rte_meter_srtcm * m, struct rte_meter_srtcm_profile * p, uint64_t time, uint32_t pkt_len);
/**
 srTCM color aware traffic metering
 
in param m
    Handle to srTCM instance 
in param p
    srTCM profile specified at srTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
in param pkt_color
    Input color of the current IP packet 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_srtcm_color_aware_check(struct rte_meter_srtcm * m, struct rte_meter_srtcm_profile * p, uint64_t time, uint32_t pkt_len, enum rte_color pkt_color);
/**
 trTCM color blind traffic metering
 
in param m
    Handle to trTCM instance 
in param p
    trTCM profile specified at trTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm * m, struct rte_meter_trtcm_profile * p, uint64_t time, uint32_t pkt_len);
/**
 trTCM color aware traffic metering
 
in param m
    Handle to trTCM instance 
in param p
    trTCM profile specified at trTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
in param pkt_color
    Input color of the current IP packet 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_trtcm_color_aware_check(struct rte_meter_trtcm * m, struct rte_meter_trtcm_profile * p, uint64_t time, uint32_t pkt_len, enum rte_color pkt_color);
/**
 trTCM RFC4115 color blind traffic metering
 
in param m
    Handle to trTCM instance 
in param p
    trTCM profile specified at trTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_trtcm_rfc4115_color_blind_check(struct rte_meter_trtcm_rfc4115 * m, struct rte_meter_trtcm_rfc4115_profile * p, uint64_t time, uint32_t pkt_len);
/**
 trTCM RFC4115 color aware traffic metering
 
in param m
    Handle to trTCM instance 
in param p
    trTCM profile specified at trTCM object creation time 
in param time
    Current CPU time stamp (measured in CPU cycles) 
in param pkt_len
    Length of the current IP packet (measured in bytes) 
in param pkt_color
    Input color of the current IP packet 
return
    Color assigned to the current IP packet*/
enum rte_color  deepeedeekay_rte_meter_trtcm_rfc4115_color_aware_check(struct rte_meter_trtcm_rfc4115 * m, struct rte_meter_trtcm_rfc4115_profile * p, uint64_t time, uint32_t pkt_len, enum rte_color pkt_color);
/***/
uint32_t  deepeedeekay_rte_flow_dynf_metadata_get(struct rte_mbuf * m);
/***/
void  deepeedeekay_rte_flow_dynf_metadata_set(struct rte_mbuf * m, uint32_t v);
/**
 Check if mbuf dynamic field for metadata is registered.
 
return
   True if registered, false otherwise.*/
int  deepeedeekay_rte_flow_dynf_metadata_avail();
/**
 Retrieve a burst of input packets from a receive queue of an Ethernet device. The retrieved packets are stored in *rte_mbuf* structures whose pointers are supplied in the *rx_pkts* array.
 The rte_eth_rx_burst() function loops, parsing the Rx ring of the receive queue, up to *nb_pkts* packets, and for each completed Rx descriptor in the ring, it performs the following operations:
 - Initialize the *rte_mbuf* data structure associated with the   Rx descriptor according to the information provided by the NIC into   that Rx descriptor.
 - Store the *rte_mbuf* data structure into the next entry of the   *rx_pkts* array.
 - Replenish the Rx descriptor with a new *rte_mbuf* buffer   allocated from the memory pool associated with the receive queue at   initialization time.
 When retrieving an input packet that was scattered by the controller into multiple receive descriptors, the rte_eth_rx_burst() function appends the associated *rte_mbuf* buffers to the first buffer of the packet.
 The rte_eth_rx_burst() function returns the number of packets actually retrieved, which is the number of *rte_mbuf* data structures effectively supplied into the *rx_pkts* array. A return value equal to *nb_pkts* indicates that the Rx queue contained at least *rx_pkts* packets, and this is likely to signify that other received packets remain in the input queue. Applications implementing a "retrieve as much received packets as possible" policy can check this specific case and keep invoking the rte_eth_rx_burst() function until a value less than *nb_pkts* is returned.
 This receive method has the following advantages:
 - It allows a run-to-completion network stack engine to retrieve and   to immediately process received packets in a fast burst-oriented   approach, avoiding the overhead of unnecessary intermediate packet   queue/dequeue operations.
 - Conversely, it also allows an asynchronous-oriented processing   method to retrieve bursts of received packets and to immediately   queue them for further parallel processing by another logical core,   for instance. However, instead of having received packets being   individually queued by the driver, this approach allows the caller   of the rte_eth_rx_burst() function to queue a burst of retrieved   packets at a time and therefore dramatically reduce the cost of   enqueue/dequeue operations per packet.
 - It allows the rte_eth_rx_burst() function of the driver to take   advantage of burst-oriented hardware features (CPU cache,   prefetch instructions, and so on) to minimize the number of CPU   cycles per packet.
 To summarize, the proposed receive API enables many burst-oriented optimizations in both synchronous and asynchronous packet processing environments with no overhead in both cases.
 
note
   Some drivers using vector instructions require that *nb_pkts* is   divisible by 4 or 8, depending on the driver implementation.
 The rte_eth_rx_burst() function does not provide any error notification to avoid the corresponding overhead. As a hint, the upper-level application might check the status of the device link once being systematically returned a 0 value for a given number of tries.
 
in param port_id
   The port identifier of the Ethernet device. 
in param queue_id
   The index of the receive queue from which to retrieve input packets.   The value must be in the range [0, nb_rx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param rx_pkts
   The address of an array of pointers to *rte_mbuf* structures that   must be large enough to store *nb_pkts* pointers in it. 
in param nb_pkts
   The maximum number of packets to retrieve.   The value must be divisible by 8 in order to work with any driver. 
return
   The number of packets actually retrieved, which is the number   of pointers to *rte_mbuf* structures effectively supplied to the   *rx_pkts* array.*/
uint16_t  deepeedeekay_rte_eth_rx_burst(uint16_t port_id, uint16_t queue_id, struct rte_mbuf ** rx_pkts, const uint16_t nb_pkts);
/**
 Get the number of used descriptors of a Rx queue
 Since it's a dataplane function, no check is performed on port_id and queue_id. The caller must therefore ensure that the port is enabled and the queue is configured and running.
 
in param port_id
  The port identifier of the Ethernet device. 
in param queue_id
  The queue ID on the specific port. 
return
  The number of used descriptors in the specific queue, or:   - (-ENODEV) if *port_id* is invalid.   - (-EINVAL) if *queue_id* is invalid   - (-ENOTSUP) if the device does not support this function*/
int  deepeedeekay_rte_eth_rx_queue_count(uint16_t port_id, uint16_t queue_id);
/**
 Check the status of a Rx descriptor in the queue
 It should be called in a similar context than the Rx function: - on a dataplane core - not concurrently on the same queue
 Since it's a dataplane function, no check is performed on port_id and queue_id. The caller must therefore ensure that the port is enabled and the queue is configured and running.
 Note: accessing to a random descriptor in the ring may trigger cache misses and have a performance impact.
 
in param port_id
  A valid port identifier of the Ethernet device which. 
in param queue_id
  A valid Rx queue identifier on this port. 
in param offset
  The offset of the descriptor starting from tail (0 is the next  packet to be received by the driver).
 
return
  - (RTE_ETH_RX_DESC_AVAIL): Descriptor is available for the hardware to    receive a packet.  - (RTE_ETH_RX_DESC_DONE): Descriptor is done, it is filled by hw, but    not yet processed by the driver (i.e. in the receive queue).  - (RTE_ETH_RX_DESC_UNAVAIL): Descriptor is unavailable, either hold by    the driver and not yet returned to hw, or reserved by the hw.  - (-EINVAL) bad descriptor offset.  - (-ENOTSUP) if the device does not support this function.  - (-ENODEV) bad port or queue (only if compiled with debug).*/
int  deepeedeekay_rte_eth_rx_descriptor_status(uint16_t port_id, uint16_t queue_id, uint16_t offset);
/**
 Check the status of a Tx descriptor in the queue.
 It should be called in a similar context than the Tx function: - on a dataplane core - not concurrently on the same queue
 Since it's a dataplane function, no check is performed on port_id and queue_id. The caller must therefore ensure that the port is enabled and the queue is configured and running.
 Note: accessing to a random descriptor in the ring may trigger cache misses and have a performance impact.
 
in param port_id
  A valid port identifier of the Ethernet device which. 
in param queue_id
  A valid Tx queue identifier on this port. 
in param offset
  The offset of the descriptor starting from tail (0 is the place where  the next packet will be send).
 
return
  - (RTE_ETH_TX_DESC_FULL) Descriptor is being processed by the hw, i.e.    in the transmit queue.  - (RTE_ETH_TX_DESC_DONE) Hardware is done with this descriptor, it can    be reused by the driver.  - (RTE_ETH_TX_DESC_UNAVAIL): Descriptor is unavailable, reserved by the    driver or the hardware.  - (-EINVAL) bad descriptor offset.  - (-ENOTSUP) if the device does not support this function.  - (-ENODEV) bad port or queue (only if compiled with debug).*/
int  deepeedeekay_rte_eth_tx_descriptor_status(uint16_t port_id, uint16_t queue_id, uint16_t offset);
/**
 Send a burst of output packets on a transmit queue of an Ethernet device.
 The rte_eth_tx_burst() function is invoked to transmit output packets on the output queue *queue_id* of the Ethernet device designated by its *port_id*. The *nb_pkts* parameter is the number of packets to send which are supplied in the *tx_pkts* array of *rte_mbuf* structures, each of them allocated from a pool created with rte_pktmbuf_pool_create(). The rte_eth_tx_burst() function loops, sending *nb_pkts* packets, up to the number of transmit descriptors available in the Tx ring of the transmit queue. For each packet to send, the rte_eth_tx_burst() function performs the following operations:
 - Pick up the next available descriptor in the transmit ring.
 - Free the network buffer previously sent with that descriptor, if any.
 - Initialize the transmit descriptor with the information provided   in the *rte_mbuf data structure.
 In the case of a segmented packet composed of a list of *rte_mbuf* buffers, the rte_eth_tx_burst() function uses several transmit descriptors of the ring.
 The rte_eth_tx_burst() function returns the number of packets it actually sent. A return value equal to *nb_pkts* means that all packets have been sent, and this is likely to signify that other output packets could be immediately transmitted again. Applications that implement a "send as many packets to transmit as possible" policy can check this specific case and keep invoking the rte_eth_tx_burst() function until a value less than *nb_pkts* is returned.
 It is the responsibility of the rte_eth_tx_burst() function to transparently free the memory buffers of packets previously sent. This feature is driven by the *tx_free_thresh* value supplied to the rte_eth_dev_configure() function at device configuration time. When the number of free Tx descriptors drops below this threshold, the rte_eth_tx_burst() function must [attempt to] free the *rte_mbuf*  buffers of those packets whose transmission was effectively completed.
 If the PMD is RTE_ETH_TX_OFFLOAD_MT_LOCKFREE capable, multiple threads can invoke this function concurrently on the same Tx queue without SW lock. 
see
 rte_eth_dev_info_get, struct rte_eth_txconf::offloads
 
see
 rte_eth_tx_prepare to perform some prior checks or adjustments for offloads.
 
note
 This function must not modify mbufs (including packets data) unless the refcnt is 1. An exception is the bonding PMD, which does not have "Tx prepare" support, in this case, mbufs may be modified.
 
in param port_id
   The port identifier of the Ethernet device. 
in param queue_id
   The index of the transmit queue through which output packets must be   sent.   The value must be in the range [0, nb_tx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param tx_pkts
   The address of an array of *nb_pkts* pointers to *rte_mbuf* structures   which contain the output packets. 
in param nb_pkts
   The maximum number of packets to transmit. 
return
   The number of output packets actually stored in transmit descriptors of   the transmit ring. The return value can be less than the value of the   *tx_pkts* parameter when the transmit ring is full or has been filled up.*/
uint16_t  deepeedeekay_rte_eth_tx_burst(uint16_t port_id, uint16_t queue_id, struct rte_mbuf ** tx_pkts, uint16_t nb_pkts);
/***/
uint16_t  deepeedeekay_rte_eth_tx_prepare(uint16_t port_id, uint16_t queue_id, struct rte_mbuf ** tx_pkts, uint16_t nb_pkts);
/**
 Send any packets queued up for transmission on a port and HW queue
 This causes an explicit flush of packets previously buffered via the rte_eth_tx_buffer() function. It returns the number of packets successfully sent to the NIC, and calls the error callback for any unsent packets. Unless explicitly set up otherwise, the default callback simply frees the unsent packets back to the owning mempool.
 
in param port_id
   The port identifier of the Ethernet device. 
in param queue_id
   The index of the transmit queue through which output packets must be   sent.   The value must be in the range [0, nb_tx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param buffer
   Buffer of packets to be transmit. 
return
   The number of packets successfully sent to the Ethernet device. The error   callback is called for any packets which could not be sent.*/
uint16_t  deepeedeekay_rte_eth_tx_buffer_flush(uint16_t port_id, uint16_t queue_id, struct rte_eth_dev_tx_buffer * buffer);
/**
 Buffer a single packet for future transmission on a port and queue
 This function takes a single mbuf/packet and buffers it for later transmission on the particular port and queue specified. Once the buffer is full of packets, an attempt will be made to transmit all the buffered packets. In case of error, where not all packets can be transmitted, a callback is called with the unsent packets as a parameter. If no callback is explicitly set up, the unsent packets are just freed back to the owning mempool. The function returns the number of packets actually sent i.e. 0 if no buffer flush occurred, otherwise the number of packets successfully flushed
 
in param port_id
   The port identifier of the Ethernet device. 
in param queue_id
   The index of the transmit queue through which output packets must be   sent.   The value must be in the range [0, nb_tx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param buffer
   Buffer used to collect packets to be sent. 
in param tx_pkt
   Pointer to the packet mbuf to be sent. 
return
   0 = packet has been buffered for later transmission   N > 0 = packet has been buffered, and the buffer was subsequently flushed,     causing N packets to be sent, and the error callback to be called for     the rest.*/
uint16_t  deepeedeekay_rte_eth_tx_buffer(uint16_t port_id, uint16_t queue_id, struct rte_eth_dev_tx_buffer * buffer, struct rte_mbuf * tx_pkt);
/**
 
warning
  this API may change, or be removed, without prior notice
 Recycle used mbufs from a transmit queue of an Ethernet device, and move these mbufs into a mbuf ring for a receive queue of an Ethernet device. This can bypass mempool path to save CPU cycles.
 The rte_eth_recycle_mbufs() function loops, with rte_eth_rx_burst() and rte_eth_tx_burst() functions, freeing Tx used mbufs and replenishing Rx descriptors. The number of recycling mbufs depends on the request of Rx mbuf ring, with the constraint of enough used mbufs from Tx mbuf ring.
 For each recycling mbufs, the rte_eth_recycle_mbufs() function performs the following operations:
 - Copy used *rte_mbuf* buffer pointers from Tx mbuf ring into Rx mbuf ring.
 - Replenish the Rx descriptors with the recycling *rte_mbuf* mbufs freed   from the Tx mbuf ring.
 This function spilts Rx and Tx path with different callback functions. The callback function recycle_tx_mbufs_reuse is for Tx driver. The callback function recycle_rx_descriptors_refill is for Rx driver. rte_eth_recycle_mbufs() can support the case that Rx Ethernet device is different from Tx Ethernet device.
 It is the responsibility of users to select the Rx/Tx queue pair to recycle mbufs. Before call this function, users must call rte_eth_recycle_rxq_info_get function to retrieve selected Rx queue information. 
see
 rte_eth_recycle_rxq_info_get, struct rte_eth_recycle_rxq_info
 Currently, the rte_eth_recycle_mbufs() function can support to feed 1 Rx queue from 2 Tx queues in the same thread. Do not pair the Rx queue and Tx queue in different threads, in order to avoid memory error rewriting.
 
in param rx_port_id
   Port identifying the receive side. 
in param rx_queue_id
   The index of the receive queue identifying the receive side.   The value must be in the range [0, nb_rx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param tx_port_id
   Port identifying the transmit side. 
in param tx_queue_id
   The index of the transmit queue identifying the transmit side.   The value must be in the range [0, nb_tx_queue - 1] previously supplied   to rte_eth_dev_configure(). 
in param recycle_rxq_info
   A pointer to a structure of type *rte_eth_recycle_rxq_info* which contains   the information of the Rx queue mbuf ring. 
return
   The number of recycling mbufs.*/
uint16_t  deepeedeekay_rte_eth_recycle_mbufs(uint16_t rx_port_id, uint16_t rx_queue_id, uint16_t tx_port_id, uint16_t tx_queue_id, struct rte_eth_recycle_rxq_info * recycle_rxq_info);
/**
 
warning
  this API may change, or be removed, without prior notice.
 Get the number of used descriptors of a Tx queue.
 This function retrieves the number of used descriptors of a transmit queue. Applications can use this API in the fast path to inspect Tx queue occupancy and take appropriate actions based on the available free descriptors. An example action could be implementing Random Early Discard (RED).
 Since it's a fast-path function, no check is performed on port_id and queue_id. The caller must therefore ensure that the port is enabled and the queue is configured and running.
 
in param port_id
   The port identifier of the device. 
in param queue_id
   The index of the transmit queue.   The value must be in the range [0, nb_tx_queue - 1]   previously supplied to rte_eth_dev_configure(). 
return
   The number of used descriptors in the specific queue, or:   - (-ENODEV) if *port_id* is invalid. Enabled only when RTE_ETHDEV_DEBUG_TX is enabled.   - (-EINVAL) if *queue_id* is invalid. Enabled only when RTE_ETHDEV_DEBUG_TX is enabled.   - (-ENOTSUP) if the device does not support this function.
 
note
 This function is designed for fast-path use. 
note
 There is no requirement to call this function before rte_eth_tx_burst() invocation. 
note
 Utilize this function exclusively when the caller needs to determine the used queue count across all descriptors of a Tx queue. If the use case only involves checking the status of a specific descriptor slot, opt for rte_eth_tx_descriptor_status() instead.*/
int  deepeedeekay_rte_eth_tx_queue_count(uint16_t port_id, uint16_t queue_id);