|
|
1.1 ! root 1: % run this through LaTeX with the appropriate wrapper ! 2: ! 3: \ifpractical ! 4: \dotopic{BUILDING AN OSI APPLICATION} ! 5: \else ! 6: \dotopic{IMPLEMENTING NEW SERVICES} ! 7: \fi ! 8: ! 9: ! 10: \begin{bwslide} ! 11: \part* {OUTLINE}\bf ! 12: ! 13: \begin{description} ! 14: \item[PART I:] A MODEL FOR DISTRIBUTED APPLICATIONS ! 15: ! 16: \item[PART II:] THE RO-NOTATION ! 17: ! 18: \item[PART III:] STATIC FACILITIES ! 19: ! 20: \item[PART IV:] DYNAMIC FACILITIES ! 21: ! 22: \ifpractical ! 23: \item[PART V:] EXTRA FOR EXPERTS! ! 24: \fi ! 25: \end{description} ! 26: \end{bwslide} ! 27: ! 28: ! 29: \begin{bwslide} ! 30: \ctitle {A BIG ACKNOWLEDGEMENT} ! 31: ! 32: \begin{nrtc} ! 33: \item THIS PART OF THE TALK IS BASED ON AN EARLIER PRESENTATION ! 34: \begin{quote} ! 35: BUILDING DISTRIBUTION APPLICATIONS IN AN OSI FRAMEWORK ! 36: \end{quote} ! 37: ! 38: \item WHICH RECEIVED REVIEW FROM A LOT OF INDIVIDUALS ! 39: \end{nrtc} ! 40: \end{bwslide} ! 41: ! 42: ! 43: \begin{bwslide} ! 44: \ctitle {INTRODUCTION} ! 45: ! 46: \begin{nrtc} ! 47: \item LOOSELY COUPLED SYSTEMS THAT ARE BUILT USING REMOTE PROCEDURE CALLS ! 48: (RPC) ARE GAINING POPULARITY, e.g., NFS ! 49: ! 50: \item THE OSI REMOTE OPERATIONS CONCEPT IS INTENDED TO PROVIDE THIS ! 51: FUNCTIONALITY FOR: ! 52: \begin{nrtc} ! 53: \item MESSAGING ! 54: ! 55: \item DIRECTORY SERVICES ! 56: ! 57: \item NETWORK MANAGEMENT ! 58: ! 59: \item REMOTE DATABASE ACCESS ! 60: \end{nrtc} ! 61: \end{nrtc} ! 62: \end{bwslide} ! 63: ! 64: ! 65: \begin{bwslide} ! 66: \ctitle {MOTIVATION} ! 67: ! 68: \begin{nrtc} ! 69: \item MANY FEEL THAT THIS CAPABILITY MAY BE A KEY FACTOR IN THE OVERALL ! 70: SUCCESS OF OSI STANDARDIZATION ! 71: ! 72: \item BUT, REMOTE OPERATIONS ARE SUFFICIENTLY GENERAL TO REQUIRE ! 73: ADDITIONAL DISCIPLINE, BEYOND THE OSI STANDARDS, ! 74: FOR THEIR USE AS AN RPC MECHANISM ! 75: \end{nrtc} ! 76: \end{bwslide} ! 77: ! 78: ! 79: \begin{bwslide} ! 80: \ctitle {THE APPLICATIONS COOKBOOK} ! 81: ! 82: \begin{nrtc} ! 83: \item THE SET OF RULES AND LOCAL IMPLEMENTATION DECISIONS PLACED ON REMOTE ! 84: OPERATIONS TO MAKE THE PROBLEM MANAGEABLE: ! 85: \begin{nrtc} ! 86: \item LANGUAGE BINDINGS (``C'') ! 87: ! 88: \item TOOLS FOR AUTOMATICALLY GENERATING PARTS OF THE ! 89: PROGRAMS WHICH USE REMOTE OPERATIONS ! 90: ! 91: \item A RUN-TIME ENVIRONMENT AND SOME BOILERPLATE ! 92: ! 93: \item CONVENTIONS FOR NAMING AND ADDRESSING SERVICES AND ENTITIES ! 94: \end{nrtc} ! 95: ! 96: \item A (SMALL) PART OF THE ISODE ! 97: \begin{nrtc} ! 98: \item VOLUME 4 OF THE USER'S MANUAL ! 99: \end{nrtc} ! 100: \end{nrtc} ! 101: \end{bwslide} ! 102: ! 103: ! 104: \begin{bwslide} ! 105: \ctitle {FOREWORD} ! 106: ! 107: \begin{quote}\em ! 108: ``$\ldots$ The term `holistic' refers to my conviction that what we are ! 109: concerned with here is the fundamental interconnectedness of all things. ! 110: I do not concern myself with such petty things as fingerprint powder, telltale ! 111: pieces of pocket fluff and inane footprints. ! 112: I see the solution to each problem as being detectable in the pattern and web ! 113: of the whole. ! 114: The connections between causes and effects are often much more subtle and ! 115: complex than we with our rough and ready understanding of the physical world ! 116: might naturally suppose, Mrs.~Rawlinson. ! 117: ! 118: ``Let me give you an example. ! 119: If you go to an acupuncturist with a toothache he sticks a needle instead into ! 120: your thigh. ! 121: Do you know why he does that, Mrs.~Rawlinson? ! 122: ! 123: ``No, neither do I, Mrs.~Rawlinson, but we intend to find out$\ldots$'' ! 124: \end{quote} ! 125: ! 126: \raggedright ! 127: ---DOUGLAS ADAMS, \em Dirk Gently's Holistic Detective Agency (1987) ! 128: \end{bwslide} ! 129: ! 130: ! 131: \begin{bwslide} ! 132: \part {A MODEL FOR DISTRIBUTED APPLICATIONS}\bf ! 133: ! 134: \begin{nrtc} ! 135: \item ABSTRACT DATA TYPES ! 136: ! 137: \item OPERATIONS ! 138: ! 139: \item RELIABILITY CHARACTERISTICS ! 140: ! 141: \item IN PERSPECTIVE ! 142: \end{nrtc} ! 143: \end{bwslide} ! 144: ! 145: ! 146: \begin{bwslide} ! 147: \ctitle {USE OF REMOTE OPERATIONS IN OSI} ! 148: ! 149: \begin{nrtc} ! 150: \item {}[ECMA~TR/31] PRESENTS A METHOD FOR USING REMOTE OPERATIONS TO: ! 151: \begin{nrtc} ! 152: \item SPECIFY THE EXTERNALLY VISIBLE CHARACTERISTICS ! 153: NEEDED FOR INTERCONNECTION ! 154: ! 155: \item WHILE AVOIDING UNNECESSARY CONSTRAINTS UPON THE ! 156: INTERNAL DESIGN OF THE SYSTEMS TO BE INTERCONNECTED ! 157: \end{nrtc} ! 158: ! 159: \item ALTHOUGH THE LATTER HALF OF THIS DOCUMENT (THE PROTOCOL) IS NOW ! 160: OBSOLETE, THE FIRST FOUR SECTIONS (THE METHOD) ARE QUITE RELEVANT ! 161: ! 162: \item {}[ECMA~TR/31] IS BASED ON [X.410], ! 163: WE TERM THIS ``OLD-STYLE'' ROS ! 164: ! 165: \item {}[ISO~9072] IS THE NEWER JOINT ISO/CCITT WORK, ! 166: WE TERM THIS ``NEW-STYLE'' ROS ! 167: \end{nrtc} ! 168: \end{bwslide} ! 169: ! 170: ! 171: ! 172: \begin{bwslide} ! 173: \ctitle {A BIT OF HISTORY} ! 174: ! 175: \begin{nrtc} ! 176: \item XEROX's COURIER WAS THE FIRST WELL-KNOWN SYSTEM TO USE THIS APPROACH ! 177: ! 178: \item BUT EVEN IN THE EARLY 70's, SIMILAR IDEAS WERE BEING EXPLORED ! 179: ELSEWHERE (e.g., MIT) ! 180: ! 181: \item TODAY, ONC (SUN's RPC) AND DECORUM (APOLLO's NCS) ARE CONTINUING IN ! 182: THIS VEIN ! 183: \end{nrtc} ! 184: \end{bwslide} ! 185: ! 186: ! 187: \begin{bwslide} ! 188: \part* {ABSTRACT DATA TYPES}\bf ! 189: ! 190: \begin{nrtc} ! 191: \item REMOTE OPERATIONS ARE A MECHANISM BY WHICH LOOSELY COUPLED SYSTEMS ! 192: INTERACT ! 193: ! 194: \item BUT, REMOTE OPERATIONS ARE ONLY ONE PART OF A LARGER PICTURE HOWEVER ! 195: ! 196: \item THE FUNDAMENTAL CONCEPT IS THAT OF THE \emph{ABSTRACT DATA TYPE} ! 197: \end{nrtc} ! 198: \end{bwslide} ! 199: ! 200: ! 201: \begin{bwslide} ! 202: \ctitle {ABSTRACT DATA TYPES} ! 203: ! 204: \begin{nrtc} ! 205: \item PUT SIMPLY, AN ABSTRACT DATA TYPE DEFINES BOTH ! 206: \begin{nrtc} ! 207: \item THE DATA STRUCTURE CONTAINED IN AN OBJECT (SYNTAX), AND ! 208: ! 209: \item HOW THAT DATA IS INTERPRETED (SEMANTICS) ! 210: \end{nrtc} ! 211: ! 212: \item THIS IS HARDLY A NEW CONCEPT ! 213: \begin{nrtc} ! 214: \item e.g., SMALLTALK, SIMULA, and so on ! 215: \end{nrtc} ! 216: \end{nrtc} ! 217: \end{bwslide} ! 218: ! 219: ! 220: \begin{bwslide} ! 221: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ REPRESENTATION} ! 222: ! 223: \begin{nrtc} ! 224: \item DATA STRUCTURES IN PROGRAMMING LANGUAGES HAVE A \emph{CONCRETE} ! 225: REPRESENTATION ! 226: \begin{nrtc} ! 227: \item WHICH IS DEFINED BY THE PROGRAMMING LANGUAGE AND THE ! 228: UNDERLYING HARDWARE ! 229: ! 230: \item e.g., BYTE-ORDERING, WORD SIZE, etc. ! 231: \end{nrtc} ! 232: ! 233: \item THE CORRESPONDING ABSTRACT DATA TYPE IS DEFINED IN AN ! 234: IMPLEMENTATION-INDEPENDENT FASHION ! 235: \begin{nrtc} ! 236: \item TERMED THE \emph{ABSTRACT SYNTAX} ! 237: \end{nrtc} ! 238: ! 239: \item AN APPLICATION CAN EXPECT THIS TO BEHAVE CONSISTENTLY REGARDLESS OF THE ! 240: HARDWARE ON WHICH IT IS RUNNING ! 241: \end{nrtc} ! 242: \end{bwslide} ! 243: ! 244: ! 245: \begin{bwslide} ! 246: \ctitle {REPRESENTATION: EXAMPLE\\ ABSTRACT SYNTAX} ! 247: ! 248: \vskip.15in ! 249: \begin{verbatim} ! 250: Mail-Address ::= ! 251: SEQUENCE { ! 252: local ! 253: GraphicString, ! 254: ! 255: domain ! 256: GraphicString, ! 257: ! 258: options ! 259: BITSTRING { ! 260: default-local(0), default-host(1) ! 261: } ! 262: DEFAULT { default-local, default-host } ! 263: } ! 264: \end{verbatim} ! 265: \end{bwslide} ! 266: ! 267: ! 268: \begin{bwslide} ! 269: \ctitle {REPRESENTATION: EXAMPLE\\ CONCRETE SYNTAX} ! 270: ! 271: \vskip.15in ! 272: \begin{verbatim} ! 273: struct mail_address { ! 274: char *local; ! 275: char *domain; ! 276: ! 277: unsigned char options; ! 278: #define default_local 0x01 ! 279: #define default_host 0x02 ! 280: }; ! 281: \end{verbatim} ! 282: \begin{nrtc} ! 283: \item PLUS HARDWARE, COMPILER, etc. ! 284: \end{nrtc} ! 285: \end{bwslide} ! 286: ! 287: ! 288: \begin{bwslide} ! 289: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ SERIALIZATION} ! 290: ! 291: \begin{nrtc} ! 292: \item ABSTRACT TRANSFER NOTATION: ! 293: \begin{nrtc} ! 294: \item A WELL-DEFINED SET OF RULES USED TO DEFINE HOW ABSTRACT DATA ! 295: TYPES ARE TRANSMITTED THROUGH THE NETWORK ! 296: \end{nrtc} ! 297: \end{nrtc} ! 298: \end{bwslide} ! 299: ! 300: ! 301: \begin{bwslide} ! 302: \ctitle {SERIALIZATION (cont.)} ! 303: ! 304: \begin{nrtc} ! 305: \item CONCEPTUALLY, TWO MAPPINGS OCCUR ! 306: ! 307: \item FIRST, THE DATA STRUCTURE IS MAPPED TO THE ABSTRACT SYNTAX FOR ITS ! 308: CORRESPONDING ABSTRACT DATA TYPE ! 309: \begin{nrtc} ! 310: \item THIS IS A LOCAL ISSUE ! 311: \end{nrtc} ! 312: ! 313: \item SECOND, THE ABSTRACT SYNTAX IS MAPPED TO THE TRANSFER SYNTAX, ! 314: A STREAM OF OCTETS ! 315: \begin{nrtc} ! 316: \item THE ABSTRACT TRANSFER NOTATION IS USUALLY THE BASIC ENCODING ! 317: RULES ! 318: ! 319: \item OTHER POSSIBILITIES INCLUDE COMPRESSION, ENCRYPTION, etc. ! 320: \end{nrtc} ! 321: \end{nrtc} ! 322: \end{bwslide} ! 323: ! 324: ! 325: \begin{bwslide} ! 326: \ctitle {PROPERTIES OF ABSTRACT DATA TYPES:\\ OPERATIONS} ! 327: ! 328: \begin{nrtc} ! 329: \item ACCESS TO AN ABSTRACT DATA TYPE IS DEFINED BY A SET OF PRIMITIVE ! 330: ACTIONS ! 331: ! 332: \item EACH PRIMITIVE ACTION IS TERMED AN \emph{OPERATION} ! 333: ! 334: \item THIS SET OF OPERATIONS DEFINES THE COMPLETE BEHAVIOR OF AN ABSTRACT ! 335: DATA TYPE ! 336: \end{nrtc} ! 337: \end{bwslide} ! 338: ! 339: ! 340: \begin{bwslide} ! 341: \ctitle {OBJECT MODEL} ! 342: ! 343: \begin{nrtc} ! 344: \item SINCE OPERATIONS INTRODUCE A LEVEL OF INDIRECTION, ! 345: USING ABSTRACT DATA TYPES RATHER THAN CONCRETE DATA STUCTURES ! 346: PERMITS ACCESS TO DATA STRUCTURES WITHOUT REGARD TO THEIR ACTUAL ! 347: IMPLEMENTATION ! 348: ! 349: \item OPERATIONS ARE SAID TO BE \emph{TOTAL}, AS THE NORMAL OUTCOME (RESULT), ! 350: AND THE EXCEPTION OUTCOMES (THE ERRORS) ARE WELL-DEFINED AND ! 351: UNAMBIGUOUS ! 352: \end{nrtc} ! 353: \end{bwslide} ! 354: ! 355: ! 356: \begin{bwslide} ! 357: \part* {OPERATIONS}\bf ! 358: ! 359: \begin{nrtc} ! 360: \item IN ITS PRIMITIVE FORM, ! 361: AN \emph{OPERATION} IS A SIMPLE REQUEST/REPLY INTERACTION ! 362: ! 363: \item A \emph{INVOCATION} GENERATES ONE OF THREE OUTCOMES: ! 364: \begin{nrtc} ! 365: \item A \emph{RESULT}, IF THE OPERATION SUCCEEDS; ! 366: ! 367: \item AN \emph{ERROR}, IF THE OPERATION FAILED; or, ! 368: ! 369: \item A \emph{REJECTION}, IF THE OPERATION WAS NOT PERFORMED ! 370: \end{nrtc} ! 371: \end{nrtc} ! 372: \end{bwslide} ! 373: ! 374: ! 375: \begin{bwslide} ! 376: \ctitle {NOTE DIFFERENCE BETWEEN} ! 377: \begin{nrtc} ! 378: \item SERVICES: ! 379: \begin{nrtc} ! 380: \item CONSUMER/PROVIDER ! 381: \end{nrtc} ! 382: ! 383: \item OPERATIONS: ! 384: \begin{nrtc} ! 385: \item INVOKER/PERFORMER ! 386: \end{nrtc} ! 387: ! 388: \item ASSOCIATIONS: ! 389: \begin{nrtc} ! 390: \item INITIATOR/RESPONDER ! 391: \end{nrtc} ! 392: \end{nrtc} ! 393: \end{bwslide} ! 394: ! 395: ! 396: \begin{bwslide} ! 397: \ctitle {PROPERTIES OF OPERATIONS:\\ INVOCATIONS} ! 398: ! 399: \begin{nrtc} ! 400: \item THE OPERATION IS \emph{INVOKED} WHEN IT IS REQUESTED ! 401: ! 402: \item AN INVOCATION CONSISTS OF: ! 403: \begin{nrtc} ! 404: \item AN \emph{OPERATION NUMBER} IDENTIFYING THE OPERATION REQUESTED ! 405: ! 406: \item AN ARBITRARILY COMPLEX \emph{ARGUMENT} ! 407: ! 408: \item AN \emph{INVOCATION IDENTIFIER} DISTINGUISHING THIS INVOCATION ! 409: FROM PREVIOUS INVOCATIONS ! 410: ! 411: \item (POSSIBLY) A \emph{LINKED-INVOCATION IDENTIFIER} ! 412: \end{nrtc} ! 413: \end{nrtc} ! 414: \end{bwslide} ! 415: ! 416: ! 417: \begin{bwslide} ! 418: \ctitle {LINKED INVOCATIONS} ! 419: ! 420: \begin{nrtc} ! 421: \item INTRODUCED IN THE NEWER JOINT ISO/CCITT WORK ! 422: ! 423: \item SOMETIMES REFERRED TO AS A ``CALLBACK'' OR A ``REMOTE UPCALL'' ! 424: \end{nrtc} ! 425: \end{bwslide} ! 426: ! 427: ! 428: \begin{bwslide} ! 429: \ctitle {ONE USE OF LINKED INVOCATIONS} ! 430: ! 431: \begin{nrtc} ! 432: \item SUPPOSE YOU WANT AN OPERATION THAT RETURNS MULTIPLE RESULTS ! 433: ! 434: \item DEFINE THE OPERATION TO HAVE A LINKED OPERATION WITH ! 435: \begin{nrtc} ! 436: \item ARGUMENT: A PARTIAL RESULT ! 437: \end{nrtc} ! 438: ! 439: \item HERE'S HOW IT WORKS: ! 440: \begin{nrtc} ! 441: \item CONSUMER INVOKES OPERATION ! 442: ! 443: \item AS EACH PARTIAL RESULT IS COMPUTED,\\ ! 444: PROVIDER INVOKES LINKED OPERATION ! 445: ! 446: \item WHEN LAST PARTIAL RESULT READY,\\ ! 447: PROVIDER RETURNS THIS AS A RESULT ! 448: \end{nrtc} ! 449: \end{nrtc} ! 450: \end{bwslide} ! 451: ! 452: ! 453: \begin{bwslide} ! 454: \ctitle {PROPERTIES OF OPERATIONS:\\ RESULTS} ! 455: ! 456: \begin{nrtc} ! 457: \item IF THE OPERATION SUCCEEDS, THEN A RESULT IS RETURNED ! 458: ! 459: \item A RESULT CONSISTS OF: ! 460: \begin{nrtc} ! 461: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH ! 462: SUCCEEDED ! 463: ! 464: \item (POSSIBLY) AN ARBITRARILY COMPLEX \emph{RESULT} ! 465: \end{nrtc} ! 466: ! 467: \item ACTUALLY, A RESULT MAY BE \emph{OPTIONALLY} RETURNED ON SUCCESS ! 468: \begin{nrtc} ! 469: \item (A BAD IDEA) ! 470: \end{nrtc} ! 471: \end{nrtc} ! 472: \end{bwslide} ! 473: ! 474: ! 475: \begin{bwslide} ! 476: \ctitle {PROPERTIES OF OPERATIONS:\\ ERRORS} ! 477: ! 478: \begin{nrtc} ! 479: \item IF THE OPERATION FAILS, THEN AN ERROR IS RETURNED ! 480: ! 481: \item AN ERROR CONSISTS OF: ! 482: \begin{nrtc} ! 483: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH ! 484: FAILED ! 485: ! 486: \item AN \emph{ERROR NUMBER} IDENTIFYING THE ERROR ENCOUNTERED ! 487: ! 488: \item (POSSIBLY) AN ARBITRARILY COMPLEX \emph{PARAMETER} ! 489: \end{nrtc} ! 490: ! 491: \item NOTE THAT ERRORS DO NOT NECESSARILY INDICATE BAD BEHAVIOR! ! 492: \begin{nrtc} ! 493: \item THEY CAN OCCUR AS A PART OF CORRECT AND NORMAL OPERATIONS ! 494: ! 495: \item HENCE, THINK OF THEM AS EXCEPTIONS ! 496: \end{nrtc} ! 497: \end{nrtc} ! 498: \end{bwslide} ! 499: ! 500: ! 501: \begin{bwslide} ! 502: \ctitle {PROPERTIES OF OPERATIONS:\\ REJECTIONS} ! 503: ! 504: \begin{nrtc} ! 505: \item IF THE OPERATION CAN NOT BE PERFORMED, THEN A REJECTION IS RETURNED ! 506: ! 507: \item A REJECTION CONSISTS OF: ! 508: \begin{nrtc} ! 509: \item AN INVOCATION IDENTIFIER CORRESPONDING TO THE OPERATION WHICH ! 510: WAS REJECTED ! 511: ! 512: \item A \emph{REASON} EXPLAINING WHY THE OPERATION WAS REJECTED ! 513: \begin{nrtc} ! 514: \item e.g., MISTYPED PARAMETERS ! 515: \end{nrtc} ! 516: \end{nrtc} ! 517: ! 518: \item SOME REJECTIONS ARE USER-INITIATED, OTHERS ARE PROVIDER-INITIATED ! 519: \end{nrtc} ! 520: \end{bwslide} ! 521: ! 522: ! 523: \begin{bwslide} ! 524: \part* {RELIABILITY CHARACTERISTICS}\bf ! 525: ! 526: \begin{nrtc} ! 527: \item UNCERTAINTY DURING EXECUTION OF OPERATIONS IS ALWAYS PRESENT ! 528: ! 529: \item THIS IS PARTICULARLY TROUBLESOME IF THE NETWORK ``BREAKS'' ! 530: AFTER A REQUEST IS RECEIVED BY THE PERFORMER BUT BEFORE ! 531: THE INVOKER RECEIVES THE REPLY ! 532: ! 533: \item ONE SCHEME OF CLASSIFYING THE RELIABILITY REQUIREMENTS OF AN OPERATION ! 534: IS: ! 535: \begin{nrtc} ! 536: \item EXACTLY ONCE ! 537: ! 538: \item AT LEAST ONCE (IDEMPOTENT) ! 539: ! 540: \item AT MOST ONCE ! 541: \end{nrtc} ! 542: ! 543: \item IMPLEMENTING THESE SEMANTICS IS THE RESPONSBILITY OF THE ROS-USER ! 544: \end{nrtc} ! 545: \end{bwslide} ! 546: ! 547: ! 548: \begin{bwslide} ! 549: \ctitle {RELIABILITY CHARACTERISTIC:\\ EXACTLY ONCE} ! 550: ! 551: \begin{nrtc} ! 552: \item PERFORMER ! 553: \begin{nrtc} ! 554: \item KEEPS TRACK OF THE INVOCATION IDENTIFIERS OF ALL PERFORMED ! 555: OPERATIONS ! 556: ! 557: \item WHEN PROCESSING AN INVOCATION, IF AN INVOCATION IDENTIFIER IS ! 558: REPEATED, REJECT THE OPERATION ! 559: \end{nrtc} ! 560: ! 561: \item INVOKER ! 562: \begin{nrtc} ! 563: \item REPEATEDLY INVOKES THE OPERATION USING THE SAME INVOCATION ! 564: IDENTIFIER UNTIL EITHER ! 565: ! 566: \item A CONFIRMATION (RESULT OR ERROR) IS RECEIVED, OR ! 567: ! 568: \item A REJECTION (DUPLICATE OPERATION) IS RECEIVED ! 569: \end{nrtc} ! 570: ! 571: \item A ROS BUG: REJECTION DOES NOT INCLUDE THE VALUE OF THE PREVIOUS RESULT! ! 572: \end{nrtc} ! 573: \end{bwslide} ! 574: ! 575: ! 576: \begin{bwslide} ! 577: \ctitle {RELIABILITY CHARACTERISTIC:\\ AT LEAST ONCE} ! 578: ! 579: \begin{nrtc} ! 580: \item PERFORMER ! 581: \begin{nrtc} ! 582: \item KEEPS NO INFORMATION REGARDING PREVIOUSLY PERFORMED OPERATIONS ! 583: \end{nrtc} ! 584: ! 585: \item INVOKER ! 586: \begin{nrtc} ! 587: \item REPEATEDLY INVOKES THE OPERATION ! 588: \begin{nrtc} ! 589: \item (WITH ANY INVOCATION IDENTIFIER) ! 590: \end{nrtc} ! 591: UNTIL A CONFIRMATION (RESULT OR ERROR) IS RECEIVED ! 592: \end{nrtc} ! 593: \end{nrtc} ! 594: \end{bwslide} ! 595: ! 596: ! 597: \begin{bwslide} ! 598: \ctitle {RELIABILITY CHARACTERISTIC:\\ AT MOST ONCE} ! 599: ! 600: \begin{nrtc} ! 601: \item PERFORMER ! 602: \begin{nrtc} ! 603: \item KEEPS NO INFORMATION REGARDING PREVIOUSLY PERFORMED OPERATIONS ! 604: \end{nrtc} ! 605: ! 606: \item INVOKER ! 607: \begin{nrtc} ! 608: \item INVOKES THE OPERATION ! 609: \begin{nrtc} ! 610: \item (WITH ANY INVOCATION IDENTIFIER) ! 611: \end{nrtc} ! 612: EXACTLY ONCE ! 613: \end{nrtc} ! 614: \end{nrtc} ! 615: \end{bwslide} ! 616: ! 617: ! 618: \begin{bwslide} ! 619: \ctitle {AN EXAMPLE (cont.)} ! 620: ! 621: \vskip.15in ! 622: \begin{verbatim} ! 623: int op_EVAL_evalOperation (sd, in, out, rsp, roi) ! 624: int sd; ! 625: struct type_EVAL_EvalObject* in; ! 626: caddr_t *out; ! 627: int *rsp; ! 628: struct RoSAPindication *roi; ! 629: \end{verbatim} ! 630: \end{bwslide} ! 631: ! 632: ! 633: \begin{bwslide} ! 634: \ctitle {AN EXAMPLE (cont.)} ! 635: ! 636: \vskip.15in ! 637: \begin{verbatim} ! 638: struct type_EVAL_Service__Requirements { ! 639: struct type_EVAL_Versions *version; ! 640: ! 641: struct type_EVAL_Credentials *credentials; ! 642: ! 643: struct member_EVAL_0 { ! 644: struct type_EVAL_Extension *Extension; ! 645: ! 646: struct member_EVAL_0 *next; ! 647: } *extensions; ! 648: }; ! 649: \end{verbatim} ! 650: \end{bwslide} ! 651: ! 652: ! 653: \begin{bwslide} ! 654: \part {THE RO-NOTATION}\bf ! 655: ! 656: \begin{nrtc} ! 657: \item USE ASN.1 MACROS TO DEFINE APPLICATION PROTOCOL ! 658: \begin{nrtc} ! 659: \item APPLICATION CONTEXTS ! 660: ! 661: \item PARAMETERS NEEDED FOR BINDING AND INVOCATION ! 662: \end{nrtc} ! 663: ! 664: \item A STANDARD SET OF MACROS, THE \emph{RO-NOTATION}, ! 665: IS DEFINED FOR THIS PURPOSE ! 666: \end{nrtc} ! 667: \end{bwslide} ! 668: ! 669: ! 670: \begin{bwslide} ! 671: \ctitle {AN ANNOTATED EXAMPLE} ! 672: ! 673: \hrule\vskip.15in ! 674: \begin{tgrind}\scriptsize ! 675: \let\linebox=\relax ! 676: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 677: \input figureB-15\relax ! 678: \end{tgrind} ! 679: \end{bwslide} ! 680: ! 681: ! 682: \begin{bwslide} ! 683: \begin{tgrind} ! 684: \let\linebox=\relax ! 685: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 686: \input figureB-16\relax ! 687: \end{tgrind} ! 688: \end{bwslide} ! 689: ! 690: ! 691: \begin{bwslide} ! 692: \begin{tgrind} ! 693: \let\linebox=\relax ! 694: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 695: \input figureB-17\relax ! 696: \end{tgrind} ! 697: \end{bwslide} ! 698: ! 699: ! 700: \begin{bwslide} ! 701: \begin{tgrind} ! 702: \let\linebox=\relax ! 703: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 704: \input figureB-18\relax ! 705: \end{tgrind} ! 706: \end{bwslide} ! 707: ! 708: ! 709: \begin{bwslide} ! 710: \begin{tgrind}\scriptsize ! 711: \let\linebox=\relax ! 712: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 713: \input figureB-19\relax ! 714: \end{tgrind} ! 715: \end{bwslide} ! 716: ! 717: ! 718: \begin{bwslide} ! 719: \begin{tgrind}\scriptsize ! 720: \let\linebox=\relax ! 721: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 722: \input figureB-20\relax ! 723: \end{tgrind} ! 724: \end{bwslide} ! 725: ! 726: ! 727: \begin{bwslide} ! 728: \begin{tgrind}\scriptsize ! 729: \let\linebox=\relax ! 730: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 731: \input figureB-21\relax ! 732: \end{tgrind} ! 733: \end{bwslide} ! 734: ! 735: ! 736: \begin{bwslide} ! 737: \begin{tgrind}\scriptsize ! 738: \let\linebox=\relax ! 739: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 740: \input figureB-22\relax ! 741: \end{tgrind} ! 742: \end{bwslide} ! 743: ! 744: ! 745: \begin{bwslide} ! 746: \part {STATIC FACILITIES}\bf ! 747: ! 748: \begin{nrtc} ! 749: \item STUB GENERATOR ! 750: ! 751: \item STRUCTURE GENERATOR ! 752: ! 753: \item ELEMENT PARSER ! 754: \end{nrtc} ! 755: \end{bwslide} ! 756: ! 757: ! 758: \begin{bwslide} ! 759: \ctitle {STATIC FACILITIES\\ OVERVIEW} ! 760: ! 761: \vskip.15in ! 762: \diagram[p]{figureB-1} ! 763: \end{bwslide} ! 764: ! 765: ! 766: \begin{bwslide} ! 767: \part* {STUB GENERATOR}\bf ! 768: ! 769: \begin{nrtc} ! 770: \item WHAT WE WOULD LIKE: MAGIC! ! 771: ! 772: \item WHAT WE REALLY GET: HARD WORK. ! 773: \end{nrtc} ! 774: \end{bwslide} ! 775: ! 776: ! 777: \begin{bwslide} ! 778: \ctitle {CONCEPT: STUBS} ! 779: ! 780: \begin{nrtc} ! 781: \item A PROCEDURE WHICH IS CALLED LOCALLY BUT EXECUTES REMOTELY ! 782: ! 783: \item IN OUR CONTEXT, A SYNCHRONOUS STUB: ! 784: \begin{nrtc} ! 785: \item INVOKES THE OPERATION ! 786: ! 787: \item AWAITS A RESPONSE ! 788: ! 789: \item RETURNS A RESULT OR ERROR ! 790: \end{nrtc} ! 791: ! 792: \item AN ASYNCHRONOUS STUB: ! 793: \begin{nrtc} ! 794: \item INVOKES THE OPERATION, AND EVENTUALLY ! 795: ! 796: \item DISPATCHES A RESULT OR ERROR HANDLER ! 797: \end{nrtc} ! 798: ! 799: \item WHAT TO DO ABOUT REJECTIONS, NETWORK PROBLEMS, etc.? ! 800: \end{nrtc} ! 801: \end{bwslide} ! 802: ! 803: ! 804: \begin{bwslide} ! 805: \ctitle {ROSY} ! 806: ! 807: \begin{nrtc} ! 808: \item REMOTE OPERATIONS STUB-GENERATOR (YACC-BASED) ! 809: ! 810: \item INPUT: ! 811: \begin{nrtc} ! 812: \item A RO SPEC ! 813: \end{nrtc} ! 814: ! 815: \item OUTPUT: ! 816: \begin{nrtc} ! 817: \item AN ASN.1 SPEC ! 818: ! 819: \item STUB DEFINITIONS FOR C ! 820: ! 821: \item C DATA STRUCTURES FOR RUN-TIME ENVIRONMENT ! 822: ! 823: \item STUB DEFINITIONS FOR LINT ! 824: \end{nrtc} ! 825: \end{nrtc} ! 826: \end{bwslide} ! 827: ! 828: ! 829: \begin{bwslide} ! 830: \ctitle {EXAMPLE:\\ EVAL SERVICE}\small ! 831: ! 832: \vskip.15in ! 833: \begin{verbatim} ! 834: % rosy eval.ry ! 835: EVAL operations: evalOperation read write ! 836: ! 837: EVAL errors: evalError endOfInput ! 838: ! 839: EVAL types: EvalObject Service-Requirements Versions Service-Diagnostic ! 840: Diagnostic-Reason ServiceProblem SecurityProblem ! 841: \end{verbatim} ! 842: \end{bwslide} ! 843: ! 844: ! 845: \begin{bwslide} ! 846: \ctitle {EXAMPLE:\\ STUB DEFINITIONS FOR C}\small ! 847: ! 848: \vskip.15in ! 849: \begin{verbatim} ! 850: #define operation_EVAL_evalOperation 0 ! 851: ! 852: #define stub_EVAL_evalOperation(sd,id,in,rfx,efx,class,roi)\ ! 853: RyStub ((sd), table_EVAL_Operations,\ ! 854: operation_EVAL_evalOperation, (id), NULLIP,\ ! 855: (caddr_t) (in), (rfx), (efx), (class), (roi)) ! 856: ! 857: #define op_EVAL_evalOperation(sd,in,out,rsp,roi)\ ! 858: RyOperation ((sd), table_EVAL_Operations,\ ! 859: operation_EVAL_evalOperation,\ ! 860: (caddr_t) (in), (out), (rsp), (roi)) ! 861: ! 862: ! 863: #define error_EVAL_evalError 0 ! 864: \end{verbatim} ! 865: \end{bwslide} ! 866: ! 867: ! 868: \begin{bwslide} ! 869: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT}\small ! 870: ! 871: \vskip.15in ! 872: \begin{verbatim} ! 873: struct RyOperation table_EVAL_Operations[] = { ! 874: /* OPERATION evalOperation */ ! 875: "evalOperation", operation_EVAL_evalOperation, ! 876: encode_EVAL_evalOperation_argument, ! 877: decode_EVAL_evalOperation_argument, ! 878: free_EVAL_evalOperation_argument, ! 879: 1, encode_EVAL_evalOperation_result, ! 880: decode_EVAL_evalOperation_result, ! 881: free_EVAL_evalOperation_result, ! 882: errors_EVAL_evalOperation, ! 883: ! 884: ... ! 885: ! 886: NULL ! 887: }; ! 888: \end{verbatim} ! 889: \end{bwslide} ! 890: ! 891: ! 892: \begin{bwslide} ! 893: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT\\ (cont.)} ! 894: \small ! 895: ! 896: \vskip.15in ! 897: \begin{verbatim} ! 898: static struct RyError *errors_EVAL_evalOperation[] = { ! 899: &table_EVAL_Errors[0] ! 900: }; ! 901: \end{verbatim} ! 902: \end{bwslide} ! 903: ! 904: ! 905: \begin{bwslide} ! 906: \ctitle {EXAMPLE:\\ C DATA STRUCTURES FOR\\ RUN-TIME ENVIRONMENT\\ (cont.)} ! 907: \small ! 908: ! 909: \vskip.15in ! 910: \begin{verbatim} ! 911: struct RyError table_EVAL_Errors[] = { ! 912: /* ERROR evalError */ ! 913: "evalError", error_EVAL_evalError, ! 914: encode_EVAL_evalError_parameter, ! 915: decode_EVAL_evalError_parameter, ! 916: free_EVAL_evalError_parameter, ! 917: ! 918: ... ! 919: ! 920: NULL ! 921: }; ! 922: \end{verbatim} ! 923: \end{bwslide} ! 924: ! 925: ! 926: \begin{bwslide} ! 927: \ctitle {EXAMPLE:\\ STUB DEFINITIONS FOR LINT}\small ! 928: ! 929: \vskip.15in ! 930: \begin{verbatim} ! 931: int stub_EVAL_evalOperation (sd, id, in, rfx, efx, class, roi) ! 932: int sd, ! 933: id, ! 934: class; ! 935: struct type_EVAL_EvalObject* in; ! 936: IFP rfx, ! 937: efx; ! 938: struct RoSAPindication *roi; ! 939: { ! 940: return RyStub (sd, table_EVAL_Operations, operation_EVAL_evalOperation, ! 941: id, NULLIP, (caddr_t) in, rfx, efx, class, roi); ! 942: } ! 943: \end{verbatim} ! 944: \end{bwslide} ! 945: ! 946: ! 947: \begin{bwslide} ! 948: \ctitle {EXAMPLE:\\ STUB DEFINITIONS FOR LINT (cont.)}\small ! 949: ! 950: \vskip.15in ! 951: \begin{verbatim} ! 952: int op_EVAL_evalOperation (sd, in, out, rsp, roi) ! 953: int sd; ! 954: struct type_EVAL_EvalObject* in; ! 955: caddr_t *out; ! 956: int *rsp; ! 957: struct RoSAPindication *roi; ! 958: { ! 959: return RyOperation (sd, table_EVAL_Operations, operation_EVAL_evalOperation, ! 960: (caddr_t) in, out, rsp, roi); ! 961: } ! 962: \end{verbatim} ! 963: \end{bwslide} ! 964: ! 965: ! 966: \begin{bwslide} ! 967: \ctitle {ROSY LIMITATIONS} ! 968: ! 969: \begin{nrtc} ! 970: \item SOMEWHAT LIMITED IN THE FRONT-END, CURRENTLY RECOGNIZES ONLY ! 971: \begin{nrtc} ! 972: \item \verb"OPERATION" AND \verb"ERROR" MACROS ! 973: \end{nrtc} ! 974: ! 975: \item BUT DOESN'T KNOW ABOUT \verb"OBJECT IDENTIFIER" NOTATION FOR OPERATION ! 976: CODES ! 977: ! 978: \item AND IGNORES THE \verb"LINKED" CLAUSE IN OPERATIONS ! 979: \end{nrtc} ! 980: \end{bwslide} ! 981: ! 982: ! 983: \begin{bwslide} ! 984: \part* {STRUCTURE GENERATOR}\bf ! 985: ! 986: \begin{nrtc} ! 987: \item WHAT WE WOULD LIKE: MAGIC! ! 988: ! 989: \item WHAT WE REALLY GET: HARD WORK. ! 990: \end{nrtc} ! 991: \end{bwslide} ! 992: ! 993: ! 994: \begin{bwslide} ! 995: \ctitle {SERIALIZING DATA STRUCTURES} ! 996: ! 997: \begin{nrtc} ! 998: \item THE BASIC ENCODING RULES SAY HOW TO MAP THE ABSTRACT SYNTAX TO THE ! 999: TRANSFER SYNTAX ! 1000: ! 1001: \item HOW TO MAP DATA STRUCTURES (CONCRETE STRUCTURE) TO THE ABSTRACT SYNTAX? ! 1002: \begin{nrtc} ! 1003: \item \verb"struct { ... }" $\rightarrow$ \verb"ServiceRequirements" ! 1004: \end{nrtc} ! 1005: \end{nrtc} ! 1006: \end{bwslide} ! 1007: ! 1008: ! 1009: \begin{bwslide} ! 1010: \ctitle {A SOLUTION} ! 1011: ! 1012: \begin{nrtc} ! 1013: \item GENERATE C STRUCTURES DIRECTLY FROM ABSTRACT SYNTAX ! 1014: ! 1015: \item GENERATE TRANSLATOR TO DO THE MAPPING ! 1016: \end{nrtc} ! 1017: \end{bwslide} ! 1018: ! 1019: ! 1020: \begin{bwslide} ! 1021: \ctitle {SIMPLE TYPES} ! 1022: ! 1023: \begin{nrtc} ! 1024: \item \verb"BOOLEAN" $\rightarrow$ \verb"char" ! 1025: ! 1026: \item \verb"INTEGER" $\rightarrow$ \verb"int", e.g., ! 1027: \begin{nrtc} ! 1028: \item \verb"typedef long integer;" ! 1029: \end{nrtc} ! 1030: \end{nrtc} ! 1031: \end{bwslide} ! 1032: ! 1033: ! 1034: \begin{bwslide} ! 1035: \ctitle {SIMPLE TYPES (cont.)} ! 1036: ! 1037: \begin{nrtc} ! 1038: \item FOR RANGE-LIMITED INTEGERs, SYMBOLIC VALUES ARE DEFINED AS WELL ! 1039: \small\begin{verbatim} ! 1040: SecurityProblem ::= ! 1041: INTEGER { ! 1042: inappropriateAuthentication(1), ! 1043: invalidCredentials(2), ! 1044: ... ! 1045: } ! 1046: ! 1047: struct type_EVAL_SecurityProblem { ! 1048: integer parm; ! 1049: #define int_EVAL_SecurityProblem_inappropriateAuthentication 1 ! 1050: #define int_EVAL_SecurityProblem_invalidCredentials 2 ! 1051: ... ! 1052: }; ! 1053: \end{verbatim} ! 1054: \end{nrtc} ! 1055: \end{bwslide} ! 1056: ! 1057: ! 1058: \begin{bwslide} ! 1059: \ctitle {SIMPLE TYPES (cont.)} ! 1060: ! 1061: \begin{nrtc} ! 1062: \item \verb"BIT STRING" $\rightarrow$ \verb"struct PElement" ! 1063: \begin{verbatim} ! 1064: Versions ::= ! 1065: BIT STRING { ! 1066: version-1(0), ! 1067: ... ! 1068: } ! 1069: ! 1070: #define type_EVAL_Versions PElement ! 1071: #define bits_EVAL_Versions "\020\01version-1 ..." ! 1072: #define bit_EVAL_Versions_version__1 0 ! 1073: #define free_EVAL_Versions pe_free ! 1074: \end{verbatim} ! 1075: ! 1076: \item \verb"OCTET STRING" $\rightarrow$ \verb"struct qbuf" ! 1077: ! 1078: \item \verb"OBJECT IDENTIFIER" $\rightarrow$ \verb"struct OIDentifier" ! 1079: \end{nrtc} ! 1080: \end{bwslide} ! 1081: ! 1082: ! 1083: \begin{bwslide} ! 1084: \ctitle {COMPLEX TYPES:\\ SEQUENCE OF} ! 1085: ! 1086: \begin{nrtc} ! 1087: \item A LINKED LIST WITH SOME GENERATED NAMES ! 1088: \begin{verbatim} ! 1089: SEQUENCE OF ! 1090: Versions ! 1091: ! 1092: struct element_EVAL_0 { ! 1093: struct type_EVAL_Versions *Versions; ! 1094: ! 1095: struct element_EVAL_0 *next; ! 1096: } *versions; ! 1097: \end{verbatim} ! 1098: \end{nrtc} ! 1099: \end{bwslide} ! 1100: ! 1101: ! 1102: \begin{bwslide} ! 1103: \ctitle {COMPLEX TYPES:\\ SEQUENCE/SET} ! 1104: ! 1105: \begin{nrtc} ! 1106: \item A ``SIMPLE'' STRUCTURE USING TAGS FOR NAMES,\\ WHENEVER POSSIBLE ! 1107: \begin{verbatim} ! 1108: Service-Requirements ::= ! 1109: SEQUENCE { ! 1110: version[0] ! 1111: Versions, ! 1112: ! 1113: credentials[1] ! 1114: Credentials OPTIONAL, ! 1115: ! 1116: ... ! 1117: } ! 1118: ! 1119: struct type_EVAL_Service__Requirements { ! 1120: struct type_EVAL_Versions *version; ! 1121: ! 1122: struct type_EVAL_Credentials *credentials; ! 1123: ! 1124: ... ! 1125: }; ! 1126: \end{verbatim} ! 1127: \end{nrtc} ! 1128: \end{bwslide} ! 1129: ! 1130: ! 1131: \begin{bwslide} ! 1132: \ctitle {COMPLEX TYPES:\\ CHOICE} ! 1133: ! 1134: \begin{nrtc} ! 1135: \item A STRUCTURE WITH A TAG AND A UNION ! 1136: \small\begin{verbatim} ! 1137: Diagnostic-Reason ::= ! 1138: CHOICE { ! 1139: serviceError[1] ! 1140: ServiceProblem, ! 1141: ! 1142: securityError[2] ! 1143: SecurityProblem ! 1144: } ! 1145: ! 1146: struct type_EVAL_Diagnostic__Reason { ! 1147: int offset; ! 1148: #define type_EVAL_Diagnostic__Reason_serviceError 1 ! 1149: #define type_EVAL_Diagnostic__Reason_securityError 2 ! 1150: ! 1151: union { ! 1152: struct type_EVAL_ServiceProblem *serviceError; ! 1153: ! 1154: struct type_EVAL_SecurityProblem *securityError; ! 1155: } un; ! 1156: }; ! 1157: \end{verbatim} ! 1158: \end{nrtc} ! 1159: \end{bwslide} ! 1160: ! 1161: ! 1162: \begin{bwslide} ! 1163: \ctitle {DEFAULT/OPTIONAL} ! 1164: ! 1165: \begin{nrtc} ! 1166: \item A VERY SLICK FACILITY WOULD BE TO SUPPORT THE \verb"DEFAULT" AND ! 1167: \verb"OPTIONAL" CLAUSES FOR COMPLEX TYPES ! 1168: ! 1169: \item BUT, IMPLEMENTATION IS PROBLEMATIC: ! 1170: \begin{nrtc} ! 1171: \item NEED ASN.1 VALUE PARSING IN FRONT-END ! 1172: ! 1173: \item NEED EXTENSIVE SYMBOL TABLE SEMANTICS IN BACK-END ! 1174: \end{nrtc} ! 1175: ! 1176: \item SO, A SIMPLE APPROACH IS TAKEN ! 1177: \begin{nrtc} ! 1178: \item SCALARS ARE HANDLED DIRECTLY: ! 1179: \begin{nrtc} ! 1180: \item BOOLEANS, INTEGERS ! 1181: \end{nrtc} ! 1182: ! 1183: \item NON-SCALARS ARE EXAMINED FOR INEQUALITY TO \verb"NULL" ! 1184: \end{nrtc} ! 1185: \end{nrtc} ! 1186: \end{bwslide} ! 1187: ! 1188: ! 1189: \begin{bwslide} ! 1190: \ctitle {HEURISTICS} ! 1191: ! 1192: \begin{nrtc} ! 1193: \item IF ONLY ONE MEMBER IN CONSTRUCTOR, PULL IT UP ! 1194: \begin{verbatim} ! 1195: ErrorInfo ::= ! 1196: SEQUENCE { ! 1197: errorStatus[0] ! 1198: IMPLICIT ErrorStatus ! 1199: } ! 1200: \end{verbatim} ! 1201: \verb"ErrorInfo" $\rightarrow$ \verb"struct type_EVAL_ErrorStatus" ! 1202: ! 1203: \item TRY TO USE TAGS FOR STRUCTURE NAMES, WHENEVER POSSIBLE ! 1204: \end{nrtc} ! 1205: \end{bwslide} ! 1206: ! 1207: ! 1208: \begin{bwslide} ! 1209: \ctitle {POSY} ! 1210: ! 1211: \begin{nrtc} ! 1212: \item PEPY OPTIONAL STRUCTURE-GENERATOR (YACC-BASED) ! 1213: ! 1214: \item INPUT: ! 1215: \begin{nrtc} ! 1216: \item AN ASN.1 SPEC ! 1217: \end{nrtc} ! 1218: ! 1219: \item OUTPUT: ! 1220: \begin{nrtc} ! 1221: \item AN AUGMENTED ASN.1 SPEC ! 1222: ! 1223: \item C STRUCTURE DEFINITIONS ! 1224: ! 1225: \item ``FREE'' ROUTINES ! 1226: \end{nrtc} ! 1227: \end{nrtc} ! 1228: \end{bwslide} ! 1229: ! 1230: ! 1231: \begin{bwslide} ! 1232: \ctitle {EXAMPLE:\\ EVAL SERVICE}\small ! 1233: ! 1234: \vskip.15in ! 1235: \begin{verbatim} ! 1236: % posy -f -h -o eval-asn.py eval.py ! 1237: EVAL types: EvalObject Service-Requirements Versions Service-Diagnostic ! 1238: Diagnostic-Reason ServiceProblem SecurityProblem ! 1239: \end{verbatim} ! 1240: \end{bwslide} ! 1241: ! 1242: ! 1243: \begin{bwslide} ! 1244: \ctitle {EXAMPLE:\\ C STRUCTURE DEFINITIONS}\scriptsize ! 1245: ! 1246: \vskip.15in ! 1247: \begin{verbatim} ! 1248: Service-Requirements ::= ! 1249: SEQUENCE { ! 1250: version[0] ! 1251: Versions, ! 1252: ! 1253: credentials[1] ! 1254: Credentials OPTIONAL, ! 1255: ! 1256: extensions[2] ! 1257: SET OF Extension ! 1258: OPTIONAL ! 1259: } ! 1260: ! 1261: struct type_EVAL_Service__Requirements { ! 1262: struct type_EVAL_Versions *version; ! 1263: ! 1264: struct type_EVAL_Credentials *credentials; ! 1265: ! 1266: struct member_EVAL_0 { ! 1267: struct type_EVAL_Extension *Extension; ! 1268: ! 1269: struct member_EVAL_0 *next; ! 1270: } *extensions; ! 1271: }; ! 1272: \end{verbatim} ! 1273: \end{bwslide} ! 1274: ! 1275: ! 1276: \begin{bwslide} ! 1277: \ctitle {EXAMPLE:\\ ``FREE'' ROUTINES}\small ! 1278: ! 1279: \vskip.15in ! 1280: \begin{verbatim} ! 1281: free_EVAL_Service__Diagnostic (arg) ! 1282: struct type_EVAL_Service__Diagnostic *arg; ! 1283: { ! 1284: struct element_EVAL_0 *versions, versions_next; ! 1285: ! 1286: if (arg == NULL) ! 1287: return; ! 1288: ! 1289: for (versions = arg -> versions; versions; versions = versions_next) { ! 1290: versions_next = versions -> next; ! 1291: free_EVAL_Versions (versions -> Versions); ! 1292: free ((char *) versions); ! 1293: } ! 1294: arg -> versions = NULL; ! 1295: ! 1296: ... ! 1297: ! 1298: free ((char *) arg); ! 1299: } ! 1300: ! 1301: #define free_EVAL_Versions pe_free ! 1302: \end{verbatim} ! 1303: \end{bwslide} ! 1304: ! 1305: ! 1306: \begin{bwslide} ! 1307: \ctitle {POSY LIMITATIONS} ! 1308: ! 1309: \begin{nrtc} ! 1310: \item STEMS FROM A LACK OF INTELLIGENCE WHEN DEALING WITH COMPLEX ! 1311: ASN.1 VALUE NOTATION: ! 1312: \begin{nrtc} ! 1313: \item USES ``NULL INEQUALITY'' RULE FOR \verb"OPTIONAL" ! 1314: ! 1315: \item HANDLES \verb"DEFAULT" ONLY FOR SCALARS ! 1316: \end{nrtc} ! 1317: \end{nrtc} ! 1318: \end{bwslide} ! 1319: ! 1320: ! 1321: \begin{bwslide} ! 1322: \part* {ELEMENT PARSER}\bf ! 1323: ! 1324: \begin{nrtc} ! 1325: \item WE NOW KNOW ABOUT ! 1326: \begin{nrtc} ! 1327: \item DATA STRUCTURES\ \ \verb"struct { ... }" ! 1328: ! 1329: \item ABSTRACT SYNTAX\ \ \verb"ServiceRequirements" ! 1330: ! 1331: \item TRANSFER SYNTAX\ \ \verb"1f8a ..." ! 1332: \end{nrtc} ! 1333: ! 1334: \item THE \emph{PRESENTATION ELEMENT} TIES THESE TOGETHER ! 1335: \end{nrtc} ! 1336: \end{bwslide} ! 1337: ! 1338: ! 1339: \begin{bwslide} ! 1340: \ctitle {PRESENTATION ELEMENTS} ! 1341: ! 1342: \begin{nrtc} ! 1343: \item AN INTERNAL FORM FOR AN INSTANCE OF A TYPE DESCRIBED BY ABSTRACT ! 1344: SYNTAX ! 1345: ! 1346: \item CAN REPRESENT ANY ASN.1 TYPE AS EITHER ! 1347: \begin{nrtc} ! 1348: \item A STRING OF OCTETS OR BITS ! 1349: ! 1350: \item A LINKED-LIST OF PRESENTATION ELEMENTS ! 1351: \end{nrtc} ! 1352: ! 1353: \item THE CONCEPTUAL MAPPING IS: ! 1354: \begin{nrtc} ! 1355: \item \verb"struct { ... }" $\rightarrow$ \verb"ServiceRequirements" ! 1356: \end{nrtc} ! 1357: ! 1358: \item THE ACTUAL MAPPING IS: ! 1359: \begin{nrtc} ! 1360: \item \verb"struct { ... }" $\rightarrow$ \verb"struct PElement" ! 1361: \end{nrtc} ! 1362: \end{nrtc} ! 1363: \end{bwslide} ! 1364: ! 1365: ! 1366: \begin{bwslide} ! 1367: \ctitle {PEPY} ! 1368: ! 1369: \begin{nrtc} ! 1370: \item PRESENTATION ELEMENT PARSER (YACC-BASED) ! 1371: ! 1372: \item INPUT: ! 1373: \begin{nrtc} ! 1374: \item AN AUGMENTED ASN.1 SPEC ! 1375: \end{nrtc} ! 1376: ! 1377: \item OUTPUT: ! 1378: \begin{nrtc} ! 1379: \item AN ENCODER ! 1380: ! 1381: \item A DECODER ! 1382: ! 1383: \item A PRETTY-PRINTER ! 1384: \end{nrtc} ! 1385: \end{nrtc} ! 1386: \end{bwslide} ! 1387: ! 1388: ! 1389: \begin{bwslide} ! 1390: \ctitle {EXAMPLE:\\ EVAL SERVICE}\small ! 1391: ! 1392: \vskip.15in ! 1393: \begin{verbatim} ! 1394: % pepy eval-asn.py ! 1395: EVAL encode none none: EvalObject Service-Requirements Versions ! 1396: Service-Diagnostic Diagnostic-Reason ServiceProblem SecurityProblem ! 1397: ! 1398: EVAL none decode none: EvalObject Service-Requirements Versions ! 1399: Service-Diagnostic Diagnostic-Reason ServiceProblem SecurityProblem ! 1400: \end{verbatim} ! 1401: \end{bwslide} ! 1402: ! 1403: ! 1404: \begin{bwslide} ! 1405: \ctitle {STATIC FACILITIES:\\ REVIEW} ! 1406: ! 1407: \vskip.15in ! 1408: \diagram[p]{figureB-1} ! 1409: \end{bwslide} ! 1410: ! 1411: ! 1412: \begin{bwslide} ! 1413: \ctitle {NEW DEVELOPMENT:\\ PEPSY} ! 1414: ! 1415: \begin{nrtc} ! 1416: \item PEPY WRITES LL(1) C ROUTINES ! 1417: \begin{nrtc} ! 1418: \item STRAIGHT-FORWARD TO IMPLEMENT\\ ! 1419: BUT LARGE CODE SIZE ! 1420: \end{nrtc} ! 1421: ! 1422: \item NEW WORK HAS RESULTED IN A COMPILER THAT PRODUCES ! 1423: \begin{nrtc} ! 1424: \item C STRUCTURE DEFINITIONS (LIKE POSY) ! 1425: ! 1426: \item COMPILED TABLES ! 1427: ! 1428: \item AN LL(1) INTERPRETER ! 1429: \end{nrtc} ! 1430: CALLED PEPSY ! 1431: ! 1432: \item RESULT IS SMALLER CODE AND FASTER COMPILES ! 1433: \end{nrtc} ! 1434: \end{bwslide} ! 1435: ! 1436: ! 1437: \begin{bwslide} ! 1438: \ctitle {EXAMPLE: PEPSY} ! 1439: ! 1440: \vskip.15in ! 1441: \begin{quote}\small\begin{verbatim} ! 1442: % rosy -pepsy eval.ry ! 1443: EVAL operations: evalOperation read write ! 1444: ! 1445: EVAL errors: evalError endOfInput ! 1446: ! 1447: EVAL types: EvalObject Service-Requirements Versions Service-Diagnostic ! 1448: Diagnostic-Reason ServiceProblem SecurityProblem ! 1449: ! 1450: % pepsy -A -f -h eval.py ! 1451: EVAL types: EvalObject Service-Requirements Versions Service-Diagnostic ! 1452: Diagnostic-Reason ServiceProblem SecurityProblem ! 1453: ! 1454: % cc -c EVAL_tables.c ! 1455: ... ! 1456: \end{verbatim}\end{quote} ! 1457: \end{bwslide} ! 1458: ! 1459: ! 1460: \begin{bwslide} ! 1461: \ctitle {STATIC FACILITIES:\\ PEPSY} ! 1462: ! 1463: \vskip.15in ! 1464: \diagram[p]{figureB-23} ! 1465: \end{bwslide} ! 1466: ! 1467: ! 1468: \begin{bwslide} ! 1469: \part {DYNAMIC FACILITIES}\bf ! 1470: ! 1471: \begin{nrtc} ! 1472: \item RUN-TIME ENVIRONMENT ! 1473: ! 1474: \item BOILERPLATE FOR INVOKERS ! 1475: ! 1476: \item BOILERPLATE FOR PERFORMERS ! 1477: \end{nrtc} ! 1478: \end{bwslide} ! 1479: ! 1480: ! 1481: \begin{bwslide} ! 1482: \ctitle {DYNAMIC FACILITIES\\ OVERVIEW} ! 1483: ! 1484: \vskip.15in ! 1485: \diagram[p]{figureB-2} ! 1486: \end{bwslide} ! 1487: ! 1488: ! 1489: \begin{bwslide} ! 1490: \part* {RUN-TIME ENVIRONMENT}\bf ! 1491: ! 1492: \begin{nrtc} ! 1493: \item RUN-TIME ENVIRONMENT RESPONSIBLE FOR ``CIVILIZING'' REMOTE OPERATIONS ! 1494: SERVICE ! 1495: ! 1496: \item IMPORTANT TRADE-OFF: ! 1497: \begin{nrtc} ! 1498: \item FLEXIBILITY FOR SIMPLICITY ! 1499: \end{nrtc} ! 1500: ! 1501: \item IN \emph{THE COOKBOOK}, \verb"ROSYLIB" IMPLEMENTS THE RUN-TIME ! 1502: ENVIRONMENT ! 1503: \end{nrtc} ! 1504: \end{bwslide} ! 1505: ! 1506: ! 1507: \begin{bwslide} ! 1508: \ctitle {DATA STRUCTURES} ! 1509: ! 1510: \begin{nrtc} ! 1511: \item RECALL THAT ROSY GENERATES TABLES IN ADDITION TO STUBS ! 1512: ! 1513: \item FOR EACH OPERATION, A TABLE IS DEFINED CONTAINING: ! 1514: \begin{nrtc} ! 1515: \item NAME AND NUMBER OF OPERATION ! 1516: ! 1517: \item ARGUMENT ENCODE/DECODE/FREE ROUTINES ! 1518: ! 1519: \item RESULT ENCODE/DECODE/FREE ROUTINES ! 1520: ! 1521: \item ERROR TABLE ! 1522: \end{nrtc} ! 1523: \end{nrtc}\small ! 1524: ! 1525: \begin{verbatim} ! 1526: ... ! 1527: ! 1528: /* OPERATION evalOperation */ ! 1529: "evalOperation", operation_EVAL_evalOperation, ! 1530: encode_EVAL_evalOperation_argument, ! 1531: decode_EVAL_evalOperation_argument, ! 1532: free_EVAL_evalOperation_argument, ! 1533: 1, encode_EVAL_evalOperation_result, ! 1534: decode_EVAL_evalOperation_result, ! 1535: free_EVAL_evalOperation_result, ! 1536: errors_EVAL_evalOperation, ! 1537: ! 1538: ... ! 1539: \end{verbatim} ! 1540: \end{bwslide} ! 1541: ! 1542: ! 1543: \begin{bwslide} ! 1544: \ctitle {DATA STRUCTURES (cont.)} ! 1545: ! 1546: \begin{nrtc} ! 1547: \item FOR EACH ERROR, A TABLE IS DEFINED CONTAINING: ! 1548: \begin{nrtc} ! 1549: \item NAME AND NUMBER OF ERROR ! 1550: ! 1551: \item PARAMETER ENCODE/DECODE/FREE ROUTINES ! 1552: \end{nrtc} ! 1553: \end{nrtc}\small ! 1554: ! 1555: \begin{verbatim} ! 1556: ... ! 1557: ! 1558: /* ERROR evalError */ ! 1559: "evalError", error_EVAL_evalError, ! 1560: encode_EVAL_evalError_parameter, ! 1561: decode_EVAL_evalError_parameter, ! 1562: free_EVAL_evalError_parameter, ! 1563: ! 1564: ... ! 1565: \end{verbatim} ! 1566: \end{bwslide} ! 1567: ! 1568: ! 1569: \begin{bwslide} ! 1570: \ctitle {A TABLE-DRIVEN APPROACH} ! 1571: ! 1572: \begin{nrtc} ! 1573: \item RUN-TIME ENVIRONMENT SHOULD BE GENERALIZED TO WORK WITH THE LARGEST ! 1574: POSSIBLE SET OF APPLICATIONS USING REMOTE OPERATIONS ! 1575: ! 1576: \item A TABLE-DRIVEN APPROACH PERMITS US TO DECOUPLE OPERATION-SPECIFIC ! 1577: INFORMATION ! 1578: \begin{nrtc} ! 1579: \item WHAT ARGUMENTS REPRESENTED, HOW THEY ARE ENCODED, etc. ! 1580: \end{nrtc} ! 1581: FROM OPERATION-GENERIC INFORMATION ! 1582: \begin{nrtc} ! 1583: \item THE OPERATION TAKES ARGUMENTS WHICH MUST BE ENCODED, etc. ! 1584: \end{nrtc} ! 1585: \end{nrtc} ! 1586: \end{bwslide} ! 1587: ! 1588: ! 1589: \begin{bwslide} ! 1590: \ctitle {STUBS REVISITED} ! 1591: ! 1592: \begin{nrtc} ! 1593: \item STUBS DEFINED BY ROSY CALL EITHER THE \verb"RyOperation" OR THE ! 1594: \verb"RyStub" ROUTINE ! 1595: ! 1596: \item THE \verb"RyOperation" ROUTINE IMPLEMENTS A ``POLICY'' ! 1597: \begin{nrtc} ! 1598: \item OPERATION CLASS: SYNCHRONOUS ! 1599: ! 1600: \item INVOCATION IDENTIFIER: UNIQUE NUMBER ! 1601: ! 1602: \item LINKED-INVOCATION ID: NONE ! 1603: ! 1604: \item PRIORITY: NONE ! 1605: \end{nrtc} ! 1606: ! 1607: \item THE \verb"RyStub" ROUTINE IMPLEMENTS A LESS RESTRICTIVE POLICY: ! 1608: \begin{nrtc} ! 1609: \item USER SELECTS OPERATION CLASS AND INVOCATION IDENTIFIER ! 1610: \end{nrtc} ! 1611: \end{nrtc} ! 1612: \end{bwslide} ! 1613: ! 1614: ! 1615: \begin{bwslide} ! 1616: \ctitle {ASYNCHRONOUS STUBS} ! 1617: ! 1618: \begin{nrtc} ! 1619: \item RECALL ! 1620: {\small ! 1621: \begin{verbatim} ! 1622: #define stub_EVAL_evalOperation(sd,id,in,rfx,efx,class,roi)\ ! 1623: RyStub ((sd), table_EVAL_Operations,\ ! 1624: operation_EVAL_evalOperation, (id), NULLIP,\ ! 1625: (caddr_t) (in), (rfx), (efx), (class), (roi)) ! 1626: \end{verbatim}} ! 1627: ! 1628: \item THE MEANING OF THE PARAMETERS: ! 1629: \begin{nrtc} ! 1630: \item \verb"sd": ASSOCIATION-DESCRIPTOR ! 1631: ! 1632: \item \verb"id": INVOCATION IDENTIFIER ! 1633: ! 1634: \item \verb"in": ARGUMENT FOR OPERATION ! 1635: ! 1636: \item \verb"rfx": DISPATCH ROUTINE FOR RESULT ! 1637: ! 1638: \item \verb"efx": DISPATCH ROUTINE FOR ERRORS OR REJECTIONS ! 1639: ! 1640: \item \verb"class": (A)SYNCHRONOUS ! 1641: ! 1642: \item \verb"roi": LOCAL SERVICE INTERFACE INFORMATION ! 1643: \end{nrtc} ! 1644: \end{nrtc} ! 1645: \end{bwslide} ! 1646: ! 1647: ! 1648: \begin{bwslide} ! 1649: \ctitle {INSIDE RYSTUB} ! 1650: ! 1651: \begin{nrtc} ! 1652: \item RUDIMENTARY PARAMETER CHECK ! 1653: ! 1654: \item BUILD PRESENTATION ELEMENT FOR ARGUMENT ! 1655: ! 1656: \item BUILD \emph{ACTIVATION BLOCK} ! 1657: ! 1658: \item ISSUE RO-INVOKE.REQUEST ! 1659: ! 1660: \item IF ASYNCHRONOUS, RETURN ! 1661: ! 1662: \item LOOP, WAITING FOR ANY RESPONSE: ! 1663: \begin{nrtc} ! 1664: \item RO-INVOKE.INDICATION: ! 1665: \begin{nrtc} ! 1666: \item PUSH ACTIVATION BLOCK FOR DISPATCHING OPERATION ! 1667: \end{nrtc} ! 1668: ! 1669: \item RO-RESULT, ERROR, OR REJECTION.INDICATION: ! 1670: \begin{nrtc} ! 1671: \item PARSE OPERATION RESULT OR ERROR PARAMETER AND CALL DISPATCH ! 1672: ROUTINE ! 1673: \begin{verbatim} ! 1674: result = (*fnx) (sd, id, reason, value, roi); ! 1675: \end{verbatim} ! 1676: ! 1677: \item IF RESPONSE WAS FOR US, RETURN ! 1678: \end{nrtc} ! 1679: \end{nrtc} ! 1680: \end{nrtc} ! 1681: \end{bwslide} ! 1682: ! 1683: ! 1684: \begin{bwslide} ! 1685: \ctitle {SYNCHRONOUS STUBS} ! 1686: ! 1687: \begin{nrtc} ! 1688: \item RECALL ! 1689: \begin{verbatim} ! 1690: #define op_EVAL_evalOperation(sd,in,out,rsp,roi)\ ! 1691: RyOperation ((sd), table_EVAL_Operations,\ ! 1692: operation_EVAL_evalOperation,\ ! 1693: (caddr_t) (in), (out), (rsp), (roi)) ! 1694: \end{verbatim} ! 1695: ! 1696: \item THE MEANING OF THE PARAMETERS: ! 1697: \begin{nrtc} ! 1698: \item \verb"sd": ASSOCIATION-DESCRIPTOR ! 1699: ! 1700: \item \verb"in": ARGUMENT FOR OPERATION ! 1701: ! 1702: \item \verb"out": RESULT FOR OPERATION OR PARAMETER FOR ERROR ! 1703: ! 1704: \item \verb"rsp": TELLS HOW TO INTERPRET \verb"out" ! 1705: ! 1706: \item \verb"roi": REJECTION INFORMATION FOR OPERATION ! 1707: \end{nrtc} ! 1708: \end{nrtc} ! 1709: \end{bwslide} ! 1710: ! 1711: ! 1712: \begin{bwslide} ! 1713: \ctitle {INSIDE RYOPERATION} ! 1714: ! 1715: \begin{nrtc} ! 1716: \item RUDIMENTARY PARAMETER CHECK ! 1717: ! 1718: \item BUILD PRESENTATION ELEMENT FOR ARGUMENT ! 1719: ! 1720: \item BUILD \emph{ACTIVATION BLOCK} ! 1721: ! 1722: \item ISSUE RO-INVOKE.REQUEST ! 1723: ! 1724: \item LOOP, WAITING FOR SOME RESPONSE: ! 1725: \begin{nrtc} ! 1726: \item RO-INVOKE.INDICATION: ! 1727: \begin{nrtc} ! 1728: \item PUSH ACTIVATION BLOCK FOR DISPATCHING OPERATION ! 1729: \end{nrtc} ! 1730: ! 1731: \item RO-RESULT, ERROR, OR REJECTION.INDICATION: ! 1732: \begin{nrtc} ! 1733: \item IF FOR US: PARSE OPERATION RESULT OR ERROR PARAMETER AND RETURN ! 1734: ! 1735: \item IF NOT FOR US: STUFF INFORMATION INTO CORRESPONDING ACTIVATION ! 1736: BLOCK ! 1737: \end{nrtc} ! 1738: \end{nrtc} ! 1739: \end{nrtc} ! 1740: \end{bwslide} ! 1741: ! 1742: ! 1743: \begin{bwslide} ! 1744: \ctitle {PERFORMERS} ! 1745: ! 1746: \begin{nrtc} ! 1747: \item REGISTER A DISPATCH ROUTINE FOR EACH OPERATION USING \verb"RyDispatch" ! 1748: \begin{verbatim} ! 1749: RyDispatch (sd, ryo, op, fnx, roi) ! 1750: \end{verbatim} ! 1751: ! 1752: \item THE MEANING OF THE PARAMETERS: ! 1753: \begin{nrtc} ! 1754: \item \verb"sd": ASSOCIATION-DESCRIPTOR ! 1755: ! 1756: \item \verb"ryo": OPERATION TABLE ! 1757: ! 1758: \item \verb"op": OPERATION NUMBER ! 1759: ! 1760: \item \verb"fnx": DISPATCH ROUTINE ! 1761: ! 1762: \item \verb"roi": FAILURE INDICATOR ! 1763: \end{nrtc} ! 1764: \end{nrtc} ! 1765: \end{bwslide} ! 1766: ! 1767: ! 1768: \begin{bwslide} ! 1769: \ctitle {OPERATION DISPATCH} ! 1770: ! 1771: \begin{nrtc} ! 1772: \item WHILE WAITING FOR ``SOMETHING TO HAPPEN'', A RO-INVOKE.INDICATION ! 1773: CAUSES AN ACTIVATION BLOCK TO BE PUSHED ! 1774: ! 1775: \item THE PRESENTATION ELEMENT FOR THE ARGUMENT IS PARSED INTO A STRUCTURE ! 1776: AND THE DISPATCH ROUTINE IS CALLED: ! 1777: \begin{verbatim} ! 1778: result = (*fnx) (sd, ryo, rox, arg, roi) ! 1779: \end{verbatim} ! 1780: ! 1781: \item DISPATCH ROUTINE HAS THREE OPTIONS ! 1782: \begin{nrtc} ! 1783: \item \verb"RyDsResult": TO RETURN A RESULT ! 1784: ! 1785: \item \verb"RyDsError": TO RETURN AN ERROR ! 1786: ! 1787: \item \verb"RyDsUReject": TO REJECT AN OPERATION ! 1788: \end{nrtc} ! 1789: \end{nrtc} ! 1790: \end{bwslide} ! 1791: ! 1792: ! 1793: \begin{bwslide} ! 1794: \ctitle {CLEAN-UP} ! 1795: ! 1796: \begin{nrtc} ! 1797: \item WHEN AN ASSOCIATION IS ABORTED (e.g., DUE TO NETWORK FAILURE), ! 1798: SOMETHING MUST BE DONE WITH ACTIVATION BLOCKS ! 1799: ! 1800: \item IDEALLY, WOULD LIKE TO: ! 1801: \begin{nrtc} ! 1802: \item RETAIN THIS STATE, ! 1803: ! 1804: \item RE-ESTABLISH THE ASSOCIATION, AND ! 1805: ! 1806: \item CONTINUE WHERE WE LEFT OFF ! 1807: \end{nrtc} ! 1808: ! 1809: \item NO SUCH LUCK, ACTIVATION BLOCKS ARE FLUSHED! ! 1810: \begin{nrtc} ! 1811: \item A LOT OF HARD ISSUES NEED TO BE RESOLVED IN ORDER TO DO THE ! 1812: ``RIGHT THING'' ! 1813: ! 1814: \item ACTUALLY, FOR ASYNCHRONOUS INVOCATIONS, A REJECTION IS ! 1815: PASSED UP ! 1816: \end{nrtc} ! 1817: \end{nrtc} ! 1818: \end{bwslide} ! 1819: ! 1820: ! 1821: \begin{bwslide} ! 1822: \part* {BOILERPLATE FOR INVOKERS}\bf ! 1823: ! 1824: \begin{nrtc} ! 1825: \item THE PROBLEM WITH BOILERPLATE IS THAT IT'S BORING ! 1826: ! 1827: \item SO, WE'LL CONSIDER ONLY THE HIGHLIGHTS ! 1828: \end{nrtc} ! 1829: \end{bwslide} ! 1830: ! 1831: ! 1832: \begin{bwslide} ! 1833: \ctitle {INVOKING AN OPERATION} ! 1834: ! 1835: \begin{nrtc} ! 1836: \item ALTHOUGH \emph{THE COOKBOOK} TRIED TO MAKE THINGS SIMPLE, ! 1837: CALLING A STUB IS NOT EASY ! 1838: \end{nrtc} ! 1839: \end{bwslide} ! 1840: ! 1841: ! 1842: \begin{bwslide} ! 1843: \ctitle {ASYNCHRONOUS INVOCATION}\small ! 1844: ! 1845: \hrule\vskip.15in ! 1846: \begin{tgrind} ! 1847: \let\linebox=\relax ! 1848: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1849: \input figureB-3\relax ! 1850: \end{tgrind} ! 1851: \end{bwslide} ! 1852: ! 1853: ! 1854: \begin{bwslide} ! 1855: \ctitle {ASYNCHRONOUS INVOCATION (cont.)}\small ! 1856: ! 1857: \hrule\vskip.15in ! 1858: \begin{tgrind} ! 1859: \let\linebox=\relax ! 1860: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1861: \input figureB-4\relax ! 1862: \end{tgrind} ! 1863: \end{bwslide} ! 1864: ! 1865: ! 1866: \begin{bwslide} ! 1867: \ctitle {ASYNCHRONOUS INVOCATION (cont.)}\small ! 1868: ! 1869: \hrule\vskip.15in ! 1870: \begin{tgrind} ! 1871: \let\linebox=\relax ! 1872: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1873: \input figureB-5\relax ! 1874: \end{tgrind} ! 1875: \end{bwslide} ! 1876: ! 1877: ! 1878: \begin{bwslide} ! 1879: \ctitle {ASYNCHRONOUS INVOCATION (cont.)}\small ! 1880: ! 1881: \hrule\vskip.15in ! 1882: \begin{tgrind} ! 1883: \let\linebox=\relax ! 1884: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1885: \input figureB-6\relax ! 1886: \end{tgrind} ! 1887: \end{bwslide} ! 1888: ! 1889: ! 1890: \begin{bwslide} ! 1891: \ctitle {ASYNCHRONOUS INVOCATION (cont.)}\small ! 1892: ! 1893: \hrule\vskip.15in ! 1894: \begin{tgrind} ! 1895: \let\linebox=\relax ! 1896: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1897: \input figureB-7\relax ! 1898: \end{tgrind} ! 1899: \end{bwslide} ! 1900: ! 1901: ! 1902: \begin{bwslide} ! 1903: \ctitle {SIMPLIFIED ASYNCHRONOUS INVOCATION}\small ! 1904: ! 1905: \hrule\vskip.15in ! 1906: \begin{tgrind} ! 1907: \let\linebox=\relax ! 1908: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1909: \input figureB-8\relax ! 1910: \end{tgrind} ! 1911: \end{bwslide} ! 1912: ! 1913: ! 1914: \begin{bwslide} ! 1915: \ctitle {SYNCHRONOUS INVOCATION}\small ! 1916: ! 1917: \hrule\vskip.15in ! 1918: \begin{tgrind} ! 1919: \let\linebox=\relax ! 1920: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1921: \input figureB-9\relax ! 1922: \end{tgrind} ! 1923: \end{bwslide} ! 1924: ! 1925: ! 1926: \begin{bwslide} ! 1927: \ctitle {SYNCHRONOUS INVOCATION (cont.)}\small ! 1928: ! 1929: \hrule\vskip.15in ! 1930: \begin{tgrind} ! 1931: \let\linebox=\relax ! 1932: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1933: \input figureB-10\relax ! 1934: \end{tgrind} ! 1935: \end{bwslide} ! 1936: ! 1937: ! 1938: \begin{bwslide} ! 1939: \ctitle {SYNCHRONOUS INVOCATION (cont.)}\small ! 1940: ! 1941: \hrule\vskip.15in ! 1942: \begin{tgrind} ! 1943: \let\linebox=\relax ! 1944: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1945: \input figureB-11\relax ! 1946: \end{tgrind} ! 1947: \end{bwslide} ! 1948: ! 1949: ! 1950: \begin{bwslide} ! 1951: \part* {BOILERPLATE FOR PERFORMERS}\bf ! 1952: ! 1953: \begin{nrtc} ! 1954: \item THE PROBLEM WITH BOILERPLATE IS THAT IT'S BORING ! 1955: ! 1956: \item SO, WE'LL CONSIDER ONLY THE HIGHLIGHTS ! 1957: \end{nrtc} ! 1958: \end{bwslide} ! 1959: ! 1960: ! 1961: \begin{bwslide} ! 1962: \ctitle {PERFORMING AN OPERATION} ! 1963: ! 1964: \begin{nrtc} ! 1965: \item WHEN AN ACTIVATION BLOCK IS PUSHED, ! 1966: THE DISPATCH ROUTINE IS CALLED ! 1967: \end{nrtc} ! 1968: \end{bwslide} ! 1969: ! 1970: ! 1971: \begin{bwslide} ! 1972: \ctitle {PERFORMING AN OPERATION (cont.)}\small ! 1973: ! 1974: \hrule\vskip.15in ! 1975: \begin{tgrind} ! 1976: \let\linebox=\relax ! 1977: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1978: \input figureB-12\relax ! 1979: \end{tgrind} ! 1980: \end{bwslide} ! 1981: ! 1982: ! 1983: \begin{bwslide} ! 1984: \ctitle {PERFORMING AN OPERATION (cont.)}\small ! 1985: ! 1986: \hrule\vskip.15in ! 1987: \begin{tgrind} ! 1988: \let\linebox=\relax ! 1989: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 1990: \input figureB-13\relax ! 1991: \end{tgrind} ! 1992: \end{bwslide} ! 1993: ! 1994: ! 1995: \begin{bwslide} ! 1996: \ctitle {PERFORMING AN OPERATION (cont.)}\small ! 1997: ! 1998: \hrule\vskip.15in ! 1999: \begin{tgrind} ! 2000: \let\linebox=\relax ! 2001: \def\_{\ifstring{\char'137}\else\underline{\ }\fi} ! 2002: \input figureB-14\relax ! 2003: \end{tgrind} ! 2004: \end{bwslide} ! 2005: ! 2006: ! 2007: \begin{bwslide} ! 2008: \ctitle {DYNAMIC FACILITIES:\\ REVIEW} ! 2009: ! 2010: \vskip.15in ! 2011: \diagram[p]{figureB-2} ! 2012: \end{bwslide} ! 2013: ! 2014: ! 2015: \ifpractical ! 2016: \let\foo=\relax ! 2017: \else ! 2018: \begin{bwslide} ! 2019: \ctitle {FOR FURTHER READING} ! 2020: ! 2021: \begin{nrtc} ! 2022: \item Volume 4: The Applications Cookbook ! 2023: ! 2024: \item The Applications Cookbook\\ ! 2025: Julian P.~Onions and Marshall T.~Rose\\ ! 2026: Proceedings, Fourth International Symposium on Computer Message ! 2027: Systems, September, 1988 ! 2028: \end{nrtc} ! 2029: \end{bwslide} ! 2030: ! 2031: \let\foo=\endinput ! 2032: \fi ! 2033: \foo ! 2034: ! 2035: ! 2036: \begin{bwslide} ! 2037: \part {EXTRA FOR EXPERTS!}\bf ! 2038: ! 2039: \begin{nrtc} ! 2040: \item THESE TOOLS CAN BE GENERALIZED FOR OTHER APPLICATION ENVIRONMENTS ! 2041: ! 2042: \item NEVER CONFUSE PROGRAMMATIC INTERFACES WITH USER INTERFACES ! 2043: \end{nrtc} ! 2044: \end{bwslide} ! 2045: ! 2046: ! 2047: \begin{bwslide} ! 2048: \ctitle {NETWORK MANAGEMENT} ! 2049: ! 2050: \begin{nrtc} ! 2051: \item SUPPOSE YOU HAVE A SIMPLE NETWORK MANAGEMENT PROTOCOL WITH OPERATIONS ! 2052: TO ! 2053: \begin{nrtc} ! 2054: \item GET A VARIABLE ! 2055: ! 2056: \item GET A ROW IN A TABLE ! 2057: \end{nrtc} ! 2058: ! 2059: \item AND YOU WANT TO PROTOTYPE MANGEMENT APPLICATIONS ! 2060: \end{nrtc} ! 2061: \end{bwslide} ! 2062: ! 2063: ! 2064: \begin{bwslide} ! 2065: \ctitle {TWO THINGS ARE NEEDED} ! 2066: ! 2067: \begin{nrtc} ! 2068: \item AN APPLICATIONS FRAMEWORK FOR THE USER ! 2069: ! 2070: \item AUTOMATIC GENERATION OF NETWORK MANAGEMENT PDUs ! 2071: \begin{nrtc} ! 2072: \item AND THE GLUE BETWEEN THEM ! 2073: \end{nrtc} ! 2074: \end{nrtc} ! 2075: \end{bwslide} ! 2076: ! 2077: ! 2078: \begin{bwslide} ! 2079: \ctitle {APPLICATIONS FRAMEWORK:\\ AWK} ! 2080: ! 2081: \begin{nrtc} ! 2082: \item A PATTERN SCANNING AND PROCESSING LANGUAGE ! 2083: ! 2084: \item USEFUL FOR PROTOTYPING TEXT-HANDLING APPLICATIONS ! 2085: ! 2086: \item INTERPRETIVE LANGUAGE ! 2087: \end{nrtc} ! 2088: \end{bwslide} ! 2089: ! 2090: ! 2091: \begin{bwslide} ! 2092: \ctitle {AUTOMATIC GENERATION OF\\ NETWORK MANAGEMENT PDUs:\\ THE COOKBOOK} ! 2093: ! 2094: \begin{nrtc} ! 2095: \item USE PEPSY TO DEFINE AND IMPLEMENT API FOR LOW-LEVEL PROTOCOL ! 2096: INTERACTIONS ! 2097: \begin{nrtc} ! 2098: \item IF MANAGEMENT PROTOCOL WAS CMIP, THEN COULD USE ROSY TOO ! 2099: \end{nrtc} ! 2100: ! 2101: \item NOW JUST MODIFY AWK A BIT$\ldots$ ! 2102: \end{nrtc} ! 2103: \end{bwslide} ! 2104: ! 2105: ! 2106: \begin{bwslide} ! 2107: \ctitle {MODIFICATIONS TO AWK:\\ VARIABLES} ! 2108: ! 2109: \begin{nrtc} ! 2110: \item IN FRONT-END, WHEN VARIABLES ARE USED, SEE IF THEY ARE DEFINED ! 2111: IN THE MANAGEMENT INFORMATION BASE ! 2112: ! 2113: \item FOR SIMPLE VARIABLES: ! 2114: \begin{verbatim} ! 2115: sysDescr ! 2116: ! 2117: sysDescr[value] ! 2118: \end{verbatim} ! 2119: ! 2120: \item FOR TABULAR VARIABLES: ! 2121: \begin{verbatim} ! 2122: ifDescr[value] ! 2123: ! 2124: for (i in ifDescr) ! 2125: print "%d: %s", ifIndex, ifDescr; ! 2126: \end{verbatim} ! 2127: \end{nrtc} ! 2128: \end{bwslide} ! 2129: ! 2130: ! 2131: \begin{bwslide} ! 2132: \ctitle {MODIFICATIONS TO AWK:\\ VARIABLES (cont.)} ! 2133: ! 2134: \begin{nrtc} ! 2135: \item WHEN VARIABLE APPEARS IN AN ``RVALUE'', ! 2136: USE MANAGEMENT PROTOCOL TO RETRIEVE VALUE ! 2137: ! 2138: \item ADD A FEW NEW VARIABLES TO HELP OUT ! 2139: \begin{nrtc} ! 2140: \item e.g., AGENT ADDRESS ! 2141: \end{nrtc} ! 2142: ! 2143: \item ONLY TRICKY PART: ! 2144: WHEN TRAVERSING TABLE, RETRIEVE EACH ROW IN ONE OPERATION ! 2145: \begin{nrtc} ! 2146: \item REDUCES NETWORK TRAFFIC ! 2147: ! 2148: \item REDUCES CHANCE OF INCONSISTENT VIEWS ! 2149: \end{nrtc} ! 2150: \end{nrtc} ! 2151: \end{bwslide} ! 2152: ! 2153: ! 2154: \begin{bwslide} ! 2155: \ctitle {MODIFICATIONS TO AWK:\\ DATA TYPING} ! 2156: ! 2157: \begin{nrtc} ! 2158: \item INTEGER: number ! 2159: ! 2160: \item OCTET STRING: string (\verb|"%02x: ... :%02x"|) ! 2161: ! 2162: \item OBJECT IDENTIFIER: string (\verb|"%u. ... .%u"|) ! 2163: ! 2164: \item and so on$\ldots$ ! 2165: \end{nrtc} ! 2166: \end{bwslide} ! 2167: ! 2168: ! 2169: \begin{bwslide} ! 2170: \ctitle {AN EXAMPLE} ! 2171: ! 2172: \vspace{0.5in} ! 2173: \smaller ! 2174: \begin{verbatim} ! 2175: printf "Routing tables\n"; ! 2176: printf "%-15s %-15s %-8s %-6s %-10s %s\n", ! 2177: "Destination", ! 2178: "Gateway", ! 2179: hasunix ? "Flags" : "Type", ! 2180: "Refcnt", ! 2181: "Use", ! 2182: "Interface"; ! 2183: \end{verbatim} ! 2184: \end{bwslide} ! 2185: ! 2186: ! 2187: \begin{bwslide} ! 2188: \ctitle {AN EXAMPLE (cont.)} ! 2189: ! 2190: \vspace{0.5in} ! 2191: \smaller ! 2192: \begin{verbatim} ! 2193: didone = 0; ! 2194: for (i in ipRouteDest) { ! 2195: didone = 1; ! 2196: ! 2197: printf "%-15s %-15s %-8s %-6s %-10s %s (#%d)\n", ! 2198: ipRouteDest == "0.0.0.0" ? "default" : ipRouteDest, ! 2199: ipRouteNextHop, ! 2200: hasunix ? rt_flags(unixIpRouteFlags[i]) \ ! 2201: : rt_type(ipRouteType), ! 2202: hasunix ? unixIpRouteRefCnt[i] : "", ! 2203: hasunix ? unixIpRouteUses[i] : "", ! 2204: ifDescr[ipRouteIfIndex], ! 2205: ipRouteIfIndex; ! 2206: } ! 2207: if (!didone && DIAGNOSTIC) ! 2208: printf "ipRoutingTable: %s\n", DIAGNOSTIC; ! 2209: \end{verbatim} ! 2210: \end{bwslide} ! 2211: ! 2212: ! 2213: \begin{bwslide} ! 2214: \ctitle {AN EXAMPLE (cont.)} ! 2215: ! 2216: \vspace{0.5in} ! 2217: \smaller ! 2218: \begin{verbatim} ! 2219: % gawk -f mib.routes ! 2220: Routing tables ! 2221: Destination Gateway Flags Refcnt Use Interface ! 2222: default 192.52.180.3 UG 5 63813 le0 (#1) ! 2223: 127.0.0.0 127.0.0.1 U 22 31804 lo0 (#2) ! 2224: 192.52.180.0 192.52.180.1 U 7 167235 le0 (#1) ! 2225: \end{verbatim} ! 2226: \end{bwslide}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.