1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700
  
     | 
    
      <pre>Network Working Group                                                ISO
Request for Comments: 926                                  December 1984
    <span class="h1">Protocol for Providing the Connectionless-Mode Network Services</span>
                         (Informally - ISO IP)
                              ISO DIS 8473
Status of this Memo:
 This document is distributed as an RFC for information only.  It does
 not specify a standard for the ARPA-Internet.  Distribution of this
 memo is unlimited.
Note:
 This document has been prepared by retyping the text of ISO DIS 8473 of
 May 1984, which is currently undergoing voting within ISO as a Draft
 International Standard (DIS).  Although this RFC has been reviewed
 after typing, and is believed to be substantially correct, it is
 possible that typographic errors not present in the ISO document have
 been overlooked.
 Alex McKenzie
 BBN</pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><a href="./rfc926">RFC 926</a>                                                    December 1984</pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-i" ></span>
<a href="./rfc926">RFC 926</a>                                                    December 1984
                           TABLE OF CONTENTS
 <a href="#section-1">1</a>   SCOPE AND FIELD OF APPLICATION........................ <a href="#page-2">2</a>
 <a href="#section-2">2</a>   REFERENCES............................................ <a href="#page-3">3</a>
 <a href="#section-3">3</a>   DEFINITIONS........................................... <a href="#page-4">4</a>
 <a href="#section-3.1">3.1</a>   Reference Model Definitions......................... <a href="#page-4">4</a>
 <a href="#section-3.2">3.2</a>   Service Conventions Definitions..................... <a href="#page-4">4</a>
 <a href="#section-3.3">3.3</a>   Network Layer Architecture Definitions.............. <a href="#page-4">4</a>
 <a href="#section-3.4">3.4</a>   Network Layer Addressing Definitions................ <a href="#page-5">5</a>
 <a href="#section-3.5">3.5</a>   Additional Definitions.............................. <a href="#page-5">5</a>
 <a href="#section-4">4</a>   SYMBOLS AND ABBREVIATIONS............................. <a href="#page-7">7</a>
 <a href="#section-4.1">4.1</a>   Data Units.......................................... <a href="#page-7">7</a>
 <a href="#section-4.2">4.2</a>   Protocol Data Units................................. <a href="#page-7">7</a>
 <a href="#section-4.3">4.3</a>   Protocol Data Unit Fields........................... <a href="#page-7">7</a>
 <a href="#section-4.4">4.4</a>   Parameters.......................................... <a href="#page-8">8</a>
 <a href="#section-4.5">4.5</a>   Miscellaneous....................................... <a href="#page-8">8</a>
 <a href="#section-5">5</a>   OVERVIEW OF THE PROTOCOL.............................. <a href="#page-9">9</a>
 <a href="#section-5.1">5.1</a>   Internal Organization of the Network Layer.......... <a href="#page-9">9</a>
 <a href="#section-5.2">5.2</a>   Subsets of the Protocol............................. <a href="#page-9">9</a>
 <a href="#section-5.3">5.3</a>   Addressing......................................... <a href="#page-10">10</a>
 <a href="#section-5.4">5.4</a>   Service Provided by the Network Layer.............. <a href="#page-10">10</a>
 5.5   Service Assumed from the Subnetwork Service
    Provider.............................................. <a href="#page-11">11</a>
 <a href="#section-5.5.1">5.5.1</a>   Subnetwork Addresses............................. <a href="#page-12">12</a>
 <a href="#section-5.5.2">5.5.2</a>   Subnetwork Quality of Service.................... <a href="#page-12">12</a>
 <a href="#section-5.5.3">5.5.3</a>   Subnetwork User Data............................. <a href="#page-13">13</a>
 <a href="#section-5.5.4">5.5.4</a>   Subnetwork Dependent Convergence Functions....... <a href="#page-13">13</a>
 <a href="#section-5.6">5.6</a>   Service Assumed from Local Evironment.............. <a href="#page-14">14</a>
 <a href="#section-6">6</a>   PROTOCOL FUNCTIONS................................... <a href="#page-16">16</a>
 <a href="#section-6.1">6.1</a>   PDU Composition Function........................... <a href="#page-16">16</a>
 <a href="#section-6.2">6.2</a>   PDU Decomposition Function......................... <a href="#page-17">17</a>
 <a href="#section-6.3">6.3</a>   Header Format Analysis Function.................... <a href="#page-17">17</a>
 <a href="#section-6.4">6.4</a>   PDU Lifetime Control Function...................... <a href="#page-18">18</a>
 <a href="#section-6.5">6.5</a>   Route PDU Function................................. <a href="#page-18">18</a>
 <a href="#section-6.6">6.6</a>   Forward PDU Function............................... <a href="#page-19">19</a>
 <a href="#section-6.7">6.7</a>   Segmentation Function.............................. <a href="#page-19">19</a>
 <a href="#section-6.8">6.8</a>   Reassembly Function................................ <a href="#page-20">20</a>
 <a href="#section-6.9">6.9</a>   Discard PDU Function............................... <a href="#page-21">21</a>
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page i]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-ii" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 <a href="#section-6.10">6.10</a>   Error Reporting Function.......................... <a href="#page-22">22</a>
 <a href="#section-6.10.1">6.10.1</a>   Overview........................................ <a href="#page-22">22</a>
 <a href="#section-6.10.2">6.10.2</a>   Requirements.................................... <a href="#page-23">23</a>
 <a href="#section-6.10.3">6.10.3</a>   Processing of Error Reports..................... <a href="#page-24">24</a>
 <a href="#section-6.11">6.11</a>   PDU Header Error Detection........................ <a href="#page-25">25</a>
 <a href="#section-6.12">6.12</a>   Padding Function.................................. <a href="#page-26">26</a>
 <a href="#section-6.13">6.13</a>   Security.......................................... <a href="#page-26">26</a>
 <a href="#section-6.14">6.14</a>   Source Routing Function........................... <a href="#page-27">27</a>
 <a href="#section-6.15">6.15</a>   Record Route Function............................. <a href="#page-28">28</a>
 <a href="#section-6.16">6.16</a>   Quality of Service Maintenance Function........... <a href="#page-29">29</a>
 <a href="#section-6.17">6.17</a>   Classification of Functions....................... <a href="#page-29">29</a>
 <a href="#section-7">7</a>   STRUCTURE AND ENCODING OF PDUS....................... <a href="#page-32">32</a>
 <a href="#section-7.1">7.1</a>   Structure.......................................... <a href="#page-32">32</a>
 <a href="#section-7.2">7.2</a>   Fixed Part......................................... <a href="#page-34">34</a>
 <a href="#section-7.2.1">7.2.1</a>   General.......................................... <a href="#page-34">34</a>
 <a href="#section-7.2.2">7.2.2</a>   Network Layer Protocol Identifier................ <a href="#page-34">34</a>
 <a href="#section-7.2.3">7.2.3</a>   Length Indicator................................. <a href="#page-35">35</a>
 <a href="#section-7.2.4">7.2.4</a>   Version/Protocol Identifier Extension............ <a href="#page-35">35</a>
 <a href="#section-7.2.5">7.2.5</a>   PDU Lifetime..................................... <a href="#page-35">35</a>
 <a href="#section-7.2.6">7.2.6</a>   Flags............................................ <a href="#page-36">36</a>
 7.2.6.1   Segmentation Permitted and More Segments Flags. 36
 <a href="#section-7.2.6.2">7.2.6.2</a>   Error Report Flag.............................. <a href="#page-37">37</a>
 <a href="#section-7.2.7">7.2.7</a>   Type Code........................................ <a href="#page-37">37</a>
 <a href="#section-7.2.8">7.2.8</a>   PDU Segment Length............................... <a href="#page-37">37</a>
 <a href="#section-7.2.9">7.2.9</a>   PDUChecksum...................................... <a href="#page-38">38</a>
 <a href="#section-7.3">7.3</a>   Address Part....................................... <a href="#page-38">38</a>
 <a href="#section-7.3.1">7.3.1</a>   General.......................................... <a href="#page-38">38</a>
 <a href="#section-7.3.1.1">7.3.1.1</a>     Destination and Source Address Information... <a href="#page-39">39</a>
 <a href="#section-7.4">7.4</a>   Segmentation Part.................................. <a href="#page-40">40</a>
 <a href="#section-7.4.1">7.4.1</a>   Data Unit Identifier............................. <a href="#page-41">41</a>
 <a href="#section-7.4.2">7.4.2</a>   Segment Offset................................... <a href="#page-41">41</a>
 <a href="#section-7.4.3">7.4.3</a>   PDU Total Length................................. <a href="#page-41">41</a>
 <a href="#section-7.5">7.5</a>   Options Part....................................... <a href="#page-41">41</a>
 <a href="#section-7.5.1">7.5.1</a>   General.......................................... <a href="#page-41">41</a>
 <a href="#section-7.5.2">7.5.2</a>   Padding.......................................... <a href="#page-43">43</a>
 <a href="#section-7.5.3">7.5.3</a>   Security......................................... <a href="#page-43">43</a>
 <a href="#section-7.5.4">7.5.4</a>   Source Routing................................... <a href="#page-44">44</a>
 <a href="#section-7.5.5">7.5.5</a>   Recording of Route............................... <a href="#page-45">45</a>
 <a href="#section-7.5.6">7.5.6</a>   Quality of Service Maintenance................... <a href="#page-46">46</a>
 <a href="#section-7.6">7.6</a>   Priority........................................... <a href="#page-47">47</a>
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page ii]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-iii" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 <a href="#section-7.7">7.7</a>   Data Part.......................................... <a href="#page-47">47</a>
 <a href="#section-7.8">7.8</a>   Data (DT) PDU...................................... <a href="#page-49">49</a>
 <a href="#section-7.8.1">7.8.1</a>   Structure........................................ <a href="#page-49">49</a>
 <a href="#section-7.8.1.1">7.8.1.1</a>   Fixed Part..................................... <a href="#page-50">50</a>
 <a href="#section-7.8.1.2">7.8.1.2</a>   Addresses...................................... <a href="#page-50">50</a>
 <a href="#section-7.8.1.3">7.8.1.3</a>   Segmentation................................... <a href="#page-50">50</a>
 <a href="#section-7.8.1.4">7.8.1.4</a>   Options........................................ <a href="#page-50">50</a>
 <a href="#section-7.8.1.5">7.8.1.5</a>   Data........................................... <a href="#page-50">50</a>
 <a href="#section-7.9">7.9</a>   Inactive Network Layer Protocol.................... <a href="#page-51">51</a>
 <a href="#section-7.9.1">7.9.1</a>   Network Layer Protocol Id........................ <a href="#page-51">51</a>
 <a href="#section-7.9.2">7.9.2</a>   Data Field....................................... <a href="#page-51">51</a>
 <a href="#section-7.10">7.10</a>   Error Report PDU (ER)............................. <a href="#page-52">52</a>
 <a href="#section-7.10.1">7.10.1</a>   Structure....................................... <a href="#page-52">52</a>
 <a href="#section-7.10.1.1">7.10.1.1</a>   Fixed Part.................................... <a href="#page-53">53</a>
 <a href="#section-7.10.1.2">7.10.1.2</a>   Addresses..................................... <a href="#page-53">53</a>
 <a href="#section-7.10.1.3">7.10.1.3</a>   Segmentation.................................. <a href="#page-53">53</a>
 <a href="#section-7.10.1.4">7.10.1.4</a>   Options....................................... <a href="#page-54">54</a>
 <a href="#section-7.10.1.5">7.10.1.5</a>   Reason for Discard............................ <a href="#page-54">54</a>
 <a href="#section-7.10.1.6">7.10.1.6</a>   Error Report Data Field....................... <a href="#page-55">55</a>
 <a href="#section-8">8</a>   FORMAL DESCRIPTION................................... <a href="#page-56">56</a>
 <a href="#section-8.1">8.1</a>   Values of the State Variable....................... <a href="#page-57">57</a>
 <a href="#section-8.2">8.2</a>   Atomic Events...................................... <a href="#page-57">57</a>
 <a href="#section-8.2.1">8.2.1</a>   N.UNITDATA_request and N.UNITDATA_indication..... <a href="#page-57">57</a>
 <a href="#section-8.2.2">8.2.2</a>   SN.UNITDATA_request and SN.UNITDATA_indication... <a href="#page-58">58</a>
 <a href="#section-8.2.3">8.2.3</a>   TIMER Atomic Events.............................. <a href="#page-59">59</a>
 <a href="#section-8.3">8.3</a>   Operation of the Finite State Automation........... <a href="#page-59">59</a>
 <a href="#section-8.3.1">8.3.1</a>   Type and Constant Definitions.................... <a href="#page-61">61</a>
 <a href="#section-8.3.2">8.3.2</a>   Interface Definitions............................ <a href="#page-65">65</a>
 <a href="#section-8.3.3">8.3.3</a>   Formal Machine Definition........................ <a href="#page-67">67</a>
 <a href="#section-9">9</a>   CONFORMANCE.......................................... <a href="#page-84">84</a>
 <a href="#section-9.1">9.1</a>   Provision of Functions for Conformance............. <a href="#page-84">84</a>
<span class="grey">ISO DIS 8473 (May 1984)                                       [Page iii]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-iv" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page iv]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-1" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
INTRODUCTION
 This Protocol is one of a set of International Standards produced to
 facilitate the interconnection of open systems. The set of standards
 covers the services and protocols required to achieve such
 interconnection.
 This Protocol Standard is positioned with respect to other related
 standards by the layers defined in the Reference Model for Open Systems
 Interconnection (ISO 7498). In particular, it is a protocol of the
 Network Layer. The Protocol herein described is a Subnetwork
 Independent Convergence Protocol combined with relay and routing
 functions as described in the Internal Organization of the Network
 Layer (ISO iiii). This Protocol provides the connectionless-mode
 Network Service as defined in ISO 8348/DAD1, Addendum to the Network
 Service Definition Covering Connectionless-mode Transmission, between
 Network Service users and/or Network Layer relay systems.
 The interrelationship of these standards is illustrated in Figure 0-1
 below:
      ______________OSI Network Service Definition______________
                    |                             ^
                                                  |
                    |                             |
         Protocol     Reference to aims __________|
                    |
      Specification | Reference to assumptions ___
                                                  |
                    |                             |
                                                  |
                    |                             |
                                                  |
                    |                             v
      ______________Subnetwork Service Definition(s) ___________
              Figure 0-1.  Interrelationship of Standards
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 1]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-2" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-1" href="#section-1">1</a>  SCOPE AND FIELD OF APPLICATION</span>
 This International Standard specifies a protocol which is used to
 provide the Connectionless-mode Network Service as described in ISO
 8348/DAD1, Addendum to the Network Service Definition Covering
 Connectionless-mode Transmission. The protocol herein described relies
 upon the provision of a connectionless-mode subnetwork service.
 This Standard specifies:
  a)  procedures for the connectionless transmission of data and control
      information from one network-entity to a peer network-entity;
  b)  the encoding of the protocol data units used for the transmission
      of data and control information, comprising a variable-length
      protocol header format;
  c)  procedures for the correct interpretation of protocol control
      information; and
  d)  the functional requirements for implementations claiming
      conformance to the Standard.
 The procedures are defined in terms of:
  a)  the interactions among peer network-entities through the exchange
      of protocol data units;
  b)  the interactions between a network-entity and a Network Service
      user through the exchange of Network Service primitives; and
  c)  the interactions between a network-entity and a subnetwork service
      provider through the exchange of subnetwork service primitives.
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 2]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-3" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-2" href="#section-2">2</a>  REFERENCES</span>
 ISO 7498       Information Processing Systems - Open Systems
                Interconnection - Basic Reference Model
 DP 8524        Information Processing Systems - Open Systems
                Interconnection - Addendum to ISO 7498 Covering
                Connectionless-Mode Transmission
 DIS 8348       Information Processing Systems - Data Communications -
                Network Service Definition
 ISO 8348/DAD1  Information Processing Systems - Data Communications -
                Addendum to the Network Service Definition Covering
                Connectionless-Mode Transmission
 ISO 8348/DAD2  Information Processing Systems - Data Communications -
                Addendum to the Network Service Definition Covering
                Network Layer Addressing
 DP iiii        Information Processing Systems - Data Communications -
                Internal Organization of the Network Layer
 DP 8509        Information Processing Systems - Open Systems
                Interconnection - Service Conventions
 ISO TC97/SC16  A Formal Description Technique based on an N1825
                Extended State Transition Model
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 3]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-4" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
SECTION ONE.  GENERAL
<span class="h2"><a class="selflink" id="section-3" href="#section-3">3</a>  DEFINITIONS</span>
 3.1  Reference Model Definitions
  This document makes use of the following concepts defined in ISO 7498:
   a) Network layer
   b) Network service
   c) Network service access point
   d) network service access point address
   e) Network entity
   f) Routing
   f) Service
   h) Network protocol
   i) Network relay
   j) Network protocol data unit
   k) End system
 3.2  Service Conventions Definitions
  This document makes use of the following concepts from the OSI Service
  Conventions (ISO 8509):
   l) Service user
   m) Service provider
 3.3  Network Layer Architecture Definitions
  This document makes use of the following concepts from the Internal
  Organization of the Network Layer (ISO iiii):
   n) Subnetwork
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 4]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-5" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   o) Relay system
   p) Intermediate system
   q) Subnetwork service
 3.4  Network Layer Addressing Definitions
  This document makes use of the following concepts from DIS 8348/DAD2,
  Addendum to the Network Service Definition Covering Network layer
  addressing:
   r) Network entity title
   s) Network protocol address information
   t) Subnetwork address
   u) Domain
 3.5  Additional Definitions
  For the purposes of this document, the following definitions apply:
   a) automaton    -  a machine designed to follow automatically a
                      predetermined sequence of operations or to respond
                      to encoded instructions.
   b) local matter -  a decision made by a system concerning its
                      behavior in the Network Layer that is not subject
                      to the requirements of this Protocol.
   c) segment      -  part of the user data provided in the N_UNITDATA
                      request and delivered in the N_UNITDATA
                      indication.
   d) initial PDU  -  a protocol data unit carrying the whole of the
                      user data from an N_UNITDATA request.
   e) derived PDU  -  a  protocol data unit whose fields are identical
                      to those of an initial PDU, except that it carries
                      only a segment of the user data from an N_UNITDATA
                      request.
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 5]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-6" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   f) segmentation -  the act of generating two or more derived PDUS
                      from an initial or derived PDU.  The derived PDUs
                      together carry the entire user data of the initial
                      or derived PDU from which they were generated.
                      [Note: it is possible that such an initial PDU
                      will never actually be generated for a particular
                      N_UNITDATA request, owing to the immediate
                      application of segmentation.]
   g) reassembly   -  the act of regenerating an initial PDU (in order
                      to issue an N_UNITDATA indication) from two or
                      more derived PDUs produced by segmentation.
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 6]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-7" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-4" href="#section-4">4</a>  SYMBOLS AND ABBREVIATIONS</span>
 4.1  Data Units
  PDU          Protocol Data Unit
  NSDU         Network Service Data Unit
  SNSDU        Subnetwork Service Data Unit
 4.2  Protocol Data Units
  DT PDU       Data Protocol Data Unit
  ER PDU       Error Report Protocol Data Unit
 4.3  Protocol Data Unit Fields
  NPID         Network Layer Protocol Identifier
  LI           Length Indicator
  V/P          Version/protocol Identifier Extension
  LT           Lifetime
  SP           Segmentation Permitted Flag
  MS           More Segments Flag
  E/R          Error Report Flag
  TP           Type
  SL           Segment Length
  CS           Checksum
  DAL          Destination Address Length
  DA           Destination Address
  SAL          Source Address Length
  SA           Source Address
  DUID         Data Unit Identifier
  SO           Segment Offset
  TL           Total Length
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 7]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-8" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 4.4  Parameters
  DA           Destination Address
  SA           Source Address
  QOS          Quality of Service
 4.5  Miscellaneous
  SNICP        Subnetwork Independent Convergence Protocol
  SNDCP        Subnetwork Dependent Convergence Protocol
  SNAcP        Subnetwork Access Protocol
  SN           Subnetwork
  P            Protocol
  NSAP         Network Service Access Point
  SNSAP        Subnetwork Service Access Point
  NPAI         Network Protocol Address Information
  NS           Network Service
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 8]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-9" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-5" href="#section-5">5</a>  OVERVIEW OF THE PROTOCOL</span>
 5.1  Internal Organization of the Network Layer
  The architecture of the Network Layer is described in a separate
  document, Internal Organization of the Network Layer (ISO iiii), in
  which an OSI Network Layer structure is defined, and a structure to
  classify protocols as an aid to the progression toward that structure
  is presented. This protocol is designed to be used in the context of
  the internetworking protocol approach defined in that document,
  between Network Service users and/or Network Layer relay systems. As
  described in the Internal Organization of the Network Layer, the
  protocol herein described is a Subnetwork Independent Convergence
  Protocol combined with relay and routing functions designed to allow
  the incorporation of existing network standards within the OSI
  framework.
  A Subnetwork Independent Convergence Protocol is one which can be
  defined on a subnetwork independent basis and which is necessary to
  support the uniform appearance of the OSI Connectionless-mode Network
  Service between Network Service users and/or Network Layer relay
  systems over a set of interconnected homogeneous or heterogeneous
  subnetworks. This protocol is defined in just such a subnetwork
  independent way so as to minimize variability where subnetwork
  dependent and/or subnetwork access protocols do not provide the OSI
  Network Service.
  The subnetwork service required from the lower sublayers by the
  protocol described herein is identified in <a href="#section-5.5">Section 5.5</a>.
 5.2  Subsets of the Protocol
  Two proper subsets of the full protocol are also defined which permit
  the use of known subnetwork characteristics, and are therefore not
  subnetwork independent.
  One protocol subset is for use where it is known that the source and
  destination end-systems are connected by a single subnetwork. This is
  known as the "Inactive Network Layer Protocol" subset. A second subset
  permits simplification of the header where it is known that the source
  and destination end-systems are connected by subnetworks whose
  subnetwork service data unit (SNSDU) sizes are greater than or equal
  to a known bound large enough for segmentation not to be required.
  This subset, selected by setting the "segmentation permitted" flag to
  zero, is known as the "non-segmenting" protocol subset.
<span class="grey">ISO DIS 8473 (May 1984)                                         [Page 9]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-10" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 5.3  Addressing
  The Source Address and Destination Address parameters referred to in
  <a href="#section-7.3">Section 7.3</a> of this International Standard are OSI Network Service
  Access Point Addresses. The syntax and semantics of an OSI Network
  Service Access Point Address, the syntax and encoding of the Network
  Protocol Address Information employed by this Protocol, and the
  relationship between the NSAP and the NPAI is described in a separate
  document, ISO 8348/DAD2, Addendum to the Network Service Definition
  covering Network Layer Addressing.
  The syntax and semantics of the titles and addresses used for relaying
  and routing are also described in ISO 8348/DAD2.
 5.4  Service Provided by the Network Layer
  The service provided by the protocol herein described is a
  connectionless-mode Network Service. The connectionless-mode Network
  Service is described in document ISO 8348/DAD1, Addendum to the
  Network Service Definition Covering Connectionless-mode Transmission.
  The Network Service primitives provided are summarized below:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 10]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-11" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                 Primitives                Parameters
      +--------------------------------------------------------+
      |                           |                            |
      | N_UNITDATA Request        | NS_Destination_Address,    |
      |            Indication     | NS_Source_Address,         |
      |                           | NS_Quality_of_Service,     |
      |                           | NS_Userdata                |
      +--------------------------------------------------------+
                 Table 5-1.  Network Service Primitives
  The Addendum to the Network Service Definition Covering
  Connectionless-mode Transmission (ISO 8348/DAD1) states that the
  maximum size of a connectionless-mode Network-service-data-unit is
  limited to 64512 octets.
 5.5  Service Assumed from the Subnetwork Service provider
  The subnetwork service required to support this protocol is defined as
  comprising the following primitives:
                Primitives                  Parameters
      +--------------------------------------------------------+
      |                           |                            |
      | SN_UNITDATA Request       | SN_Destination_Address,    |
      |             Indication    | SN_Source_Address,         |
      |                           | SN_Quality_of_Service,     |
      |                           | SN_Userdata                |
      +--------------------------------------------------------+
               Table 5-2.  Subnetwork Service Primitives
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 11]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-12" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  5.5.1  Subnetwork Addresses
   The source and destination addresses specify the points of attachment
   to a public or private subnetwork(s) involved in the transmission.
   Subnetwork addresses are defined in the Service Definition of each
   individual subnetwork.
   The syntax and semantics of subnetwork addresses are not defined in
   this Protocol Standard.
  5.5.2  Subnetwork Quality of Service
   Subnetwork Quality of Service describes aspects of a subnetwork
   connectionless-mode service which are attributable solely to the
   subnetwork service provider.
   Associated with each subnetwork connectionless-mode transmission,
   certain measures of quality of service are requested when the
   primitive action is initiated. These requested measures (or parameter
   values and options) are based on a priori knowledge by the Network
   Service provider of the service(s) made available to it by the
   subnetwork. Knowledge of the nature and type of service available is
   typically obtained prior to an invocation of the subnetwork
   connectionless-mode service.
    Note:
     The quality of service parameters identified for the subnetwork
     connectionless-mode service may in some circumstances be directly
     derivable from or mappable onto those identified in the
     connectionless-mode Network Service; e.g., the parameters
      a)  transit delay;
      b)  protection against unauthorized access;
      c)  cost determinants;
      d)  priority; and
      e)  residual error probability
     as defined in ISO 8348/DAD1, Addendum to the Network Service
     Definition Covering Connectionless-mode Transmission, may be
     employed.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 12]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-13" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
     For those subnetworks which do not inherently provide Quality of
     Service as a parameter when the primitive action is initiated, it
     is a local matter as to how the semantics of the service requested
     might be preserved. In particular, there may be instances in which
     the Quality of Service requested cannot be maintained. In such
     circumstances, the subnetwork service provider shall attempt to
     deliver the protocol data unit at whatever Quality of Service is
     available.
  5.5.3  Subnetwork User Data
   The SN_Userdata is an ordered multiple of octets, and is transferred
   transparently between the specified subnetwork service access points.
   The subnetwork service is required to support a subnetwork service
   data unit size of at least the maximum size of the Data PDU header
   plus one octet of NS-Userdata. This requires a minimum subnetwork
   service data unit size of 256 octets.
   Where the subnetwork service can support a subnetwork service data
   unit (SNSDU) size greater than the size of the Data PDU header plus
   one octet of NS_Userdata, the protocol may take advantage of this. In
   particular, if all SNSDU sizes of the subnetworks involved are known
   to be large enough that segmentation is not required, then the
   "non-segmenting" protocol subset may be used.
  5.5.4  Subnetwork Dependent Convergence Functions
   Subnetwork Dependent Convergence Functions may be performed to
   provide a connectionless-mode subnetwork service in the case where
   subnetworks also provide a connection-oriented subnetwork service. If
   a subnetwork provides a connection-oriented service, some subnetwork
   dependent function is assumed to provide a mapping into the required
   subnetwork service described in the preceding text.
   A Subnetwork Dependent Convergence Protocol may also be employed in
   those cases where functions assumed from the subnetwork service
   provider are not performed.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 13]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-14" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 5.6  Service Assumed from Local Evironment
  A timer service is provided to allow the protocol entity to schedule
  events.
  There are three primitives associated with the S_TIMER service:
   1)  the S-TIMER request;
   2)  the S_TIMER response; and
   3)  the S_TIMER cancel.
  The S_TIMER request primitive indicates to the local environment that
  it should initiate a timer of the specified name and subscript and
  maintain it for the duration specified by the time parameter.
  The S_TIMER response primitive is initiated by the local environment
  to indicate that the delay requested by the corresponding S_TIMER
  request primitive has elapsed.
  The S_TIMER cancel primitive is an indication to the local environment
  that the specified timer(s) should be cancelled. If the subscript
  parameter is not specified, then all timers with the specified name
  are cancelled; otherwise, the timer of the given name and subscript is
  cancelled. If no timers correspond to the parameters specified, the
  local environment takes no action.
  The parameters of the S_TIMER service primitives are:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 14]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-15" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
            Primitives                  Parameters
      +--------------------------------------------------------+
      |                           |                            |
      | S_TIMER Request           | S_Time                     |
      |                           | S_Name                     |
      |                           | S_Subscript                |
      |                           |                            |
      | S_TIMER Response          | S_Name                     |
      |         Cancel            | S_Subscript                |
      +--------------------------------------------------------+
                      Table 5-3.  Timer Primitives
  The time parameter indicates the time duration of the specified timer.
  An identifying label is associated with a timer by means of the name
  parameter. The subscript parameter specifies a value to distinguish
  timers with the same name. The name and subscript taken together
  constitute a unique reference to the timer.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 15]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-16" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
SECTION TWO.  SPECIFICATION OF THE PROTOCOL
<span class="h2"><a class="selflink" id="section-6" href="#section-6">6</a>  PROTOCOL FUNCTIONS</span>
 This section describes the functions performed as part of the Protocol.
 Not all of the functions must be performed by every implementation.
 <a href="#section-6.17">Section 6.17</a> specifies which functions may be omitted and the correct
 behavior where requested functions are not implemented.
 6.1  PDU Composition Function
  This function is responsible for the construction of a protocol data
  unit according to the rules of protocol given in <a href="#section-7">Section 7</a>. Protocol
  Control Information required for delivering the data unit to its
  destination is determined from current state information and from the
  parameters provided with the N_UNITDATA Request; e.g., source and
  destination addresses, QOS, etc. User data passed from the Network
  Service user in the N_UNITDATA Request forms the Data field of the
  protocol data unit.
  During the composition of the protocol data unit, a Data Unit
  Identifier is assigned to identify uniquely all segments of the
  corresponding NS_Userdata. The "Reassemble PDU" function considers
  PDUs to correspond to the same Initial PDU, and hence N_UNITDATA
  request, if they have the same Source and Destination Addresses and
  Data Unit Identifier.
  The Data Unit Identifier is available for ancillary functions such as
  error reporting. The originator of the PDU must choose the Data Unit
  Identifier so that it remains unique (for this Source and Destination
  Address pair) for the maximum lifetime of the PDU (or any Derived
  PDUs) in the network.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 16]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-17" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  During the composition of the PDU, a value of the total length of the
  PDU is determined by the originator and placed in the Total Length
  field of the PDU header. This field is not changed in any Derived PDU
  for the lifetime of the protocol data unit.
  Where the non-segmenting subset is employed, neither the Total Length
  field nor the Data Unit Identifier field is present. During the
  composition of the protocol data unit, a value of the total length of
  the PDU is determined by the originator and placed in the Segment
  Length field of the PDU header. This field is not changed for the
  lifetime of the PDU.
 6.2  PDU Decomposition Function
  This function is responsible for removing the Protocol Control
  Information from the protocol data unit. During this process,
  information pertinent to the generation of the N_UNITDATA Indication
  is retained. The data field of the PDU received is reserved until all
  segments of the original service data unit have been received; this is
  the NS_Userdata parameter of the N_UNITDATA Indication.
 6.3  Header Format Analysis Function
  This function determines whether the full Protocol described in this
  Standard is employed, or one of the defined proper subsets thereof. If
  the protocol data unit has a Network Layer Protocol Identifier
  indicating that this is a standard version of the Protocol, this
  function determines whether a PDU received has reached its destination
  using the destination address provided in the PDU is the same as the
  one which addresses an NSAP served by this network-entity, then the
  PDU has reached its destination; if not, it must be forwarded.
  If the protocol data unit has a Network Layer Protocol Identifier
  indicating that the Inactive Network Layer Protocol subset is in use,
  then no further analysis of the PDU header is required. The
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 17]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-18" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  network-entity in this case determines that either the network address
  encoded in the network protocol address information of a supporting
  subnetwork protocol corresponds to a network Service Access Point
  address served by this network-entity, or that an error has occurred.
  If the subnetwork PDU has been delivered correctly, then the protocol
  data unit may be decomposed according to the procedure described for
  that particular subnetwork protocol.
 6.4  PDU Lifetime Control Function
  This function is used to enforce the maximum PDU lifetime. It is
  closely associated with the "Header Format Analysis" function. This
  function determines whether a PDU received may be forwarded or whether
  its assigned lifetime has expired, in which case it must be discarded.
  The operation of the Lifetime Control function depends upon the
  Lifetime field in the PDU header. This field contains, at any time,
  the remaining lifetime of the PDU (represented in units of 500
  Milliseconds). The Lifetime of the Initial PDU is determined by the
  originating network-entity, and placed in the Lifetime field of the
  PDU.
 6.5  Route PDU Function
  This function determines the network-entity to which a protocol data
  unit should be forwarded, using the destination NSAP address
  parameters, Quality of Service parameter, and/or other parameters. It
  determines the subnetwork which must be transited to reach that
  network-entity. Where segmentation occurs, it further determines which
  subnetwork(s) the segments may transit to reach that network-entity.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 18]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-19" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 6.6  Forward PDU Function
  This function issues a subnetwork service primitive (see <a href="#section-5.5">Section 5.5</a>)
  supplying the subnetwork identified by the "Route PDU" function with
  the protocol data unit as an SNSDU, and the address information
  required by that subnetwork to identify the "next" intermediate-system
  within the subnetwork-specific address domain.
  When an Error Report PDU is to be forwarded, and is longer than the
  maximum user data acceptable by the subnetwork, it shall be truncated
  to the maximum acceptable length ad forwarded with no other change.
  When a Data PDU is to be forwarded ad is longer than the maximum user
  data acceptable by the subnetwork, the Segmentation function is
  applied (See <a href="#section-6.7">Section 6.7</a>, which follows).
 6.7  Segmentation Function
  Segmentation is performed when the size of the protocol data unit is
  greater than the maximum size of the user data parameter field of the
  subnetwork service primitive.
  Segmentation consists of composing two or more new PDUs (Derived PDUs)
  from the PDU received. The PDU received may be the Initial PDU, or it
  may be a Derived PDU. The Protocol Control Information required to
  identify, route, and forward a PDU is duplicated in each PDU derived
  from the Initial PDU. The user data encapsulated within the PDU
  received is divided such that the Derived PDUs satisfy the size
  requirements of the user data parameter field of the subnetwork
  service primitive.
  Derived PDUs are identified as being from the same Initial PDU by
  means of
   a)  the source address,
   b)  the destination address, and
   c)  the data unit identifier.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 19]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-20" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  The following fields of the PDU header are used in conjunction with
  the Segmentation function:
   a)  Segment Offset - identifies at which octet in the data field of
       the Initial PDU the segment begins;
   b)  Segment Length - specifies the number of octets in the Derived
       PDU, including both header and data;
   c)  More Segments Flag - set to one if this Derived PDU does not
       contain, as its final octet of user data, the final octet of the
       Initial PDU; and
   d)  Total Length - specifies the entire length of the Initial PDU,
       including both header and data.
  Derived PDUs may be further segmented without constraining the routing
  of the individual Derived PDUs.
  A Segmentation Permitted flag is set to one to indicate that
  segmentation is permitted. If the Initial PDU is not to be segmented
  at any point during its lifetime in the network, the flag is set to
  zero.
  When the "Segmentation Permitted" flag is set to zero, the non-
  segmenting protocol subset is in use.
 6.8  Reassembly Function
  The Reassembly Function reconstructs the Initial PDU transmitted to
  the destination network-entity from the Derived PDUs generated during
  the lifetime of the Initial PDU.
  A bound on the time during which segments (Derived PDUs) of an Initial
  PDU will be held at a reassembly point is provided so that resources
  may be released when it is no longer expected that any outstanding
  segments of the Initial PDU will arrive at the reassembly point. When
  such an event occurs, segments (Derived PDUs) of the Initial PDU held
  at the reassembly point are discarded, the resources allocated for
  those segments are freed,
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 20]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-21" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  and if selected, an Error Report is generated.
   Note:
    The design of the Segmentation and Reassembly functions is intended
    principally to be used such that reassembly takes place at the
    destination. However, other schemes which
     a)  interact with the routing algorithm to favor paths on which
         fewer segments are generated,
     b)  generate more segments than absolutely required in order to
         avoid additional segmentation at some subsequent point, or
     c)  allow partial/full reassembly at some point along the route
         where it is known that the subnetwork with the smallest PDU
         size has been transited
    are not precluded. The information necessary to enable the use of
    one of these alternative strategies may be made available through
    the operation of a Network Layer Management function.
    While the exact relationship between reassembly lifetime and PDU
    lifetime is a local matter, the reassembly algorithm must preserve
    the intent of the PDU lifetime. Consequently, the reassembly
    function must discard PDUs whose lifetime would otherwise have
    expired had they not been under the control of the reassembly
    function.
 6.9  Discard PDU Function
  This function performs all of the actions necessary to free the
  resources reserved by the network-entity in any of the following
  situations (Note: the list is not exhaustive):
   a)  A violation of protocol procedure has occurred.
   b)  A PDU is received whose checksum is inconsistent with its
       contents.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 21]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-22" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   c)  A PDU is received, but due to congestion, it cannot be processed.
   d)  A PDU is received whose header cannot be analyzed.
   e)  A PDU is received which cannot be segmented and cannot be
       forwarded because its length exceeds the maximum subnetwork
       service data unit size.
   f)  A PDU is received whose destination address is unreachable or
       unknown.
   g)  Incorrect or invalid source routing was specified. This may
       include a syntax error in the source routing field, and unknown
       or unreachable address in the source routing field, or a path
       which is not acceptable for other reasons.
   h)  A PDU is received whose PDU lifetime has expired or the lifetime
       expires during reassembly.
   i)  A PDU is received which contains an unsupported option.
 6.10  Error Reporting Function
  6.10.1  Overview
   This function causes the return of an Error Report PDU to the source
   network-entity when a protocol data unit is discarded. An "error
   report flag" in the original PDU is set by the source network-entity
   to indicate whether or not Error Report PDUs are to be returned.
   The Error Report PDU identifies the discarded PDU, specifies the type
   of error detected, and identifies the location at which the error was
   detected. Part or all of the discarded PDU is included in the data
   field of the Error Report PDU.
   The address of the originator of the Data Protocol Data Unit is
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 22]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-23" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   conveyed as both the destination address of the Error Report PDU as
   well as the source address of the original Data PDU; the latter is
   contained in the Data field of the Error Report PDU. The address of
   the originator of the Error Report PDU is contained in the source
   address field of the header of the Error Report PDU.
    Note:
     Non-receipt of an Error Report PDU does not imply correct delivery
     of a PDU issued by a source network-entity.
  6.10.2  Requirements
   An Error Report PDU shall not be generated to report the discarding
   of a PDU that itself contains an Error Report.
   An Error Report PDU shall not be generated upon discarding of a PDU
   unless that PDU has the Error Report flag set to allow Error Reports.
   If a Data PDU is discarded, and has the Error Report flag set to
   allow Error Reports, an Error Report PDU shall be generated if the
   reason for discard (See <a href="#section-6.9">Section 6.9</a>)  is
    a)  destination address unreachable,
    b)  source routing failure,
    c)  unsupported options, or
    d)  protocol violation.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 23]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-24" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    Note:
     It is intended that this list shall include all nontransient
     reasons for discard; the list may therefore need to be amended or
     extended in the light of any changes made in the definitions of
     such reasons.
   If a Data PDU with the Error Report flag set to allow Error Reports
   is discarded for any other reason, an Error Report PDU may be
   generated (as an implementation option).
  6.10.3  Processing of Error Reports
   Error Report PDUs are forwarded by intermediate network-entities in
   the same way as Data PDUs. It is possible that an Error Report PDU
   may be longer than the maximum user data size of a subnetwork that
   must be traversed to reach the origin of the discarded PDU. In this
   case, the Forward PDU function shall truncate the PDU to the maximum
   size acceptable.
   The entire header of the discarded data unit shall be included in the
   data field of the Error Report PDU. Some or all of the data field of
   the discarded data unit may also be included.
    Note:
     Since the suppression of Error Report PDUs is controlled by the
     originating network-entity and not by the NS User, care should be
     exercised by the originator with regard to suppressing ER PDUs so
     that error reporting is not suppressed for every PDU generated.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 24]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-25" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 6.11  PDU Header Error Detection
  The PDU Header Error Detection function protects against failure of
  intermediate or end-system network-entities due to the processing of
  erroneous information in the PDU header. The function is realized by a
  checksum computed on the PDU header. The checksum is verified at each
  point at which the PDU header is processed. If PDU header fields are
  modified (for example, due to lifetime function), then the checksum is
  modified so that the checksum remains valid.
  An intermediate system network-entity must not recompute the checksum
  for the entire header, even if fields are modified.
   Note:
    This is to ensure that inadvertent modification of a header while a
    PDU is being processed by an intermediate system (for example, due
    to a memory fault) may still be detected by the PDU Header Error
    function.
  The use of this function is optional, and is selected by the
  originating network-entity. If the function is not used, the checksum
  field of the PDU header is set to zero.
  If the function is selected by the originating network-entity, the
  value of the checksum field causes the following formulae to be
  satisfied:
     L
   (SUM)     a   = 0  (modulo 255)
              i
     i=1
     L
   (SUM)     (L-i+1) a   = 0 (modulo 255)
                       i
     i=1
    Where L = the number of octets in the PDU header, and
          a = value of octet at position i.
           i
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 25]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-26" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  When the function is in use, neither octet of the checksum field may
  be set to zero.
  Annex C contains descriptions of algorithms which may be used to
  calculate the correct value of the checksum field when the PDU is
  created, and to update the checksum field when the header is modified.
 6.12  Padding Function
  The padding function is provided to allow space to be reserved in the
  PDU header which is not used to support any other function. Octet
  alignment must be maintained.
   Note:
    An example of the use of this function is to cause the data field of
    a PDU to begin on a convenient boundary for the originating
    network-entity, such as a computer word boundary.
 6.13  Security
  An issue related to the quality of the network service is the
  protection of information flowing between transport-entities. A system
  may wish to control the distribution of secure data by assigning
  levels of security to PDUs. As a local consideration, the Network
  Service user could be authenticated to ascertain whether the user has
  permission to engage in communication at a particular security level
  before sending the PDU. While no protocol exchange is required in the
  authentication process, the optional security parameter in the options
  part of the PDU header may be employed to convey the particular
  security level between peer network-entities.
  The syntax and semantics of the security parameter are not specified
  by this Standard. The security parameter is related to the "protection
  from unauthorized access" Quality of service parameter described in
  ISO 8348/DAD1, Addendum to the Network Service Definition Covering
  Connectionless-mode Transmission. However, to facilitate
  interoperation between end-systems and relay-systems by avoiding
  different interpretations of the same encoding, a mechanism is
  provided to distinguish user-defined security encoding from
  standardized security encoding.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 26]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-27" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 6.14  Source Routing Function
  The Source Routing function allows the originator to specify the path
  a generated PDU must take. Source routing can only be selected by the
  originator of a PDU. Source Routing is accomplished using a list of
  intermediate system addresses (or titles, see <a href="#section-5.3">Section 5.3</a> and 5.5.1)
  held in a parameter within the options part of the PDU Header. The
  size of the option field is determined by the originating
  network-entity. The length of this option does not change as the PDU
  traverses the network. Associated with this list is an indicator which
  identifies the next entry in the list to be used; this indicator is
  advanced by the receiver of the PDU when the next address matches its
  own address. The indicator is updated as the PDU is forwarded so as to
  identify the appropriate entry at each stage of relaying.
  Two forms of the source routing option are provided. The first form,
  referred to as complete source routing, requires that the specified
  path must be taken; if the specified path cannot be taken, the PDU
  must be discarded. The source may be informed of the discard using the
  Error Reporting function described in <a href="#section-6.10">Section 6.10</a>.
  The second form is referred to as partial source routing. Again, each
  address in the list must be visited in the order specified while on
  route to the destination. However, with this form of source routing
  the PDU may take any path necessary to arrive at the next address in
  the list. The PDU will not be discarded (for source routing related
  causes) unless one of the addresses specified cannot be reached by any
  available route.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 27]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-28" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 6.15  Record Route Function
  The Record Route function permits the exact recording of the paths
  taken by a PDU as it traverses a series of interconnected subnetworks.
  A recorded route is composed of a list of intermediate system
  addresses held in a parameter within the options part of the PDU
  header. The size of the option field is determined by the originating
  network-entity. The length of this option does not change as the PDU
  traverses the network.
  The list is constructed as the PDU traverses a set of interconnected
  subnetworks. Only intermediate system addresses are included in the
  recorded route. The address of the originator of the PDU is not
  recorded in the list. When an intermediate system network-entity
  processes a PDU containing the record route parameter, the system
  inserts its own address (or titles, see Sections <a href="#section-5.3">5.3</a> or <a href="#section-5.5.1">5.5.1</a>) into
  the list of recorded addresses.
  The record route option contains an indicator which identifies the
  next available octet to be used for recording of route. This
  identifier is updated as entries are added to the list. If the
  addition of the current address to the list would exceed the size of
  the option field, the indicator is set to show that recording of route
  has terminated. The PDU may still be forwarded to its final
  destination, without further addition of intermediate system
  addresses.
   Note:
    The Record Route function is principally intended to be used in the
    diagnosis of network problems. Its mechanism has been designed on
    this basis, and may provide a return path.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 28]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-29" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 6.16  Quality of Service Maintenance Function
  In order to support the Quality of Service requested by Network
  Service users, the Protocol may need to make QOS information available
  at intermediate systems. This information may be used by network
  entities in intermediate systems to make routing decisions where such
  decisions affect the overall QOS provided to NS users.
  In those instances where the QOS indicated cannot be maintained, the
  NS provider will attempt to deliver the PDU at a QOS less than that
  indicated. The NS provider will not necessarily provide a notification
  of failure to meet the indicated quality of service.
 6.17  Classification of Functions
  Implementations do not have to support all of the functions described
  in <a href="#section-6">Section 6</a>. Functions are divided into three categories:
   Type 1:  These functions must be supported.
   Type 2:  These functions may or may not be supported. If an
            implementation does not support a Type 2 function, and the
            function is selected by a PDU, then the PDU shall be
            discarded, and an Error Report PDU shall be generated and
            forwarded to the originating network-entity, providing that
            the Error Report flag is set.
   Type 3:  These functions may or may not be supported. If an
            implementation does not support a Type 3 function, and the
            function is selected by a PDU, then the function is not
            performed and the PDU is processed exactly as though the
            function was not selected. The protocol data unit shall not
            be discarded.
  Table 6-1 shows how the functions are divided into these three
  categories:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 29]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-30" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
         +---------------------------------------------------+
         | Function                       |  Type            |
         |--------------------------------|------------------|
         |                                |                  |
         | PDU Composition                |  1               |
         | PDU Decomposition              |  1               |
         | Header Format Analysis         |  1               |
         | PDU Lifetime Control           |  1               |
         | Route PDU                      |  1               |
         | Forward PDU                    |  1               |
         | Segment PDU                    |  1               |
         | Reassemble PDU                 |  1               |
         | Discard PDU                    |  1               |
         | Error Reporting                |  1 (note 1)      |
         | PDU Header Error Detection     |  1 (note 1)      |
         | Padding                        |  1 (notes 1   2) |
         | Security                       |  2               |
         | Complete Source Routing        |  2               |
         | Partial Source Routing         |  3               |
         | Priority                       |  3               |
         | Record Route                   |  3               |
         | Quality of Service Maintenance |  3               |
         +---------------------------------------------------+
            Table 6-1.  Categorization of Protocol Functions
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 30]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-31" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  Notes:
   1)  While the Padding, Error Reporting, and Header Error Detection
       functions must be provided, they are provided only when selected
       by the sending Network Service user.
   2)  The correct treatment of the Padding function involves no
       processing. Therefore, this could equally be described as a Type
       3 function.
   3)  The rationale for the inclusion of type 3 functions is that in
       the case of some functions it is more important to forward the
       PDUs between intermediate systems or deliver them to an
       end-system than it is to support the functions. Type 3 functions
       should be used in those cases where they are of an advisory
       nature and should not be the cause of the discarding of a PDU
       when not supported.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 31]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-32" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-7" href="#section-7">7</a>  STRUCTURE AND ENCODING OF PDUS</span>
 7.1 Structure
  All Protocol Data Units shall contain an integral number of octets.
  The octets in a PDU are numbered starting from one (1) and increasing
  in the order in which they are put into an SNSDU. The bits in an octet
  are numbered from one (1) to eight (8), where bit one (1) is the
  low-order bit.
  When consecutive octets are used to represent a binary number, the
  lower octet number has the most significant value.
  Any subnetwork supporting this protocol is required to state in its
  specification the way octets are transferred, using the terms "most
  significant bit" and "least significant bit." The PDUs of this
  protocol are defined using the terms "most significant bit" and "least
  significant bit."
   Note:
    When the encoding of a PDU is represented using a diagram in this
    section, the following representation is used:
     a)  octets are shown with the lowest numbered octet to the left,
         higher number octets being further to the right;
     b)  within an octet, bits are shown with bit eight (8) to the left
         and bit one (1) to the right.
  PDUs shall contain, in the following order:
   1)  the header, comprising:
    a)  the fixed part;
    b)  the address part;
    c)  the segmentation part, if present;
    d)  the options part, if present
   and
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 32]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-33" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   2)  the data field, if present.
  This structure is illustrated below:
                       Part:                Described in:
            +-------------------+
            |    Fixed Part     |            <a href="#section-7.2">Section 7.2</a>
            +-------------------+
            +-------------------+
            |   Address Part    |            <a href="#section-7.3">Section 7.3</a>
            +-------------------+
            +-------------------+
            | Segmentation Part |            <a href="#section-7.4">Section 7.4</a>
            +-------------------+
            +-------------------+
            |   Options Part    |            <a href="#section-7.5">Section 7.5</a>
            +-------------------+
            +-------------------+
            |       Data        |            <a href="#section-7.6">Section 7.6</a>
            +-------------------+
                       Figure 7-1.  PDU Structure
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 33]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-34" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 7.2 Fixed Part
  7.2.1 General
   The fixed part contains frequently occuring parameters including the
   type code (DT or ER) of the protocol data unit. The length and the
   structure of the fixed part are defined by the PDU code.
   The fixed part has the following format:
                                                      Octet
            +------------------------------------+
            | Network Layer Protocol Identifier  |     1
            |------------------------------------|
            |         Length Indicator           |     2
            |------------------------------------|
            |   Version/Protocol Id Extension    |     3
            |------------------------------------|
            |            Lifetime                |     4
            |------------------------------------|
            |S |M |E/R|         Type             |     5
            | P| S|   |                          |
            |------------------------------------|
            |          Segment Length            |    6,7
            |------------------------------------|
            |             Checksum               |    8,9
            +------------------------------------+
                  Figure 7-2.  PDU Header--Fixed Part
  7.2.2 Network Layer Protocol Identifier
   The value of this field shall be binary 1000 0001. This field
   identifies this Network Layer Protocol as ISO 8473, Protocol for
   Providing the Connectionless-mode Network Service.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 34]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-35" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  7.2.3 Length Indicator
   The length is indicated by a binary number, with a maximum value of
   254 (1111 1110). The length indicated is the length in octets of the
   header, as described in <a href="#section-7.1">Section 7.1</a>, Structure. The value 255 (1111
   1111) is reserved for possible future extensions.
    Note:
     The rules for forwarding and segmentation ensure that the header
     length is the same for all segments (Derived PDUs) of the Initial
     PDU, and is the same as the header length of the Initial PDU.
  7.2.4 Version/Protocol Identifier Extension
   The value of this field is binary 0000 0001. This Identifies a
   standard version of ISO 8473, Protocol for Providing the
   Connectionless-mode Network Service.
  7.2.5 PDU Lifetime
   The Lifetime field is encoded as a binary number representing the
   remaining lifetime of the PDU, in units of 500 milliseconds.
   The Lifetime field is set by the originating network-entity, and is
   decremented by every network-entity which processes the PDU. The PDU
   shall be discarded if the value of the field reaches zero.
   When a network-entity processes a PDU, it decrements the Lifetime by
   at least one. The Lifetime shall be decremented by more than one if
   the sum of:
    1)  the transit delay in the subnetwork from which the PDU was
        received; and
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 35]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-36" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    2)  the delay within the system processing the PDU
   exceeds or is estimated to exceed 500 milliseconds. In this case, the
   lifetime field should be decremented by one for each additional 500
   milliseconds of delay. The determination of delay need not be
   precise, but where error exists the value used shall be an
   overestimate, not an underestimate.
   If the Lifetime reaches a value of zero before the PDU is delivered
   to the destination, the PDU shall be discarded. The Error Reporting
   function shall be invoked, as described in <a href="#section-6.10">Section 6.10</a>, Error
   Reporting Function, and may result in the generation of an ER PDU. It
   is a local matter whether the destination network-entity performs the
   Lifetime Control function.
   When the Segmentation function is applied to a PDU, the Lifetime
   field is copied into all of the Derived PDUs.
  7.2.6 Flags
   7.2.6.1 Segmentation Permitted and More Segments Flags
    The Segmentation Permitted flag determines whether segmentation is
    permitted. A value of one indicates that segmentation is permitted.
    A value of zero indicates that the non-segmenting protocol subset is
    employed. Where this is the case, the segmentation part of the PDU
    header is not present, and the Segment Length field serves as the
    Total Length field.
    The More Segments flag indicates whether the data segment in this
    PDU contains (as its last octet) the last octet of the User Data in
    the NSDU. When the More Segments flag is set to one (1) then
    segmentation has taken place and the last octet of the NSDU is not
    contained in this PDU. The More Segments flag cannot be set to one
    (1) if the Segmentation Permitted flag is not set to one (1).
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 36]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-37" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    When the More Segments flag is set to zero (0) the last octet of the
    Data Part of the PDU is the last octet of the NSDU.
   7.2.6.2 Error Report Flag
    When the Error Report flag is set to one, the rules in <a href="#section-6.10">Section 6.10</a>
    are used to determine whether to generate an Error Report PDU upon
    discard of the PDU.
    When the Error Report flag is set to zero, discard of the PDU will
    not cause the generation of an Error Report PDU.
  7.2.7 Type Code
   The Type code field identifies the type of the protocol data unit.
   Allowed values are given in Table 7-1:
                                Bits    5 4 3 2 1
                    +-----------------------------+
                    |  DT PDU  |        1 1 1 0 0 |
                    |-----------------------------|
                    |  ER PDU  |        0 0 0 0 1 |
                    +-----------------------------+
                      Table 7-1.  Valid PDU Types
  7.2.8 PDU Segment Length
   The Segment Length field specifies the entire length of the PDU
   segment including both header and data, if present. When the full
   protocol is employed and a PDU is not segmented, then the value of
   this field is identical to the value of the Total Length field
   located in the Segmentation Part of the header.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 37]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-38" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   When the Non-segmenting protocol subset is employed, no segmentation
   part is present in the header. In this subset, the Segment Length
   field serves as the Total Length field of the header (see <a href="#section-7.4.3">Section</a>
   <a href="#section-7.4.3">7.4.3</a>).
  7.2.9 PDU Checksum
   The checksum is computed on the entire PDU header. This includes the
   segmentation and options parts, if present. A checksum value of zero
   is reserved to indicate that the checksum is to be ignored. The
   operation of the PDU Header Error Detection function ensures that the
   value zero does not represent a valid checksum. A non-zero value
   indicates that the checksum must be processed or the PDU must be
   discarded.
 7.3 Address Part
  7.3.1 General
   Address parameters are distinguished by their location, immediately
   following the fixed part of the PDU header. The address part is
   illustrated below:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 38]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-39" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                                                      Octet
          +--------------------------------------+
          |                                      |
          | Destination Address Length Indicator |      10
          |                                      |
          |--------------------------------------|
          |                                      |      11
          |         Destination Address          |
          |                                      |      m-1
          |--------------------------------------|
          |                                      |
          |   Source Address Length Indicator    |       m
          |                                      |
          |--------------------------------------|
          |                                      |      m+1
          |           Source Address             |
          |                                      |      n-1
          +--------------------------------------+
                 Figure 7-3.  PDU header--Address Part
   7.3.1.1 Destination and Source Address Information
    The Destination and Source addresses are Network Service Access
    Point addresses as defined in ISO 8348/DAD2, Addendum to the Network
    Service Definition Covering Network Layer Addressing.
    The Destination and Source Address information is of variable
    length.
    The Destination Address Length Indicator field specifies the length
    of the Destination Address in number of octets. The Destination
    Address field follows the Destination Address Length Indicator
    field. The Source Address Length Indicator field specifies the
    length of the Source Address in number of octets. The Source Address
    Length Indicator field follows the Destination Address field. The
    Source Address field follows the Source Address Length Indicator
    field.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 39]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-40" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    Each address parameter is encoded as follows:
                      Bits   8   7   6   5   4   3   2   1
            +---------------------------------------------+
            | Octet  | Address parameter Length Indicator |
            |   n    |           (e.g., 'm')              |
            |---------------------------------------------|
            | Octets |                                    |
            |  n+1   |     Address Parameter Value        |
            | thru   |                                    |
            |  n+m   |                                    |
            +---------------------------------------------+
                     Table 7-2.  Address Parameters
 7.4 Segmentation Part
  If the Segmentation Permitted Flag in the Fixed Part of the PDU Header
  (Octet 4, Bit 8) is set to one, the segmentation part of the header,
  illustrated below, must be present:
                                               Octet
                +------------------------+
                |  Data Unit Identifier  |     n,n+1
                |------------------------|
                |     Segment Offset     |    n+2,n+3
                |------------------------|
                |      Total Length      |    n+4,n+5
                +------------------------+
               Figure 7-4.  PDU Header--Segmentation Part
  Where the "Segmentation Permitted" flag is set to zero, the
  nonsegmenting protocol subset is in use.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 40]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-41" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  7.4.1 Data Unit Identifier
   The Data Unit Identifier identifies an Initial PDU (and hence, its
   Derived PDUs) so that a segmented data unit may be correctly
   reassembled by the destination network-entity. The Data Unit
   Identifier size is two octets.
  7.4.2 Segment Offset
   For each segment the Segment Offset field specifies the relative
   position of the segment in the data part of the Initial PDU with
   respect to the start of the data field. The offset is measured in
   units of octets. The offset of the first segment is zero.
  7.4.3 PDU Total Length
   The Total Length field specifies the entire length of the Initial
   PDU, including both the header and data. This field is not changed in
   any segment (Derived PDU) for the lifetime of the PDU.
 7.5 Options Part
  7.5.1 General
   The options part is used to convey optional parameters. If the
   options part is present, it contains one or more parameters. The
   number of parameters that may be contained in the options part is
   indicated by the length of the options part which is:
    PDU Header Length - (length of fixed part +
                         length of address part +
                         length of segmentation part).
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 41]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-42" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   The options part of the PDU header is illustrated below:
                                               Octet
                   +--------------------+
                   |                    |       n+6
                   |      Options       |
                   |                    |       p
                   +--------------------+
                 Figure 7-5.  PDU Header--Options Part
   Each parameter contained within the options part of the PDU header is
   encoded as follows:
                          BITS    8  7  6  5  4  3  2  1
             +------------------------------------------+
             |  Octets  |                               |
             |    n     |  Parameter Code               |
             |------------------------------------------|
             |   n+1    |  Parameter Length (e.g., 'm') |
             |------------------------------------------|
             |   n+2    |  Parameter Value              |
             |  n+m+1   |                               |
             +------------------------------------------+
                   Table 7-3.  Encoding of Parameters
   The parameter code field is coded in binary and, without extensions,
   provides a maximum number of 255 different parameters. However, as
   noted below, bits 8 and 7 cannot take every possible value, so the
   practical maximum number of different parameters is less. A parameter
   code of 255 (binary 1111 1111) is reserved for possible extensions of
   the parameter code.
   The parameter length field indicates the length, in octets, of the
   parameter value field. The length is indicated by a binary number,
   'm', with a theoretical maximum value of 255. The practical maximum
   value of 'm' is lower. For example, in the case of a single parameter
   contained within the options part, two octets are required for the
   parameter code and the parameter length indication itself. Thus, the
   value of 'm' is limited to:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 42]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-43" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
     253 - (length of fixed part +
     length of address part +
     length of segmentation part).
   For each succeeding parameter the maximum value of 'm' decreases.
   The parameter value field contains the value of the parameter
   identified in the parameter code field.
   No parameter codes use bits 8 and 7 with the value 00.
   Implementations shall accept the parameters defined in the options
   part in any order. Duplication of options (where detected) is not
   permitted. Receipt of a PDU with an option duplicated should be
   treated as a protocol error. The rules governing the treatment of
   protocol errors are described in <a href="#section-6.10">Section 6.10</a>, Error Reporting
   Function.
   The following parameters are permitted in the options part.
  7.5.2 Padding
   The padding parameter is used to lengthen the PDU header to a
   convenient size (See <a href="#section-6.12">Section 6.12</a>).
    Parameter Code:       1100 1100
    Parameter Length:     variable
    Parameter Value:      any value is allowed
  7.5.3 Security
   This parameter is user defined.
    Parameter Code:       1100 0101
    Parameter Length:     variable
    Parameter Value:
     High order bit of first octet is Security Domain bit, S, to be
     interpreted as follows:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 43]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-44" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
      S=0
       +---------------------------
       | S | User Defined        ----
       +------------------------
      S=1
       +---------------------------
       | S | CODE | ORGANIZATION ----
       +------------------------
      where
       CODE = This field contains a geographic or non-geographic code to
              which the option applies.
       ORGANIZATION = This is a further subdivision of the CODE field
                      and is determined by an administrator of the
                      geographic or non-geographic domain identified by
                      the value of CODE.
  7.5.4 Source Routing
   The source routing parameter specifies, either completely or
   partially, the route to be taken from Source Network Address to
   Destination Network Address.
    Parameter Code:      1100 1000
    Parameter Length:    variable
    Parameter Value:     2 octet control information
                         succeeded by a concatenation
                         of ordered address fields
                         (ordered from source to destination)
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 44]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-45" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   The first octet of the parameter value is the type code. This has the
   following significance.
    0000 0001     complete source routing
    0000 0000     partial source routing
    <all other values reserved>
   The second octet indicates the octet offset of the next address to be
   processed in the list. A value of three (3) indicates that the next
   address begins immediately after this control octet. Successive
   octets are indicated by correspondingly larger values of this
   indicator.
   The third octet begins the intermediate-system address list. The
   address list consists of variable length address fields. The first
   octet of each address field identifies the length of the address
   which comprises the remainder of the address field.
  7.5.5 Recording of Route
   The recording of route parameter identifies the route of intermediate
   systems traversed by the PDU.
    Parameter Code:       1100 1011
    Parameter Length:     variable
    Parameter Value:      two octets control information
                          succeeded  by a concatenation of
                          ordered addresses
   The first octet is used to indicate that the recording of route has
   been terminated owing to lack of space in the option. It has the
   following significance:
    0000 0000     Recording of Route still in progress
    1111 1111     Recording of Route terminated
    <all other values reserved>
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 45]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-46" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   The second octet identifies the next octet which may be used to
   record an address. It is encoded relative to the start of the
   parameter, such that a value of three (3) indicates that the octet
   after this one is the next to be used.
   The third octet begins the address list. The address list consists of
   variable length address fields. The first octet of each address field
   identifies the length of the address which comprises the remainder of
   the field. Address fields are always added to the beginning of the
   address list; i.e., the most recently added field will begin in the
   third octet of the parameter value.
  7.5.6 Quality of Service Maintenance
   The Quality of Service parameter conveys information about the
   quality of service requested by the originating Network Service user.
   At intermediate systems, Network Layer relay entities may (but are
   not required to) make use of this information as an aid in selecting
   a route when more than one route satisfying other routing criteria is
   available and the available routes are known to differ with respect
   to Quality of Service (see <a href="#section-6.16">Section 6.16</a>).
    Parameter Code:       1100 0011
    Parameter Length:     one octet
    Parameter Value:      Bit 8:  transit delay vs. cost
                          Bit 7:  residual error probability vs.
                                  transit delay
                          Bit 6:  residual error probability vs.
                                  cost
                          Bits 5 thru 0 are not specified.
   Bit 8 is set to one indicates that where possible, routing decision
   should favor low transit delay over low cost. A value of 0 indicates
   that routing decisions should favor low cost over low transit delay.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 46]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-47" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   Bit 7 set to one indicates that where possible, routing decisions
   should favor low residual error probability over low transit delay. A
   value of zero indicates that routing decisions should favor low
   transit delay over low residual error probability.
   Bit 6 is set to one indicates that where possible, routing decisions
   should favor low residual error probability over low cost. A value of
   0 indicates that routing decisions should favor low cost over low
   residual error probability.
 7.6 Priority
  The priority parameter carries the relative priority of the protocol
  data unit. Intermediate systems that support this option should make
  use of this information in routing and in ordering PDUs for
  transmission.
   Parameter Code:       1100 1100
   Parameter Length:     one octet
   Parameter Value:      0000 0000 - Normal (Default)
                         thru
                         0000 1111 - Highest
  The values 0000 0001 through 0000 1111 are to be used for higher
  priority protocol data units. If an intermediate system does not
  support this option then all PDUs shall be treated as if the field had
  the value 0000 0000.
 7.7 Data Part
  The Data part of the PDU is structured as an ordered multiple of
  octets, which is identical to the same ordered multiple of octets
  specified for the NS_Userdata parameter of the N_UNITDATA Request and
  Indication primitives. The data field is illustrated below:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 47]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-48" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                                             Octet
                  +------------------+
                  |                  |      p+1
                  |       Data       |
                  |                  |       z
                  +------------------+
                  Figure 7-6.  PDU header--Data Field
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 48]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-49" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 7.8 Data (DT) PDU
  7.8.1 Structure
   The DT PDU has the following format:
                                                  Octet
     +--------------------------------------+
     |  Network Layer Protocol Identifier   |      1
     |--------------------------------------|
     |           Length Indicator           |      2
     |--------------------------------------|
     |   Version/Protocol Id Extension      |      3
     |--------------------------------------|
     |              Lifetime                |      4
     |--------------------------------------|
     |SP|MS|E/R|      Type                  |      5
     |--------------------------------------|
     |           Segment Length             |     6,7
     |--------------------------------------|
     |              Checksum                |     8,9
     |--------------------------------------|
     | Destination Address Length Indicator |     10
     |--------------------------------------|
     |         Destination Address          |     11 through m-1
     |--------------------------------------|
     |    Source Address Length Indicator   |      m
     |--------------------------------------|
     |            Source Address            |     m+1 through n-1
     |--------------------------------------|
     |         Data Unit Identifier         |     n,n+1
     |--------------------------------------|
     |            Segment Offset            |     n+2,n+3
     |--------------------------------------|
     |             Total Length             |     n+4,n+5
     |--------------------------------------|
     |                Options               |     n+6 through p
     |--------------------------------------|
     |                 Data                 |     p+1 through z
     +--------------------------------------+
                     Figure 7-7.  PDU Header Format
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 49]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-50" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   7.8.1.1 Fixed Part
    1) Network Layer Protocol Identifier   See <a href="#section-7.2.2">Section 7.2.2</a>.
    2) Length Indicator                    See <a href="#section-7.2.3">Section 7.2.3</a>.
    3) Version/Protocol Id Extension       See <a href="#section-7.2.4">Section 7.2.4</a>.
    4) Lifetime                            See <a href="#section-7.2.5">Section 7.2.5</a>.
    5) SP, MS, E/R                         See <a href="#section-7.2.6">Section 7.2.6</a>.
    6) Type Code                           See <a href="#section-7.2.7">Section 7.2.7</a>.
    7) Segment Length                      See <a href="#section-7.2.8">Section 7.2.8</a>.
    8) Checksum                            See <a href="#section-7.2.9">Section 7.2.9</a>.
   7.8.1.2 Addresses
    See <a href="#section-7.3">Section 7.3</a>.
   7.8.1.3 Segmentation
    See <a href="#section-7.4">Section 7.4</a>.
   7.8.1.4 Options
    See <a href="#section-7.5">Section 7.5</a>.
   7.8.1.5 Data
    See <a href="#section-7.7">Section 7.7</a>.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 50]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-51" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 7.9 Inactive Network Layer Protocol
                                              Octet
            +-----------------------------+
            |  Network Layer Protocol Id  |     1
            |-----------------------------|
            |           Data              |     2 through n
            +-----------------------------+
              Figure 7-9.  Inactive Network Layer Protocol
  7.9.1 Network Layer Protocol Id
   The value of the Network Layer Protocol Identifier field is binary
   zero (0000 0000).
  7.9.2 Data Field
   See <a href="#section-7.7">Section 7.7</a>.
   The length of the NS_Userdata parameter is constrained to be less
   than or equal to the value of the length of the SN_Userdata parameter
   minus one.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 51]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-52" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 7.10 Error Report PDU (ER)
  7.10.1 Structure
                                                  Octet
     +--------------------------------------+
     |   Network Layer Protocol Identifier  |       1
     |--------------------------------------|
     |           Length Indicator           |       2
     |--------------------------------------|
     |     Version/Protocol Id Extension    |       3
     |--------------------------------------|
     |               Lifetime               |       4
     |--------------------------------------|
     |SP|MS|E/R|       Type                 |       5
     |--------------------------------------|
     |             Segment Length           |      6,7
     |--------------------------------------|
     |                Checksum              |      8,9
     |--------------------------------------|
     | Destination Address Length Indicator |      10
     |--------------------------------------|
     |         Destination Address          |     10 through m-1
     |--------------------------------------|
     |     Source Address Length Indicator  |       m
     |--------------------------------------|
     |             Source Address           |     m+1 through n-1
     |--------------------------------------|
     |          Data Unit Identifier        |     n,n+1
     |--------------------------------------|
     |             Segment Offset           |     n+2,n+3
     |--------------------------------------|
     |              Total Length            |     n+4,n+5
     |--------------------------------------|
     |                Options               |     n+6 through p-1
     |--------------------------------------|
     |           Reason for Discard         |     p through q-1
     |--------------------------------------|
     |       Error Report Data Field        |       z
     +--------------------------------------+
                     Figure 7-10.  Error Report PDU
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 52]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-53" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   7.10.1.1 Fixed Part
    The fixed part of the Error Report Protocol Data Unit is set as
    though this is a new (Initial) PDU. Thus, references are provided to
    precious sections describing the composition of the fields
    comprising the fixed part:
    1) Network Layer Protocol Identifier   See <a href="#section-7.2.2">Section 7.2.2</a>.
    2) Length Indicator                    See <a href="#section-7.2.3">Section 7.2.3</a>.
    3) Version/Protocol Id Extension       See <a href="#section-7.2.4">Section 7.2.4</a>.
    4) Lifetime                            See <a href="#section-7.2.5">Section 7.2.5</a>.
    5) SP, MS, E/R                         See <a href="#section-7.2.6">Section 7.2.6</a>.
    6) Type Code                           See <a href="#section-7.2.7">Section 7.2.7</a>.
    7) Segment Length                      See <a href="#section-7.2.8">Section 7.2.8</a>.
    8) Checksum                            See <a href="#section-7.2.9">Section 7.2.9</a>.
   7.10.1.2 Addresses
    See <a href="#section-7.3">Section 7.3</a>.
    The Destination Address specifies the original source of the
    discarded PDU. The Source Address specifies the intermediate system
    or end system network-entity initiating the Error Report PDU.
   7.10.1.3 Segmentation
    See <a href="#section-7.4">Section 7.4</a>.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 53]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-54" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   7.10.1.4 Options
    See <a href="#section-7.5">Section 7.5</a>.
   7.10.1.5 Reason for Discard
    This parameter is only valid for the Error Report PDU. It provides a
    report on the discarded protocol data unit.
    Parameter Code:
     1100 0001
    Parameter Length:
     two octets
     type of error encoded in binary:
      0000 0000:  Reason not specified.
      0000 0001:  Protocol Procedure Error.
                  other than below:
      0000 0010:  Incorrect checksum.
      0000 0011:  PDU discarded due to congestion.
      0000 0100:  Header syntax error (header cannot
                  be parsed).
      0000 0101:  Segmentation is needed but is not
                  permitted.
      1000 xxxx:  Addressing Error:
                  0000 0000:  Destination Address
                              Unreachable.
                  1000 0001:  Destination Address
                              Unknown.
      1001 xxxx:  Source Routing Error:
                  1001 0000:  Unspecified Source
                              Routing error.
                  1001 0001:  Syntax error in Source
                              Routing field.
                  1001 0010:  Unknown Address in
                              Source Routing field.
                  1001 0011:  Path not acceptable.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 54]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-55" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
      1010 xxxx:  Lifetime Expiration:
                  1010 0000:  Lifetime expired while
                              data unit in transit.
                  1010 0001:  Lifetime expired
                              during reassembly.
      1011 xxxx:  PDU discarded due to unsupported
                  option:
                  1011 0000:  unsupported option not
                              specified.
                  1011 0001:  unsupported padding
                              option.
                  1011 0010:  unsupported security
                              option.
                  1011 0011:  unsupported source
                              routing option.
                  1011 0100:  unsupported recording
                              of route option.
                  1011 0101:  unsupported QoS
                              Maintenance option.
     The second octet contains a pointer to the field in the associated
     discarded PDU which caused the error. If no one particular field
     can be associated with the error, then this field contains the
     value of zero.
   7.10.1.6 Error Report Data Field
    This field provides all or a portion of the discarded PDU. The
    octets comprising this field contain the rejected or discarded PDU
    up to and including the octet which caused the rejection/discard.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 55]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-56" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-8" href="#section-8">8</a>  FORMAL DESCRIPTION</span>
 The operation of the protocol is modelled as a finite state automaton
 governed by a state variable with three values. The behavior of the
 automaton is defined with respect to individual independent Protocol
 Data Units. A transition of the automaton is prompted by the occurrence
 of an atomic event at one of three interfaces:
  1) an interface to the Transport Layer, defined by the service
      primitives of the Addendum to the Network Service Definition
      Covering Connectionless-mode Transmission;
  2) an interface to the subnetwork service provider, defined by the
      SN_UNITDATA primitive of <a href="#section-5.5">Section 5.5</a> of this Standard;
  3) an interface to an implementation-dependent timer function defined
      by the TIMER primitives described in <a href="#section-5.6">Section 5.6</a> of this Standard.
 In addition, a transition of the automaton may be prompted by the
 occurrence of a condition of the automaton.
 The atomic events are defined in <a href="#section-8.2">Section 8.2</a>. The occurrence of an
 atomic event is not in itself sufficient to cause a transition to take
 place; other conditions, called "enabling conditions" may also have to
 be met before a particular transition can take place. Enabling
 conditions are boolean expressions that depend on the values of
 parameters associated with the corresponding atomic event (that is, the
 parameters of some primitive), and on the values of locally maintained
 variables.
 More than one enabling condition -- and therefore, more than one
 possible transition -- may be associated with a single atomic event. In
 every such case, the enabling conditions are mutually exclusive, so
 that for any given combination of atomic event and parameter values,
 only one state transition can take place.
 Associated with each transition is an action, or "output." Actions
 consist of changes to the values of local variables and the sequential
 performance of zero or more functions. The operation of the finite
 state automaton is completely specified in <a href="#section-8.3">Section 8.3</a> by defining the
 action associated with every possible transition.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 56]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-57" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
 8.1  Values of the State Variable
  The protocol state variable has three values:
  1)  INITIAL       The automaton is created in the INITIAL state.  No
                    transition may carry the automaton into the INITIAL
                    state.
  2)  REASSEMBLING  The automaton is in the REASSEMBLING state for the
                    period in which it is assembling PDU segments into a
                    complete PDU.
  3)  CLOSED        The final state of the automaton is the  CLOSED
                    state.  When the automaton enters the CLOSED state
                    it ceases to exist.
 8.2  Atomic Events
  An atomic event is the transfer of a unit of information across an
  interface.  The description of an atomic event specifies a primitive
  (such as an N_UNITDATA.Request), and the service boundary at which it
  is invoked (such as the Network Service boundary). The direction of
  information flow across the boundary is implied by the definition of
  each of the primitives.
  8.2.1  N.UNITDATA_request and N.UNITDATA_indication
   The N.UNITDATA_request and N.UNITDATA_indication atomic events occur
   at the Network Service boundary. They are defined by the Addendum to
   the Network Service Definition Covering Connectionless Data
   Transmission (ISO 8348/DAD1).
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 57]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-58" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   N.UNITDATA_request    (NS Source_Address,
                          NS_Destination_Address,
                          NS_Quality_of_Service,
                          NS_Userdata)
   N.UNITDATA_indication (NS_Source_Address,
                          NS_Destination_Address,
                          NS_Quality_of_Service, NS_Userdata)
   The     parameters     of     the     N.UNITDATA_request      and
   N.UNITDATA_indication  are  collectively  referred  to as Network
   Service Data Unit (NSDUs).
  8.2.2  SN.UNITDATA_request and SN.UNITDATA_indication
   The SN.UNITDATA_request and SN.UNITDATA_indication atomic events
   occur at the interface between the Protocol described herein and a
   subnetwork service provider. They are defined in <a href="#section-5.5">Section 5.5</a> of this
   Standard.
   SN.UNITDATA_request    (SN_Source_Address,
                           SN_Destination_Address,
                           SN_Quality_of_Service,
                           SN_Userdata)
   SN.UNITDATA_indication (SN_Source_Address,
                           SN_Destination_Address,
                           SN_Quality_of_Service,
                           SN_Userdata)
   The parameters of the SN_UNITDATA request and SN_UNITDATA Indication
   are collectively referred to as Subnetwork Service Data Units
   (SNSDUs).
   The value of the SN_Userdata parameter may represent an Initial PDU
   or a Derived PDU.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 58]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-59" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  8.2.3  TIMER Atomic Events
   The TIMER atomic events occur at the interface between the Protocol
   described herein and its local environment. They are defined in
   <a href="#section-5.6">Section 5.6</a> of this Standard.
    S.TIMER_request  (Time,
                      Name,
                      Subscript)
    S.TIMER_cancel   (Name
                      Subscript)
    S.TIMER_response (Name,
                      Subscript)
 8.3  Operation of the Finite State Automation
  The operation of the automaton is defined by use of the formal
  description technique and notation specified in ISO/TC97/SC16 N1347.
  This technique is based on an extended finite state transition model
  and the Pascal programming language. The technique makes use of strong
  variable typing to reduce ambiguity in interpretation of the
  specification.
  This specification formally specifies an abstract machine which
  provides a single instance of the Connectionless-Mode Network Service
  by use of the Protocol For Providing the Connectionless-Mode Network
  Service. It should be emphasized that this formal specification does
  not in any way constrain the internal operation or design of any
  actual implementation. For example, it is not required that the
  program segments contained in the state transitions will actually
  appear as part of an actual implementation. A formal protocol
  specification is useful in that it goes as far as possible to
  eliminate any degree of ambiguity or vagueness in the specification of
  a protocol standard.
  The formal specification contained here specifies the behavior of a
  single finite-state machine, which provides the protocol
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 59]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-60" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  behavior corresponding to a single independent service request. It is
  expected that any actual implementation will be able to handle
  behavior corresponding to many simultaneous finite state machines.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 60]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-61" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  8.3.1  Type and Constant Definitions
   const
    ZERO  = 0;
    max_user_data = 64512;
   type
    NSAP_addr_type  = ...;
     { NSAP_addr_type defines the data type for NSAP addresses, as
     passed across the Network Service Boundary. }
    NPAI_addr_type  = ...;
     { NPAI_addr_type defines the data type for the addresses carried in
     PDUs. }
    SN_addr_type    = ...;
     { SN_addr_type defines the data type for addresses in the
     underlying service used by this protocol. }
    quality_of_service_type = ...;
     { Quality_of_service_type defines the data type for the QOS
     parameter passed across the Network Service boundary. }
    SN_QOS_type     = ...;
     { SN_QOS_type defines the data type for the QOS parameter, if any,
     passed to the underlying service used by this protocol. }
    data_type       = ...;
     { Data_type defines the data type for user data. Conceptually this
     is equivalent to a variable length binary string. }
    buffer_type     = ...;
     { Buffer_type defines the data type for the memory resources used
     in sending and receiving of user data.  This provides capabilities
     required for segmentation and reassembly. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 61]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-62" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    timer_name_type = (lifetime_timer);
    timer_data_type = ...;
    network_layer_protocol_id_type = (ISO_8473_protocol_id);
    version_id_type  = (version1);
    pdu_tp_type      = (DT, ER);
    options_type    = ...;
     { Options_type defines the data type used to store the options part
     of the PDU header. }
    subnet_id_type  = ...;
     { The subnet_id_type defines the data type used to locally identify
     a particular underlying service used by this protocol.  In general
     there may be multiple underlying subnetwork (or data link)
     services. }
    error_type      = (NO_ERROR,
                       TOO_MUCH_USER_DATA,
                       PROTOCOL_PROCEDURE_ERROR,
                       INCORRECT_CHECKSUM, CONGESTION,
                       SYNTAX_ERROR,
                       SEG_NEEDED_AND_NOT_PERMITTED,
                       DESTINATION_UNREACHABLE,
                       DESTINATION_UNKNOWN,
                       UNSPECIFIED_SRC_ROUTING_ERROR,
                       SYNTAX_ERROR_IN_SRC_ROUTING,
                       UNKNOWN_ADDRESS_IN_SRC_ROUTING,
                       PATH_NOT_ACCEPTABLE_IN_SRC_ROUTING,
                       LIFETIME_EXPIRED_IN_TRANSIT,
                       LIFETIME_EXPIRED_IN_REASSEMBLY,
                       UNSUPPORTED_OPTION_NOT_SPECIFIED,
                       UNSUPPORTED_PADDING_OPTION,
                       UNSUPPORTED_SECURITY_OPTION,
                       UNSUPPORTED_SRC_ROUTING_OPTION,
                       UNSUPPORTED_RECORDING_OF_ROUTE_OPTION,
                       UNSUPPORTED_QOS_MAINTENANCE_OPTION);
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 62]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-63" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   nsdu_type = record
                   da   : NSAP_addr_type;
                   sa   : NSAP_addr_type;
                   qos  : quality_of_service_type;
                   data : data_type;
                end;
   pdu_type = record
                   nlp_id   : network_layer_protocol_id_type;
                   hli      : integer;
                   vp_id    : version_id_type; lifetime : integer;
                   sp       : boolean;
                   ms       : boolean;
                   er_flag  : boolean;
                   pdu_tp   : pdu_tp_type;
                   seg_len  : integer;
                   checksum : integer;
                   da_len   : integer;
                   da       : NPAI_addr_type;
                   sa_len   : integer;
                   sa       : NPAI_addr_type;
                   du_id    : optional integer;
                   so       : optional integer;
                   tot_len  : optional integer;
                      { du_id, so, and tot_len are present
                       only if sp has the value TRUE. }
                   options  : options_type;
                   data     : data_type;
                end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 63]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-64" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   route_result_type =
               record
            subnet_id    : subnet_id_type;
            sn_da        : SN_addr_type;
            sn_sa        : SN_addr_type;
            segment_size : integer;
         end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 64]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-65" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  8.3.2  Interface Definitions
   channel Network_access_point (User, Provider);
    by User:
        UNITDATA_request
           (NS_Destination_address : NSAP_addr_type;
            NS_Source_address      : NSAP_addr_type;
            NS_Quality_of_Service  : quality_of_service_type;
            NS_Userdata            : data_type);
    by Provider:
        UNITDATA_indication
           (NS_Destination_address : NSAP_addr_type;
            NS_Source_address      : NSAP_addr_type;
            NS_Quality_of_Service  : quality_of_service_type;
            NS_Userdata            : data_type);
   channel Subnetwork_access_point (User, Provider);
    by User:
        UNITDATA_request
           (SN_Destination_address : SN_addr_type;
            SN_Source_address      : SN_addr_type;
            SN_Quality_of_Service  : SN_QOS_type;
            SN_Userdata            : pdu_type);
    by Provider:
        UNITDATA_indication
           (SN_Destination_address : SN_addr_type;
            SN_Source_address      : SN_addr_type;
            SN_Quality_of_Service  : SN_QOS_type;
            SN_Userdata            : pdu_type);
   channel System_access_point (User, Provider);
    by User:
        TIMER_request
           (Time      : integer;
            Name      : timer_name_type;
            Subscript : integer);
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 65]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-66" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
        TIMER_cancel
             (Name      : timer_name_type;
              Subscript : integer);
    by Provider:
        TIMER_indication
           (Name      : timer_name_type;
            Subscript : integer);
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 66]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-67" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  8.3.3  Formal Machine Definition
   module Connectionless_Network_Protocol_Machine
        (N:  Network_access_point (Provider) common queue;
         SN: array [subnet_id_type] of Subnetwork_access_point
                                          (User) common queue;
         S:  System_access_point (User) individual queue );
   var
       nsdu    : nsdu_type;
       pdu     : pdu_type;
       rcv_buf : buffer_type;
   state : (INITIAL, REASSEMBLING, CLOSED);
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 67]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-68" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   procedure send_error_report (error : error_type;
                                pdu   : pdu_type);
    var
        er_pdu : pdu_type;
    begin
     if (pdu.er_flag) then
      begin
       er_pdu.nlp_id   := ISO_8473_protocol_id;
       er_pdu.vp_id    := version1;
       er_pdu.lifetime := get_er_lifetime(pdu.sa);
       er_pdu.sp       := get_er_seg_per(pdu);
       er_pdu.ms       := FALSE;
       er_pdu.er_flag  := FALSE;
       er_pdu.pdu_tp   := ER;
       er_pdu.da_len   := pdu.sa_len;
       er_pdu.da       := pdu.sa;
       er_pdu.sa_len   := get_local_NPAI_addr_len;
       er_pdu.sa       := get_local_NPAI_addr;
       er_pdu.options  := get_er_options
                          (error,
                          er_pdu.da,
                          pdu.options);
       er_pdu.hli      := get_header_length
                          (er_pdu.da_len, er_pdu.sa_len,
                           er_pdu.sp,
                           er_pdu.options);
       er_pdu.data     := get_er_data_field(error, pdu);
       if (er_pdu.sp) then
                        begin
                           er_pdu.du_id   :=
                           get_data_unit_id(er_pdu.da);
                           er_pdu.so      := ZERO;
                           er_pdu.tot_len := er_pdu.hli +
                           size(er_pdu.data);
                        end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 68]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-69" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
       if (NPAI_addr_local(er_pdu.da))
                        then
                           post_error_report(er_pdu)
                        else
                           send_pdu(er_pdu);
      end;
    end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 69]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-70" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   procedure send_pdu (pdu : pdu_type);
    var
     rte_result   : route_result_type;
     error_code   : error_type;
     send_buf     : buffer_type;
     data_maxsize : integer;
     more_seg     : boolean;
     sn_qos       : SN_QOS_type;
    begin
     send_buf := make_buffer(pdu.data);
     more_seg := pdu.ms;
     repeat
      begin
       error_code := check_parameters
                     (pdu.hli,
                      pdu.sp,
                      pdu.da,
                      pdu.options,
                      size(pdu.data));
       if (error_code = NO_ERROR) then
                        begin
                           rte_result := route(pdu.hli,
                                               pdu.sp,
                                               pdu.da,
                                               pdu.options,
                                               size(pdu.data));
                           data_maxsize := rte_result.segment_size -
                           pdu.hli;
                           pdu.data     := extract(send_buf,
                           data_maxsize);
                           pdu.seg_len  := pdu.hli + size(pdu.data);
                           if (size(send_buf) = ZERO) then
                               pdu.ms   := more_seg
                           else
                               pdu.ms   := TRUE;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 70]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-71" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                           pdu.checksum := get_checksum(pdu);
                           sn_qos       := get_sn_qos
                           (rte_result.subnet_id,
                                                       pdu.options);
                           out SN[rte_result.subnet_id].UNITDATA_request
                                      (rte_result.sn_da,
                                       rte_result.sn_sa,
                                       sn_qos,
                                       pdu);
                           pdu.so := pdu.so + data_maxsize;
                        end
       else if (error_code = CONGESTION) then
                        begin
                           if (send_er_on_congestion (pdu)) then
                               send_error_report(CONGESTION, pdu);
                        end
       else
                        send_error_report(error_code, pdu);
      end;
     until (size_buf(data_buf) = ZERO) or
           (error_code <> NO_ERROR);
    end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 71]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-72" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   procedure allocate_reassembly_resources
            (pdu_tot_len : integer);
   primitive;
    { This procedure allocates resources required for reassembly of a
    PDU of the specified total length.  If this requires discarding of a
    PDU in which the ER flag is set, then an error report is returned to
    the source of the discarded data unit. }
   function check_parameters
        (hli     : integer;
         sp      : boolean;
         da      : NPAI_addr_type;
         options : options_type;
         datalen : integer) : error_type;
   primitive;
    { This function examines various parameters associated with a PDU,
    to determine whether forwarding of the PDU can continue.  If a
    result of NO_ERROR is returned, then the primitive route can be
    called to specify the route and segment size.  Otherwise this
    function specifies the reason that an error has occurred. }
   function data_unit_complete
        (buf : buffer_type) : boolean;
   primitive;
    { This function returns a boolean value specifying whether the PDU
    stored in the specified buffer has been completely received. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 72]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-73" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function elapsed_time : integer;
   primitive;
    { This function returns an estimate of the time elapsed, in 500
    microsecond increments, since the PDU was transmitted by the
    previous peer network entity.  This estimate includes both time
    spent in transit, and any time to be spent in buffers within the
    local system.  Although this estimate need not be precise,
    overestimates are preferable to underestimates, as underestimating
    the time elapsed may defeat the intent of the lifetime function. }
   procedure empty_buffer
        (buf : buffer_type);
   primitive;
    { This procedure empties the specified buffer. }
   function extract
        (buf    : buffer_type;
         amount : integer) : data_type;
   primitive;
    { This function removes the specified amount of data from
    the specified buffer, and returns this data as the function
    value. }
   procedure free_reassembly_resources;
   primitive;
    { This procedure releases the resources that had been previously
    allocated by the procedure allocate_reassembly_resources. }
   function get_checksum
        (pdu : pdu_type) : integer;
   primitive;
    { This function returns the 16 bit integer value to be placed in the
    checksum field of the PDU.  If the checksum facility is not being
    used, then this function returns the value zero.  The algorithm for
    producing a correct checksum value is specified in Annex A. }
   function get_data_unit_id
        (da : NPAI_addr_type) : integer;
   primitive;
    { This function returns a data unit identifier which is unique for
    the specified destination address. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 73]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-74" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function get_er_data_field
        (error : error_type;
         pdu   : pdu_type) : data_type;
   primitive;
    { This function returns the correct data field for an error report,
    based on the information that the specified PDU is being discarded
    due to the specified error.  The data field of an error report must
    include the header of the discarded PDU, and may optionally contain
    additional user data. }
   function get_er_flag
        (nsdu : nsdu_type) : boolean;
   primitive;
    { This function returns a boolean value to be used as the error
    report flag in a PDU which transmits the specified nsdu.  If the PDU
    must be discarded at some future time, an error report can be
    returned only if this value is set to TRUE. }
   function get_er_lifetime
        (da : NPAI_addr_type) : integer;
   primitive;
    { This function returns the lifetime value to be used for an error
    report being sent to the specified destination address. }
   function get_er_options
        (error   : error_type;
         da      : NPAI_addr_type;
         options : options_type) : options_type;
   primitive;
    { This function returns the options field of an error report, based
    on the reason for discard, and the destination address and options
    field of the discarded PDU.  The options field contains the reason
    for discard option, and may contain other optional fields. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 74]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-75" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function get_er_seg_per
        (pdu     : pdu_type) : boolean;
   primitive;
    { This function returns the boolean value which will be used for the
    segmentation permitted flag of an error report. }
   function get_header_len
        (da_len  : integer;
         sa_len  : integer;
         sp      : boolean;
         options : options_type) : integer;
   primitive;
    { This function returns the header length, in octets.  This depends
    upon the lengths of the source and destination addresses, whether
    the segmentation part of the header is present, and the length of
    the options part. }
   function get_lifetime
        (da  : NSAP_addr_type;
         qos : quality_of_service_type) : lifetime_type;
   primitive;
    { This function returns the lifetime value to be used for a PDU,
    based upon the destination address and requested quality of service.
    }
   function get_local_NPAI_addr : NPAI_addr_type;
   primitive;
    { This functions returns the local address as used in the protocol
    header. }
   function get_local_NPAI_addr_len : integer;
   primitive;
    { This functions returns the length of the local address as used in
    the protocol header. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 75]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-76" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function get_NPAI
        (addr : NSAP_addr_type) : NPAI_addr_type;
   primitive;
    { This function returns the network address as used in the protocol
    header, or "Network Protocol Addressing Information", corresponding
    to the specified NSAP address. }
   function get_NPAI_len
        (addr : NSAP_addr_type) : integer;
   primitive;
    { This function returns the length of the network address
    corresponding to a specified NSAP address. }
   function get_NSAP_addr
        (addr : NPAI_addr_type;
         len  : integer) : NSAP_addr_type;
   primitive;
    { This function returns the NSAP address corresponding to the
    network protocol addressing information (as it appears in the
    protocol header) of the specified length. }
   function get_options
        (da  : NSAP_addr_type;
         qos : quality_of_service_type) : options_type;
   primitive;
    { This function returns the options field for a PDU, based on the
    requested destination address and quality of service. }
   function get_seg_permitted
        (da : NSAP_addr_type;
         qos : quality_of_service_type) : boolean;
   primitive;
    { This function returns the boolean value to be used in the
    segmentation permitted field of a PDU.  This value may depend upon
    the destination address, requested quality of service, and the
    length of the user data. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 76]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-77" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function get_sn_qos
        (subnet_id : subnet_id_type;
          options   : options_type) : SN_QOS_type;
   primitive;
    { This function returns the quality of service to be used on the
    specified subnetwork, in order to obtain the quality of service (if
    any) and other parameters requested in the options part of the PDU.
    }
   function get_qos
        (options : options_type) : quality_of_service_type;
   primitive;
    { This function determines, to the extent possible, the quality of
    service that was obtained for a particular PDU, based upon the
    quality of service and other information contained in the options
    part of the PDU header. }
   function make_buffer
        (data : data_type) : buffer_type;
   primitive;
    { This function places the specified data in a newly created buffer.
    The precise manner of handling buffers is implementation specific.
    This newly created buffer is returned as the function value. }
   procedure merge_seg
        (buf   : buffer_type;
         so    : integer;
         data  : data_type);
   primitive;
    { This procedure merges the specified data into the specified
    buffer, based on the specified segment offset of the data. }
   function NPAI_addr_local
        (addr : NPAI_addr_type) : boolean;
   primitive;
    { This function returns the boolean value TRUE only if the specified
    network protocol addressing information specifies a local address. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 77]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-78" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function NSAP_addr_local
        (addr : NSAP_addr_type) : boolean;
   primitive;
    { This function returns the boolean value TRUE only if the specified
    NSAP address specifies a local address. }
   procedure post_error_report
        (er_pdu : pdu_type);
   primitive;
    { This procedure posts the specified error report (ER) type PDU to
    the appropriate local entity that handles error reports. }
   function route
        (hli     : integer;
         sp      : boolean;
         da      : NPAI_addr_type;
         options : options_type;
         datalen : integer) : route_result_type;
   primitive;
    { This function determines the route to be followed by a PDU
    segment, as well as the segment size.  Note that in general, the
    segment size and route may be mutually dependent.  This
    determination is made on the basis of the header length, the
    segmentation permitted flag, the destination address, several
    parameters (such as source routing) contained in the options part of
    the PDU header, and the length of data.  This function returns a
    structure that specifies the subnetwork on which the segment should
    be transmitted, the source and destination addresses to be used on
    the subnetwork, and the segment size.  This routine may only be
    called if the primitive function check_parameters has already
    determined that an error will not occur. }
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 78]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-79" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   function send_er_on_congestion
       (pdu : pdu_type) : boolean;
   primitive;
    { This function returns the boolean value true if an error report
    should be sent when the indicated data unit is discarded due to
    congestion.  Note that if the value true is returned, then the
    er_flag field of the discarded data unit must still be checked
    before an error report can be sent. }
   function size
       (data : data_type) : integer;
   primitive;
    { This function returns the length, in octets, of the specified
    data. }
   function size_buf
       (buf : buffer_type) : integer;
   primitive;
    { This function returns the length, in octets, of the data contained
    in the specified buffer. }
   initialize
    begin
        state to INITIAL;
    end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 79]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-80" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   trans  (* begin transitions *)
   from INITIAL  to  CLOSED
   when      N.UNITDATA_request
   provided  not NSAP_addr_local(NS_Destination_Address)
   begin
     nsdu.da   := NS_Destination_Address;
     nsdu.sa   := NS_Source_Address;
     nsdu.qos  := NS_Quality_o  _Service;
     nsdu.data := NS_Userdata;
     pdu.nlp_id   := ISO_8473_protocol_id;
     pdu.vp_id    := version1;
     pdu.lifetime := get_lifetime(nsdu.da, nsdu.qos);
     pdu.sp       := get_seg_permitted(nsdu.da, nsdu.qos);
     pdu.ms       := FALSE;
     pdu.er_flag  := get_er_flag(nsdu);
     pdu.pdu_tp   := DT;
     pdu.da_len   := get_NPAI_len(nsdu.da);
     pdu.da       := get_NPAI(nsdu.da);
     pdu.sa_len   := get_NPAI_len(nsdu.sa);
     pdu.sa       := get_NPAI(nsdu.sa);
     pdu.options  := get_options(nsdu.da, nsdu.qos);
     pdu.data     := nsdu.data;
     pdu.hli      := get_header_len(pdu.da_len,
                                    pdu.sa_len,
                                    pdu.sp,
                                    pdu.options);
     if (pdu.sp) then
           begin
             pdu.du_id    := get_data_unit_id(pdu.da);
             pdu.so       := ZERO;
             pdu.tot_len  := pdu.hli  +  size(pdu.data);
           end;
     if (size(pdu.data) > max_user_data) then
           send_error_report(TOO_MUCH_USER_DATA, pdu)
     else
           send_pdu(pdu);
   end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 80]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-81" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   from INITIAL  to  CLOSED
   when      N.UNITDATA_request
   provided  NSAP_addr_local(NS_Destination_Address)
   begin
     nsdu.da   := NS_Destination_Address;
     nsdu.sa   := NS_Source_Address;
     nsdu.qos  := NS_Quality_of_Service;
     nsdu.data := NS_Userdata;
     out N.UNITDATA_indication
         (nsdu.da, nsdu.sa, nsdu.qos, nsdu.data);
   end;
   from INITIAL  to  CLOSED
   when      SN[subnet_id].UNITDATA_indication
   provided  NPAI_addr_local(SN_Userdata.da)  and
             SN_Userdata.so       =  ZERO     and
             not  SN_Userdata.ms
   begin
     pdu := SN_Userdata;
     if (pdu.pdu_tp = DT) then
         out N.UNITDATA_indication
            (get_NSAP_addr(pdu.da_len, pdu.da),
             get_NSAP_addr(pdu.sa_len, pdu.sa),
             get_qos(pdu.options),
             pdu.data)
     else
         post_error_report(pdu);
   end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 81]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-82" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   from INITIAL  to  REASSEMBLING
   when      SN[subnet_id].UNITDATA_indication
   provided  NPAI_addr_local(SN_Userdata.da)    and
             ((SN_Userdata.so > ZERO) or (SN_Userdata.ms))
   begin
     pdu := SN_Userdata;
     allocate_reassembly_resources(pdu.tot_len);
     empty_buffer(rcv_buf);
     merge_seg
        (rcv_buf,
         pdu.so,
         pdu.data);
     out S.TIMER_request
        (pdu.lifetime,
         lifetime_timer,
         ZERO);
   end;
   from INITIAL  to  CLOSED
   when      SN[subnet_id].UNITDATA_indication
   provided  not NPAI_addr_local(SN_Userdata.da)
   begin
     pdu := SN_Userdata;
     if (pdu.lifetime > elapsed_time) then
       begin
         pdu.lifetime := pdu.lifetime - elapsed_time;
         send_pdu(pdu);
       end
   else
       send_error_report(LIFETIME_EXPIRED, pdu);
   end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 82]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-83" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   from REASSEMBLING  to  REASSEMBLING
   when      SN[subnet_id].UNITDATA_indication
   provided  (SN_Userdata.du_id   = pdu.du_id)   and
             (SN_Userdata.da_len  = pdu.da_len)  and
             (SN_Userdata.da      = pdu.da)      and
             (SN_Userdata.sa_len  = pdu.sa_len)  and
             (SN_Userdata.sa      = pdu.sa)
   begin
     merge_seg
        (rcv_buf,
         SN_Userdata.so,
         SN_Userdata.data);
   end;
   from REASSEMBLING  to  CLOSED
   provided  data_unit_complete(rcv_buf)
   no delay
   begin
     if (pdu.pdu_tp = DT) then
         out N.UNITDATA_indication
            (get_NSAP_addr(pdu.da_len, pdu.da),
             get_NSAP_addr(pdu.sa_len, pdu.sa),
             get_qos(pdu.options),
             extract (rcv_buf, size_buf(rcv_buf)))
    else
        post_error_report(pdu);
    out S.TIMER_cancel(lifetime_timer,ZERO);
    free_reassembly_resources;
   end;
   from REASSEMBLING  to  CLOSED
   when      S.TIMER_indication
   begin
     send_error_report(LIFETIME_EXPIRED, pdu);
   end;
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 83]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-84" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
<span class="h2"><a class="selflink" id="section-9" href="#section-9">9</a>  CONFORMANCE</span>
 For conformance to this International Standard, the ability to
 originate, manipulate, and receive PDUs in accordance with the full
 protocol (as opposed to the "non-segmenting" or "Inactive Network Layer
 Protocol" subsets) is required.
 Additionally, the provision of the optional functions described in
 <a href="#section-6.17">Section 6.17</a> and enumerated in Table 9-1 must meet the requirements
 described therein.
 Additionally, conformance to the Standard requires adherence to the
 formal description of <a href="#section-8">Section 8</a> and to the structure and encoding of
 PDUs of <a href="#section-7">Section 7</a>.
 If and only if the above requirements are met is there conformance to
 this International Standard.
 9.1  Provision of Functions for Conformance
  The following table categorizes the functions in <a href="#section-6">Section 6</a> with
  respect to the type of system providing the function:
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 84]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-85" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  +---------------------------------------------------------+
  | Function                   |  Send  | Forward | Receive |
  |---------------------------------------------------------|
  | PDU Composition            |   M    |    -    |    -    |
  | PDU Decomposition          |   M    |    -    |    M    |
  | Header Format Analysis     |   -    |    M    |    M    |
  | PDU Lifetime Control       |   -    |    M    |    I    |
  | Route PDU                  |   -    |    M    |    -    |
  | Forward PDU                |   M    |    M    |    -    |
  | Segment PDU                |   M    | (note 1)|    -    |
  | Reassemble PDU             |   -    |    I    |    M    |
  | Discard PDU                |   -    |    M    |    M    |
  | Error Reporting            |   -    |    M    |    M    |
  | PDU Header Error Detection |   M    |    M    |    M    |
  | Padding                    |(note 2)| (note 2)| (note 2)|
  | Security                   |   -    | (note 3)| (note 3)|
  | Complete Source Routing    |   -    | (note 3)|    -    |
  | Partial Source Routing     |   -    | (note 4)|    -    |
  | Record Route               |   -    | (note 4)|    -    |
  | QoS Maintenance            |   -    | (note 4)|    -    |
  +---------------------------------------------------------+
                Table 9-1.  Categorization of Functions
  +---------------------------------------------------------+
  | KEY:                                                    |
  |       M : Mandatory Function; must be implemented       |
  |       - : Not applicable                                |
  |       I : Implementation option, as described in text   |
  +---------------------------------------------------------+
  Notes:
   1)  The Segment PDU function is in general mandatory for an
       intermediate system. However, a system which is to be connected
       only to subnetworks all offering the same maximum SNSDU size
       (such as identical Local Area Networks) will not need to perform
       this function and therefore does not need to implement it.
       If this function is not implemented, this shall be stated as part
       of the specification of the implementation.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 85]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-86" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   2)  The correct treatment of the padding function requires no
       processing. A conforming implementation shall support the
       function, to the extent of ignoring this parameter wherever it
       may appear.
   3)  This function may or may not be supported. If an implementation
       does not support this function, and the function is selected by a
       PDU, then the PDU shall be discarded, and an ER PDU shall be
       generated and forwarded to the originating network-entity if the
       Error Report flag is set.
   4)  This function may or may not be supported. If an implementation
       does not support this function, and the function is selected by a
       PDU, then the function is not provided and the PDU is processed
       exactly as though the function was not selected. The PDU shall
       not be discarded.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 86]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-87" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                                ANNEXES
 (These annexes are provided for information for implementors and are
 not an integral part of the body of the Standard.)
                ANNEX A.  SUPPORTING TECHNICAL MATERIAL
 A.1  Data Unit Lifetime
  There are two primary purposes of providing a PDU lifetime capability
  in the ISO 8473 Protocol. One purpose is to ensure against unlimited
  looping of protocol data units. Although the routing algorithm should
  ensure that it will be very rare for data to loop, the PDU lifetime
  field provides additional assurance that loops will be limited in
  extent.
  The other important purpose of the lifetime capability is to provide
  for a means by which the originating network entity can limit the
  Maximum NSDU lifetime. ISO Transport Protocol Class 4 assumes that
  there is a particular Maximum NSDU Lifetime in order to protect
  against certain error states in the connection establishment and
  termination phases. If a TPDU does not arrive within this time, then
  there is no chance that it will ever arrive. It is necessary to make
  this assumption, even if the Network Layer does not guarantee any
  particular upper bound on NSDU lifetime. It is much easier for
  Transport Protocol Class 4 to deal with occasional lost TPDUs than to
  deal with occasional very late TPDUs. For this reason, it is
  preferable to discard very late TPDUs than to deliver them. Note that
  NSDU lifetime is not directly associated with the retransmission of
  lost TPDUs, but relates to the problem of distinguishing old
  (duplicate) TPDUs from new TPDUs.
  Maximum NSDU Lifetime must be provided to transport protocol entity in
  units of time; a transport entity cannot count "hops". Thus NSDU
  lifetime must be calculated in units of time in order to be useful in
  determining Transport timer values.
  In the absence of any guaranteed bound, it is common to simply guess
  some value which seems like a reasonable compromise. In essence one is
  simply assuming that "surely no TPDU would ever take more than 'x'
  seconds to traverse the network." This value is probably chosen by
  observation of past performance, and may
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 87]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-88" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  vary with source and destination.
  Three possible ways to deal with the requirement for a limit on the
  maximum NSDU lifetime are: (1) specify lifetime in units of time,
  thereby requiring intermediate systems to decrement the lifetime field
  by a value which is an upper bound on the time spent since the
  previous intermediate system, and have the Network Layer discard
  protocol data units whose lifetime has expired; (2) provide a
  mechanism in the Transport Layer to recognize and discard old TPDUs;
  or (3) ignore the problem, anticipating that the resulting
  difficulties will be rare. Which solution should be followed depends
  in part upon how difficult it is to implement solutions (1) and (2),
  and how strong the transport requirement for a bounded time to live
  really is.
  There is a problem with solution (2) above, in that transport entities
  are inherently transient. In case of a computer system outage or other
  error, or in the case where one of the two endpoints of a connection
  closes without waiting for a sufficient period of time (approximately
  twice Maximum NSDU Lifetime), it is possible for the Transport Layer
  to have no way to know whether a particular TPDU is old unless
  globally synchronized clocks are used (which is unlikely). On the
  other hand, it is expected that intermediate systems will be
  comparatively stable. In addition, even if intermediate systems do
  fail and resume processing without memory of the recent past, it will
  still be possible (in most instances) for the intermediate system to
  easily comply with lifetime in units of time, as discussed below.
  It is not necessary for each intermediate system to subtract a precise
  measure of the time that has passed since an NPDU (containing the TPDU
  or a segment thereof) has left the previous intermediate system. It is
  sufficient to subtract an upper bound on the time taken. In most
  cases, an intermediate system may simply subtract a constant value
  which depends upon the typical near-maximum delays that are
  encountered in a specific subnetwork. It is only necessary to make an
  accurate estimate on a per NPDU basis for those subnetworks which have
  both a relatively large maximum delay, and a relatively large
  variation in delay.
  As an example, assume that a particular local area network has short
  average delays, with overall delays generally in the 1 to 5
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 88]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-89" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  millisecond range and with occasional delays up to 20 milliseconds. In
  this case, although the relative range in delays might be large (a
  factor of 20), it would still not be necessary to measure the delay
  for actual NPDUs. A constant value of 20 milliseconds (or more) can be
  subtracted for all delays ranging from .5 seconds to .6 seconds (.5
  seconds for the propagation delay, 0 to .1 seconds for queueing delay)
  then the constant value .6 seconds could be used.
  If a third subnetwork had normal delays ranging from .1 to 1 second,
  but occasionally delivered an NPDU after a delay of 15 seconds, the
  intermediate system attached to this subnetwork might be required to
  determine how long it has actually take the PDU to transit the
  subnetwork. In this last example, it is likely to be more useful to
  have the intermediate systems determine when the delays are extreme ad
  discard very old NPDUs, as occasional large delays are precisely what
  causes the Transport Protocol the most trouble.
  In addition to the time delay within each subnetwork, it is important
  to consider the time delay within intermediate systems. It should be
  relatively simple for those gateways which expect to hold on to some
  data-units for significant periods of time to decrement the lifetime
  appropriately.
  Having observed that (i) the Transport Protocol requires Maximum NSDU
  to be calculated in units of time; (ii) in the great majority of
  cases, it is not difficult for intermediate systems to determine a
  valid upper bound on subnetwork transit time; and (iii) those few
  cases where the gateways must actually measure the time take by a NPDU
  are precisely the cases where such measurement truly needs to be made,
  it can be concluded that NSDU lifetime should in fact be measured in
  units of time, and that intermediate systems should required to
  decrement the lifetime field of the ISO 8473 Protocol by a value which
  represents an upper bound on the time actually taken since the
  lifetime field was last decremented.
 A.2  Reassembly Lifetime Control
  In order to ensure a bound on the lifetime of NSDUs, and to
  effectively manage reassembly buffers in the Network Layer, the
  Reassembly Function described in <a href="#section-6">Section 6</a> must control the
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 89]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-90" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  lifetime of segments representing partially assembled PDUs. This annex
  discusses methods of bounding reassembly lifetime and suggests some
  implementation guidelines for the reassembly function.
  When segments of a PDU arrive at a destination network-entity, they
  are buffered until an entire PDU is received, assembled, and passed to
  the PDU Decomposition Function. The connectionless Internetwork
  Protocol does not guarantee the delivery of PDUs; hence, it is
  possible for some segments of a PDU to be lost or delayed such that
  the entire PDU cannot be assembled in a reasonable length of time. In
  the case of loss of a PDU "segment", for example, this could be
  forever. There are a number of possible schemes to prevent this:
   a)  Per-PDU reassembly timers,
   b)  Extension of the PDU Lifetime control function, and
   c)  Coupling of the Transport Retransmission timers.
  Each of these methods is discussed in the subsections which follow.
  A.2.1  Method (a)
   assigns a "reassembly lifetime" to each PDU received and identified
   by its Data-unit Identifier. This is a local, real time which is
   assigned by the reassembly function and decremented while some, but
   not all segments of the PDU are being buffered by the destination
   network-entity. If the timer expires, all segments of the PDU are
   discarded, thus freeing the reassembly buffers and preventing a "very
   old" PDU from being confused with a newer one bearing the same
   Data-unit Identifier. For this scheme to function properly, the
   timers must be assigned in such a fashion as to prevent the
   phenomenon of Reassembly Interference (discussed below). In
   particular, the following guidelines should be followed:
    1)  The Reassembly Lifetime must be much less than the maximum PDU
        lifetime of the network (to prevent the confusion of old and new
        data-units).
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 90]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-91" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    2)  The lifetime should be less than the Transport protocol's
        retransmission timers minus the average transit time of the
        network. If this is not done, extra buffers are tied up holding
        data which has already been retransmitted by the Transport
        Protocol. (Note that an assumption has been made that such
        timers are integral to the Transport Protocol, which in some
        sense, dictates that retransmission functions must exist in the
        Transport Protocol employed).
  A.2.2  Method (b)
   is feasible if the PDU lifetime control function operates based on
   real or virtual time rather than hop-count. In this scheme, the
   lifetime field of all PDU segments of a Data-unit continues to be
   decremented by the reassembly function of the destination
   network-entity as if the PdU were still in transit (in a sense, it
   still is). When the lifetime of any segment of a partially
   reassembled PDU expires, all segments of that PDU are discarded. This
   scheme is attractive since the delivery behavior of the ISO 8473
   Protocol would be identical for segmented and unsegmented PDUs.
  A.2.3  Method (c)
   couples the reassembly lifetime directly to the Transport Protocol's
   retransmission timers, and requires that Transport Layer management
   make known to Network Layer Management (and hence, the Reassembly
   Function) the values of its retransmission timers for each source
   from which it expects to be receiving traffic. When a PDU segment is
   received from a source, the retransmission time minus the anticipated
   transit time becomes the reassembly lifetime of that PDU. If this
   timer expires before the entire PDU has been reassembled, all
   segments of the PDU are discarded. This scheme is attractive since it
   has a low probability of holding PDU segments that have already been
   retransmitted by the source Transport-entity; it has, however, the
   disadvantage of depending on reliable operation of the Transport
   Protocol to work effectively. If the retransmission timers are not
   set correctly, it is possible that all PDUs would be discarded too
   soon, and the Transport Protocol would make no progress.
 A.3  The Power of the Header Error Detection Function
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 91]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-92" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  A.3.1  General
   The form of the checksum used for PDU header error detection is such
   that it is easily calculated in software or firmware using only two
   additions per octet of header, yet it has an error detection power
   approaching (but not quite equalling) that of techniques (such as
   cyclic polynomial checks) which involve calculations that are much
   more time- or space-consuming. This annex discusses the power of this
   error detection function.
   The checksum consists of two octets, either of which can assume any
   value except zero. That is, 255 distinct values for each octet are
   possible. The calculation of the two octets is such that the value of
   either is independent of the value of the other, so the checksum has
   a total of 255 x 255 = 65025 values. If one considers all ways in
   which the PDU header might be corrupted as equally likely, then there
   is only one chance in 65025 that the checksum will have the correct
   value for any particular corruption. This corresponds to 0.0015  of
   all possible errors.
   The remainder of this annex considers particular classes of errors
   that are likely to be encountered. The hope is that the error
   detection function will be found to be more powerful, or at least no
   less powerful, against these classes as compared to errors in
   general.
  A.3.2  Bit Alteration Errors
   First considered are classes of errors in which bits are altered, but
   no bits are inserted nor deleted. This section does not consider the
   case where the checksum itself is erroneously set to be all zero;
   this case is discussed in section A.3.4.
   A burst error of length b is a corruption of the header in which all
   of the altered bits (no more than b in number) are within a single
   span of consecutively transmitted bits that is b bits long. Checksums
   are usually expected to do well against burst errors of a length not
   exceeding the number of bits in the header error detection parameter
   (16 for the PDU header). The PDU header error detection parameter in
   fact fails to detect only 0.000019  of all such errors, each distinct
   burst error of length 16 or less being considered to be equally
   likely. In particular,
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 92]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-93" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   it cannot detect an 8-bit burst in which an octet of zero is altered
   to an octet of 255 (all bits = 1) or vice versa. Similarly, it fails
   to detect the swapping of two adjacent octets only if one is zero and
   the other is 255.
   The PDU header error detection, as should be expected, detects all
   errors involving only a single altered bit.
   Undetected errors involving only two altered bits should occur only
   if the two bits are widely separated (and even then only rarely). The
   PDU header error detection detects all double bit errors for which
   the spacing between the two altered bits is less than 2040 bits = 255
   octets. Since this separation exceeds the maximum header length, all
   double bit errors are detected.
   The power to detect double bit errors is an advantage of the checksum
   algorithm used for the protocol, versus a simple modulo 65536
   summation of the header split into 16 bit fields. This simple
   summation would not catch all such double bit errors. In fact, double
   bit errors with a spacing as little as 16 bits apart could go
   undetected.
  A.3.3  Bit Insertion/Deletion Errors
   Although errors involving the insertion or deletion of bits are in
   general neither more nor less likely to go undetected than are all
   other kinds of general errors, at least one class of such errors is
   of special concern. If octets, all equal to either zero or 255, are
   inserted at a point such that the simple sum CO in the running
   calculation (described in Annex C) happens to equal zero, then the
   error will go undetected. This is of concern primarily because there
   are two points in the calculation for which this value for the sum is
   not a rare happenstance, but is expected; namely, at the beginning
   and the end. That is, if the header is preceded or followed by
   inserted octets all equal to zero or 255 then no error is detected.
   Both cases are examined separately.
   Insertion of erroneous octets at the beginning of the header
   completely misaligns the header fields, causing them to be
   misinterpreted. In particular, the first inserted octet is
   interpreted as the network layer protocol identifier, probably
   eliminating any knowledge that the data unit is related to the
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 93]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-94" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   ISO 8473 Protocol, and thereby eliminating any attempt to perform the
   checksum calculation or invoking a different form of checksum
   calculation. An initial octet of zero is reserved for the Inactive
   Network Layer Protocol. This is indeed a problem but not one which
   can be ascribed to the form of checksum being used. Therefore, it is
   not discussed further here.
   Insertion of erroneous octets at the end of the header, in the
   absence of other errors, is impossible because the length field
   unequivocally defines where the header ends. Insertion or deletion of
   octets at the end of the header requires an alteration in the value
   of the octet defining the header length. Such an alteration implies
   that the value of the calculated sum at the end of the header would
   not be expected to have the dangerous value of zero and consequently
   that the error is just as likely to be detected as is any error in
   general.
   Insertion of an erroneous octet in the middle of the header is
   primarily of concern if the inserted octet has either the value zero
   or 255, and if the variable CO happens to have the value zero at this
   point. In most cases, this error will completely destroy the parsing
   of the header, which will cause the data unit to e discarded. In
   addition, in the absence of any other error, the last octet of the
   header will be thought to be data. This in turn will cause the header
   to end in the wrong place. In the case where the header otherwise can
   parse correctly, the last field will be found to be missing. Even in
   the case where necessary, the length field is the padding option, and
   therefore not necessary, the length field for the padding function
   will be inconsistent with the header length field, and therefore the
   error can be detected.
  A.3.4  Checksum Non-calculation Errors
   Use of the header error detection function is optional. The choice of
   not using it is indicated by a checksum parameter value of zero. This
   creates the possibility that the two octets of the checksum parameter
   (neither of which is generated as being zero) could both be altered
   to zero. This would in effect be an error not detected by the
   checksum since the check would not be made. One of three
   possibilities exists:
    1)  A burst error of length sixteen (16) which sets the entire
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 94]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-95" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
    checksum to zero. Such an error could not be detected; however, it
        requires a particular positioning of the burst within the
        header. [A calculation of its effect on overall detectability of
        burst errors depends upon the length of the header.]
    2)  All single bit errors are detected. Since both octets of the
        checksum field must be non-zero when the checksum is being used,
        no single bit error can set the checksum to zero.
    3)  Where each of the two octets of the checksum parameter has a
        value that is a power of two, such that only one bit in each
        equals one (1), then a zeroing of the checksum parameter could
        result in an undetected double bit error. Furthermore, the two
        altered bits have a separation of less than sixteen (16), and
        could be consecutive. This is clearly a decline from the
        complete detectability previously described.
   Where a particular administration is highly concerned about the
   possibility of accidental zeroing of the checksum among data units
   within its domain, then the administration may impose the restriction
   that all data units whose source or destination lie within its domain
   must make use of the header error detection function. Any data units
   which do not could be discarded, nor would they be allowed outside
   the domain. This protects against errors that occur within the
   domain, and would protect all data units whose source or destination
   lies within the domain, even where the data path between all such
   pairs crosses other domains (errors outside the protected domain
   notwithstanding).
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 95]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-96" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
                      ANNEX B.  NETWORK MANAGEMENT
 The following topics are considered to be major components of Network
 Layer management:
  A.  Routing
   Considered by many to be the most crucial element of Network Layer
   management, since management of the Routing algorithms for networking
   seem to be an absolutely necessary prerequisite to a practical
   networking scheme.
   Routing management consists of three parts; forwarding, decision, and
   update. Management of forwarding is the process of interpreting the
   Network Layer address to properly forward NSDUs on its next network
   hop on a route through the network. Management of decision is the
   process of choosing routes for either connections or NSDUs, depending
   on whether the network is operating a connection-oriented or
   connectionless protocol. The decision component will be driven by a
   number of considerations, not the least of which are those associated
   with Quality of Service. Management of update is the management
   protocol(s) used to exchange information among
   intermediate-systems/network- entities which is used in the decision
   component to determine routes.
   To what extent is it desirable and/or practical to pursue a single
   OSI network routing algorithm and associated Management protocol(s)?
   It is generally understood that it is impractical to expect ISO to
   adopt a single global routing algorithm. On the other hand, it is
   recognized that having no standard at all upon which to make routing
   decisions effectively prevents an internetwork protocol from working
   at all. One possible compromise would be to define the principles for
   the behavior of an internetwork routing algorithm. A possible next
   step would be to specify the types of information that must be
   propagated among the intermediate-systems/network-entities via their
   update procedures. The details of the updating protocol might then be
   left to bilateral agreements among the cooperating administrations.
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 96]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-97" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  B.  Statistical Analysis
   These management functions relate to the gathering and reporting of
   information about the real-time behavior of the global network. They
   consist of Data counts such as number of PDUs forwarded, entering
   traffic, etc., and Event Counts such as topology changes, quality of
   service changes, etc.
  C.  Network Control
   These management functions are those related to the control of the
   global network, and possibly could be performed by a Network Control
   Center(s). The control functions needed are not al all clear. Neither
   are the issues relating to what organization(s) is/are responsible
   for the management of the environment. Should there be a Network
   Control Center distinct from those provided by the subnetwork
   administrations? What subnetwork management information is needed by
   the network management components to perform their functions?
  D.  Directory Mapping Functions
   Does the Network layer contain a Directory function as defined in the
   Reference Model? Current opinion is that the Network Layer restricts
   itself to the function of mapping NSAP addresses to routes.
  E.  Congestion Control
   Does this come under the umbrella of Network Layer management? How?
  F.  Configuration Control
   This is tightly associated with the concepts of Resource Management,
   and is generally considered to be somehow concerned with the control
   of the resources used in the management of the global network. The
   resources which have to be managed are Bandwidth (use of subnetwork
   resources), Processor (CPU), and Memory (buffers). Where is the
   responsibility for resources assigned, and are they appropriate for
   standardization? It appears that these
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 97]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-98" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   functions are tightly related to how one signals changes in Quality
   of Service.
  G.  Accounting
   What entities, administrations, etc., are responsible for network
   accounting? How does this happen? What accounting information, if
   any, is required from the subnetworks in order to charge for network
   resources? Who is charged? To what degree is this to be standardized?
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 98]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-99" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
      ANNEX C.  ALGORITHMS FOR PDU HEADER ERROR DETECTION FUNCTION
 This Annex describes algorithm which may be used to computer, check and
 update the checksum field of the PDU Header in order to provide the PDU
 Header Error Detection function described in <a href="#section-6.11">Section 6.11</a>.
 C.1  Symbols used in algorithms
  CO,C1  variables used in the algorithms
  i      number (i.e., position) of an octet within the header
  n      number (i.e., position) of the first octet of the checksum
         parameter (n=8)
  L      length of the PDU header in octets
  X      value of octet one of the checksum parameter
  Y      value of octet two of the checksum parameter
  a      octet occupying position i of the PDU header
 C.2  Arithmetic Conventions
  Addition is performed in one of the two following modes:
   a)  modulo 255 arithmetic;
   b)  eight-bit one's complement arithmetic in which, if any of the
       variables has the value minus zero (i.e., 255) it shall be
       regarded as though it was plus zero (i.e., 0).
 C.3  Algorithm for Generating Checksum Parameters
  A:  Construct the complete PDU header with the value of the checksum
      parameter field set to zero;
  B:  Initialize C0 and C1 to zero;
  C:  Process each octet of the PDU header sequentially from i = 1 to L
      by
   a)  adding the value of the octet to C0; then
   b)  adding the value of C0 to C1;
  D:  Calculate X = (L-8)C0 - C1 (modulo 255) and Y = (L-7) (-C0) + C1
      (modulo 255)
<span class="grey">ISO DIS 8473 (May 1984)                                        [Page 99]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-100" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
  E:  If X = 0, set X = 255;
  F:  If Y = 0, set Y = 255;
  G:  Place the values X and Y in octets 8 and 9 respectively.
 C.4  Algorithm for Checking Checksum Parameters
  A:  If octets 8 and 9 of PDU header both contain 0 (all bits off),
      then the checksum calculation has succeeded; otherwise initialize
      C1 = 0, C0 - 0 and proceed;
  B:  process each octet of the PDU header sequentially from i = 1 to L
      by
   a)  adding the value of the octet to C0; then
   b)  adding the value of C0 to C1;
  C:  If, when all the octets have been processed, C0 = C1 = 0 (modulo
      255) then the checksum calculation has succeeded; otherwise, the
      checksum calculation has failed.
 C.5  Algorithm to adjust checksum parameter when an octet is altered
  This algorithm adjusts the checksum when an octet (such as the
  lifetime field) is altered. Suppose the value in octet k is changed by
  Z = new_value - old_value.
  If X and Y denote the checksum values held in octets n and n+1,
  respectively, then adjust X and Y as follows:
   If X = 0 and Y = 0 do nothing, else;
        X := (k-n-1)Z + X (modulo 255) and
        Y := (n-k)Z + Y   (modulo 255).
   If X is equal to zero, then set it to 255; and
   similarly for Y.
  For this Protocol, n = 8. If the octet being altered is the lifetime
  field, k = 4. For the case where the lifetime is decreased by 1 unit
  (Z = -1), the results simplify to
<span class="grey">ISO DIS 8473 (May 1984)                                       [Page 100]</span></pre>
<hr class='noprint'/><!--NewPage--><pre class='newpage'><span id="page-101" ></span>
<span class="grey"><a href="./rfc926">RFC 926</a>                                                    December 1984</span>
   X := X + 5 (modulo 255) and
   Y := Y - 4 (modulo 255).
   Note:
    To derive this result, assume that when octet k has the value Z
    added to it then X and Y have values ZX and ZY added to them. For
    the checksum parameters to satisfy the conditions of <a href="#section-6.11">Section 6.11</a>
    both before and after the values are added, the following is
    required:
     Z + ZX + ZY = 0 (modulo 255) and
     (L-k+1)Z + (L-n+1)ZX + (L-n)ZY = 0 (modulo 255).
  Solving these equations simultaneously yields ZX = (k-n-1)Z and ZY +
  (m-k)Z.
ISO DIS 8473 (May 1984)                                       [Page 101]
</pre>
 
     |