Annotation of 43BSDReno/contrib/isode-beta/doc/practical-osi2/building.tex, revision 1.1.1.1

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}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.