Annotation of 43BSDReno/contrib/isode-beta/doc/practical-osi2/building.tex, revision 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.