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