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 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512
|
2025-09-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #446 from kronosnet/stable1-proposed
stable1-proposed
2025-09-24 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: deprecate SCTP support
2025-09-23 Fabio M. Di Nitto <fdinitto@redhat.com>
man: align doxyxml with libqb for solaris support
2025-09-23 Christine Caulfield <ccaulfie@redhat.com>
Update README to explain libqb dependancy
Several test suite fixes
Increase the sleep in pmtud tests
Increase timeout in fun_onwire_upgrade
Try and make sure IPv6 test addresses are always valid
Make knet work on OpenIndiana (Solaris)
author: various
2025-09-06 Fabio M. Di Nitto <fdinitto@redhat.com>
libnozzle - Fix FreeBSD nozzle_down (take 2)
also, FreeBSD 13+ now allow tap0 to be delete.. if only the kernel
interface was stable....
2025-09-04 Chrissie Caulfield <ccaulfie@redhat.com>
libnozzle - Fix FreeBSD nozzle_down (#458)
For reasons I am unlikely ever to understand, it's necessary to call
SIOCGIFFLAGS on a tap interface after SIOCIFDESTROY for the device to
actually be removed.
...so do that
2025-08-30 David Hanisch <hanisch@strato.de>
fix wrong tests
Api calls fail due to NULL knet handle, but intention is to fail
due to wrong arguments.
2025-08-29 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: bump soname to reflect new symbol
2025-08-29 David Hanisch <hanisch@strato.de>
Allow to configure a dscp value for KNET_LINK_FLAG_TRAFFICHIPRIO
Currently IPTOS_LOWDELAY is used for IP_TOS. A setup may require to
set a certain dscp value to prioritize the IP traffic.
2025-08-28 Christine Caulfield <ccaulfie@redhat.com>
Suppress some sudden coverity errors
2025-08-25 Dmitry Belyavskiy <beldmit@gmail.com>
Some error checking for OpenSSL functions
2025-08-12 Fabio M. Di Nitto <fdinitto@redhat.com>
Fix wrong pointer in _handle_recv_from_links_thread()
Resolves: https://github.com/kronosnet/kronosnet/issues/449
2025-06-23 Christine Caulfield <ccaulfie@redhat.com>
nozzle: Fix potential thread race in nozzle_close()
2025-06-16 google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Create and refine STYLE_GUIDE.md for project contributions
This commit introduces STYLE_GUIDE.md, a comprehensive document
outlining coding standards and best practices for the Kronosnet project.
This guide aims to ensure consistency and clarity in contributions.
The following key areas are covered:
1. **C Language Style**:
* Minimum Dialect: C99.
* Indentation: Tabs (not spaces).
* Curly Braces:
* Control flow (if, for, while): Opening brace on the same line.
* Function definitions: Opening brace on the next line.
* Always use braces, even for single-line blocks.
* Variable Declaration: At the beginning of their scope.
* Line Length: Preferred maximum of 120 characters, flexible for
readability (e.g., nested structs).
2. **Naming Conventions**:
* General: `snake_case` for internal variables and function names.
* Public API Elements:
* `knet_` or `nozzle_` prefix for functions, structs, typedefs
(e.g., `knet_get_host_list`, `nozzle_device_config`).
* `KNET_` or `NOZZLE_` prefix for enums and defines (macros),
followed by uppercase `SNAKE_CASE` (e.g., `KNET_MAX_CLIENTS`,
`NOZZLE_BUFFER_SIZE_DEFAULT`).
* Internal Elements:
* Names should be descriptive, indicating purpose and subsystem.
* Functions shared across multiple threads: Prefix with `_`
(e.g., `_shared_data_access`).
3. **Comments**:
* `//` for single-line, `/* ... */` for multi-line.
* Emphasizes clear and concise comments for non-obvious code.
4. **Best Practices**:
* API Changes Require Tests: Any internal or external API
modification must be accompanied by corresponding tests in the
test suite.
5. **Copyright**:
* A copyright notice specific to `STYLE_GUIDE.md` (Year 2025,
Author: Jules <AI Agent>) has been included and formatted as
plain Markdown text.
This initial version of the style guide addresses issue #22 and incorporates
iterative feedback on formatting, content, and specificity. A trivial
change (extra newline at EOF) was included in this commit to facilitate
this comprehensive message.
2025-04-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #438 from kronosnet/stable1-proposed
stable1-proposed
2025-04-22 Fabio M. Di Nitto <fdinitto@redhat.com>
Update copyright
udp: lower log levels triggered for each incoming packets
2025-03-20 Christine Caulfield <ccaulfie@redhat.com>
compress: use lzo1x_decompress_safe
lzo1x_decompress() can SEGV if bad data is passed to it.
lzo1x_decompress_safe() is slower but ... safer.
Issue #435
2024-12-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #429 from kronosnet/stable1-proposed
stable1 proposed
Convert time_t to unsigned long long before formatting (#431)
Conventionally it's signed long under the GNU C library, which is 32
bits on 32-bit architectures, but Glibc provides the __TIME_BITS==64
option, which makes it signed long long instead (64 bits) and makes no
difference on 64-bit architectures [1]. Since the ping_interval and
pong_timeout members of struct knet_link are unsigned, we can make
this conversion safe by rejecting negative values as well (besides
zero). In the end this enables using the uniform %llu conversion
specifier across all supported architectures. This got exposed by
Debian recently transitioning to 64-bit time_t [2].
[1] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign
[2] https://wiki.debian.org/ReleaseGoals/64bit-time
Co-authored-by: Ferenc Wágner <wferi@debian.org>
2024-12-02 Christine Caulfield <ccaulfie@redhat.com>
Check packets come from the correct interface https://github.com/corosync/corosync/issues/750
2024-06-06 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #423 from kronosnet/stable1-proposed
Stable1 proposed
2024-05-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] update to latest doxyxml from libqb
Fix FORTIFY source detection
Problem spotted on FreeBSD 15 where gcc is currently broken.
The detection can see that the flags are not working, but
still propagating the last attempted value into the build,
causing a failure.
2024-01-10 Fabio M. Di Nitto <fdinitto@redhat.com>
Update Copyright year
2023-11-27 cglosner <cglosner@gmail.com>
libknet/tests: fix potential overflow with sprintf
2023-11-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] update to latest doxyxml from libqb
Resolves: https://github.com/kronosnet/kronosnet/issues/422
2023-10-16 Fabio M. Di Nitto <fdinitto@redhat.com>
links: compare apples with apples
spotted by build on armhf
2023-09-27 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #418 from kronosnet/stable1-proposed
stable1 proposed
2023-09-26 Fabio M. Di Nitto <fdinitto@redhat.com>
links: fix conversion
Merge pull request #413 from kronosnet/stable1-proposed
stable1 proposed
2023-09-25 Fabio M. Di Nitto <fdinitto@redhat.com>
rx: allow links to be active faster
scenario: node A and node B
node A completes ping/pong link up process faster than B
node A starts to send data to node B
old behavior: node B would unconditionally discard data packets
new behavior:
node B will check internal link status to see if ping/pong link up
process is in progress.
if the link is sending pings and receiving pongs, it´s safe to assume
that the link will go up (since we are also receiving data from the
node A). node B will speed up link up and accept data immediately.
This should address a overall init race condition when nodes startup
are slighly off by enough milliseconds to cause 2 memeberships to form
and see fencing fireworks.
links: fix ping interval and pong timeout value checking
warn if ping interval is lower than thread timer resolution as
it has no effects
error if ping timeout is lower than thread timer resolution as
it causes links to be highly unstable
2023-09-18 Fabio M. Di Nitto <fdinitto@redhat.com>
nozzle: don´t leak tun/tap interfaces in test suite
the need_tun() test check to verify that the kernel module for tun/tap
is loaded, was opening a generic /dev/tun (or /dev/tap) to verify
the presence of the kernel module.
On linux, closing the fd to the tap/tun device is enough to destroy
the device.
On BSD the device is set to DOWN on closing the fd, but it´s not
destroyed.
Stop leaking by gathering ifr ioctl info from the generic interface
created by BSD and pass it to the ioctlfd to destroy.
2023-08-14 Jan Friesse <jfriesse@redhat.com>
[crypto] Try crypt and decrypt on crypto_init
Crypt (or decrypt) operation might fail in some cases even when
initialization succeeded. This problem is known to happen when
FIPS mode is enabled and combination of openssl/aes192 and md5 is used.
This was not caught during crypto_init so knet user (corosync) was
not aware of non-working crypto so it couldn't handle it - and couldn't
send/receive any packets.
Solution is to try crypt, decrypt and compare of result buffer right
after new crypto_instance is created. If any of these operation fails,
whole crypto_init fails, crypto_instance is freed and knet user is
notified by receiving non-zero return code.
2023-07-10 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #404 from kronosnet/stable1-proposed
stable1-proposed
build: disable fortify check for test binaries
build: autodetect fortify source level automatically
build: annocheck disable cf-protection
currently reporting some MAYBE false positives in fedora
2023-06-07 Jan Friesse <jfriesse@redhat.com>
[spec] Migrate to SPDX license
Both Fedora and openSUSE now recommends to use SPDX shortname format for
License.
2023-05-24 Christine Caulfield <ccaulfie@redhat.com>
nozzle: tests: Fix 'set_down' test on FreeBSD-devel
The new FreeBSD adds a LOWER_UP flag to interfaces that
indicates whether the driver is signalling L1 up. So we
need to exclude that from our grep when checking
the higher-level interface status.
2023-04-25 Jan Friesse <jfriesse@redhat.com>
[tx] Remove expensive memsets
Memset of dst_host_ids is relatively expensive because structure is
large (128KiB) and it is not really needed because it is always fully
set later.
2023-04-03 Christine Caulfield <ccaulfie@redhat.com>
log: Add a TRACE log level
This also removes the #ifdef DEBUG' conditionals
so that those messages can be enabled without a rebuild.
backport of #403
2023-01-04 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #381 from kronosnet/stable1-proposed
Stable1 proposed
2023-01-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Update copyright
[man] update to latest doxyxml from libqb
2022-12-14 Christine Caulfield <ccaulfie@redhat.com>
udp: Move EPERM to be alongside EMSGSIZE in tx error handler
EPERM can be returned (tested Linux 5.19 & FreeBSD 13) when a packet is
transmitted that is too large for the i/f MTU or an iptables
transmit rule - so it makes sense to treat it like EMSGSIZE
and trigger a pMTU run
2022-11-02 Christine Caulfield <ccaulfie@redhat.com>
pmtud: Reset/restart pmtud when a node joins
If a new node joins with a 'black hole' that sets the effective
MTU to be less than the hardware MTU then it will fail to join.
So this patch restarts the pMTU processes each time a new node
joins so it has a chance to declare it's real MTU in time.
2022-10-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Fix update copyright script to better deal with upper/lower cases
2022-08-22 Fabio M. Di Nitto <fdinitto@redhat.com>
Update link to google drive
2022-08-22 Ferenc Wágner <wferi@debian.org>
m4/ax_pthread.m4: update to latest upstream version (serial 31)
To avoid the warning: $as_echo is obsolete message.
2022-07-27 Jan Friesse <jfriesse@redhat.com>
configure: Conditionalize AC_PROG_CC_C99
Autoconf 2.70 made AC_PROG_CC_C99 deprecated because
AC_PROG_CC is performing same set of tests and sets same
variables.
To remove warning, conditionalize AC_PROG_CC_C99.
2022-07-22 Chrissie Caulfield <ccaulfie@redhat.com>
admin: Fix a couple of small things (#384)
Spotted by the internal CI
2022-06-09 Mingli Yu <mingli.yu@windriver.com>
links.c: Fix build with gcc-12
Fix the build failure with gcc-12 when -Og pass to CFLAGS.
| /build/tmp-glibc/work/corei7-64-wrs-linux/kronosnet/1.22-r0/recipe-sysroot/usr/include/bits/string_fortified.h:59:10: error: 'link' may be used uninitialized [-Werror=maybe-uninitialized]
| 59 | return __builtin___memset_chk (__dest, __ch, __len,
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| 60 | __glibc_objsize0 (__dest));
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~
| ../../git/libknet/links.c: In function 'knet_link_set_config':
| ../../git/libknet/links.c:108:27: note: 'link' was declared here
| 108 | struct knet_link *link;
| | ^~~~
| cc1: all warnings being treated as errors
2022-06-02 Ferenc Wágner <wferi@debian.org>
Fix comment typo: Minumum -> Minimum
Fix comment typo: compresion -> compression
2022-05-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #370 from kronosnet/stable1-proposed
stable1 proposed
2022-04-29 Chrissie Caulfield <ccaulfie@redhat.com>
[doc] To Do list moved to projects.clusterlabs.org (#379)
2022-04-01 Jan Friesse <jfriesse@redhat.com>
[logging] Fix Initializing typo
2022-03-23 Fabio M. Di Nitto <fdinitto@redhat.com>
[tx] fix epoll event size to cope with extra event on send to link
spotted by -Werror=stringop-overflow= new gcc feature
2022-03-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] deal with new annocheck symlink checks
command line has changed between f35 and rawhide, so go for
a neutral solution
2022-03-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] update memcheck exceptions
2022-03-10 Christine Caulfield <ccaulfie@redhat.com>
tests: move all tests to new infrastructure
and update copyright years
2021-12-14 Christine Caulfield <ccaulfie@redhat.com>
[UDP] Check for EHOSTUNREACH
EHOSTUNREACH seems to have been missed from the list of errors
checked at transmit time, so add it. Without this,
knet can spin under some conditions. (see issue #373)
2021-11-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix flag detections for gcc
Resolves: https://github.com/kronosnet/kronosnet/issues/371
2021-11-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[doc] update links to mailing lists and drop obsolete test suite
2021-11-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #360 from kronosnet/stable1-proposed
Stable1 proposed
2021-11-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[logging] slow down knet a bit when log socket is busy
[crypto] improve logging when failing to decrypt packets
2021-11-08 Fabio M. Di Nitto <fdinitto@redhat.com>
[udp] use ICMP error messages to trigger faster link down detection
this solves a possible race condition when:
- node1 is running
- node2 very fast
- node1 does NOT have enough time to detect that node2 has gone
and reset the local seq numbers / buffers
- node1 will start rejecting valid packets from node2
There is still a potential minor race condition where app
can restart so fast that kernel / network don't have time
to generate an ICMP error. This will be addressed using
instance id in onwire v2 protocol, as suggested by Jan F.
[host] fix dst_seq_num initialization race condition
There is a potential race condition where the sender
is overloaded, sending data packets before pings
can kick in and set the correct dst_seq_num.
if this node is starting up (dst_seq_num = 0),
it can start rejecing valid packets and get stuck.
Set the dst_seq_num to the first seen packet and
use that as reference instead.
2021-10-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] fix nss crypto buffer boundaries usage
this issue was detected by temporary increasing knet header size
for debugging purposes, and was generating incorrect crypto data
by PK11_CipherOp because the new size was overriding the old data.
this issue does not affect onwire_v1 or stable1 as it is.
[build] fix debug build vs annocheck parameters
FORTIFY_SOURCE requires -O1 or higher
2021-10-19 Khem Raj <raj.khem@gmail.com>
libknet/tests: Correct include path for poll.h
Fixes
/usr/include/sys/poll.h:1:2: error: redirec
ting incorrect #include <sys/poll.h> to <poll.h> [-Werror,-W#warnings]
| #warning redirecting incorrect #include <sys/poll.h> to <poll.h>
2021-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] temporary disable annobin lto check for centos8 failure
adding -flto as suggested, triggers other annobin internal failures on
centos8.
2021-09-17 Christine Caulfield <ccaulfie@redhat.com>
[build] Add annobin build/check support
the annobin check is enabled only if all compiler flags, linker flags
and annocheck binary are available.
the build will use as many of the hardening options required to pass
the annocheck regardless.
the check is performed / enabled only with gcc. clang currently suffers
from some limitations to automatically detect the annobin plugin, that
would increase drastacally the complexity of the build system
unnecessarely.
implementation based on:
- https://bugzilla.redhat.com/show_bug.cgi?id=1961686
- https://developers.redhat.com/blog/2019/02/04/annocheck-examining-the-contents-of-binary-files#
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/developing_c_and_cpp_applications_in_rhel_8/annobin_toolsets
Original idea by Christine Caulfield <ccaulfie@redhat.com>
CentOS Stream CI insists on this but it's generally a 'good thing'
2021-09-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[nozzle] fix tests on machines that don´t have bash
2021-09-16 Ferenc Wágner <wferi@debian.org>
nozzle: preserve test result across cleanup
nozzle: skip tests if TUN support is not available
2021-08-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #344 from kronosnet/stable1-proposed
stable1-proposed
2021-08-26 Christine Caulfield <ccaulfie@redhat.com>
test: Use a pipe to synchronise wait_for_xxx events
The condition variable thing clearly not working for us.
2021-08-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] make execution of functional testing optionals
2021-08-26 Christine Caulfield <ccaulfie@redhat.com>
send: Fix send_sync()
send_sync needs a filter to work - enforce this
Clear out some arrays that could have random values
2021-08-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[transports] remove unused internal ACL API
with the new ACL code, this internal API is no longer used
[acl] major internal rework
ACL internal management was somewhat broken and didn´t really
do what was advertised for dynamic links.
- fix ACL to be truely per host/link as public API advertise
- move ACL checking when host/link are known
- add extensive tests
- fix various minor bugs that went undetected for a bit
- enable access list testings on more tests
[acl] make knet_link_add_acl a wrapper to knet_link_insert_acl
remove lots of duplicated code
2021-08-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] use correct seq_num to reclaim buffers
we cannot use incoming packet seq_num to reclaim buffers as that causes
havoc.
use latest recorded (highest) packet number instead that follows the
reclaiming window
[rx] increase defrag buffers to better deal with network jitter
2021-07-02 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] update doxygen2man to latest from libqb
2021-06-30 Christine Caulfield <ccaulfie@redhat.com>
[doc] Add comments to structure members
Removes doxygen warnings at build time
Needs the latest doxygen2man to actually print anything in the
man pages.
Signed-Off-By: Christine Caulfield <ccaulfie@redhat.com>
2021-06-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[link] don´t allow mix of dynamic and static links
with same source address/port.
The configuration doesn´t make sense in itself and confuses ACL.
[link] use previously cached value as link info might not be accurate
[link] don´t leak resources if link configuration fails
2021-06-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] suppress more libnss3 errors
[spec] cleanup some krosnonetd leftovers
2021-06-25 Christine Caulfield <ccaulfie@redhat.com>
Add comment about log_fd in knet_handle_new()
Sanitise sockaddr_storage structs coming in the API
Before we used to copy the whole sockaddr_storage from
the API into our structs. This meant that any junk left
at the end by the caller got into them and could
cause trouble with some comparisons.
This patch zeros out the extra bits of the sockaddr_storage
that are not valid.
2021-06-23 Fabio M. Di Nitto <fdinitto@redhat.com>
Update copyright around
manual backport from master/rust-bindings branches
2021-06-13 Chris Walker <cwalker@cray.com>
Require make utility
2021-06-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[tx] minor optimizations to avoid recalculating socksize over and over
2021-06-11 Christine Caulfield <ccaulfie@redhat.com>
send 'correct' sockaddr lengths to socket calls
FreeBSD-devel insists that the length passed into socket calls
matches the expected length of the sockaddr it describes.
So, eg, when passing a sockaddr_in, the length must be sizeof(sockaddr_in)
rather than sizeof(sockaddr_storage) which we were using
Signed-Off-By: Chrissie Caulfield <ccaulfie@redhat.com>
2021-06-03 Jan Friesse <jfriesse@redhat.com>
[docs] IRC channel is now on Libera Chat
2021-05-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[coverity] fix 2 buffer initialization (potential) issues
discovered by latest coverity scan update
2021-04-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #331 from kronosnet/stable1-proposed
stable1-proposed
2021-04-27 Christine Caulfield <ccaulfie@redhat.com>
[nozzle] fix nozzle_up() on FreeBSD
TBH I'm not sure how this ever worked, as we never seemed to call
SIOCIFCREATE, but this also fixes the race when the tests are run -j4
(or higher)
2021-04-26 Christine Caulfield <ccaulfie@redhat.com>
[lib] Don't use -rpath
rpath seems, understandably, to annoy some analysis tools. We
use it to locate the crypto & compression plugins but libknet also needs
to use the plugins from the build-tree when running tests.
A simple way to do this is have the plugin directory as part of the knet
handle then we can override it in the test suite, which already does
'illegal' accesses to some handle fields.
OK, it's not the MOST elegant way of doing this perhaps, but it is
simple and effective.
2021-04-19 Christine Caulfield <ccaulfie@redhat.com>
[nozzle] Remove inet_ntoa() call
inet_ntoa() is deprecated in favour of inet_ntop() (see man page for
inet_ntop()).
2021-04-14 Fabio M. Di Nitto <fdinitto@redhat.com>
[handle] validate handle in public API
- add _is_valid_handle() function to verify if a handle
is known, via qb_list*
- change all (and only) public API to use _is_valid_handle().
- move library config bits to lib_config.c and keep
header bit in internal.h.
this is more of a commodity need to simplify
accessability of above function to the test suite
at link time.
2021-04-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] Update copyright
[docs] Update README for BSD section
[openssl] port knet top openssl3.0-alpha13
openssl 3.0 is not GA yet and there are still API changes around.
it´s currently only available in Debian experimental and while
not critical for knet, we continue to keep knet updated and be ready
for 3.0 GA.
2021-03-20 Christine Caulfield <ccaulfie@redhat.com>
Add some more uses for event-based tests
This gets time for the whole test suite (on my machine) down
from 10m25 to 5.56 (make check) and
from >120m* to 55m29 (make check-memcheck)
* I accidentally hit ^C on these tests after 2 hours so it's
probably much longer
tests: use callbacks to wait for nodes
Rather than just wait for a arbitrary amount of time for
nodes to come online while testing, use the knet callback
mechanism. This should not only save some time in the running
of the tests, but also make them less susceptible to slowness
on the CI machines.
2021-03-01 Christine Caulfield <ccaulfie@redhat.com>
tests: Fix some random CI failures.
2021-02-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Drop travis support
2020-12-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] hide another internal libnss non recurring memory leak
2020-10-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #319 from kronosnet/stable1-proposed
stable1-proposed
2020-10-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add more exceptions to deal with Ubuntu latest rebuilds (clang counterpart)
2020-10-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add more exceptions to deal with Ubuntu latest rebuilds
2020-09-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[cleanup] remove unused infrastructure to send HOSTINFO messages
those messages are unused in 1.x and if necessary they will be
reintroduced in 2.x
2020-09-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[sctp] check and warn about internal fd tracker
fixes new coverity scan error
2020-09-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Revert "[heartbeat] don´t send ping if transport is not connected"
This reverts commit 2b73aff21f6341cfd00022694c47ff9b47e17a0e.
The same code already exists at the top of the function
[heartbeat] don´t send ping if transport is not connected
this could cause socket buffers to fill up with stale junk and
generate unecessary errors.
2020-08-31 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] hide internal nss memory leak (non-recurring)
2020-08-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[rx] fix data stats on RX to match TX model
2020-08-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[rx] fix per link stats for data packets
and cleanup all netutils common functions
2020-08-17 kronosnet CI bot <32407685+knet-ci-bot@users.noreply.github.com>
Merge pull request #314 from kronosnet/stable1-proposed
stable1-proposed
2020-08-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[threads] make sure to initialize events
spotted on fedora rawhide + valgrind
[cleanup] drop no longer used poc-code
[cleanup] kill all unsupported kronosnetd code
corosync can provide similar capabilities right now
2020-08-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[cleanup] Move public APIs calls to more suitable location
2020-08-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] add support for openssl 3.0
2020-07-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #312 from kronosnet/stable1-proposed
Stable1 proposed
f6b11c05112c520ccda3b28e7676acbc6b8a7938
[man] fix type comparison
Merge pull request #305 from kronosnet/stable1-proposed
Stable1 proposed
2020-07-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] more ignore list of nss internal stuff
[tests] ignore openssl errors triggered when building with clang
[tests] fix variable increment logic (detected by clang)
2020-07-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Update copyright
[crypto] add support for live reconfiguration
[build] update valgrind memcheck exception file
[tests] sets defaults for coverity scan check to match CI
[tests] add basic framework to create, join and stop many nodes
all nodes will be using loopback interface (lo) at different
port offset.
[tests] use link_get_enable instead of get_status
[tests] remove unnecessary shutdown locking
the test should be in charge not to shutdown too much at once
2020-07-09 Jan Friesse <jfriesse@redhat.com>
[build] Use git-version-gen during specfile build
Instead of copying parts of git-version-gen for spec target use
git-version-gen directly and parse final version into components
(rpmver, alphatag, numcomm) and use them.
Main reason is to simplify code a bit (sed scripts are a bit repetitive
tho), reuse the code and also allow building of RPM from dist tarball
generated from non-tagged commit or dirty git (not very useful).
The code relies on fact, that hyphen is never used in tagged release
name.
[build] Fix fallback handling in git-version-gen
When fallback is defined and gitarchive file doesn't exists, use fallback
rather than UNKNOWN.
2020-07-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] sync doxygen2man from libqb master
this change is not required in master branch
2020-06-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[openssl] allow use of deprecated HMAC interface with openssl 3.0
Port will be done after rekey feature is complete (too much code conflict atm)
2020-05-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] strip extra symbol information generated by new nm
spotted on debian experimental
2020-04-29 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #304 from kronosnet/am_conditional
Always define the Automake conditional
2020-04-29 Ferenc Wágner <wferi@debian.org>
Always define the Automake conditional
Otherwise ./configure --disable-man fails with
configure: error: conditional "BUILD_DOXYXML" was never defined.
Usually this means the macro was only invoked conditionally.
2020-04-23 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #294 from kronosnet/stable1-proposed
stable1 proposed
2020-04-22 Fabio M. Di Nitto <fdinitto@redhat.com>
[transport] notify transports that a link is down
[sctp] fix ifup/ifdown handling for connected sockets
[netutils] move sockaddr_len definition where it belongs
[links] fix spacing
[sctp] make sure outgoing connections are bound to a specific IP address
https://github.com/kronosnet/kronosnet/issues/300
if 2 or more nodes in a knet network have a duplicate IP address,
for example a virtbr interface with default config, sctp
will fail to build the associations and abort all connections.
2020-03-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] use libqb version of doxygen2man when available
and add pkg_check_var compat macro
2020-03-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] make sure to use correct libqb include files across
2020-03-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[lists] add missing build CFLAGS for test suite
[lists] drop internal implementation and use libqb one
2020-03-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[lists] fix build with recent gcc changes
2020-03-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] fix return code from wait_for_packet
2020-03-04 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #288 from kronosnet/stable1-proposed
Stable1 proposed
2020-02-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[stats] allow knet_link_get_status to operate in readlock context
- add per link stats mutex
- use per link stats mutex across the board
note: some threads need to lock for a slightly longer period of time than
strictly necessary to avoid reverse-order locking with other mutexes.
[stats] allow knet_handle_get_stats to operate in a readlock context
- add global stat mutex lock to protect stats updates
- use global stat mutex lock across all the threads
- fix up some minor bugs:
- update RX crypto stats only when crypto is enabled
- update compress and crypto stats in a consistent fashion
[rx] kill unused variable
[tests] rework test suite link port allocation
Logic is to try to configure a link with port X and if it fails, try the next
port. This avoids port collisions between services and knet test suite.
Please note that the implementation in test-common.c is NOT super clean.
There is still some redundant code in there that is left on purpose.
There is another branch, not yet merged, that implements functional testing
framework that does heavy use of those functions.
We will clean test-common.c as we port the functional testing branch and make
it ready for merging.
For now, this is good enough to have a more stable test suite.
[transports] use SO_REUSEADDR only for sctp
2020-02-26 Jan Friesse <jfriesse@redhat.com>
[man] Enhance prio description of POLICY_PASSIVE
Some users found description of POLICY_PASSIVE priority confusing
(probably because "priority" word is too overloaded) so add
some redundancy to make description unambiguous.
2020-02-21 Christine Caulfield <ccaulfie@redhat.com>
man: Change strcat to strncat
Oddly, covscan doesn't compain about the use of strcat, but
I'm going to pre-empt it, just in case it decides to.
man: Fix covscan reports in doxyxml.c
This fixes most of the remaining covscan errors in doxyxml.c.
The ones that remain are caused by malloced structures being
stored in qb_hashtable_maps.
These still cause unfreed memory, because the contents of the maps
are never explictly freed, but as they are used until the very end of
the program (when the OS will free everything) I'm dubious as to
whether it's worth doing it in the code - or whether covscan will
work out what's going on anyway.
2020-01-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #267 from kronosnet/stable1-proposed
stable1 proposed
[global] Update copyright across the board
[sctp] major surgery to use only SCTP events to determine socket status
- drop concept of on_connected_epoll to determine if socket is ready or not
- provide much better debugging output at all levels
- incorporate fix from Xin Long <lxin@redhat.com> to gather socket status
at the right time
- deal with a recent kernel change on SCTP socket that broke knet (from rhel7):
[net] sctp: allow delivering notifications after receiving SHUTDOWN
[rx] use defines to determine RX data types vs random numbers
also extend a bit to make ready for SCTP extra return codes
2020-01-31 Christine Caulfield <ccaulfie@redhat.com>
[tx] Don't Clear out msghdr for all transports.
When sending a message to multiple links, if one of those links
is not connection-oriented then msg_name & msg_namelen would be cleared,
thus breaking the send to any subsequent non-connection-oriented links.
So now, if we need to clear out msg_name & msg_namelen, we take a copy of the
msghdr and edit that instead,
[rx] Don't return 512 EOF messages from _recvmmsg
If recvmsg() returns 0 for EOF then it's going to do so
until the error is rectified or read with getsockopt(). But
the _recvmmsg() wrapper keeps reading until the vector is full
thus returning a block of 512 EOF messages all of which the caller
has to plough through.
This patch causes _recvmmsg() to return as soon as it has got
the first EOF so the the caller can deal with it in good time
and not spin looking at the same thing over and over again.
I've also fixed a couple of typos in related comments
2020-01-31 Fabio M. Di Nitto <fdinitto@redhat.com>
[rx] send reply packets only when transport is connected
2020-01-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[rx] unify latency values to a capped value to link precision
keep the patch simple to avoid API/ABI breakage for now for easy backporting
[latency] fix incorrect math that could lead to bad latency calculation
Also, document a bit better how latency is calculated
2020-01-30 Christine Caulfield <ccaulfie@redhat.com>
[udp] Better fix for -ENETUNREACH
This fix for the ENETUNREACH problem works better than the last one
in that it also works with Linux kernels > 5.0.0 (which return
-ENETUNREACH) if an interfaces is brought down, and also on FreeBSD
which returns ENETDOWN.
2020-01-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[udp] simplify code (same logic)
2020-01-24 Christine Caulfield <ccaulfie@redhat.com>
[udp] don't make socket spin if a network I/F is down
UDP treats ENETUNREACH as a temporary error and just retries,
but this causes the TX thread to spin just doing sendto() therefore
blocking all other traffic.
(To reproduce this try starting corosync with 2 links configured in
corosync.conf but only one of them configured to the 'right' address
- it will spin in a tight loop and need to be killed with -9)
SCTP does not seem to suffer from this.
2020-01-22 Fabio M. Di Nitto <fdinitto@redhat.com>
[nozzle] use interface name size consistently and drop strncpy in favour of memmove
[host] use KNET_MAX_HOST_LEN consistently
detected by gcc10
2019-11-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] mark array as static
fixes an odd segfault when running the test on ppc when built with clang
2019-11-04 wferi <wferi@debian.org>
[handle] fix typo in error log message
2019-10-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[handle] make sure to unlock config handle on failure
[RX] silence defrag buffer expiration debug error
when using active-active links, it is simply too noisy and
doesn't provide very useful information.
[TX] discard too big packets when reading from socketpairs
[RX] handle short write to the application properly
this change affects only applications that are not using knet
generated socketpairs to deliver/receive data to/from knet.
If an application uses a fd that is not SOCK_SEQPACKET (basically
streaming), we have to handle short writes accordingly, and knet
will continue delivering as long as there is progress.
The application is responsible to verify that the data packet
is complete as the delivery is not guaranteed to be complete.
The application can either embed the size of the packet in their
data structure or use the socket error notification callback
that will be invoked in case of errors or 0 data delivery.
[RX] Discard incoming packets if knet cannot reply back.
2019-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix openssl version detection when not using pkg-config
2019-10-18 Ferenc Wágner <wferi@debian.org>
[test] append newline to knet_send timeout message
2019-10-16 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #259 from kronosnet/stable1-proposed
Stable1 proposed
[test] add packet verification option to knet_bench
2019-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] invalidate MTU for a link if the value is lower than minimum
Under heavy network load and packet loss, calculated MTU can be
too small. In that case we need to invalidate the link mtu,
that would remove the link from the rotation (and traffic) and
would give PMTUd time to get the right MTU in the next round.
[test] add ability to knet_bench to specify a fixed packet size for perf test
[rx] copy data into the defrag buffer only if we know the size of the frame
[host] fix defrag buffers reclaim logic
The problem:
- let's assume a 2 nodes (A and B) cluster setup
- node A sends fragmented packets to node B and there is
packet loss on the network.
- node B receives all those fragments and attempts to
reassemble them.
- node A sends packet seq_num X in Y fragments.
- node B receives only part of the fragments and stores
them in a defrag buf.
- packet loss stops.
- node A continues to send packets and a seq_num
roll-over takes place.
- node A sends a new packet seq_num X in Y fragments.
- node B gets confused here because the parts of the old
packet seq_num X are still stored and the buffer
has not been reclaimed.
- node B continues to rebuild packet seq_num X with
old stale data and new data from after the roll-over.
- node B completes reassembling the packet and delivers
junk to the application.
The solution:
Add a much stronger buffer reclaim logic that will apply
on each received packet and not only when defrag buffers
are needed, as there might be a mix of fragmented and not
fragmented packets in-flight.
The new logic creates a window of N packets that can be
handled at the same time (based on the number of buffers)
and clear everything else.
Fixes https://github.com/kronosnet/kronosnet/issues/261
[host] rename variables to make it easier to read the code
2019-09-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add common function to sleep based on how the test suite is running
Address issue while waiting for host to be up and PMTUd first run.
2019-09-25 Ferenc Wágner <wferi@debian.org>
Fix typo: trasport -> transport
tests: skip the SCTP test if SCTP is not supported by the kernel
For example, module loading is disabled on Debian build daemons.
(In the vein of c5aa1c3343703455b480cef5c173f471e1bb020f.)
2019-09-20 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #246 from kronosnet/stable1-proposed
Stable1 proposed
2019-09-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[links] fix memory corryption of link structure
the index would overflow the buffer and overwrite data in the link
structure. Depending on what was written the cluster could fall
apart in many ways, from crashing, to hung.
Fixes: https://github.com/kronosnet/kronosnet/issues/255
thanks to the proxmox developers and community for reporting the issue
and for all the help reproducing / debugging the problem.
2019-09-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] give PMTUd more time to redetect MTU
Ideal fix would be to use PMTUd callback, but that requires a lot of
extra test infrastructure. For now just workaround the problem.
[tests] fix ip generation boundaries
https://ci.kronosnet.org/job/knet-build-all-voting/1450/knet-build-all-voting=rhel80z-s390x/console
and similar, when pid = 255, the secondary IP would hit 256 that is of course invalid.
2019-09-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[nozzle] fix tapX range on newer FreeBSD
2019-09-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[pmtud] switch to use async version of dstcache update due to locking context (read vs write)
2019-09-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[links] stabilize latency calculation when nodes are not responsive
The following scenario is more of a corner case than normal, but
this change allows to better deal with this situation:
1) 2 nodes cluster (corosync) (node A and node B)
2) kill -stop $(pidof corosync) on node A
3) node B will continue to send ping packets to node A
4) node A is accumulating those ping packets in the kernel network socket
5) wait some seconds and unpause node A
6) node A will start processing the ping packets in the queue
and send pong replies to node B
7) node B will see an extreme increase of latency due
those "obsoleted" ping/pong packets
8) node B, as latency increases, will take longer and longer
to notice that node A is down due to the pong_timeout adjustment
for latency (required for initial cluster spike).
the solution:
1) Use average latency to calculate pong_timeout_adj vs latency_max.
Averate latency will go down again in time, while latency_max is never
reset.
2) RX thread will filter out all pong packets that have higher latency
than currently configure pong_timeout. This barrier should have
been in place even before.
this solution reduces the latency spike on node B to a perfectly
reasonable level and it will all eventually stabilize over time
as latency samples increase and latency will reduce.
Please be aware that using a pong_timeout smaller than latency will
simply mark the link down now.
2019-09-03 Jan Friesse <jfriesse@redhat.com>
[handle] Set thread stack size on create
Musl libc has small stack size for threads. Knet needs ~300KiB (tested
at the time when this patch was created). Glibc seems to use ~8MiB. As a
compromise, 1MiB is used.
[common] Conditionalize RTLD_DI_ORIGIN
RTLD_DI_ORIGIN is used to get absolute path of plugin. It is used only
for logging useful info and not strictly needed, so use it only when it
is defined (only musl is known to author of the patch)
[common] Include correct errno.h
sys/errno.h is system-specific path and errno.h should be used instead.
2019-08-27 Jan Friesse <jfriesse@redhat.com>
[man] Fix priority description of POLICY_PASSIVE
... to match source code.
2019-08-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[sctp] retry locking in case of failure
[tx] clean up channel management code for internal communications
the code is still not in use but it's more clear and doesn't trigger
memory overrun
[nozzle] fix a few coverity errors in the test suite
[tx] drop unnecessary usleep when sending to localhost
[common] make sure string is null terminated
[test] simplify flush log
allocate on stack only once and make sure strings are null terminated
drop useless read loop since log msg are always smaller than PAGE_SIZE
and read are atomic at that level
[nozzle] avoid tons of possible buffer overruns
[PMTUd] do not double unlock global read lock
[coverity] add test targets to run coverity automatically
[compress] do not overrun allocated array for compress modules
[logging] make sure not to overrun buffers by pre-allocating them
[compress] don't leak memory in case of errors during zstd init
[nozzle] don't leak memory on error
[nozzle] fix negative return detected by coverity scan
[sctp] cleanup bugs detected in error paths by coverity scan
[acl] avoid forward null deferencing
[rx] better error report if we can't resolve hostname / port
[common] fix dlopen error handling
[tests] fix knet_bench coverity errors
[sctp] revalidate fd to make coverity scan happy
[handle] make sure that the pmtud buf contains at least knet header size
[rx] align data types
[sctp] free access list only if the socket is valid
[sctp] fix deference after null check
[coverity] add .travis.yml to integrate CI with coverity scan
[compress] fix #if def around BZIP2 testing
[compress] fix a few minor space vs tab and code formatting
2019-08-21 yuan ren <yren@suse.com>
[compress]Default compression level use
1. add test casees for a module without default.Using default
compression level.
2. Discuss with Fabio, invalid compression level not the knet
responsible for, so error logged. But if compress success but
dstLen larger than srcLen, defualt compression level will be
used, because the request level is not effective.
Default compress level use
Discuss with Fabio, invalid compression level not the knet
responsible for, so error logged. But if compress success but
dstLen larger than srcLen, defualt compression level will be
used, because the request level is not effective.
2019-08-21 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #232 from kronosnet/stable1-proposed
stable1-proposed
[build] bump soname to indicate new API call
[PMTUd] add ability to manually override MTU and disable PMTUd
[PMTUd] add dynamic pong timeout when using crypto
problem originally reported by proxmox community, users
observed that under pressure the MTU would flap back and forth
between 2 values due to other node response timeout.
implement a dynamic timeout multiplier when using crypto that
should solve the problem in a more flexible fashion.
When a timeout hits, those new logs will show:
[knet]: [info] host: host: 1 (passive) best link: 0 (pri: 0)
[knet]: [debug] pmtud: Starting PMTUD for host: 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (4) for host 1 link: 0
[knet]: [info] pmtud: PMTUD link change for host: 1 link: 0 from 469 to 65429
[knet]: [debug] pmtud: PMTUD completed for host: 1 link: 0 current link mtu: 65429
[knet]: [info] pmtud: Global data MTU changed to: 65429
[knet]: [debug] pmtud: Starting PMTUD for host: 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (8) for host 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (16) for host 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (32) for host 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (64) for host 1 link: 0
[knet]: [debug] pmtud: PMTUD completed for host: 1 link: 0 current link mtu: 65429
[knet]: [debug] pmtud: Starting PMTUD for host: 1 link: 0
[knet]: [debug] pmtud: Increasing PMTUd response timeout multiplier to (128) for host 1 link: 0
[knet]: [debug] pmtud: PMTUD completed for host: 1 link: 0 current link mtu: 65429
and when the latency reduces and it is safe to be more responsive again:
[knet]: [debug] pmtud: Starting PMTUD for host: 1 link: 0
[knet]: [debug] pmtud: Decreasing PMTUd response timeout multiplier to (64) for host 1 link: 0
[knet]: [debug] pmtud: PMTUD completed for host: 1 link: 0 current link mtu: 65429
....
testing this patch on normal hosts is a bit challenging tho.
Patch was tested by hardcoding a super low timeout here:
diff --git a/libknet/threads_pmtud.c b/libknet/threads_pmtud.c
index 4f0ba0f..5e2b89b 100644
--- a/libknet/threads_pmtud.c
+++ b/libknet/threads_pmtud.c
@@ -261,7 +271,8 @@ retry:
/*
* crypto, under pressure, is a royal PITA
*/
- pong_timeout_adj_tmp = dst_link->pong_timeout_adj * 2;
+ //pong_timeout_adj_tmp = dst_link->pong_timeout_adj * dst_link->pmtud_crypto_timeout_multiplier;
+ pong_timeout_adj_tmp = 30 * dst_link->pmtud_crypto_timeout_multiplier;
} else {
pong_timeout_adj_tmp = dst_link->pong_timeout_adj;
}
and using a long running version of api_knet_send_crypto_test with a short PMTUd setfreq (10 sec).
[PMTUd] rework the whole math to calculate MTU
internal changes:
- drop the concept of sec_header_size that was completely wrong
and unnecessary
- bump crypto API to version 3 due to the above change
- clarify the difference between link->proto_overhead and
link->status->proto_overhead. We cannot rename the status
one as it would also change ABI.
- add onwire.c with documentation on the packet format
and what various len(s) mean in context.
- add 3 new functions to calculate MTUs back and forth
and use them around, hopefully with enough clarification
on why things are done in a given way.
- heavily change thread_pmtud.c to use those new facilities.
- fix major calculation issues when using crypto (non-crypto
was not affected by the problem).
- fix checks around to make sure they match the new math.
- fix padding calculation.
- add functional PMTUd crypto test
this test can take several hours (12+) and should be executed
on a controlled environment since it automatically changes
loopback MTU to run tests.
- fix way the lowest MTU is calculated during a PMTUd run
to avoid spurious double notifications.
- drop redundant checks.
user visible changes:
- Global MTU is now calculated properly when using crypto
and values will be in general bigger than before due
to incorrect padding calculation in the previous implementation.
[PMTUd] fix MTU calculation when using crypto and add docs
[docs] add knet packet layout
[udp] log information about detected kernel MTU
[crypto] fix log information
[threads] allow knet_handle_setfwd to flush socket queues
[tests] ignore libnss errors from OpenSuse Tumbleweed
[tests] ignore libnss errors from OpenSuse 15
2019-06-12 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #223 from kronosnet/stable1-proposed
Stable1 proposed
[global] update copyrights
[global] clarify license entry per file to match README.licence
libraries code: LGPL-2.0+
binaries code and other files: GPL-2.0+
2019-06-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[doc] fix a merge oversight from 541d7faf9068d10e12b4278c35825ce1353db081
[crypto] hide errors generated by openssl 1.1.1c
see also:
https://github.com/kronosnet/kronosnet/issues/226
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930061#12
[crypto] openssl: drop calls to RAND_seed as they don´t really help RNG
See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930061#12 for reference
2019-06-06 yuan ren <yren@suse.com>
[crypto]openssl error strings release
In versions prior to OpenSSL 1.1.0, ERR_free_strings() releases
any resources created by ERR_load_crypto_strings.
2019-06-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[transports] fix incorrect merge when cherry-picking 7033ddab505a0cf3655115fe5037579b7c882a8c
[crypto] fix openssl1.0 initialization code
[PMTUd] extend internal rerun API to allow full PMTUd reset
[crypto] rework knet_handle_crypto external API to be more solid
the API was rather weak and could potentially leave traffic uncrypted
in case of certain, corner case, failures.
this patch is a subset of a bigger rework of the crypto layer that
will in future allow runtime reconfiguration without traffic disruption
of the crypto config.
[crypto] make sure to trigger a PMTUd rerun on each good crypto config change
[PMTUd] create common/shared code to trigger PMTUd rerun
[crypto] make sure to clear all security info on crypto_fini
2019-06-03 Christine Caulfield <ccaulfie@redhat.com>
misc: Fix more covscan warnings
The only serious bug here is in transport_udp.c
(see bottom of patch), the rest are mostly detail.
covscan still reports a lot of errors against doxyxml, most of
which are because it doesn't understand the libqb hashtables.
2019-05-20 Christine Caulfield <ccaulfie@redhat.com>
misc: some coverity fixes
In rough order of seriousness:
1. Fix clock_gettime() in pmtud so that it's always called, as
variable 'clock_now' is always read.
2. Allow space for trailing NUL in libnozzle device names
3. Fix api_nozzle_run_updown_test so it can run out of the build tree
4. Disallow a 0 length prefix in libnozzle
5. Fix potential use of NULL pointer on doxyxml
6. Free 'name' in doxyxml as it's *not* in the map any more
7. Fix dead code in libknet API functions left by code changes
2019-05-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[spec] use ldconfig_scriptlets only when defined
[spec] drop support for init scripts
no rpm distros left that support old fashion init scripts
[spec] fix a bunch of rpmlint errors
[spec] reconciliate fedora spec file into upstream spec file (part 1)
[spec] clean up useless conditionals and defines
fix a couple of minor conditionals in the process
[spec] be more strict about plugins version and architecture depedencies
[spec] use distro conditionals to determine BuildRequires
[spec] fix upstream URLs to point to https and official release repo
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1708616
also to be noted, the Source0: line is different from upstream and Fedora
because upstream can handle tarballs during development
2019-05-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] bump soname to indicate new API calls
[global] update copyright across the board
[man] fix libknet.h for errors detected by newly added test
[tests] improve wait for packet implementation to flush logs during wait
[tests] hide an arm internal memory leak (non-recurring)
[compress] add support for libzstd
2019-05-09 Chrissie Caulfield <ccaulfie@redhat.com>
manpages: Document enums (#206)
And also fix a bug in structure printing that caused it to print the wrong name for a struct.
2019-05-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] remove stray comment
[logging] fix log target of recently added API calls
spotted during sctp testing
[access lists] add more extensive test for links_acl_ip
2019-05-09 Christine Caulfield <ccaulfie@redhat.com>
acl: Fix English in commments
2019-05-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[access lists] add public API tests
[access lists] improve checks on various data types
[access lists] test implicit access lists management for UDP, SCTP and LOOPBACK
[access lists] add external API calls to manage access lists
[access lists] add documentation for enable_access_list
[transports / access list] add internal API to gather which fd to use for access lists given a certain link struct
this is required for the external API that has to be transport indepedent
[access lists] rename ip1/2 to ss1/2 to keep it more generic
[access lists] use arrays to access per-protocol functions
[access lists] use better name for fd_tracker structure
[access lists] confine access lists data structs within the protocol itself
[access lists] add errno around and start using them
[access lists] fix build on BSD and add some include files around
[access lists] make internal API consistent
[links] rename tranport_type to transport to avoid confusion (part 2)
complements be9d053efafc822cabd696914d53b5dfe25fb4fd due to early
cherry-pick of 7033ddab505a0cf3655115fe5037579b7c882a8c
[links] rename transport_type to transport to avoid confusion
[access lists] remove 2 unnecessary wrappers
[access lists] cleanup API a bit
[access lists] more use of generic wrappers and remove duplicate code
[access lists] move access lists structs and data types to links_acl.*
[access lists] move all acl wrappers to links_acl* and split links_acl_ip to their own files
[access lists] fix build on freebsd
don't use malloc.h, obsoleted by stdlib.h
define s6_addr32 that's only available in kernel space
[access lists] add access lists support to sctp
[access lists] enable generic access lists only for protocols that use them
protocols such as SCTP that use their own access list tracking will
need to setup access lists in transport_link_set/clear_config
[access lists] enable access lists for GENERIC_ACL protocols (udp for example)
[access lists] allow knet_bench to enable/disable access lists
[access lists] add tests for default access lists
[access lists] automatically add and remove point to point access lists
those are not used just yet.
[handle] properly initialize fd tracker buffers
[access lists] make code more generic to accept more than IP protocol and start to bind it to each fd
access lists are unique per file descriptor, each fd can have its own protocol and list.
remane around ipcheck* with check* to be more generic.
[transports] add information about the nature of the transport and supported access lists
[acl] add knet_handle_enable_access_lists api call
[acl] move poc-code into libknet dir and rename to links_acl.*
code is not integrated yet and test suite can´t run standalone
2019-05-09 kronosnet CI bot <32407685+knet-ci-bot@users.noreply.github.com>
Merge pull request #211 from kronosnet/stable1-proposed
stable1-proposed
2019-05-02 Fabio M. Di Nitto <fdinitto@redhat.com>
[udp] improve error message decoding from ICMP errors
[udp] use defines vs hardcoded numbers
2019-05-01 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] fix libknet.h for errors detected by newly added test
2019-04-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add man page check to verify doxy header order and definitions
[man] fix knet_host_set_policy parameters order
2019-04-30 Christine Caulfield <ccaulfie@redhat.com>
man: Tidy more man pages
Followup to previous 'tidy'
2019-04-30 Chrissie Caulfield <ccaulfie@redhat.com>
man: Tidy manpages (#215)
* man: Tidy manpages for libnozzle
doxygen works in mysterious ways, adding a blank line before
@brief makes the lines following that much tidier.
So now instead of
nozzle_close nozzle - pointer to the nozzle struct to destroy
we get:
nozzle_close
nozzle - pointer to the nozzle struct to destroy
* doxyxml: Cope with pointers-to-pointers passed as params
Double pointers showed as ' * *name' when they should be ' **name'.
Also tidy STRUCTURES display so that they are not indented too much,
* man: Similar @brief fixes for libknet.h
* doxyxml: Tidy descriptions of functions as parameters
If a complex function pointer was passed as a parameter then doxyxml
tryied to line up all the other parameters with it - making a mess
by having lots of blank space between the type and the name.
Now we enforce a maximum type length (a line-ish) so that shorter
tyopes will line up OK and the really long ones will be left to their
own devices.
2019-04-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] remove libnss 3des support
2019-04-09 Fabian Grünbichler <f.gruenbichler@proxmox.com>
reduce minimum crypto key size to 1024bit
Since the key is used for AES/3DES and HMAC operations only, this is
safe. AES/3DES use keys in the 128- to 256-bit range, HMAC with
MD5/SHA1/SHA2 should use keys with a minimum of 128- to 512-bit (in both
cases, depending on the actual algorithm used).
This reduction also keeps knet compatible with existing Corosync 2.x
keyfiles, which are 1024-bit.
2019-03-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] add another exception to valgrind nss combo
Merge pull request #199 from kronosnet/stable1-proposed
stable1-proposed
2019-03-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] update copyright across the board
2019-03-26 Christine Caulfield <ccaulfie@redhat.com>
link: Check address families on a link always match
We can't create a link with a source address of a different
address family than the destination as all sends will fail.
2019-03-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[transports] fix usage after free of transport info memory
spotted while implementing functional testing for rekey.
when configuring multiple hosts (3+) with 1 link sharing
the same listener, but NOT enabling the link, if the user
attempts to shutdown knet_h, the first call to knet_link_clear_config
will not recognize that the listener is still in use by another
link and will release all resources.
At the time of invoking clear_config on the second link, transport_clear_config
will access already freed memory, or alternatively, a call to
link_enable would cause a crash because the listener does no
longer exist.
[tests] test rpm should match currently installed version of libknet
2019-03-12 Chrissie Caulfield <ccaulfie@redhat.com>
manpages: Document enums (#206)
And also fix a bug in structure printing that caused it to print the wrong name for a struct.
2019-03-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] allow shipping of the test suite
[host] increase log level for currently used links
bug reported on IRC by yuanren
[transport] don´t specify destination address for connection oriented protocols
some implementations of sendto/sendmsg expects dst_addr / msg_name to be
empty for connection oriented protocols such as SCTP (spotted on FreeBSD).
Make sure to clear or not pass those information on connection oriented protocol.
2019-03-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] fix man page build dependency for BSD Make
[tests] add ability to create ipv6 sockets
[man] fix libnozzle man page generation target
[tests] fix knet_bench help text
2019-02-28 Christine Caulfield <ccaulfie@redhat.com>
doxyxml: Don't crash if there's no doxygen stanza for a function
2019-02-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] add test to make sure all generated man pages are being shipped / installed
2019-01-30 kronosnet CI bot <32407685+knet-ci-bot@users.noreply.github.com>
Merge pull request #183 from kronosnet/stable1-proposed
Stable1 proposed
2019-01-24 Jan Pokorný <jpokorny@redhat.com>
[common] fix not reporting a true dlinfo error cause
This was automatically caught with GCC 9
("'%s' directive argument is null").
2019-01-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[libknet] allow better handling of internal threads
while playing around adding some dynamic internal threads, i did
hit a limitation with allocating a dynamic THREAD_MAX value based
on OS availability of certain features.
this patch changes from dynamic to static allocation of threads, that
can always be increased if necessary without breaking anything.
simplify thread numbering and conditionals on OS features
improve debugging of thread status by adding a 2 phase thread registration
process:
- register a thread before starting it with THREAD_REGISTERED before pthread_create
- set a thread status as started with THREAD_STARTED
any failure in between can now be detected in debugging logs.
Note for developers: all threads *MUST* be registered/started before
wait_all_threads_status check in handle.c.
2019-01-04 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] enable all compilers warnings at once
2019-01-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[libknet] expose API version in libknet.h to make it easier for applications to add conditional builds
2018-12-28 Ferenc Wágner <wferi@debian.org>
Skip SCTP event initialization if the protocol is not supported
We may not want to actually use SCTP after all, and if we do, we won't
get to use the uninitialized subscribe struct anyway. Thus aborting
handle initialization is premature here.
Fix nozzle man dates to SOURCE_EPOCH, just like we fix the libknet ones
2018-12-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[rpm] ship libnozzle man pages
2018-12-19 Ferenc Wágner <wferi@debian.org>
Fix typos
Install the nozzle man pages
2018-12-19 kronosnet CI bot <32407685+knet-ci-bot@users.noreply.github.com>
Merge pull request #162 from kronosnet/stable1-proposed
stable1 proposed
2018-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[knet] fix build with older openssl versions
spotted on freebsd-devel
[global] update notes to package maintainers
2018-12-18 Ferenc Wágner <wferi@debian.org>
Tabify
Use the kernel struct size for SCTP event subscription
2018-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[libnozzle] fix variable assignment order
[global] fix copyright across
[libnozzle] add nozzle_get_ips tests and kill nozzle_test
[libnozzle] add nozzle_del_ip tests
[libnozzle] fix del_ip removal of Ipv6 addresses when MTU < 1280
[libnozzle] add nozzle_add_ip tests
[libnozzle] add api_nozzle_run_updown tests
and cleanup lots of craft around related to the old testing method
for the same API
[libnozzle] add internal execute_bin_sh_command test
[libnozzle] cleanup tests Makefile.am
[libnozzle] add nozzle_get_fd test
[libnozzle] add nozzle_get_name_by_handle test
[libnozzle] add nozzle_get_handle_by_name tests
[libnozzle] add nozzle_get_mac / nozzle_set_mac / nozzle_reset_mac tests
[libnozzle] add nozzle_get_mtu / nozzle_set_mtu / nozzle_reset_mtu tests
[libnozzle] move multi nozzle device test to api_nozzle_open
[libnozzle] clean up code in set_up test
[libnozzle] improve set_down test
[libnozzle] add api_nozzle_set_(up|down) tests
[libnozzle] drop unnecessary indirection to call set_down
[libnozzle] drop redundant check
[libnozzle] add api_nozzle_close_test
also, share more code in test-common, fix another BSD build issue
[libnozzle] fix test suite build on BSD
[libnozzle] add api_nozzle_open test
[libnozzle] prepare Makefile.am to explode with API tests
also fix nozzle_test for using global compiler flags
[libnozzle] fix API check paths
[libnozzle] add per-API call test coverage check
[libnozzle] re-instate error checking in nozzle_get_ips
[libnozzle] add comment about BSD ip_add status
[libnozzle] cleanup nozzle_get_ips public API
[libnozzle] fix whitespaces
[global] Update copyright across
[libnozzle] Update copyright
[libnozzle] fix build on BSD
[libnozzle] remove error_string requirement from many API calls and mark them as final
[libtap] move nozzle_run_updown to completed section
[tests] properly check symbols on PPC64
[tests] remove debugging sleep()
[libnozzle] enable libnl3 < 3.3 build workaround
fixes build on opensuse-42
[libnozzle] Use libnl3.0 for ip address management on Linux
BSD will follow next using internal ioctls and drop usage of forking a shell
[libnozzle] whitespace cleanup
[nozzle] expand buffers to deal with strncpy and -Werror=stringop-truncatio
[nozzle] drop duplicated code
[nozzle] enable libnozzle build by default
[nozzle] move man pages to top level dir
[nozzle] fix man page generation
[nozzle] propagate errors all the way
[nozzle] fix build on BSD
[nozzle] nozzle_open and nozzle_close should be stable now
[nozzle] move set up and down to the stable API section
[nozzle] decouple running pre-up.d/up.d/down.d/post-down.d from interface status (part 4)
[nozzle] decouple running pre-up.d/up.d/down.d/post-down.d from interface status (part 3)
[nozzle] decouple running pre-up.d/up.d/down.d/post-down.d from interface status (part 2)
[nozzle] decouple running pre-up.d/up.d/down.d/post-down.d from interface status (part 1)
provide the facility to do it via nozzle_run_updown but delegate the task to
the application.
This has the benefit of much better fine grained control over errors during those
code paths.
[nozzle] move find_ip to internals
[nozzle] move ipv4 broadcast to internals
[nozzle] cleanup mac address functions
[nozzle] move code around to reflect public API and internal functions
cleanup _get_mtu in the process
[nozzle] move code around to reflect completion and drop copy of code from internals.c
[nozzle] rename _check to is_valid_nozzle, make it more useful and fixup error code checking
[nozzle] be more explicit on function naming (part 2)
[nozzle] be more explicit on function naming
[nozzle] start cleaning internal function names
[nozzle] split code around to separate libnozzle and testsuite
[build] split tests, man pages and build dirs
[nozzle] rename lib_mutex to config_mutex
[build] fix build on BSD
[cleanup] document nozzle_iface struct, drop unnecessary ifr struct and cleanup names
[cleanup] rename ip_addr to ipaddr
[cleanup] rename sockfd to ioctlfd
[cleanup] rename struct _ip to struct nozzle_ip and cleanup related defines
[nozzle] rename _config to nozzle_lib_config
[cleanup] start splitting the code across multiple files
[nozzle] cleanup and document nozzle_get_fd
[nozzle] cleanup and document nozzle_get_name_by_handle
[nozzle] cleanup and document nozzle_get_handle_by_name
[nozzle] cleanup and document nozzle_(re)set_mac
[nozzle] cleanup and document nozzle_get_mac
2018-12-18 Christine Caulfield <ccaulfie@redhat.com>
Tidy some English
2018-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[nozzle] cleanup and document nozzle_set_mtu and nozzle_reset_mtu
couldn't split those 2 because they are stricly related
[nozzle] cleanup and document nozzle_get_mtu
[nozzle] fix test on BSD
[nozzle] cleanup and document nozzle_get_ips (part 1)
[nozzle] cleanup and document nozzle_del_ip
[nozzle] cleanup and document nozzle_add_ip
[nozzle] re-order functions in order of importance
[nozzle] cleanup and document nozzle_set_down
[nozzle] cleanup and document nozzle_set_up
[nozzle] start to cleanup nozzle_close to be more informative and effective
[nozzle] cleanup nozzle_open coding style and return codes
also update the header file for Doxygen man pages
[nozzle] rename last tap bits to nozzle
[nozzle] rename API from tap_ to nozzle_
[nozzle] fix pkg-config to point to nozzle
[nozzle] rename struct _iface to nozzle_iface (looks better on public headers)
[nozzle] rename tap_t to nozzle_t
[nozzle] include net/if.h to define IFNAMSIZ instead of redefine
[nozzle] add Doxygen header
[libnozzle] rename libtap to libnozzle (part 1)
Our fearless Debian maintainer wferi made us aware that TAP is an overloaded
term already and it would be very confusing to add yet another one.
nozzle is a good pick from http://www.thesaurus.com/browse/tap
I am sure lib*cock* would have cause havoc :-)
This commit only rename files and allow builds. The API needs to be renamed too,
but that will come over time with major code cleanup as documented here:
https://trello.com/c/pyEKd4UH/396-libnozzle-make-it-production-ga-ready
[libtap] BSD: switch to ioctl to destroy tap devices
[libtap] define IFNAMSIZ for applications that don't need/want to include net/if.h
[libtap] update README for BSD
[libtap] port to freebsd and fix a bunch of small bugs
- tap_open: do mutex lock only after malloc to avoid deadlock
- fix test suite to increase randomness when testing named tap devices
- remove hardcoded paths to /bin/true /bin/false and /bin/grep
[libtap] tests: add better IPv6 private address space randomization
[libtap] tests: allow random localhost IPs for testing
- avoids clashing with machine routing
- allows parallel testing
2018-12-13 Christine Caulfield <ccaulfie@redhat.com>
UDP: Cope with EPERM returned from sendmsg/sendto
IPtables can cause -EPERM to be returned from socket sends, so
we need to be able to handle it without going into a spin.
SCTP seems to be unaffected.
2018-12-03 Jan Pokorný <jpokorny@redhat.com>
[misc] fix a few typos/stylistics
2018-11-27 Chen Jingpiao <jchen@suse.com>
[tests] update error message in api_knet_{addrtostr,strtoaddr}.c
[tests] fix check condition in api_knet_{addrtostr,strtoaddr}.c
clear the errno in each exported API when the call success
2018-11-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[openssl] fix return type for pthread_self
spotted on freebsd-devel
2018-11-16 Chen Jingpiao <jchen@suse.com>
[tx] fix tx_uncompressed_packets stats collect in _parse_recv_from_sock
2018-11-13 Chen Jingpiao <jchen@suse.com>
[rx] fix incorrect packet length in _parse_recv_from_links
[tx] remove goto statement to improve readability
Add static qualifier to {compress, crypto, transport}_modules_cmds
2018-11-12 Chen Jingpiao <jchen@suse.com>
[transports] fix transport_modules_cmd array out of range
Fixes: 18ab4888
2018-11-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix supported compiler warning detection
move from AC_PREPROC_IFELSE (strongly discouraged) to AC_COMPILE_IFELSE
our detection system was very weak and recent versions of clang did
show that PREPROC_IFELFE (cpp) would enable warning options that
the compiler does not support (clang).
use a full compilation test to detect what works and what doesn't.
Also expand the warning list to include new / renamed clang options
of equivalents already enabled for older versions of clang and gcc.
2018-11-07 Chen Jingpiao <chenjingpiao@gmail.com>
tests: fix output message
Fixes: 04537c57 ("[transports] cleanup API calls")
fix typo
man: update XML directory in doxyxml.c
Fixes: 31945b18 ("[man] move libknet man pages and man pages build tools to top level dir")
2018-10-23 Christine Caulfield <ccaulfie@redhat.com>
misc: keep covscan happy
covscan complains about is ignoring returns from pthread_mutex_lock()
but in those 2 circumstances we don't have much choice.
This patch just keeps coverity quiet so we don't miss any real bugs it
might find.
2018-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #155 from kronosnet/stable1-proposed
Stable1 proposed
2018-10-21 Christine Caulfield <ccaulfie@redhat.com>
links: Don't close loopback link
knet_link_clear_config would incorrectly clear the local
loopback link if the last 'real' link to an external node
was closed. We didn't check the nodeid in the code, just
the link number when clearing the loopback flag.
2018-10-08 Jan Friesse <jfriesse@redhat.com>
Import key with length not dividable by wrap key block size
Wrapping of the key is standard crypto operation which needs data
aligned to cipher block size, otherwise it fails.
Possible solution is to use a zero filled buffer with size aligned to
required wrap key block size. Private key is copied to the beginning of
the buffer and unwrap operation keeps using only required private key
size.
2018-09-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] clear errno to avoid incorrect propagation from void fn call
[tests] fix select(2) handling (mostly affects slow machines)
2018-09-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[threads] make it easier to debug thread startup / stop operations with pretty names
2018-09-05 Jan Friesse <jfriesse@redhat.com>
Use gitarchive-version for spec file
git-version-gen fail on UNKNOWN version
Do not match lightweight tags in git-version-gen
Fix leftover from 175b517fd71d999150aa701ec847510490a18a6e which added
matching of lightweight git tags.
Support for git archive stored tags
Attempt to solve problem with git archive generated tarballs
(used for example by github when release is downloaded) which are no
longer git tree and (in contrast to officially released tarballs) also
doesn't contain .tarball-version file so git-version-gen script simply
cannot obtain valid version info.
Solution is based on using gitattributes which is instructs git to
replace string in the .gitarchivever file by known ref names.
git-version-gen is enhanced to support this file and tries to parse
any string which looks like "tag: v[0-9][^,)]*". If such string
is found it's used as a version. This file is used as a last attempt and
other methods (.tarball-version, git abbrev) have precedence.
Based on idea stated by Jan Pokorný <jpokorny@redhat.com>.
2018-08-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] drop arm exceptions as they have been fixed in glibc
[tests] cleanup nss memcheck supports
add one more exception for newer nss (spotted on fedora rawhide)
drop FreeBSD excetions as we don't support running under valgrind on BSD
2018-08-07 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #150 from kronosnet/stable1-proposed
stable1-proposed
2018-08-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[threads] use internal array to track status of threads (running/stopped) vs a random sleep()
[tests] don't redefine symbols from the main library
[tests] adds more overrides for fedora28/arm/glibc
[handle] reduce usage of handle_config_mutex to wrap only global lib init
[logging] report error in case logging buffer is bigger than PIPE_BUF
See https://github.com/kronosnet/kronosnet/pull/148
[handle] drop init_lock_done as it was used only by locked version of log_msg
[logging] drop locking inside log_msg (part 1)
looking at the code, there are only few calls to log_msg happening outside
of locking context (error reports when failing to grab the lock).
Everything else appears to be safe.
drop the attempt to lock inside log_msg for now, part 2 will address those
few calls that can happen outside of locking context.
[handle] drop call to log_msg that would have no effect
logging is not setup yet at this stage and we can't log just yet.
2018-07-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] ignore nss internal memory leak (3.38+) non recurring
[tests] reference correct library in memcheck comments
2018-06-08 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add another lzma exception
spotted on Debian Experimental, the latest toolchain appears to add
full path to objects and valgrind would generate an error.
add a generic catch-all path exception.
2018-04-26 Ferenc Wágner <wferi@debian.org>
coding style: add parentheses after the sizeof operator
log_msg: no point in putting NL after the final NUL
knet_log_msg: fix documentation: the closing newline is added by flush_logs
_logthread: while loop instead of goto
_logthread: select() returns the number of set bits, as an int
flush_logs: don't ever print past the message buffer
flush_logs: while loop instead of goto
flush_logs: a for loop is more straightforward here
flush_logs: don't repeat the type of msg
flush_logs: the reads will overwrite the entire msg structure
flush_logs: remove redundant condition
The read loop is always entered, resetting len and returning from the
function if it isn't greater than 0.
2018-04-23 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #145 from kronosnet/stable1-proposed
stable1-proposed
2018-04-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] NSS_NoDB_Init: the parameter is reserved, must be NULL
Thanks to Feri for spotting it in corosync
[crypto] improve checks around RX packet size
2018-04-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #140 from kronosnet/stable1-proposed
stable1-proposed
2018-03-27 Ferenc Wágner <wferi@debian.org>
build: look for source_epoch in srcdir
build: check for SOURCE_DATE_EPOCH before turning to Git for an epoch
2018-03-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fail and provide proper error if source tree version is unknown
2018-03-27 Ferenc Wágner <wferi@debian.org>
build: git -C is a relatively new option, avoid it
build: accomodate to the actual date utility
spec: use the source epoch here as well
man: use new doxyxml date options to build man pages
Based on Fabio's original patch.
2018-03-27 Christine Caulfield <ccaulfie@redhat.com>
man: Add date & year options to doxyxml
2018-03-27 Ferenc Wágner <wferi@debian.org>
build: distribute the source_epoch file
build: determine SOURCE_EPOCH during configuration
2018-02-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[compress] extend check to compare end buffer data
[compress] update valgrind exception file to match new lzma entry points
[compress] delegate compress_level validation to compress libraries
- make val_level internal api call optional
- keep lzo2 val_level around due to the specific nature of compress_level values
- add internal compress_lib_test to do a round-robin (compress/decompress) check with provided values
- drop unnecessary val_level checks around
- update internal compress API include file
- adjust api_knet_handle_compress test to use a known bad value for zlib validation
[tx/rx] improve error checking when running external code
libknet cannot guarantee that the dst_host_filter is sane nor that it cannot
be exploited to return garbage to knet.
there is an infinitesimal possibility that, if the plugin returns total crap,
knet could crash by trying to access out-of-bound memory.
Prevent that by adding specific checks both in TX/RX.
2018-02-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #116 from kronosnet/stable1-proposed
stable1-proposed fixes
2018-02-23 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix ChangeLog generation in release tarball
2018-02-20 Ferenc Wágner <wferi@debian.org>
Indicate new API call in libtool version info
build: provide -version-info directly instead of -version-number
The info components carry the real OS-independent library version
information, from which the version number is computed differently
on different systems. According to the libtool manual "new projects
should use the -version-info flag instead".
New API function: knet_handle_new_ex() taking handle flags
For now, the only supported flag is KNET_HANDLE_FLAG_PRIVILEGED,
which is also the default in knet_handle_new().
The tests are adapted to switch this flag off, which makes them pass
in default environments without privileges.
2018-02-20 Christine Caulfield <ccaulfie@redhat.com>
UDP: Don't keep retrying send if we get EINVAL
UDP can return EINVAL if the route is down or not configured, this can
cause knet to 'spin' (well, ish, there is a usleep in there).
With this patch in place knet doesn't hog the CPU anywhere near so much
(and it does recover if the link returns).
2018-02-19 Christine Caulfield <ccaulfie@redhat.com>
doxyxml: Use overridden XML_DIR for reading structures
2018-02-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] fix path to stamp file
[man] move kronosnetd man pages
[man] move libknet man pages and man pages build tools to top level dir
2018-02-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] simplify Doxygen test based on Feri's input
[build] be consistent
[build] make man page build optional
[build] check for all *int types as we use pretty much all of them
[build] drop redundant check (it's duplicated just a few lines below)
[build] drop unnecessary function checks
[build] drop unnecessary include checks
[build] fail configure if we can't find Doxygen to build man pages
[build] drop obsolete AC_PROG_LIBTOOL included in LT_INIT
[build] enable error when checking --enable-new-dtags linker flags
2018-02-13 Ferenc Wágner <wferi@debian.org>
build: no binaries in build-aux wander out of the build tree
build: better separation of flags during cross-compilation
build: kronosnetd still needs libqb on the host system
build: compile and link doxyxml for the build host
build: use build architecture libraries for doxyxml
2018-02-12 Ferenc Wágner <wferi@debian.org>
Better wording suggested by Chrissie
Reword the documentation of knet_handle_compress_cfg
We support several compression libraries by now.
2018-02-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[compress] lz4: fix builds for older lz4 releases
[compress] lz4: include all required headers
upon reading lz4hc.h, lz4.h should always be included as depedency
2018-02-03 Ferenc Wágner <wferi@debian.org>
doxyfile: description of return values may be missing
2018-02-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] drop dist_man_MANS leftover
2018-02-01 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] make gcc8 buffer boundaries check happy
2018-01-30 Ferenc Wágner <wferi@debian.org>
doxyxml: use AM_CFLAGS for debugging info, optimization and warnings
The rework of the FLAGS handling and the development of doxyxml happened
on different temporary branches, and this slipped through on the merge.
tests: skip the SCTP test if SCTP is not supported by the kernel
For example, module loading is disabled on Debian build daemons.
build: --export-dynamic is needed for dlopened modules only
Not that it matters on ELF platforms the least. If Kronosnet is ever
ported to Windows, however...
build: linking with libm is unnecessary on some systems (like OS X)
Inlining of builtin functions can eliminate the libm dependency on other
systems as well, but AC_SEARCH_LIBS can't detect this because it tests
with a false prototype. Thus we use --as-needed linking already to trim
such unnecessary dependencies.
build: use --as-needed to avoid unnecessary dependency on libm
I removed --as-needed in 1b96703, but now I found a good reason to use
it after all.
build: check for the --enable-new-dtags flag before using it
build: sanitize CFLAGS handling
As for LDFLAGS previously: leave the CFLAGS "user variable" untouched to
enable easy selective overriding of the flags used by the build system.
Using $lt_prog_compiler_pic shouldn't be necessary, let's drop it and
see if anything breaks. WERROR_CFLAGS was undefined, so dropped as well.
build: we preserve CPPFLAGS, just remove the tempting hooks
build: sanitize LDFLAGS handling
The Automake manual states that according to the GNU Coding Standards
the so-called "Variables reserved for the user" mustn't be changed by
the build system, and they must override the default settings from the
build system. The "Flag Variables Ordering" section provides the
recipes on which we build here.
Using $lt_prog_compiler_pic directly shouldn't be necessary, let's try
leaving it out.
build: LIBS belong to LDADD for binaries
build: remove unused DEBUG Automake conditional
Propagate NSS initialization errors
EVP_CIPHER_block_size returns size_t, which is unsigned
Propagate OpenSSL initialization errors
Add some missing error propagation
2018-01-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] do not ship precompiled doxyxml
[man] add build requires on doxygen
[man] fix man page generation external deps on doxyxml
[man] fix distcheck, build out of tree and tarball generation
[man] update .gitignore
[man] switch to autogenerated man pages
2018-01-29 Christine Caulfield <ccaulfie@redhat.com>
doxyxml: Fix parameter ordering
Also tidy pointer printing and remove extraneous quotes from
the BITS IN CAPS (not sure why I did that, but it helps the diff
from the old pages)
2018-01-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] don't output unnecessary .PP sections
[man] fix comma separated list in See Also section
[man] reduce diff with the old man pages
O...C...D...
[man] first attempt to plug doxyxml to replace doxy2man
[man] fix args parsing and help text
Update .gitignore
[man] init variable and silence gcc
[man] fix casting around
[man] define _DEFAULT_SOURCE for new features.h
[man] add libqb and libxml2 devel as general buildrequires for man pages
2018-01-29 Christine Caulfield <ccaulfie@redhat.com>
doxyxml: Fix compiler warnings
2018-01-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[man] add makefile.am
[man] move doxyman to build-aux
[man] drop redundant update-man-page code
2018-01-29 Christine Caulfield <ccaulfie@redhat.com>
manpages: Generate man pages using our own command
This removes the dependncy on doxy2man which is not
packaged.
2018-01-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Use LD_LIBRARY_PATH to find the build tree artifacts and disable RPATH across the project
The libtool wrapper scripts of the test binaries set LD_LIBRARY_PATH to
find the libknet library and its modules in the build tree, but RPATH
overrides this setting. This is why RPATH is deprecated, so we switch
to RUNPATH instead by using --enable-new-dtags, which is already the
linker default on Debian for example.
Based on the original patch from Ferenc.
2018-01-18 Ferenc Wágner <wferi@debian.org>
tests: check for exported symbols in the data section as well
The PowerPC64 ELFv1 ABI puts the function descriptor symbols there,
but why restrict the consistency check to the text section anyway?
2018-01-17 Bin Liu <bliu@suse.com>
typo fix: change the url in spec file
2018-01-08 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #112 from kronosnet/man-pages
[docs] Update copyright and man pages pre-1.0
[docs] Update copyright and man pages pre-1.0
Merge pull request #111 from kronosnet/fixes
Fixes
[PMTUd] drop (now) unnecessary and dangerous usleep
prior to all threads being able to notify PMTUd of EMSGSIZE errors,
we had this random usleep in there to have time to collect data.
It was working at the time, but it's a bad idea.
On super large clusters (>66 nodes) with 4 links on each node, when
applying heavy load (cpghum on all nodes at once), the average latency
between nodes can increase so much that the PMTUd thread usleep
could literally block corosync for seconds at a time.
Drop the usleep and live happily ever after
[PMTUd] reset value or suffer the pains of DEADLOCKING! errno is per thread, not per function
[PMTUd] only notify PMTUd when pmtud_running and don't force a run to avoid lock fighting
When we request a writelock, we should notify PMTUd to abort and cond_signal only
if PMTUd is running.
Also, don't request an immediate rerun as we cannot guarantee that the scheduling
is favourable to our request and we could end up waiting forever.
[stats] show loopback links as connected
2018-01-05 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #105 from kronosnet/scale
Scale
2018-01-04 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] more typo fixes
meeeehhhhhh fixed on the top comment, forgot the bottom one
[PMTUd] cleanup variable usage and code around it
2018-01-04 Christine Caulfield <ccaulfie@redhat.com>
fix missing space
2018-01-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] amend warning message
[PMTUd] generate warning when there is a timeout receiving a response
[PMTUd] if PMTUd is rescheduled, then enforce a new run
the usleep between each PMTUd run will give time to the other threads to grab the wrlock
[PMTUd] make PMTUd force_run notification more quiet
[PTMUd] if any threads receives a EMSGSIZE outside of a PMTUD run, force PTMUd to run
Scenario:
node X has MTU Y on the interface and application is sending packets with size >= Y.
The interface MTU is suddenly reduced to < Y
Before this change, the kernel would be dropping packets till the next PMTUd run.
After this change, the PMTUd will be informed that it has to rerun (overriding
the pmtud_interval), reducing the packet drop to a minimum.
How to test:
force knet_bench to send 1500 size packets with ping_data (requires code change)
and start it.
reduce MTU on the interface from 1500 to 1300 (for example)
Notice an immediate trigger of PMTUd run in debug mode
Note: going up, from 1300 to 1500 will wait for the next PMTUd re-run as there
is no immediate way to detect this change unless we start listening to kernel
netlink sockets with libnl3 (investigation in progress but not critical enough atm).
[PMTUd] rename pmtud_running to pmtud_waiting
[PTMUd] by using a safe PMTU to init a link, we can shave down corosync membership creation by 25%
tested on a 9 node cluster with 2 links each node, going down from 4 seconds to 3 seconds
[PMTUd] Use kernel MTU information to determine next packet size during discovery
Using this information we can, for good links (*), determine and verify the link
MTU with 2 packets.
* good links means:
node X has MTU Y configured on a given interface. Any network object between node X
and destination is capable of handling MTU >= Y.
In no case the kernel will allow us to send packets > Y.
[stats] report correct MTU for loopback links
Merge pull request #108 from kronosnet/minor-fixes
Minor fixes
[tests] add missing break (detected by newer gcc)
[tests] knet_bench: allow to specify protocol (UDP/SCTP) per link
[tests] knet_bench: add machine parsable output
this is done by adding prefixes to different messages to make it easier
to grep/awk and changing format of [perf] to reflect cpghum syntax.
[tests] knet_bench allow to configure PMTUd interval from CLI
[tests] fix regression in knet_bench introduced accidentaly by 2052faab4376107fe99e8a3f955bbcbfa426f648
[openssl] drop unnecessary reference counter
2018-01-03 wferi <wferi@debian.org>
Merge pull request #109 from kronosnet/lzo2
build: work around broken pkg-config file in lzo2 version 2.10
2018-01-03 Ferenc Wágner <wferi@debian.org>
build: work around broken pkg-config file in lzo2 version 2.10
In principle this isn't specific to BSD, though 2.10 is only packaged
for BSDs at the moment.
2018-01-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #106 from kronosnet/openssl-fixes
[openssl] fix openssl1.0 crash by implementing documented locking cal…
[openssl] fix openssl1.0 crash by implementing documented locking callbacks
openssl < 1.1.0 do not support natively multithread applications and need
some extra help from the application itself to provide locking callbacks.
https://www.openssl.org/docs/man1.0.2/crypto/threads.html
https://www.openssl.org/blog/blog/2017/02/21/threads/
to test this fix is necessary to use knet_bench or corosync with openssl
and lots of heavy load (perf benchmark) workload. Sooner or later
the application will crash with some random tracebacks.
after this patch, the crash cannot be reproduced anymore.
tested using 9 nodes x2 active/active links all running corosync + cpghum
2017-12-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #99 from kronosnet/skip
Skip tests if socket buffers are inadequate
2017-12-19 Ferenc Wágner <wferi@debian.org>
Remove spaces after function names
Anything that stops operation and returns an error should be log_err
Document knet-specific errno values
More fine-grained error handling
tests: skip if socket buffers are too small
tests: replace open coded error handling with knet_handle_start() calls
Done by:
$ sed -i -e '1h;2,$H;$!d;g' -e 's/knet_h = knet_handle_new(1, logfds\[1\], \(KNET_LOG_[A-Z]*\));\n\n\tif (!knet_h) {\n\t\tprintf("knet_handle_new failed: %s\\n", strerror(errno));\n\t\tflush_logs(logfds\[0\], stdout);\n\t\tclose_logpipes(logfds);\n\t\texit(FAIL);\n\t}/knet_h = knet_handle_start(logfds, \1);/g' libknet/tests/*.c
tests: introduce knet_handle_start helper
Report ENAMETOOLONG if socket buffers are too small
2017-12-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #103 from kronosnet/mtu-lock
[PMTUd] fix external API and PMTUd interaction
2017-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] fix external API and PMTUd interaction
The problem:
PMTUd can take a long time to release the global read lock, mostly due
to the pthread_cond_timedwait required to ack/nack packets from the
other hosts. This delay could block any wrlock operation for several seconds
if not more.
The solution:
each call to the global pthread_rwlock_wrlock has been changed to a wrapper
that will notify the PMTUd to interrupt its operations (and restart) first,
then get a global write lock that is queued as soon as PMTUd is going out.
This solution also improves a lot shutdown speed.
How to test:
This is not super simple to test and verify. I used 2 VMs with known MTU of
1500. Start knet_bench on both (normal ping_data -C is more than enough).
Once they have established data exchange, change the MTU on one of the nodes
to 1600 (or higher). This should guarantee that the PMTUd process will take
a very long time to complete.
First verify that the PMTUd process takes several seconds.
Once the next PMTUd run starts, hit ctrl+c on the node that is executing
the PMTUd and the process should exit much faster than before this patch.
Merge pull request #104 from kronosnet/spelling
Spelling fixes
2017-12-18 Ferenc Wágner <wferi@debian.org>
Fix typo and capitalization
Fix grammar (allow requires an object)
2017-12-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #102 from kronosnet/clang
Clang
[build] define conditionals only once
[build] workaround BSD / clang breakage
[build] fix clang builds
Merge pull request #101 from kronosnet/mtu2
[PMTUd] fix multiple issues and stability problems
2017-12-14 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] fix multiple issues and stability problems
- resolve locking issue with thread_heartbeat that was causing
spurious up/down link event.
In the event of a PMTUd run taking too long, the heartbeat
thread could hang for much longer than ping_timeout.
Use backoff_mutex to sync between threads instead of the global lock.
- pause the DATA tx thread when sending any PMTUd related packets.
Similar method as knet_send_sync, using the tx_mutex, allows a much
more stable communication between nodes without any visible performance
hit.
- calculate higher timeouts when using crypto to improve stability
- fix an odd race condition with the kernel where, during a single PMTUd run,
the same packet size was marked both BAD and GOOD (via EMSGSIZE) by the
kernel. That situation would cause our PMTUd to run away and calculate
bad values.
- add a minor usleep between sending PMTUd packets to give time to the
kernel to make its own mind about the link PMTU. This is based on average
latency.
- since PMTUd can take several seconds before completion, use the "end time"
to record the last run vs the start time.
- fix a major issue in sending PMTUd reply where an errno was not being
passed down the link layer and would cause the RX thread to block forever.
2017-12-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #98 from liu4480/add-debuginfo
allow to choose whether to build debuginfo packages or not
2017-12-08 Bin Liu <bliu@suse.com>
allow to choose whether to build debuginfo packages or not
1. If not "--enable-rpm-debuginfo" or "--disable-rpm-debuginfo" is
specified, follow the system default behavior
2. If set, then build debuginfo package or not build based on the
flag.
2017-12-05 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #96 from kronosnet/modules2
Modules2
2017-12-04 Ferenc Wágner <wferi@debian.org>
build: remove useless assignment
build: use AS_HELP_STRING for consistent formatting
build: recover original option ordering
build: move more repetitive module work into our Autoconf macro
Check ABI version on module load
2017-12-04 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] drop obsoleted tests that are broken after moving to the new modules format
[tests] make module tests dynamic by using internal knowledge of what is built or not
drop all related #ifdef as well
2017-11-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[modules] update valgrind BSD exceptions
[modules] spec file: fix directory shipping
[modules] update spec file to ship modules in separate rpms + meta packages
2017-11-30 Ferenc Wágner <wferi@debian.org>
Unify compress and crypto module loaders
Unify crypto module initialization functions
Taken from Fabio M. Di Nitto.
libknet.h uses ssize_t, include its definition directly
This fixes the BSD build.
Pass log_msg to the plugins
Switch over all plugins to the module system
2017-11-29 Ferenc Wágner <wferi@debian.org>
Make the bzip2 compress plugin a proper module
Our current practice of dlopening foreign shared libraries is problematic
for several reasons:
* not portable: modules and shared libraries can be different object types
* dependency information is invisible (our canaries mostly solve this)
* hardwiring SONAMES breaks on transitions (KNET_PKG_SONAME solves this)
* symbol versioning information is lost (theoretically solvable)
The preferred way out is generating dynamically loaded private modules
from the main source, which then rely on the dynamic linker to load the
external symbols as usual.
Separate compress_model_t definition into a new header file
We'll use this type together with the zlib headers, which clash with
our compress.h because both define a function named compress.
2017-11-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #94 from kronosnet/sock
[transport] make the new derooted sock management less chatty
[transports] add logging around setsockopts that have specific per distro/include requirements
this is helpful to determine if a given option has been built-in and/or activated
properly
[transport] add missing include files and really fix 86c81a32cfccde1dea
[transport] consistency is not optional :-)
[transport] fix errno handling
[transport] make the new derooted sock management less chatty
2017-11-27 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #91 from kronosnet/no-root
Enable testing without root privileges
2017-11-27 Ferenc Wágner <wferi@debian.org>
Detailed error reporting about socket buffer sizes
2017-11-26 Ferenc Wágner <wferi@debian.org>
Remove the need_root() function
The point is not having root privileges, but having high enough socket
buffer caps. Very few of the test can run without it.
2017-11-25 Ferenc Wágner <wferi@debian.org>
Don't require root privileges unless necessary
On Linux, if /proc/sys/net/core/[rw]mem_max are set to at least
8388608 (KNET_RING_RCVBUFF), setting the socket buffer sizes
doesn't require root privileges.
FreeBSD uses the kern.ipc.maxsockbuf sysctl MIB variable for
capping user buffer requests.
Linux doubles the requested amount for administrative overhead,
but FreeBSD does not, so we can't be too strict when checking
the results.
2017-11-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #93 from kronosnet/dynamic-pong
Dynamic pong
[tests] workaround buggy valgrind-freebsd implementation.
valgrind is not officially supported on FreeBSD. The current valgrind-freebsd
port is maintained separately and it's lagging several releases behind
vs upstream valgrind.
When running knet+openssl+valgrind on x86_64, with high pthread_cond_timedwait
configuration, valgrind appears to be stuck tracing openssl internal operations
to the point that the internal knet RX thread is not scheduled for minutes.
At that point all processes will go kaboom (heartbeat, PMTUd, etc) almost constantly
failing this test.
Given that all other architectures and OSes can run this test happily, I am adding
this exception to the test suite, to be re-evaluated in future if newer versions
of valgrind will be available on FreeBSD.
2017-11-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] don't duplicate test
[tests] use a new tunable functions to wait for packets
[tests] when running under valgrind, allow a lot more time for host to be reachable
[links] fix description
[links] add pong_timeout backoff mechanism to deal with high latency links
Merge pull request #92 from kronosnet/timer-fixes
Timer fixes
[links] extend knet_link_set_ping_timers ABI to be ready for future expansion
[tests] implement common and more flexible wait_for_host implementation
[docs] update header to be more specific about ping timers and relative man pages
[PTMUd] don't harcode 2 seconds timeout to receive a PMTUd response from the remote node
2017-11-23 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #87 from chrissie-c/balance_crypt_stats
stats: Make the crypt_packet stats balance
2017-11-23 Christine Caulfield <ccaulfie@redhat.com>
stats: Only collect crypt over stats for received data packets
This is more for consistency really. The TX code only accumulates the
crypto overhead for data packets because it's not worth adding all the
accounting code around the ping/pong & pmtu transmitters.
stats: Make the crypt_packet stats balance
The tx_crypt stats only included data packets whereas the rx_crypt
stats included everything, because the TX was done in different places
and the RX in just the one.
I've added a 'stats_extra' structure so that the other threads can
update their own stats without extra locking, the get_stats call adds
them in as necessary.
2017-11-21 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #90 from kronosnet/soname
build: determine the plugin SONAMEs automatically
2017-11-20 Ferenc Wágner <wferi@debian.org>
build: determine the plugin SONAMEs automatically
Most importantly, this avoids dlopening libcrypto.so, which is a symlink
in the OpenSSL development packages on Linux. Rather, we use the SONAME
of the first library added by pkg-config, which seems to work well across
the board. The strange case is NSS, which ends up using libssl3.so on
CentOS, Fedora and RedHat, but libnss3.so on Debian, FreeBSD and Ubuntu.
The tests pass regardless, so this might be tolerable.
2017-11-17 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #89 from chrissie-c/knet_bench_stats
[knet_bench] Add option to display stats
2017-11-17 Christine Caulfield <ccaulfie@redhat.com>
[knet_bench] Add option to display stats
2017-11-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #88 from kronosnet/nss-workaround
[build] workaround memory alignment bug in nss in combination with va…
[build] workaround memory alignment bug in nss in combination with valgrind on Linux/i386
Over the past few weeks, we noticed CI failing on i386 when running make check-memcheck
(test suite executed with valgring). Those failures were not consistent and sometime random.
After some heavy debugging it turns out that those failures are a combination of libnss3
internal memory allocator bug and valgrind internal memory allocator.
Current libnss3 memory allocator expects a 16 bytes memory aligned
buffer and in the event the memory is not aligned, it would round it.
The issue is that, in performing this rounding, nss does not track properly the
original address of the memory, and the equivalent of subsequent free of this buffer
would fail, leaking memory and potentially accessing memory not allocated or corrpting
memory.
The nss bug is already fixed upstream by commit: changeset: 13557:52e38f913220
Valgrind on Linux/i386 memory allocator can return memory that is not aligned to the 16 bytes,
contrary to what malloc/glibc does. Valgrind was returning (somehow randomly) a non aligned
buffer to nss triggering the nss bug and the leak.
By forcing valgrind to use aligned memory, nss bug does not trigger and there is no memory leak
during the execution of the test suite.
The memory leak never triggered when running knet in normal conditions.
2017-11-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #86 from kronosnet/pthread
build: adopt ax_pthread.m4 to provide all necessary flags
2017-11-14 Ferenc Wágner <wferi@debian.org>
build: adopt ax_pthread.m4 to provide all necessary flags
Previously we only linked with -lpthread, but for example the -pthread
GCC option provides a CPP define as well.
2017-11-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #85 from wferi/libcrypto
We only use the crypto part of OpenSSL
2017-11-14 Ferenc Wágner <wferi@debian.org>
Revert "build: link as needed"
This reverts commit e3c019fde32f78bf2e3a9bcf6c2fff93245708a0.
Once LIBS is kept empty and OpenSSL isn't linked to in full, overlinking
shouldn't be a problem anymore.
build: only kronosnetd needs PAM, so keep the linker options separate
build: remove unused function checks
These have no corresponding HAVE_X checks in the code.
build: the check_lib_no_libs function was unused
The optional arguments of AC_CHECK_LIB work good enough.
build: don't add the dl library to LIBS, keep it in dl_LIBS only
This leaves us with an empty LIBS in the most common cases.
2017-11-13 Ferenc Wágner <wferi@debian.org>
build: clock_gettime does not require the rt library for glibc 2.17+
So stop overlinking with -lrt on modern systems.
build: we only use the crypto part of OpenSSL
2017-11-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #84 from kronosnet/api-fixes
Api fixes
[libknet] fix comments and update man pages
[libknet] add padding to get *_info structs
[tests] fix tests differently
[tests] fix build on i386
[tests] add api_knet_send_crypto
[transports] knet_get_transport_list should behaves as knet_get_compress/crypto_list
[tests] fix error message in api_knet_get_compress_list.c
[docs] update copyright and manpagea
[compress] move knet_handle_get_compress_list to knet_get_compress_list
now matches the same API as get_transport_list
[crypto] move knet_handle_get_crypto_list to knet_get_crypto_list
now matches the same API as get_transport_list
[logging] don't hardcode the max, use max value for the typedef
[transports] make KNET_MAX_TRANSPORTS = UINT8_MAX now that the APIs allow holes in the IDs
this way we don't need to break ABI if we add new transports later on.
[transports] cleanup API calls
knet_get_transport_id_by_name, knet_get_transport_list and knet_get_transport_name_by_id don't need
a handle to be functional as they only access build-time info that don't change at runtime.
[transports] move to use the same internal API as crypto and compress modules
Merge pull request #83 from wferi/canary
Automatic canaries
2017-11-13 Ferenc Wágner <wferi@debian.org>
Extend the preprocessor schema to the NSS crypto plugin
Extend the preprocessor schema to the OpenSSL crypto plugin
2017-11-12 Ferenc Wágner <wferi@debian.org>
Validate dynamic symbol prototypes
Practically, all imported symbols are functions returning an int, but
the LZMA API defines it as an enum.
Extend the preprocessor schema to all compression plugins
Use the preprocessor for the zlib symbol remapping as well
This ensures that the canary uses all dynamically loaded symbols,
enabling precise versioning of the optional dependencies.
Use the preprocessor to reference all remapped zlib symbols in the canary
2017-11-11 Ferenc Wágner <wferi@debian.org>
Switch libknet/compress_zlib.c to using the remap_symbol helper
Define a common helper function for symbol remapping
git ignore libknet/{compress,crypto}_canary
2017-11-10 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #80 from kronosnet/clang-fixes
Clang fixes
[clang] fix build on freebsd
[tests] add exception for lzma on Ubuntu 17.10 i386 (clang) - take 2
[tests] add exception for lzma on Ubuntu 17.10 i386 (clang)
Merge pull request #81 from wferi/canary
Generate dependency information for plugin libraries
2017-11-10 Ferenc Wágner <wferi@debian.org>
Generate dependency information for plugin libraries
2017-11-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #79 from wferi/git-version-gen
build: update git-version-gen
2017-11-09 Ferenc Wágner <wferi@debian.org>
build: update git-version-gen
This newer version copied from libqb does not speak -dirty if the
tarball is extracted into a GIT repository, which happens during
packaging.
https://lists.gnu.org/archive/html/coreutils/2011-02/msg00069.html
2017-11-07 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #78 from kronosnet/docs
Docs
[docs] update man pages with proper copyright info
2017-11-06 Fabio M. Di Nitto <fdinitto@redhat.com>
Add copyright to the README file
[docs] update README file
[docs] update man pages with copyright info
[docs] drop TODO list
[docs] remove empty publican docbooks
2017-11-06 Christine Caulfield <ccaulfie@redhat.com>
doc: Add copyright section to man pages
2017-11-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[docs] add copyright to more files
Cleanup export sym naming
14:42 < chrissie> Here's the quote in the manual if you need it https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html#SEC25
14:42 < fabbione> lol, i trust you :-)
14:51 < chrissie> most I wondered if you wnated a reference for the commit
[docs] more copyright fixing
Merge pull request #76 from kronosnet/docs
[docs] Update copyright info and add tools to automate it
[docs] fix git startdate to follow file renames and set enddate to this year
[docs] Update copyright info and add tools to automate it
Merge pull request #75 from kronosnet/docs
[docs] update COPYRIGHT
[docs] update COPYRIGHT
2017-11-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #71 from chrissie-c/parallelise_tests
tests: Parallelize tests
2017-11-02 Christine Caulfield <ccaulfie@redhat.com>
tests: Fix [s]printf of uint32
tests: Parallelize tests
Randomize (using PID) the port numbers used for the tests so they
don't clash.
2017-11-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #74 from chrissie-c/mark-link-configured-later
link: Only mark a link as 'configured' when it actually is
2017-11-02 Christine Caulfield <ccaulfie@redhat.com>
link: Only mark a link as 'configured' when it actually is
If the transport-specific config fails then the link can be left
unconfigured, but marked as 'configured'.
I've only moved the setting of 'configured' flag itself rather than
the rest of the values in case the transport-specific code wants
to change them for any reason.
2017-11-01 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #73 from kronosnet/build-fixes
Build fixes
[build] fix make distcheck on bsd machines
make sure to clean temporary files created by sed on the way of building
[build] fix git dirty detection
[build] fix changelog generation
[build] fix make distcheck target
[build] don't ship prebuilt spec file with release tarball
[build] disable kronosnetd build with distcheck
Merge pull request #72 from kronosnet/build-fixes
[rpmbuild] fix BuildRequires to allow rpmbuild for both Fedora and Op…
[rpmbuild] fix BuildRequires to allow rpmbuild for both Fedora and OpenSUSE based distros
2017-10-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #70 from wferi/dist
Add the notes and the docbook to the distribution
2017-10-31 Ferenc Wágner <wferi@debian.org>
Add the notes and the docbook to the distribution
2017-10-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #69 from kronosnet/build-fixes
[bsd] fix builds and testsuite on BSD x86_64/i386
[bsd] fix builds and testsuite on BSD x86_64/i386
I don't particularly enjoy the use of host detection in configure.ac,
but there is no easier way to set the library names for dlopen without
some complex and fragile scripts.
BSD valgrind + nss complains about some non-initialized memory access.
being internal to nss we can ignore it.
on BSD i386 size of time_t is int32_t vs all other platforms where is int64_t.
BSD doesn't appear to be offerign any PRIx conversion and since it's contained
within the testsuite only (for printf purposes), cast and get away with it.
add check to avoid building libtap on BSD for now.
2017-10-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #68 from chrissie-c/dont-send-channel-32
[tx] Don't send to channel 32 if there are no channels available
2017-10-30 Christine Caulfield <ccaulfie@redhat.com>
[tx] Don't send to channel 32 if there are no channels available
For some reason this only triggers on FreeBSD (that we've seen).
2017-10-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #67 from kronosnet/minor-cleanup
[libknet] rename transport_info to knet_transport_info
[libknet] rename transport_info to knet_transport_info
match the namespace of all our struct. This is an API change, but doesn't affect ABI.
Merge pull request #66 from kronosnet/doxyfication
Doxyfication
[man] update man pages
white space cleanup
2017-10-30 Christine Caulfield <ccaulfie@redhat.com>
doc: Fix minor oddities in the doxygen comments of libknet.h
host_status_change_notify_fn() still generates a duff man page but
that seems to be a bug in doxy2man
2017-10-30 Fabio M. Di Nitto <fdinitto@redhat.com>
add autogenerated man pages and build target to update them on demand
2017-10-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[docs] generate libknet .3 man pages at build time
2017-10-27 Christine Caulfield <ccaulfie@redhat.com>
doc: First attempt at Doxyfying libknet.h
2017-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #65 from kronosnet/release-fixes
Release fixes
[release] fix scp call for publishing files
[release] update .gitignore
[release] sign all tarballs and file list
Merge pull request #64 from kronosnet/libtap-fixes
[libtap] reduce size of max updownpath to adjust for max action, / an…
2017-10-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[libtap] reduce size of max updownpath to adjust for max action, / and max tapdev name size
Merge pull request #63 from kronosnet/nodebian
[build] drop debian support from upstream
[build] drop debian support from upstream
On Debian HA team request, we are dropping the debian/ dir
Merge pull request #61 from kronosnet/bsd
[build] update Makefile.am to work with BSD make
[build] update Makefile.am to work with BSD make
Merge pull request #62 from chrissie-c/new-apis2
libknet: Add APIs to query crypto & compression models
2017-10-26 Christine Caulfield <ccaulfie@redhat.com>
libknet: Add APIs to query crypto & compression models
Also add API call to clear the handle and link stats
2017-10-26 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #60 from wferi/autotools
Autotools
2017-10-26 Ferenc Wágner <wferi@debian.org>
configure: initialize pkg-config with its standard macro
configure: remove some superfluous checks
We've got no C++ code in here.
No need for ranlib when using libtool.
2017-10-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #59 from kronosnet/ci-fixes
Ci fixes
[build] enable valgrind automatic supressions generation during make check-*
this is useful to create exception when false errors are found on CI run
[tests] add exception for lzma on Ubuntu 17.10 i386
Merge pull request #58 from liu4480/run-autogen
add "runautogen" option for compiling
2017-10-25 Bin Liu <bliu@suse.com>
add "runautogen" option for compiling
2017-10-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #56 from kronosnet/fabbione-cleanup
[testing] drop travis support as we are moving all builders to https:…
[testing] drop travis support as we are moving all builders to https://ci.kronosnet.org/
Merge pull request #57 from kronosnet/fabbione-udp-fixes
[udp] fix incorrect return code
[udp] fix incorrect return code
UDP TX is tricky and racy and in theory TX never fails, as UDP is allowed
to drop packets internally anyway.
In some race condition situations, we can endup in a situation where:
- thread X attempts to send a packet
- socket receives an ICMP back (for whatever reasons) generated
by some other random thread/packet combo
- thread X detects an error in TX and decode the error (correct)
pre patch:
- thread X would treat that as error and drop the packet
post patch:
- thread X should simply resend the packet
simply also the ordering of parsing socket error code to make it easier to read
2017-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #53 from digimer/master
Added 'gcc' to .spec BuildRequires
2017-10-18 Digimer <digimer@alteeve.ca>
* Added a requirement for 'gcc' as that is not installed on fedora minimal by default, breaking rpmbuild's build attempt.
2017-10-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] use memmove instead of memcpy
2017-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] more casting fixes
[build] more signed/unsigned fixes
[build] fix some signed/unsigned declarations
[build] allow make check-memcheck and check-hellgrind only if valgrind is avalable
[build] bump minimum requirements for automake
this is required for distclean + subdir-object to work properly
2017-09-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] fix build and cast aligment on Debian/sparc64 unstable (gcc7)
2017-09-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] cleanup whitespace
[build] disable poc code by default
2017-09-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[dlopen] drop support for unload of libraries
[openssl] check for errors when initializing openssl1.1
[build] fix build on freebsd11 (and others)
2017-09-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] fix build with no nss
[tests] move dump_all to callback section
[tests] add exception for lzma on Debian Unstable
[test] drop useless library count check
[crypto] add support for openssl1.0.2 and openssl1.1.0 to accomodate Debian unstable
Please note that openssl1.1.0 needs more testing
2017-09-19 Christine Caulfield <ccaulfie@redhat.com>
[host] Never mark loopback-connected hosts as unreachable
There's no point in checking the links of a host with a LOOPBACK
link - it's always up and reachable.
2017-09-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[openssl] update libknet.h to document openssl support
[openssl] extend lib load/unload to cover for openssl
[openssl] filter "none" from *getbyname openssl functions
[openssl] drop unrequired OPENSSL_config
[openssl] revert debugging code
[openssl] go back to the original minimal keysize
[openssl] move to dlopen model
[nss] protect shutdown from segfaults in case we cannot resolve all syms
[openssl] add api_knet_handle_crypto test
[openssl] drop incorrect keylen management code
[crypto] add openssl support (first cut)
still needs dlopen and memcheck love + sync with nss key size
[cryto] nss: add namespace to internal functions
2017-09-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix casting with gcc-7 (debian unstable)
[debian] fix tests/ linking with debian unstable
[debian] fix build deps (pass 3 or 4)
[debian] be more specific about builddeps
[debian] fix build dependency in control file
2017-09-14 Fabio M. Di Nitto <fdinitto@redhat.com>
[test] fix conditional build of int_lib_load_unload
[global] bump lib soname to 1.0.0
[dlopen] compress: drop unnecessary tracker and use init array instead
[compress] move tracking update into a write lock context
[dlopen] compress: fix load/unload of libraries and add extensive test
each handle should only unload libraries that has loaded or referenced
on exit, attempt to close all libraries from that handle
on compress_fini close only the one that's open
[compress] make sure to unload resources before re-init the new config
[global] rename link.(c|h) to links.(c|h) as they conflict with global /usr/include/link.h
[compress] split check_lib_init into 2 functions
[crypto] simplify lib init code and fix error handling
also update the valgrind exception file
[dlopen] move all dlopen lib names at the top of the respective files
makes it easier to figure out library supported version
[dlopen] add suppress entries for internal NSPR/NSS memory leaks (part 2)
[docs] fix a typo
[dlopen] fix crypto/compress internal name space for similar functions
[dlopen] add suppress entries for internal NSPR/NSS memory leaks
[dlopen] use RTLD_NOW instead of RTLD_LAZY to avoid perf hit on fast path
[crypto] partially revert and partially fix b22ef0ca65d687dbc
nss/nspr still leaks approx 2kb on unload, but it's much cleaner
now than the many Kb before those fixes.
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Memory_allocation
[handle] remove knet handle tracker
reload of shlib should be done on a per handle base to avoid complex
global functions.
For example, if you application is using 2 knet_h and you need to reload
libbz2, then switch both knet_h to use another compression method (or none)
and switch back to libbz2.
Similar can be done with nss/openssl once openssl support is added.
A global function to reload all library would a very complex error reporting
mechanism and could leave some handles improperly configured.
The application would have a better understanding of the needs at any given
time.
[crypto] fix nss unload/reload memory leak
[dlopen] if the library is a symlink, display the symlink info to the final binary
it cannot prevent symlink attacks but definetely helps to identify them
[common] don't hardcode max path size
[dlclose] add logging messages around unloading libraries
[common] use a standard fn to dlopen libraries and print load path info
might be useful to detect LD_PRELOAD attack
[crypto] nss: be more clear about shut down/unload situation
[tests] fix crypto test to deal with new nss dlopen space
[nss] clear error before dlopen
[nss] warn the users that library cannot be unloaded
[crypto] fix libnss horror show to avoid leaking memory
libnss simply can't be unloaded at runtime as it leaks memory.
switch back to the hold atexit code and don't allow unloading
of the library.
[crypto] handle properly errors reported from .init functions
[crypto] fix libnss unload crash and remove that atexit horror show
[crypto] fix libref count the same way as compress
[compress] centralize handling of libref in compress abstraction layer
the complexity come from a mix and match of those modules that
have/don't have .is_init/.init functions, and makes handling
more delicate.
This commit ensures that:
- library is loaded only once (makes load_lib mandatory for every modules)
- use knet_h->compress_int_data to track per handle init.
modules providing .is_init,.init don't need set anything there
unless they need to.
- modules don't need to track libref anymore but they must
provide a unload_lib/load_lib.
- library are closed only once libref is 0.
[crypto] move libnss to a dlopen model (pass 1)
unload and exit will coredump for now
[dlopen] implement dlopen rate limit to avoid RX DoS
[global] update notes to package maintainers
[compress] fix internal ref count for library unload
[compress] switch to new load_lib / unload_lib API
[compress] fix error message to be more explicit
[dlopen] start to cleanup the compress module API
[build] consistent error message
[build] move hardcoding of linking libraries in one place and enforce better check
[compress] move bzip2 to dlopen model
[compress] cleanup dlerror before dlopen for lzma
[compress] cosmetic cleanup... (part 2)
[compress] cosmetic cleanup
[compress] move lzma to dlopen model
[compress] move lz4 to dlopen model
[compress] make sure lib handles are clean after dlclose
[compress] move zlib to dlopen model
[compress] fix library init to work for multiple knet_handle
[compression] simplify lzo2 dlopen code handling
code is still broken when using multiple knet_handle
[compression] move lzo2 to dlopen model and fix internal api
this commit breaks all other compression modules for now
[test] add the test file
[compress] only initialize compress library on demand
[test] don't run api_knet_handle_new_limit by default
it takes more than 20GB of ram and special ulimit settings.
[handle] implement open knet_handle tracker
limit the number of open knet_handle to UINT8_MAX for now.
UINT8_MAX requires approx 20GB of RAM only for init and more
than 1024 fds (tune your ulimit as necessary) without taking
into account fds required for links
2017-08-24 Christine Caulfield <ccaulfie@redhat.com>
libknet: some FreeBSD compatibility fixes.
Also add support for KNET_LINK_FLAG_TRAFFICHIPRIO on FreeBSD
2017-08-21 Chrissie Caulfield <ccaulfie@redhat.com>
add knet_handle_get_stats (#49)
* stats: Add compression and crypto statistics
New stats structures shows how effective the compression is, and
also the compression/decompression overhead time.
Crypto stats show the byte overhead of the crypto library as well as the time taken
to sign/encrypt and decrypt the packets.
Signed-off-by: Christine Caulfield <ccaulfie@redhat.com>
2017-08-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] drop -lpthread from pkg-config
2017-08-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] fix knet_bench usage
[build] fix several hanging bits after compress/crypto optional builds
[build] allow optional build of nss crypto support
[build] rename nsscrypto to crypto_nss and match compress module names
[build] fix SCTP support build
2017-08-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[compress] fix build to allow --disable-compress-all --enable-compress-$foo
disable all but build $foo...
[compression] change test from ERROR to SKIP
[compress] report error from knet_handle_compress api test if there is no zlib builtin
[compress] update api_knet_send_compress test
[compress] split init and config functions
2017-08-17 Christine Caulfield <ccaulfie@redhat.com>
[compress] fix some Itaglish & a trailing space
2017-08-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[compress] fix test suite build
[compress] allow conditional builds of compress modules
[compress] prepare internal structs and code to allow selection of compression models
[compress] add pkg-config support for lzo2
recent versions of lzo2 have pkg-config support. Use it when available or
fall back to old detection method.
[compress] add bzip2 support
[compression] update libknet.h for lzma
[compress] add lzma support
update also the memcheck exception file for valgrind. those updates
are strictly for lzma internal calls and they work on both rhel7
and fedora 25.
[compression] remove debugging code
[compress] add support for lzo2 compression
[testing] add knet_send with all crypto modules test
[compress] add support for threshold (don't compress packets smaller than X)
[compress zlib] fix log levels around
[compress lz4] fix log levels around
[compress] remove stray debugging entry
[compress] add support for lz4 and lz4hc compress mechanism
[compress] fix header define
[packaging] add explicit build dependencies
[compress] add userdata compression support
- implement generic plugin for compression
- add zlib compression support
2017-08-07 Christine Caulfield <ccaulfie@redhat.com>
loopback: Optimise loopback sending
If a packet is only sent via loopback then don't bother
fragmenting or encypting it.
2017-08-04 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #48 from chrissie-c/loopback-single
loopback: Only allow 1 link to localhost if loopback is used.
2017-08-04 Christine Caulfield <ccaulfie@redhat.com>
loopback: Fix some errno assignments that should have been to savederrno
2017-08-03 Christine Caulfield <ccaulfie@redhat.com>
loopback: Only allow 1 link to localhost if loopback is used.
If loopback is configured as a link transport to localhost then
no other transport makes sense and could actually cause
duplicate packets to be received. So now it's enforced and tested.
2017-08-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] minor "make my OCD more quiet" cleanups
[tx] use loopback logging
[crypto] use unique name to avoid collision with other plugins
[logging] add loopback nice name
2017-08-02 Fabio M. Di Nitto <fdinitto@redhat.com>
[transport] minor nitpick
2017-08-01 Christine Caulfield <ccaulfie@redhat.com>
libknet: Add LOOPBACK transport
KNET_TRANSPORT_LOOPBACK is a transport designed for
high-speed communication internal to the local node. Data
packets are copied directly from the sendfd to the
receiving fd. The calling program must make sure that
data is removed from the receiving fd in a timely manner.
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
2017-07-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #47 from jnpkrn/build+init
Build+init cleanups
2017-07-31 Jan Pokorný <jpokorny@redhat.com>
[init] service file: drop no longer available ControlGroup= option
Support for that was dropped in systemd 205[1]. To be able to get RT
priority regardless of the runtime control groups (Linux-specific),
there's a precedent solution for corosync[2], should it be needed.
[1] https://lists.freedesktop.org/archives/systemd-devel/2013-July/011679.html
[2] https://github.com/corosync/corosync/pull/231
[build] configure: avoid confusion wrt. what's enabled by default
2017-07-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] use newly create kronosnet release team gpgkey
[build] enable release script / publishing bits
[build] make maintainer-clean clean also after a release
[build] add Cluster Release Team signing key
2017-07-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #46 from jnpkrn/build-release.mk
[build] release.mk: adapt recent changes from libqb (fence-agents)
2017-07-28 Jan Pokorný <jpokorny@redhat.com>
[build] release.mk: reflect current release publishing practice
Core author(s) had previous affiliation with project hosting on
fedorahosted.org, but since the sunset of that hosting[1], it's no
longer an option.
Unfortunately, publish-by-scp convenience of fedorahosted.org won't fly
with GitHub that insists on the (primarily REST) API to get things
automated, so update "publish" recipe to that effect, providing some
hints on possible adaption of the process.
Also, turn "git push --tags" to a bit safer "git push --follow-tags"
for good measure.
[1] https://lists.fedoraproject.org/archives/list/announce@lists.fedoraproject.org/message/BWSMCGZPPNG3JOCFQ6Z74MIBU7FG3KGB/
[build] release.mk: simplify the default goal, declare .PHONY targets
The default goal line now serves mainly the documentation purpose,
otherwise it could be squashed down to "sign" target.
[build] release.mk: move soft guard for no GPG key up the supply chain
It also means the missing key specification is now a hard error when
ASCII armored files are to be created (directly or by other rules).
Leveraging the previous commit, it is now unnecessary to guard against
release mode not being requested, so this guard is dropped completely
in the transition, allowing for the full-fledged (incl. GPG signing)
release delivery testing without mangling with in-tree tags.
To allow "sign" target to (possibly eventually) become the implicit goal
even if "gpgsignkey" variable is explicitly unspecified, make it depend
on $(deliverables).
[build] release.mk: fix no-release conflict (implied-required version)
Previously, generating custom versioned tarballs without requiring
a "release" (which comprises also tagging hence in turn making the
implied version match the required one as desired) would not allow
to test the release routines thoroughly incl. GPG signing.
Unfortunately, allowing for a temporary tag is prone to accidentally
slipping it to the distributed tree, so that should rather be avoided
Now it can.
Another step to blur the boundaries between whether "release" is
specified or not is to make checksums file generated unconditionally.
Also both pre-existing and the newly created (per the above scenario)
"overhead" files arising from make/release.mk are git-ignored properly.
[build] release.mk: simplify/generalize GPG signing rule
...especially in case we want to easily switch to signing also
particular archives, which may be a reasonable expectation from some
downstream/distro maintainers (as demonstrated with the libqb's
example[1] where this changeset was picked from a followup PR[2],
respectively its adaptation for fence-agents[3]).
Since this commit, such a change is a matter of only swapping
a prerequisities specification for "sign" target per the commented
out suggestion.
For that to work reliably even after such a change, for the complete
dependency backtrack, though, a pre-existing issue with parallelized
work on the prerequisites needs to be fixed first. The (currently
hypothetical) problem is "tarballs" (phony) target missing in the
linearized supply chain for the signed tarballs, as opposed to supply
chain for the checksums file that can be worked on in an (unordered!)
interleave with the work on these signed tarballs. Hence fix this
(currently hypothetical) race condition by stretching "tarballs" target
as progress barrier (using it as a prerequisite) uniformly for all
the deliverables that are going to be signed (as opposed to the
currently only "sha256" target). And when at it, make "deliverables"
variable list them conveniently (along with reformatting definitions
of other variables for uniformity).
[1] https://github.com/ClusterLabs/libqb/issues/145#issuecomment-306640694
[2] https://github.com/ClusterLabs/libqb/pull/260
[3] https://github.com/ClusterLabs/fence-agents/pull/123
2017-07-24 Christine Caulfield <ccaulfie@redhat.com>
libknet: Small fixes for errors found by GCC 7.1
2017-07-18 Christine Caulfield <ccaulfie@redhat.com>
libknet.h: change some status values from bitfield to uint8_t
Bitfields are a pain and you can't take the address of them
which makes it hard for cosoync stats to deal with the values
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
2017-07-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[nss] expand error reporting with proper error strings
thanks Honza for adding some of them in the previous commits
[crypto] set default case for key_type and avoid build warnings
when key_type is unknown, gcc complains that cipher can be used
uninitialized.
add default case to catch wrong callers and avoid build warning
[crypto] cleanup inconsistent whitespacing
Merge pull request #44 from jfriesse/fips-enable
Fips enable
2017-07-11 Jan Friesse <jfriesse@redhat.com>
[knet.h] Reduce KNET_MIN_KEY_LEN
By reducing KNET_MIN_KEY_LEN we allow FIPS enabled system using NSS to
import (unwrap) the key.
[nsscrypto] Use different method to import key
PK11_ImportSymKey doesn't work when FIPS is enabled because NSS is
targeting to FIPS Level 2 where loading of unencrypted symmetric
key is prohibited.
FIPS Level 2 is hard to achieve without breaking compatibility so patch
implements "workaround" to make NSS behave like FIPS Level 1
(where is allowed to load unencrypted symmetric key).
Workaround is about using temporal key to encrypt corosync authkey in
memory and then to unwrap it into valid NSS key.
Also when FIPS is enabled, it's not currently (nss 3.30.2) possible to
unwrap key larger than 256 bytes.
[nsscrypto] Refactor symmetric key importing
2017-06-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[stats] add doc details in the stat header
[link] switch link_get_status to write lock
previous to the introduction of detailed link stats, the values
contained in the status structure would hardly change over time
making a rdlock more than enough to get the right data.
Now that the values are updated constantly, we need to remove
the window of thread X writing values and thread Y to read them
while being written.
2017-06-20 Chrissie Caulfield <ccaulfie@redhat.com>
libknet: Add link stats (#43)
* libknet: Add link stats
This patch also includes an ABI change to knet_link_get_status()
(as well as returning a load of stats) that should allow us to
add more stats at a later stage without ballooning memory use
with pads or crashing earlier-linked programs with structure
overwrites.
kronosnetd compiles but has not been tested...
2017-06-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[rx/tx] Increase RX buffers to 512 (new-tx branch)
latency is still much lower than current udpu and throughput
for small packets is much better
[kronosnetd] fix build with new link flags
2017-06-09 Christine Caulfield <ccaulfie@redhat.com>
libknet: Add link flag for 'hi' (interactive) priority
Rather than make it the default, this is now a link option.
Corosync needs it but other applications probably will not.
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
2017-06-08 Christine Caulfield <ccaulfie@redhat.com>
libknet: Add 'flags' parameter to knet_link_[gs]et_config()
I have at least 1 flag planned but I'm sure there's plenty of scope
for more. Also trying to get the API changes out of the way ready
for the cluster summit in September.
2017-06-04 Fabio M. Di Nitto <fdinitto@redhat.com>
Reduce TX memory further down by some MB
[tx/rx] reduce memory footprint and latency
reduce memory usage by approx 16MB and drop min/avg latency
for some workloads
2017-06-03 Fabio M. Di Nitto <fdinitto@redhat.com>
Resolves signed-unsigned comparison warnings
Patch based on:
commit 730a8b6a56820741b361e0907eecb6297a9f0348
Author: Michael Jones <jonesmz@jonesmz.com>
Resolves: https://github.com/fabbione/kronosnet/pull/40
2017-06-03 Michael Jones <jonesmz@jonesmz.com>
Fixes format=signedness related warnings
Adds additional warning flags to the compiler, no new warnings unhidden
2017-05-26 Christine Caulfield <ccaulfie@redhat.com>
[sctp] Don't hold global_rwlock while sleeping.
The SCTP connect and accept threads can do small sleeps
when there are errors. The global_rwlock should not be held
while this is happening.
While the lock is a read lock and doesn't block sending and
receiving in other threads it can cause a deadlock on shutdown.
[libknet] Unlock the global lock if logging pipe is full.
If a write to the logging pipe fails (eg it's busy
waiting on something else, I've seen this in corosync
at shutdown) then we must unlock the global_rwlock
or we'll never get out of this alive.
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
2017-05-11 Christine Caulfield <ccaulfie@redhat.com>
[libknet] Add TC_PRIO_INTERACTIVE to sockets
2017-04-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #36 from liu4480/remove-if-defined-i386
use PRIu64 to replace #if defined(__i386__)
2017-04-19 Bin Liu <bliu@suse.com>
use PRIu64 to replace #if defined(__i386__)
2017-04-13 Christine Caulfield <ccaulfie@redhat.com>
[libknet] Add some includes to allow FreeBSD compilation
Reviewed-by: Fabio M. Di Nitto <fdinitto@redhat.com>
2017-04-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #35 from liu4480/type-fixes
fix compile errors on i386/i686 for knet_bench.c
Resolves: #34
2017-04-13 bliu <bliu@suse.com>
fix compile errors on i386/i686 for knet_bench.c
2017-04-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #33 from liu4480/type-fixes
fix compile errors on i686
2017-04-13 bliu <bliu@suse.com>
fix compile errors on i686
2017-03-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[docs] update slids a tiny bit
2017-03-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[tx] reduce memory usage and memmove on big pckts via better iovec mapping
2017-03-01 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix clang errors
this should fix https://github.com/fabbione/kronosnet/issues/32
2017-02-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #30 from jfriesse/shadow-time
[knet_bench]: Fix shadow declaration of time
2017-02-27 Jan Friesse <jfriesse@redhat.com>
[knet_bench]: Fix shadow declaration of time
2017-02-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[transports] add option to configure reconnect interval
2017-02-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[hb] use savederrno correctly
2017-02-23 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] knet_bench add support for perf-by-time
[tests] add first cut of perf-by-size implementation to knet_bench
Also port to _sendmmsg/_recvmmsg and fix a couple of minor shutdown issues
2017-02-22 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] don't spam for no logs
[transport] fix sendmmsg and recvmmsg wrappers to return correct data
for sendmmsg also don't overwrite the msg_len
2017-02-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[libknet] drop bad doc copy/paste
Merge pull request #29 from liu4480/master
add doc for knet_handle_get_channel in libknet/libknet.h
2017-02-21 Bin Liu <bliu@suse.com>
add doc for knet_handle_get_channel in libknet/libknet.h
2017-02-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] add better header protection
fixes: https://github.com/fabbione/kronosnet/issues/23
[build] Enforce C99 compile option
fixes: https://github.com/fabbione/kronosnet/pull/25
[sctp] fix more occurrences of link -> kn_link
complete 940833bf99b18e14b08c0a5a24402026131a0884
fixes: https://github.com/fabbione/kronosnet/issues/28
[build] don't relink the whole test suite on each change
fixes: https://github.com/fabbione/kronosnet/issues/27
2017-02-17 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #21 from liu4480/master
Fix: remove duplicate judgement of (have_name < 0) in kronosnetd/vty_cli_cmds.c
2017-02-17 Bin Liu <bliu@suse.com>
Fix: remove duplicate judgement of (have_name < 0) in kronosnetd/vty_cli_cmds.c
In line 1087 of kronosnetd/vty_cli_cmds.c, there is a judgement of
(have_name < 0), when have_name < 0, it will return 0, which make
the judge of have_name < 0 in line 1094 will never be executed.
Remove the unnecessary judgement.
2017-02-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] port knet_bench to use internal version recvmmsg
[global] drop usage of recvmmsg inside libknet
as requested by different kernel developers, we should stop
using both sendmmsg and recvmmsg.
as temporary solution use Jan's compat wrappers. the whole TX/RX
code will need review to do a full proper switch since all
error codes will change and propagate differently to transport hooks
and knet_send_sync users
[global] drop usage of sendmmsg inside libknet
as requested by different kernel developers, we should stop
using both sendmmsg and recvmmsg.
as temporary solution use Jan's compat wrappers. the whole TX/RX
code will need review to do a full proper switch since all
error codes will change and propagate differently to transport hooks
and knet_send_sync users
[global] create our own copy of mmsghdr in preparation to drop sendmmsg and recvmmsg
knet_bench will drop mmsghdr when dropping sendmmsg and recvmmsg
[poc] drop PoC sctp-defrag-bug code now that's merged into master
2017-02-14 Fabio M. Di Nitto <fdinitto@redhat.com>
[udp] remember to memset freshly allocated memory
[sctp] drop duplicated definition
[global] revert b525ee6a6b74ec, go back to 64K nodes, and use typedef for nodeid
[tx] increase timeres on TX pressure and reduce log noise
when TX sockets are overloaded, we spend more time spitting out
logs than recovering from the overload. ifdef the logging on
critical path out (still available with debug build).
also drastically reduce the waiting time by 64x.
this changes increases UDP perf on 3 nodes by 200%
[tx] pass pointers around and save some memory
[tx] minor optimization in handling packets < MTU
- reduce of one loop
- reduce one memcpy
- reduce setting a bunch of data
[tx] map any outgoing packets only once and reduce memsets around
[tx] map outgoing packet once per host vs once per host per link
- reduces memsets by 8x
- reduces complexity in resending packets on socket overload
by changing start mmsghdr vs remapping everything all over again
2017-02-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[transport] define value only once
2017-02-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[tx] fix error log
2017-02-05 Fabio M. Di Nitto <fdinitto@redhat.com>
Move TODO list to trello
2017-02-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] Reduce the number of support nodes in a knet from 64K to 256
realistically speaking nobody is ever going to deploy more than 32/64 nodes.
NOTE: this commit changes both onwire and API!
2017-02-02 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] split RX and TX threads in separate files
[send/recv] split code into separate files (step 1)
[send/recv] Unify and simplify usage of seq_num in packets
IMPORTANT: this commit changes onwire protocol in an incompatible way!
- remove the concet of bcast and mcast seq num and use one tx_seq_num
- stop using LINK_UP_DOWN messages to broadcast node seq num and
transfer this data inside heartbeat messages
- LINK_UP_DOWN messages are currently unused but let's keep the
infrastructure around for future
- minor cleanup in host_set_policy to confirm change of switching
policy in the logs
- _link_updown should use async call to host dstcache update
due to locking context
- switch knet_link_set_enable to use write locking context
since the only reason it was read lock, was due to the need
to send LINK_UP_DOWN messages
- knet_link_set_priority can now use dstcache in sync mode
- add seq_num and heartbeat type (timed/untimed) data to heartbeat
messages. timed messages are generated regularly by hb_thread.
untimed messages are generated by the TX thread to sync seq_num
on heavy load across all connected node. (see comments in the code)
- access to the node seq_num is now mutex locked
- abstract ability to send pings from multiple threads
- special case seq_num == 0 to detect a node crash and coming back
to life before hb_thread can detect the disconnection
- forcefully send ping in the TX thread every SEQ_MAX / 8 packets
to allow nodes to sync seq_num
- optimize TX thread code to prepare the outgoing buffers once
vs multiple times. There is still work that can be done here
to optimize sending to multiple host, but this change
is intrusive enough already as it is
- add logic to clear circular buffers when receiving pings
[sctp] Allow internal IPC to operate under RX pressure
2017-01-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[rpm] disable build of poc code
2017-01-27 Christine Caulfield <ccaulfie@redhat.com>
[compat] Fix FreeBSD defines
We need to undefine HAVE_RECVMMSG & HAVE_SENDMMSG for it to compile
on FreeBSD (not sure how that ever worked before).
There is a PR for FreeBSD to fix the recvmmsg bug, but it's not in
a released update yet. So with luck we can remove this soon-ish
https://github.com/freebsd/freebsd/commit/3fa64907439c00965fb0cbb222a6bf073c452630
2017-01-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] remove completely broken host to host communication locking system
the original idea was to have a host-to-host (semi-)reliable communication protocol
but that just isn't possible without flow control and retransmit
IIRC the only side affect of this missing lock is a corner case where:
1) node A totally crashes
2) node A come backs to life, sends it's status info (seq_num information)
3) node B does NOT receive the status info
4) node A starts sending traffic and a few packets might get lost
this will be solved when rewriting the TX thread to optimize the seq_num handling
[send/recv] make sure to unlock dsthost thread under certain errors
[transport] make sctp tx error handling more robust and avoid spinning on dead sockets
Update TODO
[build] add build option to enable/disable poc code
2017-01-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[transport] fix support for dynamic links connections
- add internal transport API for handling incoming dynamic connections (both UDP and SCTP)
- fix copy/compare address code in RX thread
- make sure to reset sockaddr_storage len in iov
[netutils] cleanup cmpaddr and add cpyaddrport
cpyaddrport specifically copies _only_ address and port and skip
over other fields that are unnecessary for what we need
2017-01-26 Christine Caulfield <ccaulfie@redhat.com>
compat: make it work on FreeBSD
Although FreeBSD 11 has sendmmsg & recvmmsg wrappers, they
don't quite work the same as Linux so I've enabled the (fixed)
compat versions for that platform.
make check now works on FreeBSD 11
2017-01-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[kronosnetd] add support for multiple transports
2017-01-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
[send/recv] simplify _parse_recv_from_links internal API
[transports] add support for transport_tx_sock_error
add IP_RECVERR for UDP to better handle errors on TX sockets
[PMTUd] Fix global pmtud calculation
2017-01-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Merge pull request #20 from jonesmz/travis-ci-for-pull-request
Adds Travis CI continuous integration configuration file
[transports] SCTP: handle short reads on sockets
- fix trasport is_data API
- handle per accepted socket reassembly buffer by changing fd_tracker
data for incoming connections
- allow in-kernel SCTP fragmentation again
- use MSG_EOR on a per socket base to reassemble partial packet delivery
- fix some whitespaces around
2017-01-24 Michael Jones <jonesmz@jonesmz.com>
Adds Travis CI continuous integration configuration file
2017-01-24 Christine Caulfield <ccaulfie@redhat.com>
transport: Rename 'link' to 'kn_link' so it doesn't conflict with libc
2017-01-23 Christine Caulfield <ccaulfie@redhat.com>
poc: add option to check CRCs in sctp_defrag_bug
2017-01-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[PoC] implement EOR handling code for short reads
2017-01-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[poc] add sctp potential fragmentation bug trigger
[build] drop last bits of common/
[transport] remove duplicate code
2017-01-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
[transport] add knet_handle_get_transport_id_by_name api
[transport] add knet_handle_get_transport_name_by_id api call
also fix a counter in knet_handle_get_transport_name_by_id
[transport] add knet_handle_get_transport_list api call
[handle] fix error messages
2017-01-17 Christine Caulfield <ccaulfie@redhat.com>
[compat] Fix some includes for FreeBSD
2017-01-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[compat] minor cleanup on the autotool stuff
2017-01-17 Christine Caulfield <ccaulfie@redhat.com>
general: Add compatibility code & #ifdefs
This is enough to get knet compiling on FreeBSD 11 and bits of it
working. It's nowhere near ready on BSD though, more work is needed,
but given the fast pace of development it's best to get this in now
rather than track it in a separate branch.
2017-01-17 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
Update TODO
2017-01-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[api] add commodity functions to convert to/from strings/sockaddress
functions are nothing more than wrappers for getnameinfo and getaddrinfo
with some sanity checks, but exposing them around saves lots of
maintanance of duplicate code across different stuff.
2017-01-16 Christine Caulfield <ccaulfie@redhat.com>
host: Remove host_tail as it's not used.
it also had a bug which could cause knet to crash after a host was
removed.
This patch puts new nodes at the front of the list rather than at the
end, but I don't think this is a problem.
2017-01-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[test] fix comment
[sctp] enable workaround for in-kernel fragmentation issue
[test] kill obsoleted ping_test
Update TODO
[sctp] port sctp to the new API and fix many issues
- use the new transport API
- fix locking context around to avoid race conditions and deadlocking
- fix shutdown code (segfaults and core dumps)
- properly differentiate between connecting sockets and accepted sockets
and better use of fd_tracker
- abstract as much as possible socket management code from threads
- add lots of comments and debugging messages around
- simplify socket error management reported from RX thread
- rework loop timers for connect_thread to avoid thread overload
- reduce usage of _transport_addrtostr to one call and reuse
link information around
- improve error handling across the board
- stop using data structs inside epolls and switch back to using fds
this was necessary to avoid processing stale data from epolls
and look up data from fd_tracket instead
- add listener stop function
- make functions safer to be called multiple times
- probably more.. but can't remember
NOTE: this is not the most elegant code, but it seems to be doing its job
fine.
[heartbeat] reset PMTUd on link down to trigger a new PMTUd when link come back online
[PMTUd] fail early if transport is not connected
[heartbeat] and make it a tiny little bit faster when transport is not connected
[heartbeat] make better use of transport_connected option
2017-01-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[sockets] move socketpair code into transport common code
also use _configure_common_socket for cloexec/nonblock and rx/tx buffers
that should be the same for all socketpairs, outgoing and incoming sockets
[dstthread] make sure not to get caught in signal when reading from socket
[host] make sure not to get caught in signal when sending host updates
2017-01-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[transports] drop fd_tracker locking in favour of global locking
[udp] drop unnecessary list locking
2017-01-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[SCTP] temporary disable SCTP support while we fix the implementation
not the best solution, but it's a quick one to allow master to build again
[send/recv] report correct errno
Revert "[heartbeat] temporary disable usage of transport_connected"
This reverts commit 75ca10991fa3e0d9bc8cd9706395ff0e2bc62c38.
whops.. pushed in the wrong branch by mistake
[heartbeat] temporary disable usage of transport_connected
this will make it easier to stabilize SCTP and connection oriented
protocols
2017-01-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[transports] major rework of APIs and ABIs!
This commit breaks APIs and ABIs and this changelog might be missing
a bit or 5.
External visible changes:
- Change link initialization process API:
The old method:
- link_set_config -> link_enable
where link_set_config would simply store config data (sockaddr and
such) in the link struct and link_enable would create sockets and
do the magic. This method didn't work well for complex transports
such as SCTP and introduced a series of race conditions and deadlocks.
The new method:
- link_set_config would now store config in link struct AND create
all related sockets and such. The link will not be used for data
traffic till enabled.
- link_set_enable will enable/disable the link for traffic (including
heartbeat) and requires a link to be configured (as before)
- link_clear_config (new API) can/has to be called after disabling
a link to close all connections and sockets (free resources).
Internal changes:
- Drop the concept of listeners.* and delegate those to
underlying transports.
- Add the concept of fd_tracker. Each transport is required and it is
responsible to update the fd_tracking array for the fd that the
transport itself is creating/using/clearing.
The fd_tracker is required to perform fast lookups on socket
errors and RX thread to determine what code is responsible to parse
given conditions such as errors from the sockets or OOB data/notifications.
- Introduce the concept of link->transport_connected.
In case the transport requires socket connection to the other end (SCTP for
example), set to 0 while disconnected and set 1 once connected to the other
side. This flag will avoid unnecessary errors generated from the TX threads.
NOTE: still needs better plumbing around. For now it's only partially used
in the heartbeat thread. UDP sets to 1 by default.
- Rework the transport API to be easier to use.
- If a transport is not available, get_XXXX_transport() should return NULL.
- A transport that provides &XXXX_transport_ops MUST have all operations
implemented as described in internals.h. This is required to skip tons
of if/else checks on fast code paths.
- Improve documentation of the transport API in internals.h.
- transport common: drop some unnecessary functions for now, they might
can back later in better format once SCTP is working again.
- provide a locked/unlocked version of _set_fd_tracker but this is an
artifact of trying to fix SCTP deadlocking. _set_fd_tracker should
always be locked.
- cleanup transport_udp.c to match the new API and perform better
error handling and better cleaning in case of errors.
- switch mtu_overhead to constant from call into a function.
- drop usage of _transport_addrtostr/_transport_addrtostr_free for all but
accepting incoming SCTP connections. All other datas are already available
and it's unnecessary to perform extra lookups. This will eventually
move to a proper knet_api and avoid completely the need to build with --debug.
- RX thread:
- use the new transport hooks to handle socket errors and
determine if a packet is data or internal OOB info.
- remove the last transport specific bits and move them into
transport implementation itself.
- Test suite:
- Update the test suite to deal with the new API changes
- Fix a couple of shutdown problems in knet_bench
- Fix a shutdown issue in test-common.c
- Document the whole recvmmsg API in details, based on kernel
implementation. recvmmsg man page is incorrect.
- Fix kronosnetd to use the new APIs
2016-12-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] remove stray unlock operation
2016-12-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[logging] rename KNET_SUB_SCTP_LINK_T to KNET_SUB_TRANSP_SCTP
[logging] rename KNET_SUB_UDP_LINK_T to KNET_SUB_TRANSP_UDP
[logging] rename KNET_SUB_LINK_T to KNET_SUB_RX
[logging] rename KNET_SUB_SEND_T to KNET_SUB_TX
[logging] rename KNET_SUB_PMTUD_T to KNET_SUB_PMTUD
[logging] rename KNET_SUB_HB_T to KNET_SUB_HEARTBEAT
[logging] rename KNET_SUB_TRANSPORT_T to KNET_SUB_TRANSPORT
[logging] rename KNET_SUB_SWITCH_T to KNET_SUB_DSTCACHE
[logging] assign blocks to different logging subsystems
- drop KNET_SUB_PMTUD that was unused
- add KNET_SUB_TRANSPORT_T that was missing
- switch from "common" to "unknown" for odd logging
- fix up code around to allow holes in the structs
- fix up test suite
2016-12-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] adjust all values around new transports
[build] cleanup conditionals to build SCTP and other protocols
Unsupported protocols just need to return NULL on get_PROTO_transport
and contain all protocol conditionals within the transport_PROTO.c.
There is still one conditional in RX/TX thread that needs cleaning
but it's a rather complex operation and leave it in for now.
[transports] initialize transports with knet_handle and protects from missing proto ops
[listener] drop unnecessary debugging code
2016-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[sctp] _handle_incoming_sctp don't leak accepted_socks on errors
add a check to verify max connections or we will leak FDs somewhere at some point
[logging] threads should have _t naming
2016-12-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[sctp] don't pass notification packets to the decoder
2016-12-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] make SCTP build optional (default: on)
2016-12-16 Christine Caulfield <ccaulfie@redhat.com>
sctp: Fix a couple of crashes & tidy on_epoll usage
Also fix locking in sctp shutdown
2016-12-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] don't leak pam libraries all over the place
[links] fix segfault when using dynamic ip addresses
Update TODO list
[build] cleanup configure.ac and Makefile.am
- check for libqb only if building kronosnetd
- check for SCTP headers and fails if we don't find them
- export DEBUG conditional in Makefiles
- conditionally include netutils.c for DEBUG
[rpm] fix BuildRequires for SCTP
[kronosnetd] Fix build after SCTP merge
Default to UDP for now, add support for multiple protocols later on
[libknet] fix typo
2016-12-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Merge pull request #18 from chrissie-c/topic-cc-transports
Factor out protocol code and add new ones
2016-12-13 Christine Caulfield <ccaulfie@redhat.com>
internals: Finish renaming QB_LISt macros to KNET_LIST
libknet: Fix things raised in review
2016-12-02 Christine Caulfield <ccaulfie@redhat.com>
libknet:add TCP transport
libknet: add SCTP transport
libknet: Add support for multiple transports
Changes the API to add transport to
knet_link_set_config & knet_link_get_config
libknet: Factor out UDP into its own file
With a transport_common file for protocol-independant things.
2016-11-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[poc] remove iov-enc code now merged in master
[tests] Add knet_bench as more flexible replacement for ping_test
[send/recv] Fix bug in handling HOSTINFO packets seq num
the bcast/ucast seq num were being mixed up, causing packet
loss on link up/down (also in active mode).
2016-11-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add facility to stop a whole knet handle in one shot
[tests] allow scheduler to be configured and allow start_logging to be called multiple times safely
also test crypto_bench with multiple schedulers
2016-11-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] use SCHED_RR for crypto_bench
2016-11-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add options to configure scheduler
[tests] move crypto bench to use start_logging
[tests] add knet logs: prefix when no logs are being recorded
[tests] add warning on when to use or not to use start_logging
[tests] Fix Makefile.am to build check_PROGRAMS
[tests] add logging thread support to simplify writing tests
2016-11-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #16 from miz-take/prototype
saved errno when epoll_ctl failed
2016-11-15 Takeshi MIZUTA <miz.take4@gmail.com>
saved errno when epoll_ctl failed
2016-11-15 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[tests] rename fun_crypto_benchmark to crypto_bench
and create a benchmark section in tests/Makefile.am
[tests] fix up input handling on crypto tests
[crypto] drop the unnecessary hash_block code
this was a leftover from corosync port of the code and it was
a failsafe for buffer allocation apparently. buffer allocation
was completely reworked in corosync to dynamically account for
headers and so on.
this also removes one memcpy and shave some more time in hashing
operations.
[tests] dynamically allocate memory for int_crypto_test
and make it easier to extend text to some input boundaries.
also make check-memcheck doesn't appear to spot bad memory access
on allocated-on-stack buffers
[test] move benchmark outside of regular testing
[crypto] cleanup some headers and drop duplicate code
[crypto] introduce (nss)crypto_encrypt_and_signv
and move crypto_encrypt_and_sign to use the v version.
[poc] add io-hashing PoC
[tests] fix hello world! test
2016-11-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] Add basic functional crypto benchmark test
2016-11-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add internal crypto basic test
Fix build with different gcc
Integrate it all with build
Simplify build of poc-code
Simplify even further. EncContext tracks the location of the buffer and doesn't care about tmp_len
fix PoC to handle buffer data alignment
2016-11-05 Fabio M. Di Nitto <fdinitto@redhat.com>
Add libnss iovec PoC
this is a small modified version of the code example available here:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/nss_sample_code/NSS_Sample_Code_sample2
to show that it is possible to encrypt from multiple src buffers
into a final buffer.
this approach will allow us to remove a lot of memcpy around the
recv/send thread and replace them with iovec mapping all across.
Possible side effects:
- less memory consumption (mapping vs allocating)
- more complex code / crypto (internal) API changes
Add poc-code directory and move access-list code from Chrissie there
Over time we have created a lot of small PoC code to make knet better.
Most of it is already integrated but other chunks are still floating around.
I prefer to keep them here so that:
1) they don't get lost
2) it will be easier to integrate them once we get to that point
3) we can share PoC and work on them together
Add notes for package maintainers
2016-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] use rpm bcond for a more elegant solution to override ./configure defaults
[build] fix spec/srpm/rpm build
build only packages that we are configuring for (--enable-libtap,
--enable-kronosnetd) and have spec file depends on the latest
configure run to regenerate the info
2016-10-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] fix make distcheck to include kronostned/libtap coverage
[build] fix conditional build to pass make distcheck
[tests] fix return code checking
spotted by gcc 5.3.1
Merge pull request #15 from chrissie-c/master
config: Make libtap & kronosnetd optional
2016-10-21 Christine Caulfield <ccaulfie@redhat.com>
Make sure we build libtap if kronosnetd is also being built
I didn't think it worth checking for and using local libtap,
if anybody else wants that I will take patches.
config: Make libtap & kronosnetd optional
2016-10-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #14 from jfriesse/include-compat-h
[libknet] Really use compat when needed
2016-10-19 Jan Friesse <jfriesse@redhat.com>
[libknet] Really use compat when needed
Previous patch added compatatibility layer for systems without
(recv|send)mmsg but sadly forgot include compat.h when needed.
2016-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #13 from jfriesse/genericmmsg
[libknet] Support systems without (send|recv)mmsg
2016-10-18 Jan Friesse <jfriesse@redhat.com>
[libknet] Support systems without (send|recv)mmsg
Implemented are generic (slightly reduced functionality) functions and
for systems with syscall available but libc prototypes unavailable
also syscall wrapper.
2016-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] err is never <0 in that code path
[listener] fix listener sock configuration to match other sockets
add send buffer and avoid EAGAIN issues on high load by delegating
buffering to the kernel
2016-10-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #12 from jfriesse/lib64
[build] Make sure lib64 is used when available
Merge pull request #11 from jfriesse/donotoverridesyncindex
[libknet] Do not override symbols
Merge pull request #10 from jfriesse/removeprlimit
[libknet] Use getrlimit instead of prlimit
2016-10-13 Jan Friesse <jfriesse@redhat.com>
[build] Make sure lib64 is used when available
Default location for libraries is PREFIX/usr/lib. This doesn't work well
on systems with mixed 64 and 32-bit libs.
[libknet] Do not override symbols
sync and index are both stdlib symbols so it's better not to use them as
function arguments.
[libknet] Use getrlimit instead of prlimit
prlimit is Linux specific. Because passed pid is 0, we can replace
prlimit call by portable getrlimit without loose of functionality.
2016-09-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] Enable pmtud setfreq test in helgrind context
update helgrind suppression file
[PMTUd] rewrite thread to follow the same footsteps of heartbeat thread
drop all those notification mechanisms that are a locking nightmare
with very little to none gain and use a loop similar to heartbeat.
Also break down the code in 3 sections:
- main thread loop
- pmtud data gathering per link
- pmtud data gathering for all hosts/links
[threads] move thread timer resolution to common section
2016-09-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] move all API checks makefile bits to a separate file
prepare for int(ernal)_ and fun(ctional)_ tests
[tests] drop normal info and leave only progress/warnings/errors
[tests] Add knet_handle_enable_pmtud_notify tests
[tests] remove unnecessary host_remove
[tests] Add knet_handle_pmtud_get tests
[PMTUd] Fix knet_handle_pmtud_get API sanity checks
[tests] Add knet_handle_pmtud_getfreq tests
[PMTUd] Fix getfreq API check
Revert "[tests] enable memcheck and helgrind checks by default"
This reverts commit 7d3ca6729c224c6a592a71ba8813f3d5b811912c.
[tests] enable memcheck and helgrind checks by default
2016-09-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add api_knet_handle_pmtud_setfreq tests
currently not enabled for helgrind checks. PMTUd thread needs a good rewrite first
but the API is fine.
[tests] expand knet_send for basic send checks
[tests] add api_knet_send_sync tests and update helgrind suppression file
[send/recv] Fix checks for knet_send_sync and move sync test earlier
[tests] print warnings for tests with exception enabled
[tests] export check type to all tests
This allows to skip/warn on some tests while we fix the PMTUd thread
2016-09-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] remove stray line
2016-09-04 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_send tests
[handle] Allow threads to recognized shutdown before stopping them.
On busy threads and shutdown, there is a chance that the thread
didn't have time to process the shutdown requests and even tho
we are closing down, some locks can be destroyed while still locked.
In theory we could have each thread report that it has ack'ed the shutdown
and then close, but a sleep seems to be more than good enough for now.
[send/recv] reworking locking on send to link
protect reading of datafd when processing outgoing data
and avoid unnecessary double locking in _handle_send_to_links
(calling functions both uses locking already).
[handle] expand knet_send input sanity checks
[tests] fix ping_test to deal with knet_recv API fixes
[tests] fix memcpm test and typos
2016-09-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] Add knet_recv tests
[handle] fix checks around knet_recv
2016-08-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_handle_get_datafd tests
[tests] add knet_handle_get_channel tests
[tests] add knet_handle_remove_datafd tests
[tests] add knet_handle_add_datafd tests
[tests] drop suprious cleanup entry
[tests] add knet_handle_enable_sock_notify tests
[tests] add knet_handle_enable_filter tests
2016-08-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_host_enable_status_change_notify tests
[tests] add knet_host_get_status tests
2016-08-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_link_get_status tests
[tests] re-order test executions based on class
[tests] align coding style and error checking
[tests] add knet_handle_setfwd tests
2016-08-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] fix nss init/shutdown memory leaks
make nss_init more robust across invokations
[build] separate memcheck and helgrind suppressions files
2016-08-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_handle_crypto tests
[crypto] fix knet_handle_crypto config checks
remove redundant and duplicated code from nsscrypto
2016-08-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] fix out-of-tree path to valgrind suppression file
[build] make clang happy
[crypto] drop redudant checks
spotted by clang
[build] make clang happy
[handle] Fix check for malloc result
spotted by clang
[build] fix configure.ac to deal with clang return codes being weird
when testing for an option alone clang will return a warning and RC=0
unless -Werror is also specified, and that warning switch to RC=1.
[tests] fix missing check for api_knet_link_get_priority
[tests] add knet_link_get_link_list tests
[tests] add knet_link_get_enable tests and fix a potential segfault
[tests] fixup knet_link_set_enable tests
add disable code checking and silence a helgrind warning.
helgrind complains about the heartbeat code writing back to the link
status vs knet_host_add.
knet_host_add is using an wr lock, heartbeat code a read lock.
the heartbeat code is the only one changing two ping timers values.
nothing else in the code is using/changing them.
knet_host_add does a memset at alloc time.
tho, it's impossible to hit the HB code _before_ or _during_ knet_host_add,
therefor it's safe to silence the warning.
2016-08-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_link_set_enable tests
2016-08-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_link_get_priority tests
2016-08-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet_link_set_priority tests
2016-08-05 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add progress message
2016-07-02 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] chose between the lesser of 2 evils
[tests] rename all tests to add postfix _test
2016-07-01 Fabio M. Di Nitto <fdinitto@redhat.com>
[link] rename knet_link_get_timeout to knet_link_get_ping_timers and add related tests
Also in the process, make sure to init timers when configuring a link
and export link defaults in libknet.h
[link] rename knet_link_set_timeout to knet_link_set_ping_timers and related tests
[tests] add knet_link_get_pong_count tests
[tests] fix knet_link_set_pong_count check
[tests] Add knet_link_set_pong_count tests
[tests] remove unused variable
[link] fix knet_link_get_config API and add related tests
2016-06-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[libtap] make testing of symbols more consistent with libknet
[build] be consistent in building libraries and use same export standards
[tests] make it consistent and easier to run check-memcheck and check-helgrind
2016-06-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add api_knet_link_set_config tests
2016-06-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] don't sort output and use header order to display API calls
makes it easier to follow the logic
2016-06-26 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] extend api test coverage to match header and binary exported symbols
[libknet] exports only public API symbols
[tests] fix api_knet_log_set_loglevel incorrect exit sequence
[tests] Add knet_log_get_loglevel tests
[tests] add knet_log_set_loglevel tests
2016-06-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] add comment
[logging] fix knet_log_get_loglevel_id crash, return code and add related tests
[logging] fix knet_log_get_loglevel_name crash, return correct values and add related tests
[logging] Fix knet_log_get_subsystem_name crash, make call consistent and add related tests
[logging] fix knet_log_get_subsystem_id crash and add related tests
2016-06-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] fix possible race condition in accessing host data
bonus: remove a lock used on all threads all the time
cons: traffic can pause more often towards a host if another host links
are not stable
[host] fix knet_host_get_policy API and add related tests
[host] Fix knet_host_set_policy API and add tests
[tests] add knet_host_get_host_list test
[host] fix knet_host_get_id_by_host_name API and add related tests
[host] fix knet_host_get_name_by_host_id API and add related tests
2016-06-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add simple tool to report api testing coverage
2016-06-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] return an error on names that are too long vs truncating
[tests] add api_knet_host_set_name test
[host] fix knet_host_set_name api checks
verify that we actually get a name from the caller
and make sure name is unique or search would break
2016-06-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add knet valgrind suppression file
remove some error reporting for now, since they are known and
harmless race conditions.
[tests] make ping test run under valgrind and init all memory correctly
[send/recv] make sure to initialize memory properly
[send/recv] fix invalid memory access when checking channel values
2016-06-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[tests] add api_knet_host_remove test
2016-06-17 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] move netutils to common dir (take 2)
[host] fix build failure
[global] move netutils to common dir
those will be handy for libknet testing
[tests] add api_knet_host_add test
[host] perform check before locking
[tests] add api_knet_handle_free tests
[logging] rework locking around logging
make sure to check/fill data after locking and complete write
before release the lock.
also use trylock vs lock since most log are called while already
locked and it's cleaner.
[handle] drop redundant check in knet_handle_free
If there are no hosts configured, there are also no listeners configured
[tests] make it clear where log is coming from
and avoid confusion from logs generated from our test suite
[tests] fix some exit paths to flush logs and close fds
2016-06-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[handle] drop redundant check now the the whole process is locked at global level
[tests] add api_knet_handle_new test
[PMTUd] Allow thread to have time to react to shutdown before cancelling the thread
and solves an issue deleting locks (spotted by helgrind) on exit
[handle] cleanup socketpair creation for good
Better version of 1f890b897474352a376b27cfe79365237791d66f
Don't accept fd values higher than max fd allowed by the OS
2016-06-14 Fabio M. Di Nitto <fdinitto@redhat.com>
[threads] fix locking across the board for shutdown
2016-06-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[libtap] make sure memory is init properly (according to valgrind)
[tests] make helgrind errors a failure
[handle] be consistent in applying sockopts around
[handle] fix fd leak and sock option settings
apparently int math has never been my strong side
[tests] fix running tests with valgrin under libtool
Update gitignore
[tests] fix special check include
Revert "[tests] move all tests to top level directory"
This reverts commit d9adee9b923776ea5813b5a024c16a58b8d989c0.
[tests] move all tests to top level directory
[tests] fix libtap test
[test] Add common check for root user
knet tests can't really run as normal user
[tests] add some common facility to run shell codes within tests
code stolen from libtap, but useful to drive iptables and alike during
some tests
Fix core dump on exit path when running as user and related test case.
Drop the max host to 1024 for testing.
[tests] add common return codes as understood by automake
2016-06-12 Fabio M. Di Nitto <fdinitto@redhat.com>
Move libknet tests in their subdir in preparation for proper test suite
[PMTUd] export protocol overhead information
2016-06-11 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[PMTUd] Drop concept of link_mtu and fix data mtu exported values (pass 1)
Cleanup a poor attempt to export all MTU data to the users.
The original idea was to provide information about real link onwire mtu
and max user data mtu (that could be sent on wire without fragmentation)
that adjusted the value for IP protocol, knet header and crypto (if configured).
Effectively there is no use for the real link onwire mtu and it only involves
extra complexity to export lots of extra data to the end user that would have
to redo the calculations internally to gather data mtu.
Also fix the status.mtu value to match knet view of every link.
2016-06-03 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Update TODO list
[PMTUd] fix link instability due to too short PMTUd timeouts
Partially roll back changes from 004bd26a
2016-06-01 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
[socket] internal socketpair should use same recvbuf as any other socket
2016-05-16 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge pull request #4 from mbaldessari/arm-fix
Initialize savederrno variable
2016-05-15 Michele Baldessari <michele@acksyn.org>
Initialize savederrno variable
This fixes an error seen on F23 arm/gcc:
In file included from threads_send_recv.c:26:0:
threads_send_recv.c: In function '_handle_send_to_links_thread':
logging.h:19:2: error: 'savederrno' may be used uninitialized in this
function [-Werror=maybe-uninitialized]
log_msg(knet_h, subsys, KNET_LOG_ERR, fmt, ##args)
^
threads_send_recv.c:475:6: note: 'savederrno' was declared here
int savederrno, docallback = 0;
^
cc1: all warnings being treated as errors
Makefile:843: recipe for target 'libknet_la-threads_send_recv.lo' failed
make[2]: *** [libknet_la-threads_send_recv.lo] Error 1
make[2]: Leaving directory
'/home/jenkins/workspace/kronosnet/arm-fedora-23-gcc/libknet'
Makefile:506: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory
'/home/jenkins/workspace/kronosnet/arm-fedora-23-gcc'
Makefile:417: recipe for target 'all' failed
make: *** [all] Error 2
2016-03-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] fix several issues around PMTUd and improve discovery performances
- Fix a race condition around first time MTU discovery where MTU value
would be out of the wazooo
- Fix a case where onwire MTU value would be smaller than crypto header
and generate errors
- Make MTU value a decision factor if a link is usable or not.
If MTU is not valid (either the discovery process failed) or
the value is not sane, the link will be removed from the available
data link pool till the problem is resolved. Once the problem is
solved the link will recover automatically.
- Have link up/down status trigger a PMTUd process to speed up
detection.
- Add ability to detect smaller MTU than minimum defined by protocol.
- Improve error reporting across the board.
- Make PMTUd timeout dynamic based on current link latency. This change
makes detection of small MTU very fast.
- Sanity check values returned by PMTUD to be in range between
minimum MTU defined by given protocol and maximum that knet can handle.
- Trigger host cache reculaculation on MTU validity change to reduce
risk of packet loss on bad links.
2016-02-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] fix handling of duplicated HOSTINFO pckt with active-active links
[internal] rename list_rwlock to global_rwlock
2016-02-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] fix memory leak in knet_host_add in case of failure
make it easier to read knet_host_remove (no functional changes)
[internal] document usage of mutex and locks
Update TODO list
Update TODO list
2016-02-11 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
2016-02-10 Michele Baldessari <michele@acksyn.org>
[docs] Fix docbook typo
2016-02-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] fix crash when receiving non crypto packets on a crypto socket
[onwire] let's try to be smart and preallocate space for future features
2016-02-09 Michele Baldessari <michele@acksyn.org>
Merge pull request #3 from mbaldessari/wip_overflow_fedora
Fix small string overflow
Fix small string overflow
In file included from /usr/include/stdio.h:936:0,
from ping_test.c:12: In function ‘snprintf’,
inlined from ‘main’ at ping_test.c:504:3: /usr/include/bits/stdio2.h:64:10: error: call to
__builtin___snprintf_chk will always overflow destination buffer [-Werror]
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
Merge pull request #2 from mbaldessari/smatch_fixes
Assorted fixes found via smatch
Fix another indentation issue
Fix equality test
Fix broken indentations
Move len to ssize_t
len is used as a return code for both select()(int) and read()(ssize_t)
so make it an ssize_t type instead of size_t which is unsigned.
Fix error path test equality
2016-02-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2016-02-07 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2016-02-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] add knet_send_sync function
read carefully the doc in libknet.h or suffer the ethernal doom in hell
2016-01-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[sockets] first cut at making socket management more consistent
and fix sendmmsg handling
2016-01-05 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2015-12-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
2015-12-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] rework handling of 0 byte read/write on local sockets
considering there is no obvious use case trying to send 0 byte packets
and that 0 byte packtes are filtered by iovec calls across the all
code, there is no point trying to handle 0 byte differently from
any other socket error.
this commit makes sure that every time there is an error (-1) or a 0
byte read from the locally provided sockets, a call back is issued.
on read errors (-1) the socket will be removed from the epoll
to avoid spinning and it is safe to call knet_handle_remove_datafd
afterwards to remove it completely.
it is now mandatory to enable a sock_notify callback before adding
datafd.
read libknet.h carefully on what the callback is supposed to do
based on the type of socket your application is adding.
2015-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
remove stray comment
2015-12-18 Christine Caulfield <ccaulfie@redhat.com>
[lib] Fix typos & English in libknet.h file
2015-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] deal properly with 0 bytes packets on local sockets
[send/recv] be consistent between readv and recvmmsg handling 0 bytes packets
[PMTUd] improve debug message to add iface mtu
[global] add support for multiple local sockets/fds
WARNING: this commit changes API and onwire protocol
It is now possible to configure multiple local sockets to send/recv
data over the same knet handle.
to every send/recv socket a channel is assigned that behaves more
or less like a VLAN.
hostA channel 0 will be delivered to datafd on hostB channel 0
hostA channel 1 to hostB channel 1
etc.
It is possible to configure up to 32 channel, but there is space
to increase this number if necessary.
New API calls:
knet_handle_add_datafd
knet_handle_remove_datafd
knet_handle_enable_sock_notify
knet_handle_get_channel
knet_handle_get_datafd
Notification has been added in cases where a local socket is the result
of accepting a tcp connection that gets disconnected and corrective
action needs to be taken by the application.
Changed API calls:
knet_handle_new
knet_recv
knet_send
knet_handle_enable_filter
onwire changes:
add one byte to transport channel information
channel information are also passed down to the dst_host_filter
in the event the application has needs to modify that on TX/RX
events.
Internal changes:
cleanup how sockpairs are handled in general to make it simpler
to map application side and internal side.
NOTE: callback function has not been properly tested.
2015-12-16 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[internal] switch from pipe to socketpairs for consistency
[send/recv] add support for recvmmsg on local socket
Update TODO list
2015-12-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO
2015-12-13 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] save some more times dealing with unreachable hosts for mcast pckts
[send/recv] rework commit 1de7acb8 a bit
on the exit thread, kh_node is knet_h->host_id, no point
to convert it N times per packet/frag.
[send/recv] drop too verbose log message and fix comment
[send/recv] remove TODO comment
splitting frags across multiple links is not worth the complexity of
the code or the complexity in re-assemblying the packet if links
are at different speed/status
[send/recv] sort code around
Update TODO list
[send/recv] fix bcast data entry for hostinfo packets
this should address the issue Chrissie reported where
first data packet would vanish in void
2015-12-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] drop redundant check
[send/recv] fix logging levels
Update configure.ac for sendmmsg
[host] cleanup circular buffer function names
Sort TODO list
[host] add host status change callback notifications
API is also ready for further expansion (external and remote support),
but they are currently not implemented.
allow both notifications and polling of status via knet_host_get_status
use new notification and api polling in ping_test.c as unit test
use the new host status information in the TX thread to skip some
time consuming pckt processing if the destination host(s) is not
reachable
2015-12-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] fix data len passed to dst host filter on the RX end
2015-12-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[filters] be consistent and provide private data for all notifications/callbacks
2015-12-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] improve dst_host_filter API to include more data to determine destination
[send/recv] add support for dynamic buffer allocation for packet re-assembly
this commit changes the on-wire protocol.
2015-12-08 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] fix host_id value in host_filter
thanks Chrissie for reporting the problem
2015-11-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] Fix handling of HOSTINFO packets
HOSTINFO packets are nothing more than special cased DATA packets.
The contents of HOSTINFO is stored inside DATA of DATA packets and
up to the point where we need to use the HOSTINFO data, we need
to treat the packets as DATA for defragmentation and deduplication.
This also fixes a problem when using round-robin and active switching
policy where the HOSTINFO exchange would loop forever in a storm
because duplicate pckts were being handled at once.
2015-11-29 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2015-11-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Replace memcpy with memmove across the board
memmove is just a tiny littlebit faster than memcpy.
Update TODO list
Update TODO
[PMTUd] Fix crash and calculation when using crypto
most of the problem was around incorrect typing of variables
and incorrect calculation when using signing without encryption.
2015-11-27 Fabio M. Di Nitto <fdinitto@redhat.com>
[libtap] automatic restore IPv6 address when recovering from MTU flapping
NOTE: if a user manually changes MTU < 1280, your IPv6 addresses
are gone for good.
Update TODO list
2015-11-26 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2015-11-25 Fabio M. Di Nitto <fdinitto@redhat.com>
[crypto] align crypto_authenticate_and_decrypt API to crypto_encrypt_and_sign
2 issues solved by this change:
1) API were different and crypto_authenticate_and_decrypt would trash the
incoming packet, that we might want to keep for later usage
(re-switch for example)
2) By using an extre pre-allocated buffer while decrypting incoming packets
we save a whole memcpy and that reduces latency on crypto communications:
pre-patch:
[root@kronosnet-node1-br0 ~]# ping 192.168.12.2 -f -c 1000 -s 65000
PING 192.168.12.2 (192.168.12.2) 65000(65028) bytes of data.
--- 192.168.12.2 ping statistics ---
1000 packets transmitted, 1000 received, 0% packet loss, time 5302ms
rtt min/avg/max/mdev = 5.102/5.283/22.679/0.947 ms, pipe 3, ipg/ewma 5.307/5.223 ms
post-patch:
[root@kronosnet-node1-br0 ~]# ping 192.168.12.2 -f -c 1000 -s 65000
PING 192.168.12.2 (192.168.12.2) 65000(65028) bytes of data.
--- 192.168.12.2 ping statistics ---
1000 packets transmitted, 1000 received, 0% packet loss, time 5196ms
rtt min/avg/max/mdev = 4.997/5.154/6.661/0.129 ms, ipg/ewma 5.201/5.173 ms
(using aes256 and sha1)
2015-11-22 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] init recv buffer array only once
[internal] define/use PCKT_FRAG_MAX instead of UINT8_MAX
makes the code more readable
Fix error message
[send/recv] use recvmmsg on network sockets
On my test systems this change reduces the latency of fragmented packets
from 0.27ms to 0.235ms in average. There are still some optimizations
on how buffers can be initialized that could shave some time on this code
path.
Update TODO
2015-11-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Update copyright dates
[build] update configure.ac
2015-11-16 Fabio M. Di Nitto <fdinitto@redhat.com>
[send/recv] fix data filling in the frag code
[send/recv] use sendmmsg to reduce latency
On my test systems this change reduces the latency from 0.7ms to 0.25ms
when sending 65000 bytes packet and using internal re-assembly code.
Internally use N buffers to split the incoming data and reduce by N frags
the amount of memcpy between kernel and userland.
[internal] reduce memory footprint further down
2015-10-24 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] reduce memory footprint by a long shot
[send/recv] add simplistic packet re-assembly code
this will probably explode if you are using multiple links
in round-robin or active-active mode.
2015-10-21 Fabio M. Di Nitto <fdinitto@redhat.com>
Revert "[global] reduce memory footprint by a long shot"
This reverts commit 4b4290a2fafbeb4d08bf489caa35ea4c205b18b9.
2015-09-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[global] reduce memory footprint by a long shot
[threads] cleanup header
[cleanup] remove unused headers around
[threads] split send recv threads in separate file
[threads] split dsthandler thread in separate file
[threads] split pmtud thread in separate file
[threads] split heartbeat thread in separate file
[threads] implement outgoing pckt fragmentation based on PMTUd
2015-09-16 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[global] restrict max packet size to 65536 bytes
and apply workaround in data buf allocation while we cleanup
the whole buffer allocation handling situation
2015-09-15 Fabio M. Di Nitto <fdinitto@redhat.com>
[test] disable crypto rekey test for now
[knetd] fix libqb logging filter
Thanks to Chrissie for the awesome work as usual
[test] fix ping_test data print and add some more info
[handle] add missing include
[handle] fix knet_send sock handling to use correct data flow
[handle] fix init order to have more debug in case of sockpair error
[commodity] add knet_send/knet_recv api calls
based on readv/writev man page, it is highly discouraged to mix
different kind of write/read operations on a given fd (for example
a read with a writev).
since not many finds using iovec that pleasent, those 2 functions
do wrap the more common buff/buff_len calls into iovec implementations.
[handle] API change warning: add support for knet_handle_new to create proper sockpairs
this is a small facility for applications that don't want/need to create
socketpairs to read/write data to/from knet and avoids lots of duplicated
socket management on the client side.
[threads] add warning on fragmented packets
also prepare ping_test for it
2015-09-08 Fabio M. Di Nitto <fdinitto@redhat.com>
[ping] fix sockpair creation to deal with sequence of packets and not streaming
[threads] use iovec calls to read/write from datafd
[cosmetic] rename net_fd to datafd
2015-09-06 Fabio M. Di Nitto <fdinitto@redhat.com>
[handle] add missing errno on failure
[libtap] change error check code to avoid a segfault and make it more readable
2015-04-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[listener] fix 2 cosmetic checks and keep around a useful debugging fn
[threads] make ping error message more verbose
Update TODO list
2015-04-21 Christine Caulfield <ccaulfie@redhat.com>
libtap: don't close pipe fd twice
libtap was closing the parent's pipe() fd twice. Sometimes, between the
first and second close, that fd gets reopened by the logging thread as
PF_LOCAL, and used for logging.
Then libtap wakes up again after the fork and closes the fd thinking
it's its pipe fd. knet then opens it again as AF_INET for pinging.
libqb logging then errors on a sendto() and closes it AGAIN, and reopens
it as a PF_LOCAL logging fd. Ping then has a brain haemorrage next time
it comes round to calling sendto().
2015-03-20 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2015-03-19 Fabio M. Di Nitto <fdinitto@redhat.com>
[host] move dst cache updates to the right logging subsystem
and return error codes
Update TODO list
[host] create dst_cache sync and async functions and fix link lookup race condition
Prior to this change, there was a potential race condition in which, when shutting
down a link, the destination cache would not be updated in time and pckts would
be lost in an invalid socket.
This change introduced a sync version of the dst cache update and protects
outgoing traffic socket lookup with a mutex.
The only downside of this change is that, in future, when we will introduce
complex switching algorithms, we might have to spend a bit more time
recalculating the network topology on link shutdown and halt traffic switching.
Pro is that we have a smaller gap in lost traffic when reconfiguring the local
node.
2015-03-18 Fabio M. Di Nitto <fdinitto@redhat.com>
[threads] simplify code to send data to links
in preparation to remove race condition in _dst_cache update,
simplify the access path to common code
[onwire] fix regression in macro expansions
2015-03-12 Fabio M. Di Nitto <fdinitto@redhat.com>
[onwire] introduce khpi_link_status_ defines to make code simpler to parse
2015-03-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[onwire] add define for knet_hostinfo structures size
2015-03-10 Fabio M. Di Nitto <fdinitto@redhat.com>
[onwire] rename kf_plink/kf_psize/kf_pdata to their respective more descriptive versions
[onwire] rename kf_link and kf_time to their respective more descriptive versions
[onwire] rename kf_seq_num and kf_data to their respective more descriptive versions
[onwire] add comment
[onwire] more cleanup around _SIZE define usage
2015-03-09 Fabio M. Di Nitto <fdinitto@redhat.com>
[onwire] rename various KNET_FRAME_ definitions to KNET_HEADER_
[onwire] cleanup and use defines
make it easier to understand values and usage of other status info
[onwire] rename link_up_down struct to knet_hostinfo_payload_link_status
[onwire] rename knet_hinfo_data struct to knet_hostinfo
and add comments around the various fields
2015-03-08 Fabio M. Di Nitto <fdinitto@redhat.com>
[onwire] add comment in ifout section
[onwire] start cleaning host_info data structures
[debug] add tool to print out network pckt header size
[onwire] clenaup knet_header_payload_data structure naming
[onwire] clenaup knet_header_payload_ping structure naming
2015-03-07 Fabio M. Di Nitto <fdinitto@redhat.com>
[cleanup] move some values from int to unsigned int
[onwire] clenaup knet_header_payload_pmtud structure naming
and add more comments
[onwire] add more comments
[onwire] add extra comments
[onwire] cleanup knet_header_payload union
use longer name to make it easier to identify nesting of structures
[onwire] rename knet_frame_data to knet_header_payload
[onwire] rename knet_frame to knet_header
also start renaming variables around to make it easier to understand
the level of nesting and add comments for each field
[internal] start renaming things to make code look decent
[internals] Simplify code maintanance by shuffling around some variables
this allows creation of better #define to maintain some parts of the
code related to buffers allocations.
As a bonus, gcc does a better job at packing structs outside of a union
and we save 4 bytes onwire.
2015-03-05 Fabio M. Di Nitto <fdinitto@redhat.com>
[knetd] Fix internal MTU calculation to include tap ethernet frame
2015-03-04 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] fix mutex deadlock on socket error
[listeners] Use IP_FREEBIND options on sockets
this allows us to bind to IPs that are not yet on the system and
survive the infamous ifdown/ifup <device> test
2015-03-03 Fabio M. Di Nitto <fdinitto@redhat.com>
[pingd] fix ping flood on sock errors
if we get an error on sendto, we would ping flood the link because
the ping_last timestamp was not being updated.
[libknet] rename tap to send to link
plain and simple cleanup
2015-03-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
[knetd] add support for pmtud frequency
[PMUTd] add call to get pmtud interval value
[knetd] Use pmtud values to set tap device MTU
2015-02-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] fix notification callback to add private data
this is necessary to identify the callback when driving multiple
knet instances within the same daemon.
Update TODO list
2014-12-01 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] add support for pmtud_get for who doesn't want notifications
[PMTUd] add support for PMTUd changes notifications
2014-11-30 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] distinguish between link_mtu and data_mtu
link_mtu is the pure MTU over the link and doesn't account for knet headers.
data_mtu is what can be really transmitted onwire by the application.
2014-10-23 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUd] add support for timer config and fix critical shutdown deadlock in condwait
[PMTUD] change error message
[PMTUd] fix scary message at startup
2014-10-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUD] fix threads to work with crypto
temporary disable re-keying test as it seems to be break PMTUd
2014-10-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[PMTUD] change variable names to make it easier to read
still doesn't work with crypto enable, but part of the code is getting
ready for it.
2014-08-29 Fabio M. Di Nitto <fdinitto@redhat.com>
[nss] fix calculation for crypto header to include SALT_SIZE
and propagate block size up in the layers to allow PMTUd thread
to round buffers and do crypted PMTUd packets.
2014-08-28 Fabio M. Di Nitto <fdinitto@redhat.com>
[link] add rudimentary PMTUD support.
1) It won't work with crypto enable yet
2) values are not really used yet for anything
3) no API calls implemented yet
2014-08-11 Fabio M. Di Nitto <fdinitto@redhat.com>
[listener] check setsockopts return codes
2014-07-23 Fabio M. Di Nitto <fdinitto@redhat.com>
[nss] make sure that any crypto config requires a proper hashing value
this is mandatory to avoid some collision checks when random junk
is received over the network socket
2014-07-21 Fabio M. Di Nitto <fdinitto@redhat.com>
[libtap] check for error buffers only when necessary
[build] fix pkg-config files to link correctly
[build] libtap requires sys/types.h for size_t definition
2014-07-20 Fabio M. Di Nitto <fdinitto@redhat.com>
[build] cleanup after test-driver
update .gitignore and make maintainer-clean target
2013-11-16 Michele Baldessari <michele@acksyn.org>
This fixes build on F20 with gcc 4.8.2
2013-08-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Update slides
2013-06-15 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add extra error checking
2013-06-10 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: add support for pong_count
link: add pong count handling to avoid excessive flapping of traffic
2013-06-09 Fabio M. Di Nitto <fdinitto@redhat.com>
cleanup TODO list
crypto: track size of crypto overhead data
libknet: comment out un-used onwire data for now
2013-03-11 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2013-03-10 Fabio M. Di Nitto <fdinitto@redhat.com>
build: fix install target
listener: fix more unistd.h breakage
2013-02-01 Fabio M. Di Nitto <fdinitto@redhat.com>
Every set should have a get...
cleanup a few bits around logging and interal API
2013-01-30 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: keep host list cached in knet handle
Update TODO list
2013-01-29 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add link api call to get list of configured links
Finish to cleanup current logging API
logging: start documenting API and other bits
logging: fix formatting
fix README pam section
Fix ping_test to deal with EINVAL return codes
Update TODO list
libknet: fix knet_link_get_status and document it
kronosnetd: deal with proper error codes from knet_link_get calls
libknet: fix set/get_priority and document them
libknet: fix set/get_timeout and document them
Add knet_link_get_enable call
ping_test: some more fixes
how the hell did this thing ever worked? needs a rewrite
link: fix return code when exit path is clean
2013-01-28 Fabio M. Di Nitto <fdinitto@redhat.com>
fix \n logging
listener: rename link to lnk to avoid conflict with unistd.h
ping_test: fix argc corruption and make output configurable
threads: make one error more specific
libknet: rework knet_link_enable into knet_link_set_enable
make it thread safe and fix all return codes (ret vs errno)
2013-01-27 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2013-01-20 Fabio M. Di Nitto <fdinitto@redhat.com>
link: protect set/get config from doing damages
link: rename configured to enabled
we need configured internally for other stuff
2013-01-11 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: cleanup knet_link_set/get_config
this also allows to kill the madness around dynamic ip management
and saves enother bytes in the ping header
Fix make dist/clean
2013-01-10 Fabio M. Di Nitto <fdinitto@redhat.com>
Fix typo
debian: fix a few bits around and resync with rpm packaging
Update TODO list
Update TODO list
2013-01-08 Fabio M. Di Nitto <fdinitto@redhat.com>
systemd: allow kronosnetd to set real time scheduler
see also https://bugzilla.redhat.com/show_bug.cgi?id=893015
Update TODO list
logging: move string to the beginning of msg
this allow (to some extents) to print log messages directly to
stdout and/or stderr without extra parsing.
NOTE:
- messages are sent from differnet threads and there for they are less readable
when they arrive all together
- there is no printing of message level and subsystem
for simple coding/debugging purposes this is useful, but otherwise
look at how ping_test.c or kronosnetd create a logpipe and read
sequencial messages from there.
Update TODO list
rewrite TODO list to be more useful
2013-01-07 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: fix HMAC key init
2013-01-06 Fabio M. Di Nitto <fdinitto@redhat.com>
start cleaning TODO list and make it more useful
Sort TODO list
2013-01-02 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2013-01-01 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2012-12-31 Fabio M. Di Nitto <fdinitto@redhat.com>
pam: use password-auth on systems like fedora that ship it
or passwd as a fallback (debian and others)
rpm: fix integration with systemd (missing sysconfig file) and pam/groupadd
rpm: fix systemd integration with spec file
2012-12-25 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: fix integration with fedora pam
2012-12-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Downgrade error from set scheduler to warning
Fix build dependencies for parallel build
Add missing header to final tarball
2012-12-21 Fabio M. Di Nitto <fdinitto@redhat.com>
Start documenting knet_link_* api
2012-12-20 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
fix crash when multiple links are sharing the same listener
Fix shutdown race conditions between locks/threads/signals
that in turns make knet_handle_free thread safe
Fix log subsystem on _dst_cache_update
make knet_host_(get|set)_policy behave as documented
also fix _dst_cache_update to return errno and use host_id
Update TODO list
make knet_host_get_host_list work as documented in the API
make knet_host_get_id_by_host_name work as documented in the API
make knet_host_get_name_by_host_id work as documented in the API
Fix pthread error to errno relation
make knet_host_set_name comply with documented API
make knet_host_remove comply with documented API
also fix a bunch of other bits
make knet_host_add comply with documented API
also continue renaming node_id to host_id as we go
handle: fix errno return value
2012-12-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Make knet_handle_* call compliant to documented API
allow knet_handle_crypto to be invoked at runtime
libknet: make knet_handle_new / knet_handle_free do what the API says they should
move timespec_diff to threads.h (only user)
Make define name clear
Cleanup internal headers
Move _dst_cache_update to host function set
and maybe add the threads.* files to git might help.. just a tiny little bit
Move all threads code into threads.{c,h}
Move all link related code to link.{c,h}
Move listener function definitions in listener.h
move logging code/definitions to logging.{c,h}
move host.c function definitions into host.h
move some definitions out of internals.h into common.h
Start renaming node_id to host_id
Document knet_handle_crypto
document a couple of more knet_handle_* calls
Update TODO list
2012-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: document knet_handle_enable_filter and dst_host_filter_fn
One more cosmetic
libknet: cosmetic fixes to knet_handle_new
libknet: knet_handle_new API cleanup and documentation
libknet: document limits
move comment where it belongs
libknet: make dst_filter a runtime config option
libknet doesn't need a default port
it's a UI issue to deal with
Reduce logging buffer size to allow more messages
Add comments to knet_link and re-arrange
move knet_link into internals.h
hack fest still in place, we need to sort out ABI and locking
2012-12-17 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet api cleanup: move knet_host out of public API
the knet_host_* calls are pretty much set for now.
the new knet_link_* calls are temporary to interface with the old API.
knet_link will die next.
Move --version to library only bits
Update TODO list
2012-12-14 Fabio M. Di Nitto <fdinitto@redhat.com>
reorganize libknet.h in sections
just makes it easier to read as we move stuff around
Drop tests/ subfolder
Move all tests in the respective folders
this makes it easier to isolate what needs changing where and when
Move hellgrind and valgrind checks to a common make snippet
Cleanup tests for kronosnetd
remove obsoleted test tool
Drop one more unrequired config bit
move all logging definitions in the same section
drop redundant dst_filter config check
fix segfault in ping_test src_port handling
move listener only define
cleanup crypto headers
move ping size to onwire and make name more clear
drop unrequired header
libknet: create onwire.h to contain/define all packet(s) data/info
Make rename clean
rename libknet-private.h to internals.h
2012-12-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Move etherfilter where it belongs
2012-12-07 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: fix host info propagation on kronosnetd restart
this avoids lots of incorrect chit/chat and make sure
to send data when required
Update TODO list
2012-12-06 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: fix init script return codes
2012-12-04 Fabio M. Di Nitto <fdinitto@redhat.com>
One more attempt to fix make dist out-of-tree
better fix to fix git fix for build out of tree fix
Fix out-of-tree build
Update TODO list
fix O_NONBLOCK fd setting functions
*facepalm*
logging: cleanup logging to avoid clogging the logfd pipe
move it to its own thread and clean up logfd handling
Fix debian generation
debian: fix date spacing/formatting
libtap: small step back to .so.0.0.0
no point to have 1.0.0 when we are not even sure the API is final
build: fix maintainer-clean when building on != debian based distro
Update .gitignore
libknet: fix data forwarding check
Update TODO list
2012-12-03 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
build: fix make dist and make maintainer-clean
add support to build deb packages
use: make debs
2012-12-02 Fabio M. Di Nitto <fdinitto@redhat.com>
generate package version from git/configure
2012-11-29 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Fix copyright/authors all over
kronostned: add logrotate file
update TODO list
Fix super annoying kronosnet/kronosnetd discrepancies around
and fix a few rpmlint warnings/errors
Update .gitignore
kronosnetd: add basic spec file
add native debian packaging
this is based on debhelper version 7 to allow build
also on Ubuntu Lucid
update from autoscan
kronosnetd: add man pages
init script: shutup lintian warning
2012-11-26 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: fix cbuffers cleaning after normal shutdown/link down/crash
2012-11-25 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libknet: clean up circular buffer counters when remote goes dead
libknet: record status from incoming HOST_INFO link up-down messages
2012-11-23 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: notify remote host of link status changes
receiver still can't use those data for anything
libknet: fix locking within logging... for real
what the hell was i thinking with 1ab701ce16
libknet: fix locking within logging
we cannot grab a lock during logging because something else
might be already using a lock.
libknet: add support for HOST_INFO unicast dispatch
libknet: fix data write to fd
Update TODO
2012-11-17 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: remove hardcoded magic numbers
libknet: basic prototyping of HOST_INFO messages
libknet: make all data packed
gcc doesn't propagate packed attribute down to a union
libknet: fix unlocking in case of errors in tap_to_links
2012-11-16 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libknet: add sync host to host messagging
kronosnetd: make baseport endian clean
kronosnet: merge concept of RINGID and baseport
this avoids extra confusion with ringid
2012-11-14 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libtap: store ip in the same order as they entered
kronosnetd: save interfaces in the same order as input
kronosnetd: allow vty timeout to be loaded from config
Update TODO list
2012-11-13 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libtap: attempt to fix ioctl usage
kronosnetd: fix parsing of ip_list return from libtap
2012-11-12 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list (bug list)
kronosnetd: increase default vty timeout and save it to config
loading still has no effect
kronosnetd: add vty timeout command
the value is not persistent or saved in config
kronosnetd: add vty config node
Update TODO list
cannot be done without major config rewrite right now
kronosnetd: fix spacing in login prompt
Update TODO list
2012-11-10 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
2012-11-09 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: fix link_enable logic
2012-11-08 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: perform clean shutdown on daemon exit
libknet: fix listener remove return code
libknet: misc cleanup
remove fds from epolls on exit
don't mingle with listeners if there is no link status change
libknet: fix unlocking in log message
libknet: make basic infrastructure ready for host to host comm
libknet: rename pipefd to dstpipefd
Update TODO list
2012-11-06 Fabio M. Di Nitto <fdinitto@redhat.com>
crypto: move crypto buffer allocation back to handle
nsscrypto doesn't need to know how many buffers to allocate/free
libknet: drop magic number in header
save 4 bytes per packet and avoid plain text attack
Update TODO
libknet: make error message more useful
kronosnetd: make config safer to copy paste
kronosnetd: add ringid to interface creation to spicy up mac generation
fix multihoming support
major change across the board:
- drop concept of listeners completely, they are now handled internally
- link needs src/dst
- fix different segfaults
- cleanup API
- port kronosnetd UI to new format
2012-11-02 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: first big hammer on logging
still needs fine tuning as we go to understand exactly what to log
in debugging mode
kronosnet: use a different macro for debug from libknet
Update TODO list
kronosnetd: add logging from libknet to logfile/stdout
no logging to vty yet
2012-11-01 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add basic logging infrastructure to the library
2012-10-28 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
Rename config fd to make space for logging from knet
2012-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list for libknet logging infrastructure
Update TODO list
Using multiple dynamic links requires:
link dynamicXXXXXXXX
where XXXXXXXX can be any identifier
Use bindv6only by default and make code simpler and safer
2012-10-26 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libknet: fix bindv6only socket handling for dynamic connections
2012-10-25 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet/kronosnetd: add support for bindv6only
kronosnetd: fix error message and exit path
kronosnetd: add support for dual stack CLI (bindv6only yes/no)
kronosnetd: increase CLI default timeout
libknet: fix timespec handling
guess what.. it ain't portable...
Update TODO
Update TODO list
2012-10-24 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: don't buffer overflow
update .gitignore
build: link as needed
general: add init script and service file
libknet: ship .pc file and sort linking
libknet: link against -lrt for clock_gettime symbol
build: fix build for old version of nss/nspr
build: add missing file from tarball
Add preliminary support for handling dynamic ip connections
max on dynamic link per host for now, we need to fix link_id handling
first
2012-10-23 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: provide basic status functionality
ping_test: fix unit measure to be bearable
ping_test: fix usage example
kronosnet: add config support for link timers
kronosnetd: add link priority configuration
libknet: add link priority api call
2012-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: workaround bug in SETMTU ioctl
apparently SETMTU does parse flags as well, make it clean
kronosnetd: allow configuration of switching-policy engine
passive/active/round-robin
update TODO list
2012-10-14 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: worst commit ever....
fix a series of segfaults in crypto init code
add api call to set switching policy (that was the original idea
of this change, till things started exploding on me)
libknet: readd dst_cache_update function for internal use
this is required to trigger a recalculation when we change switching
policy at runtime from active/passive to active/active or round-robin
libknet: don't use black magic..
libknet: simplify link updown notification code
libknet: remove that horrid dst_cache update and mask it around link_enabled
makes the API a bit more readable.
2012-10-13 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: fix 3des key size
libknet: add support for 3des nss crypto
libknet: add support for nss aes128 and aes192
Update TODO list
2012-10-12 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: move crypto to fully modular system
libknet: start implementing generic crypto vs nsscrypto framework
it will save us some time later if we decide to plug something else
crypto: rework the API and make it a separate init call
this also saves us a few memcpy around when not using crypto
2012-10-07 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: make host add a O(1) operation
2012-10-06 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: keep host ordered by insert
kronosnetd: drop trailing space when saving config
libknet: fix memmove offset and make it simpler
libknet: first cut for RR support per packet
2012-10-05 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add handling of link priority for active passive
also update the TODO list
(this commit has not been tested)
update TODO list based on rekey brainstorm
2012-10-03 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: use fixed mac addresses to reduce arp work
libknet: export function to allow dst cache update on link removal
update TODO list
link policy handler: add first cut of code to have a switching policy engine
for now only ACTIVE and PASSIVE are supported. RR needs dst_cache_update/lookup.
2012-10-02 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: rename var to be more explicit
libknet: fix endianess and memory alignment issues
also check for some return codes
build: drop warning check for enum-compare
in some older versions of gcc, the flag is supported only for C++,
our flag test succeed, but we fail to build.
2012-10-01 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add unicast switching support
2012-09-30 Fabio M. Di Nitto <fdinitto@redhat.com>
update TODO with some ideas for improvements
2012-09-29 Fabio M. Di Nitto <fdinitto@redhat.com>
build: LIBQB -> libqb
libknet: rename fields in knet_link to be more meaningful
libknet: rename i,j,k to some proper vars and make code a bit more readable
libknet: make ready for unicast handling and fix unlocking if crypto fails
update TODO list
2012-09-28 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: packet inspector first cut
add packet destination filter API and provide an example
for ethernet packet inspector.
also start to plug the inspector into the transmitting end of
libknet
libknet: implement basic ring buffer for bcast packets
fix KNET_FRAME_SIZE handling around
don't try to send messages to links that are not ready
gather host info for all incoming pkcts (data/ping) since there
is no point to go crazy figuring it out
add basic ring buffer functions based on playground implementation
(still missing reset of the buffer)
kronosnetd: fix data initialization
we can't memset knet_link because khost_add does some initialization
there that we overwrite otherwise.
drop incorrect clean up path. knet_links are not malloc'ed but statically
allocated.
2012-09-27 Fabio M. Di Nitto <fdinitto@redhat.com>
kronosnetd: remove spurios debugging messages
libknet: add seq_num to sender host
bcast for packets that needs to be sent to all nodes
ucast for direct packets
the difference is necessary to avoid unncessary re-encryption
of packets. This will make more sense once packet inspector
is in place, but basically seq_num are per host and not all
packets will go everywhere, creating undesirable holes in the
packet_ring_buffer, that in turns, in a non-encrypted network
could lead to some annoyance.
libknet: change packet definitions to include seq_num for data packets
this is required for pckt deduplication
kronosnetd: node_id have to match knet size for packet inspector to work
2012-09-26 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add notes on packet inspector
and where it should hook for notifications
build: fix out of tree build
clean up some hardcoded values and export them via header correctly
kronosnetd: add support for encryption keys
kronosnetd: add knet-keygen
2012-09-25 Fabio M. Di Nitto <fdinitto@redhat.com>
fix a few int vs ssize_t bits around
vty: add partial crypto/hash support
libknet: fix nss types and add crypto/hash support to ping_test
2012-09-24 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: plug nss for good into threads
libknet: crypto simplify even more the code path and data storage
libknet: add macro for debugging of nsscrypto and simplify more code around
libknet: more crypto cleanup and allocate crypto buffers when necessary
libknet: add a few comments
libknet: more nss crypto work
make crypto_init/fini work.
make libknet shared (necessary for correct linking with nss).
2012-09-21 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: start plugging in crypto support
2012-09-20 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: make tap to links and links to tap full duplex
this cuts down by 40% latency on ping test
ping_test: clarify unit measure...
2012-09-17 Fabio M. Di Nitto <fdinitto@redhat.com>
libknet: add totemcrypto.c|h from corosync (pristine)
permission to copy and change licence to GPLv2+ has been granted
in writing by current authors of the code.
let's be more realistic on what we can do here
libvty is not going to happen. Too complex and it's not the goal
for this project. For now, let's move it back into the daemon.
2012-09-16 Fabio M. Di Nitto <fdinitto@redhat.com>
logging: add logging support for syslog/stderr/logfile
hook into libqb for logging facilities.
build: cleanup escaping in exporting vars
2012-09-15 Fabio M. Di Nitto <fdinitto@redhat.com>
drop generic utils.(c|h) and start implementing proper logging
logging: add concept of logfile and fix fprintf output
build: depends on nss and libqb
build: move daemon in its own dir
libtap: remove external header (useless really)
2012-09-14 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: mark library 1.0.0
drop fPIC (managed correctly by libtool)
and make it 1.0.0 (number vs version)
build: fix some minor bits around
2011-03-23 Fabio M. Di Nitto <fdinitto@redhat.com>
main: print errors on stderr before daemonizing
testsuite: decouple from utils.c
libtap: decouple test suite from utils.h
cfg: drop util.h
vty: add missing include and fix build
decouple cloexec calls from utils
test: rename test to match what it really does
move netutils in libvty/ since vty is the only user
Revert "libknet: add missing include"
This reverts commit c5edcc14952da3e9914f1ff8df98413ab4728c2c.
logging: fix utils_syslog handling
set default to syslog to 0 again and enable it only in kronosnetd,
otherwise all test suite would log to syslog too.
utils: remove timespec_diff that's relevant only to libknet
libknet: add missing include
utils: drop concept of STATIC vs static
vty: make more functions static
2011-03-22 Fabio M. Di Nitto <fdinitto@redhat.com>
logging: enable syslog by default
also inject log_debug into syslog if configured
main: move defaults into its own function
Move vty into its own dir for future "librarification"
Move libtap doc to the next release
fix file permission
2011-03-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Add some extra warnings at build time
2011-01-24 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO: API renames are done
build: use libtap vs libtap_test
2011-01-19 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: embed test suite in the library
libtap: move tests in libtap/
update TODO for libtap
2011-01-18 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: fix linking and set exported symbols
2011-01-05 Fabio M. Di Nitto <fdinitto@redhat.com>
main: remove oom_adj
kernel ABI will change, not really worth the troubles for now
2011-01-03 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: align API calls to correct names
libtap: improve error reporting for up/down operations
2010-12-23 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: propagate errors from CLI calls to upper layers
2010-12-22 Federico Simoncelli <federico.simoncelli@gmail.com>
libknet: use naming convention for static functions
misc: more file renaming
libknet: split code into multiple files
libknet: update naming convention, rename header files
2010-12-22 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: first pass to remove calls to log_*
use internal error buffer instead across the non public API.
pass2 will export it to users.
2010-12-21 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: move knet code to its own library
2010-12-20 Federico Simoncelli <federico.simoncelli@gmail.com>
ring: fix node_id endianness, use ping/pong packet mask
ring: use hosts index to send pings and receive pongs
2010-12-20 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli_cmds: bind pre-up/up/down/post-down
libtap: add updown tests and fix off by one check
libtap: add exec_updown wrapper for ifup/down operations
Update TODO
libtap: several improvments across the board
start to add pre-up/up/down/post-down support
cleanup internal API function names
fix memory leak on close
add forward declearation for all static functions
add an extra test to be executed under valgrind
test: add track-fds to valgrind check
2010-12-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Update TODO list
libtap: complete ip_list management and last integration with CLI
libtap: make libtap more thread safe
2010-12-17 Fabio M. Di Nitto <fdinitto@redhat.com>
build: clean some more
vty_cli_cmds: prepare for new knet_handle_new API
Merge branch 'master' of github.com:fabbione/kronosnet
Update TODO
libtap: move ip management into libtap
2010-12-17 Federico Simoncelli <federico.simoncelli@gmail.com>
utils: fix timespec diff on x86 platforms
2010-12-17 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: rename internal struct from knet_tap to tap_
libtap: fold interface name into libtap and avoid dup use
libtap: add knet_tap_find, switch to ifname macro
also revert a0cbd79cefdbfed1d41f8842d6786f5b55484aa4 to fix unnamed tap device creation
add more TODO entries
vty_cli_cmds/cfg: drop local knowledge of MTU and delegate to libtap
libtap: add reset to default functions for mtu/mac
TODO list update for libtap
libtap: do proper initialization and close of the library
store default mtu and mac at init. This operation is required also
for direct access to set_mtu and set_mac.
libtap: cleanup tap socket on last close
2010-12-16 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
todo: update todo list
2010-12-16 Fabio M. Di Nitto <fdinitto@redhat.com>
libtap: start introducing internal list/config tracking
libtap: remove unrequired strcpy
vty: remove debugging entry
libtap: switch to use opaque struct
build: I HATE MAKEFILE EXPANSION.... fix libtap build kthxbye
build: link test tools with shared libtap
do not link kronosnetd yet.
build: need two versions for each lib
test and final.
build: include libtap subdir in the build
libtap: rename knet_test to tap_test
libtap: add shared version of the library
NOT TO BE USED YET
libtap: align API to name convention
First cut to isolate tap handling in its own library
vty_cli_cmds: port VTY to new API
needs lot more work to get clean
vty_cli_cmds: port "interface" to new ring API
2010-12-10 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: new api design
2010-12-03 Federico Simoncelli <federico.simoncelli@gmail.com>
ring: improve looping over links
2010-12-02 Federico Simoncelli <federico.simoncelli@gmail.com>
ring: allocate links with host
2010-11-30 Federico Simoncelli <federico.simoncelli@gmail.com>
ring: fix major bugs in knet frame length
ring: add host index for fast lookup
tests: fix long integer syntax
2010-11-29 Federico Simoncelli <federico.simoncelli@gmail.com>
ring: improve knet_frame structure
utils: fix timespec difference
2010-11-27 Fabio M. Di Nitto <fdinitto@redhat.com>
knet: make internal functions static
TODO: remove redundant entry
TODO: add more items for shared libs
build: add .bz2 tarball to release
build: fix uninstall section
move kronosnet.conf to /etc/kronosnet/kronosnet.conf
add more todo items
2010-11-26 Fabio M. Di Nitto <fdinitto@redhat.com>
update TODO
Add TODO list and release planning
docs: add architecture doc
Add README file
2010-11-25 Fabio M. Di Nitto <fdinitto@redhat.com>
vty/cfg: remove two unrequired wrappers
vty: remove bridge struct
vty: destroy knet_h on error and "no interface"
2010-11-24 Federico Simoncelli <federico.simoncelli@gmail.com>
git: add benchmarks to ignored files
benchmark: add lookup benchmark
utils: improve knet_ts_diff speed
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add sigint handler
2010-11-24 Fabio M. Di Nitto <fdinitto@redhat.com>
cfg: remove unused struct
2010-11-23 Federico Simoncelli <federico.simoncelli@gmail.com>
knet_handle: stop heartbt thread on knet_handle_free
knet_handle: check pthread exit status
knet_handle: add knet_handle_free
knet_handle: do not generate new sockets for knet_handle
2010-11-23 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add link menu and clean up links on object destroy path
vty: save bridge status in config file
ring: avoid lots of unnecessary casting, fix build on sparc and fix link loop
also avoid a segfault when scanning for multiple links
2010-11-22 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add start/stop commands to interface
configure
interface kronosnet0 2
baseport 50000
mtu 9000
ip 192.168.7.2 24
peer node1 1
link 192.168.5.1
link 192.168.4.1
exit
start
exit
exit
exit
now starts the bridge and traffic is flowing!
ring: fix address comparison to determine if link is up/down
also initialize addrlen properly and fix make dist
build: update configure.ac after autoscan
build: fix make dist
vty: remove concept of auto-listeners/manual listeners
switch to a much simpler baseport and port range concept.
for now, only baseport is implementend and needs extra checks implementation.
portrange will come soon enough.
ring: fix ping calculation for good
finally I have been able to reproduce the problem and it's related to
the "unknown" source in MONOTONIC clock. It can rollover making the signed
comparison useless. Force unsigned long long for the calculation that
fixes the issue.
Switching from:
Notice: timediff: -345483470 interval: 1000000
To:
Notice: timediff: 18446744073387515858 interval: 1000000
ring: use long long instead of suseconds_t
it appears (but not totally sure) that suseconds_t is not easily portable.
On sparc it was showing, at random, some different behaviour.
2010-11-19 Fabio M. Di Nitto <fdinitto@redhat.com>
Merge branch 'master' of github.com:fabbione/kronosnet
vty: fix no link list handling
2010-11-19 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
vty: add 'O' to pre-escape sequences
2010-11-19 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: initialize timeout values
vty: add basic link support
build: fix sparc build
2010-11-19 Federico Simoncelli <federico.simoncelli@gmail.com>
tests: fix printf format for latency
tests: display errno for functions supposed to fail
knet: fix maximum socket receive buffer size (unit is bytes)
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add listener test cases
2010-11-19 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: get autolisteners to work somehow...
this is getting ugly and needs cleanup
2010-11-19 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: add knet_link_timeout and knet_listener_remove
2010-11-18 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add concept of peers/hosts
sort ring.h header to group functions based on target
vty/config: collect handles in relative config structs
vty: add basic options for auto-listeners support
2010-11-16 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: use -1 timeout in epoll to wait indefinitely
knet: add acquire/release functions for the knet_listener list
2010-11-15 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add write/read config support
vty: add config show command
also fix assignment again...
vty_cli_cmds: Remove unrequired assignments
vty_cli_cmds: make help text more generic
2010-11-15 Federico Simoncelli <federico.simoncelli@gmail.com>
test: add latency/timeout testing comment
heartbeat: avoid flaky link when latency is higher than timeout
knet: compute latency average
2010-11-12 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add link latency statistics (last value)
2010-11-12 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add support to configure ip addresses on knet ifaces
2010-11-12 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add timestamp into ping packet
2010-11-12 Fabio M. Di Nitto <fdinitto@redhat.com>
cfg: move ether config in its own struct
cfg: drop unrequired locking
all config changes are already locked by the vty
vty_cli_cmds: fix create interface invokation
vty: add mtu config support in interface menu
vty_cli_cmds: add a few comments
vty_cli_cmds: more sorting
cfg: add concept of default mtu and configurable mtu
vty_cli_cmds: sort code around
move all helper functions at the top and all menu/exec cmd at the bottom
2010-11-11 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli_cmds: set mac address at iface creation time
also fix an off-by-one check
2010-11-11 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: split control thread and heartbeat thread
2010-11-11 Fabio M. Di Nitto <fdinitto@redhat.com>
vty/cfg: allow multiple parameters per command
2010-11-10 Fabio M. Di Nitto <fdinitto@redhat.com>
cfg: fix interface name detection
this one needs to be precise
vty: start adding bindings to core
this first snap allows to create/remove knet interfaces
2010-11-10 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: move debug into ping_test
knet: add ping_interval and pong_timeout configuration per link
knet: add trivial heartbeat feature
cosmetic: fix typo
2010-11-10 Fabio M. Di Nitto <fdinitto@redhat.com>
whops.. remove debugging/testing code
vty_cli: fix tab completion
vty_cli: add parameter concept and tab completion
2010-11-09 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add basic support for partial command execution and help
vty_auth: fix off-by-one in group checking
a user with the same name of a group is automatically part of that group
2010-11-04 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: add ctrl+z handler
vty: clear config lock on exit
vty_cli_cmds: simply revert action infrastructure
knet: check if created tap device has same name of requested
vty_cli_cmds: add "no" infrastructure
vty_cli_cmds: add interface configuration node layer
and fix a segfault in the help function
vty_cli_cmds: cosmetic output for who command
vty: add configuration handler
2010-11-03 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: allow to logout via ctrl+d and rename node names to be more useful
vty_cli_cmds: add logout/exit commands
2010-11-02 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli_cmds: group code together and make command search non-destructive
vty_cli: end of history next should give a clean line
2010-11-01 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli_cmds: add help command
vty_cli_cmds: add default help handler
vty: handle static allocation consistently
vty: laydown basic code to execute commands
2010-10-31 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_utils: fix segfault when free'ing history
2010-10-29 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: inform CLI users that the server is going away
vty: add note on exit path
vty: fix pam memory leakage in case of failure/timeout
vty: don't leak memory on pthread_cancel
2010-10-28 Fabio M. Di Nitto <fdinitto@redhat.com>
cosmetic: add extra return to login info
vty_cli: add basic concept of prompt
fix line redraw when parsing history
vty_cli: fix telnet backchar on x86
vty_cli: add history handler
2010-10-28 Federico Simoncelli <federico.simoncelli@gmail.com>
vty: cosmetics changes
2010-10-28 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: add support for insert mode
vty_cli: bind extra keys
vty_cli: add more home/end escape codes
2010-10-28 Federico Simoncelli <federico.simoncelli@gmail.com>
vty: add extra escape sequences (home, ins, del, end, pg-up/down)
2010-10-28 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: add ctrl+t handler
vty: fix off by one vty allocation
vty_cli: add forward word handler
vty_cli: add kill forward word handler
vty_cli: add ctrl+w handler
vty_cli: fix refresh when adding in the middle of the buffer
vty_cli: add backward word handler
vty_cli: make add_to_buf echo to terminal
temporary disable knet_vty_rewrite_line as it's not used right now
this change makes the cli a lot more snappy :)
fix an off-by-one buffer init
2010-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: add ctrl+u handler
vty_cli: add ctrl+h / del handlers
vty_cli: add ctrl+e handler
vty_cli: add ctrl+k handler
vty_cli: add ctrl+c handler
temporary change enter handler to differentiate in testing
vty_cli: add ctrl+a handler
vty_cli: add backward/forward char handlers
vty_cli: remove debugging
vty_cli: fix parsing of escape chars
2010-10-27 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
netutils: check name resolution in strtoaddr
2010-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
vty_cli: add support for escape chars
vty_cli: lay down scheleton for parsing CLI input
vty_cli: drop idle update in favour of the generic one
vty: make timeout global for all CLI's
move the checks into the main vty thread that's idle most of the time
anyway.
vty cli: add basic infrastructure for CLI
vty_utils: some iacs send a response
MUST make that dynamic... really
2010-10-27 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
netutils: add tests for strtoaddr and addrtostr
2010-10-27 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: configure telnet session and add better error reporting
all manual steps at init requires manual checking, the vty loop will do that
in an a more elegant fashion :)
vty utils: return error if user requested to write more than VTY_MAX_BUFFER_SIZE
Probably at somepoint we should allocate this buffer dynamically
vty_utils: add connection barrier if socket is closed underneath our feet
cosmetic: change welcome message
vty: remove debugging setting
build: check for pthreads at configure.ac
2010-10-26 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: add knet_listener structure (replaces knet_handle_bind)
2010-10-25 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: cleanup error/info reporting code
OMG.. did I really write that crap?
Merge branch 'master' of github.com:fabbione/kronosnet
build: scan for more headers
2010-10-25 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: do not resolve host names
2010-10-25 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: free memory
2010-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: more fixes on the auth sequence and better error reports
Will I ever get this one right?
vty_auth: make pam_authenticate errors fatal
vty: fix PAM init sequence and error report
deal with the lack of /etc/pam.d/kronosnet without crashing
vty: log all connections, including source ip and port
2010-10-22 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: check malloc return code in addrtostr
2010-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: init_listener use strtoaddr for the winner!
2010-10-22 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add addrtostr
2010-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
build: allow default admin group to be configurable and clean up
2010-10-22 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: improve strtoaddr using getaddrinfo
2010-10-22 Fabio M. Di Nitto <fdinitto@redhat.com>
Drop log_debug entries for now
build: update configure.ac
vty: perform group check before allowing users to enable
vty: associate username with vty and drastically improve error detection/report
also make knet_vty_auth_user reusable
2010-10-21 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: tell the user on which vty he/she is logging in
vty: use struct knet_vty all around
vty: address several issues with vty allocation
use knet_vty structure as thread arg to pass more data around
initialize knet_vtys memory
make sure to reuse knet_vtys slots
pass data to vty thread
clear memory on entry/exit
vty: fix set_max_connections sanity checks
2010-10-21 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add netutils stub
2010-10-20 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: add CLI threads and PAM authentication
NOTE: /etc/pam.d/kronosnet is now required to telnet to CLI
2010-10-20 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: add acquire/release functions to lock the host structure list
2010-10-18 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: use KNET_MAX_EVENTS in epoll_create
knet: fix typo
knet: use knet_fdset_cloexec, minor lock fix
2010-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
Add generic util function to set CLOEXEC on fds
2010-10-18 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: new knet api interface
2010-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
main/vty: return errors from main loop
vty: add main loop and bind it to main.c
update .gitignore
vty: add config options for max connections
add also basic scheleton to handle incoming connections
build: add default CFLAGS/LDFLAGS for test progs
main: parse all command line options
add better error handling
2010-10-18 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: add control thread
2010-10-18 Fabio M. Di Nitto <fdinitto@redhat.com>
main: add basic daemon infrastructure
vty: make vty listener thread safe
Add knet_vty_close_listener
2010-10-16 Fabio M. Di Nitto <fdinitto@redhat.com>
build: fix missing initialization
spotted building with F-14 gcc
2010-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
vty: fix idiotic use of memory
vty: don't use options that are too new...
build: add more options to configure.ac
vty: add tcp listener
2010-10-15 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: cleanup, minor fix for printf format
knet: add loop count
knet: thread-safe list cleanup
Merge branch 'master' of github.com:fabbione/kronosnet
knet: add thread-safe host list
2010-10-15 Fabio M. Di Nitto <fdinitto@redhat.com>
ring: fix endian conversion of KNET_FRAME_MAGIC
2010-10-14 Federico Simoncelli <federico.simoncelli@gmail.com>
knet: add packet inspection placeholder
knet: complete rework in network communication
2010-10-14 Fabio M. Di Nitto <fdinitto@redhat.com>
knet: make knet config functions thread safe
also export knet_execute_shell
knet: add support to add/remove ip
2010-10-13 Fabio M. Di Nitto <fdinitto@redhat.com>
knet: cleanup a few things
remote unrequired var
use knet_close internally
avoid unnecessary casts to void *
determine ifindex at creation time
knet: rework API to allow multiple knet ethernets
2010-10-11 Fabio M. Di Nitto <fdinitto@redhat.com>
Add dependency on automake and color tests
build: add more checks to configure.ac
Build test tools automatically
2010-10-11 Federico Simoncelli <federico.simoncelli@gmail.com>
Add multiple destination hosts for each ring
Add ping test, ring test cleanup
2010-10-08 Federico Simoncelli <federico.simoncelli@gmail.com>
Knet ring test cleanup
Merge branch 'master' of github.com:fabbione/kronosnet
Add knet_frame structure for ring messages
2010-10-08 Fabio M. Di Nitto <fdinitto@redhat.com>
knet test: use ip rather than ifconfig that requires /proc mounted
knet: add knet_set_up/down
2010-10-08 Federico Simoncelli <federico.simoncelli@gmail.com>
Use unconnected sockets for ring messages
Fix code inconsistencies and variable naming
Merge branch 'master' of github.com:fabbione/kronosnet
Use INADDR_LOOPBACK macro for localhost
2010-10-08 Fabio M. Di Nitto <fdinitto@redhat.com>
build: update configure.ac
2010-10-08 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
Don't use ipv6 by default, use sockaddr_storage in knet_ring structure
2010-10-08 Fabio M. Di Nitto <fdinitto@redhat.com>
general: clean up usage of log_error
knet: add knet_execute_shell and tests
this will be used to handle preup/up/down/post-down calls to shell
in case the script fails, both stdout and stderr outputs are logged
2010-10-08 Federico Simoncelli <federico.simoncelli@gmail.com>
Display more information in ring test, minor fixes
2010-10-08 Fabio M. Di Nitto <fdinitto@redhat.com>
knet: drop redundant checks in set_mtu
all those checks are performed by the kernel too, that has a much
better idea of what MTU should be.
knet: add get/set mac address
and update test cases
2010-10-07 Federico Simoncelli <federico.simoncelli@gmail.com>
Add ring connection and unit test
Add syslog option, print error description in log_error
2010-10-07 Fabio M. Di Nitto <fdinitto@redhat.com>
Add knet_get_mtu/set_mtu functions
and add test cases
knet: create static knet socket to handle all ioctl work
also make ifreq static and global instead of polling everytime.
Introduce STATIC macro to access global static variables from tests/
Adjust test case to verify for sock errors
Add knet_open and knet_close functions
2010-10-07 Federico Simoncelli <federico.simoncelli@gmail.com>
Add logging macros
2010-10-07 Fabio M. Di Nitto <fdinitto@redhat.com>
Clean master to start refactoring
2010-10-07 Federico Simoncelli <federico.simoncelli@gmail.com>
Identify target node id by mac address
2010-10-06 Federico Simoncelli <federico.simoncelli@gmail.com>
Set kronosnet hw address using nodeid value
Packet tests cleanup
Packet inspection should return the node id
Fix ipv6 multicast broadcast check
Add packet inspection for unicast delivery
Improve knet_header and payload allocation
Merge branch 'master' of github.com:fabbione/kronosnet
Skip documentation build if publican is not available
2010-10-06 Fabio M. Di Nitto <fdinitto@redhat.com>
debug: add code to decode src/dst mac address
so it doesn't get lost...
2010-10-05 Fabio M. Di Nitto <fdinitto@redhat.com>
fix example config file
reduce logging verbosity in main
docs: add more format and simpler push to website
docs: add basic Makefile.am
Add basic publican docs
2010-09-30 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/kronosnet
Initial handshake implementation
2010-09-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Revert "Test commit"
This reverts commit 7f856ba6006ab644b8bc8fb08c83ac0cd83d0885.
Test commit
2010-09-27 Federico Simoncelli <federico.simoncelli@gmail.com>
Increase socket receive buffer.
Extensive optimization in circular buffer algorithm.
2010-09-24 Jan Friesse <jfriesse@redhat.com>
Fix buffer overflow in sending data
Previous dispatch_buffer function added sizeof(struct knet_header) to
sended data. This is not needed and causes reading of not initialized
data.
2010-09-23 Federico Simoncelli <federico.simoncelli@gmail.com>
Several changes across the whole tree to use logsys instead of logthread.
2010-09-23 Jan Friesse <jfriesse@redhat.com>
Process knet_ips and mtu
Ability to set link mtu and add ip address(es). Current implementation
uses /sbin/ip command.
2010-09-14 Jan Friesse <jfriesse@redhat.com>
Netdevname again and (hopefully) done right
Patch fixes netname option to exists in node config (where it logically
belongs).
It also introduces config preup function to handle interface pre up
(only netdevname is currently copied)
Add str_explode function
Function supports explode of string to 1-n pieces separated by space or
tab. This is useful in convert_ip and also in future parsing of
knet_ips.
2010-09-14 Federico Simoncelli <federico.simoncelli@gmail.com>
Circular buffer code cleanup
2010-09-13 Federico Simoncelli <federico.simoncelli@gmail.com>
Improve protection against packet duplication (2)
2010-09-10 Federico Simoncelli <federico.simoncelli@gmail.com>
Improve protection against packet duplication
2010-09-10 Jan Friesse <jfriesse@redhat.com>
Rename project to Kronosnet
2010-09-10 Federico Simoncelli <federico.simoncelli@gmail.com>
Merge branch 'master' of github.com:fabbione/clusternet
Fix ring buffer cleanup boundary
2010-09-10 Jan Friesse <jfriesse@redhat.com>
Support for netname change in config file
Default tun name can be changed in configuration file.
Default name also contains %d string now, so if more than one daemon is
running, each device has unique name.
2010-09-09 Federico Simoncelli <federico.simoncelli@gmail.com>
Use trivial algorithm to clear ring buffer
2010-09-09 Fabio M. Di Nitto <fdinitto@redhat.com>
Start adding ring buffer to handle packet duplication detection
2010-09-08 Fabio M. Di Nitto <fdinitto@redhat.com>
Fix check for rollover and add a sequence check
the sequence check traps the out-of-order udp packets. We need
to fix that with a circular buffer.
Add version of cnet_header, src_nodeid and dst_nodeid
2010-09-06 Fabio M. Di Nitto <fdinitto@redhat.com>
Add 4-rings example
2010-09-03 Fabio M. Di Nitto <fdinitto@redhat.com>
logging: fix config parsing and make logging conf static
Add support for packet sequence rollover
2010-09-01 Fabio M. Di Nitto <fdinitto@redhat.com>
Go back one step.. disable ping/pong, add redundant-ring support via pckt duplication
XXX: must add handling of seq_num rollover or clusternet will halt after uint32_t pkcts
Add redundant ring in example.conf
Rename variable to something unique
add basic (but still useless) heartbeat process
Add packet parsing when received on the netsocket
Laydown heartbeat thread
2010-08-31 Fabio M. Di Nitto <fdinitto@redhat.com>
Propagte our nodeid in the pckts
Start checking incoming network packages for our MAGIC signature
Start adding network control structure
also update example.conf to match my basic testing setup
Allow command line to override configure file for debug options
2010-08-30 Fabio M. Di Nitto <fdinitto@redhat.com>
Re-enable IPv6 and remove some more dead code
Set standard port
Switch to UDP and remove a lot of useless code
Bridge incoming connections with the ethernet
tested on 4 nodes, almost works :)
Detect local IPs and don't iniziate useless connections
Associate incoming and outgoing connections
XXX: temporary drop IPv6 to preserve life on earth for a few more days
remove more paranoia logs
Remove some paranoia logging
add error and change variable name
Start briding FDs around
lots of dirty hacks here..
Move RX on eth code in a separate thread
don't use MTU to set the buffer, just allocate a static one
max ipv6 mtu * 2
change config keyword from "ip" to "nodeips"
Update example config
we want to configure the interface for the user to avoid lots
of complex polling at runtime.
2010-08-27 Fabio M. Di Nitto <fdinitto@redhat.com>
prepare to deliver pckts to localnet from remote
Allocate buffers dynamically based on MTU size
Start to create a main loop that's somewhere close to be useful
Add netsocket
2010-08-26 Fabio M. Di Nitto <fdinitto@redhat.com>
add common functions for socket comm and implement status command
clusternetd: allow cnet_tool to stop the daemon
cnet_tool: laydown structures and allow to send quit command
TEST: add simple main loop for testing
fix socket handling, add connection to cmd line tool
add cmd line tool
add basic local commands
add local socket data structure
control thread: set close on exit and start accepting connections
control thread: listen to local socket
control thread: add check to see if the thread does init properly
start adding the control thread to the daemon
it will take care to handle local socket connections from the management
tools
Add licence/copyright
build: update configure.ac for new headers/functions/types
add generic utils bit where to add all random useful things
nodes: allow selection of inet family for each node
2010-08-25 Fabio M. Di Nitto <fdinitto@redhat.com>
nodes: fix lookups parameters
nodes: allocate conn structs based on data resolution
nodes: rename tempip to avoid terms overload
parse space separated list of ip addresses
starts to add config parsing for nodes and nodes internal data structs
2010-08-16 Fabio M. Di Nitto <fdinitto@redhat.com>
add example.conf
update ignore file
conf: start to add node entries config parsing code
main: improve drastically error reporting from bottom layers
init logging earlier to make config parsers re-usable for reload
logging: avoid leaking memory on error
main: move messages to DEBUG level
config: add support for rerouting and statistics collector config options
config: don't double free some bits on error
cnet: rename functions
config: add missing include
cnet: rename files to c(luster)net.{c,h}
tun: make it a tap/ether device
config: cleanup confdb after usage
config: don't leak memory on exit
config: reuse corosync.conf format via coroparser and add full config of logging
2010-08-13 Fabio M. Di Nitto <fdinitto@redhat.com>
add basic config file reading functionality
start implementing config file reading
clusternetd: add basic stuff
|