1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 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 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216
|
<?xml version="1.0" encoding="utf-8"?>
<database name="ovs-vswitchd.conf.db" title="Open vSwitch Configuration Database">
<p>
A database with this schema holds the configuration for one Open
vSwitch daemon. The top-level configuration for the daemon is the
<ref table="Open_vSwitch"/> table, which must have exactly one
record. Records in other tables are significant only when they
can be reached directly or indirectly from the <ref
table="Open_vSwitch"/> table. Records that are not reachable from
the <ref table="Open_vSwitch"/> table are automatically deleted
from the database, except for records in a few distinguished
``root set'' tables.
</p>
<h2>Common Columns</h2>
<p>
Most tables contain two special columns, named <code>other_config</code>
and <code>external_ids</code>. These columns have the same form and
purpose each place that they appear, so we describe them here to save space
later.
</p>
<dl>
<dt><code>other_config</code>: map of string-string pairs</dt>
<dd>
<p>
Key-value pairs for configuring rarely used features. Supported keys,
along with the forms taken by their values, are documented individually
for each table.
</p>
<p>
A few tables do not have <code>other_config</code> columns because no
key-value pairs have yet been defined for them.
</p>
</dd>
<dt><code>external_ids</code>: map of string-string pairs</dt>
<dd>
Key-value pairs for use by external frameworks that integrate with Open
vSwitch, rather than by Open vSwitch itself. System integrators should
either use the Open vSwitch development mailing list to coordinate on
common key-value definitions, or choose key names that are likely to be
unique. In some cases, where key-value pairs have been defined that are
likely to be widely useful, they are documented individually for each
table.
</dd>
</dl>
<table name="Open_vSwitch" title="Open vSwitch configuration.">
Configuration for an Open vSwitch daemon. There must be exactly
one record in the <ref table="Open_vSwitch"/> table.
<group title="Configuration">
<column name="datapaths">
Map of datapath types to datapaths. The
<ref column="datapath_type"/> column of the <ref table="Bridge"/>
table is used as a key for this map. The value points to a row in
the <ref table="Datapath"/> table.
</column>
<column name="bridges">
Set of bridges managed by the daemon.
</column>
<column name="ssl">
SSL/TLS used globally by the daemon.
</column>
<column name="external_ids" key="system-id">
A unique identifier for the Open vSwitch's physical host.
The form of the identifier depends on the type of the host.
</column>
<column name="external_ids" key="hostname">
The hostname for the host running Open vSwitch. This is a fully
qualified domain name since version 2.6.2.
</column>
<column name="external_ids" key="rundir">
In Open vSwitch 2.8 and later, the run directory of the running Open
vSwitch daemon. This directory is used for runtime state such as
control and management sockets. The value of <ref
column="other_config" key="vhost-sock-dir"/> is relative to this
directory.
</column>
<column name="other_config" key="stats-update-interval"
type='{"type": "integer", "minInteger": 5000}'>
<p>
Interval for updating statistics to the database, in milliseconds.
This option will affect the update of the <code>statistics</code>
column in the following tables: <code>Port</code>, <code>Interface
</code>, <code>Mirror</code>.
</p>
<p>
Default value is 5000 ms.
</p>
<p>
Getting statistics more frequently can be achieved via OpenFlow.
</p>
</column>
<column name="other_config" key="flow-restore-wait"
type='{"type": "boolean"}'>
<p>
When <code>ovs-vswitchd</code> starts up, it has an empty flow table
and therefore it handles all arriving packets in its default fashion
according to its configuration, by dropping them or sending them to
an OpenFlow controller or switching them as a standalone switch.
This behavior is ordinarily desirable. However, if
<code>ovs-vswitchd</code> is restarting as part of a ``hot-upgrade,''
then this leads to a relatively long period during which packets are
mishandled.
</p>
<p>
This option allows for improvement. When <code>ovs-vswitchd</code>
starts with this value set as <code>true</code>, it will neither
flush or expire previously set datapath flows nor will it send and
receive any packets to or from the datapath. When this value is
later set to <code>false</code>, <code>ovs-vswitchd</code> will
start receiving packets from the datapath and re-setup the flows.
</p>
<p>
Additionally, <code>ovs-vswitchd</code> is prevented from connecting
to controllers when this value is set to <code>true</code>. This
prevents controllers from making changes to the flow table in the
middle of flow restoration, which could result in undesirable
intermediate states. Once this value has been set to
<code>false</code> and the desired flow state has been
restored, <code>ovs-vswitchd</code> will be able to reconnect to
controllers and process any new flow table modifications.
</p>
<p>
Thus, with this option, the procedure for a hot-upgrade of
<code>ovs-vswitchd</code> becomes roughly the following:
</p>
<ol>
<li>
Stop <code>ovs-vswitchd</code>.
</li>
<li>
Set <ref column="other_config" key="flow-restore-wait"/>
to <code>true</code>.
</li>
<li>
Start <code>ovs-vswitchd</code>.
</li>
<li>
Use <code>ovs-ofctl</code> (or some other program, such as an
OpenFlow controller) to restore the OpenFlow flow table
to the desired state.
</li>
<li>
Set <ref column="other_config" key="flow-restore-wait"/>
to <code>false</code> (or remove it entirely from the database).
</li>
</ol>
<p>
The <code>ovs-ctl</code>'s ``restart'' and ``force-reload-kmod''
functions use the above config option during hot upgrades.
</p>
</column>
<column name="other_config" key="flow-limit"
type='{"type": "integer", "minInteger": 0}'>
<p>
The maximum
number of flows allowed in the datapath flow table. Internally OVS
will choose a flow limit which will likely be lower than this number,
based on real time network conditions. Tweaking this value is
discouraged unless you know exactly what you're doing.
</p>
<p>
The default is 200000.
</p>
</column>
<column name="other_config" key="max-idle"
type='{"type": "integer", "minInteger": 500}'>
<p>
The maximum time (in ms) that idle flows will remain cached in the
datapath. Internally OVS will check the validity and activity for
datapath flows regularly and may expire flows quicker than this
number, based on real time network conditions. Tweaking this
value is discouraged unless you know exactly what you're doing.
</p>
<p>
The default is 10000.
</p>
</column>
<column name="other_config" key="max-revalidator"
type='{"type": "integer", "minInteger": 100}'>
<p>
The maximum time (in ms) that revalidator threads will wait before
executing flow revalidation. Note that this is maximum allowed value.
Actual timeout used by OVS is minimum of max-idle and max-revalidator
values. Tweaking this value is discouraged unless you know exactly
what you're doing.
</p>
<p>
The default is 500.
</p>
</column>
<column name="other_config" key="min-revalidate-pps"
type='{"type": "integer", "minInteger": 0}'>
<p>
Set minimum pps that flow must have in order to be revalidated when
revalidation duration exceeds half of max-revalidator config variable.
Setting to 0 means always revalidate flows regardless of pps.
</p>
<p>
The default is 5.
</p>
</column>
<column name="other_config" key="offloaded-stats-delay"
type='{"type": "integer", "minInteger": 0}'>
<p>
Set worst case delay (in ms) it might take before statistics of
offloaded flows are updated. Offloaded flows younger than this
delay will always be revalidated regardless of
<ref column="other_config" key="min-revalidate-pps"/>.
</p>
<p>
The default is 2000.
</p>
</column>
<column name="other_config" key="hw-offload"
type='{"type": "boolean"}'>
<p>
Set this value to <code>true</code> to enable netdev flow offload.
</p>
<p>
The default value is <code>false</code>. Changing this value requires
restarting the daemon
</p>
<p>
Currently Open vSwitch supports hardware offloading on
Linux systems. On other systems, this value is ignored.
This functionality is considered 'experimental'. Depending
on which OpenFlow matches and actions are configured,
which kernel version is used, and what hardware is
available, Open vSwitch may not be able to offload
functionality to hardware.
</p>
<p>
In order to dump HW offloaded flows use
<code>ovs-appctl dpctl/dump-flows</code>, <code>ovs-dpctl</code>
doesn't support this functionality. See ovs-vswitchd(8) for details.
</p>
</column>
<column name="other_config" key="n-offload-threads"
type='{"type": "integer", "minInteger": 1, "maxInteger": 10}'>
<p>
Set this value to the number of threads created to manage hardware
offloads.
</p>
<p>
The default value is <code>1</code>. Changing this value requires
restarting the daemon.
</p>
<p>
This is only relevant for userspace datapath and only if
<ref column="other_config" key="hw-offload"/> is enabled.
</p>
</column>
<column name="other_config" key="tc-policy"
type='{"type": "string",
"enum": ["set", ["none", "skip_sw", "skip_hw"]]}'>
<p>
Specified the policy used with HW offloading.
Options:
<dl>
<dt><code>none</code></dt>
<dd>Add software rule and offload rule to HW.</dd>
<dt><code>skip_sw</code></dt>
<dd>Offload rule to HW only.</dd>
<dt><code>skip_hw</code></dt>
<dd>Add software rule without offloading rule to HW.</dd>
</dl>
</p>
<p>
This is only relevant if
<ref column="other_config" key="hw-offload"/> is enabled.
</p>
<p>
The default value is <code>none</code>.
</p>
</column>
<column name="other_config" key="dpdk-init"
type='{"type": "string",
"enum": ["set", ["false", "true", "try"]]}'>
<p>
Set this value to <code>true</code> or <code>try</code> to enable
runtime support for DPDK ports. The vswitch must have compile-time
support for DPDK as well.
</p>
<p>
A value of <code>true</code> will cause the ovs-vswitchd process to
abort if DPDK cannot be initialized. A value of <code>try</code>
will allow the ovs-vswitchd process to continue running even if DPDK
cannot be initialized.
</p>
<p>
The default value is <code>false</code>. Changing this value requires
restarting the daemon
</p>
<p>
If this value is <code>false</code> at startup, any dpdk ports which
are configured in the bridge will fail due to memory errors.
</p>
</column>
<column name="other_config" key="dpdk-lcore-mask"
type='{"type": "integer", "minInteger": 1}'>
<p>
Specifies the CPU cores where dpdk lcore threads should be spawned.
The DPDK lcore threads are used for DPDK library tasks, such as
library internal message processing, logging, etc. Value should be in
the form of a hex string (so '0x123') similar to the 'taskset' mask
input.
</p>
<p>
The lowest order bit corresponds to the first CPU core. A set bit
means the corresponding core is available and an lcore thread will be
created and pinned to it. If the input does not cover all cores,
those uncovered cores are considered not set.
</p>
<p>
For performance reasons, it is best to set this to a single core on
the system, rather than allow lcore threads to float.
</p>
<p>
If not specified, the value will be determined by choosing the lowest
CPU core from initial cpu affinity list. Otherwise, the value will be
passed directly to the DPDK library.
</p>
</column>
<column name="other_config" key="pmd-cpu-mask">
<p>
Specifies CPU mask for setting the cpu affinity of PMD (Poll
Mode Driver) threads. Value should be in the form of hex string,
similar to the dpdk EAL '-c COREMASK' option input or the 'taskset'
mask input.
</p>
<p>
The lowest order bit corresponds to the first CPU core. A set bit
means the corresponding core is available and a pmd thread will be
created and pinned to it. If the input does not cover all cores,
those uncovered cores are considered not set.
</p>
<p>
If not specified, one pmd thread will be created for each numa node
and pinned to any available core on the numa node by default.
</p>
</column>
<column name="other_config" key="dpdk-alloc-mem"
type='{"type": "integer", "minInteger": 0}'>
<p>
Specifies the amount of memory to preallocate from the hugepage pool,
regardless of socket. It is recommended that dpdk-socket-mem is used
instead.
</p>
</column>
<column name="other_config" key="dpdk-socket-mem"
type='{"type": "string"}'>
<p>
Specifies the amount of memory to preallocate from the hugepage pool,
on a per-socket basis.
</p>
<p>
The specifier is a comma-separated string, in ascending order of CPU
socket. E.g. On a four socket system 1024,0,2048 would set socket 0
to preallocate 1024MB, socket 1 to preallocate 0MB, socket 2 to
preallocate 2048MB and socket 3 (no value given) to preallocate 0MB.
</p>
<p>
If <ref column="other_config" key="dpdk-socket-mem"/> and
<ref column="other_config" key="dpdk-alloc-mem"/> are not specified,
neither will be used and there will be no default value for each numa
node. DPDK defaults will be used instead.
If <ref column="other_config" key="dpdk-socket-mem"/> and
<ref column="other_config" key="dpdk-alloc-mem"/> are specified at
the same time, <ref column="other_config" key="dpdk-socket-mem"/>
will be used as default.
Changing this value requires restarting the daemon.
</p>
</column>
<column name="other_config" key="dpdk-socket-limit"
type='{"type": "string"}'>
<p>
Limits the maximum amount of memory that can be used from the
hugepage pool, on a per-socket basis.
</p>
<p>
The specifier is a comma-separated list of memory limits per socket.
<code>0</code> will disable the limit for a particular socket.
</p>
<p>
If not specified, OVS will not configure limits by default.
Changing this value requires restarting the daemon.
</p>
</column>
<column name="other_config" key="dpdk-hugepage-dir"
type='{"type": "string"}'>
<p>
Specifies the path to the hugetlbfs mount point.
</p>
<p>
If not specified, this will be guessed by the DPDK library (default
is /dev/hugepages). Changing this value requires restarting the
daemon.
</p>
</column>
<column name="other_config" key="dpdk-extra"
type='{"type": "string"}'>
<p>
Specifies additional eal command line arguments for DPDK.
</p>
<p>
The default is empty. Changing this value requires restarting the
daemon
</p>
</column>
<column name="other_config" key="vhost-sock-dir"
type='{"type": "string"}'>
<p>
Specifies a relative path from <ref column="external_ids"
key="rundir"/> to the vhost-user unix domain socket files. If this
value is unset, the sockets are put directly in <ref
column="external_ids" key="rundir"/>.
</p>
<p>
Changing this value requires restarting the daemon.
</p>
</column>
<column name="other_config" key="vhost-iommu-support"
type='{"type": "boolean"}'>
<p>
vHost IOMMU is a security feature, which restricts the vhost memory
that a virtio device may access. vHost IOMMU support is disabled by
default, due to a bug in QEMU implementations of the vhost REPLY_ACK
protocol, (on which vHost IOMMU relies) prior to v2.9.1. Setting this
value to <code>true</code> enables vHost IOMMU support for vHost User
Client ports in OvS-DPDK, starting from DPDK v17.11.
</p>
<p>
Changing this value requires restarting the daemon.
</p>
</column>
<column name="other_config" key="vhost-postcopy-support"
type='{"type": "boolean"}'>
<p>
vHost post-copy is a feature which allows switching live migration
of VM attached to dpdkvhostuserclient port to post-copy mode if
default pre-copy migration can not be converged or takes too long to
converge.
Setting this value to <code>true</code> enables vHost post-copy
support for all dpdkvhostuserclient ports. Available starting from
DPDK v18.11 and QEMU 2.12.
</p>
<p>
Changing this value requires restarting the daemon.
</p>
</column>
<column name="other_config" key="per-port-memory"
type='{"type": "boolean"}'>
<p>
By default OVS DPDK uses a shared memory model wherein devices
that have the same MTU and socket values can share the same
mempool. Setting this value to <code>true</code> changes this
behaviour. Per port memory allow DPDK devices to use private
memory per device. This can provide greater transparency as
regards memory usage but potentially at the cost of greater memory
requirements.
</p>
<p>
Changing this value requires restarting the daemon if dpdk-init has
already been set to true.
</p>
</column>
<column name="other_config" key="shared-mempool-config">
<p>Specifies dpdk shared mempool config.</p>
<p>Value should be set in the following form:</p>
<p>
<code>other_config:shared-mempool-config=<
user-shared-mempool-mtu-list></code>
</p>
<p>where</p>
<p>
<ul>
<li>
<user-shared-mempool-mtu-list> ::=
NULL | <non-empty-list>
</li>
<li>
<non-empty-list> ::= <user-mtus> |
<user-mtus> ,
<non-empty-list>
</li>
<li>
<user-mtus> ::= <mtu-all-socket> |
<mtu-socket-pair>
</li>
<li>
<mtu-all-socket> ::= <mtu>
</li>
<li>
<mtu-socket-pair> ::= <mtu> : <socket-id>
</li>
</ul>
</p>
<p>
Changing this value requires restarting the daemon if dpdk-init has
already been set to true.
</p>
</column>
<column name="other_config" key="tx-flush-interval"
type='{"type": "integer",
"minInteger": 0, "maxInteger": 1000000}'>
<p>
Specifies the time in microseconds that a packet can wait in output
batch for sending i.e. amount of time that packet can spend in an
intermediate output queue before sending to netdev.
This option can be used to configure balance between throughput
and latency. Lower values decreases latency while higher values
may be useful to achieve higher performance.
</p>
<p>
Defaults to 0 i.e. instant packet sending (latency optimized).
</p>
</column>
<column name="other_config" key="pmd-perf-metrics"
type='{"type": "boolean"}'>
<p>
Enables recording of detailed PMD performance metrics for analysis
and trouble-shooting. This can have a performance impact in the
order of 1%.
</p>
<p>
Defaults to false but can be changed at any time.
</p>
</column>
<column name="other_config" key="smc-enable"
type='{"type": "boolean"}'>
<p>
Signature match cache or SMC is a cache between EMC and megaflow
cache. It does not store the full key of the flow, so it is more
memory efficient comparing to EMC cache. SMC is especially useful
when flow count is larger than EMC capacity.
</p>
<p>
Defaults to false but can be changed at any time.
</p>
</column>
<column name="other_config" key="pmd-rxq-assign"
type='{"type": "string",
"enum": ["set", ["cycles", "roundrobin", "group"]]}'>
<p>
Specifies how RX queues will be automatically assigned to CPU cores.
Options:
<dl>
<dt><code>cycles</code></dt>
<dd>Rxqs will be sorted by order of measured processing cycles
before being assigned to CPU cores.</dd>
<dt><code>roundrobin</code></dt>
<dd>Rxqs will be round-robined across CPU cores.</dd>
<dt><code>group</code></dt>
<dd>Rxqs will be sorted by order of measured processing cycles
before being assigned to CPU cores with lowest estimated load.</dd>
</dl>
</p>
<p>
The default value is <code>cycles</code>.
</p>
<p>
Changing this value will affect an automatic re-assignment of Rxqs to
CPUs. Note: Rxqs mapped to CPU cores with
<code>pmd-rxq-affinity</code> are unaffected.
</p>
</column>
<column name="other_config" key="pmd-rxq-isolate"
type='{"type": "boolean"}'>
<p>
Specifies if a CPU core will be isolated after being pinned with
an Rx queue.
<p/>
Set this value to <code>false</code> to non-isolate a CPU core after
it is pinned with an Rxq using <code>pmd-rxq-affinity</code>. This
will allow OVS to assign other Rxqs to that CPU core.
</p>
<p>
The default value is <code>true</code>.
</p>
<p>
This can only be <code>false</code> when <code>pmd-rxq-assign</code>
is set to <code>group</code>.
</p>
</column>
<column name="other_config" key="n-handler-threads"
type='{"type": "integer", "minInteger": 1}'>
<p>
Attempts to specify the number of threads for software datapaths to
use for handling new flows. Some datapaths may choose to ignore
this and it will be set to a sensible option for the datapath type.
</p>
<p>
This configuration is per datapath. If you have more than one
software datapath (e.g. some <code>system</code> bridges and some
<code>netdev</code> bridges), then the total number of threads is
<code>n-handler-threads</code> times the number of software
datapaths.
</p>
</column>
<column name="other_config" key="n-revalidator-threads"
type='{"type": "integer", "minInteger": 1}'>
<p>
Attempts to specify the number of threads for software datapaths to
use for revalidating flows in the datapath. Some datapaths may
choose to ignore this and will set to a sensible option for the
datapath type.
</p>
<p>
Typically, there is a direct correlation between the
number of revalidator threads, and the number of flows allowed in the
datapath. The default is the number of cpu cores divided by four
plus one. If <code>n-handler-threads</code> is set, the default
changes to the number of cpu cores minus the number
of handler threads.
</p>
<p>
This configuration is per datapath. If you have more than one
software datapath (e.g. some <code>system</code> bridges and some
<code>netdev</code> bridges), then the total number of threads is
<code>n-handler-threads</code> times the number of software
datapaths.
</p>
</column>
<column name="other_config" key="emc-insert-inv-prob"
type='{"type": "integer", "minInteger": 0, "maxInteger": 4294967295}'>
<p>
Specifies the inverse probability (1/emc-insert-inv-prob) of a flow
being inserted into the Exact Match Cache (EMC). On average one in
every <code>emc-insert-inv-prob</code> packets that generate a unique
flow will cause an insertion into the EMC.
A value of 1 will result in an insertion for every flow (1/1 = 100%)
whereas a value of zero will result in no insertions and essentially
disable the EMC.
</p>
<p>
Defaults to 100 ie. there is (1/100 =) 1% chance of EMC insertion.
</p>
</column>
<column name="other_config" key="vlan-limit"
type='{"type": "integer", "minInteger": 0}'>
<p>
Limits the number of VLAN headers that can be matched to the
specified number. Further VLAN headers will be treated as payload,
e.g. a packet with more 802.1q headers will match Ethernet type
0x8100.
</p>
<p>
Open vSwitch userspace currently supports at most 2 VLANs, and each
datapath has its own limit. If <code>vlan-limit</code> is nonzero,
it acts as a further limit.
</p>
<p>
If this value is absent, the default is currently 1. This maintains
backward compatibility with controllers that were designed for use
with Open vSwitch versions earlier than 2.8, which only supported one
VLAN.
</p>
</column>
<column name="other_config" key="bundle-idle-timeout"
type='{"type": "integer", "minInteger": 1}'>
<p>
The maximum time (in seconds) that idle bundles will wait
to be expired since it was either opened, modified or closed.
</p>
<p>
OpenFlow specification mandates the timeout to be at least one
second. The default is 10 seconds.
</p>
</column>
<column name="other_config" key="offload-rebalance"
type='{"type": "boolean"}'>
<p>
Configures HW offload rebalancing, that allows to dynamically
offload and un-offload flows while an offload-device is out of
resources (OOR). This policy allows flows to be selected for
offloading based on the packets-per-second (pps) rate of flows.
</p>
<p>
Set this value to <code>true</code> to enable this option.
</p>
<p>
The default value is <code>false</code>. Changing this value requires
restarting the daemon.
</p>
<p>
This is only relevant if HW offloading is enabled (hw-offload).
When this policy is enabled, it also requires 'tc-policy' to
be set to 'skip_sw'.
</p>
</column>
<column name="other_config" key="pmd-auto-lb"
type='{"type": "boolean"}'>
<p>
Configures PMD Auto Load Balancing that allows automatic assignment of
RX queues to PMDs if any of PMDs is overloaded (i.e. a processing
cycles >
<ref column="other_config" key="pmd-auto-lb-load-threshold"/>).
</p>
<p>
It uses current scheme of cycle based assignment of RX queues that
are not statically pinned to PMDs.
</p>
<p>
The default value is <code>false</code>.
</p>
<p>
Set this value to <code>true</code> to enable this option. It is
currently disabled by default and an experimental feature.
</p>
<p>
This only comes in effect if cycle based assignment is enabled and
there are more than one non-isolated PMDs present and at least one of
it polls more than one queue.
</p>
</column>
<column name="other_config" key="pmd-auto-lb-rebal-interval"
type='{"type": "integer",
"minInteger": 0, "maxInteger": 20000}'>
<p>
The minimum time (in minutes) 2 consecutive PMD Auto Load Balancing
iterations.
</p>
<p>
The default value is 1 min. If configured to 0 then it would be
converted to default value i.e. 1 min
</p>
<p>
This option can be configured to avoid frequent trigger of auto load
balancing of PMDs. For e.g. set the value (in min) such that it occurs
once in few hours or a day or a week.
</p>
</column>
<column name="other_config" key="pmd-auto-lb-load-threshold"
type='{"type": "integer", "minInteger": 0, "maxInteger": 100}'>
<p>
Specifies the minimum PMD thread load threshold (% of used cycles) of
any non-isolated PMD threads when a PMD Auto Load Balance may be
triggered.
</p>
<p>
The default value is <code>95%</code>.
</p>
</column>
<column name="other_config" key="pmd-auto-lb-improvement-threshold"
type='{"type": "integer", "minInteger": 0, "maxInteger": 100}'>
<p>
Specifies the minimum evaluated % improvement in load distribution
across the non-isolated PMD threads that will allow a PMD Auto Load
Balance to occur.
</p>
<p>
Note, setting this parameter to 0 will always allow an auto load
balance to occur regardless of estimated improvement or not.
</p>
<p>
The default value is <code>25%</code>.
</p>
</column>
<column name="other_config" key="pmd-sleep-max">
<p>
Specifies the maximum sleep time that will be requested in
microseconds per iteration for a PMD thread which has received zero
or a small amount of packets from the Rx queues it is polling.
</p>
<p>
The actual sleep time requested is based on the load
of the Rx queues that the PMD polls and may be less than
the maximum value.
</p>
<p>
The default value is <code>0 microseconds</code>, which means
that the PMD will not sleep regardless of the load from the
Rx queues that it polls.
</p>
<p>
The maximum value is <code>10000 microseconds</code>.
</p>
<p>
<code>other_config:pmd-sleep-max=<pmd-sleep-list></code>
</p>
<p>where</p>
<p>
<ul>
<li>
<pmd-sleep-list> ::= NULL | <non-empty-list>
</li>
<li>
<non-empty-list> ::= <pmd-sleep-value> |
<pmd-sleep-value> ,
<non-empty-list>
</li>
<li>
<pmd-sleep-value> ::= <global-default-sleep-value> |
<pmd-core-sleep-pair>
</li>
<li>
<global-default-sleep-value> ::= <max-sleep-time>
</li>
<li>
<pmd-core-sleep-pair> ::= <core> :
<max-sleep-time>
</li>
</ul>
</p>
</column>
<column name="other_config" key="userspace-tso-enable"
type='{"type": "boolean"}'>
<p>
Set this value to <code>true</code> to enable userspace support for
TCP Segmentation Offloading (TSO). When it is enabled, the interfaces
can provide an oversized TCP segment to the datapath and the datapath
will offload the TCP segmentation and checksum calculation to the
interfaces when necessary.
</p>
<p>
The default value is <code>false</code>. Changing this value requires
restarting the daemon.
</p>
<p>
The feature only works if Open vSwitch is built with DPDK support.
</p>
<p>
The feature is considered experimental.
</p>
</column>
<column name="other_config" key="explicit-sampled-drops"
type='{"type": "boolean"}'>
<p>
When a flow is installed in the datapath with an empty action list,
it indicates an implicit "drop" action. Most datapaths report this
for event for statistics and monitoring (in datapath-specific ways).
</p>
<p>
However, if any of the per-bridge or per-flow sampling functionalities
are enabled (e.g: sFlow, IPFIX, local sampling), the action list might
not be empty, but contain an action to implement such functionality.
This makes the datapaths not report the packet drop.
</p>
<p>
This knob makes Open vSwitch detect when the last datapath action
comes from these sampling features and add an explicit drop action at
the end to keep drop statistics accurate.
</p>
<p>
The default value is <code>false</code>.
</p>
</column>
</group>
<group title="Status">
<column name="next_cfg">
Sequence number for client to increment. When a client modifies
any part of the database configuration and wishes to wait for
Open vSwitch to finish applying the changes, it may increment
this sequence number.
</column>
<column name="cur_cfg">
Sequence number that Open vSwitch sets to the current value of
<ref column="next_cfg"/> after it finishes applying a set of
configuration changes.
</column>
<column name="dpdk_initialized">
True if <ref column="other_config" key="dpdk-init"/> is set to
true and the DPDK library is successfully initialized.
</column>
<group title="Statistics">
<p>
The <code>statistics</code> column contains key-value pairs that
report statistics about a system running an Open vSwitch. These are
updated periodically (currently, every 5 seconds). Key-value pairs
that cannot be determined or that do not apply to a platform are
omitted.
</p>
<column name="other_config" key="enable-statistics"
type='{"type": "boolean"}'>
Statistics are disabled by default to avoid overhead in the common
case when statistics gathering is not useful. Set this value to
<code>true</code> to enable populating the <ref column="statistics"/>
column or to <code>false</code> to explicitly disable it.
</column>
<column name="statistics" key="cpu"
type='{"type": "integer", "minInteger": 1}'>
<p>
Number of CPU processors, threads, or cores currently online and
available to the operating system on which Open vSwitch is running,
as an integer. This may be less than the number installed, if some
are not online or if they are not available to the operating
system.
</p>
<p>
Open vSwitch userspace processes are not multithreaded, but the
Linux kernel-based datapath is.
</p>
</column>
<column name="statistics" key="load_average">
A comma-separated list of three floating-point numbers,
representing the system load average over the last 1, 5, and 15
minutes, respectively.
</column>
<column name="statistics" key="memory">
<p>
A comma-separated list of integers, each of which represents a
quantity of memory in kilobytes that describes the operating
system on which Open vSwitch is running. In respective order,
these values are:
</p>
<ol>
<li>Total amount of RAM allocated to the OS.</li>
<li>RAM allocated to the OS that is in use.</li>
<li>RAM that can be flushed out to disk or otherwise discarded
if that space is needed for another purpose. This number is
necessarily less than or equal to the previous value.</li>
<li>Total disk space allocated for swap.</li>
<li>Swap space currently in use.</li>
</ol>
<p>
On Linux, all five values can be determined and are included. On
other operating systems, only the first two values can be
determined, so the list will only have two values.
</p>
</column>
<column name="statistics" key="process_NAME">
<p>
One such key-value pair, with <code>NAME</code> replaced by
a process name, will exist for each running Open vSwitch
daemon process, with <var>name</var> replaced by the
daemon's name (e.g. <code>process_ovs-vswitchd</code>). The
value is a comma-separated list of integers. The integers
represent the following, with memory measured in kilobytes
and durations in milliseconds:
</p>
<ol>
<li>The process's virtual memory size.</li>
<li>The process's resident set size.</li>
<li>The amount of user and system CPU time consumed by the
process.</li>
<li>The number of times that the process has crashed and been
automatically restarted by the monitor.</li>
<li>The duration since the process was started.</li>
<li>The duration for which the process has been running.</li>
</ol>
<p>
The interpretation of some of these values depends on whether the
process was started with the <option>--monitor</option>. If it
was not, then the crash count will always be 0 and the two
durations will always be the same. If <option>--monitor</option>
was given, then the crash count may be positive; if it is, the
latter duration is the amount of time since the most recent crash
and restart.
</p>
<p>
There will be one key-value pair for each file in Open vSwitch's
``run directory'' (usually <code>/var/run/openvswitch</code>)
whose name ends in <code>.pid</code>, whose contents are a
process ID, and which is locked by a running process. The
<var>name</var> is taken from the pidfile's name.
</p>
<p>
Currently Open vSwitch is only able to obtain all of the above
detail on Linux systems. On other systems, the same key-value
pairs will be present but the values will always be the empty
string.
</p>
</column>
<column name="statistics" key="file_systems">
<p>
A space-separated list of information on local, writable file
systems. Each item in the list describes one file system and
consists in turn of a comma-separated list of the following:
</p>
<ol>
<li>Mount point, e.g. <code>/</code> or <code>/var/log</code>.
Any spaces or commas in the mount point are replaced by
underscores.</li>
<li>Total size, in kilobytes, as an integer.</li>
<li>Amount of storage in use, in kilobytes, as an integer.</li>
</ol>
<p>
This key-value pair is omitted if there are no local, writable
file systems or if Open vSwitch cannot obtain the needed
information.
</p>
</column>
</group>
</group>
<group title="Version Reporting">
<p>
These columns report the types and versions of the hardware and
software running Open vSwitch. We recommend in general that software
should test whether specific features are supported instead of relying
on version number checks. These values are primarily intended for
reporting to human administrators.
</p>
<column name="ovs_version">
The Open vSwitch version number, e.g. <code>1.1.0</code>.
</column>
<column name="db_version">
<p>
The database schema version number, e.g. <code>1.2.3</code>. See
ovsdb-tool(1) for an explanation of the numbering scheme.
</p>
<p>
The schema version is part of the database schema, so it can also be
retrieved by fetching the schema using the Open vSwitch database
protocol.
</p>
</column>
<column name="system_type">
<p>
An identifier for the type of system on top of which Open vSwitch
runs, e.g. <code>KVM</code>.
</p>
<p>
System integrators are responsible for choosing and setting an
appropriate value for this column.
</p>
</column>
<column name="system_version">
<p>
The version of the system identified by <ref column="system_type"/>,
e.g. <code>4.18.0-372.19.1.el8_6</code> on RHEL 8.6 with kernel
4.18.0-372.19.1.
</p>
<p>
System integrators are responsible for choosing and setting an
appropriate value for this column.
</p>
</column>
<column name="dpdk_version">
<p>
The version of the linked DPDK library.
</p>
</column>
</group>
<group title="Capabilities">
<p>
These columns report capabilities of the Open vSwitch instance.
</p>
<column name="datapath_types">
<p>
This column reports the different dpifs registered with the system.
These are the values that this instance supports in the <ref
column="datapath_type" table="Bridge"/> column of the <ref
table="Bridge"/> table.
</p>
</column>
<column name="iface_types">
<p>
This column reports the different netdevs registered with the system.
These are the values that this instance supports in the <ref
column="type" table="Interface"/> column of the <ref
table="Interface"/> table.
</p>
</column>
</group>
<group title="Database Configuration">
<p>
These columns primarily configure the Open vSwitch database
(<code>ovsdb-server</code>), not the Open vSwitch switch
(<code>ovs-vswitchd</code>). The OVSDB database also uses the <ref
column="ssl"/> settings.
</p>
<p>
The Open vSwitch switch does read the database configuration to
determine remote IP addresses to which in-band control should apply.
</p>
<column name="manager_options">
<p>
Database clients to which the Open vSwitch database server should
connect or to which it should listen, along with options for how
these connections should be configured. See the <ref
table="Manager"/> table for more information.
</p>
<p>
For this column to serve its purpose, <code>ovsdb-server</code> must
be configured to honor it. The easiest way to do this is to invoke
<code>ovsdb-server</code> with the option
<option>--remote=db:Open_vSwitch,Open_vSwitch,manager_options</option>
The startup scripts that accompany Open vSwitch do this by default.
</p>
</column>
</group>
<group title="IPsec">
<p>
These settings control the global configuration of IPsec tunnels. The
<code>options</code> column of the <code>Interface</code> table
configures IPsec for individual tunnels. The <code>options</code>
column also allows for custom options prefixed with <code>ipsec_</code>
to be passed to the individual connections.
</p>
<p>
OVS IPsec supports the following three forms of authentication.
Currently, all IPsec tunnels must use the same form:
</p>
<ol>
<li>
Pre-shared keys: Omit the global settings. On each tunnel, set <ref
column="options" key="psk"/>.
</li>
<li>
Self-signed certificates: Set the <code>private_key</code> and
<code>certificate</code> global settings. On each tunnel, set <ref
column="options" key="remote_cert"/>. The remote certificate can be
self-signed.
</li>
<li>
CA-signed certificates: Set all of the global settings. On each
tunnel, set <ref column="options" key="remote_name"/> to the common
name (CN) of the remote certificate. The remote certificate must be
signed by the CA.
</li>
</ol>
<column name="other_config" key="private_key"
type='{"type": "string"}'>
<p>
Name of a PEM file containing the private key used as the switch's
identity for IPsec tunnels.
</p>
</column>
<column name="other_config" key="certificate"
type='{"type": "string"}'>
<p>
Name of a PEM file containing a certificate that certifies the
switch's private key, and identifies a trustworthy switch for IPsec
tunnels. The certificate must be x.509 version 3 and with the
string in common name (CN) also set in the subject alternative name
(SAN).
</p>
</column>
<column name="other_config" key="ca_cert"
type='{"type": "string"}'>
<p>
Name of a PEM file containing the CA certificate used to verify
that a remote switch of the IPsec tunnel is trustworthy.
</p>
</column>
<group title="Plaintext Tunnel Policy">
<p>
When an IPsec tunnel is configured in this database, multiple
independent components take responsibility for implementing it.
<code>ovs-vswitchd</code> and its datapath handle packet forwarding
to the tunnel and a separate daemon pushes the tunnel's IPsec policy
configuration to the kernel or other entity that implements it.
There is a race: if the former configuration completes before the
latter, then packets sent by the local host over the tunnel can be
transmitted in plaintext. Using this setting, OVS users can avoid
this undesirable situation.
</p>
<column name="other_config" key="ipsec_skb_mark"
type='{"type": "string"}'>
<p>
This setting takes the form
<code><var>value</var>/<var>mask</var></code>. If it is specified,
then the <code>skb_mark</code> field in every outgoing tunneled
packet sent in plaintext is compared against it and, if it matches,
the packet is dropped. This is a global setting that is applied to
every tunneled packet, regardless of whether IPsec encryption is
enabled for the tunnel, the type of tunnel, or whether OVS is
involved.
</p>
<p>
Example policies:
</p>
<dl>
<dt><code>1/1</code></dt>
<dd>
Drop all unencrypted tunneled packets in which the
least-significant bit of <code>skb_mark</code> is 1. This would
be a useful policy given an OpenFlow flow table that sets
<code>skb_mark</code> to 1 for traffic that should be encrypted.
The default <code>skb_mark</code> is 0, so this would not affect
other traffic.
</dd>
<dt><code>0/1</code></dt>
<dd>
Drop all unencrypted tunneled packets in which the
least-significant bit of <code>skb_mark</code> is 0. This would
be a useful policy if no unencrypted tunneled traffic should exit
the system without being specially permitted by setting
<code>skb_mark</code> to 1.
</dd>
<dt>(empty)</dt>
<dd>
If this setting is empty or unset, then all unencrypted tunneled
packets are transmitted in the usual way.
</dd>
</dl>
</column>
</group>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Bridge">
<p>
Configuration for a bridge within an
<ref table="Open_vSwitch"/>.
</p>
<p>
A <ref table="Bridge"/> record represents an Ethernet switch with one or
more ``ports,'' which are the <ref table="Port"/> records pointed to by
the <ref table="Bridge"/>'s <ref column="ports"/> column.
</p>
<group title="Core Features">
<column name="name">
<p>
Bridge identifier. Must be unique among the names of ports,
interfaces, and bridges on a host.
</p>
<p>
The name must be alphanumeric and must not contain forward or
backward slashes. The name of a bridge is also the name of an <ref
table="Interface"/> (and a <ref table="Port"/>) within the bridge, so
the restrictions on the <ref table="Interface" column="name"/> column
in the <ref table="Interface"/> table, particularly on length, also
apply to bridge names. Refer to the documentation for <ref
table="Interface"/> names for details.
</p>
</column>
<column name="ports">
Ports included in the bridge.
</column>
<column name="mirrors">
Port mirroring configuration.
</column>
<column name="netflow">
NetFlow configuration.
</column>
<column name="sflow">
sFlow(R) configuration.
</column>
<column name="ipfix">
IPFIX configuration.
</column>
<column name="flood_vlans">
<p>
VLAN IDs of VLANs on which MAC address learning should be disabled,
so that packets are flooded instead of being sent to specific ports
that are believed to contain packets' destination MACs. This should
ordinarily be used to disable MAC learning on VLANs used for
mirroring (RSPAN VLANs). It may also be useful for debugging.
</p>
<p>
SLB bonding (see the <ref table="Port" column="bond_mode"/> column in
the <ref table="Port"/> table) is incompatible with
<code>flood_vlans</code>. Consider using another bonding mode or
a different type of mirror instead.
</p>
</column>
<column name="auto_attach">
Auto Attach configuration.
</column>
</group>
<group title="OpenFlow Configuration">
<column name="controller">
<p>
OpenFlow controller set. If unset, then no OpenFlow controllers
will be used.
</p>
<p>
If there are primary controllers, removing all of them clears the
OpenFlow flow tables, group table, and meter table. If there are no
primary controllers, adding one also clears these tables. Other
changes to the set of controllers, such as adding or removing a
service controller, adding another primary controller to supplement
an existing primary controller, or removing only one of two primary
controllers, have no effect on these tables.
</p>
</column>
<column name="flow_tables">
Configuration for OpenFlow tables. Each pair maps from an OpenFlow
table ID to configuration for that table.
</column>
<column name="fail_mode">
<p>When a controller is configured, it is, ordinarily, responsible
for setting up all flows on the switch. Thus, if the connection to
the controller fails, no new network connections can be set up.
If the connection to the controller stays down long enough,
no packets can pass through the switch at all. This setting
determines the switch's response to such a situation. It may be set
to one of the following:
<dl>
<dt><code>standalone</code></dt>
<dd>If no message is received from the controller for three
times the inactivity probe interval
(see <ref column="inactivity_probe"/>), then Open vSwitch
will take over responsibility for setting up flows. In
this mode, Open vSwitch causes the bridge to act like an
ordinary MAC-learning switch. Open vSwitch will continue
to retry connecting to the controller in the background
and, when the connection succeeds, it will discontinue its
standalone behavior.</dd>
<dt><code>secure</code></dt>
<dd>Open vSwitch will not set up flows on its own when the
controller connection fails or when no controllers are
defined. The bridge will continue to retry connecting to
any defined controllers forever.</dd>
</dl>
</p>
<p>
The default is <code>standalone</code> if the value is unset, but
future versions of Open vSwitch may change the default.
</p>
<p>
The <code>standalone</code> mode can create forwarding loops on a
bridge that has more than one uplink port unless STP is enabled. To
avoid loops on such a bridge, configure <code>secure</code> mode or
enable STP (see <ref column="stp_enable"/>).
</p>
<p>
The <ref column="fail_mode"/> setting applies only to primary
controllers. When more than one primary controller is configured,
<ref column="fail_mode"/> is considered only when none of the
configured controllers can be contacted.
</p>
<p>
Changing <ref column="fail_mode"/> when no primary controllers are
configured clears the OpenFlow flow tables, group table, and meter
table.
</p>
</column>
<column name="datapath_id">
Reports the OpenFlow datapath ID in use. Exactly 16 hex digits.
(Setting this column has no useful effect. Set <ref
column="other-config" key="datapath-id"/> instead.)
</column>
<column name="datapath_version">
Reports the datapath version. This column is maintained for
backwards compatibility. The preferred locatation is the
<ref column="datapath_id" table="Datapath"/> column of the
<ref table="Datapath"/> table. The full documentation for this
column is there.
</column>
<column name="other_config" key="datapath-id">
Overrides the default OpenFlow datapath ID, setting it to the specified
value specified in hex. The value must either have a <code>0x</code>
prefix or be exactly 16 hex digits long. May not be all-zero.
</column>
<column name="other_config" key="dp-desc">
Human readable description of datapath. It is a maximum 256
byte-long free-form string to describe the datapath for
debugging purposes, e.g. <code>switch3 in room 3120</code>.
The value is returned by the switch as a part of reply to OFPMP_DESC
request (ofp_desc). The OpenFlow specification (e.g. 1.3.5) describes
the ofp_desc structure to contaion "NULL terminated ASCII strings".
For the compatibility reasons no more than 255 ASCII characters should be used.
</column>
<column name="other_config" key="dp-sn">
Serial number. It is a maximum 32 byte-long free-form string to
provide an additional switch identification. The value is returned
by the switch as a part of reply to OFPMP_DESC request (ofp_desc).
Same as mentioned in the description of <ref column="other-config" key="dp-desc"/>,
the string should be no more than 31 ASCII characters for the compatibility.
</column>
<column name="other_config" key="disable-in-band"
type='{"type": "boolean"}'>
If set to <code>true</code>, disable in-band control on the bridge
regardless of controller and manager settings.
</column>
<column name="other_config" key="in-band-queue"
type='{"type": "integer", "minInteger": 0, "maxInteger": 4294967295}'>
A queue ID as a nonnegative integer. This sets the OpenFlow queue ID
that will be used by flows set up by in-band control on this bridge.
If unset, or if the port used by an in-band control flow does not have
QoS configured, or if the port does not have a queue with the specified
ID, the default queue is used instead.
</column>
<column name="other_config" key="controller-queue-size"
type='{"type": "integer", "minInteger": 1, "maxInteger": 512}'>
This sets the maximum size of the queue of packets that need to be
sent to the OpenFlow management controller. The value must be less
than 512. If not specified the queue size is limited to 100 packets
by default. Note: increasing the queue size might have a negative
impact on latency.
</column>
<column name="protocols">
List of OpenFlow protocols that may be used when negotiating a
connection with a controller. OpenFlow 1.0, 1.1, 1.2, 1.3, 1.4, and
1.5 are enabled by default if this column is empty.
</column>
</group>
<group title="Spanning Tree Configuration">
<p>
The IEEE 802.1D Spanning Tree Protocol (STP) is a network protocol
that ensures loop-free topologies. It allows redundant links to
be included in the network to provide automatic backup paths if
the active links fails.
</p>
<p>
These settings configure the slower-to-converge but still widely
supported version of Spanning Tree Protocol, sometimes known as
802.1D-1998. Open vSwitch also supports the newer Rapid Spanning Tree
Protocol (RSTP), documented later in the section titled <code>Rapid
Spanning Tree Configuration</code>.
</p>
<group title="STP Configuration">
<column name="stp_enable" type='{"type": "boolean"}'>
<p>
Enable spanning tree on the bridge. By default, STP is disabled
on bridges. Bond, internal, and mirror ports are not supported
and will not participate in the spanning tree.
</p>
<p>
STP and RSTP are mutually exclusive. If both are enabled, RSTP
will be used.
</p>
</column>
<column name="other_config" key="stp-system-id">
The bridge's STP identifier (the lower 48 bits of the bridge-id)
in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
By default, the identifier is the MAC address of the bridge.
</column>
<column name="other_config" key="stp-priority"
type='{"type": "integer", "minInteger": 0, "maxInteger": 65535}'>
The bridge's relative priority value for determining the root
bridge (the upper 16 bits of the bridge-id). A bridge with the
lowest bridge-id is elected the root. By default, the priority
is 0x8000.
</column>
<column name="other_config" key="stp-hello-time"
type='{"type": "integer", "minInteger": 1, "maxInteger": 10}'>
The interval between transmissions of hello messages by
designated ports, in seconds. By default the hello interval is
2 seconds.
</column>
<column name="other_config" key="stp-max-age"
type='{"type": "integer", "minInteger": 6, "maxInteger": 40}'>
The maximum age of the information transmitted by the bridge
when it is the root bridge, in seconds. By default, the maximum
age is 20 seconds.
</column>
<column name="other_config" key="stp-forward-delay"
type='{"type": "integer", "minInteger": 4, "maxInteger": 30}'>
The delay to wait between transitioning root and designated
ports to <code>forwarding</code>, in seconds. By default, the
forwarding delay is 15 seconds.
</column>
<column name="other_config" key="mcast-snooping-aging-time"
type='{"type": "integer", "minInteger": 1}'>
<p>
The maximum number of seconds to retain a multicast snooping entry for
which no packets have been seen. The default is currently 300
seconds (5 minutes). The value, if specified, is forced into a
reasonable range, currently 15 to 3600 seconds.
</p>
</column>
<column name="other_config" key="mcast-snooping-table-size"
type='{"type": "integer", "minInteger": 1}'>
<p>
The maximum number of multicast snooping addresses to learn. The
default is currently 2048. The value, if specified, is forced into
a reasonable range, currently 10 to 1,000,000.
</p>
</column>
<column name="other_config" key="mcast-snooping-disable-flood-unregistered"
type='{"type": "boolean"}'>
<p>
If set to <code>false</code>, unregistered multicast packets are forwarded
to all ports.
If set to <code>true</code>, unregistered multicast packets are forwarded
to ports connected to multicast routers.
</p>
</column>
</group>
<group title="STP Status">
<p>
These key-value pairs report the status of 802.1D-1998. They are
present only if STP is enabled (via the <ref column="stp_enable"/>
column).
</p>
<column name="status" key="stp_bridge_id">
The bridge ID used in spanning tree advertisements, in the form
<var>xxxx</var>.<var>yyyyyyyyyyyy</var> where the <var>x</var>s are
the STP priority, the <var>y</var>s are the STP system ID, and each
<var>x</var> and <var>y</var> is a hex digit.
</column>
<column name="status" key="stp_designated_root">
The designated root for this spanning tree, in the same form as <ref
column="status" key="stp_bridge_id"/>. If this bridge is the root,
this will have the same value as <ref column="status"
key="stp_bridge_id"/>, otherwise it will differ.
</column>
<column name="status" key="stp_root_path_cost">
The path cost of reaching the designated bridge. A lower number is
better. The value is 0 if this bridge is the root, otherwise it is
higher.
</column>
</group>
</group>
<group title="Rapid Spanning Tree">
<p>
Rapid Spanning Tree Protocol (RSTP), like STP, is a network protocol
that ensures loop-free topologies. RSTP superseded STP with the
publication of 802.1D-2004. Compared to STP, RSTP converges more
quickly and recovers more quickly from failures.
</p>
<group title="RSTP Configuration">
<column name="rstp_enable" type='{"type": "boolean"}'>
<p>
Enable Rapid Spanning Tree on the bridge. By default, RSTP is disabled
on bridges. Bond, internal, and mirror ports are not supported
and will not participate in the spanning tree.
</p>
<p>
STP and RSTP are mutually exclusive. If both are enabled, RSTP
will be used.
</p>
</column>
<column name="other_config" key="rstp-address">
The bridge's RSTP address (the lower 48 bits of the bridge-id)
in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
By default, the address is the MAC address of the bridge.
</column>
<column name="other_config" key="rstp-priority"
type='{"type": "integer", "minInteger": 0, "maxInteger": 61440}'>
The bridge's relative priority value for determining the root
bridge (the upper 16 bits of the bridge-id). A bridge with the
lowest bridge-id is elected the root. By default, the priority
is 0x8000 (32768). This value needs to be a multiple of 4096,
otherwise it's rounded to the nearest inferior one.
</column>
<column name="other_config" key="rstp-ageing-time"
type='{"type": "integer", "minInteger": 10, "maxInteger": 1000000}'>
The Ageing Time parameter for the Bridge. The default value
is 300 seconds.
</column>
<column name="other_config" key="rstp-force-protocol-version"
type='{"type": "integer"}'>
The Force Protocol Version parameter for the Bridge. This
can take the value 0 (STP Compatibility mode) or 2
(the default, normal operation).
</column>
<column name="other_config" key="rstp-max-age"
type='{"type": "integer", "minInteger": 6, "maxInteger": 40}'>
The maximum age of the information transmitted by the Bridge
when it is the Root Bridge. The default value is 20.
</column>
<column name="other_config" key="rstp-forward-delay"
type='{"type": "integer", "minInteger": 4, "maxInteger": 30}'>
The delay used by STP Bridges to transition Root and Designated
Ports to Forwarding. The default value is 15.
</column>
<column name="other_config" key="rstp-transmit-hold-count"
type='{"type": "integer", "minInteger": 1, "maxInteger": 10}'>
The Transmit Hold Count used by the Port Transmit state machine
to limit transmission rate. The default value is 6.
</column>
</group>
<group title="RSTP Status">
<p>
These key-value pairs report the status of 802.1D-2004. They are
present only if RSTP is enabled (via the <ref column="rstp_enable"/>
column).
</p>
<column name="rstp_status" key="rstp_bridge_id">
The bridge ID used in rapid spanning tree advertisements, in the form
<var>x</var>.<var>yyy</var>.<var>zzzzzzzzzzzz</var> where
<var>x</var> is the RSTP priority, the <var>y</var>s are a locally
assigned system ID extension, the <var>z</var>s are the STP system
ID, and each <var>x</var>, <var>y</var>, or <var>z</var> is a hex
digit.
</column>
<column name="rstp_status" key="rstp_root_id">
The root of this spanning tree, in the same form as <ref
column="rstp_status" key="rstp_bridge_id"/>. If this bridge is the
root, this will have the same value as <ref column="rstp_status"
key="rstp_bridge_id"/>, otherwise it will differ.
</column>
<column name="rstp_status" key="rstp_root_path_cost"
type='{"type": "integer", "minInteger": 0}'>
The path cost of reaching the root. A lower number is better. The
value is 0 if this bridge is the root, otherwise it is higher.
</column>
<column name="rstp_status" key="rstp_designated_id">
The RSTP designated ID, in the same form as <ref column="rstp_status"
key="rstp_bridge_id"/>.
</column>
<column name="rstp_status" key="rstp_designated_port_id">
The RSTP designated port ID, as a 4-digit hex number.
</column>
<column name="rstp_status" key="rstp_bridge_port_id">
The RSTP bridge port ID, as a 4-digit hex number.
</column>
</group>
</group>
<group title="Multicast Snooping Configuration">
Multicast snooping (RFC 4541) monitors the Internet Group Management
Protocol (IGMP) and Multicast Listener Discovery traffic between hosts
and multicast routers. The switch uses what IGMP and MLD snooping
learns to forward multicast traffic only to interfaces that are connected
to interested receivers. Currently it supports IGMPv1, IGMPv2, IGMPv3,
MLDv1 and MLDv2 protocols.
<column name="mcast_snooping_enable">
Enable multicast snooping on the bridge. For now, the default
is disabled.
</column>
</group>
<group title="Other Features">
<column name="datapath_type">
Name of datapath provider. The kernel datapath has type
<code>system</code>. The userspace datapath has type
<code>netdev</code>. A manager may refer to the <ref
table="Open_vSwitch" column="datapath_types"/> column of the <ref
table="Open_vSwitch"/> table for a list of the types accepted by this
Open vSwitch instance.
</column>
<column name="external_ids" key="bridge-id">
A unique identifier of the bridge.
</column>
<column name="other_config" key="hwaddr">
An Ethernet address in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
to set the hardware address of the local port and influence the
datapath ID.
</column>
<column name="other_config" key="forward-bpdu"
type='{"type": "boolean"}'>
<p>
Controls forwarding of BPDUs and other network control frames when
NORMAL action is invoked. When this option is <code>false</code> or
unset, frames with reserved Ethernet addresses (see table below) will
not be forwarded. When this option is <code>true</code>, such frames
will not be treated specially.
</p>
<p>
The above general rule has the following exceptions:
</p>
<ul>
<li>
If STP is enabled on the bridge (see the <ref column="stp_enable"
table="Bridge"/> column in the <ref table="Bridge"/> table), the
bridge processes all received STP packets and never passes them to
OpenFlow or forwards them. This is true even if STP is disabled on
an individual port.
</li>
<li>
If LLDP is enabled on an interface (see the <ref column="lldp"
table="Interface"/> column in the <ref table="Interface"/> table),
the interface processes received LLDP packets and never passes them
to OpenFlow or forwards them.
</li>
</ul>
<p>
Set this option to <code>true</code> if the Open vSwitch bridge
connects different Ethernet networks and is not configured to
participate in STP.
</p>
<p>
This option affects packets with the following destination MAC
addresses:
</p>
<dl>
<dt><code>01:80:c2:00:00:00</code></dt>
<dd>IEEE 802.1D Spanning Tree Protocol (STP).</dd>
<dt><code>01:80:c2:00:00:01</code></dt>
<dd>IEEE Pause frame.</dd>
<dt><code>01:80:c2:00:00:0<var>x</var></code></dt>
<dd>Other reserved protocols.</dd>
<dt><code>00:e0:2b:00:00:00</code></dt>
<dd>Extreme Discovery Protocol (EDP).</dd>
<dt>
<code>00:e0:2b:00:00:04</code> and <code>00:e0:2b:00:00:06</code>
</dt>
<dd>Ethernet Automatic Protection Switching (EAPS).</dd>
<dt><code>01:00:0c:cc:cc:cc</code></dt>
<dd>
Cisco Discovery Protocol (CDP), VLAN Trunking Protocol (VTP),
Dynamic Trunking Protocol (DTP), Port Aggregation Protocol (PAgP),
and others.
</dd>
<dt><code>01:00:0c:cc:cc:cd</code></dt>
<dd>Cisco Shared Spanning Tree Protocol PVSTP+.</dd>
<dt><code>01:00:0c:cd:cd:cd</code></dt>
<dd>Cisco STP Uplink Fast.</dd>
<dt><code>01:00:0c:00:00:00</code></dt>
<dd>Cisco Inter Switch Link.</dd>
<dt><code>01:00:0c:cc:cc:c<var>x</var></code></dt>
<dd>Cisco CFM.</dd>
</dl>
</column>
<column name="other_config" key="mac-aging-time"
type='{"type": "integer", "minInteger": 1}'>
<p>
The maximum number of seconds to retain a MAC learning entry for
which no packets have been seen. The default is currently 300
seconds (5 minutes). The value, if specified, is forced into a
reasonable range, currently 15 to 3600 seconds.
</p>
<p>
A short MAC aging time allows a network to more quickly detect that a
host is no longer connected to a switch port. However, it also makes
it more likely that packets will be flooded unnecessarily, when they
are addressed to a connected host that rarely transmits packets. To
reduce the incidence of unnecessary flooding, use a MAC aging time
longer than the maximum interval at which a host will ordinarily
transmit packets.
</p>
</column>
<column name="other_config" key="mac-table-size"
type='{"type": "integer", "minInteger": 1}'>
<p>
The maximum number of MAC addresses to learn. The default is
currently 8192. The value, if specified, is forced into a reasonable
range, currently 10 to 1,000,000.
</p>
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Port" table="Port or bond configuration.">
<p>A port within a <ref table="Bridge"/>.</p>
<p>Most commonly, a port has exactly one ``interface,'' pointed to by its
<ref column="interfaces"/> column. Such a port logically
corresponds to a port on a physical Ethernet switch. A port
with more than one interface is a ``bonded port'' (see
<ref group="Bonding Configuration"/>).</p>
<p>Some properties that one might think as belonging to a port are actually
part of the port's <ref table="Interface"/> members.</p>
<column name="name">
Port name. For a non-bonded port, this should be the same as its
interface's name. Port names must otherwise be unique among the names of
ports, interfaces, and bridges on a host. Because port and interfaces
names are usually the same, the restrictions on the <ref
table="Interface" column="name"/> column in the <ref table="Interface"/>
table, particularly on length, also apply to port names. Refer to the
documentation for <ref table="Interface"/> names for details.
</column>
<column name="interfaces">
The port's interfaces. If there is more than one, this is a
bonded Port.
</column>
<group title="VLAN Configuration">
<p>
In short, a VLAN (short for ``virtual LAN'') is a way to partition a
single switch into multiple switches. VLANs can be confusing, so for
an introduction, please refer to the question ``What's a VLAN?'' in the
Open vSwitch FAQ.
</p>
<p>
A VLAN is sometimes encoded into a packet using a 802.1Q or 802.1ad
VLAN header, but every packet is part of some VLAN whether or not it is
encoded in the packet. (A packet that appears to have no VLAN is part
of VLAN 0, by default.) As a result, it's useful to think of a VLAN as
a metadata property of a packet, separate from how the VLAN is encoded.
For a given port, this column determines how the encoding of a packet
that ingresses or egresses the port maps to the packet's VLAN. When a
packet enters the switch, its VLAN is determined based on its setting
in this column and its VLAN headers, if any, and then, conceptually,
the VLAN headers are then stripped off. Conversely, when a packet
exits the switch, its VLAN and the settings in this column determine
what VLAN headers, if any, are pushed onto the packet before it
egresses the port.
</p>
<p>
The VLAN configuration in this column affects Open vSwitch only when it
is doing ``normal switching.'' It does not affect flows set up by an
OpenFlow controller, outside of the OpenFlow ``normal action.''
</p>
<p>
Bridge ports support the following types of VLAN configuration:
</p>
<dl>
<dt>trunk</dt>
<dd>
<p>
A trunk port carries packets on one or more specified VLANs
specified in the <ref column="trunks"/> column (often, on every
VLAN). A packet that ingresses on a trunk port is in the VLAN
specified in its 802.1Q header, or VLAN 0 if the packet has no
802.1Q header. A packet that egresses through a trunk port will
have an 802.1Q header if it has a nonzero VLAN ID.
</p>
<p>
Any packet that ingresses on a trunk port tagged with a VLAN that
the port does not trunk is dropped.
</p>
</dd>
<dt>access</dt>
<dd>
<p>
An access port carries packets on exactly one VLAN specified in the
<ref column="tag"/> column. Packets egressing on an access port
have no 802.1Q header.
</p>
<p>
Any packet with an 802.1Q header with a nonzero VLAN ID that
ingresses on an access port is dropped, regardless of whether the
VLAN ID in the header is the access port's VLAN ID.
</p>
</dd>
<dt>native-tagged</dt>
<dd>
A native-tagged port resembles a trunk port, with the exception that
a packet without an 802.1Q header that ingresses on a native-tagged
port is in the ``native VLAN'' (specified in the <ref column="tag"/>
column).
</dd>
<dt>native-untagged</dt>
<dd>
A native-untagged port resembles a native-tagged port, with the
exception that a packet that egresses on a native-untagged port in
the native VLAN will not have an 802.1Q header.
</dd>
<dt>dot1q-tunnel</dt>
<dd>
<p>
A dot1q-tunnel port is somewhat like an access port. Like an
access port, it carries packets on the single VLAN specified in the
<ref column="tag"/> column and this VLAN, called the service VLAN,
does not appear in an 802.1Q header for packets that ingress or
egress on the port. The main difference lies in the behavior when
packets that include a 802.1Q header ingress on the port. Whereas
an access port drops such packets, a dot1q-tunnel port treats these
as double-tagged with the outer service VLAN <ref column="tag"/>
and the inner customer VLAN taken from the 802.1Q header.
Correspondingly, to egress on the port, a packet outer VLAN (or
only VLAN) must be <ref column="tag"/>, which is removed before
egress, which exposes the inner (customer) VLAN if one is present.
</p>
<p>
If <ref column="cvlans"/> is set, only allows packets in the
specified customer VLANs.
</p>
</dd>
</dl>
<p>
A packet will only egress through bridge ports that carry the VLAN of
the packet, as described by the rules above.
</p>
<column name="vlan_mode">
<p>
The VLAN mode of the port, as described above. When this column is
empty, a default mode is selected as follows:
</p>
<ul>
<li>
If <ref column="tag"/> contains a value, the port is an access
port. The <ref column="trunks"/> column should be empty.
</li>
<li>
Otherwise, the port is a trunk port. The <ref column="trunks"/>
column value is honored if it is present.
</li>
</ul>
</column>
<column name="tag">
<p>
For an access port, the port's implicitly tagged VLAN. For a
native-tagged or native-untagged port, the port's native VLAN. Must
be empty if this is a trunk port.
</p>
</column>
<column name="trunks">
<p>
For a trunk, native-tagged, or native-untagged port, the 802.1Q VLAN
or VLANs that this port trunks; if it is empty, then the port trunks
all VLANs. Must be empty if this is an access port.
</p>
<p>
A native-tagged or native-untagged port always trunks its native
VLAN, regardless of whether <ref column="trunks"/> includes that
VLAN.
</p>
</column>
<column name="cvlans">
<p>
For a dot1q-tunnel port, the customer VLANs that this port includes.
If this is empty, the port includes all customer VLANs.
</p>
<p>
For other kinds of ports, this setting is ignored.
</p>
</column>
<column name="other_config" key="qinq-ethtype"
type='{"type": "string", "enum": ["set", ["802.1ad", "802.1q"]]}'>
<p>
For a dot1q-tunnel port, this is the TPID for the service tag, that
is, for the 802.1Q header that contains the service VLAN ID. Because
packets that actually ingress and egress a dot1q-tunnel port do not
include an 802.1Q header for the service VLAN, this does not affect
packets on the dot1q-tunnel port itself. Rather, it determines the
service VLAN for a packet that ingresses on a dot1q-tunnel port and
egresses on a trunk port.
</p>
<p>
The value <code>802.1ad</code> specifies TPID 0x88a8, which is also
the default if the setting is omitted. The value <code>802.1q</code>
specifies TPID 0x8100.
</p>
<p>
For other kinds of ports, this setting is ignored.
</p>
</column>
<column name="other_config" key="priority-tags"
type='{"type": "string",
"enum": ["set", ["never", "if-nonzero", "always"]]}'>
<p>
An 802.1Q header contains two important pieces of information: a VLAN
ID and a priority. A frame with a zero VLAN ID, called a
``priority-tagged'' frame, is supposed to be treated the same way as
a frame without an 802.1Q header at all (except for the priority).
</p>
<p>
However, some network elements ignore any frame that has 802.1Q
header at all, even when the VLAN ID is zero. Therefore, by default
Open vSwitch does not output priority-tagged frames, instead omitting
the 802.1Q header entirely if the VLAN ID is zero. Set this key to
<code>if-nonzero</code> to enable priority-tagged frames on a port.
</p>
<p>
For <code>if-nonzero</code> Open vSwitch omits the 802.1Q header on
output if both the VLAN ID and priority would be zero. Set to
<code>always</code> to retain the 802.1Q header in such frames as
well.
</p>
<p>
All frames output to native-tagged ports have a nonzero VLAN ID, so
this setting is not meaningful on native-tagged ports.
</p>
</column>
</group>
<group title="Bonding Configuration">
<p>A port that has more than one interface is a ``bonded port.'' Bonding
allows for load balancing and fail-over.</p>
<p>
The following types of bonding will work with any kind of upstream
switch. On the upstream switch, do not configure the interfaces as a
bond:
</p>
<dl>
<dt><code>balance-slb</code></dt>
<dd>
Balances flows among members based on source MAC address and
output VLAN, with periodic rebalancing as traffic patterns change.
</dd>
<dt><code>active-backup</code></dt>
<dd>
Assigns all flows to one member, failing over to a backup
member when the active member is disabled. This is the
only bonding mode in which interfaces may be plugged into different
upstream switches.
</dd>
</dl>
<p>
The following modes require the upstream switch to support 802.3ad with
successful LACP negotiation. If LACP negotiation fails and
other-config:lacp-fallback-ab is true, then <code>active-backup</code>
mode is used:
</p>
<dl>
<dt><code>balance-tcp</code></dt>
<dd>
Balances flows among members based on L3 and L4 protocol
information such as IP addresses and TCP/UDP ports.
</dd>
</dl>
<p>These columns apply only to bonded ports. Their values are
otherwise ignored.</p>
<column name="bond_mode">
<p>The type of bonding used for a bonded port. Defaults to
<code>active-backup</code> if unset.
</p>
</column>
<column name="other_config" key="bond-hash-basis"
type='{"type": "integer"}'>
An integer hashed along with flows when choosing output members
in load balanced bonds. When changed, all flows will be assigned
different hash values possibly causing member selection
decisions to change. Does not affect bonding modes which do not employ
load balancing such as <code>active-backup</code>.
</column>
<column name="other_config" key="lb-output-action"
type='{"type": "boolean"}'>
Enable/disable usage of optimized <code>lb_output</code> action for
balancing flows among output members in load balanced bonds in
<code>balance-tcp</code>. When enabled, it uses optimized path for
balance-tcp mode by using rss hash and avoids recirculation. This knob
does not affect other balancing modes.
</column>
<column name="other_config" key="bond-primary"
type='{"type": "string"}'>
If a member interface with this name exists in the bond and
is up, it will be made active. Relevant only when <ref
column="other_config" key="bond_mode"/> is
<code>active-backup</code> or if <code>balance-tcp</code> falls back
to <code>active-backup</code> (e.g., LACP negotiation fails and
<ref column="other_config" key="lacp-fallback-ab"/> is
<code>true</code>).
</column>
<column name="other_config" key="all-members-active"
type='{"type": "boolean"}'>
<p>
Enable/Disable delivery of broadcast/multicast packets on secondary
interface of a balance-slb bond. Relevant only when
<ref column="lacp"/> is <code>off</code>.
</p>
<p>
This parameter is identical to <code>all_slaves_active</code> for
Linux kernel bonds. Disabled by default as it is not a desirable
configuration for most users.
</p>
</column>
<group title="Link Failure Detection">
<p>
An important part of link bonding is detecting that links are down so
that they may be disabled. These settings determine how Open vSwitch
detects link failure.
</p>
<column name="other_config" key="bond-detect-mode"
type='{"type": "string", "enum": ["set", ["carrier", "miimon"]]}'>
The means used to detect link failures. Defaults to
<code>carrier</code> which uses each interface's carrier to detect
failures. When set to <code>miimon</code>, will check for failures
by polling each interface's MII.
</column>
<column name="other_config" key="bond-miimon-interval"
type='{"type": "integer"}'>
The interval, in milliseconds, between successive attempts to poll
each interface's MII. Relevant only when <ref column="other_config"
key="bond-detect-mode"/> is <code>miimon</code>.
</column>
<column name="bond_updelay">
<p>
The number of milliseconds for which the link must stay up on an
interface before the interface is considered to be up. Specify
<code>0</code> to enable the interface immediately.
</p>
<p>
This setting is honored only when at least one bonded interface is
already enabled. When no interfaces are enabled, then the first
bond interface to come up is enabled immediately.
</p>
</column>
<column name="bond_downdelay">
The number of milliseconds for which the link must stay down on an
interface before the interface is considered to be down. Specify
<code>0</code> to disable the interface immediately.
</column>
</group>
<group title="LACP Configuration">
<p>
LACP, the Link Aggregation Control Protocol, is an IEEE standard that
allows switches to automatically detect that they are connected by
multiple links and aggregate across those links. These settings
control LACP behavior.
</p>
<column name="lacp">
Configures LACP on this port. LACP allows directly connected
switches to negotiate which links may be bonded. LACP may be enabled
on non-bonded ports for the benefit of any switches they may be
connected to. <code>active</code> ports are allowed to initiate LACP
negotiations. <code>passive</code> ports are allowed to participate
in LACP negotiations initiated by a remote switch, but not allowed to
initiate such negotiations themselves. If LACP is enabled on a port
whose partner switch does not support LACP, the bond will be
disabled, unless other-config:lacp-fallback-ab is set to true.
Defaults to <code>off</code> if unset.
</column>
<column name="other_config" key="lacp-system-id">
The LACP system ID of this <ref table="Port"/>. The system ID of a
LACP bond is used to identify itself to its partners. Must be a
nonzero MAC address. Defaults to the bridge Ethernet address if
unset.
</column>
<column name="other_config" key="lacp-system-priority"
type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
The LACP system priority of this <ref table="Port"/>. In LACP
negotiations, link status decisions are made by the system with the
numerically lower priority.
</column>
<column name="other_config" key="lacp-time"
type='{"type": "string", "enum": ["set", ["fast", "slow"]]}'>
<p>
The LACP timing which should be used on this <ref table="Port"/>.
By default <code>slow</code> is used. When configured to be
<code>fast</code> LACP heartbeats are requested at a rate of once
per second causing connectivity problems to be detected more
quickly. In <code>slow</code> mode, heartbeats are requested at a
rate of once every 30 seconds.
</p>
</column>
<column name="other_config" key="lacp-fallback-ab"
type='{"type": "boolean"}'>
<p>
Determines the behavior of openvswitch bond in LACP mode. If
the partner switch does not support LACP, setting this option
to <code>true</code> allows openvswitch to fallback to
active-backup. If the option is set to <code>false</code>, the
bond will be disabled. In both the cases, once the partner switch
is configured to LACP mode, the bond will use LACP.
</p>
</column>
</group>
<group title="Rebalancing Configuration">
<p>
These settings control behavior when a bond is in
<code>balance-slb</code> or <code>balance-tcp</code> mode.
</p>
<column name="other_config" key="bond-rebalance-interval"
type='{"type": "integer",
"minInteger": 0, "maxInteger": 2147483647}'>
For a load balanced bonded port, the number of milliseconds between
successive attempts to rebalance the bond, that is, to move flows
from one interface on the bond to another in an attempt to keep usage
of each interface roughly equal. If zero, load balancing is disabled
on the bond (link failure still cause flows to move). If
less than 1000ms, the rebalance interval will be 1000ms.
</column>
</group>
<column name="bond_fake_iface">
For a bonded port, whether to create a fake internal interface with the
name of the port. Use only for compatibility with legacy software that
requires this.
</column>
</group>
<group title="Spanning Tree Protocol">
<p>
The configuration here is only meaningful, and the status is only
populated, when 802.1D-1998 Spanning Tree Protocol is enabled on the
port's <ref column="Bridge"/> with its <ref column="stp_enable"/>
column.
</p>
<group title="STP Configuration">
<column name="other_config" key="stp-enable"
type='{"type": "boolean"}'>
When STP is enabled on a bridge, it is enabled by default on all of
the bridge's ports except bond, internal, and mirror ports (which do
not work with STP). If this column's value is <code>false</code>,
STP is disabled on the port.
</column>
<column name="other_config" key="stp-port-num"
type='{"type": "integer", "minInteger": 1, "maxInteger": 255}'>
The port number used for the lower 8 bits of the port-id. By
default, the numbers will be assigned automatically. If any
port's number is manually configured on a bridge, then they
must all be.
</column>
<column name="other_config" key="stp-port-priority"
type='{"type": "integer", "minInteger": 0, "maxInteger": 255}'>
The port's relative priority value for determining the root
port (the upper 8 bits of the port-id). A port with a lower
port-id will be chosen as the root port. By default, the
priority is 0x80.
</column>
<column name="other_config" key="stp-path-cost"
type='{"type": "integer", "minInteger": 0, "maxInteger": 65535}'>
Spanning tree path cost for the port. A lower number indicates
a faster link. By default, the cost is based on the maximum
speed of the link.
</column>
</group>
<group title="STP Status">
<column name="status" key="stp_port_id">
The port ID used in spanning tree advertisements for this port, as 4
hex digits. Configuring the port ID is described in the
<code>stp-port-num</code> and <code>stp-port-priority</code> keys of
the <code>other_config</code> section earlier.
</column>
<column name="status" key="stp_state"
type='{"type": "string", "enum": ["set",
["disabled", "listening", "learning",
"forwarding", "blocking"]]}'>
STP state of the port.
</column>
<column name="status" key="stp_sec_in_state"
type='{"type": "integer", "minInteger": 0}'>
The amount of time this port has been in the current STP state, in
seconds.
</column>
<column name="status" key="stp_role"
type='{"type": "string", "enum": ["set",
["root", "designated", "alternate"]]}'>
STP role of the port.
</column>
</group>
</group>
<group title="Rapid Spanning Tree Protocol">
<p>
The configuration here is only meaningful, and the status and
statistics are only populated, when 802.1D-1998 Spanning Tree Protocol
is enabled on the port's <ref column="Bridge"/> with its <ref
column="stp_enable"/> column.
</p>
<group title="RSTP Configuration">
<column name="other_config" key="rstp-enable"
type='{"type": "boolean"}'>
When RSTP is enabled on a bridge, it is enabled by default on all of
the bridge's ports except bond, internal, and mirror ports (which do
not work with RSTP). If this column's value is <code>false</code>,
RSTP is disabled on the port.
</column>
<column name="other_config" key="rstp-port-priority"
type='{"type": "integer", "minInteger": 0, "maxInteger": 240}'>
The port's relative priority value for determining the root port, in
multiples of 16. By default, the port priority is 0x80 (128). Any
value in the lower 4 bits is rounded off. The significant upper 4
bits become the upper 4 bits of the port-id. A port with the lowest
port-id is elected as the root.
</column>
<column name="other_config" key="rstp-port-num"
type='{"type": "integer", "minInteger": 1, "maxInteger": 4095}'>
The local RSTP port number, used as the lower 12 bits of the port-id.
By default the port numbers are assigned automatically, and typically
may not correspond to the OpenFlow port numbers. A port with the
lowest port-id is elected as the root.
</column>
<column name="other_config" key="rstp-path-cost"
type='{"type": "integer"}'>
The port path cost. The Port's contribution, when it is
the Root Port, to the Root Path Cost for the Bridge. By default the
cost is automatically calculated from the port's speed.
</column>
<column name="other_config" key="rstp-port-admin-edge"
type='{"type": "boolean"}'>
The admin edge port parameter for the Port. Default is
<code>false</code>.
</column>
<column name="other_config" key="rstp-port-auto-edge"
type='{"type": "boolean"}'>
The auto edge port parameter for the Port. Default is
<code>true</code>.
</column>
<column name="other_config" key="rstp-port-mcheck"
type='{"type": "boolean"}'>
<p>
The mcheck port parameter for the Port. Default is
<code>false</code>. May be set to force the Port Protocol
Migration state machine to transmit RST BPDUs for a
MigrateTime period, to test whether all STP Bridges on the
attached LAN have been removed and the Port can continue to
transmit RSTP BPDUs. Setting mcheck has no effect if the
Bridge is operating in STP Compatibility mode.
</p>
<p>
Changing the value from <code>true</code> to
<code>false</code> has no effect, but needs to be done if
this behavior is to be triggered again by subsequently
changing the value from <code>false</code> to
<code>true</code>.
</p>
</column>
</group>
<group title="RSTP Status">
<column name="rstp_status" key="rstp_port_id">
The port ID used in spanning tree advertisements for this port, as 4
hex digits. Configuring the port ID is described in the
<code>rstp-port-num</code> and <code>rstp-port-priority</code> keys
of the <code>other_config</code> section earlier.
</column>
<column name="rstp_status" key="rstp_port_role"
type='{"type": "string", "enum": ["set",
["Root", "Designated", "Alternate", "Backup", "Disabled"]]}'>
RSTP role of the port.
</column>
<column name="rstp_status" key="rstp_port_state"
type='{"type": "string", "enum": ["set",
["Disabled", "Learning", "Forwarding", "Discarding"]]}'>
RSTP state of the port.
</column>
<column name="rstp_status" key="rstp_designated_bridge_id">
The port's RSTP designated bridge ID, in the same form as <ref
column="rstp_status" key="rstp_bridge_id"/> in the <ref
table="Bridge"/> table.
</column>
<column name="rstp_status" key="rstp_designated_port_id">
The port's RSTP designated port ID, as 4 hex digits.
</column>
<column name="rstp_status" key="rstp_designated_path_cost"
type='{"type": "integer"}'>
The port's RSTP designated path cost. Lower is better.
</column>
</group>
<group title="RSTP Statistics">
<column name="rstp_statistics" key="rstp_tx_count">
Number of RSTP BPDUs transmitted through this port.
</column>
<column name="rstp_statistics" key="rstp_rx_count">
Number of valid RSTP BPDUs received by this port.
</column>
<column name="rstp_statistics" key="rstp_error_count">
Number of invalid RSTP BPDUs received by this port.
</column>
<column name="rstp_statistics" key="rstp_uptime">
The duration covered by the other RSTP statistics, in seconds.
</column>
</group>
</group>
<group title="Multicast Snooping">
<column name="other_config" key="mcast-snooping-flood"
type='{"type": "boolean"}'>
<p>
If set to <code>true</code>, multicast packets (except Reports) are
unconditionally forwarded to the specific port.
</p>
</column>
<column name="other_config" key="mcast-snooping-flood-reports"
type='{"type": "boolean"}'>
<p>
If set to <code>true</code>, multicast Reports are unconditionally
forwarded to the specific port.
</p>
</column>
</group>
<group title="Other Features">
<column name="qos">
Quality of Service configuration for this port.
</column>
<column name="mac">
The MAC address to use for this port for the purpose of choosing the
bridge's MAC address. This column does not necessarily reflect the
port's actual MAC address, nor will setting it change the port's actual
MAC address.
</column>
<column name="fake_bridge">
Does this port represent a sub-bridge for its tagged VLAN within the
Bridge? See ovs-vsctl(8) for more information.
</column>
<column name="protected" type='{"type": "boolean"}'>
The protected ports feature allows certain ports to be designated as
protected. Traffic between protected ports is blocked. Protected
ports can send traffic to unprotected ports. Unprotected ports can
send traffic to any port.
Default is false.
</column>
<column name="external_ids" key="fake-bridge-*">
External IDs for a fake bridge (see the <ref column="fake_bridge"/>
column) are defined by prefixing a <ref table="Bridge"/> <ref
table="Bridge" column="external_ids"/> key with
<code>fake-bridge-</code>,
e.g. <code>fake-bridge-bridge-id</code>.
</column>
<column name="other_config" key="transient"
type='{"type": "boolean"}'>
<p>
If set to <code>true</code>, the port will be removed when
<code>ovs-ctl start --delete-transient-ports</code> is used.
</p>
</column>
</group>
<column name="bond_active_slave">
For a bonded port, record the MAC address of the current active
member.
</column>
<group title="Port Statistics">
<p>
Key-value pairs that report port statistics. The update period
is controlled by <ref column="other_config"
key="stats-update-interval"/> in the <code>Open_vSwitch</code> table.
</p>
<group title="Statistics: STP transmit and receive counters">
<column name="statistics" key="stp_tx_count">
Number of STP BPDUs sent on this port by the spanning
tree library.
</column>
<column name="statistics" key="stp_rx_count">
Number of STP BPDUs received on this port and accepted by the
spanning tree library.
</column>
<column name="statistics" key="stp_error_count">
Number of bad STP BPDUs received on this port. Bad BPDUs
include runt packets and those with an unexpected protocol ID.
</column>
</group>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Interface" title="One physical network device in a Port.">
An interface within a <ref table="Port"/>.
<group title="Core Features">
<column name="name">
<p>
Interface name. Should be alphanumeric. For non-bonded port, this
should be the same as the port name. It must otherwise be unique
among the names of ports, interfaces, and bridges on a host.
</p>
<p>
The maximum length of an interface name depends on the underlying
datapath:
</p>
<ul>
<li>
The names of interfaces implemented as Linux and BSD network
devices, including interfaces with type <code>internal</code>,
<code>tap</code>, or <code>system</code> plus the different types
of tunnel ports, are limited to 15 bytes. Windows limits these
names to 255 bytes.
</li>
<li>
The names of patch ports are not used in the underlying datapath,
so operating system restrictions do not apply. Thus, they may have
arbitrary length.
</li>
</ul>
<p>
Regardless of other restrictions, OpenFlow only supports 15-byte
names, which means that <code>ovs-ofctl</code> and OpenFlow
controllers will show names truncated to 15 bytes.
</p>
</column>
<column name="ifindex">
A positive interface index as defined for SNMP MIB-II in RFCs 1213 and
2863, if the interface has one, otherwise 0. The ifindex is useful for
seamless integration with protocols such as SNMP and sFlow.
</column>
<column name="mac_in_use">
The MAC address in use by this interface.
</column>
<column name="mac">
<p>Ethernet address to set for this interface. If unset then the
default MAC address is used:</p>
<ul>
<li>For the local interface, the default is the lowest-numbered MAC
address among the other bridge ports, either the value of the
<ref table="Port" column="mac"/> in its <ref table="Port"/> record,
if set, or its actual MAC (for bonded ports, the MAC of its
member
whose name is first in alphabetical order). Internal ports and
bridge ports that are used as port mirroring destinations (see the
<ref table="Mirror"/> table) are ignored.</li>
<li>For other internal interfaces, the default MAC is randomly
generated.</li>
<li>External interfaces typically have a MAC address associated with
their hardware.</li>
</ul>
<p>Some interfaces may not have a software-controllable MAC
address. This option only affects internal ports. For other type ports,
you can change the MAC address outside Open vSwitch, using ip command.</p>
</column>
<column name="error">
If the configuration of the port failed, as indicated by -1 in <ref
column="ofport"/>, Open vSwitch sets this column to an error
description in human readable form. Otherwise, Open vSwitch clears
this column.
</column>
<group title="OpenFlow Port Number">
<p>
When a client adds a new interface, Open vSwitch chooses an OpenFlow
port number for the new port. If the client that adds the port fills
in <ref column="ofport_request"/>, then Open vSwitch tries to use its
value as the OpenFlow port number. Otherwise, or if the requested
port number is already in use or cannot be used for another reason,
Open vSwitch automatically assigns a free port number. Regardless of
how the port number was obtained, Open vSwitch then reports in <ref
column="ofport"/> the port number actually assigned.
</p>
<p>
Open vSwitch limits the port numbers that it automatically assigns to
the range 1 through 32,767, inclusive. Controllers therefore have
free use of ports 32,768 and up.
</p>
<column name="ofport">
<p>
OpenFlow port number for this interface. Open vSwitch sets this
column's value, so other clients should treat it as read-only.
</p>
<p>
The OpenFlow ``local'' port (<code>OFPP_LOCAL</code>) is 65,534.
The other valid port numbers are in the range 1 to 65,279,
inclusive. Value -1 indicates an error adding the interface.
</p>
</column>
<column name="ofport_request"
type='{"type": "integer", "minInteger": 1, "maxInteger": 65279}'>
<p>
Requested OpenFlow port number for this interface.
</p>
<p>
A client should ideally set this column's value in the same
database transaction that it uses to create the interface. Open
vSwitch version 2.1 and later will honor a later request for a
specific port number, althuogh it might confuse some controllers:
OpenFlow does not have a way to announce a port number change, so
Open vSwitch represents it over OpenFlow as a port deletion
followed immediately by a port addition.
</p>
<p>
If <ref column="ofport_request"/> is set or changed to some other
port's automatically assigned port number, Open vSwitch chooses a
new port number for the latter port.
</p>
</column>
</group>
</group>
<group title="System-Specific Details">
<column name="type">
<p>
The interface type. The types supported by a particular instance of
Open vSwitch are listed in the <ref table="Open_vSwitch"
column="iface_types"/> column in the <ref table="Open_vSwitch"/>
table. The following types are defined:
</p>
<dl>
<dt><code>system</code></dt>
<dd>An ordinary network device, e.g. <code>eth0</code> on Linux.
Sometimes referred to as ``external interfaces'' since they are
generally connected to hardware external to that on which the Open
vSwitch is running. The empty string is a synonym for
<code>system</code>.</dd>
<dt><code>internal</code></dt>
<dd>A simulated network device that sends and receives traffic. An
internal interface whose <ref column="name"/> is the same as its
bridge's <ref table="Open_vSwitch" column="name"/> is called the
``local interface.'' It does not make sense to bond an internal
interface, so the terms ``port'' and ``interface'' are often used
imprecisely for internal interfaces.</dd>
<dt><code>tap</code></dt>
<dd>
<p>
A TUN/TAP device managed by Open vSwitch.
</p>
<p>
Open vSwitch checks the interface state before send packets
to the device. When it is <code>down</code>, the packets are
dropped and the tx_dropped statistic is updated accordingly.
Older versions of Open vSwitch did not check the interface state
and then the tx_packets was incremented along with tx_dropped.
</p>
</dd>
<dt><code>geneve</code></dt>
<dd>
An Ethernet over Geneve (<code>http://tools.ietf.org/html/draft-ietf-nvo3-geneve</code>)
IPv4/IPv6 tunnel.
A description of how to match and set Geneve options can be found
in the <code>ovs-ofctl</code> manual page.
</dd>
<dt><code>gre</code></dt>
<dd>
Generic Routing Encapsulation (GRE) over IPv4 tunnel,
configurable to encapsulate layer 2 or layer 3 traffic.
</dd>
<dt><code>ip6gre</code></dt>
<dd>
Generic Routing Encapsulation (GRE) over IPv6 tunnel,
encapsulate layer 2 traffic.
</dd>
<dt><code>vxlan</code></dt>
<dd>
<p>
An Ethernet tunnel over the UDP-based VXLAN protocol described in
RFC 7348.
</p>
<p>
Open vSwitch uses IANA-assigned UDP destination port 4789. The
source port used for VXLAN traffic varies on a per-flow basis
and is in the ephemeral port range.
</p>
</dd>
<dt><code>lisp</code></dt>
<dd>
<p>
This port type is deprecated.
</p>
<p>
A layer 3 tunnel over the experimental, UDP-based Locator/ID
Separation Protocol (RFC 6830).
</p>
<p>
Only IPv4 and IPv6 packets are supported by the protocol, and
they are sent and received without an Ethernet header. Traffic
to/from LISP ports is expected to be configured explicitly, and
the ports are not intended to participate in learning based
switching. As such, they are always excluded from packet
flooding.
</p>
</dd>
<dt><code>stt</code></dt>
<dd>
<p>
This port type is deprecated.
</p>
<p>
The Stateless TCP Tunnel (STT) is particularly useful when tunnel
endpoints are in end-systems, as it utilizes the capabilities of
standard network interface cards to improve performance.
STT utilizes a TCP-like header inside the IP header. It is
stateless, i.e., there is no TCP connection state of any kind
associated with the tunnel. The TCP-like header is used to
leverage the capabilities of existing network interface cards,
but should not be interpreted as implying any sort of connection
state between endpoints.
</p>
<p>
Since the STT protocol does not engage in the usual TCP 3-way
handshake, so it will have difficulty traversing stateful
firewalls.
</p>
<p>
The protocol is documented at
<code>https://tools.ietf.org/html/draft-davie-stt</code>.
All traffic uses a default destination port of 7471.
</p>
</dd>
<dt><code>patch</code></dt>
<dd>
A pair of virtual devices that act as a patch cable.
</dd>
<dt><code>gtpu</code></dt>
<dd>
<p>
GPRS Tunneling Protocol (GTP) is a group of IP-based communications
protocols used to carry general packet radio service (GPRS) within
GSM, UMTS and LTE networks. GTP-U is used for carrying user data
within the GPRS core network and between the radio access network
and the core network. The user data transported can be packets in
any of IPv4, IPv6, or PPP formats.
</p>
<p>
The protocol is documented at
http://www.3gpp.org/DynaReport/29281.htm
</p>
<p>
Open vSwitch uses UDP destination port 2152. The source port used
for GTP traffic varies on a per-flow basis and is in the ephemeral
port range.
</p>
</dd>
<dt><code>Bareudp</code></dt>
<dd>
<p>
The Bareudp tunnel provides a generic L3 encapsulation support for
tunnelling different L3 protocols like MPLS, IP, NSH etc. inside a
UDP tunnel.
</p>
</dd>
<dt><code>srv6</code></dt>
<dd>
<p>
Segment Routing IPv6 (SRv6) tunnel encapsulates L3 traffic as
"IPv6 in IPv6" or "IPv4 in IPv6" with Segment Routing Header (SRH)
defined in RFC 8754. The segment list in SRH can be set using a
SRv6 specific option.
</p>
</dd>
</dl>
</column>
</group>
<group title="Tunnel Options">
<p>
These options apply to interfaces with <ref column="type"/> of
<code>geneve</code>, <code>bareudp</code>, <code>gre</code>,
<code>ip6gre</code>, <code>vxlan</code>, <code>lisp</code>,
<code>stt</code> and <code>srv6</code>.
</p>
<p>
Each tunnel must be uniquely identified by the combination of <ref
column="type"/>, <ref column="options" key="remote_ip"/>, <ref
column="options" key="local_ip"/>, and <ref column="options"
key="in_key"/>. If two ports are defined that are the same except one
has an optional identifier and the other does not, the more specific
one is matched first. <ref column="options" key="in_key"/> is
considered more specific than <ref column="options" key="local_ip"/> if
a port defines one and another port defines the other.
<ref column="options" key="in_key"/> is not applicable for bareudp
and srv6 tunnels. Hence it is not considered while identifying
bareudp or srv6 tunnels.
</p>
<column name="options" key="remote_ip">
<p>Required. The remote tunnel endpoint, one of:</p>
<ul>
<li>
An IPv4 or IPv6 address (not a DNS name), e.g. <code>192.168.0.123</code>.
Only unicast endpoints are supported.
</li>
<li>
The word <code>flow</code>. The tunnel accepts packets from any
remote tunnel endpoint. To process only packets from a specific
remote tunnel endpoint, the flow entries may match on the
<code>tun_src</code> or <code>tun_ipv6_src</code>field. When
sending packets to a <code>remote_ip=flow</code> tunnel, the flow
actions must explicitly set the <code>tun_dst</code> or
<code>tun_ipv6_dst</code> field to the IP address of the desired
remote tunnel endpoint, e.g. with a <code>set_field</code> action.
</li>
</ul>
<p>
The remote tunnel endpoint for any packet received from a tunnel
is available in the <code>tun_src</code> field for matching in the
flow table.
</p>
</column>
<column name="options" key="local_ip">
<p>
Optional. The tunnel destination IP that received packets must match.
Default is to match all addresses. If specified, may be one of:
</p>
<ul>
<li>
An IPv4/IPv6 address (not a DNS name), e.g. <code>192.168.12.3</code>.
</li>
<li>
The word <code>flow</code>. The tunnel accepts packets sent to any
of the local IP addresses of the system running OVS. To process
only packets sent to a specific IP address, the flow entries may
match on the <code>tun_dst</code> or <code>tun_ipv6_dst</code> field.
When sending packets to a <code>local_ip=flow</code> tunnel, the flow
actions may explicitly set the <code>tun_src</code> or <code>tun_ipv6_src</code>
field to the desired IP address, e.g. with a <code>set_field</code> action.
However, while routing the tunneled packet out, the local system may
override the specified address with the local IP address configured for the
outgoing system interface.
<p>
This option is valid only for tunnels also configured with the
<code>remote_ip=flow</code> option.
</p>
</li>
</ul>
<p>
The tunnel destination IP address for any packet received from a
tunnel is available in the <code>tun_dst</code> or <code>tun_ipv6_dst</code>
field for matching in the flow table.
</p>
</column>
<column name="options" key="in_key">
<p>
Optional, not applicable for <code>bareudp</code> and
<code>srv6</code>. The key that received packets must contain,
one of:
</p>
<ul>
<li>
<code>0</code>. The tunnel receives packets with no key or with a
key of 0. This is equivalent to specifying no <ref column="options"
key="in_key"/> at all.
</li>
<li>
A positive 24-bit (for Geneve, VXLAN, and LISP), 32-bit (for GRE)
or 64-bit (for STT) number. The tunnel receives only
packets with the specified key.
</li>
<li>
The word <code>flow</code>. The tunnel accepts packets with any
key. The key will be placed in the <code>tun_id</code> field for
matching in the flow table. The <code>ovs-fields</code>(7) manual
page contains additional information about matching fields in
OpenFlow flows.
</li>
</ul>
<p>
</p>
</column>
<column name="options" key="out_key">
<p>
Optional, not applicable for <code>bareudp</code> and
<code>srv6</code>. The key to be set on outgoing packets,
one of:
</p>
<ul>
<li>
<code>0</code>. Packets sent through the tunnel will have no key.
This is equivalent to specifying no <ref column="options"
key="out_key"/> at all.
</li>
<li>
A positive 24-bit (for Geneve, VXLAN and LISP), 32-bit (for GRE) or
64-bit (for STT) number. Packets sent through the tunnel
will have the specified key.
</li>
<li>
The word <code>flow</code>. Packets sent through the tunnel will
have the key set using the <code>set_tunnel</code> Nicira OpenFlow
vendor extension (0 is used in the absence of an action). The
<code>ovs-fields</code>(7) manual page contains additional
information about the Nicira OpenFlow vendor extensions.
</li>
</ul>
</column>
<column name="options" key="dst_port">
Optional. The tunnel transport layer destination port, for UDP and TCP
based tunnel protocols (Geneve, VXLAN, LISP, and STT).
</column>
<column name="options" key="key">
Optional. Shorthand to set <code>in_key</code> and
<code>out_key</code> at the same time.
</column>
<column name="options" key="tos">
Optional. The value of the ToS bits to be set on the encapsulating
packet. ToS is interpreted as DSCP and ECN bits, ECN part must be
zero. It may also be the word <code>inherit</code>, in which case
the ToS will be copied from the inner packet if it is IPv4 or IPv6
(otherwise it will be 0). The ECN fields are always inherited.
Default is 0.
</column>
<column name="options" key="ttl">
Optional. The TTL to be set on the encapsulating packet. It may also
be the word <code>inherit</code>, in which case the TTL will be copied
from the inner packet if it is IPv4 or IPv6 (otherwise it will be the
system default, typically 64). Default is the system default TTL.
</column>
<column name="options" key="df_default"
type='{"type": "boolean"}'>
Optional. If enabled, the Don't Fragment bit will be set on tunnel
outer headers to allow path MTU discovery. Default is enabled; set
to <code>false</code> to disable.
</column>
<column name="options" key="egress_pkt_mark">
Optional. The pkt_mark to be set on the encapsulating packet. This
option sets packet mark for the tunnel endpoint for all tunnel packets
including tunnel monitoring.
</column>
<group title="Tunnel Options: lisp only">
<column name="options" key="packet_type"
type='{"type": "string", "enum": ["set",
["legacy_l3", "ptap"]]}'>
<p>
LISP tunnel type is deprecated.
</p>
<p>
A LISP tunnel sends and receives only IPv4 and IPv6 packets. This
option controls what how the tunnel represents the packets that it
sends and receives:
</p>
<ul>
<li>
By default, or if this option is <code>legacy_l3</code>, the
tunnel represents packets as Ethernet frames for compatibility
with legacy OpenFlow controllers that expect this behavior.
</li>
<li>
If this option is <code>ptap</code>, the tunnel represents
packets using the <code>packet_type</code> mechanism introduced
in OpenFlow 1.5.
</li>
</ul>
</column>
</group>
<group title="Tunnel Options: vxlan only">
<column name="options" key="exts">
<p>Optional. Comma separated list of optional VXLAN extensions to
enable. The following extensions are supported:</p>
<ul>
<li>
<code>gbp</code>: VXLAN-GBP allows to transport the group policy
context of a packet across the VXLAN tunnel to other network
peers. See the description of <code>tun_gbp_id</code> and
<code>tun_gbp_flags</code> in <code>ovs-fields</code>(7) for
additional information.
(<code>https://tools.ietf.org/html/draft-smith-vxlan-group-policy</code>)
</li>
<li>
<code>gpe</code>: Support for Generic Protocol Encapsulation in
accordance with IETF draft
<code>https://tools.ietf.org/html/draft-ietf-nvo3-vxlan-gpe</code>.
Without this option, a VXLAN packet always encapsulates an
Ethernet frame. With this option, an VXLAN packet may also
encapsulate an IPv4, IPv6, NSH, or MPLS packet.
</li>
</ul>
</column>
<column name="options" key="packet_type"
type='{"type": "string", "enum": ["set",
["legacy_l2", "legacy_l3", "ptap"]]}'>
<p>
This option controls what types of packets the tunnel sends and
receives and how it represents them:
</p>
<ul>
<li>
By default, or if this option is <code>legacy_l2</code>, the
tunnel sends and receives only Ethernet frames.
</li>
<li>
If this option is <code>legacy_l3</code>, the tunnel sends and
receives only non-Ethernet (L3) packet, but the packets are
represented as Ethernet frames for compatibility with legacy
OpenFlow controllers that expect this behavior. This requires
enabling <code>gpe</code> in <ref column="options" key="exts"/>.
</li>
<li>
If this option is <code>ptap</code>, Open vSwitch represents
packets in the tunnel using the <code>packet_type</code>
mechanism introduced in OpenFlow 1.5. This mechanism supports
any kind of packet, but actually sending and receiving
non-Ethernet packets requires additionally enabling
<code>gpe</code> in <ref column="options" key="exts"/>.
</li>
</ul>
</column>
</group>
<group title="Tunnel Options: gre only">
<p>
<code>gre</code> interfaces support these options.
</p>
<column name="options" key="packet_type"
type='{"type": "string", "enum": ["set",
["legacy_l2", "legacy_l3", "ptap"]]}'>
<p>
This option controls what types of packets the tunnel sends and
receives and how it represents them:
</p>
<ul>
<li>
By default, or if this option is <code>legacy_l2</code>, the
tunnel sends and receives only Ethernet frames.
</li>
<li>
If this option is <code>legacy_l3</code>, the tunnel sends and
receives only non-Ethernet (L3) packet, but the packets are
represented as Ethernet frames for compatibility with legacy
OpenFlow controllers that expect this behavior.
</li>
<li>
The <code>legacy_l3</code> option is only available via the
user space datapath. The OVS kernel datapath does not support
devices of type ARPHRD_IPGRE which is the requirement for
<code>legacy_l3</code> type packets.
</li>
<li>
If this option is <code>ptap</code>, the tunnel sends and
receives any kind of packet. Open vSwitch represents packets in
the tunnel using the <code>packet_type</code> mechanism
introduced in OpenFlow 1.5.
</li>
</ul>
</column>
<column name="options" key="seq" type='{"type": "boolean"}'>
<p>
Optional. A 4-byte sequence number field for GRE tunnel only.
Default is disabled, set to <code>true</code> to enable.
Sequence number is incremented by one on each outgoing packet.
</p>
</column>
</group>
<group title="Tunnel Options: gre, ip6gre, geneve, bareudp and vxlan">
<p>
<code>gre</code>, <code>ip6gre</code>, <code>geneve</code>,
<code>bareudp</code> and <code>vxlan</code> interfaces support these
options.
</p>
<column name="options" key="csum" type='{"type": "boolean"}'>
<p>
Optional. Compute encapsulation header (either GRE or UDP)
checksums on outgoing packets. When unset (the default value),
checksum computing for outgoing packets is enabled for UDP IPv6
tunnels, and disabled for GRE and IPv4 UDP tunnels. When set to
<code>false</code>, no checksums will be computed for outgoing
tunnel encapsulation headers. When <code>true</code>, checksums
will be computed for all outgoing tunnel encapsulation headers.
Checksums present on incoming packets will be validated
regardless of this setting. Incoming packets without a checksum
will also be accepted regardless of this setting.
</p>
<p>
When using the upstream Linux kernel module, computation of
checksums for <code>geneve</code> and <code>vxlan</code> requires
Linux kernel version 4.0 or higher. <code>gre</code> and
<code>ip6gre</code> support checksums for all versions of
Open vSwitch that support GRE.
The out of tree kernel module distributed as part of OVS
can compute all tunnel checksums on any kernel version that it
is compatible with.
</p>
</column>
</group>
<group title="Tunnel Options: IPsec">
<p>
Setting any of these options enables IPsec support for a given
tunnel. <code>gre</code>, <code>geneve</code>,
<code>vxlan</code> and <code>stt</code>
interfaces support these options. See the <code>IPsec</code>
section in the <ref table="Open_vSwitch"/> table for a description
of each mode.
</p>
<column name="options" key="psk" type='{"type": "string"}'>
<p>
In PSK mode only, the preshared secret to negotiate tunnel. This
value must match on both tunnel ends.
</p>
</column>
<column name="options" key="remote_cert" type='{"type": "string"}'>
<p>
In self-signed certificate mode only, name of a PEM file
containing a certificate of the remote switch. The certificate
must be x.509 version 3 and with the string in common name (CN)
also set in the subject alternative name (SAN).
</p>
</column>
<column name="options" key="remote_name" type='{"type": "string"}'>
<p>
In CA-signed certificate mode only, common name (CN) of the remote
certificate.
</p>
</column>
</group>
</group>
<group title="Tunnel Options: erspan only">
<p>
Only <code>erspan</code> interfaces support these options.
</p>
<column name="options" key="erspan_idx">
<p>
20 bit index/port number associated with the ERSPAN traffic's
source port and direction (ingress/egress). This field is
platform dependent.
</p>
</column>
<column name="options" key="erspan_ver">
<p>
ERSPAN version: 1 for version 1 (type II)
or 2 for version 2 (type III).
</p>
</column>
<column name="options" key="erspan_dir">
<p>
Specifies the ERSPAN v2 mirrored traffic's direction.
1 for egress traffic, and 0 for ingress traffic.
</p>
</column>
<column name="options" key="erspan_hwid">
<p>
ERSPAN hardware ID is a 6-bit unique identifier of an
ERSPAN v2 engine within a system.
</p>
</column>
</group>
<group title="Tunnel Options: Bareudp only">
<column name="options" key="payload_type">
<p>
Specifies the ethertype of the l3 protocol the bareudp
device is tunnelling. For the tunnels which supports multiple
ethertypes of a l3 protocol (IP, MPLS) this field specifies the
protocol name as a string.
</p>
</column>
</group>
<group title="Tunnel Options: srv6 only">
<column name="options" key="srv6_segs">
<p>
Specifies the segment list in Segment Routing Header (SRH).
It consists of a comma-separated list of segments represented
in IPv6 format, e.g. "fc00:100::1,fc00:200::1,fc00:300::1".
Note that the first segment must be the same as
<ref column="options" key="remote_ip"/>.
</p>
</column>
<column name="options" key="srv6_flowlabel"
type='{"type": "string",
"enum": ["set", ["zero", "copy", "compute"]]}'>
<p>
Optional.
This option controls how flowlabel in outer IPv6 header is
configured. It gives the benefit of IPv6 flow label based
load balancing, which is supported by some popular vendor
appliances. Like net.ipv6.seg6_flowlabel sysconfig, it is
one of the three values below:
</p>
<ul>
<li>
By default, or if this option is <code>copy</code>, copy the
flowlabel of inner IPv6 header to the flowlabel of outer IPv6
header. If inner header is not IPv6, it is set to 0.
</li>
<li>
If this option is <code>zero</code>, simply set flowlabel to 0.
</li>
<li>
If this option is <code>compute</code>, set flowlabel to a hash
over the L3/L4 fields of the inner packet.
</li>
</ul>
</column>
</group>
<group title="Patch Options">
<p>
These options apply only to <dfn>patch ports</dfn>, that is, interfaces
whose <ref column="type"/> column is <code>patch</code>. Patch ports
are mainly a way to connect otherwise independent bridges to one
another, similar to how one might plug an Ethernet cable (a ``patch
cable'') into two physical switches to connect those switches. The
effect of plugging a patch port into two switches is conceptually
similar to that of plugging the two ends of a Linux <code>veth</code>
device into those switches, but the implementation of patch ports makes
them much more efficient.
</p>
<p>
Patch ports may connect two different bridges (the usual case) or the
same bridge. In the latter case, take special care to avoid loops,
e.g. by programming appropriate flows with OpenFlow. Patch ports do
not work if its ends are attached to bridges on different datapaths,
e.g. to connect bridges in <code>system</code> and <code>netdev</code>
datapaths.
</p>
<p>
The following command creates and connects patch ports <code>p0</code>
and <code>p1</code> and adds them to bridges <code>br0</code> and
<code>br1</code>, respectively:
</p>
<pre>
ovs-vsctl add-port br0 p0 -- set Interface p0 type=patch options:peer=p1 \
-- add-port br1 p1 -- set Interface p1 type=patch options:peer=p0
</pre>
<column name="options" key="peer">
The <ref column="name"/> of the <ref table="Interface"/> for the other
side of the patch. The named <ref table="Interface"/>'s own
<code>peer</code> option must specify this <ref table="Interface"/>'s
name. That is, the two patch interfaces must have reversed <ref
column="name"/> and <code>peer</code> values.
</column>
</group>
<group title="PMD (Poll Mode Driver) Options">
<p>
Only PMD netdevs support these options.
</p>
<column name="options" key="n_rxq"
type='{"type": "integer", "minInteger": 1}'>
<p>
Specifies the maximum number of rx queues to be created for PMD
netdev. If not specified or specified to 0, one rx queue will
be created by default.
Not supported by DPDK vHost interfaces.
</p>
</column>
<column name="options" key="dpdk-devargs"
type='{"type": "string"}'>
<p>
Specifies the PCI address associated with the port for physical
devices, or the virtual driver to be used for the port when a virtual
PMD is intended to be used. For the latter, the argument string
typically takes the form of
<code>eth_<var>driver_name</var><var>x</var></code>, where
<var>driver_name</var> is a valid virtual DPDK PMD driver name and
<var>x</var> is a unique identifier of your choice for the given
port. Only supported by the dpdk port type.
</p>
</column>
<column name="other_config" key="pmd-rxq-affinity">
<p>Specifies mapping of RX queues of this interface to CPU cores.</p>
<p>Value should be set in the following form:</p>
<p>
<code>other_config:pmd-rxq-affinity=<rxq-affinity-list></code>
</p>
<p>where</p>
<p>
<ul>
<li>
<rxq-affinity-list> ::= NULL | <non-empty-list>
</li>
<li>
<non-empty-list> ::= <affinity-pair> |
<affinity-pair> , <non-empty-list>
</li>
<li>
<affinity-pair> ::= <queue-id> : <core-id>
</li>
</ul>
</p>
</column>
<column name="options" key="xdp-mode"
type='{"type": "string",
"enum": ["set", ["best-effort", "native-with-zerocopy",
"native", "generic"]]}'>
<p>
Specifies the operational mode of the XDP program.
<p>
In <code>native-with-zerocopy</code> mode the XDP program is loaded
into the device driver with zero-copy RX and TX enabled. This mode
requires device driver support and has the best performance because
there should be no copying of packets.
</p>
<p>
<code>native</code> is the same as
<code>native-with-zerocopy</code>, but without zero-copy
capability. This requires at least one copy between kernel and the
userspace. This mode also requires support from device driver.
</p>
<p>
In <code>generic</code> case the XDP program in kernel works after
skb allocation on early stages of packet processing inside the
network stack. This mode doesn't require driver support, but has
much lower performance.
</p>
<p>
<code>best-effort</code> tries to detect and choose the best
(fastest) from the available modes for current interface.
</p>
<p>
Note that this option is specific to netdev-afxdp.
Defaults to <code>best-effort</code> mode.
</p>
</p>
</column>
<column name="options" key="use-need-wakeup"
type='{"type": "boolean"}'>
<p>
Specifies whether to use need_wakeup feature in afxdp netdev.
If enabled, OVS explicitly wakes up the kernel RX, using poll()
syscall and wakes up TX, using sendto() syscall. For physical
devices, this feature improves the performance by avoiding
unnecessary sendto syscalls.
Defaults to true if supported by libbpf.
</p>
</column>
<column name="options" key="vhost-server-path"
type='{"type": "string"}'>
<p>
The value specifies the path to the socket associated with a vHost
User client mode device that has been or will be created by QEMU.
Only supported by dpdkvhostuserclient interfaces.
</p>
</column>
<column name="options" key="vhost-max-queue-pairs"
type='{"type": "integer", "minInteger" : 1, "maxInteger": 128}'>
<p>
The value specifies the maximum number of queue pairs supported by
a vHost device. This is ignored for vhost-user backends, only VDUSE
is supported.
Only supported by dpdkvhostuserclient interfaces.
</p>
<p>
Default value is 1.
</p>
</column>
<column name="options" key="tx-retries-max"
type='{"type": "integer", "minInteger": 0, "maxInteger": 32}'>
<p>
The value specifies the maximum amount of vhost tx retries that can
be made while trying to send a batch of packets to an interface.
Only supported by dpdkvhostuserclient interfaces.
</p>
<p>
Default value is 8.
</p>
</column>
<column name="options" key="n_rxq_desc"
type='{"type": "integer", "minInteger": 1, "maxInteger": 4096}'>
<p>
Specifies the rx queue size (number rx descriptors) for dpdk ports.
The value must be a power of 2, less than 4096 and supported
by the hardware of the device being configured.
If not specified or an incorrect value is specified, 2048 rx
descriptors will be used by default.
</p>
</column>
<column name="options" key="n_txq_desc"
type='{"type": "integer", "minInteger": 1, "maxInteger": 4096}'>
<p>
Specifies the tx queue size (number tx descriptors) for dpdk ports.
The value must be a power of 2, less than 4096 and supported
by the hardware of the device being configured.
If not specified or an incorrect value is specified, 2048 tx
descriptors will be used by default.
</p>
</column>
<column name="options" key="dpdk-vf-mac">
<p>
Ethernet address to set for this VF interface. If unset then the
default MAC address is used:
</p>
<ul>
<li>
For most drivers, the default MAC address assigned by their
hardware.
</li>
<li>
For bifurcated drivers, the MAC currently used by the kernel
netdevice.
</li>
</ul>
<p>This option may only be used with dpdk VF representors.</p>
</column>
<column name="options" key="rx-steering"
type='{"type": "string", "enum": ["set", ["rss", "rss+lacp"]]}'>
<p>
Configure hardware Rx queue steering policy.
</p>
<p>
This option takes one of the following values:
</p>
<dl>
<dt><code>rss</code></dt>
<dd>
Distribution of ingress packets in all Rx queues according to the
RSS algorithm. This is the default behaviour.
</dd>
<dt><code>rss+lacp</code></dt>
<dd>
Distribution of ingress packets according to the RSS algorithm on
all but the last Rx queue. An extra Rx queue is allocated for LACP
packets.
</dd>
</dl>
<p>
If the user has already configured multiple <ref table="Interface"
column="options" key="n_rxq" /> on the port, an additional one will
be allocated for the specified protocols. Even if the hardware cannot
satisfy the requested number of requested Rx queues, the last Rx
queue will be used. If only one Rx queue is available or if the
hardware does not support the rte_flow matchers/actions required to
redirect the selected protocols, custom <code>rx-steering</code> will
fall back to default <code>rss</code> mode.
</p>
<p>
This feature is mutually exclusive with
<ref table="Open_vSwitch" column="other_config" key="hw-offload" />
as it may conflict with the offloaded flows. If both are enabled,
<code>rx-steering</code> will fall back to default <code>rss</code>
mode.
</p>
<p>
This option is only applicable to interfaces with type
<code>dpdk</code>.
</p>
</column>
<column name="other_config" key="tx-steering"
type='{"type": "string",
"enum": ["set", ["thread", "hash"]]}'>
<p>
Specifies the Tx steering mode for the interface.
</p>
<p>
<code>thread</code> enables static (1:1) thread-to-txq mapping when
the number of Tx queues is greater than number of PMD threads, and
dynamic (N:1) mapping if equal or lower. In this mode a single thread
can not use more than 1 transmit queue of a given port.
</p>
<p>
<code>hash</code> enables hash-based Tx steering, which distributes
the packets on all the transmit queues based on their 5-tuples
hashes.
</p>
<p>
Defaults to <code>thread</code>.
</p>
</column>
</group>
<group title="EMC (Exact Match Cache) Configuration">
<p>
These settings controls behaviour of EMC lookups/insertions for packets
received from the interface.
</p>
<column name="other_config" key="emc-enable" type='{"type": "boolean"}'>
<p>
Specifies if Exact Match Cache (EMC) should be used while processing
packets received from this interface.
If true, <ref table="Open_vSwitch" column="other_config"
key="emc-insert-inv-prob"/> will have effect on this interface.
</p>
<p>
Defaults to true.
</p>
</column>
</group>
<group title="MTU">
<p>
The MTU (maximum transmission unit) is the largest amount of data
that can fit into a single Ethernet frame. The standard Ethernet
MTU is 1500 bytes. Some physical media and many kinds of virtual
interfaces can be configured with higher MTUs.
</p>
<p>
A client may change an interface MTU by filling in
<ref column="mtu_request"/>. Open vSwitch then reports in
<ref column="mtu"/> the currently configured value.
</p>
<column name="mtu">
<p>
The currently configured MTU for the interface.
</p>
<p>
This column will be empty for an interface that does not
have an MTU as, for example, some kinds of tunnels do not.
</p>
<p>
Open vSwitch sets this column's value, so other clients should treat
it as read-only.
</p>
</column>
<column name="mtu_request"
type='{"type": "integer", "minInteger": 1}'>
<p>
Requested MTU (Maximum Transmission Unit) for the interface. A client
can fill this column to change the MTU of an interface.
</p>
<p>
RFC 791 requires every internet module to be able to forward a
datagram of 68 octets without further fragmentation. The maximum
size of an IP packet is 65535 bytes.
</p>
<p>
If this is not set and if the interface has <code>internal</code>
type, Open vSwitch will change the MTU to match the minimum of the
other interfaces in the bridge.
</p>
</column>
</group>
<group title="Interface Status">
<p>
Status information about interfaces attached to bridges, updated every
5 seconds. Not all interfaces have all of these properties; virtual
interfaces don't have a link speed, for example. Non-applicable
columns will have empty values.
</p>
<column name="admin_state">
<p>
The administrative state of the physical network link.
</p>
</column>
<column name="link_state">
<p>
The observed state of the physical network link. This is ordinarily
the link's carrier status. If the interface's <ref table="Port"/> is
a bond configured for miimon monitoring, it is instead the network
link's miimon status.
</p>
</column>
<column name="link_resets">
<p>
The number of times Open vSwitch has observed the
<ref column="link_state"/> of this <ref table="Interface"/> change.
</p>
</column>
<column name="link_speed">
<p>
The negotiated speed of the physical network link.
Valid values are positive integers greater than 0.
</p>
</column>
<column name="duplex">
<p>
The duplex mode of the physical network link.
</p>
</column>
<column name="lacp_current">
Boolean value indicating LACP status for this interface. If true, this
interface has current LACP information about its LACP partner. This
information may be used to monitor the health of interfaces in a LACP
enabled port. This column will be empty if LACP is not enabled.
</column>
<column name="status">
Key-value pairs that report port status. Supported status values are
<ref column="type"/>-dependent; some interfaces may not have a valid
<ref column="status" key="driver_name"/>, for example.
</column>
<column name="status" key="driver_name">
The name of the device driver controlling the network adapter.
</column>
<column name="status" key="driver_version">
The version string of the device driver controlling the network
adapter.
</column>
<column name="status" key="firmware_version">
The version string of the network adapter's firmware, if available.
</column>
<column name="status" key="source_ip">
The source IP address used for an IPv4/IPv6 tunnel end-point, such as
<code>gre</code>.
</column>
<column name="status" key="tunnel_egress_iface">
Egress interface for tunnels. Currently only relevant for tunnels
on Linux systems, this column will show the name of the interface
which is responsible for routing traffic destined for the configured
<ref column="options" key="remote_ip"/>. This could be an internal
interface such as a bridge port.
</column>
<column name="status" key="tunnel_egress_iface_carrier"
type='{"type": "string", "enum": ["set", ["down", "up"]]}'>
Whether carrier is detected on <ref column="status"
key="tunnel_egress_iface"/>.
</column>
<group title="dpdk">
<p>
DPDK specific interface status options.
</p>
<column name="status" key="port_no">
DPDK port ID.
</column>
<column name="status" key="numa_id">
NUMA socket ID to which an Ethernet device is connected.
</column>
<column name="status" key="min_rx_bufsize">
Minimum size of RX buffer.
</column>
<column name="status" key="max_rx_pktlen">
Maximum configurable length of RX pkt.
</column>
<column name="status" key="max_rx_queues">
Maximum number of RX queues.
</column>
<column name="status" key="max_tx_queues">
Maximum number of TX queues.
</column>
<column name="status" key="max_mac_addrs">
Maximum number of MAC addresses.
</column>
<column name="status" key="max_hash_mac_addrs">
Maximum number of hash MAC addresses for MTA and UTA.
</column>
<column name="status" key="max_vfs">
Maximum number of hash MAC addresses for MTA and UTA.
Maximum number of VFs.
</column>
<column name="status" key="max_vmdq_pools">
Maximum number of VMDq pools.
</column>
<column name="status" key="n_rxq">
Number of Rx queues.
</column>
<column name="status" key="n_txq">
Number of Tx queues.
</column>
<column name="status" key="rx_csum_offload">
Whether Rx Checksum offload is enabled or not.
</column>
<column name="status" key="if_type">
Interface type ID according to IANA ifTYPE MIB definitions.
</column>
<column name="status" key="if_descr">
Interface description string.
</column>
<column name="status" key="bus_info">
Bus name and bus info such as Vendor ID and Device ID of PCI
device.
</column>
<column name="status" key="dpdk-vf-mac">
Ethernet address set for this VF interface. Only reported for dpdk
VF representors.
</column>
<column name="status" key="rx-steering">
Hardware Rx queue steering policy in use.
</column>
<column name="status" key="rx_steering_queue">
ID of rx steering queue. Only reported if <code>rx-steering</code>
is supported by hardware.
</column>
<column name="status" key="rss_queues">
IDs of rss queues. Only reported if <code>rx-steering</code> is
supported by hardware.
</column>
</group>
<group title="dpdkvhostuser">
<p>
dpdkvhostuser and dpdkvhostuserclient
netdev specific interface status information.
</p>
<column name="status" key="mode">
client (connecting) or server (listening) in the socket
communication.
</column>
<column name="status" key="features">
virtio features bitmap as per virtio specification.
</column>
<column name="status" key="num_of_vrings">
The number of available virtqueues.
</column>
<column name="status" key="numa">
The numa id of the device and guest memory.
</column>
<column name="status" key="socket">
The path to the socket used for communication.
</column>
<column name="status" key="status">
Status of connection to the device.
</column>
<column name="status" key="vring_n_size">
Each virtqueue will have it's size reported, where n is the
virtqueue number from 0..(num_of_vrings-1).
</column>
<column name="status" key="userspace-tso">
Whether userspace-tso is enabled or disabled.
</column>
</group>
<group title="afxdp">
<p>
AF_XDP specific interface status options.
</p>
<column name="status" key="xdp-mode">
XDP mode currently in use. See <ref column="options"
key="xdp-mode"/> for description of possible values.
</column>
</group>
</group>
<group title="Statistics">
<p>
Key-value pairs that report interface statistics. The current
implementation updates these counters periodically. The update period
is controlled by <ref column="other_config"
key="stats-update-interval"/> in the <code>Open_vSwitch</code> table.
Future implementations may update them when an interface is created,
when they are queried (e.g. using an OVSDB <code>select</code>
operation), and just before an interface is deleted due to virtual
interface hot-unplug or VM shutdown, and perhaps at other times, but
not on any regular periodic basis.
</p>
<p>
These are the same statistics reported by OpenFlow in its <code>struct
ofp_port_stats</code> structure. If an interface does not support a
given statistic, then that pair is omitted.
</p>
<group title="Statistics: Successful transmit and receive counters">
<column name="statistics" key="rx_packets">
Number of received packets.
</column>
<column name="statistics" key="rx_bytes">
Number of received bytes.
</column>
<column name="statistics" key="tx_packets">
Number of transmitted packets.
</column>
<column name="statistics" key="tx_bytes">
Number of transmitted bytes.
</column>
</group>
<group title="Statistics: Receive errors">
<column name="statistics" key="rx_dropped">
Number of packets dropped by RX.
</column>
<column name="statistics" key="rx_frame_err">
Number of frame alignment errors.
</column>
<column name="statistics" key="rx_over_err">
Number of packets with RX overrun.
</column>
<column name="statistics" key="rx_crc_err">
Number of CRC errors.
</column>
<column name="statistics" key="rx_errors">
Total number of receive errors, greater than or equal to the sum of
the above.
</column>
</group>
<group title="Statistics: Transmit errors">
<column name="statistics" key="tx_dropped">
Number of packets dropped by TX.
</column>
<column name="statistics" key="collisions">
Number of collisions.
</column>
<column name="statistics" key="tx_errors">
Total number of transmit errors, greater than or equal to the sum of
the above.
</column>
</group>
</group>
<group title="Ingress Policing">
<p>
These settings control ingress policing for packets received on this
interface. On a physical interface, this limits the rate at which
traffic is allowed into the system from the outside; on a virtual
interface (one connected to a virtual machine), this limits the rate at
which the VM is able to transmit.
</p>
<p>
Policing is a simple form of quality-of-service that simply drops
packets received in excess of the configured rate. Due to its
simplicity, policing is usually less accurate and less effective than
egress QoS (which is configured using the <ref table="QoS"/> and <ref
table="Queue"/> tables).
</p>
<p>
Policing settings can be set with byte rate or packet rate, and they
can be configured together, in which case they take effect together,
that means the smaller speed limit of them is in effect.
</p>
<p>
Currently, byte rate policing is implemented on Linux and OVS with
DPDK, while packet rate policing is only implemented on Linux. Both
Linux and OVS DPDK implementations use a simple ``token bucket''
approach.
</p>
<p>
Byte rate policing:
</p>
<ul>
<li>
The size of the bucket corresponds to <ref
column="ingress_policing_burst"/>. Initially the bucket is full.
</li>
<li>
Whenever a packet is received, its size (converted to tokens) is
compared to the number of tokens currently in the bucket. If the
required number of tokens are available, they are removed and the
packet is forwarded. Otherwise, the packet is dropped.
</li>
<li>
Whenever it is not full, the bucket is refilled with tokens at the
rate specified by <ref column="ingress_policing_rate"/>.
</li>
</ul>
<p>
Packet rate policing:
</p>
<ul>
<li>
The size of the bucket corresponds to <ref
column="ingress_policing_kpkts_burst"/>. Initially the bucket is
full.
</li>
<li>
Whenever a packet is received, it will consume one token from the
current bucket. If the token is available in the bucket, it's
removed and the packet is forwarded. Otherwise, the packet is
dropped.
</li>
<li>
Whenever it is not full, the bucket is refilled with tokens at the
rate specified by <ref column="ingress_policing_kpkts_rate"/>.
</li>
</ul>
<p>
Policing interacts badly with some network protocols, and especially
with fragmented IP packets. Suppose that there is enough network
activity to keep the bucket nearly empty all the time. Then this token
bucket algorithm will forward a single packet every so often, with the
period depending on packet size and on the configured rate. All of the
fragments of an IP packets are normally transmitted back-to-back, as a
group. In such a situation, therefore, only one of these fragments
will be forwarded and the rest will be dropped. IP does not provide
any way for the intended recipient to ask for only the remaining
fragments. In such a case there are two likely possibilities for what
will happen next: either all of the fragments will eventually be
retransmitted (as TCP will do), in which case the same problem will
recur, or the sender will not realize that its packet has been dropped
and data will simply be lost (as some UDP-based protocols will do).
Either way, it is possible that no forward progress will ever occur.
</p>
<column name="ingress_policing_rate">
<p>
Maximum rate for data received on this interface, in kbps. Data
received faster than this rate is dropped. Set to <code>0</code>
(the default) to disable policing.
</p>
</column>
<column name="ingress_policing_kpkts_rate">
<p>
Maximum rate for data received on this interface, in kpps (1 kpps is
1000 pps). Data received faster than this rate is dropped. Set to
<code>0</code> (the default) to disable policing.
</p>
</column>
<column name="ingress_policing_burst">
<p>Maximum burst size for data received on this interface, in kb. The
default burst size if set to <code>0</code> is 8000 kbit. This value
has no effect if <ref column="ingress_policing_rate"/>
is <code>0</code>.</p>
<p>
Specifying a larger burst size lets the algorithm be more forgiving,
which is important for protocols like TCP that react severely to
dropped packets. The burst size should be at least the size of the
interface's MTU. Specifying a value that is numerically at least as
large as 80% of <ref column="ingress_policing_rate"/> helps TCP come
closer to achieving the full rate.
</p>
</column>
<column name="ingress_policing_kpkts_burst">
<p>
Maximum burst size for data received on this interface, in kpkts (1
kpkts is 1000 packets). The default burst size if set to
<code>0</code> is 16 kpkts. This value has no effect if
<ref column="ingress_policing_kpkts_rate"/> is <code>0</code>.
</p>
<p>
Specifying a larger burst size lets the algorithm be more forgiving,
which is important for protocols like TCP that react severely to
dropped packets. Specifying a value that is numerically at least as
large as 80% of <ref column="ingress_policing_kpkts_rate"/> helps TCP
come closer to achieving the full rate.
</p>
</column>
</group>
<group title="Bidirectional Forwarding Detection (BFD)">
<p>
BFD, defined in RFC 5880 and RFC 5881, allows point-to-point
detection of connectivity failures by occasional transmission of
BFD control messages. Open vSwitch implements BFD to serve
as a more popular and standards compliant alternative to CFM.
</p>
<p>
BFD operates by regularly transmitting BFD control messages at a rate
negotiated independently in each direction. Each endpoint specifies
the rate at which it expects to receive control messages, and the rate
at which it is willing to transmit them. By default, Open vSwitch uses
a detection multiplier of three, meaning that an endpoint signals a
connectivity fault if three consecutive BFD control messages fail to
arrive. In the case of a unidirectional connectivity issue, the system
not receiving BFD control messages signals the problem to its peer in
the messages it transmits.
</p>
<p>
The Open vSwitch implementation of BFD aims to comply faithfully
with RFC 5880 requirements. Open vSwitch does not implement the
optional Authentication or ``Echo Mode'' features.
</p>
<p>
OVS 2.13 and earlier intercepted and processed all BFD packets.
OVS 2.14 and later only intercept and process BFD packets destined
to a configured BFD instance, and other BFD packets are made available
to the OVS flow table for forwarding.
</p>
<group title="BFD Configuration">
<p>
A controller sets up key-value pairs in the <ref column="bfd"/>
column to enable and configure BFD.
</p>
<column name="bfd" key="enable" type='{"type": "boolean"}'>
True to enable BFD on this <ref table="Interface"/>. If not
specified, BFD will not be enabled by default.
</column>
<column name="bfd" key="min_rx"
type='{"type": "integer", "minInteger": 1}'>
The shortest interval, in milliseconds, at which this BFD session
offers to receive BFD control messages. The remote endpoint may
choose to send messages at a slower rate. Defaults to
<code>1000</code>.
</column>
<column name="bfd" key="min_tx"
type='{"type": "integer", "minInteger": 1}'>
The shortest interval, in milliseconds, at which this BFD session is
willing to transmit BFD control messages. Messages will actually be
transmitted at a slower rate if the remote endpoint is not willing to
receive as quickly as specified. Defaults to <code>100</code>.
</column>
<column name="bfd" key="decay_min_rx" type='{"type": "integer"}'>
An alternate receive interval, in milliseconds, that must be greater
than or equal to <ref column="bfd" key="min_rx"/>. The
implementation switches from <ref column="bfd" key="min_rx"/> to <ref
column="bfd" key="decay_min_rx"/> when there is no obvious incoming
data traffic at the interface, to reduce the CPU and bandwidth cost
of monitoring an idle interface. This feature may be disabled by
setting a value of 0. This feature is reset whenever <ref
column="bfd" key="decay_min_rx"/> or <ref column="bfd" key="min_rx"/>
changes.
</column>
<column name="bfd" key="forwarding_if_rx" type='{"type": "boolean"}'>
When <code>true</code>, traffic received on the
<ref table="Interface"/> is used to indicate the capability of packet
I/O. BFD control packets are still transmitted and received. At
least one BFD control packet must be received every 100 * <ref
column="bfd" key="min_rx"/> amount of time. Otherwise, even if
traffic are received, the <ref column="bfd" key="forwarding"/>
will be <code>false</code>.
</column>
<column name="bfd" key="cpath_down" type='{"type": "boolean"}'>
Set to true to notify the remote endpoint that traffic should not be
forwarded to this system for some reason other than a connectivty
failure on the interface being monitored. The typical underlying
reason is ``concatenated path down,'' that is, that connectivity
beyond the local system is down. Defaults to false.
</column>
<column name="bfd" key="check_tnl_key" type='{"type": "boolean"}'>
Set to true to make BFD accept only control messages with a tunnel
key of zero. By default, BFD accepts control messages with any
tunnel key.
</column>
<column name="bfd" key="bfd_local_src_mac">
Set to an Ethernet address in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
to set the MAC used as source for transmitted BFD packets. The
default is the mac address of the BFD enabled interface.
</column>
<column name="bfd" key="bfd_local_dst_mac">
Set to an Ethernet address in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
to set the MAC used as destination for transmitted BFD packets. The
default is <code>00:23:20:00:00:01</code>.
</column>
<column name="bfd" key="bfd_remote_dst_mac">
Set to an Ethernet address in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>
to set the MAC used for checking the destination of received BFD packets.
Packets with different destination MAC will not be considered as BFD packets.
If not specified the destination MAC address of received BFD packets
are not checked.
</column>
<column name="bfd" key="bfd_src_ip">
Set to an IPv4 address to set the IP address used as source for
transmitted BFD packets. The default is <code>169.254.1.1</code>.
</column>
<column name="bfd" key="bfd_dst_ip">
Set to an IPv4 address to set the IP address used as destination
for transmitted BFD packets. The default is <code>169.254.1.0</code>.
</column>
<column name="bfd" key="oam">
Some tunnel protocols (such as Geneve) include a bit in the header
to indicate that the encapsulated packet is an OAM frame. By setting
this to true, BFD packets will be marked as OAM if encapsulated in
one of these tunnels.
</column>
<column name="bfd" key="mult"
type='{"type": "integer", "minInteger": 1, "maxInteger": 255}'>
The BFD detection multiplier, which defaults to 3. An endpoint
signals a connectivity fault if the given number of consecutive BFD
control messages fail to arrive.
</column>
</group>
<group title="BFD Status">
<p>
The switch sets key-value pairs in the <ref column="bfd_status"/>
column to report the status of BFD on this interface. When BFD is
not enabled, with <ref column="bfd" key="enable"/>, the switch clears
all key-value pairs from <ref column="bfd_status"/>.
</p>
<column name="bfd_status" key="state"
type='{"type": "string",
"enum": ["set", ["admin_down", "down", "init", "up"]]}'>
Reports the state of the BFD session. The BFD session is fully
healthy and negotiated if <code>UP</code>.
</column>
<column name="bfd_status" key="forwarding" type='{"type": "boolean"}'>
Reports whether the BFD session believes this <ref
table="Interface"/> may be used to forward traffic. Typically this
means the local session is signaling <code>UP</code>, and the remote
system isn't signaling a problem such as concatenated path down.
</column>
<column name="bfd_status" key="diagnostic">
A diagnostic code specifying the local system's reason for the
last change in session state. The error messages are defined in
section 4.1 of [RFC 5880].
</column>
<column name="bfd_status" key="remote_state"
type='{"type": "string",
"enum": ["set", ["admin_down", "down", "init", "up"]]}'>
Reports the state of the remote endpoint's BFD session.
</column>
<column name="bfd_status" key="remote_diagnostic">
A diagnostic code specifying the remote system's reason for the
last change in session state. The error messages are defined in
section 4.1 of [RFC 5880].
</column>
<column name="bfd_status" key="flap_count"
type='{"type": "integer", "minInteger": 0}'>
Counts the number of <ref column="bfd_status" key="forwarding" />
flaps since start. A flap is considered as a change of the
<ref column="bfd_status" key="forwarding" /> value.
</column>
</group>
</group>
<group title="Connectivity Fault Management">
<p>
802.1ag Connectivity Fault Management (CFM) allows a group of
Maintenance Points (MPs) called a Maintenance Association (MA) to
detect connectivity problems with each other. MPs within a MA should
have complete and exclusive interconnectivity. This is verified by
occasionally broadcasting Continuity Check Messages (CCMs) at a
configurable transmission interval.
</p>
<p>
According to the 802.1ag specification, each Maintenance Point should
be configured out-of-band with a list of Remote Maintenance Points it
should have connectivity to. Open vSwitch differs from the
specification in this area. It simply assumes the link is faulted if
no Remote Maintenance Points are reachable, and considers it not
faulted otherwise.
</p>
<p>
When operating over tunnels which have no <code>in_key</code>, or an
<code>in_key</code> of <code>flow</code>. CFM will only accept CCMs
with a tunnel key of zero.
</p>
<column name="cfm_mpid">
<p>
A Maintenance Point ID (MPID) uniquely identifies each endpoint
within a Maintenance Association. The MPID is used to identify this
endpoint to other Maintenance Points in the MA. Each end of a link
being monitored should have a different MPID. Must be configured to
enable CFM on this <ref table="Interface"/>.
</p>
<p>
According to the 802.1ag specification, MPIDs can only range between
[1, 8191]. However, extended mode (see <ref column="other_config"
key="cfm_extended"/>) supports eight byte MPIDs.
</p>
</column>
<column name="cfm_flap_count">
Counts the number of cfm fault flapps since boot. A flap is
considered to be a change of the <ref column="cfm_fault"/> value.
</column>
<column name="cfm_fault">
<p>
Indicates a connectivity fault triggered by an inability to receive
heartbeats from any remote endpoint. When a fault is triggered on
<ref table="Interface"/>s participating in bonds, they will be
disabled.
</p>
<p>
Faults can be triggered for several reasons. Most importantly they
are triggered when no CCMs are received for a period of 3.5 times the
transmission interval. Faults are also triggered when any CCMs
indicate that a Remote Maintenance Point is not receiving CCMs but
able to send them. Finally, a fault is triggered if a CCM is
received which indicates unexpected configuration. Notably, this
case arises when a CCM is received which advertises the local MPID.
</p>
</column>
<column name="cfm_fault_status" key="recv">
Indicates a CFM fault was triggered due to a lack of CCMs received on
the <ref table="Interface"/>.
</column>
<column name="cfm_fault_status" key="rdi">
Indicates a CFM fault was triggered due to the reception of a CCM with
the RDI bit flagged. Endpoints set the RDI bit in their CCMs when they
are not receiving CCMs themselves. This typically indicates a
unidirectional connectivity failure.
</column>
<column name="cfm_fault_status" key="maid">
Indicates a CFM fault was triggered due to the reception of a CCM with
a MAID other than the one Open vSwitch uses. CFM broadcasts are tagged
with an identification number in addition to the MPID called the MAID.
Open vSwitch only supports receiving CCM broadcasts tagged with the
MAID it uses internally.
</column>
<column name="cfm_fault_status" key="loopback">
Indicates a CFM fault was triggered due to the reception of a CCM
advertising the same MPID configured in the <ref column="cfm_mpid"/>
column of this <ref table="Interface"/>. This may indicate a loop in
the network.
</column>
<column name="cfm_fault_status" key="overflow">
Indicates a CFM fault was triggered because the CFM module received
CCMs from more remote endpoints than it can keep track of.
</column>
<column name="cfm_fault_status" key="override">
Indicates a CFM fault was manually triggered by an administrator using
an <code>ovs-appctl</code> command.
</column>
<column name="cfm_fault_status" key="interval">
Indicates a CFM fault was triggered due to the reception of a CCM
frame having an invalid interval.
</column>
<column name="cfm_remote_opstate">
<p>When in extended mode, indicates the operational state of the
remote endpoint as either <code>up</code> or <code>down</code>. See
<ref column="other_config" key="cfm_opstate"/>.
</p>
</column>
<column name="cfm_health">
<p>
Indicates the health of the interface as a percentage of CCM frames
received over 21 <ref column="other_config" key="cfm_interval"/>s.
The health of an interface is undefined if it is communicating with
more than one <ref column="cfm_remote_mpids"/>. It reduces if
healthy heartbeats are not received at the expected rate, and
gradually improves as healthy heartbeats are received at the desired
rate. Every 21 <ref column="other_config" key="cfm_interval"/>s, the
health of the interface is refreshed.
</p>
<p>
As mentioned above, the faults can be triggered for several reasons.
The link health will deteriorate even if heartbeats are received but
they are reported to be unhealthy. An unhealthy heartbeat in this
context is a heartbeat for which either some fault is set or is out
of sequence. The interface health can be 100 only on receiving
healthy heartbeats at the desired rate.
</p>
</column>
<column name="cfm_remote_mpids">
When CFM is properly configured, Open vSwitch will occasionally
receive CCM broadcasts. These broadcasts contain the MPID of the
sending Maintenance Point. The list of MPIDs from which this
<ref table="Interface"/> is receiving broadcasts from is regularly
collected and written to this column.
</column>
<column name="other_config" key="cfm_interval"
type='{"type": "integer"}'>
<p>
The interval, in milliseconds, between transmissions of CFM
heartbeats. Three missed heartbeat receptions indicate a
connectivity fault.
</p>
<p>
In standard operation only intervals of 3, 10, 100, 1,000, 10,000,
60,000, or 600,000 ms are supported. Other values will be rounded
down to the nearest value on the list. Extended mode (see <ref
column="other_config" key="cfm_extended"/>) supports any interval up
to 65,535 ms. In either mode, the default is 1000 ms.
</p>
<p>We do not recommend using intervals less than 100 ms.</p>
</column>
<column name="other_config" key="cfm_extended"
type='{"type": "boolean"}'>
When <code>true</code>, the CFM module operates in extended mode. This
causes it to use a nonstandard destination address to avoid conflicting
with compliant implementations which may be running concurrently on the
network. Furthermore, extended mode increases the accuracy of the
<code>cfm_interval</code> configuration parameter by breaking wire
compatibility with 802.1ag compliant implementations. And extended
mode allows eight byte MPIDs. Defaults to <code>false</code>.
</column>
<column name="other_config" key="cfm_demand" type='{"type": "boolean"}'>
<p>
When <code>true</code>, and
<ref column="other_config" key="cfm_extended"/> is true, the CFM
module operates in demand mode. When in demand mode, traffic
received on the <ref table="Interface"/> is used to indicate
liveness. CCMs are still transmitted and received. At least one
CCM must be received every 100 * <ref column="other_config"
key="cfm_interval"/> amount of time. Otherwise, even if traffic
are received, the CFM module will raise the connectivity fault.
</p>
<p>
Demand mode has a couple of caveats:
<ul>
<li>
To ensure that ovs-vswitchd has enough time to pull statistics
from the datapath, the fault detection interval is set to
3.5 * MAX(<ref column="other_config" key="cfm_interval"/>, 500)
ms.
</li>
<li>
To avoid ambiguity, demand mode disables itself when there are
multiple remote maintenance points.
</li>
<li>
If the <ref table="Interface"/> is heavily congested, CCMs
containing the <ref column="other_config" key="cfm_opstate"/>
status may be dropped causing changes in the operational state to
be delayed. Similarly, if CCMs containing the RDI bit are not
received, unidirectional link failures may not be detected.
</li>
</ul>
</p>
</column>
<column name="other_config" key="cfm_opstate"
type='{"type": "string", "enum": ["set", ["down", "up"]]}'>
When <code>down</code>, the CFM module marks all CCMs it generates as
operationally down without triggering a fault. This allows remote
maintenance points to choose not to forward traffic to the
<ref table="Interface"/> on which this CFM module is running.
Currently, in Open vSwitch, the opdown bit of CCMs affects
<ref table="Interface"/>s participating in bonds, and the bundle
OpenFlow action. This setting is ignored when CFM is not in extended
mode. Defaults to <code>up</code>.
</column>
<column name="other_config" key="cfm_ccm_vlan"
type='{"type": "integer", "minInteger": 1, "maxInteger": 4095}'>
When set, the CFM module will apply a VLAN tag to all CCMs it generates
with the given value. May be the string <code>random</code> in which
case each CCM will be tagged with a different randomly generated VLAN.
</column>
<column name="other_config" key="cfm_ccm_pcp"
type='{"type": "integer", "minInteger": 1, "maxInteger": 7}'>
When set, the CFM module will apply a VLAN tag to all CCMs it generates
with the given PCP value, the VLAN ID of the tag is governed by the
value of <ref column="other_config" key="cfm_ccm_vlan"/>. If
<ref column="other_config" key="cfm_ccm_vlan"/> is unset, a VLAN ID of
zero is used.
</column>
</group>
<group title="Bonding Configuration">
<column name="other_config" key="lacp-port-id"
type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
The LACP port ID of this <ref table="Interface"/>. Port IDs are
used in LACP negotiations to identify individual ports
participating in a bond.
</column>
<column name="other_config" key="lacp-port-priority"
type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
The LACP port priority of this <ref table="Interface"/>. In LACP
negotiations <ref table="Interface"/>s with numerically lower
priorities are preferred for aggregation.
</column>
<column name="other_config" key="lacp-aggregation-key"
type='{"type": "integer", "minInteger": 1, "maxInteger": 65535}'>
The LACP aggregation key of this <ref table="Interface"/>. <ref
table="Interface"/>s with different aggregation keys may not be active
within a given <ref table="Port"/> at the same time.
</column>
</group>
<group title="Virtual Machine Identifiers">
<p>
These key-value pairs specifically apply to an interface that
represents a virtual Ethernet interface connected to a virtual
machine. These key-value pairs should not be present for other types
of interfaces. Keys whose names end in <code>-uuid</code> have
values that uniquely identify the entity in question.
</p>
<column name="external_ids" key="attached-mac">
The MAC address programmed into the ``virtual hardware'' for this
interface, in the form
<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>:<var>xx</var>.
</column>
<column name="external_ids" key="iface-id">
A system-unique identifier for the interface.
</column>
<column name="external_ids" key="iface-status"
type='{"type": "string",
"enum": ["set", ["active", "inactive"]]}'>
<p>
Hypervisors may sometimes have more than one interface associated
with a given <ref column="external_ids" key="iface-id"/>, only one of
which is actually in use at a given time. For example, in some
circumstances hypervisor may have both a ``tap'' and a ``vif''
interface for a single <ref column="external_ids" key="iface-id"/>,
but only uses one of them at a time. A hypervisor that behaves this
way must mark the currently in use interface <code>active</code> and
the others <code>inactive</code>. A hypervisor that never has more
than one interface for a given <ref column="external_ids"
key="iface-id"/> may mark that interface <code>active</code> or omit
<ref column="external_ids" key="iface-status"/> entirely.
</p>
<p>
During VM migration, a given <ref column="external_ids"
key="iface-id"/> might transiently be marked <code>active</code> on
two different hypervisors. That is, <code>active</code> means that
this <ref column="external_ids" key="iface-id"/> is the active
instance within a single hypervisor, not in a broader scope.
There is one exception: some hypervisors support ``migration'' from a
given hypervisor to itself (most often for test purposes). During
such a ``migration,'' two instances of a single <ref
column="external_ids" key="iface-id"/> might both be briefly marked
<code>active</code> on a single hypervisor.
</p>
</column>
<column name="external_ids" key="vm-id">
The VM to which this interface belongs.
</column>
</group>
<group title="Auto Attach Configuration">
<p>
Auto Attach configuration for a particular interface.
</p>
<column name="lldp" key="enable" type='{"type": "boolean"}'>
True to enable LLDP on this <ref table="Interface"/>. If not
specified, LLDP will be disabled by default.
</column>
</group>
<group title="Flow control Configuration">
<p>
Ethernet flow control defined in IEEE 802.1Qbb provides link level flow
control using MAC pause frames. Implemented only for interfaces with
type <code>dpdk</code>.
</p>
<column name="options" key="rx-flow-ctrl" type='{"type": "boolean"}'>
Set to <code>true</code> to enable Rx flow control on physical ports.
By default, Rx flow control is disabled.
</column>
<column name="options" key="tx-flow-ctrl" type='{"type": "boolean"}'>
Set to <code>true</code> to enable Tx flow control on physical ports.
By default, Tx flow control is disabled.
</column>
<column name="options" key="flow-ctrl-autoneg"
type='{"type": "boolean"}'>
Set to <code>true</code> to enable flow control auto negotiation on
physical ports. By default, auto-neg is disabled.
</column>
</group>
<group title="Link State Change detection mode">
<column name="options" key="dpdk-lsc-interrupt"
type='{"type": "boolean"}'>
<p>
Set this value to <code>false</code> to configure poll mode for
Link State Change (LSC) detection instead of interrupt mode for the
DPDK interface.
</p>
<p>
If this value is not set, interrupt mode is configured.
</p>
<p>
This parameter has an effect only on netdev dpdk interfaces.
</p>
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Flow_Table" title="OpenFlow table configuration">
<p>Configuration for a particular OpenFlow table.</p>
<column name="name">
The table's name. Set this column to change the name that controllers
will receive when they request table statistics, e.g. <code>ovs-ofctl
dump-tables</code>. The name does not affect switch behavior.
</column>
<group title="Eviction Policy">
<p>
Open vSwitch supports limiting the number of flows that may be
installed in a flow table, via the <ref column="flow_limit"/> column.
When adding a flow would exceed this limit, by default Open vSwitch
reports an error, but there are two ways to configure Open vSwitch to
instead delete (``evict'') a flow to make room for the new one:
</p>
<ul>
<li>
Set the <ref column="overflow_policy"/> column to <code>evict</code>.
</li>
<li>
Send an OpenFlow 1.4+ ``table mod request'' to enable eviction for
the flow table (e.g. <code>ovs-ofctl -O OpenFlow14 mod-table br0 0
evict</code> to enable eviction on flow table 0 of bridge
<code>br0</code>).
</li>
</ul>
<p>
When a flow must be evicted due to overflow, the flow to evict is
chosen through an approximation of the following algorithm. This
algorithm is used regardless of how eviction was enabled:
</p>
<ol>
<li>
Divide the flows in the table into groups based on the values of the
fields or subfields specified in the <ref column="groups"/> column,
so that all of the flows in a given group have the same values for
those fields. If a flow does not specify a given field, that field's
value is treated as 0. If <ref column="groups"/> is empty, then all
of the flows in the flow table are treated as a single group.
</li>
<li>
Consider the flows in the largest group, that is, the group that
contains the greatest number of flows. If two or more groups all
have the same largest number of flows, consider the flows in all of
those groups.
</li>
<li>
If the flows under consideration have different importance values,
eliminate from consideration any flows except those with the lowest
importance. (``Importance,'' a 16-bit integer value attached to each
flow, was introduced in OpenFlow 1.4. Flows inserted with older
versions of OpenFlow always have an importance of 0.)
</li>
<li>
Among the flows under consideration, choose the flow that expires
soonest for eviction.
</li>
</ol>
<p>
The eviction process only considers flows that have an idle timeout
or a hard timeout. That is, eviction never deletes permanent flows.
(Permanent flows do count against <ref column="flow_limit"/>.)
</p>
<column name="flow_limit">
If set, limits the number of flows that may be added to the table.
Open vSwitch may limit the number of flows in a table for other
reasons, e.g. due to hardware limitations or for resource availability
or performance reasons.
</column>
<column name="overflow_policy">
<p>
Controls the switch's behavior when an OpenFlow flow table
modification request would add flows in excess of <ref
column="flow_limit"/>. The supported values are:
</p>
<dl>
<dt><code>refuse</code></dt>
<dd>
Refuse to add the flow or flows. This is also the default policy
when <ref column="overflow_policy"/> is unset.
</dd>
<dt><code>evict</code></dt>
<dd>
Delete a flow chosen according to the algorithm described above.
</dd>
</dl>
</column>
<column name="groups">
<p>
When <ref column="overflow_policy"/> is <code>evict</code>, this
controls how flows are chosen for eviction when the flow table would
otherwise exceed <ref column="flow_limit"/> flows. Its value is a
set of NXM fields or sub-fields, each of which takes one of the forms
<code><var>field</var>[]</code> or
<code><var>field</var>[<var>start</var>..<var>end</var>]</code>,
e.g. <code>NXM_OF_IN_PORT[]</code>. Please see
<code>meta-flow.h</code> for a complete list of NXM field names.
</p>
<p>
Open vSwitch ignores any invalid or unknown field specifications.
</p>
<p>
When eviction is not enabled, via <ref column="overflow_policy"/> or
an OpenFlow 1.4+ ``table mod,'' this column has no effect.
</p>
</column>
</group>
<group title="Classifier Optimization">
<column name="prefixes">
<p>
This string set specifies which fields should be used for
address prefix tracking. Prefix tracking allows the
classifier to skip rules with longer than necessary prefixes,
resulting in better wildcarding for datapath flows.
</p>
<p>
Prefix tracking may be beneficial when a flow table contains
matches on IP address fields with different prefix lengths.
For example, when a flow table contains IP address matches on
both full addresses and proper prefixes, the full address
matches will typically cause the datapath flow to un-wildcard
the whole address field (depending on flow entry priorities).
In this case each packet with a different address gets handed
to the userspace for flow processing and generates its own
datapath flow. With prefix tracking enabled for the address
field in question packets with addresses matching shorter
prefixes would generate datapath flows where the irrelevant
address bits are wildcarded, allowing the same datapath flow
to handle all the packets within the prefix in question. In
this case many userspace upcalls can be avoided and the
overall performance can be better.
</p>
<p>
This is a performance optimization only, so packets will
receive the same treatment with or without prefix tracking.
</p>
<p>
The supported fields are: <code>tun_id</code>,
<code>tun_src</code>, <code>tun_dst</code>,
<code>tun_ipv6_src</code>, <code>tun_ipv6_dst</code>,
<code>nw_src</code>, <code>nw_dst</code> (or aliases
<code>ip_src</code> and <code>ip_dst</code>),
<code>ipv6_src</code>, and <code>ipv6_dst</code>. (Using this
feature for <code>tun_id</code> would only make sense if the
tunnel IDs have prefix structure similar to IP addresses.)
</p>
<p>
By default, the <code>prefixes=ip_dst,ip_src,ipv6_dst,ipv6_src</code>
are used on each flow table. This instructs the flow classifier to
track the IPv4 and IPv6 destination and source addresses used by the
rules in this specific flow table.
</p>
<p>
The keyword <code>none</code> is recognized as an explicit
override of the default values, causing no prefix fields to be
tracked.
</p>
<p>
To set the prefix fields, the flow table record needs to
exist:
</p>
<dl>
<dt><code>ovs-vsctl set Bridge br0 flow_tables:0=@N1 -- --id=@N1 create Flow_Table name=table0</code></dt>
<dd>
Creates a flow table record for the OpenFlow table number 0.
</dd>
<dt><code>ovs-vsctl set Flow_Table table0 prefixes=ip_dst,ip_src</code></dt>
<dd>
Enables prefix tracking for IPv4 source and destination
address fields.
</dd>
</dl>
<p>
There is a maximum number of fields that can be enabled for any
one flow table. Currently this limit is 4.
</p>
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="QoS" title="Quality of Service configuration">
<p>Quality of Service (QoS) configuration for each Port that
references it.</p>
<column name="type">
<p>The type of QoS to implement. The currently defined types are
listed below:</p>
<dl>
<dt><code>linux-htb</code></dt>
<dd>
Linux ``hierarchy token bucket'' classifier. See tc-htb(8) (also at
<code>http://linux.die.net/man/8/tc-htb</code>) and the HTB manual
(<code>http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm</code>)
for information on how this classifier works and how to configure it.
</dd>
<dt><code>linux-hfsc</code></dt>
<dd>
Linux "Hierarchical Fair Service Curve" classifier.
See <code>http://linux-ip.net/articles/hfsc.en/</code> for
information on how this classifier works.
</dd>
<dt><code>linux-sfq</code></dt>
<dd>
Linux ``Stochastic Fairness Queueing'' classifier. See
<code>tc-sfq</code>(8) (also at
<code>http://linux.die.net/man/8/tc-sfq</code>) for information on
how this classifier works.
</dd>
<dt><code>linux-codel</code></dt>
<dd>
Linux ``Controlled Delay'' classifier. See <code>tc-codel</code>(8)
(also at
<code>http://man7.org/linux/man-pages/man8/tc-codel.8.html</code>)
for information on how this classifier works.
</dd>
<dt><code>linux-fq_codel</code></dt>
<dd>
Linux ``Fair Queuing with Controlled Delay'' classifier. See
<code>tc-fq_codel</code>(8) (also at
<code>http://man7.org/linux/man-pages/man8/tc-fq_codel.8.html</code>)
for information on how this classifier works.
</dd>
<dt><code>linux-netem</code></dt>
<dd>
Linux ``Network Emulator'' classifier. See
<code>tc-netem</code>(8) (also at
<code>http://man7.org/linux/man-pages/man8/tc-netem.8.html</code>)
for information on how this classifier works.
</dd>
<dt><code>linux-noop</code></dt>
<dd>
Linux ``No operation.'' By default, Open vSwitch manages quality of
service on all of its configured ports. This can be helpful, but
sometimes administrators prefer to use other software to manage QoS.
This <ref column="type"/> prevents Open vSwitch from changing the QoS
configuration for a port.
</dd>
<dt><code>egress-policer</code></dt>
<dd>
A DPDK egress policer algorithm using the DPDK
rte_meter library. The rte_meter library provides an implementation
which allows the metering and policing of traffic. The implementation
in OVS essentially creates a single token bucket used to police
traffic. It should be noted that when the rte_meter is configured as
part of QoS there will be a performance overhead as the rte_meter
itself will consume CPU cycles in order to police traffic. These CPU
cycles ordinarily are used for packet proccessing. As such the drop
in performance will be noticed in terms of overall aggregate traffic
throughput.
</dd>
<dt><code>trtcm-policer</code></dt>
<dd>
A DPDK egress policer algorithm using RFC 4115's Two-Rate,
Three-Color marker. It's a two-level hierarchical policer
which first does a color-blind marking of the traffic at the queue
level, followed by a color-aware marking at the port level. At the
end traffic marked as Green or Yellow is forwarded, Red is dropped.
For details on how traffic is marked, see RFC 4115.
If the ``default queue'', 0, is not configured it's automatically
created with the same <code>other_config</code> values as the
physical port.
</dd>
</dl>
</column>
<column name="queues">
<p>A map from queue numbers to <ref table="Queue"/> records. The
supported range of queue numbers depend on <ref column="type"/>. The
queue numbers are the same as the <code>queue_id</code> used in
OpenFlow in <code>struct ofp_action_enqueue</code> and other
structures.</p>
<p>
Queue 0 is the ``default queue.'' It is used by OpenFlow output
actions when no specific queue has been set. When no configuration for
queue 0 is present, it is automatically configured as if a <ref
table="Queue"/> record with empty <ref table="Queue" column="dscp"/>
and <ref table="Queue" column="other_config"/> columns had been
specified.
(Before version 1.6, Open vSwitch would leave queue 0 unconfigured in
this case. With some queuing disciplines, this dropped all packets
destined for the default queue.)
</p>
</column>
<group title="Configuration for linux-htb and linux-hfsc">
<p>
The <code>linux-htb</code> and <code>linux-hfsc</code> classes support
the following key-value pair:
</p>
<column name="other_config" key="max-rate" type='{"type": "integer"}'>
Maximum rate shared by all queued traffic, in bit/s. Optional. If not
specified, for physical interfaces, the default is the link rate. For
other interfaces or if the link rate cannot be determined, the default
is currently 10 Gbps.
</column>
</group>
<group title="Configuration for egress-policer QoS">
<p>
<ref table="QoS"/> <ref table="QoS" column="type"/>
<code>egress-policer</code> provides egress policing for userspace
port types with DPDK.
It has the following key-value pairs defined.
</p>
<column name="other_config" key="cir" type='{"type": "integer"}'>
The Committed Information Rate (CIR) is measured in bytes of IP
packets per second, i.e. it includes the IP header, but not link
specific (e.g. Ethernet) headers. This represents the bytes per second
rate at which the token bucket will be updated. The cir value is
calculated by (pps x packet data size). For example assuming a user
wishes to limit a stream consisting of 64 byte packets to 1 million
packets per second the CIR would be set to to to 46000000. This value
can be broken into '1,000,000 x 46'. Where 1,000,000 is the policing
rate for the number of packets per second and 46 represents the size
of the packet data for a 64 bytes IP packet without 14 bytes Ethernet
and 4 bytes FCS header.
</column>
<column name="other_config" key="cbs" type='{"type": "integer"}'>
The Committed Burst Size (CBS) is measured in bytes and represents a
token bucket. At a minimum this value should be be set to the expected
largest size packet in the traffic stream. In practice larger values
may be used to increase the size of the token bucket. If a packet can
be transmitted then the cbs will be decremented by the number of
bytes/tokens of the packet. If there are not enough tokens in the cbs
bucket the packet will be dropped.
</column>
<column name="other_config" key="eir" type='{"type": "integer"}'>
The Excess Information Rate (EIR) is measured in bytes of IP
packets per second, i.e. it includes the IP header, but not link
specific (e.g. Ethernet) headers. This represents the bytes per second
rate at which the token bucket will be updated. The eir value is
calculated by (pps x packet data size). For example assuming a user
wishes to limit a stream consisting of 64 byte packets to 1 million
packets per second the EIR would be set to to to 46000000. This value
can be broken into '1,000,000 x 46'. Where 1,000,000 is the policing
rate for the number of packets per second and 46 represents the size
of the packet data for a 64 bytes IP packet without 14 bytes Ethernet
and 4 bytes FCS header.
</column>
<column name="other_config" key="ebs" type='{"type": "integer"}'>
The Excess Burst Size (EBS) is measured in bytes and represents a
token bucket. At a minimum this value should be be set to the expected
largest size packet in the traffic stream. In practice larger values
may be used to increase the size of the token bucket. If a packet can
be transmitted then the ebs will be decremented by the number of
bytes/tokens of the packet. If there are not enough tokens in the cbs
bucket the packet might be dropped.
</column>
</group>
<group title="Configuration for linux-sfq">
<p>
The <code>linux-sfq</code> QoS supports the following key-value pairs:
</p>
<column name="other_config" key="perturb" type='{"type": "integer"}'>
Number of seconds between consecutive perturbations in hashing algorithm.
Different flows can end up in the same hash bucket causing unfairness.
Perturbation's goal is to remove possible unfairness.
The default and recommended value is 10. Too low a value is discouraged
because each perturbation can cause packet reordering.
</column>
<column name="other_config" key="quantum" type='{"type": "integer"}'>
Number of bytes <code>linux-sfq</code> QoS can dequeue in one turn in
round-robin from one flow. The default and recommended value is equal
to interface's MTU.
</column>
</group>
<group title="Configuration for linux-netem">
<p>
The <code>linux-netem</code> QoS supports the following key-value
pairs:
</p>
<column name="other_config" key="latency" type='{"type": "integer"}'>
Adds the chosen delay to the packets outgoing to chosen network
interface. The latency value expressed in us.
</column>
<column name="other_config" key="limit" type='{"type": "integer"}'>
Maximum number of packets the qdisc may hold queued at a time.
The default value is 1000.
</column>
<column name="other_config" key="loss" type='{"type": "integer"}'>
Adds an independent loss probability to the packets outgoing from the
chosen network interface.
</column>
<column name="other_config" key="jitter" type='{"type": "integer"}'>
Adds the provided jitter to the latency outgoing to the
chosen network interface. The jitter value expressed in us.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Queue" title="QoS output queue.">
<p>A configuration for a port output queue, used in configuring Quality of
Service (QoS) features. May be referenced by <ref column="queues"
table="QoS"/> column in <ref table="QoS"/> table.</p>
<column name="dscp">
If set, Open vSwitch will mark all traffic egressing this
<ref table="Queue"/> with the given DSCP bits. Traffic egressing the
default <ref table="Queue"/> is only marked if it was explicitly selected
as the <ref table="Queue"/> at the time the packet was output. If unset,
the DSCP bits of traffic egressing this <ref table="Queue"/> will remain
unchanged.
</column>
<group title="Configuration for linux-htb QoS">
<p>
<ref table="QoS"/> <ref table="QoS" column="type"/>
<code>linux-htb</code> may use <code>queue_id</code>s less than 61440.
It has the following key-value pairs defined.
</p>
<column name="other_config" key="min-rate"
type='{"type": "integer", "minInteger": 1}'>
Minimum guaranteed bandwidth, in bit/s.
</column>
<column name="other_config" key="max-rate"
type='{"type": "integer", "minInteger": 1}'>
Maximum allowed bandwidth, in bit/s. Optional. If specified, the
queue's rate will not be allowed to exceed the specified value, even
if excess bandwidth is available. If unspecified, defaults to no
limit.
</column>
<column name="other_config" key="burst"
type='{"type": "integer", "minInteger": 1}'>
Burst size, in bits. This is the maximum amount of ``credits'' that a
queue can accumulate while it is idle. Optional. Details of the
<code>linux-htb</code> implementation require a minimum burst size, so
a too-small <code>burst</code> will be silently ignored.
</column>
<column name="other_config" key="priority"
type='{"type": "integer", "minInteger": 0, "maxInteger": 4294967295}'>
A queue with a smaller <code>priority</code> will receive all the
excess bandwidth that it can use before a queue with a larger value
receives any. Specific priority values are unimportant; only relative
ordering matters. Defaults to 0 if unspecified.
</column>
</group>
<group title="Configuration for linux-hfsc QoS">
<p>
<ref table="QoS"/> <ref table="QoS" column="type"/>
<code>linux-hfsc</code> may use <code>queue_id</code>s less than 61440.
It has the following key-value pairs defined.
</p>
<column name="other_config" key="min-rate"
type='{"type": "integer", "minInteger": 1}'>
Minimum guaranteed bandwidth, in bit/s.
</column>
<column name="other_config" key="max-rate"
type='{"type": "integer", "minInteger": 1}'>
Maximum allowed bandwidth, in bit/s. Optional. If specified, the
queue's rate will not be allowed to exceed the specified value, even if
excess bandwidth is available. If unspecified, defaults to no
limit.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="other_config"/>
<column name="external_ids"/>
</group>
</table>
<table name="Mirror" title="Port mirroring.">
<p>A port mirror within a <ref table="Bridge"/>.</p>
<p>A port mirror configures a bridge to send selected frames to special
``mirrored'' ports, in addition to their normal destinations. Mirroring
traffic may also be referred to as SPAN or RSPAN, depending on how
the mirrored traffic is sent.</p>
<p>
When a packet enters an Open vSwitch bridge, it becomes eligible for
mirroring based on its ingress port and VLAN. As the packet travels
through the flow tables, each time it is output to a port, it becomes
eligible for mirroring based on the egress port and VLAN. In Open
vSwitch 2.5 and later, mirroring occurs just after a packet first becomes
eligible, using the packet as it exists at that point; in Open vSwitch
2.4 and earlier, mirroring occurs only after a packet has traversed all
the flow tables, using the original packet as it entered the bridge.
This makes a difference only when the flow table modifies the packet: in
Open vSwitch 2.4, the modifications are never visible to mirrors, whereas
in Open vSwitch 2.5 and later modifications made before the first output
that makes it eligible for mirroring to a particular destination are
visible.
</p>
<p>
A packet that enters an Open vSwitch bridge is mirrored to a particular
destination only once, even if it is eligible for multiple reasons. For
example, a packet would be mirrored to a particular <ref
column="output_port"/> only once, even if it is selected for mirroring to
that port by <ref column="select_dst_port"/> and <ref
column="select_src_port"/> in the same or different <ref table="Mirror"/>
records.
</p>
<column name="name">
Arbitrary identifier for the <ref table="Mirror"/>.
</column>
<group title="Selecting Packets for Mirroring">
<p>
To be selected for mirroring, a given packet must enter or leave the
bridge through a selected port and it must also be in one of the
selected VLANs.
</p>
<column name="select_all">
If true, every packet arriving or departing on any port is
selected for mirroring.
</column>
<column name="select_dst_port">
Ports on which departing packets are selected for mirroring.
</column>
<column name="select_src_port">
Ports on which arriving packets are selected for mirroring.
</column>
<column name="select_vlan">
VLANs on which packets are selected for mirroring. An empty set
selects packets on all VLANs.
</column>
<column name="filter">
<p>
When set, only packets that match <ref column="filter"/> are
selected for mirroring. Packets that do not match are ignored
by thie mirror. The <ref column="filter"/> syntax is described
in <code>ovs-fields</code>(7). However, the <code>in_port</code>
field is not supported; <ref column="select_src_port"/> should be
used to limit the mirror to a source port.
</p>
<p>
This filter is applied after <ref column="select_all"/>, <ref
column="select_dst_port"/>, <ref column="select_src_port"/>, and
<ref column="select_vlan"/>.
</p>
</column>
</group>
<group title="Mirroring Destination Configuration">
<p>
These columns are mutually exclusive. Exactly one of them must be
nonempty.
</p>
<column name="output_port">
<p>Output port for selected packets, if nonempty.</p>
<p>Specifying a port for mirror output reserves that port exclusively
for mirroring. No frames other than those selected for mirroring
via this column
will be forwarded to the port, and any frames received on the port
will be discarded.</p>
<p>
The output port may be any kind of port supported by Open vSwitch.
It may be, for example, a physical port (sometimes called SPAN) or a
GRE tunnel.
</p>
</column>
<column name="output_vlan">
<p>Output VLAN for selected packets, if nonempty.</p>
<p>The frames will be sent out all ports that trunk
<ref column="output_vlan"/>, as well as any ports with implicit VLAN
<ref column="output_vlan"/>. When a mirrored frame is sent out a
trunk port, the frame's VLAN tag will be set to
<ref column="output_vlan"/>, replacing any existing tag; when it is
sent out an implicit VLAN port, the frame will not be tagged. This
type of mirroring is sometimes called RSPAN.</p>
<p>
See the documentation for
<ref column="other_config" key="forward-bpdu"/> in the
<ref table="Interface"/> table for a list of destination MAC
addresses which will not be mirrored to a VLAN to avoid confusing
switches that interpret the protocols that they represent.
</p>
<p><em>Please note:</em> Mirroring to a VLAN can disrupt a network that
contains unmanaged switches. Consider an unmanaged physical switch
with two ports: port 1, connected to an end host, and port 2,
connected to an Open vSwitch configured to mirror received packets
into VLAN 123 on port 2. Suppose that the end host sends a packet on
port 1 that the physical switch forwards to port 2. The Open vSwitch
forwards this packet to its destination and then reflects it back on
port 2 in VLAN 123. This reflected packet causes the unmanaged
physical switch to replace the MAC learning table entry, which
correctly pointed to port 1, with one that incorrectly points to port
2. Afterward, the physical switch will direct packets destined for
the end host to the Open vSwitch on port 2, instead of to the end
host on port 1, disrupting connectivity. If mirroring to a VLAN is
desired in this scenario, then the physical switch must be replaced
by one that learns Ethernet addresses on a per-VLAN basis. In
addition, learning should be disabled on the VLAN containing mirrored
traffic. If this is not done then intermediate switches will learn
the MAC address of each end host from the mirrored traffic. If
packets being sent to that end host are also mirrored, then they will
be dropped since the switch will attempt to send them out the input
port. Disabling learning for the VLAN will cause the switch to
correctly send the packet out all ports configured for that VLAN. If
Open vSwitch is being used as an intermediate switch, learning can be
disabled by adding the mirrored VLAN to <ref column="flood_vlans"/>
in the appropriate <ref table="Bridge"/> table or tables.</p>
<p>
Mirroring to a GRE tunnel has fewer caveats than mirroring to a
VLAN and should generally be preferred.
</p>
</column>
<column name="snaplen">
<p>Maximum per-packet number of bytes to mirror.</p>
<p>A mirrored packet with size larger than <ref column="snaplen"/>
will be truncated in datapath to <ref column="snaplen"/> bytes
before sending to the mirror output port. If omitted, packets
are not truncated.
</p>
</column>
</group>
<group title="Statistics: Mirror counters">
<p>
Key-value pairs that report mirror statistics. The update period
is controlled by <ref column="other_config"
key="stats-update-interval"/> in the <code>Open_vSwitch</code> table.
</p>
<column name="statistics" key="tx_packets">
Number of packets transmitted through this mirror.
</column>
<column name="statistics" key="tx_bytes">
Number of bytes transmitted through this mirror.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="Controller" title="OpenFlow controller configuration.">
<p>An OpenFlow controller.</p>
<group title="Core Features">
<column name="type">
<p>
Open vSwitch supports two kinds of OpenFlow controllers. A bridge
may have any number of each kind:
</p>
<dl>
<dt>Primary controllers</dt>
<dd>
<p>
This is the kind of controller envisioned by the OpenFlow
specifications. Usually, a primary controller implements a
network policy by taking charge of the switch's flow table.
</p>
<p>
The <ref table="Bridge" column="fail_mode"/> column in the <ref
table="Bridge"/> table applies to primary controllers.
</p>
<p>
When multiple primary controllers are configured, Open vSwitch
connects to all of them simultaneously. OpenFlow provides few
facilities to allow multiple controllers to coordinate in
interacting with a single switch, so more than one primary
controller should be specified only if the controllers are
themselves designed to coordinate with each other.
</p>
</dd>
<dt>Service controllers</dt>
<dd>
<p>
These kinds of OpenFlow controller connections are intended for
occasional support and maintenance use, e.g. with
<code>ovs-ofctl</code>. Usually a service controller connects
only briefly to inspect or modify some of a switch's state.
</p>
<p>
The <ref table="Bridge" column="fail_mode"/> column in the <ref
table="Bridge"/> table does not apply to service controllers.
</p>
</dd>
</dl>
<p>
By default, Open vSwitch treats controllers with active connection
methods as primary controllers and those with passive connection
methods as service controllers. Set this column to the desired type
to override this default.
</p>
</column>
<column name="target">
<p>Connection method for controller.</p>
<p>
The following active connection methods are currently supported:
</p>
<dl>
<dt><code>ssl:<var>host</var></code>[<code>:<var>port</var></code>]</dt>
<dd>
<p>The specified SSL/TLS <var>port</var> on the host at the
given <var>host</var>, which can either be a DNS name (if built
with unbound library) or an IP address. The <ref table="Open_vSwitch"
column="ssl"/> column in the <ref table="Open_vSwitch"/> table must
point to a valid SSL/TLS configuration when this form is used.</p>
<p>If <var>port</var> is not specified, it defaults to 6653.</p>
<p>SSL/TLS support is an optional feature that is not always built
as part of Open vSwitch.</p>
</dd>
<dt><code>tcp:<var>host</var></code>[<code>:<var>port</var></code>]</dt>
<dd>
<p>
The specified TCP <var>port</var> on the host at the given
<var>host</var>, which can either be a DNS name (if built with
unbound library) or an IP address (IPv4 or IPv6). If <var>host</var>
is an IPv6 address, wrap it in square brackets, e.g.
<code>tcp:[::1]:6653</code>.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6653.
</p>
</dd>
</dl>
<p>
The following passive connection methods are currently supported:
</p>
<dl>
<dt><code>pssl:</code>[<var>port</var>][<code>:<var>host</var></code>]</dt>
<dd>
<p>
Listens for SSL/TLS connections on the specified TCP
<var>port</var>.
If <var>host</var>, which can either be a DNS name (if built with
unbound library) or an IP address, is specified, then connections
are restricted to the resolved or specified local IP address
(either IPv4 or IPv6). If <var>host</var> is an IPv6 address,
wrap it in square brackets, e.g. <code>pssl:6653:[::1]</code>.
</p>
<p>
If <var>port</var> is not specified, it defaults to
6653. If <var>host</var> is not specified then it listens only on
IPv4 (but not IPv6) addresses. The
<ref table="Open_vSwitch" column="ssl"/>
column in the <ref table="Open_vSwitch"/> table must point to a
valid SSL/TLS configuration when this form is used.
</p>
<p>
If <var>port</var> is not specified, it currently to 6653.
</p>
<p>
SSL/TLS support is an optional feature that is not always built
as part of Open vSwitch.
</p>
</dd>
<dt><code>ptcp:</code>[<var>port</var>][<code>:<var>host</var></code>]</dt>
<dd>
<p>
Listens for connections on the specified TCP <var>port</var>. If
<var>host</var>, which can either be a DNS name (if built with
unbound library) or an IP address, is specified, then connections
are restricted to the resolved or specified local IP address
(either IPv4 or IPv6). If <var>host</var> is an IPv6 address, wrap
it in square brackets, e.g. <code>ptcp:6653:[::1]</code>. If
<var>host</var> is not specified then it listens only on IPv4
addresses.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6653.
</p>
</dd>
</dl>
<p>When multiple controllers are configured for a single bridge, the
<ref column="target"/> values must be unique. Duplicate
<ref column="target"/> values yield unspecified results.</p>
</column>
<column name="connection_mode">
<p>If it is specified, this setting must be one of the following
strings that describes how Open vSwitch contacts this OpenFlow
controller over the network:</p>
<dl>
<dt><code>in-band</code></dt>
<dd>In this mode, this controller's OpenFlow traffic travels over the
bridge associated with the controller. With this setting, Open
vSwitch allows traffic to and from the controller regardless of the
contents of the OpenFlow flow table. (Otherwise, Open vSwitch
would never be able to connect to the controller, because it did
not have a flow to enable it.) This is the most common connection
mode because it is not necessary to maintain two independent
networks.</dd>
<dt><code>out-of-band</code></dt>
<dd>In this mode, OpenFlow traffic uses a control network separate
from the bridge associated with this controller, that is, the
bridge does not use any of its own network devices to communicate
with the controller. The control network must be configured
separately, before or after <code>ovs-vswitchd</code> is started.
</dd>
</dl>
<p>If not specified, the default is implementation-specific.</p>
</column>
</group>
<group title="Controller Failure Detection and Handling">
<column name="max_backoff">
Maximum number of milliseconds to wait between connection attempts.
Default is implementation-specific.
</column>
<column name="inactivity_probe">
Maximum number of milliseconds of idle time on connection to
controller before sending an inactivity probe message. If Open
vSwitch does not communicate with the controller for the specified
number of seconds, it will send a probe. If a response is not
received for the same additional amount of time, Open vSwitch
assumes the connection has been broken and attempts to reconnect.
Default is implementation-specific. A value of 0 disables
inactivity probes.
</column>
</group>
<group title="Asynchronous Messages">
<p>
OpenFlow switches send certain messages to controllers spontanenously,
that is, not in response to any request from the controller. These
messages are called ``asynchronous messages.'' These columns allow
asynchronous messages to be limited or disabled to ensure the best use
of network resources.
</p>
<column name="enable_async_messages">
The OpenFlow protocol enables asynchronous messages at time of
connection establishment, which means that a controller can receive
asynchronous messages, potentially many of them, even if it turns them
off immediately after connecting. Set this column to
<code>false</code> to change Open vSwitch behavior to disable, by
default, all asynchronous messages. The controller can use the
<code>NXT_SET_ASYNC_CONFIG</code> Nicira extension to OpenFlow to turn
on any messages that it does want to receive, if any.
</column>
<group title="Controller Rate Limiting">
<p>
A switch can forward packets to a controller over the OpenFlow
protocol. Forwarding packets this way at too high a rate can
overwhelm a controller, frustrate use of the OpenFlow connection for
other purposes, increase the latency of flow setup, and use an
unreasonable amount of bandwidth. Therefore, Open vSwitch supports
limiting the rate of packet forwarding to a controller.
</p>
<p>
There are two main reasons in OpenFlow for a packet to be sent to a
controller: either the packet ``misses'' in the flow table, that is,
there is no matching flow, or a flow table action says to send the
packet to the controller. Open vSwitch limits the rate of each kind
of packet separately at the configured rate. Therefore, the actual
rate that packets are sent to the controller can be up to twice the
configured rate, when packets are sent for both reasons.
</p>
<p>
This feature is specific to forwarding packets over an OpenFlow
connection. It is not general-purpose QoS. See the <ref
table="QoS"/> table for quality of service configuration, and <ref
column="ingress_policing_rate" table="Interface"/> in the <ref
table="Interface"/> table for ingress policing configuration.
</p>
<column name="controller_queue_size">
<p>
This sets the maximum size of the queue of packets that need to be
sent to this OpenFlow controller. The value must be less than 512.
If not specified the queue size is limited to the value set for
the management controller in <ref table="Bridge"
column="other_config" key="controller-queue-size"/> if present or
100 packets by default. Note: increasing the queue size might
have a negative impact on latency.
</p>
</column>
<column name="controller_rate_limit">
<p>
The maximum rate at which the switch will forward packets to the
OpenFlow controller, in packets per second. If no value is
specified, rate limiting is disabled.
</p>
</column>
<column name="controller_burst_limit">
<p>
When a high rate triggers rate-limiting, Open vSwitch queues
packets to the controller for each port and transmits them to the
controller at the configured rate. This value limits the number of
queued packets. Ports on a bridge share the packet queue fairly.
</p>
<p>
This value has no effect unless <ref
column="controller_rate_limit"/> is configured. The current
default when this value is not specified is one-quarter of <ref
column="controller_rate_limit"/>, meaning that queuing can delay
forwarding a packet to the controller by up to 250 ms.
</p>
</column>
<group title="Controller Rate Limiting Statistics">
<p>
These values report the effects of rate limiting. Their values are
relative to establishment of the most recent OpenFlow connection,
or since rate limiting was enabled, whichever happened more
recently. Each consists of two values, one with <code>TYPE</code>
replaced by <code>miss</code> for rate limiting flow table misses,
and the other with <code>TYPE</code> replaced by
<code>action</code> for rate limiting packets sent by OpenFlow
actions.
</p>
<p>
These statistics are reported only when controller rate limiting is
enabled.
</p>
<column name="status" key="packet-in-TYPE-bypassed"
type='{"type": "integer", "minInteger": 0}'>
Number of packets sent directly to the controller, without queuing,
because the rate did not exceed the configured maximum.
</column>
<column name="status" key="packet-in-TYPE-queued"
type='{"type": "integer", "minInteger": 0}'>
Number of packets added to the queue to send later.
</column>
<column name="status" key="packet-in-TYPE-dropped"
type='{"type": "integer", "minInteger": 0}'>
Number of packets added to the queue that were later dropped due to
overflow. This value is less than or equal to <ref column="status"
key="packet-in-TYPE-queued"/>.
</column>
<column name="status" key="packet-in-TYPE-backlog"
type='{"type": "integer", "minInteger": 0}'>
Number of packets currently queued. The other statistics increase
monotonically, but this one fluctuates between 0 and the <ref
column="controller_burst_limit"/> as conditions change.
</column>
</group>
</group>
</group>
<group title="Additional In-Band Configuration">
<p>These values are considered only in in-band control mode (see
<ref column="connection_mode"/>).</p>
<p>When multiple controllers are configured on a single bridge, there
should be only one set of unique values in these columns. If different
values are set for these columns in different controllers, the effect
is unspecified.</p>
<column name="local_ip">
The IP address to configure on the local port,
e.g. <code>192.168.0.123</code>. If this value is unset, then
<ref column="local_netmask"/> and <ref column="local_gateway"/> are
ignored.
</column>
<column name="local_netmask">
The IP netmask to configure on the local port,
e.g. <code>255.255.255.0</code>. If <ref column="local_ip"/> is set
but this value is unset, then the default is chosen based on whether
the IP address is class A, B, or C.
</column>
<column name="local_gateway">
The IP address of the gateway to configure on the local port, as a
string, e.g. <code>192.168.0.1</code>. Leave this column unset if
this network has no gateway.
</column>
</group>
<group title="Controller Status">
<column name="is_connected">
<code>true</code> if currently connected to this controller,
<code>false</code> otherwise.
</column>
<column name="role"
type='{"type": "string", "enum": ["set", ["other", "master", "slave"]]}'>
<p>The level of authority this controller has on the associated
bridge. Possible values are:</p>
<dl>
<dt><code>other</code></dt>
<dd>Allows the controller access to all OpenFlow features.</dd>
<dt><code>master</code></dt>
<dd>
Equivalent to <code>other</code>, except that there may be at
most one such controller at a time. If a given controller
promotes itself to this role, <code>ovs-vswitchd</code>
demotes any existing controller with the role to <code>slave</code>.
</dd>
<dt><code>slave</code></dt>
<dd>
Allows the controller read-only access to OpenFlow features.
Attempts to modify the flow table will be rejected with an
error. Such controllers do not receive OFPT_PACKET_IN or
OFPT_FLOW_REMOVED messages, but they do receive OFPT_PORT_STATUS
messages.
</dd>
</dl>
</column>
<column name="status" key="last_error">
A human-readable description of the last error on the connection
to the controller; i.e. <code>strerror(errno)</code>. This key
will exist only if an error has occurred.
</column>
<column name="status" key="state"
type='{"type": "string", "enum": ["set", ["VOID", "BACKOFF", "CONNECTING", "ACTIVE", "IDLE"]]}'>
<p>
The state of the connection to the controller:
</p>
<dl>
<dt><code>VOID</code></dt>
<dd>Connection is disabled.</dd>
<dt><code>BACKOFF</code></dt>
<dd>Attempting to reconnect at an increasing period.</dd>
<dt><code>CONNECTING</code></dt>
<dd>Attempting to connect.</dd>
<dt><code>ACTIVE</code></dt>
<dd>Connected, remote host responsive.</dd>
<dt><code>IDLE</code></dt>
<dd>Connection is idle. Waiting for response to keep-alive.</dd>
</dl>
<p>
These values may change in the future. They are provided only for
human consumption.
</p>
</column>
<column name="status" key="sec_since_connect"
type='{"type": "integer", "minInteger": 0}'>
The amount of time since this controller last successfully connected to
the switch (in seconds). Value is empty if controller has never
successfully connected.
</column>
<column name="status" key="sec_since_disconnect"
type='{"type": "integer", "minInteger": 1}'>
The amount of time since this controller last disconnected from
the switch (in seconds). Value is empty if controller has never
disconnected.
</column>
</group>
<group title="Connection Parameters">
<p>
Additional configuration for a connection between the controller
and the Open vSwitch.
</p>
<column name="other_config" key="dscp"
type='{"type": "integer"}'>
The Differentiated Service Code Point (DSCP) is specified using 6 bits
in the Type of Service (TOS) field in the IP header. DSCP provides a
mechanism to classify the network traffic and provide Quality of
Service (QoS) on IP networks.
The DSCP value specified here is used when establishing the connection
between the controller and the Open vSwitch. If no value is specified,
a default value of 48 is chosen. Valid DSCP values must be in the
range 0 to 63.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
<column name="other_config"/>
</group>
</table>
<table name="Manager" title="OVSDB management connection.">
<p>
Configuration for a database connection to an Open vSwitch database
(OVSDB) client.
</p>
<p>
This table primarily configures the Open vSwitch database
(<code>ovsdb-server</code>), not the Open vSwitch switch
(<code>ovs-vswitchd</code>). The switch does read the table to determine
what connections should be treated as in-band.
</p>
<p>
The Open vSwitch database server can initiate and maintain active
connections to remote clients. It can also listen for database
connections.
</p>
<group title="Core Features">
<column name="target">
<p>Connection method for managers.</p>
<p>
The following connection methods are currently supported:
</p>
<dl>
<dt><code>ssl:<var>host</var></code>[<code>:<var>port</var></code>]</dt>
<dd>
<p>
The specified SSL/TLS <var>port</var> on the host at the given
<var>host</var>, which can either be a DNS name (if built with
unbound library) or an IP address. The <ref table="Open_vSwitch"
column="ssl"/> column in the <ref table="Open_vSwitch"/>
table must point to a valid SSL/TLS configuration when this
form is used.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6640.
</p>
<p>
SSL/TLS support is an optional feature that is not always
built as part of Open vSwitch.
</p>
</dd>
<dt><code>tcp:<var>host</var></code>[<code>:<var>port</var></code>]</dt>
<dd>
<p>
The specified TCP <var>port</var> on the host at the given
<var>host</var>, which can either be a DNS name (if built with
unbound library) or an IP address (IPv4 or IPv6). If <var>host</var>
is an IPv6 address, wrap it in square brackets, e.g.
<code>tcp:[::1]:6640</code>.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6640.
</p>
</dd>
<dt><code>pssl:</code>[<var>port</var>][<code>:<var>host</var></code>]</dt>
<dd>
<p>
Listens for SSL/TLS connections on the specified TCP
<var>port</var>.
Specify 0 for <var>port</var> to have the kernel automatically
choose an available port. If <var>host</var>, which can either
be a DNS name (if built with unbound library) or an IP address,
is specified, then connections are restricted to the resolved or
specified local IP address (either IPv4 or IPv6 address). If
<var>host</var> is an IPv6 address, wrap in square brackets,
e.g. <code>pssl:6640:[::1]</code>. If <var>host</var> is not
specified then it listens only on IPv4 (but not IPv6) addresses.
The <ref table="Open_vSwitch" column="ssl"/> column in the <ref
table="Open_vSwitch"/> table must point to a valid SSL/TLS
configuration when this form is used.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6640.
</p>
<p>
SSL/TLS support is an optional feature that is not always built
as part of Open vSwitch.
</p>
</dd>
<dt><code>ptcp:</code>[<var>port</var>][<code>:<var>host</var></code>]</dt>
<dd>
<p>
Listens for connections on the specified TCP <var>port</var>.
Specify 0 for <var>port</var> to have the kernel automatically
choose an available port. If <var>host</var>, which can either
be a DNS name (if built with unbound library) or an IP address,
is specified, then connections are restricted to the resolved or
specified local IP address (either IPv4 or IPv6 address). If
<var>host</var> is an IPv6 address, wrap it in square brackets,
e.g. <code>ptcp:6640:[::1]</code>. If <var>host</var> is not
specified then it listens only on IPv4 addresses.
</p>
<p>
If <var>port</var> is not specified, it defaults to 6640.
</p>
</dd>
</dl>
<p>When multiple managers are configured, the <ref column="target"/>
values must be unique. Duplicate <ref column="target"/> values yield
unspecified results.</p>
</column>
<column name="connection_mode">
<p>
If it is specified, this setting must be one of the following strings
that describes how Open vSwitch contacts this OVSDB client over the
network:
</p>
<dl>
<dt><code>in-band</code></dt>
<dd>
In this mode, this connection's traffic travels over a bridge
managed by Open vSwitch. With this setting, Open vSwitch allows
traffic to and from the client regardless of the contents of the
OpenFlow flow table. (Otherwise, Open vSwitch would never be able
to connect to the client, because it did not have a flow to enable
it.) This is the most common connection mode because it is not
necessary to maintain two independent networks.
</dd>
<dt><code>out-of-band</code></dt>
<dd>
In this mode, the client's traffic uses a control network separate
from that managed by Open vSwitch, that is, Open vSwitch does not
use any of its own network devices to communicate with the client.
The control network must be configured separately, before or after
<code>ovs-vswitchd</code> is started.
</dd>
</dl>
<p>
If not specified, the default is implementation-specific.
</p>
</column>
</group>
<group title="Client Failure Detection and Handling">
<column name="max_backoff">
Maximum number of milliseconds to wait between connection attempts.
Default is implementation-specific.
</column>
<column name="inactivity_probe">
Maximum number of milliseconds of idle time on connection to the client
before sending an inactivity probe message. If Open vSwitch does not
communicate with the client for the specified number of seconds, it
will send a probe. If a response is not received for the same
additional amount of time, Open vSwitch assumes the connection has been
broken and attempts to reconnect. Default is implementation-specific.
A value of 0 disables inactivity probes.
</column>
</group>
<group title="Status">
<p>
Key-value pair of <ref column="is_connected"/> is always updated.
Other key-value pairs in the status columns may be updated depends
on the <ref column="target"/> type.
</p>
<p>
When <ref column="target"/> specifies a connection method that
listens for inbound connections (e.g. <code>ptcp:</code> or
<code>punix:</code>), both <ref column="n_connections"/> and
<ref column="is_connected"/> may also be updated while the
remaining key-value pairs are omitted.
</p>
<p>
On the other hand, when <ref column="target"/> specifies an
outbound connection, all key-value pairs may be updated, except
the above-mentioned two key-value pairs associated with inbound
connection targets. They are omitted.
</p>
<column name="is_connected">
<code>true</code> if currently connected to this manager,
<code>false</code> otherwise.
</column>
<column name="status" key="last_error">
A human-readable description of the last error on the connection
to the manager; i.e. <code>strerror(errno)</code>. This key
will exist only if an error has occurred.
</column>
<column name="status" key="state"
type='{"type": "string", "enum": ["set", ["VOID", "BACKOFF", "CONNECTING", "ACTIVE", "IDLE"]]}'>
<p>
The state of the connection to the manager:
</p>
<dl>
<dt><code>VOID</code></dt>
<dd>Connection is disabled.</dd>
<dt><code>BACKOFF</code></dt>
<dd>Attempting to reconnect at an increasing period.</dd>
<dt><code>CONNECTING</code></dt>
<dd>Attempting to connect.</dd>
<dt><code>ACTIVE</code></dt>
<dd>Connected, remote host responsive.</dd>
<dt><code>IDLE</code></dt>
<dd>Connection is idle. Waiting for response to keep-alive.</dd>
</dl>
<p>
These values may change in the future. They are provided only for
human consumption.
</p>
</column>
<column name="status" key="sec_since_connect"
type='{"type": "integer", "minInteger": 0}'>
The amount of time since this manager last successfully connected
to the database (in seconds). Value is empty if manager has never
successfully connected.
</column>
<column name="status" key="sec_since_disconnect"
type='{"type": "integer", "minInteger": 0}'>
The amount of time since this manager last disconnected from the
database (in seconds). Value is empty if manager has never
disconnected.
</column>
<column name="status" key="locks_held">
Space-separated list of the names of OVSDB locks that the connection
holds. Omitted if the connection does not hold any locks.
</column>
<column name="status" key="locks_waiting">
Space-separated list of the names of OVSDB locks that the connection is
currently waiting to acquire. Omitted if the connection is not waiting
for any locks.
</column>
<column name="status" key="locks_lost">
Space-separated list of the names of OVSDB locks that the connection
has had stolen by another OVSDB client. Omitted if no locks have been
stolen from this connection.
</column>
<column name="status" key="n_connections"
type='{"type": "integer", "minInteger": 2}'>
When <ref column="target"/> specifies a connection method that
listens for inbound connections (e.g. <code>ptcp:</code> or
<code>pssl:</code>) and more than one connection is actually active,
the value is the number of active connections. Otherwise, this
key-value pair is omitted.
</column>
<column name="status" key="bound_port" type='{"type": "integer"}'>
When <ref column="target"/> is <code>ptcp:</code> or
<code>pssl:</code>, this is the TCP port on which the OVSDB server is
listening. (This is particularly useful when <ref
column="target"/> specifies a port of 0, allowing the kernel to
choose any available port.)
</column>
</group>
<group title="Connection Parameters">
<p>
Additional configuration for a connection between the manager
and the Open vSwitch Database.
</p>
<column name="other_config" key="dscp"
type='{"type": "integer"}'>
The Differentiated Service Code Point (DSCP) is specified using 6 bits
in the Type of Service (TOS) field in the IP header. DSCP provides a
mechanism to classify the network traffic and provide Quality of
Service (QoS) on IP networks.
The DSCP value specified here is used when establishing the connection
between the manager and the Open vSwitch. If no value is specified, a
default value of 48 is chosen. Valid DSCP values must be in the range
0 to 63.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
<column name="other_config"/>
</group>
</table>
<table name="NetFlow">
A NetFlow target. NetFlow is a protocol that exports a number of
details about terminating IP flows, such as the principals involved
and duration.
<column name="targets">
NetFlow targets in the form
<code><var>ip</var>:<var>port</var></code>. The <var>ip</var>
must be specified numerically, not as a DNS name.
</column>
<column name="engine_id">
Engine ID to use in NetFlow messages. Defaults to datapath index
if not specified.
</column>
<column name="engine_type">
Engine type to use in NetFlow messages. Defaults to datapath
index if not specified.
</column>
<column name="active_timeout">
<p>
The interval at which NetFlow records are sent for flows that
are still active, in seconds. A value of <code>0</code>
requests the default timeout (currently 600 seconds); a value
of <code>-1</code> disables active timeouts.
</p>
<p>
The NetFlow passive timeout, for flows that become inactive,
is not configurable. It will vary depending on the Open
vSwitch version, the forms and contents of the OpenFlow flow
tables, CPU and memory usage, and network activity. A typical
passive timeout is about a second.
</p>
</column>
<column name="add_id_to_interface">
<p>If this column's value is <code>false</code>, the ingress and egress
interface fields of NetFlow flow records are derived from OpenFlow port
numbers. When it is <code>true</code>, the 7 most significant bits of
these fields will be replaced by the least significant 7 bits of the
engine id. This is useful because many NetFlow collectors do not
expect multiple switches to be sending messages from the same host, so
they do not store the engine information which could be used to
disambiguate the traffic.</p>
<p>When this option is enabled, a maximum of 508 ports are supported.</p>
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="Datapath">
<p>
Configuration for a datapath within <ref table="Open_vSwitch"/>.
</p>
<p>
A datapath is responsible for providing the packet handling in Open
vSwitch. There are two primary datapath implementations used by
Open vSwitch: kernel and userspace. Kernel datapath
implementations are available for Linux and Hyper-V, and selected
as <code>system</code> in the <ref column="datapath_type"/> column
of the <ref table="Bridge"/> table. The userspace datapath is used
by DPDK and AF-XDP, and is selected as <code>netdev</code> in the
<ref column="datapath_type"/> column of the <ref table="Bridge"/>
table.
</p>
<p>
A datapath of a particular type is shared by all the bridges that use
that datapath. Thus, configurations applied to this table affect
all bridges that use this datapath.
</p>
<column name="datapath_version">
<p>
Reports the version number of the Open vSwitch datapath in use.
This allows management software to detect and report discrepancies
between Open vSwitch userspace and datapath versions. (The <ref
column="ovs_version" table="Open_vSwitch"/> column in the <ref
table="Open_vSwitch"/> reports the Open vSwitch userspace version.)
The version reported depends on the datapath in use:
</p>
<ul>
<li>
When the kernel module included in the Open vSwitch source tree is
used, this column reports the Open vSwitch version from which the
module was taken.
</li>
<li>
When the kernel module that is part of the upstream Linux kernel is
used, this column reports <code><unknown></code>.
</li>
<li>
When the datapath is built into the <code>ovs-vswitchd</code>
binary, this column reports <code><built-in></code>. A
built-in datapath is by definition the same version as the rest of
the Open vSwitch userspace.
</li>
<li>
Other datapaths (such as the Hyper-V kernel datapath) currently
report <code><unknown></code>.
</li>
</ul>
<p>
A version discrepancy between <code>ovs-vswitchd</code> and the
datapath in use is not normally cause for alarm. The Open vSwitch
kernel datapaths for Linux and Hyper-V, in particular, are designed
for maximum inter-version compatibility: any userspace version works
with with any kernel version. Some reasons do exist to insist on
particular user/kernel pairings. First, newer kernel versions add
new features, that can only be used by new-enough userspace, e.g.
VXLAN tunneling requires certain minimal userspace and kernel
versions. Second, as an extension to the first reason, some newer
kernel versions add new features for enhancing performance that only
new-enough userspace versions can take advantage of.
</p>
</column>
<column name="ct_zones">
Configuration for connection tracking zones. Each pair maps from a
zone id to a configuration for that zone. Zone <code>0</code> applies
to the default zone (ie, the one used if a zone is not specified in
connection tracking-related OpenFlow matches and actions).
</column>
<group title="Capabilities">
<p>
The <ref column="capabilities"/> column reports a datapath's
features. For the <code>netdev</code> datapath, the
capabilities are fixed for a given version of Open vSwitch
because this datapath is built into the
<code>ovs-vswitchd</code> binary. The Linux kernel and
Windows and other datapaths, which are external to OVS
userspace, can vary in version and capabilities independently
from <code>ovs-vswitchd</code>.
</p>
<p>
Some of these features indicate whether higher-level Open vSwitch
features are available. For example, OpenFlow features for
connection-tracking are available only when <ref column="capabilities"
key="ct_state"/> is <code>true</code>. A controller that wishes to
determine whether a feature is supported could, therefore, consult the
relevant capabilities in this table. However, as a general rule, it is
better for a controller to try to use the higher-level feature and use
the result as an indication of support, since the low-level
capabilities are more likely to shift over time than the high-level
features that rely on them.
</p>
<column name="capabilities" key="max_vlan_headers"
type='{"type": "integer", "minInteger": 0}'>
Number of 802.1q VLAN headers supported by the datapath, as probed by
the <code>ovs-vswitchd</code> slow path. If the datapath supports more
VLAN headers than the slow path, this reports the slow path's limit.
The value of <ref column="other-config" key="vlan-limit"/> in the <ref
table="Open_vSwitch"/> table does not influence the number reported
here.
</column>
<column name="capabilities" key="recirc" type='{"type": "boolean"}'>
If this is true, then the datapath supports recirculation,
specifically OVS_KEY_ATTR_RECIRC_ID. Recirculation enables
higher performance for MPLS and active-active load balancing
bonding modes.
</column>
<column name="capabilities" key="lb_output_action"
type='{"type": "boolean"}'>
If this is true, then the datapath supports optimized balance-tcp
bond mode. This capability replaces existing <code>hash</code> and
<code>recirc</code> actions with new action <code>lb_output</code>
and avoids recirculation of packet in datapath. It is supported
only for balance-tcp bond mode in netdev datapath. The new action
gives higher performance by using bond buckets instead of post
recirculation flows for selection of member port from bond. By default
this new action is disabled, however it can be enabled by setting
<ref column="other-config" key="lb-output-action"/> in
<ref table="Port"/> table.
</column>
<group title="Connection-Tracking Capabilities">
<p>
These capabilities are granular because Open vSwitch and its
datapaths added support for connection tracking over several
releases, with features added individually over that time.
</p>
<column name="capabilities" key="ct_state" type='{"type": "boolean"}'>
<p>
If true, datapath supports OVS_KEY_ATTR_CT_STATE, which indicates
support for the bits in the OpenFlow <code>ct_state</code> field
(see <code>ovs-fields</code>(7)) other than <code>snat</code> and
<code>dnat</code>, which have a separate capability.
</p>
<p>
If this is false, the datapath does not support connection-tracking
at all and the remaining connection-tracking capabilities should
all be false. In this case, Open vSwitch will reject flows that
match on the <code>ct_state</code> field or use the <code>ct</code>
action.
</p>
</column>
<column name="capabilities" key="ct_state_nat"
type='{"type": "boolean"}'>
<p>
If true, it means that the datapath supports the <code>snat</code>
and <code>dnat</code> flags in the OpenFlow <code>ct_state</code>
field. The <code>ct_state</code> capability must be true for this
to make sense.
</p>
<p>
If false, Open vSwitch will reject flows that match on the
<code>snat</code> or <code>dnat</code> bits in
<code>ct_state</code> or use <code>nat</code> in the
<code>ct</code> action.
</p>
</column>
<column name="capabilities" key="ct_zone" type='{"type": "boolean"}'>
If true, datapath supports OVS_KEY_ATTR_CT_ZONE. If false, Open
vSwitch rejects flows that match on the <code>ct_zone</code> field or
that specify a nonzero zone or a zone field on the <code>ct</code>
action.
</column>
<column name="capabilities" key="ct_mark" type='{"type": "boolean"}'>
If true, datapath supports OVS_KEY_ATTR_CT_MARK. If false, Open
vSwitch rejects flows that match on the <code>ct_mark</code> field or
that set <code>ct_mark</code> in the <code>ct</code> action.
</column>
<column name="capabilities" key="ct_label" type='{"type": "boolean"}'>
If true, datapath supports OVS_KEY_ATTR_CT_LABEL. If false, Open
vSwitch rejects flows that match on the <code>ct_label</code> field
or that set <code>ct_label</code> in the <code>ct</code> action.
</column>
<column name="capabilities" key="ct_orig_tuple"
type='{"type": "boolean"}'>
<p>
If true, the datapath supports matching the 5-tuple from the
connection's original direction for IPv4 traffic. If false, Open
vSwitch rejects flows that match on <code>ct_nw_src</code> or
<code>ct_nw_dst</code>, that use the <code>ct</code> feature of the
<code>resubmit</code> action, or the <code>force</code> keyword in
the <code>ct</code> action. (The latter isn't tied to connection
tracking support of original tuples in any technical way. They are
conflated because all current datapaths implemented the two
features at the same time.)
</p>
<p>
If this and <ref column="capabilities" key="ct_orig_tuple6"/> are
both false, Open vSwitch rejects flows that match on
<code>ct_nw_proto</code>, <code>ct_tp_src</code>, or
<code>ct_tp_dst</code>.
</p>
</column>
<column name="capabilities" key="ct_orig_tuple6"
type='{"type": "boolean"}'>
If true, the datapath supports matching the 5-tuple from the
connection's original direction for IPv6 traffic. If false, Open
vSwitch rejects flows that match on <code>ct_ipv6_src</code> or
<code>ct_ipv6_dst</code>.
</column>
</group>
<column name="capabilities" key="masked_set_action"
type='{"type": "boolean"}'>
True if the datapath supports masked data in OVS_ACTION_ATTR_SET
actions. Masked data can improve performance by allowing megaflows to
match on fewer fields.
</column>
<column name="capabilities" key="tnl_push_pop"
type='{"type": "boolean"}'>
True if the datapath supports tnl_push and pop actions. This is a
prerequisite for a datapath to support native tunneling.
</column>
<column name="capabilities" key="ufid" type='{"type": "boolean"}'>
True if the datapath supports OVS_FLOW_ATTR_UFID. UFID support
improves revalidation performance by transferring less data between
the slow path and the datapath.
</column>
<column name="capabilities" key="trunc" type='{"type": "boolean"}'>
True if the datapath supports OVS_ACTION_ATTR_TRUNC action. If false,
the <code>output</code> action with packet truncation requires every
packet to be sent to the Open vSwitch slow path, which is likely to
make it too slow for mirroring traffic in bulk.
</column>
<column name="capabilities" key="nd_ext" type='{"type": "boolean"}'>
True if the datapath supports OVS_KEY_ATTR_ND_EXTENSIONS to match on
ICMPv6 "ND reserved" and "ND option type" header fields. If false,
the datapath reports error if the feature is used.
</column>
<group title="Clone Actions">
<p>
When Open vSwitch translates actions from OpenFlow into the datapath
representation, some of the datapath actions may modify the packet or
have other side effects that later datapath actions can't undo. The
OpenFlow <code>ct</code>, <code>meter</code>, <code>output</code>
with truncation, <code>encap</code>, <code>decap</code>, and
<code>dec_nsh_ttl</code> actions fall into this category. Often,
this is not a problem because nothing later on needs the original
packet.
</p>
<p>
Such actions can, however, occur in circumstances where the
translation does require the original packet. For example, an
OpenFlow <code>output</code> action might direct a packet to a patch
port, which might in turn lead to a <code>ct</code> action that NATs
the packet (which cannot be undone), and then afterward when control
flow pops back across the patch port some other action might need to
act on the original packet.
</p>
<p>
Open vSwitch has two different ways to implement this ``save and
restore'' via datapath actions. These capabilities indicate which
one Open vSwitch will choose. When neither is available, Open
vSwitch simply fails in situations that require this feature.
</p>
<column name="capabilities" key="clone" type='{"type": "boolean"}'>
<p>
True if the datapath supports OVS_ACTION_ATTR_CLONE action. This
is the preferred option for saving and restoring packets, since it
is intended for the purpose, but old datapaths do not support it.
Open vSwitch will use it whenever it is available.
</p>
<p>
(The OpenFlow <code>clone</code> action does not always yield a
OVS_ACTION_ATTR_CLONE action. It only does so when the datapath
supports it and the <code>clone</code> brackets actions that
otherwise cannot be undone.)
</p>
</column>
<column name="capabilities" key="sample_nesting"
type='{"type": "integer", "minInteger": 0}'>
Maximum level of nesting allowed by OVS_ACTION_ATTR_SAMPLE action.
Open vSwitch misuses this action for saving and restoring packets
when the datapath supports more than 3 levels of nesting and
OVS_ACTION_ATTR_CLONE is not available.
</column>
</group>
<column name="capabilities" key="ct_eventmask"
type='{"type": "boolean"}'>
True if the datapath's OVS_ACTION_ATTR_CT action implements the
OVS_CT_ATTR_EVENTMASK attribute. When this is true, Open vSwitch uses
the event mask feature to limit the kinds of events reported to
conntrack update listeners. When Open vSwitch doesn't limit the event
mask, listeners receive reports of numerous usually unimportant events,
such as TCP state machine changes, which can waste CPU time.
</column>
<column name="capabilities" key="ct_clear" type='{"type": "boolean"}'>
True if the datapath supports OVS_ACTION_ATTR_CT_CLEAR action.
If false, the OpenFlow <code>ct_clear</code> action has no effect
on the datapath.
</column>
<column name="capabilities" key="max_hash_alg"
type='{"type": "integer", "minInteger": 0}'>
Highest supported dp_hash algorithm. This allows Open vSwitch to avoid
requesting a packet hash that the datapath does not support.
</column>
<column name="capabilities" key="check_pkt_len"
type='{"type": "boolean"}'>
True if the datapath supports OVS_ACTION_ATTR_CHECK_PKT_LEN. If false,
Open vSwitch implements the <code>check_pkt_larger</code> action by
sending every packet through the Open vSwitch slow path, which is
likely to make it too slow for handling traffic in bulk.
</column>
<column name="capabilities" key="ct_timeout" type='{"type": "boolean"}'>
True if the datapath supports OVS_CT_ATTR_TIMEOUT in the
OVS_ACTION_ATTR_CT action. If false, Open vswitch cannot implement
timeout policies based on connection tracking zones, as configured
through the <code>CT_Timeout_Policy</code> table.
</column>
<column name="capabilities" key="explicit_drop_action"
type='{"type": "boolean"}'>
True if the datapath supports OVS_ACTION_ATTR_DROP. If false,
explicit drop action will not be sent to the datapath.
</column>
<column name="capabilities" key="ct_zero_snat"
type='{"type": "boolean"}'>
True if the datapath supports all-zero SNAT. This is a special case
if the <code>src</code> IP address is configured as all 0's, i.e.,
<code>nat(src=0.0.0.0)</code>. In this case, when a source port
collision is detected during the commit, the source port will be
translated to an ephemeral port. If there is no collision, no SNAT
is performed.
</column>
<column name="capabilities" key="ct_flush"
type='{"type": "boolean"}'>
True if the datapath supports CT flush OpenFlow Nicira extension
called <code>NXT_CT_FLUSH</code>. The <code>NXT_CT_FLUSH</code>
extensions allows to flush CT entries based on specified parameters.
</column>
<column name="capabilities" key="psample"
type='{"type": "boolean"}'>
True if the datapath supports OVS_ACTION_ATTR_PSAMPLE. If false,
local sampling will not be supported with the Linux kernel datapath.
</column>
</group>
<column name="ct_zone_default_limit">
Default connection tracking zone limit that is applied to all zones
that didn't specify the <ref table="CT_Zone" column="limit"/>
explicitly. If the limit is unspecified the default limit
configuration for the datapath is left intact. The value 0 means
unlimited.
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="CT_Zone">
Connection tracking zone configuration
<column name="timeout_policy">
Connection tracking timeout policy for this zone. If a timeout policy
is not specified, it defaults to the timeout policy in the system.
</column>
<column name="limit">
Connection tracking limit for this zone. If the limit is unspecified
the <ref table="Datapath" column="ct_zone_default_limit"/> will be used.
The value 0 means unlimited.
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="CT_Timeout_Policy">
Connection tracking timeout policy configuration
<group title="Timeouts">
<column name="timeouts">
The <code>timeouts</code> column contains key-value pairs used
to configure connection tracking timeouts in a datapath.
Key-value pairs that are not supported by a datapath are
ignored. The timeout value is in seconds.
</column>
<group title="TCP Timeouts">
<column name="timeouts" key="tcp_syn_sent">
The timeout for the connection after the first TCP SYN packet has
been seen by conntrack.
</column>
<column name="timeouts" key="tcp_syn_recv">
The timeout of the connection after the first TCP SYN-ACK packet
has been seen by conntrack.
</column>
<column name="timeouts" key="tcp_established">
The timeout of the connection after the connection has been fully
established.
</column>
<column name="timeouts" key="tcp_fin_wait">
The timeout of the connection after the first TCP FIN packet
has been seen by conntrack.
</column>
<column name="timeouts" key="tcp_close_wait">
The timeout of the connection after the first TCP ACK packet
has been seen after it receives TCP FIN packet. This timeout
is only supported by the Linux kernel datapath.
</column>
<column name="timeouts" key="tcp_last_ack">
The timeout of the connection after TCP FIN packets have been
seen by conntrack from both directions. This timeout is only
supported by the Linux kernel datapath.
</column>
<column name="timeouts" key="tcp_time_wait">
The timeout of the connection after conntrack has seen the
TCP ACK packet for the second TCP FIN packet.
</column>
<column name="timeouts" key="tcp_close">
The timeout of the connection after the first TCP RST packet
has been seen by conntrack.
</column>
<column name="timeouts" key="tcp_syn_sent2">
The timeout of the connection when only a TCP SYN packet has been
seen by conntrack from both directions (simultaneous open).
This timeout is only supported by the Linux kernel datapath.
</column>
<column name="timeouts" key="tcp_retransmit">
The timeout of the connection when it exceeds the maximum
number of retransmissions. This timeout is only supported by
the Linux kernel datapath.
</column>
<column name="timeouts" key="tcp_unack">
The timeout of the connection when non-SYN packets create an
established connection in TCP loose tracking mode. This timeout
is only supported by the Linux kernel datapath.
</column>
</group>
<group title="UDP Timeouts">
<column name="timeouts" key="udp_first">
The timeout of the connection after the first UDP packet has
been seen by conntrack. This timeout is only supported by the
userspace datapath.
</column>
<column name="timeouts" key="udp_single">
The timeout of the connection when conntrack only seen UDP
packet from the source host, but the destination host has never
sent one back.
</column>
<column name="timeouts" key="udp_multiple">
The timeout of the connection when UDP packets have been seen in
both directions.
</column>
</group>
<group title="ICMP Timeouts">
<column name="timeouts" key="icmp_first">
The timeout of the connection after the first ICMP packet has
been seen by conntrack.
</column>
<column name="timeouts" key="icmp_reply">
The timeout of the connection when ICMP packets have been seen in
both direction. This timeout is only supported by the userspace
datapath.
</column>
</group>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="SSL">
SSL/TLS configuration for an Open_vSwitch.
<column name="private_key">
Name of a PEM file containing the private key used as the switch's
identity for SSL/TLS connections to the controller.
</column>
<column name="certificate">
Name of a PEM file containing a certificate, signed by the
certificate authority (CA) used by the controller and manager,
that certifies the switch's private key, identifying a trustworthy
switch.
</column>
<column name="ca_cert">
Name of a PEM file containing the CA certificate used to verify
that the switch is connected to a trustworthy controller.
</column>
<column name="bootstrap_ca_cert">
If set to <code>true</code>, then Open vSwitch will attempt to
obtain the CA certificate from the controller on its first SSL/TLS
connection and save it to the named PEM file. If it is successful,
it will immediately drop the connection and reconnect, and from then
on all SSL/TLS connections must be authenticated by a certificate signed
by the CA certificate thus obtained. <em>This option exposes the
SSL/TLS connection to a man-in-the-middle attack obtaining the initial
CA certificate.</em> It may still be useful for bootstrapping.
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="sFlow">
<p>A set of sFlow(R) targets. sFlow is a protocol for remote
monitoring of switches.</p>
<column name="agent">
<p>
Determines the agent address, that is, the IP address reported to
collectors as the source of the sFlow data. It may be an IP address or
the name of a network device. In the latter case, the network device's
IP address is used,
</p>
<p>
If not specified, the agent device is figured from the first target
address and the routing table. If the routing table does not contain a
route to the target, the IP address defaults to the <ref
table="Controller" column="local_ip"/> in the collector's <ref
table="Controller"/>.
</p>
<p>
If an agent IP address cannot be determined, sFlow is disabled.
</p>
</column>
<column name="header">
Number of bytes of a sampled packet to send to the collector.
If not specified, the default is 128 bytes.
</column>
<column name="polling">
Polling rate in seconds to send port statistics to the collector.
If not specified, defaults to 30 seconds.
</column>
<column name="sampling">
Rate at which packets should be sampled and sent to the collector.
If not specified, defaults to 400, which means one out of 400
packets, on average, will be sent to the collector.
</column>
<column name="targets">
sFlow targets in the form
<code><var>ip</var>:<var>port</var></code>.
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="IPFIX">
<p>Configuration for sending packets to IPFIX collectors.</p>
<p>
IPFIX is a protocol that exports a number of details about flows. The
IPFIX implementation in Open vSwitch samples packets at a configurable
rate, extracts flow information from those packets, optionally caches and
aggregates the flow information, and sends the result to one or more
collectors.
</p>
<p>
IPFIX in Open vSwitch can be configured two different ways:
</p>
<ul>
<li>
With <em>per-bridge sampling</em>, Open vSwitch performs IPFIX sampling
automatically on all packets that pass through a bridge. To configure
per-bridge sampling, create an <ref table="IPFIX"/> record and point a
<ref table="Bridge"/> table's <ref table="Bridge" column="ipfix"/>
column to it. The <ref table="Flow_Sample_Collector_Set"/> table is
not used for per-bridge sampling.
</li>
<li>
<p>
With <em>flow-based sampling</em>, <code>sample</code> actions in the
OpenFlow flow table drive IPFIX sampling. See
<code>ovs-actions</code>(7) for a description of the
<code>sample</code> action.
</p>
<p>
Flow-based sampling also requires database configuration: create a
<ref table="IPFIX"/> record that describes the IPFIX configuration
and a <ref table="Flow_Sample_Collector_Set"/> record that points to
the <ref table="Bridge"/> whose flow table holds the
<code>sample</code> actions and to <ref table="IPFIX"/> record. The
<ref table="Bridge" column="ipfix"/> in the <ref table="Bridge"/>
table is not used for flow-based sampling.
</p>
</li>
</ul>
<column name="targets">
IPFIX target collectors in the form
<code><var>ip</var>:<var>port</var></code>.
</column>
<column name="cache_active_timeout">
The maximum period in seconds for which an IPFIX flow record is
cached and aggregated before being sent. If not specified,
defaults to 0. If 0, caching is disabled.
</column>
<column name="cache_max_flows">
The maximum number of IPFIX flow records that can be cached at a
time. If not specified, defaults to 0. If 0, caching is
disabled.
</column>
<column name="stats_interval">
<p>
Interval (in seconds) for sending IPFIX exporting process statistics
according to IETF RFC 5101 Section 4.3.
</p>
<p>
Default value is 600
</p>
</column>
<column name="template_interval">
<p>
Interval (in seconds) for sending IPFIX Template information for each
Observation Domain ID.
</p>
<p>
Default value is 600
</p>
</column>
<column name="other_config" key="enable-tunnel-sampling"
type='{"type": "boolean"}'>
<p>
Set to <code>true</code> to enable sampling and reporting tunnel
header 7-tuples in IPFIX flow records. Tunnel sampling is enabled
by default.
</p>
<p>
The following enterprise entities report the sampled tunnel info:
</p>
<dl>
<dt>tunnelType:</dt>
<dd>
<p>ID: 891, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 8-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: Identifier of the layer 2 network overlay network
encapsulation type: 0x01 VxLAN, 0x02 GRE, 0x03 LISP, 0x07 GENEVE.</p>
</dd>
<dt>tunnelKey:</dt>
<dd>
<p>ID: 892, and enterprise ID 6876 (VMware).</p>
<p>type: variable-length octetarray.</p>
<p>data type semantics: identifier.</p>
<p>description: Key which is used for identifying an individual
traffic flow within a VxLAN (24-bit VNI), GENEVE (24-bit VNI),
GRE (32-bit key), or LISP (24-bit instance ID) tunnel. The
key is encoded in this octetarray as a 3-, 4-, or 8-byte integer
ID in network byte order.</p>
</dd>
<dt>tunnelSourceIPv4Address:</dt>
<dd>
<p>ID: 893, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 32-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: The IPv4 source address in the tunnel IP packet
header.</p>
</dd>
<dt>tunnelDestinationIPv4Address:</dt>
<dd>
<p>ID: 894, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 32-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: The IPv4 destination address in the tunnel IP
packet header.</p>
</dd>
<dt>tunnelProtocolIdentifier:</dt>
<dd>
<p>ID: 895, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 8-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: The value of the protocol number in the tunnel
IP packet header. The protocol number identifies the tunnel IP
packet payload type.</p>
</dd>
<dt>tunnelSourceTransportPort:</dt>
<dd>
<p>ID: 896, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 16-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: The source port identifier in the tunnel transport
header. For the transport protocols UDP, TCP, and SCTP, this is
the source port number given in the respective header.</p>
</dd>
<dt>tunnelDestinationTransportPort:</dt>
<dd>
<p>ID: 897, and enterprise ID 6876 (VMware).</p>
<p>type: unsigned 16-bit integer.</p>
<p>data type semantics: identifier.</p>
<p>description: The destination port identifier in the tunnel
transport header. For the transport protocols UDP, TCP, and SCTP,
this is the destination port number given in the respective header.
</p>
</dd>
</dl>
<p>
Before Open vSwitch 2.5.90, <ref column="other_config"
key="enable-tunnel-sampling"/> was only supported with per-bridge
sampling, and ignored otherwise. Open vSwitch 2.5.90 and later support
<ref column="other_config" key="enable-tunnel-sampling"/> for
per-bridge and per-flow sampling.
</p>
</column>
<column name="other_config" key="virtual_obs_id"
type='{"type": "string"}'>
<p>
A string that accompanies each IPFIX flow record. Its intended use is
for the ``virtual observation ID,'' an identifier of a virtual
observation point that is locally unique in a virtual network. It
describes a location in the virtual network where IP packets can be
observed. The maximum length is 254 bytes. If not specified, the
field is omitted from the IPFIX flow record.
</p>
<p>
The following enterprise entity reports the specified virtual
observation ID:
</p>
<dl>
<dt>virtualObsID:</dt>
<dd>
<p>ID: 898, and enterprise ID 6876 (VMware).</p>
<p>type: variable-length string.</p>
<p>data type semantics: identifier.</p>
<p>description: A virtual observation domain ID that is locally
unique in a virtual network.
</p>
</dd>
</dl>
<p>
This feature was introduced in Open vSwitch 2.5.90.
</p>
</column>
<group title="Per-Bridge Sampling">
<p>
These values affect only per-bridge sampling. See above for a
description of the differences between per-bridge and flow-based
sampling.
</p>
<column name="sampling">
The rate at which packets should be sampled and sent to each target
collector. If not specified, defaults to 400, which means one out of
400 packets, on average, will be sent to each target collector.
</column>
<column name="obs_domain_id">
The IPFIX Observation Domain ID sent in each IPFIX packet. If not
specified, defaults to 0.
</column>
<column name="obs_point_id">
The IPFIX Observation Point ID sent in each IPFIX flow record. If not
specified, defaults to 0.
</column>
<column name="other_config" key="enable-input-sampling"
type='{"type": "boolean"}'>
By default, Open vSwitch samples and reports flows at bridge port input
in IPFIX flow records. Set this column to <code>false</code> to
disable input sampling.
</column>
<column name="other_config" key="enable-output-sampling"
type='{"type": "boolean"}'>
By default, Open vSwitch samples and reports flows at bridge port
output in IPFIX flow records. Set this column to <code>false</code> to
disable output sampling.
</column>
</group>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="Flow_Sample_Collector_Set">
<p>
A set of IPFIX or local sampling collectors of packet samples generated
by OpenFlow <code>sample</code> actions.
</p>
<p>
If the column <code>ipfix</code> contains a reference to a
valid IPFIX entry, samples will be emitted via IPFIX. This mechanism
is known as flow-based IPFIX sampling, as opposed to bridge-based
sampling (see the <ref table="IPFIX"/> table for a description of the
two forms).
</p>
<p>
If the column <code>local_group_id</code> contains an integer and the
running datapath supports local sample emission, packets will be sent
to some local sample collector. Samples will contain the group number
specified by <code>local_group_id</code> which helps identify their
source as well as a 64-bit cookie result from the concatenation of the
observation_domain_id an the observation_point_id in network byte order.
The way the sample is emitted and made available for local collectors
is datapath-specific.
Currently only Linux kernel datapath supports local sampling which is
implemented by sending the packet to the <code>psample</code> netlink
multicast group.
</p>
<p>
Note: both <code>local_group_id</code> and <code>ipfix</code> can be
configured simultaneously.
</p>
<column name="id">
The ID of this collector set, unique among the bridge's
collector sets, to be used as the <code>collector_set_id</code>
in OpenFlow <code>sample</code> actions.
</column>
<column name="bridge">
The bridge into which OpenFlow <code>sample</code> actions can
be added to send packet samples to this set of IPFIX collectors.
</column>
<column name="ipfix">
Configuration of the set of IPFIX collectors to send one flow
record per sampled packet to.
</column>
<column name="local_group_id"
type='{"type": "integer", "minInteger": 0,
"maxInteger": 4294967295}'>
Configuration of the sample group id to be used in local sampling.
</column>
<group title="Common Columns">
The overall purpose of these columns is described under <code>Common
Columns</code> at the beginning of this document.
<column name="external_ids"/>
</group>
</table>
<table name="AutoAttach">
<p>
Auto Attach configuration within a bridge. The IETF Auto-Attach SPBM
draft standard describes a compact method of using IEEE 802.1AB Link
Layer Discovery Protocol (LLDP) together with a IEEE 802.1aq Shortest
Path Bridging (SPB) network to automatically attach network devices
to individual services in a SPB network. The intent here is to allow
network applications and devices using OVS to be able to easily take
advantage of features offered by industry standard SPB networks.
</p>
<p>
Auto Attach (AA) uses LLDP to communicate between a directly connected
Auto Attach Client (AAC) and Auto Attach Server (AAS). The LLDP protocol
is extended to add two new Type-Length-Value tuples (TLVs). The first
new TLV supports the ongoing discovery of directly connected AA
correspondents. Auto Attach operates by regularly transmitting AA
discovery TLVs between the AA client and AA server. By exchanging these
discovery messages, both the AAC and AAS learn the system name and
system description of their peer. In the OVS context, OVS operates as
the AA client and the AA server resides on a switch at the edge of the
SPB network.
</p>
<p>
Once AA discovery has been completed the AAC then uses the second new TLV
to deliver identifier mappings from the AAC to the AAS. A primary feature
of Auto Attach is to facilitate the mapping of VLANs defined outside the
SPB network onto service ids (ISIDs) defined within the SPM network. By
doing so individual external VLANs can be mapped onto specific SPB
network services. These VLAN id to ISID mappings can be configured and
managed locally using new options added to the ovs-vsctl command.
</p>
<p>
The Auto Attach OVS feature does not provide a full implementation of
the LLDP protocol. Support for the mandatory TLVs as defined by the LLDP
standard and support for the AA TLV extensions is provided. LLDP
protocol support in OVS can be enabled or disabled on a port by port
basis. LLDP support is disabled by default.
</p>
<column name="system_name">
The system_name string is exported in LLDP messages. It should uniquely
identify the bridge in the network.
</column>
<column name="system_description">
The system_description string is exported in LLDP messages. It should
describe the type of software and hardware.
</column>
<column name="mappings">
A mapping from SPB network Individual Service Identifier (ISID) to VLAN
id.
</column>
</table>
</database>
|