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
|
<pre>Network Working Group L. Wells, Chair
Request for Comments: 1795 Internetwork Technology Institute
Obsoletes: <a href="./rfc1434">1434</a> A. Bartky, Editor
Category: Informational Sync Research, Inc.
April 1995
<span class="h1">Data Link Switching: Switch-to-Switch Protocol</span>
<span class="h1">AIW DLSw RIG: DLSw Closed Pages, DLSw Standard Version 1.0</span>
Status of this Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
Abstract
This RFC describes use of Data Link Switching over TCP/IP. The RFC is
being distributed to members of the Internet community in order to
solicit their reactions to the proposals contained in it. While the
issues discussed may not be directly relevant to the research
problems of the Internet, they may be interesting to a number of
researchers and Implementers.
This RFC was created as a joint effort of the Advanced Peer-to-Peer
Networking (APPN) Implementers Workshop (AIW) Data Link Switching
(DLSw) Related Interest Group (RIG). The APPN Implementers Workshop
is a group sponsored by IBM and consists of representatives of member
companies implementing current and future IBM Networking
interoperable products. The DLSw Related Interest Group was formed in
this forum in order to produce a single version of the Switch to
Switch Protocol (SSP) which could be implemented by all vendors,
which would fix documentation problems with the existing <a href="./rfc1434">RFC 1434</a>,
and which would enhance and evolve the protocol to add new functions
and features.
This document is based on <a href="./rfc1434">RFC 1434</a>. This document contains
significant changes to <a href="./rfc1434">RFC 1434</a> and therefore obsoletes that
document.
Any questions or comments relative to the contents of this RFC should
be sent to the following Internet address:
aiw-dlsw@networking.raleigh.ibm.com.
NOTE 1: This is a widely subscribed mailing list and messages sent to
this address will be sent to all members of the DLSw mailing list.
For specific questions relating to subscribing to the AIW and any of
<span class="grey">Wells & Bartky [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
it's working groups send email to: appn@vnet.ibm.com
Information regarding all of the AIW working groups and the work they
are producing can be obtained by copying, via anonymous ftp, the file
aiwinfo.psbin or aiwinfo.txt from the Internet host
networking.raleigh.ibm.com, located in directory aiw.
NOTE 2: These mailing lists and addresses are subject to change.
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>. Introduction</span>
Data Link Switching (DLSw) is a forwarding mechanism for the IBM SNA
(Systems Network Architecture) and IBM NetBIOS (Network Basic Input
Output Services) protocols. This memo documents the Switch-to-Switch
Protocol (SSP) that is used between Data Link Switches. This
protocol does not provide full routing, but instead provides
switching at the SNA Data Link layer (i.e., layer 2 in the SNA
architecture) and encapsulation in TCP/IP for transport over the
Internet. This RFC documents the frame formats and protocols for
multiplexing data between Data Link Switches. The initial
implementation of SSP uses TCP as the reliable transport between Data
Link Switches. However, other transport connections such as OSI TP4
could be used in the future.
A Data Link Switch (abbreviated also as DLSw in this document) can
support SNA (Physical Unit (PU) 2, PU 2.1 and PU 4) systems and
optionally NetBIOS systems attached to IEEE 802.2 compliant Local
Area Networks, as well as SNA (PU 2 (primary or secondary) and PU2.1)
systems attached to IBM Synchronous Data Link Control (SDLC) links.
For the latter case, the SDLC attached systems are provided with a
LAN appearance within the Data Link Switch (each SDLC PU is presented
to the SSP protocol as a unique MAC/SAP address pair). For the
Token-Ring LAN attached systems, the Data Link Switch appears as a
source-routing bridge. Token-Ring Remote systems that are accessed
through the Data Link Switch appear as systems attached to an
adjacent ring. This ring is a virtual ring that is manifested within
each Data Link Switch.
<span class="h3"><a class="selflink" id="section-1.1" href="#section-1.1">1.1</a> Backwards Compatibility with <a href="./rfc1434">RFC 1434</a></span>
This document defines significant changes to <a href="./rfc1434">RFC 1434</a> and does not
state details on how to interoperate with <a href="./rfc1434">RFC 1434</a> or "enhanced"
implementations (e.g., those that added enter and exit busy flow
control). It is up to the implementer to refer to <a href="./rfc1434">RFC 1434</a> and/or
any other vendor's documentation in order to interoperate with a
given vendor's implementation, if interoperability with pre-AIW DLSw
RIG standards is desired.
<span class="grey">Wells & Bartky [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>. Overview</span>
Data Link Switching was developed to provide support for SNA and
NetBIOS in multi-protocol routers. Since SNA and NetBIOS are
basically connection oriented protocols, the Data Link Control
procedure that they use on the LAN is IEEE 802.2 Logical Link Control
(LLC) Type 2. Data Link Switching also accommodates SNA protocols
over WAN (Wide Area Network) links via the SDLC protocol.
IEEE 802.2 LLC Type 2 was designed with the assumption that the
network transit delay would be predictable (i.e., a local LAN).
Therefore the LLC Type 2 elements of procedure use a fixed timer for
detecting lost frames. When remote bridging is used over wide area
lines (especially at lower speeds), the network delay is larger and
it can vary greatly based upon congestion. When the delay exceeds
the time-out value LLC Type 2 attempts to retransmit. If the frame
is not actually lost, only delayed, it is possible for the LLC Type 2
procedures to become confused. And as a result, the link may be
eventually taken down if the delay exceeds the T1 timer times N2
retry count.
Given the use of LLC Type 2 services, Data Link Switching addresses
the following bridging problems:
DLC Time-outs
DLC Acknowledgments over the WAN
Flow and Congestion Control
Broadcast Control of Search Packets
Source-Route Bridging Hop Count Limits
NetBIOS also makes extensive use of datagram services that use
connectionless LLC Type 1 service. In this case, Data Link Switching
addresses the last two problems in the above list.
The principal difference between Data Link Switching and bridging is
that for connection-oriented data DLSw terminates the Data Link Control
whereas bridging does not. The following figure illustrates this
difference based upon two end systems operating with LLC Type 2
services.
<span class="grey">Wells & Bartky [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Bridging
--------
Bridge Bridge
+------+ +----+ +----+ +------+
| End | +-----+ | +-----/ | | +-----+ | End |
|System+-+ LAN +-+ | /------+ +-+ LAN +-+System|
| | +-----+ | | TCP/IP | | +-----+ | |
+------+ +----+ +----+ +------+
Info----------------------------------------------->
<-----------------------------------------------RR
Data Link Switching
-------------------
+------+ +----+ +----+ +------+
| End | +-----+ | +-----/ | | +-----+ | End |
|System+-+ LAN +-+DLSw| /------+DLSw+-+ LAN +-+System|
| | +-----+ | | TCP/IP | | +-----+ | |
+------+ +----+ +----+ +------+
Info---------------> -------------> Info
<---------------RR ------------>
<------------RR
In traditional bridging, the Data Link Control is end-to-end. Data
Link Switching terminates the LLC Type 2 connection at the switch.
This means that the LLC Type 2 connections do not cross the wide area
network. The DLSw multiplexes LLC connections onto a TCP connection
to another DLSw. Therefore, the LLC connections at each end are
totally independent of each other. It is the responsibility of the
Data Link Switch to deliver frames that it has received from a LLC
connection to the other end. TCP is used between the Data Link
Switches to guarantee delivery of frames.
As a result of this design, LLC time-outs are limited to the local
LAN (i.e., they do not traverse the wide area). Also, the LLC Type 2
acknowledgments (RR's) do not traverse the WAN, thereby reducing
traffic across the wide area links. For SDLC links, polling and poll
response occurs locally, not over the WAN. Broadcast of search
frames is controlled by the Data Link Switches once the location of a
target system is discovered. Finally, the switches can now apply
back pressure to the end systems to provide flow and congestion
control.
Only one copy of an Link Protocol Data Unit (LPDU) is sent between
Data Link Switches in SSP messages (XIDFRAME and INFOFRAME). Retries
of the LPDU are absorbed by Data Link Switch that receives it. The
<span class="grey">Wells & Bartky [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Data Link Switch that transmits the LPDU received in an SSP message
to a local DLC, will perform retries in a manner appropriate for the
local DLC. This may involve running a reply timer and maintaining a
poll retry count. The length of the timer and the number of retries
is an implementation choice based on user configuration parameters
and the DLC type.
Data Link Switching uses LAN addressing to set up connections between
SNA systems. SDLC attached devices are defined with MAC and SAP
addresses to enable them to communicate with LAN attached devices.
For NetBIOS systems, Data Link Switching uses the NetBIOS name to
forward datagrams and to set up connections for NetBIOS sessions.
For LLC type 2 connection establishment, SNA systems send TEST (or in
some cases, XID) frames to the null (0x00) SAP. NetBIOS systems have
an address resolution procedure, based upon the Name Query and Name
Recognized frames, that is used to establish an end-to-end circuit.
Since Data Link Switching may be implemented in multi-protocol
routers, there may be situations where both bridging and switching
are enabled. SNA frames can be identified by their link SAP. Typical
SAP values for SNA are 0x04, 0x08, and 0x0C. NetBIOS always uses a
link SAP value of 0xF0.
<span class="grey">Wells & Bartky [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>. Transport Connection</span>
Data Link Switches can be in used in pairs or by themselves.
A Single DLSw internally switches one data link to another without
using TCP (DLC(1) to DLC(2) in the figure below). This RFC does not
go into details on how to implement this feature and it is not a
requirement to support this RFC.
A paired DLSw multiplexes data links over a reliable transport using
a Switch-to-Switch Protocol (SSP).
+-------------------------------------------+Switch-to-Switch
| DLC Interfaces | Protocol (SSP)
|+-----------+ DLC Request +-----------+ |
|| Data |<---------------| | |Send SSP Frame
|| Link | DLC Indication | | |-------------->
|| Control 1 |--------------->| | |
|+-----------+ | Data Link | |
|+-----------+ DLC Request | Switch | |
|| Data |<-------------- | | |Rec. SSP Frame
|| Link | DLC Indication | | |<-------------
|| Control 2 | -------------->| | |
|+-----------+ +-----------+ |
| Multi-Protocol Router |
+-------------------------------------------+
Before Data Link Switching can occur between two routers, they must
establish two TCP connections between them. Each Data Link Switch
will maintain a list of DLSw capable routers and their status
(active/inactive). After the TCP connection is established, SSP
messages are exchanged to establish the capabilities of the two Data
Link Switches. Once the exchange is complete, the DLSw will employ
SSP control messages to establish end-to-end circuits over the
transport connection. Within the transport connection, DLSw SSP
messages are exchanged. The message formats and types for these SSP
messages are documented in the following sections.
The default parameters associated with the TCP connections between
Data Link Switches are as follows:
Socket Family AF_INET (Internet protocols)
Socket Type SOCK_STREAM (stream socket)
Read Port Number 2065
Write Port Number 2067
<span class="grey">Wells & Bartky [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Two or more Data Link Switches may be attached to the same LAN,
consisting of a number of token-ring segments interconnected by
source-routing bridges. In this case, a TCP connection is not
defined between bridges attached to the same LAN. This will allow
using systems to select one of the possible Data Link Switches in a
similar manner to the selection of a bridge path through a source-
routed bridged network. The virtual ring segment in each Data Link
Switch attached to a common LAN must be configured with the same ring
number. This will prevent LAN frames sent by one Data Link Switch
from being propagated through the other Data Link Switches.
<span class="grey">Wells & Bartky [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-3.1" href="#section-3.1">3.1</a> SSP Frame Formats</span>
The following diagrams show the two message header formats exchanged
between Data Link Switches, Control and Information. The Control
message header is used for all messages except Information Frames
(INFOFRAME) and Independent Flow Control Messages (IFCM), which are
sent in Information header format. The INFOFRAME, KEEPALIVE and IFCM
message headers are 16 bytes long, and the control message header is
72 bytes long. The fields in the first sixteen bytes of all message
headers are the same.
CONTROL MESSAGES (72 Bytes)
(zero based offsets below shown in decimal (xx) )
+-----------------------------+-----------------------------+
| (00) Version Number | (01) Header Length (= 72) |
+-----------------------------+-----------------------------+
| (02) Message Length |
+-----------------------------+-----------------------------+
| (04) Remote Data Link Correlator |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (08) Remote DLC Port ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (12) Reserved Field |
+-----------------------------+-----------------------------+
| (14) Message Type | (15) Flow Control Byte |
+-----------------------------+-----------------------------+
| (16) Protocol ID | (17) Header Number |
+-----------------------------+-----------------------------+
| (18) Reserved |
+-----------------------------+-----------------------------+
| (20) Largest Frame Size | (21) SSP Flags |
+-----------------------------+-----------------------------+
| (22) Circuit Priority | (23) Message Type (see note)|
+-----------------------------+-----------------------------+
| (24) Target MAC Address (non-canonical format) |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -|
| |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (30) Origin MAC Address (non-canonical format) |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -|
<span class="grey">Wells & Bartky [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
| |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| . . |
+-----------------------------+-----------------------------+
| (36) Origin Link SAP | (37) Target Link SAP |
+-----------------------------+-----------------------------+
| (38) Frame Direction | (39) Reserved |
+-----------------------------+-----------------------------+
| (40) Reserved |
+-----------------------------+-----------------------------+
| (42) DLC Header Length |
+-----------------------------+-----------------------------+
| (44) Origin DLC Port ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (48) Origin Data Link Correlator |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (52) Origin Transport ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (56) Target DLC Port ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (60) Target Data Link Correlator |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (64) Target Transport ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (68) Reserved Field |
+-----------------------------+-----------------------------+
| (70) Reserved Field |
+-----------------------------+-----------------------------+
(Even Byte) (Odd Byte)
<span class="grey">Wells & Bartky [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
INFORMATION MESSAGE (16 Bytes)
+-----------------------------+-----------------------------+
| (00) Version Number | (01) Header Length (= 16) |
+-----------------------------+-----------------------------+
| (02) Message Length |
+-----------------------------+-----------------------------+
| (04) Remote Data Link Correlator |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (08) Remote DLC Port ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| (12) Reserved Field |
+-----------------------------+-----------------------------+
| (14) Message Type | (15) Flow Control Byte |
+-----------------------------+-----------------------------+
(Even Byte) (Odd Byte)
The first sixteen bytes of control and information message headers
contain identical fields. A brief description of some of the fields
in an SSP message are shown below (if not defined below, the fields
and/or their values are described in subsequent sections).
The Version Number field (offset 0) is set to 0x31 (ASCII '1'),
indicating a decimal value of 49. This is used to indicate DLSw
version 1.
The Header Length field (offset 1) is 0x48 for control messages,
indicating a decimal value of 72 bytes, and 0x10 for information and
Independent Flow Control messages, indicating a decimal value of 16
bytes.
The Message Length field (offset 2) defines the number of bytes
within the data field following the header.
The Flow Control Byte field (offset 15) is described in <a href="#section-8">section 8</a>.
The Header Number field (offset 17) is 0x01, indicating a value of
one.
The Circuit Priority field (offset 22) is described in <a href="#section-4">section 4</a>.
The Frame Direction field (offset 38) is set to 0x01 for frames sent
from the origin DLSw to the target DLSw, and is set to 0x02 for
frames sent from the target DLSw to the origin DLSw.
<span class="grey">Wells & Bartky [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Note: The Remote Data Link Correlator and Remote DLC Port ID are set
equal to the Target Data Link Correlator and Target DLC Port ID if
the Frame Direction field is set to 0x01, and are set equal to the
Origin Data Link Correlator and Origin DLC Port ID if the Direction
Field is set to 0x02.
The Protocol ID field is set to 0x42, indicating a decimal value of
66.
The DLC Header Length is set to zero for SNA and is set to 0x23 for
NetBIOS datagrams, indicating a length of 35 bytes. This includes
the Access Control (AC) field, the Frame Control (FC) field,
Destination MAC Address (DA), the Source MAC Address (SA), the
Routing Information (RI) field (padded to 18 bytes), the Destination
link SAP (DSAP), the Source link SAP (SSAP), and the LLC control
field (UI).
NOTE: The values for the Message Type field are defined in <a href="#section-3.5">section</a>
<a href="#section-3.5">3.5</a>. Note that this value is specified in two different fields
(offset 14 and 23 decimal) of the control message header. Only the
first field is to be used when parsing a received SSP message. The
second field is to be ignored by new implementations on reception.
The second field was left in for backwards compatibility with <a href="./rfc1434">RFC</a>
<a href="./rfc1434">1434</a> implementations and this field may be used in future versions if
needed.
The SSP Flags field contains additional information related to the
SSP message. The flags are defined as follows (bit 7 being the most
significant bit and bit 0 the least significant bit of the octet):
Bit(s)
76543210 Name Meaning
--------- ----- -------
x....... SSPex 1 = explorer message (CANUREACH and ICANREACH)
Reserved fields are set to zero upon transmission and should be
ignored upon receipt.
<span class="h3"><a class="selflink" id="section-3.2" href="#section-3.2">3.2</a> Address Parameters</span>
A data link is defined as a logical association between the two end
stations using Data Link Switching. It is identified by a Data Link
ID (14 bytes) consisting of the pair of attachment addresses
associated with each end system. Each attachment address is
represented by the concatenation of the MAC address (6 bytes) and the
LLC address (1 byte). Each attachment address is classified as
either "Target" in the context of the Destination MAC/SAP addresses
of an explorer frame sent in the first frame used to establish a
<span class="grey">Wells & Bartky [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
circuit, or "Origin" in the context of the Source MAC/SAP addresses.
All MAC addresses are expressed in non-canonical (Token-Ring) format.
DATA LINK ID (14 Bytes @ Control message offset 24 decimal)
+-----------------------------+-----------------------------+
| Target MAC Address |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| Origin MAC Address |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| Origin Link SAP | Target Link SAP |
+-----------------------------+-----------------------------+
An end-to-end circuit is identified by a pair of Circuit ID's. A
Circuit ID is a 64 bit number that identifies the DLC circuit within
a single DLSw. It consists of a DLC Port ID (4 bytes), and a Data
Link Correlator (4 bytes). The Circuit ID must be unique in a single
DLSw and is assigned locally. The pair of Circuit ID's along with
the Data Link IDs, uniquely identify a single end-to-end circuit.
Each DLSw must keep a table of these Circuit ID pairs, one for the
local end of the circuit and the other for the remote end of the
circuit. In order to identify which Data Link Switch originated the
establishment of a circuit, the terms, "Origin" DLSw and "Target"
DLSw, will be employed in this document.
CIRCUIT ID (8 Bytes)
+-----------------------------+-----------------------------+
| DLC Port ID |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
| Data Link Correlator |
+- - - - - - - - - - - - - - -+- - - - - - - - - - - - - - -+
| |
+-----------------------------+-----------------------------+
The Origin Transport ID and the Target Transport ID fields in the
message header are used to identify the individual TCP/IP port on a
Data Link Switch. The values have only local significance. However,
each Data Link Switch is required to reflect the values contained in
<span class="grey">Wells & Bartky [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
these two fields, along with the associated values for DLC Port ID
and the Data Link Correlator, when returning a message to the other
Data Link Switch.
The following figure shows the use of the addressing parameters
during the establishment of an end-to-end connection. The CANUREACH,
ICANREACH, and REACH_ACK message types all carry the Data Link ID,
consisting of the MAC and Link SAP addresses associated with the two
end stations. The CANUREACH and ICANREACH messages are qualified by
the SSPex flag into CANUREACH_ex, ICANREACH_ex (explorer messages)
and CANUREACH_cs, ICANREACH_cs (circuit start). The CANUREACH_ex is
used to find a remote MAC and Link SAP address without establishing
an SSP circuit. Upon receipt of a CANUREACH_cs message, the target
DLSw starts a data link for each port, thereby obtaining a Data Link
Correlator. If the target station can be reached, an ICANREACH_cs
message is returned to the origin DLSw containing the Target Circuit
ID parameter. Upon receipt, the origin DLSw starts a data link and
returns the Origin Circuit ID to the target DLSw within the REACH_ACK
message. (Note for a full list of message types, see <a href="#section-3.5">section 3.5</a>.)
+------------+ +------------+
|Disconnected| |Disconnected|
+------------+ CANUREACH_cs (Data Link ID) +------------+
------------------------------------------------->
ICANREACH_cs (Data Link ID, Target Circuit ID)
<------------------------------------------------
REACH_ACK (Data Link ID, Origin Cir ID, Target Cir ID)
------------------------------------------------->
+------------+ +------------+
|Circuit Est.| |Circuit Est.|
+------------+ +------------+
XIDFRAME (Data Link ID, Origin Cir ID, Target Cir ID)
<------------------------------------------------>
CONTACT (Data Link ID, Origin Cir ID, Target Cir ID)
------------------------------------------------->
CONTACTED (Data Link ID, Origin Cir ID, Target Cir ID)
<-------------------------------------------------
+------------+ +------------+
| Connected | | Connected |
+------------+ +------------+
INFOFRAME (Remote Circuit ID = Target Circuit ID)
------------------------------------------------->
INFOFRAME (Remote Circuit ID = Origin Circuit ID)
<-------------------------------------------------
During the exchange of the XIDFRAME, CONTACT, and CONTACTED messages,
the pair of Circuit ID parameters is included in the message format
along with the DATA LINK ID parameter. Once the connection has been
<span class="grey">Wells & Bartky [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
established, the INFOFRAME messages are exchanged with the shorter
header. This header contains only the Circuit ID associated with the
remote DLSw. The Remote Data Link Correlator and the Remote DLC Port
ID are set equal to the Data Link Correlator and the DLC Port ID that
are associated with the origin or target Data Link Switch, dependent
upon the direction of the packet.
<span class="h3"><a class="selflink" id="section-3.3" href="#section-3.3">3.3</a> Correlators</span>
The local use, and contents of the Data Link Correlator, Port ID and
Transport ID fields in SSP messages is an implementation choice.
These fields have local significance only. The values received from
a partner DLSw must not be interpreted by the DLSw that receives them
and should be echoed "as is" to a partner DLSw in subsequent
messages. All implementations must obey the following rules in this
section (3.3) on the assignment and fixing of these correlator fields
for each transport connection or circuit:
The Transport ID fields are learned from the first SSP message
exchanged with a DLSw partner (the Capabilities exchange). This
field should not be varied by a DLSw after the capabilities exchange
and must be reflected to the partner DLSw in every SSP control
message.
The Target Data Link Correlator, Target Port ID and Target Transport
ID must remain the same once the Target DLSw has sent the
ICANREACH_cs for a given circuit. The Origin DLSw must store the
values specified in the ICANREACH_cs and use these on all subsequent
SSP messages for this circuit.
The Origin DLSw must allow these fields to vary until the
ICANREACH_cs is received. Each SSP message issued for a circuit must
reflect the values specified by the Target DLSw in the last SSP
message for this circuit received by the Origin DLSw. Binary zero
should be used if no such message has yet been received for a given
circuit (apart from the Target Transport ID which will have been
learnt as specified above).
The Origin Data Link Correlator, Origin Port ID and Origin Transport
ID must remain the same once the Origin DLSw has issued the REACH_ACK
for a given circuit. The Target DLSw must store the values specified
in the REACH_ACK and use these on all subsequent SSP messages for
this circuit.
The Target DLSw must allow these fields to vary until the REACH_ACK
is received. Each SSP message issued for a circuit must reflect the
values specified by the Origin DLSw in the last SSP message for this
circuit received by the Target DLSw. Binary zero should be used if
<span class="grey">Wells & Bartky [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
no such message has yet been received for a given circuit (apart from
the Origin Transport ID which will have been learnt as specified
above).
For the purposes of correlator exchange, explorer messages form a
separate circuit. Both DLSw partners must reflect the last received
correlator values as specified above. However correlators learned on
explorer messages need not be carried over to a subsequent circuit
setup attempt. In particular, the Origin DLSw may elect to use the
same values for the Origin Data Link Correlator and Origin Port ID
when it issues a CANUREACH_cs after receiving an ICANREACH_ex or
NETBIOS_NR_ex. However the Target DLSw must not assume that the
CANUREACH_cs will specify any of the Target Data Link Correlator or
Target Port ID that were exchanged on the explorer messages.
Received SSP messages that require a valid Remote Circuit ID but
cannot be associated with an existing circuit should be rejected with
a HALT_DL_NOACK message. This is done to prevent a situation where
one DLSw partner has a circuit defined while the other partner does
not. The exception would be a HALT_DL_NOACK message with an invalid
Remote Circuit ID. The HALT_DL_NOACK message is typically used in
error situations where a response is not appropriate.
The SSP messages requiring a valid Remote Circuit ID are all messages
except the following: CANUREACH_ex, CANUREACH_cs, ICANREACH_ex,
ICANREACH_cs, NETBIOS_NQ_cs, NETBIOS_NR_cs, DATAFRAME, NETBIOS_ANQ,
NETBIOS_ANR, KEEPALIVE and CAP_EXCHANGE.
<span class="h3"><a class="selflink" id="section-3.4" href="#section-3.4">3.4</a> Largest Frame Size Field</span>
The Largest Frame Size (LF Size) field in the SSP Control Header is
used to carry the LF Size bits across the DLSw connection. This
should be used to ensure that the two end-stations always negotiate a
frame size to be used on a circuit that does not require the Origin
and Target DLSw partners to re-segment frames.
This field is valid on CANUREACH_ex, CANUREACH_cs, ICANREACH_ex,
ICANREACH_cs, NETBIOS_NQ_ex and NETBIOS_NR_ex messages only. The
contents of this field should be ignored on all other frames.
Every DLSw forwarding a SSP frame to its DLSw partner must ensure
that the contents of this frame reflect the minimum capability of the
route to its local end-station or any limit imposed by the DLSw
itself.
The bit-wise definition of this field is as follows (bit 7 is the
most significant bit, bit 0 is the least significant bit):
<span class="grey">Wells & Bartky [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
7 6 5 4 3 2 1 0
+-------------------------------+
| c | r | b | b | b | e | e | e |
+-------------------------------+
c . . . . . . . LF Size Control flag
(significant on messages
from Origin to Target
DLSw only)
0=fail circuit if route
obtained requires a
smaller LF size
1=don't fail the circuit
but return the LF size
obtained even if it is
smaller
. r . . . . . . Reserved
. . b . . . . . Largest Frame Bit Base
. . . b . . . . Largest Frame Bit Base
. . . . b . . . Largest Frame Bit Base
. . . . . e . . Largest Frame Bit Extended
. . . . . . e . Largest Frame Bit Extended
. . . . . . . e Largest Frame Bit Extended
<----- LF Bits ----->
Refer to IEEE 802.1D Standard, Annex C for encoding of Largest Frame
base and extended bit values.
The Origin DLSw "Size Control" flag informs a Target DLSw that
chooses to reply to *_cs messages on the basis of cached information
that it may safely return a smaller LF Size on the ICANREACH_cs frame
if it has had to choose an alternative route on which to initialize
the circuit. If this bit is set to 1, the Origin DLSw takes
responsibility for ensuring that the end-stations negotiate a
suitable frame size for the circuit. If this bit is set to 0, the
Target DLSw must not reply to the CANUREACH_cs if it cannot obtain a
route to the Target end station that support an LF Size at least as
large as that specified in the CANUREACH_cs frame.
<span class="h3"><a class="selflink" id="section-3.5" href="#section-3.5">3.5</a> Message Types</span>
The following table lists the protocol data units that are exchanged
between Data Link Switches. All values not listed are reserved for
potential use in follow-on releases.
<span class="grey">Wells & Bartky [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Command Description Type flags/notes
------- -------- ------ -----------
CANUREACH_ex Can U Reach Station-explorer 0x03 SSPex
CANUREACH_cs Can U Reach Station-circuit start 0x03
ICANREACH_ex I Can Reach Station-explorer 0x04 SSPex
ICANREACH_cs I Can Reach Station-circuit start 0x04
REACH_ACK Reach Acknowledgment 0x05
DGRMFRAME Datagram Frame 0x06 (note 1)
XIDFRAME XID Frame 0x07
CONTACT Contact Remote Station 0x08
CONTACTED Remote Station Contacted 0x09
RESTART_DL Restart Data Link 0x10
DL_RESTARTED Data Link Restarted 0x11
ENTER_BUSY Enter Busy 0x0C (note 2)
EXIT_BUSY Exit Busy 0x0D (note 2)
INFOFRAME Information (I) Frame 0x0A
HALT_DL Halt Data Link 0x0E
DL_HALTED Data Link Halted 0x0F
NETBIOS_NQ_ex NETBIOS Name Query-explorer 0x12 SSPex
NETBIOS_NQ_cs NETBIOS Name Query-circuit setup 0x12 (note 3)
NETBIOS_NR_ex NETBIOS Name Recognized-explorer 0x13 SSPex
NETBIOS_NR_cs NETBIOS Name Recog-circuit setup 0x13 (note 3)
DATAFRAME Data Frame 0x14 (note 1)
HALT_DL_NOACK Halt Data Link with no Ack 0x19
NETBIOS_ANQ NETBIOS Add Name Query 0x1A
NETBIOS_ANR NETBIOS Add Name Response 0x1B
KEEPALIVE Transport Keepalive Message 0x1D (note 4)
CAP_EXCHANGE Capabilities Exchange 0x20
IFCM Independent Flow Control Message 0x21
TEST_CIRCUIT_REQ Test Circuit Request 0x7A
TEST_CIRCUIT_RSP Test Circuit Response 0x7B
Note 1: Both the DGRMFRAME and DATAFRAME messages are used to carry
information received by the DLC entity within UI frames. The
DGRMFRAME message is addressed according to a pair of Circuit IDs,
while the DATAFRAME message is addressed according to a Data Link ID,
being composed of a pair of MAC addresses and a pair of link SAP
addresses. The latter is employed prior to the establishment of an
end-to-end circuit when Circuit IDs have yet to be established or
during circuit restart when Data Links are reset.
Note 2: These messages are not used for the DLSw Standard but may be
used by older DLSw implementations. They are listed here for
informational purposes. These messages were added after publication
of <a href="./rfc1434">RFC 1434</a> and were deleted in this standard (adaptive pacing is now
used instead).
<span class="grey">Wells & Bartky [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Note 3: These messages are not normally issued by a Standard DLSw,
which uses the NB_*_ex messages as shown in <a href="#section-5.4">section 5.4</a>. However if
a Standard DLSw attempts to interoperate with older DLSw
implementations, these messages correspond to the NETBIOS_NQ and
NETBIOS_NR messages used in <a href="./rfc1434">RFC1434</a> both to locate the resource and
to setup a circuit. This document does not attempt to provide a
complete specification of the use of these messages.
Note 4: A KEEPALIVE message may be sent by a DLSw to a partner DLSw
in order to verify the TCP connection (or other future SSP carrying
protocol) is still functioning. If received by a DLSw, this message
is discarded and ignored. Use of this message is optional.
For the exchange of NetBIOS control messages, the entire DLC header
is carried as part of the message unit. This includes the MAC
header, with the routing information field padded to 18 bytes, and
the LLC header. The following message types are affected:
NETBIOS_NQ, NETBIOS_NR, NETBIOS_ANQ, NETBIOS_ANR, and DATAFRAME when
being used by NetBIOS systems. The routing information in the DLC
header is not used by the remote Data Link Switch upon receiving the
above five messages.
Any SSP message types not defined above if received by a DLSw are to
be ignored (i.e., no error action is to be performed). A Data Link
Switch should quietly drop any SSP message with a Message Type that
is not recognized or not supported. Receipt of such a message should
not cause the termination of the transport connection to the message
sender.
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>. Circuit Priority</span>
At circuit start time, each circuit end point will provide priority
information to its circuit partner. The initiator of the circuit
will choose which circuit priority will be effective for the life of
the circuit. If Priority is not implemented by the Data Link Switch,
then "Unsupported" priority is used.
<span class="h3"><a class="selflink" id="section-4.1" href="#section-4.1">4.1</a> Frame format</span>
Circuit priority will be valid in the CANUREACH_cs, ICANREACH_cs, and
REACH_ACK frames only. The relevant header field is shown below. The
Circuit Priority value is a byte value at offset 22 in an SSP Control
Message.
<span class="grey">Wells & Bartky [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The following describes the format of the Circuit Priority byte.
7 6 5 4 3 2 1 0
+-------------------+-----------+
| reserved | CP |
+-------------------+-----------+
CP: Circuit Priority bits
000 - Unsupported (note 1)
001 - Low Priority
010 - Medium Priority
011 - High Priority
100 - Highest Priority
101 to 111 are reserved for future use
Note 1: Unsupported means that the Data Link Switch that originates
the circuit does not implement priority. Actions taken on
Unsupported priority are vendor specific.
<span class="h3"><a class="selflink" id="section-4.2" href="#section-4.2">4.2</a> Circuit Startup</span>
The sender of a CANUREACH_cs is responsible for setting the CP bits
to reflect the priority it would like to use for the circuit being
requested. The mechanism for choosing an appropriate value is
implementation dependent. The sender of an ICANREACH_cs frame will
set the CP bits to reflect the priority it would like to use for the
circuit being requested, with the mechanism for choosing the
appropriate value being implementation dependent. The receiver of
the ICANREACH_cs will select from the priorities in the CANUREACH_cs
and ICANREACH_cs frames, and will set the value in the CP field of
the REACH_ACK frame that follows to the value to be used for this
circuit. This priority will be used for the life of the circuit. A
CANUREACH_cs or ICANREACH_cs with the circuit priority value set to
Unsupported (CP=000) indicates that the sender does not support the
circuit priority function.
<span class="grey">Wells & Bartky [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Flow:
DLSw A DLSw B
CANUREACH_cs (CP=011) -----> Circuit initiator requests
high Priority.
<--------- ICANREACH_cs (CP=010) Circuit target requests
medium priority.
REACH_ACK (CP=010) --------> Circuit initiator sets
the priority for this
circuit to medium. The
circuit initiator could
choose either high or
medium in this example.
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>. DLSw State Machine</span>
The following state tables describe the states for a single circuit
through the Data Link Switch. State information is kept for each
connection. The initial state for a connection is DISCONNECTED. The
steady state is either CIRCUIT_ESTABLISHED or CONNECTED. In the former
state, an end-to-end circuit has been established allowing the support
of Type 1 LLC between the end systems. The latter state exists when an
end-to-end connection has been established for the support of Type 2 LLC
services between the end systems.
For SNA, LLC type 2 connection establishment is via the use of IEEE
802.2 Test or XID frames. SNA devices send these frames to the null
SAP in order to determine the source route information in support of
bridging. Normally SNA devices use SAP 0x04, 0x08, or 0x0C (most SNA
LLC2 devices that have a single PU per MAC address use a default of
0x04). Typically the SAP would be used to determine if the Test frames
should be sent to the DLSw code in the router. If both bridging and
DLSw are enabled, this allows the product to ensure that SNA frames are
not both bridged and switched. Note that although typically SNA uses a
DSAP and SSAP of 0x04, it allows for other SAPs to be configured and
supports unequal SAPs. This allows multiple PUs to share connections
between two given MAC addresses (each PU to PU session uses one LLC2
connection).
For NetBIOS, LLC type 2 connection establishment is via the Name Query
and Name Recognized frames. These frames are used for both address
resolution and source route determination. NetBIOS devices use SAP
0xF0.
<span class="grey">Wells & Bartky [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-5.1" href="#section-5.1">5.1</a> Data Link Switch States</span>
The Switch-to-Switch Protocol is formally defined through the state
machines described in this chapter. The following table lists the
thirteen possible states for the main circuit FSM. A separate state
machine instance is employed for each end-to-end circuit that is
maintained by the Data Link Switch.
State Name Description
---------- -----------
CIRCUIT_ESTABLISHED The end-to-end circuit has been
established. At this time LLC Type 1
services are available from end-to-end.
CIRCUIT_PENDING The target DLSw is awaiting a REACH_ACK
response to an ICANREACH_cs message.
CIRCUIT_RESTART The DLSw that originated the reset is
awaiting the restart of the data link
and the DL_RESTARTED response to a
RESTART_DL message.
CIRCUIT_START The origin DLSw is awaiting a
ICANREACH_cs in response to a
CANUREACH_cs message.
CONNECTED The end-to-end connection has
been established thereby allowing
LLC Type 2 services from end-to-end
in addition to LLC Type 1 services.
CONNECT_PENDING The origin DLSw is awaiting the
CONTACTED response to a CONTACT
message.
CONTACT_PENDING The target DLSw is awaiting the
DLC_CONTACTED confirmation to a
DLC_CONTACT signal (i.e., DLC
is waiting for a UA response to
an SABME command).
DISCONNECTED The initial state with no circuit
or connection established, the
DLSw is awaiting either a
CANUREACH_cs, or an ICANREACH_cs.
DISCONNECT_PENDING The DLSw that originated the
disconnect is awaiting the DL_HALTED
<span class="grey">Wells & Bartky [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
response to a HALT_DL message.
HALT_PENDING The remote DLSw is awaiting the
DLC_DL_HALTED indication following
the DLC_HALT_DL request (i.e., DLC
is waiting for a UA response to a
DISC command), due to receiving a
HALT_DL message.
HALT_PENDING_NOACK The remote DLSw is awaiting the
DLC_DL_HALTED indication following
the DLC_HALT_DL request (i.e., DLC
is waiting for a UA response to a
DISC command), due to receiving a
HALT_DL_NOACK message.
RESTART_PENDING The remote DLSw is awaiting the
DLC_DL_HALTED indication following
the DLC_HALT_DL request (i.e., DLC
is waiting for a UA response to a
DISC command), and the restart of
the data link.
RESOLVE_PENDING The target DLSw is awaiting
the DLC_DL_STARTED indication
following the DLC_START_DL request
(i.e., DLC is waiting for a Test
response as a result of sending a
Test command).
The DISCONNECTED state is the initial state for a new circuit. One
end station starts the connection via an XID or SABME command (i.e.,
DLC_XID or DLC_CONTACTED). Upon receipt, the Data Link Switches
exchange a set of CANUREACH_cs, ICANREACH_cs and REACH_ACK messages.
Upon completion of this three-legged exchange both Data Link Switches
will be in the CIRCUIT_ESTABLISHED state. Three pending states also
exist during this exchange. The CIRCUIT_START state is entered by
the origin Data Link Switch after it has sent the CANUREACH_cs
message. The RESOLVE_PENDING state is entered by the target Data
Link Switch awaiting a Test response to a Test Command. And lastly,
the CIRCUIT_PENDING state is entered by the target DLSw awaiting the
REACH_ACK reply to an ICANREACH_cs message.
The CIRCUIT_ESTABLISHED state allows for the exchange of LLC Type 1
frames such as the XID exchanges between SNA stations that occurs
prior to the establishment of a connection. Also, datagram traffic
(i.e., UI frames) may be sent and received between the end stations.
These exchanges use the XIDFRAME and DGRMFRAME messages sent between
<span class="grey">Wells & Bartky [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
the Data Link Switches.
In the CIRCUIT_ESTABLISHED state, the receipt of a SABME command
(i.e., DLC_CONTACTED) causes the origin DLSw to issue a CONTACT
message, to send an RNR supervisory frame (i.e., DLC_ENTER_BUSY) to
the origin station, and to enter the CONNECT_PENDING state awaiting a
CONTACTED message. The target DLSw, upon the receipt of a CONTACT
message, will issue a SABME command (i.e., DLC_CONTACT) and enter the
Contact Pending state. Once the UA response is received (i.e.,
DLC_CONTACTED), the target DLSw sends a CONTACTED message and enters
the CONNECTED state. When received, the origin DLSw enters the
CONNECTED state and sends an RR supervisory frame (i.e.,
DLC_EXIT_BUSY).
The CONNECTED state is the steady state for normal data flow once a
connection has been established. Information frames (i.e., INFOFRAME
messages) are simply sent back and forth between the end points of
the connection. This is the path that should be optimized for
performance.
The connection is terminated upon the receipt of a DISC frame or
under some other error condition detected by DLC (i.e., DLC_ERROR).
Upon receipt of this indication, the DLSw will halt the local data
link, send a HALT_DL message to the remote DLSw, and enter the
DISCONNECT_PENDING State. When the HALT_DL frame is received by the
other DLSw, the local DLC is halted for this data link, a DL_HALTED
message is returned, and the DISCONNECTED state is entered. Receipt
of this DL_HALTED message causes the other DLSw to also enter the
DISCONNECTED state.
The CIRCUIT_RESTART state is entered if one of the Data Link Switches
receives a SABME command (i.e., DLC_RESET) after data transfer while
in the CONNECTED state. This causes a DM command to be returned to
the origin station and a RESTART_DL message to be sent to the remote
Data Link Switch. This causes the remote data link to be halted and
then restarted. The remote DLSw will then send a DL_RESTARTED
message back to the first DLSw. The receipt of the DL_RESTARTED
message causes the first DLSw to issue a new CONTACT message,
assuming that the local DLC has been contacted (i.e., the origin
station has resent the SABME command). This is eventually responded
to by a CONTACTED message. Following this exchange, both Data Link
Switches will return to the CONNECTED state. If the local DLC has
not been contacted, the receipt of a DL_RESTARTED command causes the
Data Link Switch to enter the CIRCUIT_ESTABLISHED state awaiting the
receipt of a SABME command (i.e., DLC_CONTACTED signal).
The HALT_PENDING, HALT_PENDING_NOACK and RESTART_PENDING states
correspond to the cases when the Data Link Switch is awaiting
<span class="grey">Wells & Bartky [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
responses from the local station on the adjacent LAN (e.g., a UA
response to a DISC command). Also in the RESTART_PENDING state, the
Data Link Switch will attempt to restart the data link prior to
sending a DL_RESTARTED message. For some implementations, the start
of a data link involves the exchange of a Test command/response on
the adjacent LAN (i.e., DLC_START_DL). For other implementations,
this additional exchange may not be required.
<span class="h3"><a class="selflink" id="section-5.2" href="#section-5.2">5.2</a> State Transition Tables</span>
This section provides a detailed representation of the Data Link
Switch, as documented by a single state machine. Many of the
transitions are dependent upon local signals between the Data Link
Switch entity and one of the DLC entities. These signals and their
definitions are given in the following tables.
DLC Events:
Event Name Description
---------- -----------
DLC_CONTACTED Contact Indication: DLC has received an SABME
command or DLC has received a UA response as a
result of sending an SABME command.
DLC_DGRM Datagram Indication: DLC has received a UI frame.
DLC_ERROR Error condition indicated by DLC: Such a
condition occurs when a DISC command is received
or when DLC experiences an unrecoverable error.
DLC_INFO Information Indication: DLC has received an
Information (I) frame.
DLC_DL_HALTED Data Link Halted Indication: DLC has
received a UA response to a DISC command.
DLC_DL_STARTED Data Link Started Indication: DLC has
received a Test response from the null SAP.
DLC_RESET Reset Indication: DLC has received an SABME
command during the time a connection is
currently active and has responded with DM.
DLC_RESOLVE_C Resolve Command Indication: DLC has received
a Test command addressed to the null SAP, or an
XID command addressed to the null SAP.
<span class="grey">Wells & Bartky [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
DLC_RESOLVED Resolve request: DLC has received a TEST response
frame (or equivalent for non-LAN DLCs) but has not
reserved the resources required for a circuit yet.
DLC_XID XID Indication: DLC has received an XID command
or response to a non-null SAP.
Other Events:
Event Name Description
---------- -----------
XPORT_FAILURE Failure of the transport connection used by the
circuit.
CS_TIMER_EXP The CIRCUIT_START timer (started when the circuit
went into CIRCUIT_START state) has expired.
DLC Actions:
Action Name Description
----------- -----------
DLC_CONTACT Contact Station Request: DLC will send a SABME
command or a UA response to an outstanding SABME
command.
DLC_DGRM Datagram Request: DLC will send a UI frame.
DLC_ENTER_BUSY Enter Link Station Busy: DLC will send an
RNR supervisory frame.
DLC_EXIT_BUSY Exit Link Station Busy: DLC will send an RR
supervisory frame.
DLC_HALT_DL Halt Data Link Request: DLC will send a DISC
command.
DLC_INFO Information Request: DLC will send an I frame.
DLC_RESOLVE Resolve request: DLC should issue a TEST (or
appropriate equivalent for non-LAN DLCs) but need
not reserve the resources required for a circuit yet.
DLC_RESOLVE_R Resolve Response Request: DLC will send a
Test response or XID response from the null SAP.
DLC_START_DL Start Data Link Request: DLC will send a Test
command to the null SAP.
<span class="grey">Wells & Bartky [Page 25]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-26" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
DLC_XID XID Request: DLC will send an XID command or an
XID response.
Other Actions:
Action Name Description
---------- -----------
START_CS_TIMER Start the CIRCUIT_START timer.
DLC_RESOLVE_R and DLC_START_DL actions require the DLC to reserve the
resources necessary for a link station as they are used only when a
circuit is about to be started. The DLC_RESOLVE action is used for
topology explorer traffic and does not require such resources to be
reserved, though a DLC implementation may choose not to distinguish
this from the DLC_START_DL action. See <a href="#section-5.4">section 5.4</a> for details of
the actions and events for explorer frames.
The Data Link Switch is described by a state transition table as
documented in the following sections. Each of the states is
described below in terms of the events, actions, and next state for
each transition. If a particular event is not listed for a given
state, no action and no state transition should occur for that event.
Any significant comments concerning the transitions within a given
state are given immediately following the table representing the
state.
A separate state machine instance is maintained by the Data Link
Switch for each end-to-end circuit. The number of circuits that may
be supported by each Data Link Switch is a local implementation
option.
The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex are
SSP messages that are not associated with a particular circuit. The
processing of these messages is covered in <a href="#section-5.4">section 5.4</a>.
<span class="grey">Wells & Bartky [Page 26]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-27" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.2.1" href="#section-5.2.1">5.2.1</a> DISCONNECTED State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CANUREACH_cs | DLC_START_DL | RESOLVE_PENDING |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_XID | If source route | If CANUREACH_cs was |
| | bridged frame with | sent: |
| | broadcast indicated:| CIRCUIT_START |
| | Send CANUREACH_ex | |
| | else: | |
| | Send CANUREACH_cs | |
| | START_CS_TIMER | |
+----------------------+---------------------+----------------------+
| DLC_DGRM | If NETBIOS | |
| | NAME_QUERY: | |
| | Send NETBIOS_NQ_ex | |
| | else: | |
| | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
| DLC_CONTACTED | Send CANUREACH_cs | CIRCUIT_START |
+----------------------+---------------------+----------------------+
It is assumed that each Data Link Switch will build a set of topology
tables giving the identity of each Data Link Switch that can reach a
specific MAC address or a specific NetBIOS name. This table can be
built using the explorer frames, as per the Explorer FSM in <a href="#section-5.4">section</a>
<a href="#section-5.4">5.4</a>. As a consequence, the amount of search traffic can be kept to a
minimum.
Upon receipt of a TEST command, broadcast XID or NetBIOS NAME_QUERY,
the Data Link Switch checks the topology table for the target MAC/SAP
or NetBIOS name. If there is no matching entry in the table, the
Data Link Switch uses the explorer FSMs in <a href="#section-5.4">section 5.4</a> to locate the
target MAC/SAP or NetBIOS name.
When the first non-broadcast XID or SABME flows, the Data Link
Switch issues a CANUREACH_cs to attempt to start a circuit. The
CANUREACH_cs message is sent to only those Data Link Switches that
are known to be able to reach the given MAC address. The mechanism
by which a topology table entry is determined to be out-of-date and
is deleted from the table is implementation specific.
The DISCONNECTED state is exited upon the sending of a CANUREACH_cs
by the origin DLSw or the receipt of a CANUREACH_cs message by a
<span class="grey">Wells & Bartky [Page 27]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-28" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
prospective target Data Link Switch. In the latter case, the Data
Link Switch will issue a Test command to the target station (i.e.,
DLC_START_DL signal is presented to DLC).
<span class="h4"><a class="selflink" id="section-5.2.2" href="#section-5.2.2">5.2.2</a> RESOLVE_PENDING State</span>
+-------------------+-----------------------+-----------------------+
| Event | Action(s) | Next State |
+-------------------+-----------------------+-----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+-------------------+-----------------------+-----------------------+
| DLC_DL_STARTED | If LF value of | If LF value of |
| | DLC_DL_STARTED | DLC_DL_STARTED |
| | is greater than or | is greater than or |
| | equal to LF Size of | equal to LF Size of |
| | CANUREACH_cs or LF | CANUREACH_cs or LF |
| | Size Control bit set: | Size Control bit set: |
| | Send ICANREACH_cs | CIRCUIT_PENDING |
| | else: | else: |
| | Send DLC_HALT_DL | HALT_PENDING_NOACK |
+-------------------+-----------------------+-----------------------+
| DLC_ERROR | | DISCONNECTED |
+-------------------+-----------------------+-----------------------+
| DLC_DGRM | Send DATAFRAME | |
+-------------------+-----------------------+-----------------------+
The RESOLVE_PENDING state is entered upon receipt of a CANUREACH_cs
message by the target DLSw. A data link is started, causing a Test
command to be sent by the DLC.
Several CANUREACH_cs messages can be received in the RESOLVE_PENDING
state. The Data Link Switch may update its topology information
based upon the origin MAC address information in each CANUREACH_cs
message.
Upon the receipt of a DLC_DL_STARTED signal in the RESOLVE_PENDING
state, the Data Link Switch may update its topology table base upon
the remote MAC address information. The ICANREACH_cs message must be
returned to the first partner DLSw from which a CANUREACH_cs was
received for this circuit, or an implementation may optionally reply
to all partners from which the CANUREACH_cs was received.
The RESOLVE_PENDING state is exited once the data link has been
started (i.e., a DLC_DL_STARTED signal is received as a result of a
Test response received by the DLC). The target Data Link Switch then
enters the CIRCUIT_PENDING state.
<span class="grey">Wells & Bartky [Page 28]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-29" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.2.3" href="#section-5.2.3">5.2.3</a> CIRCUIT_START State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CANUREACH_cs | If origin MAC addr | If DLC_START_DL |
| for circuit in | in CANUREACH_cs is | issued: |
| opposite direction | greater than origin | RESOLVE_PENDING |
| | MAC addr of circuit:| |
| | DLC_START_DL | |
| | else: | |
| | no action taken | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_cs | If LF Size Control | If LF Size Control |
| | bit set and LF Size | bit set and LF Size |
| | is not negotiable: | is not negotiable: |
| | Send HALT_DL_NOACK| DISCONNECTED |
| | else: | else if Connected: |
| | Send REACH_ACK, | CONNECT_PENDING |
| | Send appropriate | else: |
| | SSP message based | CIRCUIT_ESTABLISHED|
| | on the event | |
| | that generated | |
| | CANUREACH_cs | |
| | (see Note) | |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
| DLC_ERROR | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| CS_TIMER_EXP | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | | DISCONNECTED |
+----------------------+---------------------+----------------------+
The CIRCUIT_START state is entered by the origin Data Link Switch
when a DLC_XID or DLC_CONTACTED signal has been received from the
DLC.
The CIRCUIT_START state is exited upon receipt of an ICANREACH_cs
message. A REACH_ACK message is returned to the target Data Link
Switch. If the CIRCUIT_START state was entered due to a DLC_XID
signal, an XIDFRAME message containing the XID is sent to the target
Data Link Switch. If the CIRCUIT_START state was entered due to a
DLC_CONTACTED signal, a CONTACT message is sent to the target Data
Link Switch.
<span class="grey">Wells & Bartky [Page 29]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-30" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.2.4" href="#section-5.2.4">5.2.4</a> CIRCUIT_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CONTACT | DLC_CONTACT | CONTACT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | DLC_HALT_DL | HALT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive REACH_ACK | If Connected: | If Connected: |
| | Send CONTACT | CONNECT_PENDING, |
| | | else: |
| | | CIRCUIT_ESTABLISHED |
+----------------------+---------------------+----------------------+
| Receive XIDFRAME | DLC_XID | |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_CONTACTED | If UA is sent in | |
| | response to SABME: | |
| | DLC_ENTER_BUSY | |
| | else: | |
| | no action taken | |
+----------------------+---------------------+----------------------+
| DLC_ERROR | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| DLC_XID | Drop or hold until | |
| | REACH_ACK received | |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The CIRCUIT_PENDING state is entered by the target Data Link Switch
following the sending of an ICANREACH_cs message. In this state it
is awaiting the reception of a REACH_ACK message from the origin Data
Link Switch.
If the target Data Link Switch happens to receive a SABME command
from the target station while in the CIRCUIT_PENDING state (i.e., a
DLC_CONTACTED signal received from the DLC), the reception of the
REACH_ACK message causes the target Data Link Switch to enter the
CONNECT_PENDING state and to send a CONTACT message to the origin
<span class="grey">Wells & Bartky [Page 30]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-31" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Data Link Switch.
If no such SABME is received, the receipt of the REACH_ACK causes the
Data Link Switch to enter CIRCUIT_ESTABLISHED state.
<span class="h4"><a class="selflink" id="section-5.2.5" href="#section-5.2.5">5.2.5</a> CONNECT_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CONTACTED | If UA was sent in | CONNECTED |
| | response to SABME: | |
| | DLC_EXIT_BUSY | |
| | else: | |
| | DLC_CONTACT | |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | DLC_HALT_DL | HALT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_cs | Send HALT_DL_NOACK | |
+----------------------+---------------------+----------------------+
| DLC_RESET | Send RESTART_DL | CIRCUIT_RESTART |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The CONNECT_PENDING state is entered when a DLC_CONTACTED signal has
been received from the DLC (i.e., a SABME command has been received).
A CONTACT message it then issued. The state is exited upon the
receipt of a CONTACTED message. If a DLC_RESET signal is received,
the local data link is restarted and a RESTART_DL message is sent to
the remote DLSw.
An ICANREACH_cs received after the transition to CONNECT_PENDING
state indicates that more than one CANUREACH_cs was sent at circuit
establishment time and the target station was found by more than one
Data Link Switch partner. A HALT_DL_NOACK is sent to halt the
circuit started by the Data Link Switch partner that originated each
such ICANREACH_cs.
<span class="grey">Wells & Bartky [Page 31]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-32" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Note: Some implementations will also send a Test command in order to
restart the data link to the station that sent the SABME command
(i.e., a DLC_START_DL will be issued).
<span class="h4"><a class="selflink" id="section-5.2.6" href="#section-5.2.6">5.2.6</a> CIRCUIT_ESTABLISHED State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CONTACT | DLC_CONTACT | CONTACT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | DLC_HALT_DL | HALT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive XIDFRAME | DLC_XID | |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_cs | Send HALT_DL_NOACK | |
+----------------------+---------------------+----------------------+
| DLC_CONTACTED | Send CONTACT | CONNECT_PENDING |
| | If UA is sent in | |
| | response to SABME: | |
| | DLC_ENTER_BUSY | |
| | else: | |
| | no action taken | |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| DLC_XID | Send XIDFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The CIRCUIT_ESTABLISHED state is entered by the origin Data Link
Switch from the CIRCUIT_START state, and by the target Data Link
Switch from the CIRCUIT_PENDING state. The state is exited when a
connection is started (i.e., DLC receives a SABME command) or CONTACT
is received. The next state is CONTACT_PENDING or CONNECT_PENDING.
An ICANREACH_cs received after the transition to CIRCUIT_ESTABLISHED
state indicates that more than one CANUREACH_cs was sent at circuit
establishment time and the target station was found by more than one
<span class="grey">Wells & Bartky [Page 32]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-33" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Data Link Switch partner. A HALT_DL_NOACK is sent to halt the
circuit started by the Data Link Switch partner that originated each
such ICANREACH_cs.
<span class="h4"><a class="selflink" id="section-5.2.7" href="#section-5.2.7">5.2.7</a> CONTACT_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | DLC_HALT_DL | HALT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive RESTART_DL | DLC_HALT_DL | RESTART_PENDING |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_CONTACTED | Send CONTACTED | CONNECTED |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The CONTACT_PENDING state is entered upon the receipt of a CONTACT
message, which causes the Data Link Switch to issue a DLC_CONTACT
signal to the DLC (i.e., DLC sends a SABME command). This state is
then exited upon the receipt of a DLC_CONTACTED signal from the DLC
(i.e., a UA response received).
If a RESTART_DL message is received, indicating that the remote Data
Link Switch has received a DLC_RESET signal, the local Data Link
Switch sends a DISC command frame on the adjacent LAN (i.e.,
DLC_HALT_DL signal) and enter the RESTART_PENDING state.
An ICANREACH_cs received after the transition to CONTACT_PENDING
state indicates that more than one CANUREACH_cs was sent at circuit
establishment time and the target station was found by more than one
Data Link Switch partner. A HALT_DL_NOACK is sent to halt the data
link started by the Data Link Switch partner that originated this
ICANREACH_cs.
<span class="grey">Wells & Bartky [Page 33]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-34" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.2.8" href="#section-5.2.8">5.2.8</a> CONNECTED State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | DLC_HALT_DL | HALT_PENDING |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive RESTART_DL | DLC_HALT_DL | RESTART_PENDING |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive INFOFRAME | DLC_INFO | |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| Receive XIDFRAME | If non-activation | |
| | XID3: | |
| | DLC_XID | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_cs | Send HALT_DL_NOACK | |
+----------------------+---------------------+----------------------+
| Receive ENTER_BUSY | DLC_ENTER_BUSY | |
+----------------------+---------------------+----------------------+
| Receive EXIT_BUSY | DLC_EXIT_BUSY | |
+----------------------+---------------------+----------------------+
| Rec TEST_CIRCUIT_REQ | Snd TEST_CIRCUIT_RSP| |
+----------------------+---------------------+----------------------+
| DLC_RESET | Send RESTART_DL | CIRCUIT_RESTART |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| DLC_INFO | Send INFOFRAME | |
+----------------------+---------------------+----------------------+
| DLC_XID | If non-activation | |
| | XID3: | |
| | Send XIDFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The CONNECTED state is entered from the CONNECT_PENDING state upon
the receipt of a CONTACTED message or from the CONTACT_PENDING state
upon the receipt of a DLC_CONTACTED signal.
<span class="grey">Wells & Bartky [Page 34]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-35" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The CONNECTED state is exited usually under one of two conditions: a
DLC_ERROR signal received from the DLC (e.g., a DISC command received
by the local DLC), or a HALT_DL message received from the other Data
Link Switch (e.g., a DISC command received by the remote DLC).
A SABME command (i.e., a DLC_RESET signal) received by either Data
Link Switch will also cause the two Data Link Switches to leave the
CONNECTED state and attempt to restart the circuit. Following the
receipt of a SABME, the local Data Link Switch sends a RESTART_DL
message to the other Data Link Switch and enters the CIRCUIT_RESTART
state. Upon the receipt of the RESTART_DL message, the remote Data
Link Switch sends a DISC command (i.e., DLC_HALT_DL signal) and
enters the RESTART_PENDING state.
An ICANREACH_cs received after the transition to CONNECTED state
indicates that more than one CANUREACH_cs was sent at circuit
establishment time and the target station was found by more than one
Data Link Switch partner. A HALT_DL_NOACK is sent to halt the
circuit started by the Data Link Switch partner that originated each
such ICANREACH_cs.
Note: Some implementations will also send a Test command in order to
restart the data link to the station that sent the SABME command
(i.e., a DLC_START_DL will be issued).
<span class="h4"><a class="selflink" id="section-5.2.9" href="#section-5.2.9">5.2.9</a> CIRCUIT_RESTART State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive DL_RESTARTED | If Connected: | If Connected: |
| | Send CONTACT | CONNECT_PENDING, |
| | | else: |
| | | CIRCUIT_ESTABLISHED |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
<span class="grey">Wells & Bartky [Page 35]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-36" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The CIRCUIT_RESTART state is entered if a DLC_RESET signal is
received from the local DLC. This was caused by the receipt of a
SABME command while a connection was currently active. A DM response
will be issued to the SABME command and the Data Link Switch will
attempt to restart the end-to-end circuit.
The CIRCUIT_RESTART state is exited through one of two transitions.
The next state depends upon the time the local DLC has reached the
contacted state (i.e., a DLC_CONTACTED signal is presented) relative
to the receipt of the DL_RESTARTED message. This signal is caused by
the origin station resending the SABME command that initially caused
the Data Link Switch to enter the CIRCUIT_RESTART state. The two
cases are as follows:
1) DL_RESTARTED message received before the DLC_CONTACTED signal-
In this case, the CIRCUIT_ESTABLISHED state is entered.
2) DL_RESTARTED message received after the DLC_CONTACTED signal-
In this case, the CONNECT_PENDING state is entered.
<span class="h4"><a class="selflink" id="section-5.2.10" href="#section-5.2.10">5.2.10</a> DISCONNECT_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive DL_HALTED | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| Receive HALT_DL | Send DL_HALTED | |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| | DISCONNECTED |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | | DISCONNECTED |
+----------------------+---------------------+----------------------+
The DISCONNECT_PENDING state is entered when a DLC_ERROR signal is
received from the local DLC. Upon receipt of this signal, a HALT_DL
message is sent. Once an DL_HALTED message is received, the state is
exited, and the Data Link Switch enters the DISCONNECTED state.
<span class="grey">Wells & Bartky [Page 36]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-37" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.2.11" href="#section-5.2.11">5.2.11</a> RESTART_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive DGRMFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_DL_HALTED | Send DL_RESTARTED | CIRCUIT_ESTABLISHED |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send HALT_DL | DISCONNECT_PENDING |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DGRMFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | DLC_HALT_DL | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
The RESTART_PENDING state is entered upon the receipt of a RESTART_DL
message from the remote DLSw while the local Data Link Switch is in
either the CONTACT_PENDING state or the CONNECTED state, which causes
the local DLSw to issue a DISC command to the DLC. Upon the receipt
of the UA response (DLC_DL_HALTED), the data link is restarted, a
DL_RESTARTED message is returned to the remote DLSw, and the
CIRCUIT_ESTABLISHED state is entered.
Note: Some implementations will send a Test command in order to
restart the data link to the target station (i.e., a DLC_START_DL
will be issued) prior to sending the DL_RESTARTED message.
<span class="h4"><a class="selflink" id="section-5.2.12" href="#section-5.2.12">5.2.12</a> HALT_PENDING State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive HALT_DL_NOACK| | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_DL_HALTED | Send DL_HALTED | DISCONNECTED |
+----------------------+---------------------+----------------------+
| DLC_ERROR | Send DL_HALTED | DISCONNECTED |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
| XPORT_FAILURE | | HALT_PENDING_NOACK |
+----------------------+---------------------+----------------------+
<span class="grey">Wells & Bartky [Page 37]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-38" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The HALT_PENDING state is entered upon the receipt of a HALT_DL
message. This causes the local DLC to issue a DISC command. Upon the
receipt of the UA response (DLC_DL_HALTED), a DL_HALTED message is
returned to the remote DLSw and the DISCONNECTED state is entered.
<span class="h4"><a class="selflink" id="section-5.2.13" href="#section-5.2.13">5.2.13</a> HALT_PENDING_NOACK State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive DATAFRAME | DLC_DGRM | |
+----------------------+---------------------+----------------------+
| DLC_DL_HALTED | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| DLC_ERROR | | DISCONNECTED |
+----------------------+---------------------+----------------------+
| DLC_DGRM | Send DATAFRAME | |
+----------------------+---------------------+----------------------+
The HALT_PENDING_NOACK state is entered upon the receipt of a
HALT_DL_NOACK message. This causes the local DLC to issue a DISC
command. Upon the receipt of the UA response (DLC_DL_HALTED), the
DISCONNECTED state is entered.
<span class="h3"><a class="selflink" id="section-5.3" href="#section-5.3">5.3</a> NetBIOS Datagrams</span>
The NetBIOS protocols use a number of UI frames for directory
services and the transmission of datagrams. Most of these frames are
directed to a group MAC address (GA) with the routing information
field indicating spanning tree explorer (STE) (a.k.a. Single Route
Broadcast). The NB_Add_Name_Response and NB_Name_Recognized frames
are directed to a specific MAC address with the routing information
field indicating an all routes explorer frame (ARE) (a.k.a. All
Routes Broadcast) The NB_Status_Response frame, is directed to a
specific MAC address with the routing information field indicating a
specifically routed frame (SRF). The handling of these frames is
summarized in the following table.
<span class="grey">Wells & Bartky [Page 38]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-39" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
+---------------------------+------------------+--------------------+
| Event | Action(s) | Comment |
+---------------------------+------------------+--------------------+
| DLC_DGRM for NETBIOS | Send NETBIOS_ANQ | Transmitted to all |
| group address: | | remote DLSw |
| NB_Add_Name_Query | | |
+---------------------------+------------------+--------------------+
| DLC_DGRM for a specific | Send NETBIOS_ANR | Transmitted to |
| address: | | specific DLSw |
| NB_Add_Name_Response | | |
+---------------------------+------------------+--------------------+
| DLC_DGRM for a specific | Send DATAFRAME | Transmitted to all |
| address: | | remote DLSw |
| NB_Status_Response | | |
+---------------------------+------------------+--------------------+
| DLC_DGRM for NETBIOS | Send DATAFRAME | Transmitted to all |
| group address: | | remote DLSw |
| NB_Name_in_Conflict | | |
| NB_Add_Group_Name_Query | | |
| NB_Datagram, | | |
| NB_Datagram_Broadcast | | |
| NB_Status_Query | | |
| NB_Terminate_Trace | | |
+---------------------------+------------------+--------------------+
The above actions do not apply in the following states:
CIRCUIT_ESTABLISHED, CONTACT_PENDING, CONNECT_PENDING, CONNECTED, and
CIRCUIT_PENDING. The handling of the remaining two UI frames used by
NetBIOS systems, NB_Name_Query and NB_Name_Recognized, are documented
as part of the DLSw state machine in the previous section (i.e.,
DISCONNECTED and RESOLVE_PENDING states). Furthermore, the handling
of NetBIOS datagrams (i.e., NB_Datagram) sent to a specific MAC
address is also governed by the DLSw state machine.
Note: Some implementations also issue Test frames during the
exchange of the NetBIOS, NB_Name_Query and NB_Name_Recognized. This
exchange of protocol data units occurs during the start of a data
link and is used to determine the routing information. Most other
implementations of NetBIOS will use the
NB_Name_Query/NB_Name_Recognized exchange to determine routes in
conjunction with resolving the NetBIOS names. These differences are
not reflected in the SSP protocols.
<span class="grey">Wells & Bartky [Page 39]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-40" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The handling of the NetBIOS specific SSP messages is given in the
following table.
+---------------+-------------------------+-------------------------+
| Event | Action(s) | Comment |
+---------------+-------------------------+-------------------------+
| NETBIOS_ANQ | DLC_DGRM: | Routed STE |
| | NB_Add_Name_Query | (NETBIOS Group Address) |
+---------------+-------------------------+-------------------------+
| NETBIOS_ANR | DLC_DGRM: | Routed ARE |
| | NB_Add_Name_Response | (Specific MAC Address) |
+---------------+-------------------------+-------------------------+
| NETBIOS_NQ_ex | DLC_DGRM: | Routed STE |
| | NB_Name_Query | (NETBIOS Group Address) |
+---------------+-------------------------+-------------------------+
| NETBIOS_NQ_cs | DLC_DGRM: | Routed STE |
| | NB_Name_Query | (NETBIOS Group Address) |
+---------------+-------------------------+-------------------------+
| NETBIOS_NR_ex | DLC_DGRM: | Routed ARE |
| | NB_Name_Recognized | (Specific MAC Address) |
+---------------+-------------------------+-------------------------+
| NETBIOS_NR_cs | DLC_DGRM: | Routed ARE |
| | NB_Name_Recognized | (Specific MAC Address) |
+---------------+-------------------------+-------------------------+
| DATAFRAME | DLC_DGRM | If NB_Status_Response: |
| | | Routed ARE |
| | | (Specific MAC Address) |
| | | Else: |
| | | Routed STE |
| | | (NETBIOS Group Address)|
+---------------+-------------------------+-------------------------+
The above actions apply to all DLSw states. The handling of NetBIOS
datagrams sent within DGRMFRAME messages is governed by the DLSw
state machine. The DGRMFRAME message type is employed instead of the
DATAFRAME message type once the end-to-end circuit has been
established. At that time, the message is addressed according to the
pair of Circuit IDs in the message header instead of relying upon the
MAC address information in the token ring header.
<span class="h3"><a class="selflink" id="section-5.4" href="#section-5.4">5.4</a> Explorer Traffic</span>
The CANUREACH_ex, ICANREACH_ex, NETBIOS_NQ_ex, and NETBIOS_NR_ex SSP
messages explore the topology of the DLSw cloud and the networks
attached to it. These explorer frames are used to determine the DLSw
partners through which a MAC or NetBIOS name can be accessed. This
information may optionally be cached to reduce explorer traffic in
the DLSw cloud.
<span class="grey">Wells & Bartky [Page 40]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-41" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
If a DLSw is aware from cached information that a given MAC address
or NetBIOS name is accessible through a given partner DLSw, it should
direct all circuit setup attempts to that partner. If the circuit
setup fails, or no such data is available in the MAC or name cache
database, the DLSw may fallback to issuing the setup attempt to all
DLSw partners on the assumption that the cached data is now out of
date. The mechanism for determining when to use such a fallback is
implementation defined.
DLSw implementations may also use a local MAC cache to enable
responses to CANUREACH_ex requests to be issued without the need for
TEST frame exchange (or equivalent) until the CANUREACH_cs is
received. Again, the fallback mechanism for determining when such
local cache data is out-of-date is implementation defined.
The use of either cache is an optional function in DLSw. An
implementation may choose to always issue explorer frames or to use
either or both types of cache.
The following sections describe the FSMs used for explorer frames.
The DLC events and actions are a subset of those described in <a href="#section-5.2">section</a>
<a href="#section-5.2">5.2</a> for the main circuit FSM.
<span class="h4"><a class="selflink" id="section-5.4.1" href="#section-5.4.1">5.4.1</a> CANUREACH/ICANREACH Explorer FSM</span>
The FSM described below is used to handle explorer frames routed by
MAC address. There is one instance of this FSM for each Data Link ID
(Target and Origin MAC/SAP pair) for which explorer traffic is
flowing. The states in this FSM are as follows.
State Name Description
---------- -----------
RESET The initial state.
SENT_EX Local DLSw has issued an explorer message
RECEIVED_EX Local DLSw has received an explorer message
<span class="grey">Wells & Bartky [Page 41]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-42" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h5"><a class="selflink" id="section-5.4.1.1" href="#section-5.4.1.1">5.4.1.1</a> RESET State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CANUREACH_ex | If replying from | If DLC_RESOLVE sent, |
| | cache, send | RECEIVED_EX |
| | ICANREACH_ex | |
| | else if allowed to | |
| | test availability, | |
| | issue DLC_RESOLVE. | |
| | Optionally update | |
| | cache. | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_ex | Optionally update | RESET |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_RESOLVE_C | Send CANUREACH_ex | SENT_EX |
+----------------------+---------------------+----------------------+
RESET is the initial state for the CANUREACH/ICANREACH explorer FSM.
This state is exited when a DLC_RESOLVE_C request is received from
the DLC or a CANUREACH_ex is received from a remote DLSw.
A DLSw implementation may optionally reply from to CANUREACH_ex
messages on the basis of cached topology information, in which case
the DLC_RESOLVE exchange (i.e., TEST) is not required. If cache is
not used, or no match is found, and the DLC permits the use of TEST,
DLC_RESOLVE is issued to locate the target MAC and the state changes
to RECEIVED_EX. If no cache entry is available and TEST is not
allowed by the DLC, a received CANUREACH_ex frame is ignored.
<span class="h5"><a class="selflink" id="section-5.4.1.2" href="#section-5.4.1.2">5.4.1.2</a> SENT_EX State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_ex | DLC_RESOLVE_R | RESET |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_RESOLVE_C | | SENT_EX |
+----------------------+---------------------+----------------------+
SENT_EX is entered when the DLSw has issued a CANUREACH_ex message to
locate a MAC address. This state is exited when a remote DLSw
returns a matching ICANREACH_ex, or after an implementation defined
timeout. DLC_RESOLVE events received in this state correspond to TEST
<span class="grey">Wells & Bartky [Page 42]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-43" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
retries by the origin DLC station and are absorbed.
An implementation may choose whether to handle explorer frame
crossover either by using entirely separate FSM instances and simply
allowing both ends to issue TEST frames, or by detecting a reverse
CANUREACH_ex frame here and issuing an ICANREACH_ex message and
DLC_RESOLVE_R action.
<span class="h5"><a class="selflink" id="section-5.4.1.3" href="#section-5.4.1.3">5.4.1.3</a> RECEIVED_EX State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive CANUREACH_ex | Optionally update | RECEIVED_EX |
| | cache | |
+----------------------+---------------------+----------------------+
| Receive ICANREACH_ex | | RECEIVED_EX |
+----------------------+---------------------+----------------------+
| DLC_RESOLVED | Send ICANREACH_ex | RESET |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
RECEIVED_EX is entered when the DLSw has received a CANUREACH_ex from
a remote DLSw and has issued a DLC_RESOLVE to locate the MAC address.
This state is exited when the DLC_RESOLVED response is received, or
after an implementation defined timeout.
If the target MAC is located, the DLSw must reply to the first
received CANUREACH_ex that caused the move to this state. If
additional CANUREACH_ex messages are received in this state from
other remote DLSw partners, the DLSw may optionally reply to these
messages too but it is not required to do so.
An implementation may choose whether to handle explorer frame
crossover either by using entirely separate FSM instances and simply
allowing both ends to issue TEST frames, or by detecting such a
reverse DLC_RESOLVE_C event here and issuing an ICANREACH_ex message
and DLC_RESOLVE_R action.
<span class="grey">Wells & Bartky [Page 43]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-44" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-5.4.2" href="#section-5.4.2">5.4.2</a> NETBIOS_NQ/NR Explorer FSM</span>
The FSM described below is used to handle explorer frames routed by
NetBIOS names There is one instance of this FSM for each unique
combination of Source Name, Destination Name, Data 2 field and
Response Correlator.
State Name Description
---------- -----------
RESET The initial state.
SENT_EX Local DLSw has issued an explorer
message
RECEIVED_EX Local DLSw has received an explorer
message
SENT_REC_EX An explorer frame has been both sent
and received for the same (potential)
NetBIOS circuit.
<span class="h5"><a class="selflink" id="section-5.4.2.1" href="#section-5.4.2.1">5.4.2.1</a> RESET State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| RECEIVED_EX |
| | Optionally update | |
| | cache. | |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NR_ex| Optionally update | RESET |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex | SENT_EX |
+----------------------+---------------------+----------------------+
The RESET state is the initial state for the NETBIOS_NQ/NR explorer
FSM. It is exited when the DLC receives either a NETBIOS_NQ_ex or a
DLC_DGRM containing a NetBIOS NAME_QUERY frame. If a NETBIOS_NQ_ex
message is received, the NAME_QUERY is propagated to the DLC and this
FSM moves to state RECEIVED_EX. If a NetBIOS NAME_QUERY frame is
received, the NETBIOS_NQ_ex is propagated either to the appropriate
DLSw partners (see below), and this FSM moves to state SENT_EX.
Unlike SNA traffic where the CANUREACH_ex/ICANREACH_ex exchange can
be omitted if the MAC location is already cached,
NETBIOS_NQ_ex/NETBIOS_NR_ex frames must always be issued during
NetBIOS session setup in order that the NetBIOS session numbers are
<span class="grey">Wells & Bartky [Page 44]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-45" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
exchanged correctly between the DLC end stations. If the location of
a NetBIOS name is known from cached data, the NETBIOS_NQ_ex need only
be issued to the cached DLSw partners. Otherwise the NETBIOS_NQ_ex
should be issued to all partners that support NetBIOS.
<span class="h5"><a class="selflink" id="section-5.4.2.2" href="#section-5.4.2.2">5.4.2.2</a> SENT_EX State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| SENT_REC_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NR_ex| DLC_DGRM(NAME_RECOG)| RESET |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex | SENT_EX |
| (different local | Optionally update | |
| session number than | cache | |
| existing searches) | | |
+----------------------+---------------------+----------------------+
SENT_EX is entered when the local DLSw issues a NETBIOS_NQ_ex to its
remote DLSw partners. This state is exited when a NETBIOS_NR_ex is
received from a remote DLSw, or if a matching NETBIOS_NQ_ex is
received from a remote DLSw (i.e., a NETBIOS_NQ_ex crossover case).
If the local NetBIOS end station issues a NAME_QUERY with a different
session number from any previous NAME_QUERY for this search, the
NAME_QUERY is propagated to the DLSw partners to ensure that the
exchange of NetBIOS session numbers is handled correctly.
<span class="grey">Wells & Bartky [Page 45]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-46" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h5"><a class="selflink" id="section-5.4.2.3" href="#section-5.4.2.3">5.4.2.3</a> RECEIVED_EX State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| RECEIVED_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NR_ex| | RECEIVED_EX |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex | SENT_REC_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_RECOG)| Send NETBIOS_NR_ex | RESET |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
RECEIVED_EX is entered when the local DLSw receives a NETBIOS_NQ_ex
message from a remote DLSw. This state is exited when a
NAME_RECOGNIZED NetBIOS frame is received from the DLC, completing
the query, or when a matching NAME_QUERY is received from DLC (i.e.,
NAME_QUERY crossover).
<span class="h5"><a class="selflink" id="section-5.4.2.4" href="#section-5.4.2.4">5.4.2.4</a> SENT_REC_EX State</span>
+----------------------+---------------------+----------------------+
| Event | Action(s) | Next State |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NQ_ex| DLC_DGRM(NAME_QUERY)| SENT_REC_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| Receive NETBIOS_NR_ex| DLC_DGRM(NAME_RECOG)| RECEIVED_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_QUERY)| Send NETBIOS_NQ_ex | SENT_REC_EX |
| (different local | Optionally update | |
| session number than | cache | |
| existing searches) | | |
+----------------------+---------------------+----------------------+
| DLC_DGRM (NAME_RECOG)| Send NETBIOS_NR_ex | SENT_EX |
| | Optionally update | |
| | cache | |
+----------------------+---------------------+----------------------+
<span class="grey">Wells & Bartky [Page 46]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-47" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
This state is required if an implementation wishes to manage NQ/NR
crossover cases from a single FSM instance by detecting 'opposite'
NAME_QUERY attempts between the same two NetBIOS names. If separate
FSM instances are used instead, this state is not required and the
transitions to it from other states can be removed.
SENT_RCV_EX is exited when the NAME_QUERY search in either direction
is resolved. If the local NetBIOS end station issues a NAME_QUERY
with a different session number from any previous NAME_QUERY it has
issued for this search, the NAME_QUERY is propagated to the DLSw
partners to ensure that the exchange of NetBIOS session numbers is
correctly handled.
<span class="h5"><a class="selflink" id="section-5.4.2.5" href="#section-5.4.2.5">5.4.2.5</a> NetBIOS Session Numbers</span>
NetBIOS NAME_QUERY and NAME_RECOGNIZED frames exchange NetBIOS session
numbers between the end stations. For correct NetBIOS operation over
DLSw, it is important that all SSP NETBIOS_NQ_ex frames received by a
DLSw cause NetBIOS NAME_QUERY frames to flow on the LAN with the new
session number from the NETBIOS_NQ_ex. These frames cannot be replied
to from a cache of locally available NetBIOS names in the same way that
MAC addresses and CANUREACH_ex messages can be handled.
Also, NAME_QUERY messages are normally retried several times on the LAN.
The generation and absorption of such frames is outside the scope of the
FSM defined above.
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>. Protocol Flow Diagrams</span>
The Switch-to-Switch Protocol is used to setup and take down circuits
between a pair of Data Link Switches. Once a circuit is established,
the end stations on the local networks can employ LLC Type 1
(connectionless UI frames) protocols end-to-end. In addition, the end
systems can establish an end-to-end connection for support of LLC Type 2
(connection oriented I frames) protocols (Type 2 I frames go end-to-end,
supervisory frames are handled locally).
The term, Data Link, is used in this document to refer to both a
"logical data link" when supporting Type 1 LLC services, and a "data
link connection" when supporting Type 2 LLC services. In both cases,
the Data Link is identified by the Data Link ID defined in <a href="#section-3.2">section 3.2</a>.
NOTE: THIS SECTION CONTAINS EXAMPLES ONLY. IT CANNOT AND DOES NOT SHOW
ALL POSSIBLE VARIATIONS AND OPTIONS ON PROTOCOL FLOWS FOR SNA/SDLC, SSP,
AND LLC PROTOCOLS.
<span class="grey">Wells & Bartky [Page 47]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-48" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-6.1" href="#section-6.1">6.1</a> Connect Protocols</span>
The two basic startup flows from a pure FSM perspective are shown below.
The first flow is a startup involving XIDs and the second is one without
XIDs.
Flow #1 - DLSw Startup With XIDs
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
DLC_RESOLVE_C CANUREACH_ex
-----------> ----------->
DLC_RESOLVE_R ICANREACH_ex
<----------- <-----------
DLC_XID CANUREACH_cs DLC_START_DL
-----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-----------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
XIDFRAME DLC_XID
-----------> ----------->
DLC_XID XIDFRAME DLC_XID
<----------- <----------- <-----------
DLC_XID XIDFRAME DLC_XID
-----------> -----------> ----------->
DLC_XIDs XIDFRAMEs DLC_XIDs
<------------> <------------> <------------>
DLC_CONTACTED CONTACT DLC_CONTACT
-----------> -----------> ----------->
connect_pending contact_pending
<span class="grey">Wells & Bartky [Page 48]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-49" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
DLC_CONTACT CONTACTED DLC_CONTACTED
<----------- <----------- <-----------
connected connected
DLC_INFOs IFRAMEs DLC_INFOs
<------------> <------------> <------------>
Mapping LAN events to the DLC events and actions on Flow #1 produces
the following flows shown below:
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
TEST_cmd DLC_RESOLVE_C CANUREACH_ex TEST_cmd
-----------> -----------> -----------> ---------->
TEST_rsp DLC_RESOLVE_R ICANREACH_ex TEST_rsp
<--------- <----------- <----------- <-----------
null XID DLC_XID CANUREACH_cs DLC_START_DL
-----------> -----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-------------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
XIDFRAME DLC_XID null XID
-----------> ---------> -------->
XID DLC_XID XIDFRAME DLC_XID XID
<-------- <----------- <----------- <----------- <--------
XIDs DLC_XIDs XIDFRAMEs DLC_XIDs XIDs
<----------> <----------> <------------> <------------> <--------->
SABME DLC_CONTACTED CONTACT DLC_CONTACT SABME
-----------> -----------> -----------> -----------> -------->
connect_pending contact_pending
UA DLC_CONTACT CONTACTED DLC_CONTACTED UA
<--------- <----------- <----------- <----------- <--------
connected connected
<span class="grey">Wells & Bartky [Page 49]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-50" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
IFRAMEs DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<----------> <-----------> <------------> <------------> <-------->
Those implementations that prefer to respond to the SABME immediately
could use the same events to do that:
SABME DLC_CONTACTED CONTACT DLC_CONTACT SABME
-----------> -----------> -----------> -----------> -------->
UA connect_pending contact_pending
<---------
RR
----------->
RNR
<---------
RR DLC_CONTACT CONTACTED DLC_CONTACTED UA
<--------- <----------- <----------- <----------- <--------
connected connected
IFRAMEs DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<----------> <------------> <------------> <------------> <-------->
Flow #2 - DLSw Startup Without XIDs (circuit setup)
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
DLC_CONTACTED CANUREACH_cs DLC_START_DL
-----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-----------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
CONTACT DLC_CONTACT
-----------> ----------->
connect_pending contact_pending
<span class="grey">Wells & Bartky [Page 50]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-51" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
DLC_CONTACT CONTACTED DLC_CONTACTED
<----------- <----------- <-----------
connected connected
DLC_INFOs IFRAMEs DLC_INFOs
<------------> <------------> <------------>
Mapping LAN events to the DLC events and actions on Flow #2 (and
adding a NETBIOS_NQ and NETBIOS_NR_ex) produces:
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
NAME_QUERY DLC_DGRM NETBIOS_NQ_ex DLC_DGRM NAME_QUERY
-----------> -----------> -----------> -----------> --------->
NAME_RECOG DLC_DGRM NETBIOS_NR_ex DLC_DGRM NAME_RECOG
<----------- <------------ <----------- <----------- <---------
SABME DLC_CONTACTED CANUREACH_cs DLC_START_DL
-----------> -----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-----------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
CONTACT DLC_CONTACT SABME
-----------> -----------> --------->
connect_pending contact_pending
UA DLC_CONTACT CONTACTED DLC_CONTACTED UA
<--------- <----------- <----------- <----------- <---------
connected connected
IFRAMEs DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<------------> <------------> <------------> <------------> <-------->
<span class="grey">Wells & Bartky [Page 51]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-52" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
In keeping with a paradigm of 'DLSw is a big 802.2 LAN', all other
DLC types (SDLC for now, QLLC, channel, or whatever in the future)
would be handled by a 'DLC transformation layer' that would transform
the specific protocol's events into the appropriate DLSw DLC events
and DLSw DLC actions into the appropriate protocol actions. The XIDs
that flow in the SSP XIDFRAME should stay 802.2ish (i.e., ABM bit
set) and leave it up to the DLC transformation layer to suit the XID
to its particular DLC type.
Here is an example of a leased SDLC PU 2.0 device as the origin
station. It should use Flow #2 since it is not known if the other
side is a LAN, a switched line or a leased line.
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
implementer's DLC_RESOLVE_C CANUREACH_ex
choice (power -----------> ----------->
up, configuration
change, DLC_RESOLVE_R ICANREACH_ex
never, <----------- <-----------
connect timer,etc.)
PU 2.0 is
configured
in DLSw to DLC_XID(null) CANUREACH_cs DLC_START_DL
call in -----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-----------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
XIDFRAME DLC_XID
-----------> ----------->
DLC_XID XIDFRAME DLC_XID
respond with <----------- <----------- <-----------
XID configured
<span class="grey">Wells & Bartky [Page 52]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-53" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
for station or
forward XID to
station and
send response DLC_XID XIDFRAME DLC_XID
-----------> -----------> ----------->
SNRM DLC_CONTACT CONTACT DLC_CONTACTED
<--------- <----------- <----------- <------------
contact_pending connect_pending
UA DLC_CONTACTED CONTACTED DLC_CONTACT
----------> -----------> -----------> ----------->
connected connected
IFRAMEs DLC_INFOs IFRAMEs DLC_INFOs
<-----------> <------------> <------------> <------------>
Here is an example of a switched SDLC PU 2.0 device as the origin
station.
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
implementer's DLC_RESOLVE_C CANUREACH_ex
choice (power -----------> ----------->
up, configuration
change, DLC_RESOLVE_R ICANREACH_ex
never, <----------- <-----------
connect timer,etc.)
XID(null) DLC_XID(null) CANUREACH_cs DLC_START_DL
-----------> -----------> -----------> ----------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED
<----------- <-----------
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
<span class="grey">Wells & Bartky [Page 53]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-54" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
XIDFRAME DLC_XID
-----------> ----------->
XID DLC_XID XIDFRAME DLC_XID
<--------- <----------- <----------- <-----------
XID DLC_XID XIDFRAME DLC_XID
---------> -----------> -----------> ----------->
SNRM DLC_CONTACT CONTACT DLC_CONTACTED
<--------- <----------- <----------- <-----------
contact_pending connect_pending
UA DLC_CONTACTED CONTACTED DLC_CONTACT
---------> -----------> -----------> ----------->
connected connected
IFRAMEs DLC_INFOs IFRAMEs DLC_INFOs
<----------> <------------> <------------> <------------>
Here is an example of a leased SDLC PU 2.0 device as the target
station.
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
(SDLC)
disconnected disconnected
DLC_RESOLVE_C CANUREACH_ex
-----------> -----------> reply if virtual MAC/SAP
for SDLC station is
configured, if SDLC
station responds to
DLC_RESOLVE_R ICANREACH_ex TEST/SNRM/DISC, etc.
<----------- <-----------
DLC_XID CANUREACH_cs DLC_START_DL SNRM
-----------> -----------> -----------> --------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED UA
<----------- <----------- <-------
circuit_established circuit_pending
RNR
REACH_ACK --------->
-----------> circuit_established
<span class="grey">Wells & Bartky [Page 54]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-55" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
XIDFRAME DLC_XID
-----------> -----------> respond with
XID configured
for station
or forward
XID to
station and
send
DLC_XID XIDFRAME DLC_XID response
<----------- <----------- <-----------
DLC_CONTACTED CONTACT DLC_CONTACT RR
-----------> -----------> -----------> --------->
connect_pending contact_pending
DLC_CONTACT CONTACTED DLC_CONTACTED
<----------- <----------- <-----------
connected connected
DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<------------> <------------> <------------> <------->
Here is an example of a switched SDLC PU 2.0 device as the target
station.
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
(SDLC)
disconnected disconnected
DLC_RESOLVE_C CANUREACH_ex
-----------> -----------> reply if virtual MAC/SAP
for SDLC station is
configured, if SDLC
station responds to
DLC_RESOLVE_R ICANREACH_ex TEST/XID/SNRM/DISC, etc.
<----------- <-----------
DLC_XID CANUREACH_cs DLC_START_DL XID
-----------> -----------> -----------> --------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED XID
<----------- <----------- <--------
circuit_established circuit_pending
<span class="grey">Wells & Bartky [Page 55]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-56" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
REACH_ACK
-----------> circuit_established
XIDFRAME DLC_XID
-----------> -----------> respond
with XID
received
DLC_XID XIDFRAME DLC_XID above
<----------- <----------- <---------
DLC_CONTACTED CONTACT DLC_CONTACT SNRM
-----------> -----------> -----------> --------->
connect_pending contact_pending
DLC_CONTACT CONTACTED DLC_CONTACTED UA
<----------- <----------- <----------- <--------
connected connected
DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<------------> <------------> <------------> <-------->
Here is an example of an SDLC T2.1 device as the target station.
(SDLC T2.1 origin station would look just like the LAN T2.1 origin
station)
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
disconnected disconnected
DLC_RESOLVE_C CANUREACH_ex
-----------> -----------> implementer's choice
(virtual MAC/SAP
configured,
check to see if station
is powered up using
DLC_RESOLVE_R ICANREACH_ex TEST/XID/DISC, etc.)
<----------- <-----------
DLC_XID CANUREACH_cs DLC_START_DL null XID
-----------> -----------> -----------> --------->
circuit_start resolve_pending
ICANREACH_cs DLC_DL_STARTED XID
<----------- <----------- <-------
<span class="grey">Wells & Bartky [Page 56]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-57" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
circuit_established circuit_pending
REACH_ACK
-----------> circuit_established
XIDFRAME DLC_XID
-----------> -----------> respond with
XID received
DLC_XID XIDFRAME DLC_XID above
<----------- <----------- <----------
DLC_XIDs XIDFRAMEs DLC_XIDs XIDs
<------------> <------------> <------------> <-------->
DLC_CONTACTED CONTACT DLC_CONTACT SNRM
-----------> -----------> -----------> --------->
connect_pending contact_pending
DLC_CONTACT CONTACTED DLC_CONTACTED UA
<----------- <----------- <----------- <-------
connected connected
DLC_INFOs IFRAMEs DLC_INFOs IFRAMEs
<------------> <------------> <------------> <-------->
<span class="grey">Wells & Bartky [Page 57]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-58" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-6.2" href="#section-6.2">6.2</a> Link Restart Protocols</span>
The following figure depicts the protocol flows that result from
restarting the end-to-end connection. This causes the Data Link
Switches to terminate the existing connection and to enter the
Circuit Established state awaiting the start of a new connection.
Data Link Data Link Data Link Data Link
Control Switch Switch Control
--------------------- ---------------------
+-----------+ +-----------+
| Connected | | Connected |
SABME +-----------+ +-----------+
-----------> RESTART_DL
DM -------------------------------------> DISC
<----------- -------->
UA
DL_RESTARTED (Case 1) <--------
<-------------------------------------
+-----------+ +-----------+
|Circuit Est| |Circuit Est|
+-----------+ +-----------+
........... or ...........
SABME
-----------> DL_RESTARTED (Case 2)
UA <-------------------------------------
<----------- +-----------+
|Circuit Est|
CONTACT +-----------+
RNR ------------------------------------>
<----------
Figure 5. DLSw Link Restart Message Protocols
Upon receipt of a SABME command from the origin station, the origin
DLSw will send a RESTART_DL message to the target DLSw. A DM
response is also returned to the origin station and the data link is
restarted.
Upon receipt of the RESTART_DL message, the target DLSw will issue a
DISC command to the target station. The target station is expected
to return a UA response. The target DLSw will then restart its data
link and send an DL_RESTARTED message back to the origin DLSw.
During this exchange of messages, both Data Link Switches change
states from Connected state to Circuit Established state.
If the origin station now resends the SABME command, the origin DLSw
will send a CONTACT message to the target DLSw. If the SABME command
<span class="grey">Wells & Bartky [Page 58]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-59" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
is received prior to the receipt of the DL_RESTARTED message (case 2
in the figure), the CONNECT message is delayed until the DL_RESTARTED
message is received. The resulting protocol flows at this point
parallel those given above for the connect sequence.
<span class="h3"><a class="selflink" id="section-6.3" href="#section-6.3">6.3</a> Disconnect Protocols</span>
The following figure depicts the protocol flows that result from the
end system terminating an existing connection. Not only is the
connection terminated, but the circuit between the Data Link Switches
is taken down.
Data Link Data Link Data Link Data Link
Control Switch Switch Control
-------------------- --------------------
+-----------+ +-----------+
| Connected | | Connected |
+-----------+ +-----------+
DISC
----------> HALT_DL
UA -------------------------------------> DISC
<---------- --------->
UA
DL_HALTED <--------
<-------------------------------------
+-----------+ +-----------+
|Disconnectd| |Disconnectd|
+-----------+ +-----------+
......... or ..........
+-----------+ +-----------+
| Connected | | Connected |
+-----------+ +-----------+
DISC TCP Connection Failure DISC
<-------- <------------------------------------> --------->
UA UA
--------> <--------
+-----------+ +-----------+
|Disconnectd| |Disconnectd|
+-----------+ +-----------+
Figure 6. DLSw Disconnect Message Protocols
Upon receipt of a DISC command from the origin station, the origin
DLSw will reply with a UA response and issue a HALT_DL message to the
target DLSw. Upon receipt of the HALT_DL message, the target DLSw
will send a DISC command to the target station. The target station
<span class="grey">Wells & Bartky [Page 59]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-60" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
will then respond with a UA response, causing the target DLSw to
return a DL_HALTED message to the origin DLSw. During this exchange
of messages, both Data Link Switches change states from the Connected
state to the Disconnected state.
If the TCP connection between two Data Link Switches fails, all
connections that are currently multiplexed on the failed TCP
connection will be taken down. This implies that both Data Link
Switches will send DISC commands to all the local systems that are
associated with the failed connections. Upon sending the DISC
command, the Data Link Switch will enter the DISCONNECTED state for
each circuit.
<span class="h3"><a class="selflink" id="section-7.0" href="#section-7.0">7.0</a> Capabilities Exchange Formats/Protocol</span>
The Data Link Switching Capabilities Exchange is a special DLSw
Switch-to-Switch control message that describes the capabilities of
the sending data link switch. This control message is sent after the
switch-to-switch connection is established and optionally during run
time if certain operational parameters have changed and need to be
communicated to the partner switch.
The actual contents of the Capabilities Exchange is in the data field
following the SSP message header. The Capabilities Exchange itself
is formatted as a single General Data Stream (GDS) Variable with
multiple type "LT" structured subfields.
The SSP Message Header has the following fields set for the
Capabilities Exchange:
Offset Field Value
------ ----- -----
0x00 Version Number 0x31
0x01 Header Length 0x48 (decimal 72)
0x02 Message Length same as LL in GDS Variable
0x14 Message Type 0x20 (CAP_EXCHANGE)
0x16 Protocol Id 0x42
0x17 Header Number 0x01
0x23 Message Type 0x20 (CAP_EXCHANGE)
0x38 Direction 0x01 for CapEx request
0x02 for CapEx response
Other fields in the SSP header are not referenced and should be set
to zero.
<span class="grey">Wells & Bartky [Page 60]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-61" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The DLSw Capabilities Exchange Request has the following overall
format:
+----+----+-----------------+
| LL | ID | Control Vectors |
+----+----+-----------------+
0-1 Length, in binary, of the DLSw Capabilities
Exchange
Request GDS Variable. The value of LL is
the sum of the length of all fields in the
GDS Variable (i.e., length of LL + length of ID
+ length of Control Vectors).
2-3 GDS Id: 0x1520
4-n Control Vectors consisting of type LT structured
subfields (i.e., the DLSw Capabilities Exchange
Structured Subfields)
Type LT structured subfields consist of a 1-byte length field (the
"L"), a 1-byte type field (the "T") and n-bytes of data. The length
field includes itself as well as the structured subfield. The
structured subfield consists of the type field and data so the length
is n + 2. This imposes a length restriction of 253 bytes on all data
contained in a structured subfield.
<span class="grey">Wells & Bartky [Page 61]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-62" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-7.1" href="#section-7.1">7.1</a> Control Vector Id Range</span>
Control Vector identifiers (i.e., Type) in the range of 0x80 through
0xCF are reserved for use by the Data Link Switching standard.
Control Vector identifiers (i.e., Type) in the range of 0xD0 through
0xFD are used for vendor-specific purposes.
Currently defined vectors are:
Vector Description Hex Value
Vendor Id Control Vector 0x81
DLSw Version Control Vector 0x82
Initial Pacing Window Control Vector 0x83
Version String Control Vector 0x84
Mac Address Exclusivity Control Vector 0x85
Supported SAP List Control Vector 0x86
TCP Connections Control Vector 0x87
NetBIOS Name Exclusivity Control Vector 0x88
MAC Address List Control Vector 0x89
NetBIOS Name List Control Vector 0x8A
Vendor Context Control Vector 0x8B
Reserved for future use 0x8C - 0xCF
Vendor Specific 0xD0 - 0xFD
<span class="h3"><a class="selflink" id="section-7.2" href="#section-7.2">7.2</a> Control Vector Order and Continuity</span>
Since their contents can greatly affect the parsing of the
Capabilities Exchange GDS Variable, the required control vectors must
occur first and appear in the following order: Vendor Id, DLSw
Version Number, Initial Pacing Window, Supported SAP List. The
remainder of the Control Vectors can occur in any order.
Control Vectors that can be repeated within the same message (e.g.,
MAC Address List Control Vector and NetBIOS Name List Control Vector)
are not necessarily adjacent. It is advisable, but not required, to
have the Exclusivity Control Vector occur prior to either of the
above two vectors so that the use of the individual MAC addresses or
NetBIOS names will be known prior to parsing them.
Both the Vendor Context and Vendor Specific control vectors can be
repeated. If there are multiple instances of the Vendor Context
control vector, the specified context remains in effect for all
Vendor Specific control vectors until the next Vendor Context control
vector is encountered in the Capabilities Exchange.
<span class="grey">Wells & Bartky [Page 62]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-63" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-7.3" href="#section-7.3">7.3</a> Initial Capabilities Exchange</span>
Capabilities exchange is always the first SSP message sent on a new
SSP connection between two DLSw switches. This initial Capabilities
Exchange is used to identify the DLSw version that each switch is
running and other required information, plus details of any optional
extensions that the switches are capable of supporting.
If a DLSw receives an initial capabilities message that is
incorrectly formatted or contains invalid or unsupported data that
prevents correct interoperation with the partner DLSw, it should
issue a Capabilities Exchange negative response.
If a DLSw receives a negative response to its initial capabilities
message, it should take down its TCP connections with the offended
partner.
Note: Pre v1.0 DLSw implementations do not send or respond to
capabilities messages and can be identified by the lack of
capabilities exchange as the first message on a new SSP connnection.
This document does not attempt to specify how to interoperate with
back-level DLSw implementations.
<span class="h3"><a class="selflink" id="section-7.4" href="#section-7.4">7.4</a> Run-Time Capabilities Exchange</span>
Capabilities exchange always occurs when the SSP connection is
started between two DLSw switches. Capabilities Exchange can also
occur at run-time, typically when a configuration change is made.
Support for run-time Capabilities Exchange is optional. If a node
does not support receiving/using Run-Time Capabilities Exchange and
receives one, it should discard it quietly (not send back a negative
response). If a node supports receipt of run-time capabilities, it
should send a positive or negative response as appropriate. The
receiver of a negative response to a run-time capabilities message is
not required to take down its TCP connections with the offended
partner.
Run-time Capabilities Exchange can consist of one or more of the
following control vectors. Note that the control vectors required at
start-up are not present in a run-time Capabilities Exchange.
<span class="grey">Wells & Bartky [Page 63]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-64" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
1. MAC Address Exclusivity CV,
2. NetBIOS Name Exclusivity CV,
3. MAC Address List CV,
4. NetBIOS Name List CV,
5. Supported SAP List CV,
6. Vendor Context CV,
7. Vendor Specific CVs
A run-time capabilities exchange is a replacement operation. As
such, all pertinent MAC addresses and NetBIOS names must be specified
in the run-time exchange. In addition, run-time changes in
capabilities will not effect existing link station circuits.
<span class="h3"><a class="selflink" id="section-7.5" href="#section-7.5">7.5</a> Capabilities Exchange Filtering Responsibilities</span>
Recipients of the SAP, MAC, and NetBIOS lists are not required to
actually use them to filter traffic, etc., either initially or at
run-time.
<span class="h3"><a class="selflink" id="section-7.6" href="#section-7.6">7.6</a> DLSw Capabilities Exchange Structured Subfields</span>
The Capabilities Exchange Subfields are listed in the table below and
are described in the following sections:
Required Allowed @
ID @ Startup Length Repeatable* Runtime Order Content
==== ========= ====== ========== ======= ===== ===============
0x81 Y 0x05 N N 1 Vendor ID
0x82 Y 0x04 N N 2 DLSw Version
0x83 Y 0x04 N N 3 Initial pacing
window
0x84 N >=0x02 N N 5+ Version String
0x85 N 0x03 N Y 5+ MAC Address
Exclusivity
0x86 Y 0x12 N Y 4 Supported SAP
List
0x87 N 0x03 N N 5+ TCP Connections
0x88 N 0x03 N Y 5+ NetBIOS Name
Exclusivity
<span class="grey">Wells & Bartky [Page 64]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-65" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
0x89 N 0x0E Y Y 5+ MAC Address
List
0x8A N <=0x13 Y Y 5+ NetBIOS Name
List
0x8B N 0x05 Y Y 5+ Vendor Context
0xD0 N varies Y Y 5+ Vendor Specific
*Note: "Repeatable" means a Control Vector is repeatable within a single
message.
<span class="h4"><a class="selflink" id="section-7.6.1" href="#section-7.6.1">7.6.1</a> Vendor Id (0x81) Control Vector</span>
The Vendor Id control vector identifies the manufacturer's IEEE
assigned Organizationally Unique Identifier (OUI) of the Data Link
Switch sending the DLSw Capabilities Exchange. The OUI is sent in
non-canonical (Token-Ring) format. This control vector is required
and must be the first control vector.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x05 Length of the Vendor Id structured
subfield
1 1 0x81 key = 0x81 that identifies this as the
Vendor Id structured subfield
2-4 3 the 3-byte Organizationally Unique
Identifier (OUI) for the vendor
(non-canonical format)
<span class="h4"><a class="selflink" id="section-7.6.2" href="#section-7.6.2">7.6.2</a> DLSw Version (0x82) Control Vector</span>
The DLSw Version control vector identifies the particular version of
the DLSw standard supported by the sending Data Link Switch. This
control vector is required and must follow the Vendor Id Control
Vector.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x04 Length of the Version String structured
subfield
1 1 0x82 key = 0x82 that identifies this as the
DLSw Version structured subfield
<span class="grey">Wells & Bartky [Page 65]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-66" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
2 1 the hexadecimal value representing the
DLSw standard Version number of the
sending Data Link Switch.
0x01 (indicates version 1 - closed pages)
3 1 the hexadecimal value representing the
DLSw standard Release number of the
sending Data Link Switch.
0x00 (indicates release 0)
<span class="h4"><a class="selflink" id="section-7.6.3" href="#section-7.6.3">7.6.3</a> Initial Pacing Window (0x83) Control Vector</span>
The Initial Pacing Window control vector specifies the initial value
of the receive pacing window size for the sending Data Link Switch.
This control vector is required and must follow the DLSw Version
Control Vector.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x04 Length of the Initial Pacing Window
structured subfield
1 1 0x83 key = 0x83 that identifies this
as the Initial Pacing Window
structured subfield
2-3 2 the pacing window size, specified
in byte normal form..
Note: The pacing window size must be non-zero.
<span class="h4"><a class="selflink" id="section-7.6.4" href="#section-7.6.4">7.6.4</a> Version String (0x84) Control Vector</span>
The Version String control vector identifies the particular version
number of the sending Data Link Switch. The format of the actual
version string is vendor-defined. This control vector is optional.
Offset Length Value Contents
------ ------ ----- --------
0 1 0xn Length of the Version String
structured subfield
1 1 0x84 key = 0x84 that identifies
this as the Version String
structured subfield
<span class="grey">Wells & Bartky [Page 66]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-67" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
2-n n-2 the ASCII string that identifies
the software version for the
sending DLSw.
<span class="h4"><a class="selflink" id="section-7.6.5" href="#section-7.6.5">7.6.5</a> MAC Address Exclusivity (0x85) Control Vector</span>
The MAC Address Exclusivity control vector identifies how the MAC
Address List control vector data is to be interpreted. Specifically,
this control vector identifies whether the MAC addresses in the MAC
Address List control vectors are the only ones accessible via the
sending Data Link Switch.
If a MAC Address List control vector is specified and the MAC Address
Exclusivity control vector is missing, then the MAC addresses are not
assumed to be the only ones accessible via this switch.
A node may specify that it supports no local MAC addresses by
including in its capabilities the MAC Address List Exclusivity CV
(with byte 2 == 0x01), and not including any instances of the MAC
Address List CV.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x03 Length of the Exclusivity structured
subfield
1 1 0x85 key = 0x85 that identifies this as the
MAC address Exclusivity structured
subfield
2 1 an indicator of the relationship of the
MAC addresses to the sending Data Link
Switch.
0x00 the MAC addresses specified in
this Capabilities Exchange
can be accessed via this
switch but are not the
exclusive set (i.e., other
entities are accessible in
addition to the ones specified)
0x01 the MAC addresses specified in
this Capabilities Exchange
are the only ones accessible
via this switch.
<span class="grey">Wells & Bartky [Page 67]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-68" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-7.6.6" href="#section-7.6.6">7.6.6</a> SAP List Support (0x86) Control Vector</span>
The SAP List Support control vector identifies support for Logical
Link Control SAPs (DSAPs and SSAPs) by the sending Data Link Switch.
This is used by the DLSw that sent the SAP List Support control
vector to indicate which SAPs can be used to support SNA and
optionally NetBIOS traffic. This may be used by the DLSw that
receives the SAP list to filter explorer traffic (TEST, XID, or
NetBIOS UI frames) from the DLSw state machine. For SNA, a DLSw
should set bits for all SAP values (SSAP or DSAP) that may be used
for SNA traffic. For NetBIOS support, the bit for SAP 0xF0 should be
set (if not supported then the same bit should be cleared).
Each bit in the SAP control vector data field represents a SAP as
defined below. This vector is required and must follow the Initial
Pacing Window Control Vector.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x12 Length of the Supported SAP List structured
subfield
1 1 0x86 key = 0x86 that identifies this as the
Supported SAP List structured subfield
2-17 16 the 16-byte bit vector describing all
even numbered SAPs enabled.
Each Bit within the 16 byte bit vector will
indicate whether an even numbered SAP is
enabled (b'1') or disabled (b'0').
Each Byte within the 16 byte bit vector
will be numbered from 0 - F. (Most
significant byte first).
Byte 0 1 2 3 ... F
XX XX XX XX ... <a href="#page-XX">XX</a>
The bits in each byte indicate whether an
even numbered SAP is enabled (b'1') or
disabled (b'0'). (Most significant bit first)
Bits 7 6 5 4 ... <a href="#page-0">0</a>
SAP 0 2 4 6 ... E
By combining the byte label with the enabled
bits, all supported SAPs can be determined.
<span class="grey">Wells & Bartky [Page 68]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-69" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
In the following diagram, 'n' would equal 0
through F depending on which byte was being
interpreted.
Bit ordering is shown below with bit
7 being the most significant bit and bit
0 the least significant bit.
7654 3210
bbbb bbbb....
|||| ||||
|||| |||SAP 0xnE enabled or not
|||| |||
|||| ||SAP 0xnC enabled or not
|||| ||
|||| |SAP 0xnA enabled or not
|||| |
|||| SAP 0xn8 enabled or not
||||
|||SAP 0xn6 enabled or not
|||
||SAP 0xn4 enabled or not
||
|SAP 0xn2 enabled or not
|
SAP 0xn0 enabled or not
<span class="grey">Wells & Bartky [Page 69]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-70" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
An example of using all User Definable SAPs of 0x04 to 0xEC for SNA
Data Link Switching and SAP 0xF0 for NetBIOS Data Link Switching
would be as follows:
Offset SAPs Binary Hex
0 4,8,C 0010 1010 0x2A
1 10,14,18,1C 1010 1010 0xAA
2 20,24,28,2C 1010 1010 0xAA
3 30,34,38,3C 1010 1010 0xAA
4 40,44,48,4C 1010 1010 0xAA
5 50,54,58,5C 1010 1010 0xAA
6 60,64,68,6C 1010 1010 0xAA
7 70,74,78,7C 1010 1010 0xAA
8 80,84,88,8C 1010 1010 0xAA
9 90,94,98,9C 1010 1010 0xAA
A A0,A4,A8,AC 1010 1010 0xAA
B B0,B4,B8,BC 1010 1010 0xAA
C C0,C4,C8,CC 1010 1010 0xAA
D D0,D4,D8,DC 1010 1010 0xAA
E E0,E4,E8,EC 1010 1010 0xAA
F F0 1000 0000 0x80
<span class="h4"><a class="selflink" id="section-7.6.7" href="#section-7.6.7">7.6.7</a> TCP Connections (0x87) Control Vector</span>
The TCP Connections control vector indicates the support of an
alternate number of TCP Connections for the Data Link Switching
traffic. The base implementation of Data Link Switching supports two
TCP Connections, one for each direction of data traffic.
This control vector is optional. If it is omitted in a DLSw
Capabilities Exchange, then two TCP Connections are assumed. It is
further assumed that if a Data Link Switch can support one TCP
Connection, it can support two TCP Connections.
If TCP Connections CV values agree and the number of connections is
one, then the DLSw with the higher IP address must tear down the TCP
connections on its local port 2065.
The format of the TCP Connections Control Vector is shown below:
Offset Length Value Contents
------ ------ ----- --------
0 1 0x03 Length of the TCP Connections structured
subfield
1 1 0x87 key = 0x87 that identifies this as the
TCP Connections structured subfield
<span class="grey">Wells & Bartky [Page 70]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-71" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
2 1 an indicator of the support for an
alternate number of TCP Connections by
the sending Data Link Switch.
0x01 the number of TCP Connections
may be brought down to one
after Capabilities Exchange
is completed.
0x02 the number of TCP Connections
will remain at two for
the duration of the DLSw
connection.
<span class="h4"><a class="selflink" id="section-7.6.8" href="#section-7.6.8">7.6.8</a> NetBIOS Name Exclusivity (0x88) Control Vector</span>
The NetBIOS Name Exclusivity control vector identifies how the
NetBIOS Name List control vector data is to be interpreted.
Specifically, this control vector identifies whether the NetBIOS
Names in the NetBIOS Name List control vectors are the only ones
accessible via the sending Data Link Switch.
If a NetBIOS Name List control vector is specified and the NetBIOS
Name Exclusivity control vector is missing, then the NetBIOS Names
are not assumed to be the only ones accessible via this switch.
A node may specify that it supports no local NetBIOS names by
including in its capabilities the NetBIOS Name List Exclusivity CV
(with byte 2 == 0x01), and not including any instances of the NetBIOS
Name List CV.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x03 Length of the Exclusivity structured
subfield
1 1 0x88 key = 0x88 that identifies this as the
NetBIOS Name Exclusivity structured
subfield
2 1 an indicator of the relationship of the
NetBIOS Names to the sending Data Link
Switch.
0x00 the NetBIOS Names specified in
this Capabilities Exchange
can be accessed via this
switch but are not the
exclusive set (i.e., other
entities are accessible in
addition to the ones specified)
<span class="grey">Wells & Bartky [Page 71]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-72" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
0x01 the NetBIOS Names specified in
this Capabilities Exchange
are the only ones accessible
via this switch.
<span class="h4"><a class="selflink" id="section-7.6.9" href="#section-7.6.9">7.6.9</a> MAC Address List (0x89) Control Vector</span>
The MAC Address List control vector identifies one or more MAC
addresses that are accessible through the sending Data Link Switch.
This control vector specifies a single MAC address value and MAC
address mask value to identify the MAC address or range of MAC
addresses. MAC addresses and masks are in non-canonical (Token-Ring)
format in this control vector.
This control vector is optional and can be repeated if necessary.
Note 1: If a particular MAC address, <mac-addr>, satisfies the
following algorithm, then <mac-addr> is assumed to be accessible via
the sending Data Link Switch:
<mac-addr> & <mac-addr-mask> == <mac-addr-value>
where: <mac-addr-value> is the MAC Address
Value specified in
this control vector
<mac-addr-mask> is the MAC Address
Mask specified in
this control vector
Note 2: If an individual MAC Address is desired, then <mac-addr-
value> should be the individual MAC address and <mac-addr-mask>
should be 0xFFFFFFFFFFFF.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x0E Length of the MAC Address List
structured subfield
1 1 0x89 key = 0x89 that identifies this as the
MAC Address List structured subfield
2-7 6 the 6-byte MAC Address Value,
<mac-addr-value> in the above formula
8-13 6 the 6-byte MAC Address Mask,
<mac-addr-mask> in the above formula
<span class="grey">Wells & Bartky [Page 72]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-73" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-7.6.10" href="#section-7.6.10">7.6.10</a> NetBIOS Name List (0x8A) Control Vector</span>
The NetBIOS Name List control vector identifies one or more NetBIOS
names that are accessible through the sending Data Link Switch. This
control vector specifies a single NetBIOS name in ASCII. However,
the NetBIOS name can consist of "don't care" and "wildcard"
characters to match on a number of NetBIOS names. If an individual
character position in the NetBIOS name in this control vector
contains a '?', then the corresponding character position in real
NetBIOS name is a "don't care". If a NetBIOS name in this control
vector ends in '*', then the remainder of real NetBIOS names is a
"don't care". '*' is only considered a wildcard if it appears at the
end of a name.
All blanks or nulls at the end of NetBIOS names in this control
vector are ignored. NetBIOS names which have fewer than 16 bytes
and which do not end with '*' are not assumed to have a trailing
'*'; the "wildcard" character must be explicit.
NetBIOS group names can exist across several LANs/networks. As such,
NetBIOS group names received in a NetBIOS Name List Control Vector
can not be treated the same as NetBIOS individual names. The
Individual/Group Flag allows Data Link Switches to distinguish
between the two.
This control vector is optional and can be repeated if necessary.
Offset Length Value Contents
------ ------ ----- --------
0 1 0xn Length of the NetBIOS Name List
structured subfield (maximum = 0x13)
1 1 0x8A key = 0x8A that identifies this as the
NetBIOS Name List structured subfield
2 1 Individual/Group Flag
0x00 - Individual NetBIOS Name
0x01 - Group NetBIOS Name
3-n n-3 the NetBIOS name with possible embedded
'?' and terminating '*'.
<span class="h4"><a class="selflink" id="section-7.6.11" href="#section-7.6.11">7.6.11</a> Vendor Context (0x8B) Control Vector</span>
The Vendor Context control vector identifies the manufacturer's IEEE
assigned Organizationally Unique Identifier (OUI) of the Data Link
Switch sending the DLSw Capabilities Exchange. The OUI is sent in
non-canonical (Token-Ring) format.
<span class="grey">Wells & Bartky [Page 73]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-74" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
This control vector is optional and is used to provide the context
for any Vendor Specific control vectors that follow in the
Capabilities Exchange. If there are multiple instances of the Vendor
Context control vector, the specified context remains in effect for
all Vendor Specific control vectors until the next Vendor Context
control vector is encountered.
Offset Length Value Contents
------ ------ ----- --------
0 1 0x05 Length of the Vendor Context structured
subfield
1 1 0x8B key = 0x8B that identifies this as the
Vendor Context structured subfield
2-4 3 the 3-byte Organizationally Unique
Identifier (OUI) for the vendor
(non-canonical format)
<span class="h3"><a class="selflink" id="section-7.7" href="#section-7.7">7.7</a> Capabilities Exchange Responses</span>
There are two kinds of DLSw Capabilities Exchange Responses: positive
and negative. A positive response is returned to the sending Data
Link Switch if there were no errors encountered in the DLSw
Capabilities Exchange Request. A negative response is returned if
there is at least one error encountered.
A positive DLSw Capabilities Exchange Response has the following
overall format:
+----+----+
| LL | ID |
+----+----+
0-1 Length, in binary, of the DLSw Capabilities
Exchange Response GDS Variable. The value of
LL in this case is 0x0004.
2-3 GDS Id: 0x1521
A negative DLSw Capabilities Exchange Response has the following
overall format:
+----+----+--------+--------+
| LL | ID | Offset | Reason |
+----+----+--------+--------+
<span class="grey">Wells & Bartky [Page 74]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-75" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
0-1 Length, in binary, of the DLSw Capabilities Exchange
Response GDS Variable. The value of LL is the sum of
the length of all fields in the GDS Variable (i.e.,
length of LL + length of ID + length of Offsets/Reasons).
2-3 GDS Id: 0x1522
4-5 Offset into the DLSw Capabilities Exchange Request of the
error. Offset should always point to the start of the
GDS Variable or a specific control vector.
6-7 Reason code that uniquely identifies the error. Specific
values for the reason code are:
0x0001 invalid GDS length for a DLSw Capabilities
Exchange Request. (The value of Offset
is ignored.)
0x0002 invalid GDS id for a DLSw Capabilities
Exchange Request. (The value of Offset
is ignored.)
0x0003 Vendor Id control vector is missing. (The
value of Offset is ignored.)
0x0004 DLSw Version control vector is missing. (The
value of Offset is ignored.)
0x0005 Initial Pacing Window control vector is
missing. (The value of Offset is ignored.)
0x0006 length of control vectors doesn't correlate
to the length of the GDS variable
0x0007 invalid control vector id
0x0008 length of control vector invalid
0x0009 invalid control vector data value
0x000A duplicate control vector (for non-repeating
control vectors)
0x000B out-of-sequence control vector (for
repeating control vector)
0x000C DLSw Supported SAP List control vector is
missing.
<span class="grey">Wells & Bartky [Page 75]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-76" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
(The value of Offset is ignored.)
Note: Multiple Offset, Reason pairs can be returned with one pair
for each error encountered.
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>. Pacing/Flow Control</span>
This section describes the required Pacing and Flow Control
mechanisms used by a Data Link Switch.
While it is beyond the scope of this document to specify a policy for
how an implementation maps SSP flow control to the native data link
flow control at the edges, the following paragraphs describe a
general philosophical overview of how the mechanism is to be applied.
There are two types of flows which are covered by the flow control
mechanism: connection-oriented and connectionless. In the first,
connection-oriented flows, the implementer is to map the native flow
control mechanism of the two data links at the boundaries to the SSP
flow control mechanism thus presenting an end-to-end flow control
mechanism which "pushes back" all the way to the originating station
in either direction.
However, in the case of connectionless traffic, this is not possible
at the data link level because there is no native flow control
mechanism for connectionless data links. At first glance it is
tempting to allow connectionless traffic to flow the DLSw cloud
unthrottled. However, the rationale for subjecting these flows to
flow control within the DLSw cloud is to "push" the discarding of
frames (should this become necessary) back to the ingress of the DLSw
cloud. This "early discarding" of excessive DATAGRAMs should allow
the cloud to remain deterministic without wasting network bandwidth.
<span class="h3"><a class="selflink" id="section-8.1" href="#section-8.1">8.1</a> Basic Overview</span>
Each circuit consists of two data flows, one in each direction. Each
data flow has its own independent flow control mechanism. For each
data flow there is an entity that originates traffic, referred to as
the sender, and a target entity which receives the traffic, referred
to as the receiver.
A sender may only send data when its receiver has granted explicit
permission to send a discrete number of data units. Data units are
defined as either a DGRMFRAME or an INFOFRAME.
The receiver grants permission to send data units by sending a Flow
Control Indicator (FCIND- defined later). The sender must
acknowledge all FCINDs by sending a Flow Control Acknowledgment
<span class="grey">Wells & Bartky [Page 76]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-77" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
(FCACK- defined later).
A sending implementation must maintain these values:
1. GrantedUnits - The number of units (frames) which the sender
currently has permission to send.
2. CurrentWindow - This is a discrete number of units, controlled by
the receiver, which is basis for granting additional units.
3. InitialWindowSize - Global for all circuits on a transport
connection. Learned in capabilities exchange when the transport
connection is established. It specifies an initial value for
CurrentWindow when each circuit is established.
A receiving implementation must maintain these values:
1. CurrentWindow - This is a discrete number of units, controlled by
the receiver, which is basis for granting additional units.
2. InitialWindowSize - Global for all circuits on a transport
connection. Sent in capabilities exchange when the transport
connection is established. It specifies an initial value for
CurrentWindow when each circuit is established.
3. FCACKOwed - The sender owes an FCACK. If true, no FCIND may be
sent.
<span class="h3"><a class="selflink" id="section-8.2" href="#section-8.2">8.2</a> Frame Format</span>
The Flow control Byte is contained at offset 15 in both the
Information and Control SSP messages. From a flow control
perspective, the flow control information in the two frames are
handled identically.
The following diagram describes the format of the Flow Control Byte
(Bit 7 is the most significant and Bit 0 is the Least significant bit
of the octet):
bit 7 6 5 4 3 2 1 0
+---+---+---+---+---+---+---+---+
|FCI|FCA| reserved | FCO |
+---+---+---+---+---+---+---+---+
FCI : Flow Control Indicator
FCA : Flow Control Ack
FCO : Flow Control Operator Bits
<span class="grey">Wells & Bartky [Page 77]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-78" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
000 - Repeat Window Operator
001 - Increment Window Operator
010 - Decrement Window Operator
011 - Reset Window Operator
100 - Halve Window Operator
101 - Reserved
110 - Reserved
111 - Reserved
A frame with the FCI bit set is referred to as a Flow Control
Indication (FCIND). An FCIND is used to manage the flow in the
opposite direction of the frame which bears it.
A frame with the FCA bit set is referred to as a Flow Control
Acknowledgment (FCACK). An FCACK is used to manage the flow in the
same direction of the frame which bears it.
NOTE: A frame may be both a FCIND and an FCACK.
A frame bearing an FCIND or FCACK may also contain data for the flow
in the direction it is traveling. In such a frame, the FCIND or
FCACK are said to be piggy-backed. A non-piggy-backed FCIND is
called an Independent Flow Control Indication (IFCIND) and a non-
piggy-backed FCACK is called an Independent Flow Control
Acknowledgment (IFCACK). IFCIND and IFCACK messages are sent in a
Independent Flow Control SSP message (type 0x21).
NOTE: A frame may be both an IFCIND and an IFCACK.
It is desirable to carry information in control messages so as to
reduce the need to send a flow control only message. The diagram
below shows the messages that may carry valid flow control
information:
====== ___ ======
| | --------- __/ \__ --------- | |
| | __| _|_ |__ / IP \ __| _|_ |__ | |
====== | | | < Network > | | | ======
/______\ --------- \__ __/ --------- /______\
Origin Origin DLSw \___/ Target DLSw Target
Station partner partner Station
May have valid
FCI/FCA/FCO Data carrying
N N CANUREACH_cs
----------->
Y* N ICANREACH_cs
<span class="grey">Wells & Bartky [Page 78]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-79" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<-----------
Y N REACH_ACK
----------->
Y Y XIDFRAMEs
<------------>
Y Y DGRMFRAMEs
<------------>
Y N CONTACT
----------->
Y N CONTACTED
<-----------
Y Y INFOFRAMEs
<------------>
Y N RESTART_DL
----------->
Y N DL_RESTARTED
<-----------
Y N CONTACT
----------->
Y N CONTACTED
<-----------
N N HALT_DL
----------->
N N DL_HALTED
<-----------
*Note: ICANREACH_cs cannot carry FCA, as there could not be an
outstanding FCI.
<span class="h3"><a class="selflink" id="section-8.3" href="#section-8.3">8.3</a> Granting Permission to Send Data</span>
A receiver grants a sender permission to send units of data by
sending FCIND. Each FCIND is further qualified by a flow control
operator, which is encoded in the FCO bits of the FCIND header. With
one exception (the Reset Window operator) all operators may be either
piggy-backed or carried in a IFCIND.
The five flow control operators are outlined below:
<span class="h4"><a class="selflink" id="section-8.3.1" href="#section-8.3.1">8.3.1</a> Repeat Window Operator</span>
This operator is processed as follows:
(CurrentWindow unchanged)
GrantedUnits += CurrentWindow
<span class="grey">Wells & Bartky [Page 79]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-80" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h4"><a class="selflink" id="section-8.3.2" href="#section-8.3.2">8.3.2</a> Increment Window Operator</span>
This operator is processed as follows:
CurrentWindow++
GrantedUnits += CurrentWindow
<span class="h4"><a class="selflink" id="section-8.3.3" href="#section-8.3.3">8.3.3</a> Decrement Window Operator</span>
This operator is processed as follows:
CurrentWindow--
GrantedUnits += CurrentWindow
NOTE: This operator may only be sent if CurrentWindow is greater
than one.
<span class="h4"><a class="selflink" id="section-8.3.4" href="#section-8.3.4">8.3.4</a> Reset Window Operator</span>
This operator is processed as follows:
CurrentWindow = 0;
GrantedUnits = 0;
NOTE: This operator may only flow on an independent pacing
indication (may NOT be piggy-backed).
NOTE: After sending this operator, the only legal subsequent
operator is Increment Window.
<span class="h4"><a class="selflink" id="section-8.3.5" href="#section-8.3.5">8.3.5</a> Halve Window Operator</span>
This operator shall be processed as follows:
IF CurrentWindow > 1 THEN
CurrentWindow = CurrentWindow / 2
ENDIF
GrantedUnits += CurrentWindow
Note: The divide by two operation is an unsigned integer divide
(round down) or bit shift right operation.
<span class="h3"><a class="selflink" id="section-8.4" href="#section-8.4">8.4</a> Acknowledging a Flow Control Operator</span>
Each sender must acknowledge each FCIND with an FCACK which is
piggy-backed on the next frame in the opposite direction in all cases
except the Reset Window Operator.
<span class="grey">Wells & Bartky [Page 80]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-81" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
The receiver may have no more than one unacknowledged FCIND
outstanding at any time with one exception: A Reset Window Operator
may be sent while another FCIND is pending acknowledgment.
NOTE: The FCI and FCO bits of the FCACK are used independently by the
flow in the opposite direction
<span class="h4"><a class="selflink" id="section-8.4.1" href="#section-8.4.1">8.4.1</a> Acknowledging a Reset Window Operator</span>
Since this operator revokes all previously granted units, the sender
must acknowledge this FCIND using an IFCACK (Independent Flow Control
Acknowledgment). This is the only case where IFCACK is used.
Should a sender receive a non-reset FCIND followed by a Reset Window
FCIND before acknowledging the first, it only acknowledges the Reset
Window.
NOTE: The FCI and FCO bits on these frames are used independently by
the flow in the opposite direction.
<span class="h3"><a class="selflink" id="section-8.5" href="#section-8.5">8.5</a> Capabilities Exchange Initial Window Size</span>
When two nodes establish a transport connection, they engage in a
capabilities exchange (this is a requirement). Refer to the
Capabilities Exchange <a href="#section-7">section 7</a> for further details. The two nodes
are required to exchange the following parameter:
InitialWindowSize - This indicates to the partner what
the sending flow entity initializes
its CurrentWindow value to for each
multiplexed circuit subsequently
established on that transport
connection. This value must be
non-zero.
<span class="h3"><a class="selflink" id="section-8.6" href="#section-8.6">8.6</a> Circuit Startup</span>
Process as follows:
CurrentWindow = InitialWindowSize
GrantedUnits = 0
NOTE: The InitialWindow Size variable has a scope of one per DLSw
transport connection, while CurrentWindow and Granted units are
maintained on a per circuit basis. At circuit startup, a sender may
not send data units until the receiver grants explicit permission
with an FCIND message. This grant may be an independent FCIND
message or the FCIND may be piggy-backed on any of the message types
<span class="grey">Wells & Bartky [Page 81]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-82" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
listed in <a href="#section-8.2">section 8.2</a>.
<span class="h3"><a class="selflink" id="section-8.7" href="#section-8.7">8.7</a> Example Receiving Implementations</span>
The following two examples illustrate receiving implementations of
varying degrees of complexity. These are not meant to be complete
implementations but rather serve to illustrate the protocol.
NOTE: The examples are independent of the buffering model ( buffers
may be deterministicly or statistically committed)
NOTE: The examples assume a process model where each event processes
to completion without being preempted by another event.
<span class="h4"><a class="selflink" id="section-8.7.1" href="#section-8.7.1">8.7.1</a> Fixed Pacing Example</span>
Consider the following variables, in addition to InitialWindowSize
and CurrentWindow and FCACKOwed:
GrantDelayed - Boolean
GrantedUnits - Outstanding Units
The following section describes how various events are processed in
this example implementation:
<span class="h5"><a class="selflink" id="section-8.7.1.1" href="#section-8.7.1.1">8.7.1.1</a> Circuit Startup</span>
CurrentWindow = InitialWindowSize
FCACKOwed = FALSE
GrantDelayed = FALSE
GrantedUnits = 0
Repeat Window Operator
<span class="h5"><a class="selflink" id="section-8.7.1.2" href="#section-8.7.1.2">8.7.1.2</a> Check Buffers Available</span>
Can my implementation afford to grant CurrentWindow just now?
<span class="h5"><a class="selflink" id="section-8.7.1.3" href="#section-8.7.1.3">8.7.1.3</a> Buffers Become Available</span>
IF Check Buffers Available THEN
Send FCIND( Repeat Window)
GrantDelayed = FALSE
ELSE
Wait on buffers to become available (LIFO)
ENDIF
<span class="grey">Wells & Bartky [Page 82]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-83" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h5"><a class="selflink" id="section-8.7.1.4" href="#section-8.7.1.4">8.7.1.4</a> Repeat Window Operator</span>
IF Check Buffers Available THEN
Send FCIND( Repeat Window)
ELSE
GrantDelayed = TRUE
Wait on buffers to become available (FIFO)
ENDIF
<span class="h5"><a class="selflink" id="section-8.7.1.5" href="#section-8.7.1.5">8.7.1.5</a> Send FCIND( operator)</span>
GrantedUnits += CurrentWindow
FCACKOwed = TRUE
Encode and Transmit FCIND piggybacked or as IFCIND
<span class="h5"><a class="selflink" id="section-8.7.1.6" href="#section-8.7.1.6">8.7.1.6</a> A Frame Arrives from Sender</span>
GrantedUnits--;
IF frame is FCACK THEN
IF FCACKOwed THEN
FCACKOwed = FALSE
ELSE
Protocol Violation
ENDIF
ENDIF
IF NOT GrantDelayed THEN
IF GrantedUnits <= CurrentWindow THEN
IF FCACKOwed THEN
Protocol Violation
ELSE
Repeat Window Operator
ENDIF
ENDIF
ENDIF
<span class="h4"><a class="selflink" id="section-8.7.2" href="#section-8.7.2">8.7.2</a> Adaptive Pacing Example</span>
The following example illustrates a receiving implementation that
adjusts the window size and granted units based on buffer
availability and transport utilization.
NOTE: This example ignores other factors which might compel the
receiving implementation to adjust the window size (i.e., Outbound
queue length, traffic priority, ...)
Consider the following variables, in addition to InitialWindowSize,
CurrentWindow and FCACKOwed:
<span class="grey">Wells & Bartky [Page 83]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-84" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
GrantDelayed - Boolean
GrantedUnits - Outstanding Units
<span class="h5"><a class="selflink" id="section-8.7.2.1" href="#section-8.7.2.1">8.7.2.1</a> Circuit Startup</span>
CurrentWindow = InitialWindowSize
FCACK = FALSE
GrantDelayed = FALSE
GrantedUnits = 0
Repeat Window Operator
<span class="h5"><a class="selflink" id="section-8.7.2.2" href="#section-8.7.2.2">8.7.2.2</a> Check Buffers Available ( X)</span>
Can my implementation afford to grant X units just now?
<span class="h5"><a class="selflink" id="section-8.7.2.3" href="#section-8.7.2.3">8.7.2.3</a> Buffers Become Available</span>
IF Check Buffers Available THEN
CurrentWindow--;
Send FCIND( Decrement Window)
GrantDelayed = FALSE
ELSE
Wait on buffers to become available (LIFO)
ENDIF
<span class="h5"><a class="selflink" id="section-8.7.2.4" href="#section-8.7.2.4">8.7.2.4</a> Repeat Window Operator</span>
IF Check Buffers Available (CurrentWindow) THEN
Send FCIND( Repeat Window)
ELSE
GrantDelayed = TRUE
Wait on buffers to become available (FIFO)
ENDIF
<span class="h5"><a class="selflink" id="section-8.7.2.5" href="#section-8.7.2.5">8.7.2.5</a> Increment Window Operator</span>
IF Check Buffers Available ( CurrentWindow + 1) THEN
CurrentWindow++
Send FCIND( Increment Window)
ELSE
Repeat Window Operator
ENDIF
<span class="h5"><a class="selflink" id="section-8.7.2.6" href="#section-8.7.2.6">8.7.2.6</a> Send FCIND( operator)</span>
FCACKOwed = TRUE
GrantedUnits += CurrentWindow
Encode and Transmit FCIND piggybacked or as IFCIND
<span class="grey">Wells & Bartky [Page 84]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-85" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h5"><a class="selflink" id="section-8.7.2.7" href="#section-8.7.2.7">8.7.2.7</a> An FCACK Arrives from Sender</span>
GrantedUnits--;
IF NOT FCACKOwed THEN
Protocol Violation
ENDIF
FCACKOwed = FALSE;
IF NOT GrantDelayed THEN
IF GrantedUnits < CurrentWindow THEN
Increment Window Operator
ELSE IF GrantedUnits == CurrentWindow THEN
Repeat Window Operator
END
ENDIF
<span class="h5"><a class="selflink" id="section-8.7.2.8" href="#section-8.7.2.8">8.7.2.8</a> A Non-FCACK Frame Arrives from Sender</span>
GrantedUnits--;
IF NOT GrantDelayed THEN
IF FCACKOwed THEN
IF GrantedUnits < CurrentWindow THEN
Protocol Violation
END
ELSE
IF GrantedUnits <= CurrentWindow THEN
Repeat Window Operator
ENDIF
ENDIF
ENDIF
<span class="grey">Wells & Bartky [Page 85]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-86" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
<span class="h3"><a class="selflink" id="section-8.8" href="#section-8.8">8.8</a> Adaptive Pacing Example Flow Diagrams</span>
<span class="h4"><a class="selflink" id="section-8.8.1" href="#section-8.8.1">8.8.1</a> Example Flows from the Above Implementation</span>
The following diagram illustrates the use of adaptive pacing (use of
Halve Window, and Reset operation are shown in subsequent diagrams).
-----SENDER----- ----RECEIVER----
Granted Window Window Granted
0 2 circuit established 2 0
2 2 <-------- FCIND(Rpt) 2 2
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
+- FCIND(Rpt) 3 6
2 3 DATA---|-----------> 3 5
1 3 DATA---|-----------> 3 4
4 3 <------+
3 3 FCACK--------------> 3 3
6 3 <-------- FCIND(Rpt) 3 6
5 3 FCACK--------------> 3 5
4 3 DATA---------------> 3 4
3 3 DATA---------------> 3 3
+- FCIND(Rpt) 3 6
2 3 DATA---|-----------> 3 5
1 3 DATA---|-----------> 3 4
0 3 DATA---|-----------> 3 3
3 3 <------+
2 3 FCACK--------------> 3 2
6 4 <-------- FCIND(Inc) 4 6
5 4 FCACK--------------> 4 5
4 4 DATA---------------> 4 4
Waiting on Buffer
+- FCIND(Dec) 3 7
3 4 DATA---|-----------> 3 6
2 4 DATA---|-----------> 3 5
1 4 DATA---|-----------> 3 4
0 4 DATA---|-----------> 3 3
3 3 <------+
2 3 FCACK--------------> 3 2
Waiting on Buffer
+- FCIND(Dec) 2 4
1 3 DATA---|-----------> 2 3
0 3 DATA---|-----------> 2 2
2 2 <------+
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
<span class="grey">Wells & Bartky [Page 86]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-87" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
6 3 <-------- FCIND(Rpt) 3 6
5 3 FCACK--------------> 3 5
4 3 DATA---------------> 3 4
3 3 DATA---------------> 3 3
6 3 <-------- FCIND(Rpt) 3 6
<span class="h4"><a class="selflink" id="section-8.8.2" href="#section-8.8.2">8.8.2</a> Example Halve Window Flow</span>
The following flow illustrates the use of the Halve Window Operator:
-----SENDER----- ----RECEIVER----
Granted Window Window Granted
0 2 circuit established 2 0
2 2 <-------- FCIND(Rpt) 2 2
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
Resource Shortage
2 3 DATA---------------> 1 2
1 3 DATA---------------> 1 1
0 3 DATA---------------> 1 0
1 1 <-------- FCIND(Hlv) 1 1
0 1 FCACK--------------> 1 0
NOTE: The Halve Window Operator could have been sent before the
granted units fell to zero. The implementer may make a choice based
on the severity of the condition.
<span class="h4"><a class="selflink" id="section-8.8.3" href="#section-8.8.3">8.8.3</a> Example Reset Window Flows</span>
The following flow diagram illustrates the ResetWindow operation if
the receiver has no FCIND outstanding.
-----SENDER----- ----RECEIVER----
Granted Window Window Granted
0 2 circuit established 2 0
2 2 <-------- FCIND(Rpt) 2 2
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
+- FCIND(Rpt) 3 6
2 3 DATA---|-----------> 3 5
1 3 DATA---|-----------> 3 4
4 3 <------+
3 3 FCACK--------------> 3 3
6 3 <-------- FCIND(Rpt) 3 6
5 3 FCACK--------------> 3 5
Resource shortage!
<span class="grey">Wells & Bartky [Page 87]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-88" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
0 0 <-------- FCIND(Rst) 0 5 (note still
committed)
0 0 IFCACK-------------> 0 0
Condition eases
1 1 <-------- FCIND(Inc) 1 1
0 1 FCACK--------------> 1 0
2 2 <-------- FCIND(Inc) 2 2
1 2 FCACK--------------> 3 4
The next two flows illustrate the Reset Window operation if the
receiver has an outstanding FCIND.
-----SENDER----- ----RECEIVER----
Granted Window Window Granted
0 2 circuit established 2 0
2 2 <-------- FCIND(Rpt) 2 2
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
+- FCIND(Rpt) 3 6
2 3 DATA---|-----------> 3 5
| Resource shortage!
|+-FCIND(Rst) 0 5
1 3 DATA---||----------> 0 4
4 3 <------+|
3 3 FCACK---+----------> 0 3 (Not IFCACK!)
2 3 DATA----|----------> 0 2
0 0 <-------+
0 0 IFCACK-------------> 0 0
Condition eases
1 1 <-------- FCIND(Inc) 1 1
0 1 FCACK--------------> 1 0
2 2 <-------- FCIND(Inc) 2 2
1 2 FCACK--------------> 3 4
-----SENDER----- ----RECEIVER----
Granted Window Window Granted
0 2 circuit established 2 0
2 2 <-------- FCIND(Rpt) 2 2
1 2 FCACK--------------> 2 1
4 3 <-------- FCIND(Inc) 3 4
3 3 FCACK--------------> 3 3
+- FCIND(Rpt) 3 6
2 3 DATA---|-----------> 3 5
| Resource shortage!
|+-FCIND(Rst) 0 5
1 3 DATA---||----------> 0 4
4 3 <------+|
<span class="grey">Wells & Bartky [Page 88]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-89" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
0 0 <-------+
0 0 IFCACK-------------> 0 0
Condition eases
1 1 <-------- FCIND(Inc) 1 1
0 1 FCACK--------------> 1 0
2 2 <-------- FCIND(Inc) 2 2
1 2 FCACK--------------> 3 4
<span class="h3"><a class="selflink" id="section-8.9" href="#section-8.9">8.9</a> Other Considerations</span>
<span class="h4"><a class="selflink" id="section-8.9.1" href="#section-8.9.1">8.9.1</a> Protocol Violations</span>
The following events are considered protocol violations:
1. Sender exceeds granted units or does not acknowledge FCIND on
first frame after its receipt (the receiver can not discern the
difference between the two).
2. Receiver does not follow a Reset Window Operator with an Increment
Window Operator.
3. Receiver has two unacknowledged FCINDs ( other than Reset Window)
outstanding.
4. Receiver sends Decrement Window Operator with a window size of one.
5. Receiver attempts to increment the window size beyond 0xFFFF.
Actions taken in response to protocol violations are left to the
implementation of the node which discovers the violation. If an
implementation chooses to take down the circuit on which the
violation occurred, HALT_DL is the appropriate action.
Acknowledgments
Original <a href="./rfc1434">RFC 1434</a> Authors:
Roy C. Dixon, IBM
David M. Kushi, IBM
Chair of APPN Implementers Workshop Data Link Switching Related
Interest Group:
Louise Herndon Wells, Internetworking Technology Institute
<span class="grey">Wells & Bartky [Page 89]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-90" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Working Group Chairs (and significant contributors to this document):
Connect/Disconnect (State Machines): Steve Klein, IBM
Capabilities Exchange: Wayne Clark, Cisco Systems
Flow Control (Adaptive Pacing): Shannon Nix, Metaplex
Priority/Class of Service: Gene Cox, IBM
Other significant contributors:
Peter Gayek, IBM
Paul Brittain, Data Connection Limited
References
1) ISO 8802-2/IEEE Std 802.2 International Standard, Information
Processing Systems, Local Area Networks, Part 2: Logical Link
Control, December 31, 1989.
2) IBM LAN Technical Reference IEEE 802.2 and NETBIOS Application
Program Interfaces SC30-3587-00, December 1993.
3) ISO/IEC DIS 10038 DAM 2, MAC Bridging, Source Routing Supplement,
December 1991.
4) ISO 8802-2/IEEE Std 802.1D International Standard, Information
Processing Systems, Local Area Networks, Part 2: MAC layer
Bridging.
<span class="grey">Wells & Bartky [Page 90]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-91" ></span>
<span class="grey"><a href="./rfc1795">RFC 1795</a> Data Link Switching April 1995</span>
Security Considerations
Security issues are not discussed in this memo.
Chair's Address
Louise Wells
Internetwork Technology Institute
2021 Stratford Dr.
Milpitas, CA 95035
EMail: lhwells@cup.portal.com
Editor's Address
Alan K. Bartky
Manager of Technology
Sync Research Inc.
7 Studebaker
Irvine, CA 91728-2013
Phone: 1-714-588-2070
EMail: alan@sync.com
Note: Any questions or comments relative to the contents of this RFC
should be sent to the following Internet address:
aiw-dlsw@networking.raleigh.ibm.com.
This address will be used to coordinate the handling of responses.
NOTE 1: This is a widely subscribed mailing list and messages sent to
this address will be sent to all members of the DLSw mailing
list. For specific questions relating to subscribing to the
AIW and any of it's working groups send email to:
appn@vnet.ibm.com
Information regarding all of the AIW working groups and the
work they are producing can be obtained by copying, via
anonymous ftp, the file aiwinfo.psbin or aiwinfo.txt from the
Internet host networking.raleigh.ibm.com, located in
directory aiw.
NOTE 2: These mailing lists and addresses are subject to change.
Wells & Bartky [Page 91]
</pre>
|