aboutsummaryrefslogtreecommitdiffstats
path: root/src/vpp-api-test.am
blob: 9465dc68f33b83bb50313229abed9f26d8b10e10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Copyright (c) 2015 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

libvatplugin_la_LIBADD = libvppinfra.la
libvatplugin_la_DEPENDENCIES = libvppinfra.la
libvatplugin_la_SOURCES = \
  vat/plugin_api.c

lib_LTLIBRARIES += libvatplugin.la

bin_PROGRAMS += vpp_api_test vpp_json_test vpp_restart

vpp_api_test_SOURCES = \
  vat/api_format.c 	\
  vat/main.c		\
  vat/plugin.c		\
  vat/vat.h		\
  vat/json_format.h	\
  vat/json_format.c

vpp_json_test_SOURCES = \
  vat/json_format.h	\
  vat/json_format.c	\
  vat/json_test.c

vpp_api_test_LDADD = \
  libvlibmemoryclient.la		\
  libsvm.la				\
  libvatplugin.la			\
  libvppinfra.la 			\
  -lpthread -lm -lrt -ldl -lcrypto

vpp_api_test_LDFLAGS = -Wl,--export-dynamic

vpp_json_test_LDADD = libvppinfra.la -lm
vpp_json_test_LDFLAGS = -Wl,--export-dynamic

nobase_include_HEADERS += \
  vat/vat.h 		\
  vat/json_format.h

vpp_restart_SOURCES =  \
  vat/restart.c
vpp_restart_LDADD = \
  libsvmdb.la				\
  libsvm.la				\
  libvppinfra.la			\
  -lpthread -lrt

dist_bin_SCRIPTS += scripts/vppctl

# vi:syntax=automake
href='#n441'>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 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267
/* Hey Emacs use -*- mode: C -*- */
/*
 * Copyright (c) 2015 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/** \file

    This file defines vpe control-plane API messages which are generally
    called through a shared memory interface. 
*/


/** \brief Register for interface events
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param enable_disable - 1 => register for events, 0 => cancel registration
    @param pid - sender's pid
*/
define want_interface_events {
    u32 client_index;
    u32 context;
    u32 enable_disable;
    u32 pid;
};

/** \brief Reply for interface events registration
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define want_interface_events_reply {
    u32 context;
    i32 retval;
};

/** \brief Interface details structure (fix this) 
    @param sw_if_index - index of the interface
    @param sup_sw_if_index - index of parent interface if any, else same as sw_if_index  
    @param l2_address_length - length of the interface's l2 address
    @param pid - the interface's l2 address
    @param interface_name - name of the interface
    @param link_duplex - 1 if half duplex, 2 if full duplex
    @param link_speed - 1 = 10M, 2 = 100M, 4 = 1G, 8 = 10G, 16 = 40G, 32 = 100G
    @param link_MTU - max. transmittion unit 
    @param sub_if_id - A number 0-N to uniquely identify this subif on super if
    @param sub_dot1ad -  0 = dot1q, 1=dot1ad
    @param sub_number_of_tags - Number of tags (0 - 2)
    @param sub_outer_vlan_id
    @param sub_inner_vlan_id
    @param sub_exact_match
    @param sub_default
    @param sub_outer_vlan_id_any
    @param sub_inner_vlan_id_any
    @param vtr_op - vlan tag rewrite operation
    @param vtr_push_dot1q
    @param vtr_tag1
    @param vtr_tag2
*/
define sw_interface_details {
    u32 context;
    u32 sw_if_index;

    /* index of sup interface (e.g. hw interface).
       equal to sw_if_index for super hw interface. */
    u32 sup_sw_if_index;

    /* Layer 2 address, if applicable */
    u32 l2_address_length;
    u8 l2_address[8];
    
    /* Interface name */
    u8 interface_name[64];

    /* 1 = up, 0 = down */
    u8 admin_up_down;
    u8 link_up_down;

    /* 1 = half duplex, 2 = full duplex */
    u8 link_duplex;

    /* 1 = 10M, 2 = 100M, 4 = 1G, 8 = 10G, 16 = 40G, 32 = 100G */
    u8 link_speed;
    
    /* MTU */
    u16 link_mtu;

    /* Subinterface ID. A number 0-N to uniquely identify this subinterface under the super interface*/
    u32 sub_id;

    /* 0 = dot1q, 1=dot1ad */
    u8 sub_dot1ad;

    /* Number of tags 0-2 */
    u8 sub_number_of_tags;
    u16 sub_outer_vlan_id;
    u16 sub_inner_vlan_id;
    u8 sub_exact_match;
    u8 sub_default;
    u8 sub_outer_vlan_id_any;
    u8 sub_inner_vlan_id_any;

    /* vlan tag rewrite state */
    u32 vtr_op;
    u32 vtr_push_dot1q; // ethertype of first pushed tag is dot1q/dot1ad
    u32 vtr_tag1;       // first pushed tag
    u32 vtr_tag2;       // second pushed tag
};

/** \brief Set flags on the interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface to set flags on
    @param admin_up_down - set the admin state, 1 = up, 0 = down
    @param link_up_down - Oper state sent on change event, not used in config.
    @param deleted - interface was deleted
*/
define sw_interface_set_flags {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    /* 1 = up, 0 = down */
    u8 admin_up_down;
    u8 link_up_down;
    u8 deleted;
};

/** \brief Reply to sw_interface_set_flags 
    @param context - sender context which was passed in the request
    @param retval - return code of the set flags request
*/
define sw_interface_set_flags_reply {
    u32 context;
    i32 retval;
};

/* works */
define sw_interface_dump {
    u32 client_index;
    u32 context;
    u8 name_filter_valid;
    u8 name_filter[49];
};

/** \brief Set or delete one or all ip addresses on a specified interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface to add/del addresses 
    @param is_add - add address if non-zero, else delete
    @param is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param del_all - if non-zero delete all addresses on the interface
    @param address_length - address length in bytes, 4 for ip4, 16 for ip6
    @param address - array of address bytes
*/
define sw_interface_add_del_address {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 is_add;
    u8 is_ipv6;
    u8 del_all;
    u8 address_length;
    u8 address[16];
};

/** \brief Reply for interface events registration
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define sw_interface_add_del_address_reply {
    u32 context;
    i32 retval;
};

/** \brief Associate the specified interface with a fib table
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface
    @param is_ipv6 - if non-zero ipv6, else ipv4
    @param vrf_id - fib table/vrd id to associate the interface with
*/
define sw_interface_set_table {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 is_ipv6;
    u32 vrf_id;
};

/** \brief Reply for interface events registration
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define sw_interface_set_table_reply {
    u32 context;
    i32 retval;
};

/** \brief Initialize a new tap interface with the given paramters 
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param use_random_mac - let the system generate a unique mac address
    @param tap_name - name to associate with the new interface
    @param mac_address - mac addr to assign to the interface if use_radom not set
*/
define tap_connect {
    u32 client_index;
    u32 context;
    u8 use_random_mac;
    u8 tap_name [64];
    u8 mac_address[6];
    u8 renumber;
    u32 custom_dev_instance;
};

/** \brief Reply for tap connect request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
    @param sw_if_index - software index allocated for the new tap interface
*/
define tap_connect_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief Modify a tap interface with the given paramters 
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface index of existing tap interface
    @param use_random_mac - let the system generate a unique mac address
    @param tap_name - name to associate with the new interface
    @param mac_address - mac addr to assign to the interface if use_radom not set
*/
define tap_modify {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 use_random_mac;
    u8 tap_name [64];
    u8 mac_address[6];
    u8 renumber;
    u32 custom_dev_instance;
};

/** \brief Reply for tap modify request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
    @param sw_if_index - software index if the modified tap interface
*/
define tap_modify_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief Delete tap interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface index of existing tap interface
*/
define tap_delete {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

/** \brief Reply for tap delete request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define tap_delete_reply {
    u32 context;
    i32 retval;
};

/** \brief Dump tap interfaces request */
define sw_interface_tap_dump {
    u32 client_index;
    u32 context;
};

/** \brief Reply for tap dump request
    @param sw_if_index - software index of tap interface
    @param dev_name - Linux tap device name
*/
define sw_interface_tap_details {
    u32 context;
    u32 sw_if_index;
    u8 dev_name[64];
};

/** \brief Create a new subinterface with the given vlan id
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - software index of the new vlan's parent interface
    @param vlan_id - vlan tag of the new interface
*/
define create_vlan_subif {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 vlan_id;
};

/** \brief Reply for the vlan subinterface create request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
    @param sw_if_index - software index allocated for the new subinterface
*/
define create_vlan_subif_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief Add / del route request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - software index of the new vlan's parent interface
    @param vrf_id - fib table /vrf associated with the route
    @param lookup_in_vrf - 
    @param resolve_attempts - 
    @param classify_table_index - 
    @param create_vrf_if_needed - 
    @param resolve_if_needed - 
    @param is_add - 1 if adding the route, 0 if deleting
    @param is_drop - 
    @param is_ipv6 - 0 if an ip4 route, else ip6
    @param is_local - 
    @param is_classify - 
    @param is_multipath - Set to 1 if this is a multipath route, else 0
    @param not_last - Is last or not last msg in group of multiple add/del msgs
    @param next_hop_weight - 
    @param dst_address_length - 
    @param dst_address[16] - 
    @param next_hop_address[16] - 
*/
define ip_add_del_route {
    u32 client_index;
    u32 context;
    u32 next_hop_sw_if_index;
    u32 vrf_id;
    u32 lookup_in_vrf;
    u32 resolve_attempts;
    u32 classify_table_index;
    u8 create_vrf_if_needed;
    u8 resolve_if_needed;
    u8 is_add;
    u8 is_drop;
    u8 is_ipv6;
    u8 is_local;
    u8 is_classify;
    /* Is last/not-last message in group of multiple add/del messages. */
    u8 is_multipath;
    u8 not_last;
    u8 next_hop_weight;
    u8 dst_address_length;
    u8 dst_address[16];
    u8 next_hop_address[16];
};

/** \brief Reply for add / del route request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ip_add_del_route_reply {
    u32 context;
    i32 retval;
};

/* works */
/** \brief Add / del gre tunnel request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - software index of the new vlan's parent interface
    @param inner_vrf_id -
    @param outer_vrf_id - 
    @param is_add - 1 if adding the tunnel, 0 if deleting
    @param src_address[4] - tunnel source address
    @param dst_address[4] - tunnel destination address
    @param intf_address - 
    @param intf_address_length - 
*/
define mpls_gre_add_del_tunnel {
    u32 client_index;
    u32 context;
    u32 inner_vrf_id;
    u32 outer_vrf_id;
    u8 is_add;
    u8 l2_only;
    u8 src_address[4];
    u8 dst_address[4];
    u8 intfc_address[4];
    u8 intfc_address_length;
};

/** \brief Reply for add / del tunnel request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define mpls_gre_add_del_tunnel_reply {
    u32 context;
    i32 retval;
    u32 tunnel_sw_if_index;
};

/** \brief Add / del MPLS encapsulation request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf id
    @param dst_address[4] - 
    @param is_add - 1 if adding the encap, 0 if deleting
    @param nlabels - number of labels 
    @param labels - array of labels
*/
define mpls_add_del_encap {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 dst_address[4];
    /* 1 = add, 0 = delete */
    u8 is_add;
    u8 nlabels;
    u32 labels[0];
}; 

/** \brief Reply for add / del encapsulation request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define mpls_add_del_encap_reply {
    u32 context;
    i32 retval;
};

/** \brief Add / del MPLS decapsulation request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param rx_vrf_id - receive vrf
    @param tx_vrf_id - transmit vrf
    @param label - 
    @param next_index - 
    @param s_bit - 
    @param is_add - 1 if adding the encap, 0 if deleting
*/
define mpls_add_del_decap {
    u32 client_index;
    u32 context;
    u32 rx_vrf_id;
    u32 tx_vrf_id;
    u32 label;
    u32 next_index;
    u8 s_bit;
    u8 is_add;
}; 

/** \brief Reply for MPLS decap add / del request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define mpls_add_del_decap_reply {
    u32 context;
    i32 retval;
};

/** \brief Proxy ARP add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - VRF / Fib table ID
    @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
    @param low_address[4] - Low address of the Proxy ARP range
    @param hi_address[4] - High address of the Proxy ARP range
*/
define proxy_arp_add_del {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 is_add;
    u8 low_address[4];
    u8 hi_address[4];
};

/** \brief Reply for proxy arp add / del request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define proxy_arp_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Proxy ARP add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - Which interface to enable / disable Proxy Arp on
    @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
*/
define proxy_arp_intfc_enable_disable {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    /* 1 = on, 0 = off */
    u8 enable_disable;
};

/** \brief Reply for Proxy ARP interface enable / disable request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define proxy_arp_intfc_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief IP neighbor add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf_id, only for IP4
    @param sw_if_index - interface used to reach neighbor
    @param is_add - 1 to add neighbor, 0 to delete
    @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
    @param is_static - 
    @param mac_address - l2 address of the neighbor
    @param dst_address - ip4 or ip6 address of the neighbor
*/
define ip_neighbor_add_del {
    u32 client_index;
    u32 context;
    u32 vrf_id;                 /* only makes sense for ip4 */
    u32 sw_if_index;
    /* 1 = add, 0 = delete */
    u8 is_add;
    u8 is_ipv6;
    u8 is_static;
    u8 mac_address[6];
    u8 dst_address[16];
};

/** \brief Reply for IP Neighbor add / delete request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ip_neighbor_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Reset VRF (remove all routes etc) request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
    @param vrf_id - ID of th FIB table / VRF to reset
*/
define reset_vrf {
    u32 client_index;
    u32 context;
    u8 is_ipv6;
    u32 vrf_id;
}; 

/** \brief Reply for Reset VRF request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define reset_vrf_reply {
    u32 context;
    i32 retval;
};

/** \brief Is Address Reachable request - DISABLED
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param next_hop_sw_if_index - index of interface used to get to next hop
    @param is_ipv6 - 1 for IPv6, 0 for IPv4
    @param is_error - address not found or does not match intf
    @param address[] - Address in question 
*/
define is_address_reachable {
    u32 client_index;           /* (api_main_t *) am->my_client_index */
    u32 context;
    u32 next_hop_sw_if_index;
    u8 is_known;                /* on reply, this is the answer */
    u8 is_ipv6;
    u8 is_error;                /* address not found or does not match intf */
    u8 address[16];
};

/** \brief Want Stats, register for stats updates
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param enable_disable - 1 = enable stats, 0 = disable
    @param pid - pid of process requesting stats updates
*/
define want_stats {
    u32 client_index;
    u32 context;
    u32 enable_disable;
    u32 pid;
};

/** \brief Reply for Want Stats request
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define want_stats_reply {
    u32 context;
    i32 retval;
};

/** \brief Want stats counters structure 
    @param vnet_counter_type- such as ip4, ip6, punts, etc
    @param is_combined - rx & tx total (all types) counts   
    @param first_sw_if_index - first sw index in block of index, counts
    @param count - number of interfaces this stats block includes counters for
    @param data - contiguous block of vlib_counter_t structures 
*/
define vnet_interface_counters {
    /* enums - plural - in vnet/interface.h */
    u8 vnet_counter_type;
    u8 is_combined;
    u32 first_sw_if_index;
    u32 count;
    u8 data[0];
};

typeonly manual_print manual_endian define ip4_fib_counter {
    u32 address;
    u8 address_length;
    u64 packets;
    u64 bytes;
};

manual_print manual_endian define vnet_ip4_fib_counters {
    u32 vrf_id;
    u32 count;
    vl_api_ip4_fib_counter_t c[count];
};

typeonly manual_print manual_endian define ip6_fib_counter {
    u64 address[2];
    u8 address_length;
    u64 packets;
    u64 bytes;
};

manual_print manual_endian define vnet_ip6_fib_counters {
    u32 vrf_id;
    u32 count;
    vl_api_ip6_fib_counter_t c[count];
};

/** \brief Request for a single block of summary stats
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define vnet_get_summary_stats {
    u32 client_index;
    u32 context;
};

/** \brief Reply for vnet_get_summary_stats request
    @param context - sender context, to match reply w/ request
    @param retval - return code for request
    @param total_pkts -  
    @param total_bytes -
    @param vector_rate - 
*/
define vnet_summary_stats_reply {
    u32 context;
    i32 retval;
    u64 total_pkts[2];
    u64 total_bytes[2];
    f64 vector_rate; 
};

/** \brief OAM event structure
    @param dst_address[] - 
    @param state
*/
define oam_event {
    u8 dst_address[4];
    u8 state;
};

/** \brief Want OAM events request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param enable_disable- enable if non-zero, else disable
    @param pid - pid of the requesting process
*/
define want_oam_events {
    u32 client_index;
    u32 context;
    u32 enable_disable;
    u32 pid;
};

/** \brief Want OAM events response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the want oam stats request
*/
define want_oam_events_reply {
    u32 context;
    i32 retval;
};

/** \brief OAM add / del target request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf_id of the target
    @param src_address[] - source address to use for the updates 
    @param dst_address[] - destination address of the target
    @param is_add - add target if non-zero, else delete
*/
define oam_add_del {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 src_address[4];
    u8 dst_address[4];
    u8 is_add;
};

/** \brief OAM add / del target response
    @param context - sender context, to match reply w/ request
    @param retval - return code of the request
*/
define oam_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Reset fib table request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf/table id of the fib table to reset
    @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
*/
define reset_fib {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 is_ipv6;
};

/** \brief Reset fib response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the reset bfib request
*/
define reset_fib_reply {
    u32 context;
    i32 retval;
};

/** \brief DHCP Proxy config add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf id
    @param if_ipv6 - ipv6 if non-zero, else ipv4
    @param is_add - add the config if non-zero, else delete
    @param insert_circuit_id - option82 suboption 1 fib number
    @param dhcp_server[] - server address
    @param dhcp_src_address[] - <fix this, need details>
*/
define dhcp_proxy_config {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 is_ipv6;
    u8 is_add;
    u8 insert_circuit_id;
    u8 dhcp_server[16];
    u8 dhcp_src_address[16];
};

/** \brief DHCP Proxy config response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define dhcp_proxy_config_reply {
    u32 context;
    i32 retval;
};

/** \brief DHCP Proxy set / unset vss request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param tbl_id - table id
    @param oui - first part of vpn id
    @param fib_id - second part of vpn id
    @param is_ipv6 - ip6 if non-zero, else ip4
    @param is_add - set vss if non-zero, else delete
*/
define dhcp_proxy_set_vss {
    u32 client_index;
    u32 context;
    u32 tbl_id;
    u32 oui;
    u32 fib_id;
    u8 is_ipv6;
    u8 is_add;
};

/** \brief DHCP proxy set / unset vss response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define dhcp_proxy_set_vss_reply {
    u32 context;
    i32 retval;
};

/** \brief Set the ip flow hash config for a fib request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf/fib id
    @param is_ipv6 - if non-zero the fib is ip6, else ip4
    @param src - if non-zero include src in flow hash
    @param dst - if non-zero include dst in flow hash
    @param sport - if non-zero include sport in flow hash
    @param dport - if non-zero include dport in flow hash
    @param proto -if non-zero include proto in flow hash
    @param reverse - if non-zero include reverse in flow hash
*/
define set_ip_flow_hash {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u8 is_ipv6;
    u8 src;
    u8 dst;
    u8 sport;
    u8 dport;
    u8 proto;
    u8 reverse;
};

/** \brief Set the ip flow hash config for a fib response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define set_ip_flow_hash_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 router advertisement config request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param suppress -
    @param managed -
    @param other -
    @param ll_option -
    @param send_unicast -
    @param cease -
    @param is_no -
    @param default_router -
    @param max_interval -
    @param min_interval -
    @param lifetime -
    @param initial_count -
    @param initial_interval -
*/
define sw_interface_ip6nd_ra_config {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 suppress;
    u8  managed;
    u8 other;
    u8 ll_option;
    u8 send_unicast;
    u8 cease;
    u8 is_no;
    u8 default_router;
    u32 max_interval;
    u32 min_interval;
    u32 lifetime;
    u32 initial_count;
    u32 initial_interval;
};

/** \brief IPv6 router advertisement config response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define sw_interface_ip6nd_ra_config_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 router advertisement prefix config request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - 
    @param address[] -
    @param address_length -
    @param use_default -
    @param no_advertise -
    @param off_link -
    @param no_autoconfig -
    @param no_onlink -
    @param is_no -
    @param val_lifetime -
    @param pref_lifetime -
*/
define sw_interface_ip6nd_ra_prefix {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 address[16];
    u8 address_length;
    u8 use_default;
    u8 no_advertise;
    u8 off_link;
    u8 no_autoconfig;
    u8 no_onlink;
    u8 is_no;
    u32 val_lifetime;
    u32 pref_lifetime;
};

/** \brief IPv6 router advertisement prefix config response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define sw_interface_ip6nd_ra_prefix_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 interface enable / disable request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface used to reach neighbor
    @param enable - if non-zero enable ip6 on interface, else disable
*/
define sw_interface_ip6_enable_disable  {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 enable;                        /* set to true if enable*/
};

/** \brief IPv6 interface enable / disable response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define  sw_interface_ip6_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 set link local address on interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set link local on
    @param address[] - the new link local address
    @param address_length - link local address length
*/
define sw_interface_ip6_set_link_local_address  {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 address[16];
    u8 address_length;
};

/** \brief IPv6 set link local address on interface response
    @param context - sender context, to match reply w/ request
    @param retval - error code for the request
*/
define  sw_interface_ip6_set_link_local_address_reply {
    u32 context;
    i32 retval;
};

/** \brief Set unnumbered interface add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface with an IP address
    @param unnumbered_sw_if_index - interface which will use the address
    @param is_add - if non-zero set the association, else unset it
*/
define sw_interface_set_unnumbered {
    u32 client_index;
    u32 context;
    u32 sw_if_index;		/* use this intfc address */
    u32 unnumbered_sw_if_index; /* on this interface */
    u8 is_add;
};

/** \brief Set unnumbered interface add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define  sw_interface_set_unnumbered_reply {
    u32 context;
    i32 retval;
};

/** \brief Create loopback interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param mac_address - mac addr to assign to the interface if none-zero
*/
define create_loopback {
    u32 client_index;
    u32 context;
    u8  mac_address[6];
};

/** \brief Create loopback interface response
    @param context - sender context, to match reply w/ request
    @param sw_if_index - sw index of the interface that was created
    @param retval - return code for the request
*/
define create_loopback_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief Delete loopback interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - sw index of the interface that was created
*/
define delete_loopback {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

/** \brief Delete loopback interface response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define delete_loopback_reply {
    u32 context;
    i32 retval;
};

/** \brief Control ping from client to api server request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define control_ping {
    u32 client_index;
    u32 context;
};

/** \brief Control ping from the client to the server response
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
    @param vpe_pid - the pid of the vpe, returned by the server
*/
define control_ping_reply {
    u32 context;
    i32 retval;
    u32 client_index;
    u32 vpe_pid;
};

/** \brief Process a vpe parser cli string request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param cmd_in_shmem - pointer to cli command string
*/
define cli_request {
    u32 client_index;
    u32 context;
    u64 cmd_in_shmem;
};

/** \brief vpe parser cli string response
    @param context - sender context, to match reply w/ request
    @param retval - return code for request
    @param reply_in_shmem - Reply string from cli processing if any
*/
define cli_reply {
    u32 context;
    i32 retval;
    u64 reply_in_shmem;
};

/** \brief Set max allowed ARP or ip6 neighbor entries request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_ipv6 - neighbor limit if non-zero, else ARP limit
    @param arp_neighbor_limit - the new limit, defaults are ~ 50k
*/
define set_arp_neighbor_limit {
    u32 client_index;
    u32 context;
    u8  is_ipv6;
    u32 arp_neighbor_limit;
}; 

/** \brief Set max allowed ARP or ip6 neighbor entries response
    @param context - sender context, to match reply w/ request
    @param retval - return code for request
*/
define set_arp_neighbor_limit_reply {
    u32 context;
    i32 retval;
};

/** \brief L2 interface patch add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param rx_sw_if_index - receive side interface 
    @param tx_sw_if_index - transmit side interface
    @param is_add - if non-zero set up the interface patch, else remove it
*/
define l2_patch_add_del {
    u32 client_index;
    u32 context;
    u32 rx_sw_if_index;
    u32 tx_sw_if_index;
    u8 is_add;
};

/** \brief L2 interface patch add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define l2_patch_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 segment routing tunnel add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add the tunnel if non-zero, else delete it
    @param name[] - tunnel name (len. 64)
    @param src_address[] -
    @param dst_address[] -
    @param dst_mask_width -
    @param inner_vrf_id -
    @param outer_vrf_id -
    @param flags_net_byte_order -
    @param n_segments -
    @param n_tags -
    @param segs_and_tags[] -
    @param policy_name[] - name of policy to associate this tunnel to (len. 64)
*/
define sr_tunnel_add_del {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 name[64];
    u8 src_address[16];
    u8 dst_address[16];
    u8 dst_mask_width;
    u32 inner_vrf_id;
    u32 outer_vrf_id;
    u16 flags_net_byte_order;
    u8 n_segments;
    u8 n_tags;
    u8 segs_and_tags[0];
    u8 policy_name[64];
};

/** \brief IPv6 segment routing tunnel add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define sr_tunnel_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 segment routing policy add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add the tunnel if non-zero, else delete it
    @param name[] - policy name (len. 64)
    @param tunnel_names[] -
*/
define sr_policy_add_del {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 name[64];
    u8 tunnel_names[0];
};

/** \brief IPv6 segment routing policy add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define sr_policy_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief IPv6 segment routing multicast map to policy add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add the tunnel if non-zero, else delete it
    @param multicast_address[] - IP6 multicast address
    @param policy_name[] = policy name (len.64)
*/
define sr_multicast_map_add_del {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 multicast_address[16];
    u8 policy_name[64];
};

/** \brief IPv6 segment routing multicast map to policy add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define sr_multicast_map_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Interface set vpath request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface used to reach neighbor
    @param enable - if non-zero enable, else disable
*/
define sw_interface_set_vpath {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8  enable;
};

/** \brief Interface set vpath response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define sw_interface_set_vpath_reply {
    u32 context;
    i32 retval;
};

/** \brief MPLS Ethernet add / del tunnel request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param vrf_id - vrf_id, only for IP4
    @param sw_if_index - interface used to reach neighbor
    @param is_add - add if set, tunnel delete if 0
    @param dst_mac_address - 
    @param adj_address - 
    @param adj_address_length -
*/
define mpls_ethernet_add_del_tunnel {
    u32 client_index;
    u32 context;
    u32 vrf_id;
    u32 tx_sw_if_index;
    u8 is_add;
    u8 l2_only;
    u8 dst_mac_address[6];
    u8 adj_address[4];
    u8 adj_address_length;
};

/** \brief Reply for MPLS Ethernet add / delete tunnel request
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define mpls_ethernet_add_del_tunnel_reply {
    u32 context;
    i32 retval;
    u32 tunnel_sw_if_index;
};
/** \brief MPLS Ethernet add/ del tunnel 2
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param inner_vrf_id - 
    @param outer_vrf_id - 
    @param resolve_attempts - 
    @param resolve_opaque - 
    @param resolve_if_needed -
    @param is_add -
    @param adj_address -
    @param adj_address_length -
    @param next_hop_ip4_address_in_outer_vrf -
*/
define mpls_ethernet_add_del_tunnel_2 {
   u32 client_index;
   u32 context;
   u32 inner_vrf_id;
   u32 outer_vrf_id;
   u32 resolve_attempts;
   u32 resolve_opaque;          /* no need to set this */
   u8 resolve_if_needed;
   u8 is_add;
   u8 l2_only;
   u8 adj_address[4];
   u8 adj_address_length;
   u8 next_hop_ip4_address_in_outer_vrf [4];
};

/** \brief MPLS Ethernet add/ del tunnel 2
    @param context - sender context, to match reply w/ request
    @param retval - return code for add /del request
*/
define mpls_ethernet_add_del_tunnel_2_reply {
    u32 context;
    i32 retval;
};

/** \brief Set L2 XConnect between two interfaces request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param rx_sw_if_index - Receive interface index
    @param tx_sw_if_index - Transmit interface index
    @param enable - enable xconnect if not 0, else set to L3 mode
*/
define sw_interface_set_l2_xconnect {
    u32 client_index;
    u32 context;
    u32 rx_sw_if_index;
    u32 tx_sw_if_index;
    u8 enable;
};

/** \brief Set L2 XConnect response
    @param context - sender context, to match reply w/ request
    @param retval - L2 XConnect request return code
*/
define sw_interface_set_l2_xconnect_reply {
    u32 context;
    i32 retval;
};

/** \brief Interface bridge mode request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param rx_sw_if_index - the interface
    @param bd_id - bridge domain id
    @param bvi - Setup interface as a bvi, bridge mode only
    @param shg - Shared horizon group, for bridge mode only
    @param enable - Enable beige mode if not 0, else set to L3 mode
*/
define sw_interface_set_l2_bridge {
    u32 client_index;
    u32 context;
    u32 rx_sw_if_index;
    u32 bd_id;
    u8 shg;
    u8 bvi;
    u8 enable;
};

/** \brief Interface bridge mode response
    @param context - sender context, to match reply w/ request
    @param retval - Bridge mode request return code
*/
define sw_interface_set_l2_bridge_reply {
    u32 context;
    i32 retval;
};

/** \brief L2 FIB add entry request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param mac - the entry's mac address
    @param bd_id - the entry's bridge domain id
    @param sw_if_index - the interface
    @param is_add - If non zero add the entry, else delete it
    @param static_mac - 
    @param filter_mac -
*/
define l2fib_add_del {
    u32 client_index;
    u32 context;
    u64 mac;
    u32 bd_id;
    u32 sw_if_index;
    u8 is_add;
    u8 static_mac;
    u8 filter_mac;
    u8 bvi_mac;
};

/** \brief L2 FIB add entry response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the add l2fib entry request
*/
define l2fib_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Set L2 flags request !!! TODO - need more info, feature bits in l2_input.h
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface 
    @param is_set - if non-zero, set the bits, else clear them
    @param feature_bitmap - non-zero bits to set or clear
*/
define l2_flags {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 is_set;
    u32 feature_bitmap;
};

/** \brief Set L2 bits response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the set l2 bits request
*/
define l2_flags_reply {
    u32 context;
    i32 retval;
    u32 resulting_feature_bitmap;
};

/** \brief Set bridge flags (such as L2_LEARN, L2_FWD, L2_FLOOD, 
    L2_UU_FLOOD, or L2_ARP_TERM) request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param bd_id - the bridge domain to set the flags for
    @param is_set - if non-zero, set the flags, else clear them
    @param feature_bitmap - bits that are non-zero to set or clear
*/
define bridge_flags {
    u32 client_index;
    u32 context;
    u32 bd_id;
    u8 is_set;
    u32 feature_bitmap;
};

/** \brief Set bridge flags response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the set bridge flags request
    @param resulting_feature_bitmap - the feature bitmap value after the request is implemented
*/
define bridge_flags_reply {
    u32 context;
    i32 retval;
    u32 resulting_feature_bitmap;
};

/** \brief Set bridge domain ip to mac entry request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param bd_id - the bridge domain to set the flags for
    @param is_add - if non-zero, add the entry, else clear it
    @param is_ipv6 - if non-zero, ipv6 address, else ipv4 address
    @param mac_address - MAC address
    @param 
*/
define bd_ip_mac_add_del {
    u32 client_index;
    u32 context;
    u32 bd_id;
    u8 is_add;
    u8 is_ipv6;
    u8 ip_address[16];
    u8 mac_address[6];
};

/** \brief Set bridge domain ip to mac entry response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the set bridge flags request
*/
define bd_ip_mac_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Add/Delete classification table request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add- if non-zero add the table, else delete it
    @param table_index - if add, reuturns index of the created table, else specifies the table to delete  
    @param nbuckets - number of buckets when adding a table
    @param memory_size - memory size when adding a table
    @param match_n_vectors - number of match vectors
    @param next_table_index - index of next table
    @param miss_next_index - index of miss table
    @param mask[] - match mask
*/
define classify_add_del_table {
    u32 client_index;
    u32 context;
    u8  is_add;
    u32 table_index;
    u32 nbuckets;
    u32 memory_size;
    u32 skip_n_vectors;
    u32 match_n_vectors;
    u32 next_table_index;
    u32 miss_next_index;
    u8 mask[0];
};

/** \brief Add/Delete classification table response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the table add/del requst
    @param new_table_index - for add, returned index of the new table
    @param skip_n_vectors - for add, returned value of skip_n_vectors in table
    @param match_n_vectors -for add, returned value of match_n_vectors in table
*/
define classify_add_del_table_reply {
    u32 context;
    i32 retval;
    u32 new_table_index;
    u32 skip_n_vectors;
    u32 match_n_vectors;
};

/** \brief Classify add / del session request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add session if non-zero, else delete
    @param table_index - index of the table to add/del the session, required
    @param hit_next_index - for add, hit_next_index of new session, required
    @param opaque_index - for add, opaque_index of new session
    @param advance -for add, advance value for session
    @param match[] - for add, match value for session, required
*/
define classify_add_del_session {
    u32 client_index;
    u32 context;
    u8  is_add;
    u32 table_index;
    u32 hit_next_index;
    u32 opaque_index;
    i32 advance;
    u8 match[0];
};

/** \brief Classify add / del session response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the add/del session request
*/
define classify_add_del_session_reply {
    u32 context;
    i32 retval;
};

/** \brief Set/unset the classification table for an interface request 
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_ipv6 - ipv6 if non-zero, else ipv4
    @param sw_if_index - interface to associate with the table
    @param table_index - index of the table, if ~0 unset the table
*/
define classify_set_interface_ip_table {
    u32 client_index;
    u32 context;
    u8 is_ipv6;
    u32 sw_if_index;
    u32 table_index;            /* ~0 => off */
};

/** \brief Set/unset interface classification table response 
    @param context - sender context, to match reply w/ request
    @param retval - return code
*/
define classify_set_interface_ip_table_reply {
    u32 context;
    i32 retval;
};

/** \brief Set/unset l2 classification tables for an interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set/unset tables for
    @param ip4_table_index - ip4 index, use ~0 for all 3 indexes to unset
    @param ip6_table_index - ip6 index
    @param other_table_index - other index
*/
define classify_set_interface_l2_tables {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    /* 3 x ~0 => off */
    u32 ip4_table_index;
    u32 ip6_table_index;
    u32 other_table_index;
};

/** \brief Set/unset l2 classification tables for an interface response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define classify_set_interface_l2_tables_reply {
    u32 context;
    i32 retval;
};

/** \brief Get node index using name request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param node_name[] - name of the node
*/
define get_node_index {
    u32 client_index;
    u32 context;
    u8 node_name[64];
};

/** \brief Get node index using name request
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
    @param node_index - index of the desired node if found, else ~0
*/
define get_node_index_reply {
    u32 context;
    i32 retval;
    u32 node_index;
};

/** \brief Set the next node for a given node request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param node_name[] - node to add the next node to
    @param next_name[] - node to add as the next node
*/
define add_node_next {
    u32 client_index;
    u32 context;
    u8 node_name[64];
    u8 next_name[64];
};

/** \brief IP Set the next node for a given node response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the add next node request
    @param next_index - the index of the next node if success, else ~0
*/
define add_node_next_reply {
    u32 context;
    i32 retval;
    u32 next_index;
};

/** \brief DHCP Proxy config 2 add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param rx_vrf_id - receive vrf id
    @param server_vrf_id - server vrf id
    @param if_ipv6 - ipv6 if non-zero, else ipv4
    @param is_add - add the config if non-zero, else delete
    @param insert_circuit_id - option82 suboption 1 fib number
    @param dhcp_server[] - server address
    @param dhcp_src_address[] - <fix this, need details>
*/
define dhcp_proxy_config_2 {
    u32 client_index;
    u32 context;
    u32 rx_vrf_id;
    u32 server_vrf_id;
    u8 is_ipv6;
    u8 is_add;
    u8 insert_circuit_id;
    u8 dhcp_server[16];
    u8 dhcp_src_address[16];
};

/** \brief DHCP Proxy config 2 add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return code for request
*/
define dhcp_proxy_config_2_reply {
    u32 context;
    i32 retval;
};

/** \brief l2tpv3 tunnel interface create request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param client_address - remote client tunnel ip address
    @param client_address - local tunnel ip address
    @param is_ipv6 - ipv6 if non-zero, else ipv4
    @param local_session_id - local tunnel session id
    @param remote_session_id - remote tunnel session id
    @param local_cookie - local tunnel cookie
    @param l2_sublayer_present - l2 sublayer is present in packets if non-zero
    @param encap_vrf_id - fib identifier used for outgoing encapsulated packets
*/
define l2tpv3_create_tunnel {
    u32 client_index;
    u32 context;
    u8 client_address [16];
    u8 our_address [16];
    u8 is_ipv6;
    u32 local_session_id;
    u32 remote_session_id;
    u64 local_cookie;
    u64 remote_cookie;
    u8 l2_sublayer_present;
    u32 encap_vrf_id;
};

/** \brief l2tpv3 tunnel interface create response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
    @param sw_if_index - index of the new tunnel interface
*/
define l2tpv3_create_tunnel_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

define l2tpv3_set_tunnel_cookies {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u64 new_local_cookie;
    u64 new_remote_cookie;
};

/** \brief L2TP tunnel set cookies response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define l2tpv3_set_tunnel_cookies_reply {
    u32 context;
    i32 retval;
};

define sw_if_l2tpv3_tunnel_details {
    u32 context;
    u32 sw_if_index;
    u8 interface_name[64];
    u8 client_address [16];
    u8 our_address [16];
    u32 local_session_id;
    u32 remote_session_id;
    u64 local_cookie[2];
    u64 remote_cookie;
    u8 l2_sublayer_present;
};

define sw_if_l2tpv3_tunnel_dump {
    u32 client_index;
    u32 context;
};

/** \brief L2 fib clear table request, clear all mac entries in the l2 fib
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define l2_fib_clear_table {
    u32 client_index;
    u32 context;
};

/** \brief L2 fib clear table response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define l2_fib_clear_table_reply {
    u32 context;
    i32 retval;
};

/** \brief L2 interface ethernet flow point filtering enable/disable request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to enable/disable filtering on
    @param enable_disable - if non-zero enable filtering, else disable
*/
define l2_interface_efp_filter {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 enable_disable;
};

/** \brief L2 interface ethernet flow point filtering response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define l2_interface_efp_filter_reply {
    u32 context;
    i32 retval;
};

define l2tpv3_interface_enable_disable {
    u32 client_index;
    u32 context;
    u8 enable_disable;
    u32 sw_if_index;
}; 

define l2tpv3_interface_enable_disable_reply {
    u32 context;
    i32 retval;
};

define l2tpv3_set_lookup_key {
    u32 client_index;
    u32 context;
    /* 0 = ip6 src_address, 1 = ip6 dst_address, 2 = session_id */
    u8 key;
}; 

define l2tpv3_set_lookup_key_reply {
    u32 context;
    i32 retval;
};

define vxlan_add_del_tunnel {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 is_ipv6;
    u8 src_address[16];
    u8 dst_address[16];
    u32 encap_vrf_id;
    u32 decap_next_index;
    u32 vni;
};

define vxlan_add_del_tunnel_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

define vxlan_tunnel_dump {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

define vxlan_tunnel_details {
    u32 context;
    u32 sw_if_index;
    u8 src_address[16];
    u8 dst_address[16];
    u32 encap_vrf_id;
    u32 decap_next_index;
    u32 vni;
    u8 is_ipv6;
};

define gre_add_del_tunnel {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 is_ipv6;
    u8 src_address[16];
    u8 dst_address[16];
    u32 outer_fib_id;
};

define gre_add_del_tunnel_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

define gre_tunnel_dump {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

define gre_tunnel_details {
    u32 context;
    u32 sw_if_index;
    u8 is_ipv6;
    u8 src_address[16];
    u8 dst_address[16];
    u32 outer_fib_id;
};
  
/** \brief L2 interface vlan tag rewrite configure request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface the operation is applied to
    @param vtr_op - Choose from l2_vtr_op_t enum values
    @param push_dot1q - first pushed flag dot1q id set, else dot1ad
    @param tag1 - Needed for any push or translate vtr op
    @param tag2 - Needed for any push 2 or translate x-2 vtr ops
*/
define l2_interface_vlan_tag_rewrite {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 vtr_op;
    u32 push_dot1q; // ethertype of first pushed tag is dot1q/dot1ad
    u32 tag1;  // first pushed tag
    u32 tag2;  // second pushed tag
};

/** \brief L2 interface vlan tag rewrite response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define l2_interface_vlan_tag_rewrite_reply {
    u32 context;
    i32 retval;
};

/** \brief vhost-user interface create request
    @param client_index - opaque cookie to identify the sender
    @param is_server - our side is socket server
    @param sock_filename - unix socket filename, used to speak with frontend
    @param use_custom_mac - enable or disable the use of the provided hardware address
    @param mac_address - hardware address to use if 'use_custom_mac' is set
*/
define create_vhost_user_if {
   u32 client_index;
   u32 context;
   u8 is_server;
   u8 sock_filename[256];
   u8 renumber;
   u32 custom_dev_instance;
   u8 use_custom_mac;
   u8 mac_address[6];
};

/** \brief vhost-user interface create response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
    @param sw_if_index - interface the operation is applied to
*/
define create_vhost_user_if_reply {
   u32 context;
   i32 retval;
   u32 sw_if_index;
};

/** \brief vhost-user interface modify request
    @param client_index - opaque cookie to identify the sender
    @param is_server - our side is socket server
    @param sock_filename - unix socket filename, used to speak with frontend
*/
define modify_vhost_user_if {
   u32 client_index;
   u32 context;
   u32 sw_if_index;
   u8 is_server;
   u8 sock_filename[256];
   u8 renumber;
   u32 custom_dev_instance;
};

/** \brief vhost-user interface modify response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define modify_vhost_user_if_reply {
   u32 context;
   i32 retval;
};

/** \brief vhost-user interface delete request
    @param client_index - opaque cookie to identify the sender
*/
define delete_vhost_user_if {
   u32 client_index;
   u32 context;
   u32 sw_if_index;
};

/** \brief vhost-user interface delete response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define delete_vhost_user_if_reply {
   u32 context;
   i32 retval;
};

define create_subif {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 sub_id;

    /* These fields map directly onto the subif template */
    u8 no_tags;
    u8 one_tag;
    u8 two_tags;
    u8 dot1ad;   // 0 = dot1q, 1=dot1ad
    u8 exact_match;
    u8 default_sub;
    u8 outer_vlan_id_any;
    u8 inner_vlan_id_any;
    u16 outer_vlan_id;
    u16 inner_vlan_id;
};

define create_subif_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief show version
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define show_version {
   u32 client_index;
   u32 context;
};

/** \brief show version response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
    @param program - name of the program (vpe)
    @param version  - version of the program
    @param build_directory - root of the workspace where the program was built
*/
define show_version_reply {
   u32 context;
   i32 retval;
   u8 program[32];
   u8 version[32];
   u8 build_date[32];
   u8 build_directory[256];
};

/** \brief Vhost-user interface details structure (fix this)
    @param sw_if_index - index of the interface
    @param interface_name - name of interface
    @param virtio_net_hdr_sz - net header size
    @param features - interface features
    @param is_server - vhost-user server socket
    @param sock_filename - socket filename
    @param num_regions - number of used memory regions
*/
define sw_interface_vhost_user_details {
    u32 context;
    u32 sw_if_index;
    u8 interface_name[64];
    u32 virtio_net_hdr_sz;
    u64 features;
    u8 is_server;
    u8 sock_filename[256];
    u32 num_regions;
    i32 sock_errno;
};

/* works */
define sw_interface_vhost_user_dump {
    u32 client_index;
    u32 context;
};

define ip_address_details {
    u32 client_index;
    u32 context;
    u8 ip[16];
    u8 prefix_length;
};

define ip_address_dump {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 is_ipv6;
};

define ip_details {
    u32 sw_if_index;
    u32 context;
};

define ip_dump {
    u32 client_index;
    u32 context;
    u8 is_ipv6;
};

/** \brief l2 fib table entry structure
    @param bd_id - the l2 fib / bridge domain table id
    @param mac - the entry's mac address
    @param sw_if_index - index of the interface
    @param static_mac - the entry is statically configured.
    @param filter_mac - the entry is a mac filter entry.
    @param bvi_mac - the mac address is a bridge virtual interface
*/
define l2_fib_table_entry {
    u32 context;
    u32 bd_id;
    u64 mac;
    u32 sw_if_index;
    u8 static_mac;
    u8 filter_mac;
    u8 bvi_mac;
};

/** \brief Dump l2 fib (aka bridge domain) table
    @param client_index - opaque cookie to identify the sender
    @param bd_id - the l2 fib / bridge domain table identifier
*/
define l2_fib_table_dump {
    u32 client_index;
    u32 context;
    u32 bd_id;
};

define vxlan_gpe_add_del_tunnel {
    u32 client_index;
    u32 context;
    u8 is_ipv6;
    u8 local[16];
    u8 remote[16];
    u32 encap_vrf_id;
    u32 decap_vrf_id;
    u8 protocol;
    u32 vni;
    u8 is_add;
};

define vxlan_gpe_add_del_tunnel_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

define vxlan_gpe_tunnel_dump {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

define vxlan_gpe_tunnel_details {
    u32 context;
    u32 sw_if_index;
    u8 local[16];
    u8 remote[16];
    u32 vni;
    u8 protocol;
    u32 encap_vrf_id;
    u32 decap_vrf_id;
    u8 is_ipv6;
};

/** \brief add or delete locator_set
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param locator_set_name - locator name
*/
define lisp_add_del_locator_set {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8  locator_set_name[64];
    u32 locator_num;
    u8  locators[0];
};

/** \brief Reply for locator_set add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_locator_set_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete locator for locator_set
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param locator_set_name - name of locator_set to add/del locator
    @param sw_if_index - index of the interface
    @param priority - priority of the lisp locator
    @param weight - weight of the lisp locator
*/
define lisp_add_del_locator {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8  locator_set_name[64];
    u32 sw_if_index;
    u8  priority;
    u8  weight;
};

/** \brief Reply for locator add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_locator_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete lisp eid-table
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param eid_type:
      0 : ipv4
      1 : ipv6
      2 : mac
    @param eid - EID can be ip4, ip6 or mac
    @param prefix_len - prefix len
    @param locator_set_name - name of locator_set to add/del eid-table
    @param vni - virtual network instance
*/
define lisp_add_del_local_eid {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8  eid_type;
    u8  eid[16];
    u8  prefix_len;
    u8  locator_set_name[64];
    u32 vni;
};

/** \brief Reply for local_eid add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_local_eid_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete lisp gpe maptunel
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param eid_is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param eid_ip_address - array of address bytes
    @param eid_prefix_len - prefix len
    @param address_is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param source_ip_address - array of address bytes
    @param destination_ip_address - array of address bytes
*/
define lisp_gpe_add_del_fwd_entry {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8  eid_is_ipv6;
    u8  eid_ip_address[16];
    u8  eid_prefix_len;
    u8  address_is_ipv6;
    u8  source_ip_address[16];
    u8  destination_ip_address[16];
};

/** \brief Reply for gpe_fwd_entry add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_gpe_add_del_fwd_entry_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete map-resolver
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param ip_address - array of address bytes
*/
define lisp_add_del_map_resolver {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8  is_ipv6;
    u8  ip_address[16];
};

/** \brief Reply for map_resolver add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_map_resolver_reply {
    u32 context;
    i32 retval;
};

/** \brief enable or disable lisp-gpe protocol
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_en - enable protocol if non-zero, else disable
*/
define lisp_gpe_enable_disable {
    u32 client_index;
    u32 context;
    u8  is_en;
};

/** \brief Reply for gpe enable/disable
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_gpe_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief enable or disable LISP feature
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_en - enable protocol if non-zero, else disable
*/
define lisp_enable_disable {
    u32 client_index;
    u32 context;
    u8  is_en;
};

/** \brief Reply for gpe enable/disable
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete gpe_iface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
*/
define lisp_gpe_add_del_iface {
    u32 client_index;
    u32 context;
    u8  is_add;
    u32 table_id;
    u32 vni;
};

/** \brief Reply for gpe_iface add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_gpe_add_del_iface_reply {
    u32 context;
    i32 retval;
};

/** \brief configure or disable LISP PITR node
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param ls_name - locator set name
    @param is_add - add locator set if non-zero, else disable pitr
*/
define lisp_pitr_set_locator_set {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 ls_name[64];
};

/** \brief Reply for lisp_pitr_set_locator_set
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_pitr_set_locator_set_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete remote static mapping
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param del_all - if set, delete all remote mappings
    @param vni - virtual network instance
    @param action - negative map-reply action
    @param eid_type -
      0 : ipv4
      1 : ipv6
      2 : mac
    @param deid - destination EID
    @param seid - source EID
    @param rloc_num - number of remote locators
    @param rlocs - remote locator data
*/
define lisp_add_del_remote_mapping {
    u32 client_index;
    u32 context;
    u8  is_add;
    u8 del_all;
    u32 vni;
    u8 action;
    u8 eid_type;
    u8 deid[16];
    u8 seid[16];
    u8 deid_len;
    u8 seid_len;
    u32 rloc_num;
    u8 rlocs[0];
};

/** \brief Reply for lisp_add_del_remote_mapping
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_remote_mapping_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete LISP adjacency adjacency
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param vni - virtual network instance
    @param eid_type -
      0 : ipv4
      1 : ipv6
      2 : mac
    @param deid - destination EID
    @param seid - source EID
*/
define lisp_add_del_adjacency {
    u32 client_index;
    u32 context;
    u8  is_add;
    u32 vni;
    u8 eid_type;
    u8 deid[16];
    u8 seid[16];
    u8 deid_len;
    u8 seid_len;
};

/** \brief Reply for lisp_add_del_adjacency
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_add_del_adjacency_reply {
    u32 context;
    i32 retval;
};

/** \brief add or delete map request itr rlocs
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add address if non-zero, else delete
    @param locator_set_name - locator set name
*/
define lisp_add_del_map_request_itr_rlocs {
    u32 client_index;
    u32 context;
    u8 is_add;
    u8 locator_set_name[64];
};

/** \brief Reply for lisp_add_del_map_request_itr_rlocs
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define lisp_add_del_map_request_itr_rlocs_reply {
    u32 context;
    i32 retval;
};

/** \brief map/unmap vni to vrf
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add or delete mapping
    @param vni - virtual network id
    @param vrf - vrf
*/
define lisp_eid_table_add_del_map {
    u32 client_index;
    u32 context;
    u8 is_add;
    u32 vni;
    u32 vrf;
};

/** \brief Reply for lisp_eid_table_add_del_map
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define lisp_eid_table_add_del_map_reply {
    u32 context;
    i32 retval;
};

/** \brief LISP locator_set status
    @param locator_set_name - name of the locator_set
    @param sw_if_index - sw_if_index of the locator
    @param priority - locator priority
    @param weight - locator weight
 */
define lisp_locator_set_details {
    u32 context;
    u8  local;
    u8  locator_set_name[64];
    u32 sw_if_index;
    u8  is_ipv6;
    u8  ip_address[16];
    u8  prefix_len;
    u8  priority;
    u8  weight;
};

/** \brief Request for locator_set summary status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
 */
define lisp_locator_set_dump {
    u32 client_index;
    u32 context;
};

/** \brief LISP local eid table status
    @param locator_set_name - name of the locator_set
    @param eid_type - ip4, ip6 or l2 mac address
    @param eid - array of address bytes
    @param eid_prefix_len - prefix len
 */
define lisp_local_eid_table_details {
    u32 context;
    u8  locator_set_name[64];
    u8  eid_type;
    u32 vni;
    u8  eid[16];
    u8  eid_prefix_len;
};

/** \brief Request for local eid table summary status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param eid_set - if non-zero request info about specific mapping
    @param vni - virtual network instance; valid only if eid_set != 0
    @param prefix_length - prefix length if EID is IP address;
      valid only if eid_set != 0
    @param eid_type - EID type; valid only if eid_set != 0
      Supported values:
        0: EID is IPv4
        1: EID is IPv6
        2: EID is ethernet address
    @param eid - endpoint identifier
 */
define lisp_local_eid_table_dump {
    u32 client_index;
    u32 context;
    u8  eid_set;
    u8  prefix_length;
    u32 vni;
    u8  eid_type;
    u8  eid[16];
};

/** \brief Shows relationship between vni and vrf
    @param vrf - VRF index
    @param vni - vitual network instance
  */
define lisp_eid_table_map_details {
    u32 context;
    u32 vni;
    u32 vrf;
};

/** \brief Request for lisp_eid_table_map_details
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
 */
define lisp_eid_table_map_dump {
    u32 client_index;
    u32 context;
};

define lisp_gpe_tunnel_details {
    u32 context;
    u32 tunnels;
    u8  is_ipv6;
    u8  source_ip[16];
    u8  destination_ip[16];
    u32 encap_fib_id;
    u32 decap_fib_id;
    u32 dcap_next;
    u8  lisp_ver;
    u8  next_protocol;
    u8  flags;
    u8  ver_res;
    u8  res;
    u32 iid;
};

/** \brief Request for gpe tunnel summary status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
 */
define lisp_gpe_tunnel_dump {
    u32 client_index;
    u32 context;
};

/** \brief LISP map resolver status
    @param locator_set_name - name of the locator_set
    @param is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param ip_address - array of address bytes
 */
define lisp_map_resolver_details {
    u32 context;
    u8  is_ipv6;
    u8  ip_address[16];
};

/** \brief Request for map resolver summary status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
 */
define lisp_map_resolver_dump {
    u32 client_index;
    u32 context;
};

/** \brief Status of lisp-gpe protocol, enable or disable
    @param context - sender context, to match reply w/ request
    @param is_en - enable protocol if non-zero, else disable
*/
define lisp_enable_disable_status_details {
    u32 context;
    u8 feature_status;
    u8 gpe_status;
};

/** \brief Request for lisp-gpe protocol status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define lisp_enable_disable_status_dump {
    u32 client_index;
    u32 context;
};

/** \brief Get LISP map request itr rlocs status
    @param context - sender context, to match reply w/ request
    @param locator_set_name - name of the locator_set
 */
define lisp_get_map_request_itr_rlocs {
    u32 client_index;
    u32 context;
};

/** \brief Request for map request itr rlocs summary status
 */
define lisp_get_map_request_itr_rlocs_reply {
    u32 context;
    i32 retval;
    u8 locator_set_name[64];
};

/** \brief Request for lisp pitr status
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define show_lisp_pitr {
    u32 client_index;
    u32 context;
};

/** \brief Status of lisp pitr, enable or disable
    @param context - sender context, to match reply w/ request
    @param status - lisp pitr enable if non-zero, else disable
    @param locator_set_name -  name of the locator_set
*/
define show_lisp_pitr_reply {
    u32 context;
    i32 retval;
    u8  status;
    u8  locator_set_name[64];
};

/* Gross kludge, DGMS */
define interface_name_renumber {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 new_show_dev_instance;
};

define interface_name_renumber_reply {
    u32 context;
    i32 retval;
};

/** \brief Register for ip4 arp resolution events
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param enable_disable - 1 => register for events, 0 => cancel registration
    @param pid - sender's pid
    @param address - the exact ip4 address of interest
*/
define want_ip4_arp_events {
    u32 client_index;
    u32 context;
    u8 enable_disable;
    u32 pid;
    u32 address;
};

/** \brief Reply for interface events registration
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define want_ip4_arp_events_reply {
    u32 context;
    i32 retval;
};

/** \brief Tell client about an ip4 arp resolution event
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param address - the exact ip4 address of interest
    @param pid - client pid registered to receive notification
    @param sw_if_index - interface which received ARP packet
    @param new_mac - the new mac address 
*/
define ip4_arp_event {
    u32 client_index;
    u32 context;
    u32 address;
    u32 pid;
    u32 sw_if_index;
    u8 new_mac[6];
};
    
/** \brief L2 bridge domain add or delete request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param bd_id - the bridge domain to create
    @param flood - enable/disable bcast/mcast flooding in the bd
    @param uu_flood - enable/disable uknown unicast flood in the bd
    @param forward - enable/disable forwarding on all interfaces in the bd
    @param learn - enable/disable learning on all interfaces in the bd
    @param arp_term - enable/disable arp termination in the bd
    @param is_add - add or delete flag
*/
define bridge_domain_add_del {
    u32 client_index;
    u32 context;
    u32 bd_id;
    u8 flood;
    u8 uu_flood;
    u8 forward;
    u8 learn;
    u8 arp_term;
    u8 is_add;
};

/** \brief L2 bridge domain add or delete response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the set bridge flags request
*/
define bridge_domain_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief L2 bridge domain request operational state details
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param bd_id - the bridge domain id desired or ~0 to request all bds
*/
define bridge_domain_dump {
    u32 client_index;
    u32 context;
    u32 bd_id;
};

/** \brief L2 bridge domain operational state response
    @param bd_id - the bridge domain id
    @param flood - bcast/mcast flooding state on all interfaces in the bd
    @param uu_flood - uknown unicast flooding state on all interfaces in the bd
    @param forward - forwarding state on all interfaces in the bd
    @param learn - learning state on all interfaces in the bd
    @param arp_term - arp termination state on all interfaces in the bd
    @param n_sw_ifs - number of sw_if_index's in the domain
*/
define bridge_domain_details {
    u32 context;
    u32 bd_id;
    u8 flood;
    u8 uu_flood;
    u8 forward;
    u8 learn;
    u8 arp_term;
    u32 bvi_sw_if_index;
    u32 n_sw_ifs;
};

/** \brief L2 bridge domain sw interface operational state response
    @param bd_id - the bridge domain id
    @param sw_if_index - sw_if_index in the domain
    @param shg - split horizon group for the interface
*/
define bridge_domain_sw_if_details {
    u32 context;
    u32 bd_id;
    u32 sw_if_index;
    u8 shg;
};

/** \brief DHCP Client config add / del request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface for DHCP client
    @param hostname - hostname
    @param is_add - add the config if non-zero, else delete
    @param want_dhcp_event - DHCP event sent to the sender
           via dhcp_compl_event API message if non-zero
    @param pid - sender's pid
*/
define dhcp_client_config {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 hostname[64];
    u8 is_add;
    u8 want_dhcp_event;
    u32 pid;
};

/** \brief DHCP Client config response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define dhcp_client_config_reply {
    u32 context;
    i32 retval;
};

/** \brief Set/unset input ACL interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set/unset input ACL
    @param ip4_table_index - ip4 classify table index (~0 for skip)
    @param ip6_table_index - ip6 classify table index (~0 for skip)
    @param l2_table_index  -  l2 classify table index (~0 for skip)
    @param is_add - Set input ACL if non-zero, else unset
    Note: User is recommeneded to use just one valid table_index per call.
          (ip4_table_index, ip6_table_index, or l2_table_index)
*/
define input_acl_set_interface {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 ip4_table_index;
    u32 ip6_table_index;
    u32 l2_table_index;
    u8  is_add;
};

/** \brief Set/unset input ACL interface response
    @param context - sender context, to match reply w/ request
    @param retval - return code for the request
*/
define input_acl_set_interface_reply {
    u32 context;
    i32 retval;
};

/** \brief IPsec: Add/delete Security Policy Database
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add SPD if non-zero, else delete
    @param spd_id - SPD instance id (control plane allocated)
*/

define ipsec_spd_add_del {
    u32 client_index;
    u32 context;
    u8 is_add;
    u32 spd_id;
};

/** \brief Reply for IPsec: Add/delete Security Policy Database entry
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define ipsec_spd_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief IPsec: Add/delete SPD from interface

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add security mode if non-zero, else delete
    @param sw_if_index - index of the interface
    @param spd_id - SPD instance id to use for lookups
*/


define ipsec_interface_add_del_spd {
    u32 client_index;
    u32 context;

    u8 is_add;
    u32 sw_if_index;
    u32 spd_id;
};

/** \brief Reply for IPsec: Add/delete SPD from interface
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define ipsec_interface_add_del_spd_reply {
    u32 context;
    i32 retval;
};

/** \brief IPsec: Add/delete Security Policy Database entry

    See RFC 4301, 4.4.1.1 on how to match packet to selectors

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add SPD if non-zero, else delete
    @param spd_id - SPD instance id (control plane allocated)
    @param priority - priority of SPD entry (non-unique value).  Used to order SPD matching - higher priorities match before lower
    @param is_outbound - entry applies to outbound traffic if non-zero, otherwise applies to inbound traffic
    @param is_ipv6 - remote/local address are IPv6 if non-zero, else IPv4
    @param remote_address_start - start of remote address range to match
    @param remote_address_stop - end of remote address range to match
    @param local_address_start - start of local address range to match
    @param local_address_stop - end of local address range to match
    @param protocol - protocol type to match [0 means any]
    @param remote_port_start - start of remote port range to match ...
    @param remote_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
    @param local_port_start - start of local port range to match ...
    @param local_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
    @param policy - 0 = bypass (no IPsec processing), 1 = discard (discard packet with ICMP processing), 2 = resolve (send request to control plane for SA resolving, and discard without ICMP processing), 3 = protect (apply IPsec policy using following parameters)
    @param sa_id - SAD instance id (control plane allocated)

*/

define ipsec_spd_add_del_entry {
    u32 client_index;
    u32 context;
    u8 is_add;

    u32 spd_id;
    i32 priority;
    u8 is_outbound;

    // Selector
    u8 is_ipv6;
    u8 is_ip_any;
    u8 remote_address_start[16];
    u8 remote_address_stop[16];
    u8 local_address_start[16];
    u8 local_address_stop[16];

    u8 protocol;

    u16 remote_port_start;
    u16 remote_port_stop;
    u16 local_port_start;
    u16 local_port_stop;

    // Policy
    u8 policy;
    u32 sa_id;
};

/** \brief Reply for IPsec: Add/delete Security Policy Database entry
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define ipsec_spd_add_del_entry_reply {
    u32 context;
    i32 retval;
};

/** \brief IPsec: Add/delete Security Association Database entry
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add SAD entry if non-zero, else delete

    @param sad_id - sad id

    @param spi - security parameter index

    @param protocol - 0 = AH, 1 = ESP

    @param crypto_algorithm - 0 = Null, 1 = AES-CBC-128, 2 = AES-CBC-192, 3 = AES-CBC-256, 4 = 3DES-CBC
    @param crypto_key_length - length of crypto_key in bytes
    @param crypto_key - crypto keying material

    @param integrity_algorithm - 0 = None, 1 = MD5-96, 2 = SHA1-96, 3 = SHA-256, 4 = SHA-384, 5=SHA-512
    @param integrity_key_length - length of integrity_key in bytes
    @param integrity_key - integrity keying material

    @param use_extended_sequence_number - use ESN when non-zero

    @param is_tunnel - IPsec tunnel mode if non-zero, else transport mode
    @param is_tunnel_ipv6 - IPsec tunnel mode is IPv6 if non-zero, else IPv4 tunnel only valid if is_tunnel is non-zero
    @param tunnel_src_address - IPsec tunnel source address IPv6 if is_tunnel_ipv6 is non-zero, else IPv4. Only valid if is_tunnel is non-zero
    @param tunnel_dst_address - IPsec tunnel destination address IPv6 if is_tunnel_ipv6 is non-zero, else IPv4. Only valid if is_tunnel is non-zero

    To be added:
     Anti-replay
     IPsec tunnel address copy mode (to support GDOI)
 */

define ipsec_sad_add_del_entry {
    u32 client_index;
    u32 context;
    u8 is_add;

    u32 sad_id;

    u32 spi;

    u8 protocol;

    u8 crypto_algorithm;
    u8 crypto_key_length;
    u8 crypto_key[128];

    u8 integrity_algorithm;
    u8 integrity_key_length;
    u8 integrity_key[128];

    u8 use_extended_sequence_number;

    u8 is_tunnel;
    u8 is_tunnel_ipv6;
    u8 tunnel_src_address[16];
    u8 tunnel_dst_address[16];
};

/** \brief Reply for IPsec: Add/delete Security Association Database entry
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define ipsec_sad_add_del_entry_reply {
    u32 context;
    i32 retval;
};

/** \brief IPsec: Update Security Association keys
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param sa_id - sa id

    @param crypto_key_length - length of crypto_key in bytes
    @param crypto_key - crypto keying material

    @param integrity_key_length - length of integrity_key in bytes
    @param integrity_key - integrity keying material
*/

define ipsec_sa_set_key {
    u32 client_index;
    u32 context;

    u32 sa_id;

    u8 crypto_key_length;
    u8 crypto_key[128];

    u8 integrity_key_length;
    u8 integrity_key[128];
};

/** \brief Reply for IPsec: Update Security Association keys
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define ipsec_sa_set_key_reply {
    u32 context;
    i32 retval;
};

/** \brief IKEv2: Add/delete profile
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param name - IKEv2 profile name
    @param is_add - Add IKEv2 profile if non-zero, else delete
*/
define ikev2_profile_add_del {
    u32 client_index;
    u32 context;

    u8 name[64];
    u8 is_add;
};

/** \brief Reply for IKEv2: Add/delete profile
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ikev2_profile_add_del_reply {
    u32 context;
    i32 retval;
};

/** \brief IKEv2: Set IKEv2 profile authentication method
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param name - IKEv2 profile name
    @param auth_method - IKEv2 authentication method (shared-key-mic/rsa-sig)
    @param is_hex - Authentication data in hex format if non-zero, else string
    @param data_len - Authentication data length
    @param data - Authentication data (for rsa-sig cert file path)
*/
define ikev2_profile_set_auth {
    u32 client_index;
    u32 context;

    u8 name[64];
    u8 auth_method;
    u8 is_hex;
    u32 data_len;
    u8 data[0];
};

/** \brief Reply for IKEv2: Set IKEv2 profile authentication method
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ikev2_profile_set_auth_reply {
    u32 context;
    i32 retval;
};

/** \brief IKEv2: Set IKEv2 profile local/remote identification
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param name - IKEv2 profile name
    @param is_local - Identification is local if non-zero, else remote
    @param id_type - Identification type
    @param data_len - Identification data length
    @param data - Identification data
*/
define ikev2_profile_set_id {
    u32 client_index;
    u32 context;

    u8 name[64];
    u8 is_local;
    u8 id_type;
    u32 data_len;
    u8 data[0];
};

/** \brief Reply for IKEv2:
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ikev2_profile_set_id_reply {
    u32 context;
    i32 retval;
};

/** \brief IKEv2: Set IKEv2 profile traffic selector parameters
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param name - IKEv2 profile name
    @param is_local - Traffic selector is local if non-zero, else remote
    @param proto - Traffic selector IP protocol (if zero not relevant)
    @param start_port - The smallest port number allowed by traffic selector
    @param end_port - The largest port number allowed by traffic selector
    @param start_addr - The smallest address included in traffic selector
    @param end_addr - The largest address included in traffic selector
*/
define ikev2_profile_set_ts {
    u32 client_index;
    u32 context;

    u8 name[64];
    u8 is_local;
    u8 proto;
    u16 start_port;
    u16 end_port;
    u32 start_addr;
    u32 end_addr;
};

/** \brief Reply for IKEv2: Set IKEv2 profile traffic selector parameters
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ikev2_profile_set_ts_reply {
    u32 context;
    i32 retval;
};

/** \brief IKEv2: Set IKEv2 local RSA private key
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request

    @param key_file - Key file absolute path
*/
define ikev2_set_local_key {
    u32 client_index;
    u32 context;

    u8 key_file[256];
};

/** \brief Reply for IKEv2: Set IKEv2 local key
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define ikev2_set_local_key_reply {
    u32 context;
    i32 retval;
};

/** \brief Tell client about a DHCP completion event
    @param client_index - opaque cookie to identify the sender
    @param pid - client pid registered to receive notification
    @param is_ipv6 - if non-zero the address is ipv6, else ipv4
    @param host_address - Host IP address
    @param router_address - Router IP address
    @param host_mac - Host MAC address
*/
define dhcp_compl_event {
    u32 client_index;
    u32 pid;
    u8 hostname[64];
    u8 is_ipv6;
    u8 host_address[16];
    u8 router_address[16];
    u8 host_mac[6];
};

/** \brief Add MAP domains
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param ip6_prefix - Rule IPv6 prefix
    @param ip4_prefix - Rule IPv4 prefix
    @param ip6_src - MAP domain IPv6 BR address / Tunnel source
    @param ip6_prefix_len - Rule IPv6 prefix length
    @param ip4_prefix_len - Rule IPv4 prefix length
    @param ea_bits_len - Embedded Address bits length
    @param psid_offset - Port Set Identifider (PSID) offset
    @param psid_length - PSID length
    @param is_translation - MAP-E / MAP-T
    @param mtu - MTU
*/
define map_add_domain {
  u32 client_index;
  u32 context;
  u8 ip6_prefix[16];
  u8 ip4_prefix[4];
  u8 ip6_src[16];
  u8 ip6_prefix_len;
  u8 ip4_prefix_len;
  u8 ip6_src_prefix_len;
  u8 ea_bits_len;
  u8 psid_offset;
  u8 psid_length;
  u8 is_translation;
  u16 mtu;
};

/** \brief Reply for MAP domain add
    @param context - returned sender context, to match reply w/ request
    @param index - MAP domain index
    @param retval - return code
*/
define map_add_domain_reply {
  u32 context;
  u32 index;
  i32 retval;
};

/** \brief Delete MAP domain
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param index - MAP Domain index
*/
define map_del_domain {
  u32 client_index;
  u32 context;
  u32 index;
};

/** \brief Reply for MAP domain del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define map_del_domain_reply {
  u32 context;
  i32 retval;
};

/** \brief Add or Delete MAP rule from a domain (Only used for shared IPv4 per subscriber)
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param index - MAP Domain index
    @param is_add - If 1 add rule, if 0 delete rule
    @param ip6_dst - MAP CE IPv6 address
    @param psid - Rule PSID
*/
define map_add_del_rule {
  u32 client_index;
  u32 context;
  u32 index;
  u32 is_add;
  u8 ip6_dst[16];
  u16 psid;
};

/** \brief Reply for MAP rule add/del
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define map_add_del_rule_reply {
  u32 context;
  i32 retval;
};

/** \brief Get list of map domains
    @param client_index - opaque cookie to identify the sender
*/
define map_domain_dump {
  u32 client_index;
  u32 context;
};

define map_domain_details {
  u32 context;
  u32 domain_index;
  u8 ip6_prefix[16];
  u8 ip4_prefix[4];
  u8 ip6_src[16];
  u8 ip6_prefix_len;
  u8 ip4_prefix_len;
  u8 ip6_src_len;
  u8 ea_bits_len;
  u8 psid_offset;
  u8 psid_length;
  u8 flags;
  u16 mtu;
  u8 is_translation;
};

define map_rule_dump {
  u32 client_index;
  u32 context;
  u32 domain_index;
};

define map_rule_details {
  u32 context;
  u8 ip6_dst[16];
  u16 psid;
};

/** \brief Request for a single block of summary stats
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define map_summary_stats {
    u32 client_index;
    u32 context;
};

/** \brief Reply for map_summary_stats request
    @param context - sender context, to match reply w/ request
    @param retval - return code for request
    @param total_bindings -  
    @param total_pkts -  
    @param total_ip4_fragments -
    @param total_security_check - 
*/
define map_summary_stats_reply {
    u32 context;
    i32 retval;
    u64 total_bindings;
    u64 total_pkts[2];
    u64 total_bytes[2];
    u64 total_ip4_fragments;
    u64 total_security_check[2];
};

/** \brief cop: enable/disable junk filtration features on an interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_inded - desired interface
    @param enable_disable - 1 => enable, 0 => disable
*/

define cop_interface_enable_disable {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u8 enable_disable;
};

/** \brief cop: interface enable/disable junk filtration reply
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define cop_interface_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief cop: enable/disable whitelist filtration features on an interface
    Note: the supplied fib_id must match in order to remove the feature!
    
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface handle, physical interfaces only
    @param fib_id - fib identifier for the whitelist / blacklist fib
    @param ip4 - 1 => enable ip4 filtration, 0=> disable ip4 filtration
    @param ip6 - 1 => enable ip6 filtration, 0=> disable ip6 filtration
    @param default_cop -  1 => enable non-ip4, non-ip6 filtration 0=> disable it
*/

define cop_whitelist_enable_disable {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 fib_id;
    u8 ip4;
    u8 ip6;
    u8 default_cop;
};

/** \brief cop: interface enable/disable junk filtration reply
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/

define cop_whitelist_enable_disable_reply {
    u32 context;
    i32 retval;
};

/** \brief get_node_graph - get a copy of the vpp node graph
    including the current set of graph arcs.

    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/

define get_node_graph {
    u32 client_index;
    u32 context;
};

/** \brief get_node_graph_reply
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
    @param reply_in_shmem - result from vlib_node_serialize, in shared
    memory. Process with vlib_node_unserialize, remember to switch
    heaps and free the result.
*/

define get_node_graph_reply {
    u32 context;
    i32 retval;
    u64 reply_in_shmem;
};

/** \brief Clear interface statistics
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface to clear statistics
*/
define sw_interface_clear_stats {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

/** \brief Reply to sw_interface_clear_stats 
    @param context - sender context which was passed in the request
    @param retval - return code of the set flags request
*/
define sw_interface_clear_stats_reply {
    u32 context;
    i32 retval;
};

/** \brief IOAM Trace : Set TRACE profile
    @param id - profile id
    @param trace_type - Trace type
    @param trace_num_elt - Number of nodes in trace path
    @param trace_ppc - Trace PPC (none/encap/decap)
    @param trace_tsp - Trace timestamp precision (0-sec,1-ms,2-us,3-ns)
    @param trace_app_data - Trace application data, can be any 4 bytes
    @param pow_enable - Proof of Work enabled or not flag
    @param node_id - Id of this node
*/
define trace_profile_add {
  u32 client_index;
  u32 context;
  u16 id;
  u8  trace_type;
  u8  trace_num_elt;
  u8  trace_ppc;
  u8  trace_tsp;
  u32 trace_app_data;
  u8  pow_enable;
  u32 node_id;
};

/** \brief Trace profile add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define trace_profile_add_reply {
    u32 context;
    i32 retval;
};

/** \brief IOAM Trace enable trace profile for a flow
    @param id - id of the trace profile to be applied
    @param dest_ipv6 - Destination IPv6 address
    @param prefix_length - prefix mask
    @param vrf_id - VRF ID
    @param trace_op - Trace operation (add/mod/del)
    @param enable - apply/remove the trace profile for the flow
*/
define trace_profile_apply {
  u32 client_index;
  u32 context;
  u16 id;
  u8 dest_ipv6[16];
  u32 prefix_length;
  u32 vrf_id;
  u8 trace_op;
  u8 enable;
};

/** \brief Trace profile apply response
    @param context - sender context, to match reply w/ request   
    @param retval - return value for request
*/
define trace_profile_apply_reply {
  u32 context;
  i32 retval;
};

/** \brief Delete Trace Profile 
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param index - MAP Domain index
*/
define trace_profile_del {
  u32 client_index;
  u32 context;
  u16 id;
};

/** \brief Trace profile add / del response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define trace_profile_del_reply {
    u32 context;
    i32 retval;
};

/** \brief Create host-interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param host_if_name - interface name
    @param hw_addr - interface MAC
    @param use_random_hw_addr - use random generated MAC
*/
define af_packet_create {
    u32 client_index;
    u32 context;

    u8 host_if_name[64];
    u8 hw_addr[6];
    u8 use_random_hw_addr;
};

/** \brief Create host-interface response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define af_packet_create_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief Delete host-interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param host_if_name - interface name
*/
define af_packet_delete {
    u32 client_index;
    u32 context;

    u8 host_if_name[64];
};

/** \brief Delete host-interface response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define af_packet_delete_reply {
    u32 context;
    i32 retval;
};

/** \brief Add/del policer
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_add - add policer if non-zero, else delete
    @param name - policer name
    @param cir - CIR
    @param eir - EIR
    @param cb - Committed Burst
    @param eb - Excess or Peak Burst
    @param rate_type - rate type
    @param round_type - rounding type
    @param type - policer algorithm
    @param color_aware - 0=color-blind, 1=color-aware
    @param conform_action_type - conform action type
    @param conform_dscp - DSCP for conform mar-and-transmit action
    @param exceed_action_type - exceed action type
    @param exceed_dscp - DSCP for exceed mar-and-transmit action
    @param violate_action_type - violate action type
    @param violate_dscp - DSCP for violate mar-and-transmit action
*/
define policer_add_del {
    u32 client_index;
    u32 context;

    u8 is_add;
    u8 name[64];
    u32 cir;
    u32 eir;
    u64 cb;
    u64 eb;
    u8 rate_type;
    u8 round_type;
    u8 type;
    u8 color_aware;
    u8 conform_action_type;
    u8 conform_dscp;
    u8 exceed_action_type;
    u8 exceed_dscp;
    u8 violate_action_type;
    u8 violate_dscp;
};

/** \brief Add/del policer response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
    @param policer_index - for add, returned index of the new policer
*/
define policer_add_del_reply {
    u32 context;
    i32 retval;
    u32 policer_index;
};

/** \brief Get list of policers
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param match_name_valid - if 0 request all policers otherwise use match_name
    @param match_name - policer name
*/
define policer_dump {
    u32 client_index;
    u32 context;

    u8 match_name_valid;
    u8 match_name[64];
};

/** \brief Policer operational state response.
    @param context - sender context, to match reply w/ request
    @param name - policer name
    @param cir - CIR
    @param eir - EIR
    @param cb - Committed Burst
    @param eb - Excess or Peak Burst
    @param rate_type - rate type
    @param round_type - rounding type
    @param type - policer algorithm
    @param conform_action_type - conform action type
    @param conform_dscp - DSCP for conform mar-and-transmit action
    @param exceed_action_type - exceed action type
    @param exceed_dscp - DSCP for exceed mar-and-transmit action
    @param violate_action_type - violate action type
    @param violate_dscp - DSCP for violate mar-and-transmit action
    @param single_rate - 1 = single rate policer, 0 = two rate policer
    @param color_aware - for hierarchical policing
    @param scale - power-of-2 shift amount for lower rates
    @param cir_tokens_per_period - number of tokens for each period
    @param pir_tokens_per_period - number of tokens for each period for 2-rate policer
    @param current_limit - current limit
    @param current_bucket - current bucket
    @param extended_limit - extended limit
    @param extended_bucket - extended bucket
    @param last_update_time - last update time
*/
define policer_details {
    u32 context;

    u8 name[64];
    u32 cir;
    u32 eir;
    u64 cb;
    u64 eb;
    u8 rate_type;
    u8 round_type;
    u8 type;
    u8 conform_action_type;
    u8 conform_dscp;
    u8 exceed_action_type;
    u8 exceed_dscp;
    u8 violate_action_type;
    u8 violate_dscp;
    u8 single_rate;
    u8 color_aware;
    u32 scale;
    u32 cir_tokens_per_period;
    u32 pir_tokens_per_period;
    u32 current_limit;
    u32 current_bucket;
    u32 extended_limit;
    u32 extended_bucket;
    u64 last_update_time;
};

/** \brief Set/unset policer classify interface
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - interface to set/unset policer classify
    @param ip4_table_index - ip4 classify table index (~0 for skip)
    @param ip6_table_index - ip6 classify table index (~0 for skip)
    @param l2_table_index  -  l2 classify table index (~0 for skip)
    @param is_add - Set if non-zero, else unset
    Note: User is recommeneded to use just one valid table_index per call.
          (ip4_table_index, ip6_table_index, or l2_table_index)
*/
define policer_classify_set_interface {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
    u32 ip4_table_index;
    u32 ip6_table_index;
    u32 l2_table_index;
    u8  is_add;
};

/** \brief Set/unset policer classify interface response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define policer_classify_set_interface_reply {
    u32 context;
    i32 retval;
};

/** \brief Get list of policer classify interfaces and tables
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param type - classify table type
*/
define policer_classify_dump {
    u32 client_index;
    u32 context;
    u8 type;
};

/** \brief Policer iclassify operational state response.
    @param context - sender context, to match reply w/ request
    @param sw_if_index - software interface index
    @param table_index - classify table index
*/
define policer_classify_details {
    u32 context;
    u32 sw_if_index;
    u32 table_index;
};

/** \brief Create netmap
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param netmap_if_name - interface name
    @param hw_addr - interface MAC
    @param use_random_hw_addr - use random generated MAC
    @param is_pipe - is pipe
    @param is_master - 0=slave, 1=master
*/
define netmap_create {
    u32 client_index;
    u32 context;

    u8 netmap_if_name[64];
    u8 hw_addr[6];
    u8 use_random_hw_addr;
    u8 is_pipe;
    u8 is_master;
};

/** \brief Create netmap response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define netmap_create_reply {
    u32 context;
    i32 retval;
};

/** \brief Delete netmap
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param netmap_if_name - interface name
*/
define netmap_delete {
    u32 client_index;
    u32 context;

    u8 netmap_if_name[64];
};

/** \brief Delete netmap response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define netmap_delete_reply {
    u32 context;
    i32 retval;
};

/** \brief Dump mpls gre tunnel table
    @param client_index - opaque cookie to identify the sender
    @param tunnel_index - gre tunnel identifier or -1 in case of all tunnels
*/
define mpls_gre_tunnel_dump {
    u32 client_index;
    u32 context;
    i32 tunnel_index;
};

/** \brief mpls gre tunnel operational state response
    @param tunnel_index - gre tunnel identifier
    @param intfc_address - interface ipv4 addr
    @param mask_width - interface ipv4 addr mask
    @param hw_if_index - interface id
    @param l2_only -
    @param tunnel_src - tunnel source ipv4 addr
    @param tunnel_dst - tunnel destination ipv4 addr
    @param outer_fib_index - gre tunnel identifier
    @param encap_index - reference to mpls label table
    @param nlabels - number of resolved labels
    @param labels - resolved labels
*/
define mpls_gre_tunnel_details {
    u32 context;
    u32 tunnel_index;

    u32 intfc_address;
    u32 inner_fib_index;
    u32 mask_width;
    u32 encap_index;
    u32 hw_if_index;
    u8  l2_only;
    u32 tunnel_src;
    u32 tunnel_dst;
    u32 outer_fib_index;
    u32 nlabels;
    u32 labels[0];
};

/** \brief Dump mpls eth tunnel table
    @param client_index - opaque cookie to identify the sender
    @param tunnel_index - eth tunnel identifier or -1 in case of all tunnels
*/
define mpls_eth_tunnel_dump {
    u32 client_index;
    u32 context;
    i32 tunnel_index;
};

/** \brief mpls eth tunnel operational state response
    @param tunnel_index - eth tunnel identifier
    @param intfc_address - interface ipv4 addr
    @param mask_width - interface ipv4 addr mask
    @param hw_if_index - interface id
    @param l2_only -
    @param tunnel_dst_mac -
    @param tx_sw_if_index -
    @param encap_index - reference to mpls label table
    @param nlabels - number of resolved labels
    @param labels - resolved labels
*/
define mpls_eth_tunnel_details {
    u32 context;
    u32 tunnel_index;

    u32 intfc_address;
    u32 inner_fib_index;
    u32 mask_width;
    u32 encap_index;
    u32 hw_if_index;
    u8  l2_only;
    u8  tunnel_dst_mac[6];
    u32 tx_sw_if_index;
    u32 nlabels;
    u32 labels[0];
};

/** \brief Dump mpls fib table
    @param client_index - opaque cookie to identify the sender
    @param fib_index    - mpls fib entry identifier or -1 in case of all entries
*/
define mpls_fib_encap_dump {
    u32 client_index;
    u32 context;
};

/** \brief mpls fib encap table response
    @param fib_index - fib table id
    @param dest - destination ipv4 addr
    @param s_bit -
    @param entry_index - reference to mpls label table
    @param nlabels - number of resolved labels
    @param labels - resolved labels
*/
define mpls_fib_encap_details {
    u32 context;

    u32 fib_index;
    u32 entry_index;
    u32 dest;
    u32 s_bit;
    u32 nlabels;
    u32 labels[0];
};

/** \brief Dump mpls fib decap table
    @param client_index - opaque cookie to identify the sender
    @param fib_index    - mpls fib entry identifier or -1 in case of all entries
*/
define mpls_fib_decap_dump {
    u32 client_index;
    u32 context;
};

/** \brief mpls fib decap table response
    @param fib_index - fib table id
    @param entry_index - reference to mpls label table
    @param dest - destination ipv4 addr
    @param s_bit -
    @param label - mpls labels
    @param rx_table_id - rx fib id
    @param tx_table_id - tx fib id
    @param swif_tag -
*/
define mpls_fib_decap_details {
    u32 context;

    u32 fib_index;
    u32 entry_index;
    u32 dest;
    u32 s_bit;
    u32 label;
    u32 rx_table_id;
    u32 tx_table_id;
    u8  swif_tag[8];
};

/** \brief Classify get table IDs request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define classify_table_ids {
    u32 client_index;
    u32 context;
};

/** \brief Reply for classify get table IDs request
    @param context - sender context which was passed in the request
    @param count - number of ids returned in response
    @param ids - array of classify table ids
*/
define classify_table_ids_reply {
    u32 context;
    i32 retval;
    u32 count;
    u32 ids[count];
};

/** \brief Classify table ids by interface index request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param sw_if_index - index of the interface
*/
define classify_table_by_interface {
    u32 client_index;
    u32 context;
    u32 sw_if_index;
};

/** \brief Reply for classify table id by interface index request
    @param context - sender context which was passed in the request
    @param count - number of ids returned in response
    @param sw_if_index - index of the interface
    @param l2_table_id - l2 classify table index
    @param ip4_table_id - ip4 classify table index
    @param ip6_table_id - ip6 classify table index
*/
define classify_table_by_interface_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
    u32 l2_table_id;
    u32 ip4_table_id;
    u32 ip6_table_id;
};

/** \brief Classify table info
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table_id - classify table index
*/
define classify_table_info {
    u32 client_index;
    u32 context;
    u32 table_id;
};

/** \brief Reply for classify table info request
    @param context - sender context which was passed in the request
    @param count - number of ids returned in response
    @param table_id - classify table index
    @param nbuckets - number of buckets when adding a table
    @param match_n_vectors - number of match vectors
    @param skip_n_vectors - number of skip_n_vectors
    @param active_sessions - number of sessions (active entries)
    @param next_table_index - index of next table
    @param miss_next_index - index of miss table
    @param mask[] - match mask
*/
define classify_table_info_reply {
    u32 context;
    i32 retval;
    u32 table_id;
    u32 nbuckets;
    u32 match_n_vectors;
    u32 skip_n_vectors;
    u32 active_sessions;
    u32 next_table_index;
    u32 miss_next_index;
    u32 mask_length;
    u8  mask[mask_length];
};

/** \brief Classify sessions dump request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param table_id - classify table index
*/
define classify_session_dump {
    u32 client_index;
    u32 context;
    u32 table_id;
};

/** \brief Reply for classify table session dump request
    @param context - sender context which was passed in the request
    @param count - number of ids returned in response
    @param table_id - classify table index
    @param hit_next_index - hit_next_index of session
    @param opaque_index - for add, opaque_index of session
    @param advance - advance value of session
    @param match[] - match value for session
*/ 
define classify_session_details {
    u32 context;
    i32 retval;
    u32 table_id;
    u32 hit_next_index;
    i32 advance;
    u32 opaque_index;
    u32 match_length;
    u8 match[match_length];
};

/** \brief Enable and configure IPFIX exporter process request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param collector_address - address of IPFIX collector
    @param collector_port - port of IPFIX IPFIX collector
    @param src_address - address of IPFIX exporter
    @param vrf_id - VRF / fib table ID
    @param path_mtu - Path MTU between exporter and collector
    @param template_interval - number of seconds after which to resend template
*/
define ipfix_enable {
    u32 client_index;
    u32 context;
    u8 collector_address[16];
    u16 collector_port;
    u8 src_address[16];
    u32 vrf_id;
    u32 path_mtu;
    u32 template_interval;
};

/** \brief Reply to IPFIX enable and configure request
    @param context - sender context which was passed in the request
*/
define ipfix_enable_reply {
    u32 context;
    i32 retval;
};

/** \brief IPFIX dump request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
*/
define ipfix_dump {
    u32 client_index;
    u32 context;
};

/** \brief Reply to IPFIX dump request
    @param context - sender context which was passed in the request
    @param collector_address - address of IPFIX collector
    @param collector_port - port of IPFIX IPFIX collector
    @param src_address - address of IPFIX exporter
    @param fib_index - fib table index
    @param path_mtu - Path MTU between exporter and collector
    @param template_interval - number of seconds after which to resend template
*/
define ipfix_details {
    u32 context;
    u8 collector_address[16];
    u16 collector_port;
    u8 src_address[16];
    u32 fib_index;
    u32 path_mtu;
    u32 template_interval;
};

/** \brief Query relative index via node names
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param node_name - name of node to find relative index from
    @param next_name - next node from node_name to find relative index of
*/
define get_next_index {
    u32 client_index;
    u32 context;
    u8 node_name[64];
    u8 next_name[64];
};

/** \brief Reply for get next node index
    @param context - sender context which was passed in the request
    @param retval - return value
    @param next_index - index of the next_node
*/
define get_next_index_reply {
    u32 context;
    i32 retval;
    u32 next_index;
};

/** \brief PacketGenerator create interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param interface_id - interface index
*/
define pg_create_interface {
    u32 client_index;
    u32 context;
    u32 interface_id;
};

/** \brief PacketGenerator create interface response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define pg_create_interface_reply {
    u32 context;
    i32 retval;
    u32 sw_if_index;
};

/** \brief PacketGenerator capture packets on given interface request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param interface_id - pg interface index
    @param is_enabled - 1 if enabling streams, 0 if disabling
    @param count - number of packets to be captured
    @param pcap_file - pacp file name to store captured packets
*/
define pg_capture {
    u32 client_index;
    u32 context;
    u32 interface_id;
    u8  is_enabled;
    u32 count;
    u32 pcap_name_length;
    u8  pcap_file_name[pcap_name_length];
};

/** \brief PacketGenerator capture packets response
    @param context - sender context, to match reply w/ request
    @param retval - return value for request
*/
define pg_capture_reply {
    u32 context;
    i32 retval;
};

/** \brief Enable / disable packet generator request
    @param client_index - opaque cookie to identify the sender
    @param context - sender context, to match reply w/ request
    @param is_enabled - 1 if enabling streams, 0 if disabling
    @param stream - stream name to be enable/disabled, if not specified handle all streams 
*/
define pg_enable_disable {
    u32 client_index;
    u32 context;
    u8  is_enabled;
    u32 stream_name_length;
    u8  stream_name[stream_name_length];
};

/** \brief Reply for enable / disable packet generator
    @param context - returned sender context, to match reply w/ request
    @param retval - return code
*/
define pg_enable_disable_reply {
    u32 context;
    i32 retval;
};