home *** CD-ROM | disk | FTP | other *** search
/ Handbook of Infosec Terms 2.0 / Handbook_of_Infosec_Terms_Version_2.0_ISSO.iso / text / rfcs / rfc0928.txt < prev    next >
Text File  |  1996-05-07  |  61KB  |  365 lines

  1.  
  2.  
  3. Network Working Group                                    M. A. Padlipsky Request for Comments: 928                                    Mitre Corp.                                                            December 1984 
  4.  
  5.                INTRODUCTION TO PROPOSED DOD STANDARD H-FP 
  6.  
  7.  Status Of This Memo 
  8.  
  9.    This RFC suggests a proposed protocol for the ARPA-Internet    community, and requests discussion and suggestions for improvements.    Distribution of this memo is unlimited. 
  10.  
  11. Important Prefatory Note 
  12.  
  13.    The broad outline of the Host-Front End Protocol introduced here and    described in RFC 929 is the result of the deliberations of a number    of experienced H-FP designers, who sat as a committee of the DoD    Protocol Standards Technical Panel under the author's chairmanship.    The particular protocol to be described is, however, the result of    the deliberations of a small, ad hoc group, who sat as a de facto    subcommittee of the H-FP committee, also under the author's    chairmanship. The protocol, then, follows the consensus of the full    group as to what the new H-FP should "look like," but has not    benefitted from painstaking study by a large number of experienced    H-FP designers and implementers.  (It has been looked at before    release as an RFC by several of them, though.) Even if that were not    the case, it would still be the intent of the designers that the    protocol be subjected to multiple test implementations and probable    iteration before being agreed upon as any sort of "standard".    Therefore, the first order of business is to declare that THIS IS A    PROPOSAL, NOT A FINAL STANDARD, and the second order of business is    to request that any readers of these documents who are able to do    test implementations (a) do so and (b) coordinate their efforts with    the author (617-271-2978 or Padlipsky@USC-ISI.ARPA.). 
  14.  
  15. Historical/Philosophical Context 
  16.  
  17.    Late in May of 1971, the author was presenting a status report on    whether the Multics ARPANET implementation would be ready by the    July 1 deadline declared by the sponsor earlier that month.  Some    controversy developed over the fact that the Multics "NCP" (Network    Control Program--actually a blanket term covering the Host-Host and    Host-IMP protocol interpreters) did not queue requests for    connections.  As the specification explicitly declared the topic to    be one of implementors' choice, the author attempted to avoid the    argument by asking the interrogator what he was up to these days.    The answer was, "Oh, I'm working on the High-Speed Modular IMP now"    (later the Pluribus IMP).  And the proverbial coin dropped:  The    author replied, "I've got a great idea.  Now that we've got some    space to program in the IMP, why don't we separate out most of the 
  18.  
  19.  Padlipsky                                                       [Page 1] 
  20.  
  21.  
  22.  RFC 928                                                    December 1984 Introduction to H-FP 
  23.  
  24.     NCP and do it outboard: the only thing that really matters in the    Host is associating sockets with processes, and if we had common    implementations of all the bit-diddling stuff in the IMPs, we    wouldn't have disputes over the interpretation of the spec and we'd    also save a lot of Host CPU cycles!" 
  25.  
  26.    As far as the author knows, that incident was the beginning of what    came to be called "Network Front-Ends" and, more recently, "Outboard    Processing Environments."  (The name change, by the way, was    motivated by a desire to prevent further confusion between NETWORK    Front Ends--always conceived of as distributed processing mechanisms    for the offloading of intercomputer networking protocols from    Hosts--and traditional communications front-ends, which have no    connotation of bearing protocol interpreters invokable by Host-side    programs.)  At least, the idea was original to him and he later was a    principal designer and the primary author of the first Host-Front End    Protocol.  So, on the one hand, the present document might be marred    for some readers by undertones of parental pride, but on the other    hand, if you like primary sources.... 
  27.  
  28.    The evolution of the outboard processing idea has been dealt with    elsewhere [1]. For present purposes, it should suffice to observe    that some half-a-dozen implementors of "NFE's" of various sorts are    known to the author to have met with success.  The topic of why use    an explicit protocol in the first place (as opposed to emulating a    device, or devices, already known to the Host/operating system)    deserves a word or two here, however.  ([2] deals with it in more    general terms.)  The crucial consideration is that in the general    case you wind up "not doing real networking" if you attach a Host to    a network by known device emulation, where real networking is taken    to mean what has been called "resource sharing" in the ARPANET    literature, and what appears to be dubbed "open system    interconnection" in the ISO literature: Operating systems' built-in    assumptions about known devices--whether terminals, terminal    controllers, or RJE stations--tend to get in the way of the sort of    process-process and eventually procedure-procedure communications    that serve as the basis for applications more interesting than simple    remote login.  To those unfamiliar with the outboard processing    approach, the premise that the way to attach is via an explicit    protocol may be difficult to accept, but to those who have done it,    it makes almost perfect sense. 
  29.  
  30.    To those, by the way, who have worked in intercomputer networking    from the perspective of inboard (Host-side) implementations of    protocol suites, the outboard processing idea often seems to lead to    less than optimal results, especially as to maximizing throughput.    And it is difficult to argue that if a given Host were well and truly 
  31.  
  32.  Padlipsky                                                       [Page 2] 
  33.  
  34.  
  35.  RFC 928                                                    December 1984 Introduction to H-FP 
  36.  
  37.     fine-tuned to "do networking" the insertion of an extra processor    could somehow lead to better networking.  However, for Hosts where    conservation of CPU cycles is an issue, or even where memory is    scarce (i.e., where it's desirable to conserve the resources being    shared), outboarding is clearly the way to go.  For that matter,    viewing outboard processing aright (as a form of distributed    processing) it can be argued that even for extremely powerful    "intelligent work stations"/"personal computers" which have the    resources to spare it still makes sense to outboard in order not to    have to do new implementations of entire protocol suites for each new    such system--always assuming, of course, that the Host-Front End    protocol in play is noticeably less complex than the offloaded    protocols. 
  38.  
  39.    None of this is meant to imply that outboard processing is the ONLY    way to do intercomputer networking, of course.  It is, however, meant    to suggest that outboard processing can be advantageous in a number    of contexts.  Indeed, given the joint advents of microprocessors and    Local Area Networks, a generic bus interface unit which also plays    the role of a NFE (that is, is an Outboard Processing Environment)    even allows for the original intent of "offloading to the IMP" to be    realized, so that a free-standing, possibly fairly expensive NFE need    not be interposed between Host and net.  Note, by the way, that    nothing in the OPE approach requires that ALL Hosts employ OPEs. That    is, the only protocols "seen" beyond the Comm Subnet Processor are    the common intercomputer networking protocols (e.g., all DDN IMPs see    and read IP datagrams). H-FP is strictly a matter between a Host and    its OPE. 
  40.  
  41.    It is also important to be aware that, given the advent of several    different suites of protocols in the networking world, it might well    be the case that the only reasonable way to achieve    "interoperability" might well be to use a suitable H-FP (such as the    one to be presented in the companion RFC) and an Outboard Processing    Environment which is capable of parallel invocation of protcol suites    (with the choice of suite for a given connection being dependent, of    course, on the native suite of the desired target Host and/or    application). 
  42.  
  43.    The unquestionable advantages, then, of the approach, based on ten or    more years of experience and analysis, would seem to be as    follows--always recalling the assumption that the work to implement    and execute the H-FP in play is small compared to the full protocol    suite in question:  As noted, common implementation of a protocol    suite has the automatic advantage of mutual consistency; further,    particularly in the DOD context, it's far easier to procure common 
  44.  
  45.  
  46.  
  47. Padlipsky                                                       [Page 3] 
  48.  
  49.  
  50.  RFC 928                                                    December 1984 Introduction to H-FP 
  51.  
  52.     implementations of standard protocols than to procure different ones    on a per-Host type basis.  Also as noted, if the resources to be    shared are viewed as being the participating Hosts' 
  53.  
  54.    CPU cycles and memories, these resources are conserved by doing  as    much as possible of the networking protocols in an OPE rather than in    the mainframe.  Another, less evident advantage is that having an OPE    effectively insulates a Host against changes in the    outboarded/offloaded protocols--or even changes of the protocols,    should the nascent international protocol standards ever mature    sufficiently to supplant the in-place DOD standards.  (That is, given    an abstract enough interface--in the spirit of the Principle of    Layering--a Host could, for example, go from doing TCP as its    "Host-Host" protocol to, say, ECMA Class 4 as its "Transport"    protocol without taking any particular cognizance of the change,    however unattractive such a change would be to advocates of the    APRANET Reference Model such as the author. See [3] for more on the    implied "Reference Model" issues.) Finally, although a few rather    specialized points could also be adduced, it should be noted that for    network security architectures which are predicated on the ability to    control all means of egress from and ingress to "the net", uniform    use of OPEs is clearly desirable. 
  55.  
  56.    If we can stipulate that an OPE is/can be a good thing, then the    remaining problem is just what the protocol interpreted by a Host and    its OPE ought to be, once it's observed that a standard protocol is    desirable in order to allow for as much commonality as possible among    Host-side interpreters of the protocol.  That is, we envision the    evolution of paradigmatic H-FP PIs which can more or less    straightforwardly be integrated with  various operating systems, on    the one hand, and the ability simply to transplant an H-FP PI from    one instance of a given operating system to other instances of the    same system, much as is currently being attempted in the DODIIS NFE    program.  Again, the major motivation in the DOD context is the    minimizing of procurement problems. 
  57.  
  58. Technical Context 
  59.  
  60.    As noted, some half-a-dozen Host-Front End protocols have been seen    by the author.  Indeed, in December of 1982, a meeting was convened    to allow the developers of those H-FPs to compare their experiences,    with an eye to coming up with a proposal for a DOD standard H-FP;    this paper is a direct result of that meeting.  In the current    section, we present the consensus of the meeting as to the broad    outline of the protocol; in the accompanying document, the current    version of the proposed protocol will be presented, as detailed by    the author and Richard Mandell and Joel Lilienkamp (both of SDC). 
  61.  
  62.  Padlipsky                                                       [Page 4] 
  63.  
  64.  
  65.  RFC 928                                                    December 1984 Introduction to H-FP 
  66.  
  67.     Note, by the way, that in some sense we should probably have changed    the name from H-FP to H-OPEP (or something), but the habit of saying    "H-FP" seems too deeply engrained, despite the fact that it does seem    worthwhile to stop saying "NFE" and start saying "OPE."  (Besides,    H-OPEP looks rather silly.) 
  68.  
  69.    A final preliminary:  all the designers and implementors of H-FPs    present at the December meeting concurred that the true test of any    protocol is how well it implements.  Therefore, until several    implementations of the "new" protocol have been performed and    assessed, it must be understood that the proposed protocol is    precisely that:  a proposal, not a standard. 
  70.  
  71.    Not too surprisingly, the first point on which consensus was reached    is that there are three separable aspects (or "layers") to an H-FP:    At bottom, there must be some physical means for conveying bits from    Host to OPE and from OPE to Host.  As it has always been a premise of    outboard processing that the Host's convenience is paramount, just    what this physical layer is can vary:  typically, a bit-serial    interface is customary, but parallel/DMA interfaces, if available for    the Host and interfaceable to a given OPE, are fair game.  (So would    teleporting the bits be, for that matter.) 
  72.  
  73.    In the middle, there must be a layer to manage the multiplexing of    network "connections" and the control of the flow between Host and    OPE.  If we agree to call the lowest layer the Link and the middle    layer the Channel, one thing which must be noted is that between the    two of them, the Link and Channel layers must be responsible for    reliably conveying the bits between Host and OPE. After all, an OPE'd    Host should not be "weaker" than one with an inboard implementation    of a robust Host-Host protocol such as TCP.  It should be noted that    any Host which "comes with" a suitable implementation of the X.25    interface protocol (where the definition of "suitable" is rather too    complex to deal with here) could, given an OPE conditioned to accept    it, quite cheerfully satisfy the requirements of the lower two    layers. This is not to say that X.25 "is" the mechanization of H-FP's    Link and Channel layers, however; merely that it could be used.  The    protocol spec itself will detail an alternative, less cumbersome    channel layer for Hosts which don't have or want X.25. 
  74.  
  75.    The top layer of H-FP is the most important:  we refer to it as the    Command layer.  Here is where the peer H-FP modules in a given Host    and OPE communicate with each other. Indeed, the segregation of JUST    multiplexing and flow control (plus reliability) into the Channel    Layer is done--in addition to making it easier for Hosts that possess    preexisting software/hardware which could be turned to the    purpose--so as to clarify "what the H-FP is":  it's the commands and 
  76.  
  77.  Padlipsky                                                       [Page 5] 
  78.  
  79.  
  80.  RFC 928                                                    December 1984 Introduction to H-FP 
  81.  
  82.     responses of the Command layer wherewith the Host's processes are    able to manipulate the outboard implementations of the members of a    protocol suite. The use of the phrase "commands and responses" is    rather significant, as it happens. For in the protocol to be proposed    for DOD standardization, unlike all but one of its predecessors,    binary encoded "headers" are not employed; rather, the H-FP commands    are indeed ASCII strings, and the responses (following the practice    of ARPANET FTP) ASCII-encoded numbers. 
  83.  
  84.    There are various reasons for this departure, which initially stemmed    from a desire to have the same NFE be usable for terminal traffic as    well as Host offloading, but the one that seemed to dominate when    consensus was arrived on it as the basis for the new standard is that    it is very much in the original spirit of H-FP.  That is, if you want    to "make things as easy as possible for the Host", it makes a great    deal of sense to offload in a fashion that only requires some sort of    scenario or script ("exec-com"/"command file"/"shell command" are    approximations on some systems) in the Host, rather than requiring a    program, possibly of more complexity than we would like. This is not    to say that we envision all--or even most--Hosts will take the    scenario approach to H-FP mechanization, but rather that the command    orientation chosen allows for the possibility. (It would be useful to    recall that the Channel layer does all the necessary    multiplexing/demultiplexing, so that each channel's  metaphorical    state machine--at least on the Host side--really has very little to    worry about other than "doing its thing.") 
  85.  
  86.    It should be noted that the proposed protocol provides a mechanism    for offloading "all" protocols.  That is, although most "first    generation NFEs" only handled ARPANET Reference Model Layers II and I    (Host-Host and Network Interface--approximately ISO levels 4-1, with    some of L5's functionality included when it comes to service    identifications being handled via Well-Known Sockets in L II), it is    assumed that OPEs will be evolved to handle L III offloading as well    (ISO 5-7).  Indeed, it should also be noted that what is being    addressed here is "the protocol", not "the" OPE.  More will be said    on this topic below, and in the protocol spec itself, but it is    important to realize from the outset that the H-FP being proposed is    intended to be implementable by any number of OPE suppliers/vendors,    so "an" OPE may or may not choose to implement, say, a given file    transfer protocol, but provided it says so in proper H-FP terms and    does offload some other protocols it's still an OPE in our sense of    the term. (Cf. "Issues" and "Non-Issues", below.) 
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  Padlipsky                                                       [Page 6] 
  93.  
  94.  
  95.  RFC 928                                                    December 1984 Introduction to H-FP 
  96.  
  97.  Issues 
  98.  
  99.    The following items are either in some sense still open issues or    bear special emphasis: 
  100.  
  101.    Command Approach 
  102.  
  103.       The most striking feature of the new H-FP, especially to those who       have seen older H-FPs, is the decision to employ       character-oriented commands rather than the more conventional       binary-oriented headers at the Command Layer.  As noted, the       primary motivation was the report that the approach worked well       when it was employed in an H-FP for the Platform Network called       NAP (Network Access Protocol) [4]. In discussions with NAP's       originator, Gerry Bailey, the author was convinced of the       fundamental reasonableness of the approach, but of course that       doesn't have to convince others.  Additional rationales emerged in       discussions with Gary Grossman, the originator of the DCA/DTI       H-FP [5], which is probably the best-known current H-FP and which       furnished the default Channel Layer for the new one:  In the first       place, the text approach makes parsing for the ends of       variable-length parameters easier.  In the second place, it allows       for the possibility of creating a terminal-supporting OPE in a       very straightforward fashion should any OPE developer elect to do       so.  (See below for more on the distinction between OPE developers       and H-FP implementors.) Finally, there's nothing sacred about       binary headers anyway, and just because the text approach is       different doesn't make it "wrong".  So, although it's not out of       the question that the new protocol should back off from the text       approach if reviewers and/or implementors come up with compelling       reasons for doing so, the already frequently encountered reaction       of "it feels funny" isn't compelling.  (It was, indeed, the       author's own initial reaction.)  Besides, "nobody" (not even Gary)       really liked the top layer of the DCA/DTI H-FP. 
  104.  
  105.    X.25 Appropriateness 
  106.  
  107.       Of more concern than how text "feels" is whether X.25 "works".       That is, we understand that many system proprietors would greatly       prefer being able to use "off-the-shelf" software and hardware to       the greatest extent feasible and still be able to do intercomputer       networking according to DOD Standards, which is a major reason why       we decided to take the H-FP commands out of the Channel Layer of       the DCA/DTI H-FP even before we decided to encode them as text.       However, it is by no means clear that any old vendor supplied       "X.25" will automatically be usable as a new H-FP Channel and Link       layer mechanization.  As noted, it all depends upon how Host 
  108.  
  109.  Padlipsky                                                       [Page 7] 
  110.  
  111.  
  112.  RFC 928                                                    December 1984 Introduction to H-FP 
  113.  
  114.        programs (the Command Layer/H-FP Protocol Interpreter in       particular) are able to invoke X.25 on particular systems.  Also,       there might be peculiarities in the handling of some constructs       (the Group and Member fields--or whatever they're called--are a       strong candidate) which could militate against getting JUST       demultiplexing and flow control out of X.25-as-Channel       Link/Layers.  For that matter, it's conceivable that on some       systems only one process can "own" the presumed DCE, but there's       no interprocess communication available between it and the       processes that want to use H-FP.  What that all amounts to, then,       is that we don't pretend to be sufficiently versed in the vagaries       of vendor-idiosyncratic X.25 implementations to claim more than       that we THINK the new H-FP Command Layer should fit "on top of"       X.25 in a Host such that a suitably crafted OPE could look like a       DCE to the low-level Host software and still be an OPE in our       sense of the term.  Finally, some reports on bit-transfer rates       attainable through typical X.25 interfaces give rise to concern as       to whether such a lash-up would be "good" even if it were       feasible. 
  115.  
  116.       DCA/DTI Channel Layer Appropriateness 
  117.  
  118.       The Channel Layer of the DCA/DTI H-FP has been implemented for a       few Host types already, and is being implemented for others (in       particular, as part of the DODIIS NFE project). A delicate       decision is whether to alter the header structure (e.g.--and       perhaps i.e.--to remove the now-superfluous command and response       fields).  On the "con" side are the considerations that       implementations DO exist, and that it's well specified.  On the       "pro" side are that keeping the header as it is is in some sense       "wasteful" and that somebody's going to have to go over the spec       again anyway, to remove that which no longer applies.  (It should       be noted that Gary Grossman was initially tempted to scuttle the       Group and Member trick, but the presence of a similar       dichotomizing in X.25 seems to rule that out.)  One of the       interesting issues during the review phase of the new H-FP, then,       will be the decision about which way to go on the Channel Layer       header in its non-X.25 version.  (NOBODY considers going X.25       only, be it noted.)  By the time the protocol is finalized, it       will, of course, be made clear in the protocol spec, but I'll       probably leave this in the final version of the Introduction just       for historical interest anyway. 
  119.  
  120.    Syntax 
  121.  
  122.       Another point which probably needs close scrutiny during the       review process is the "syntax" of the command lines.  Basically, 
  123.  
  124.  Padlipsky                                                       [Page 8] 
  125.  
  126.  
  127.  RFC 928                                                    December 1984 Introduction to H-FP 
  128.  
  129.        we just took our best shot, but without any claims that it's the       best possible way to express things.  So comments and/or       alternatives are earnestly solicited on this one. 
  130.  
  131.    L III Offloading 
  132.  
  133.       Contrary to the expectations of some, we are allowing for the       offloading of Process/Applications Layer (ARPANET Reference Model       L III) protocols.  Both Bailey and Grossman reported favorably on       the feasibility of this. Two points should be made, however: It's       perfectly fair for a GIVEN OPE implementation not to offload a       given L III protocol, although it would presumably not sell as       well as ones which did.  That is, we're not claiming that by       inventing a mechanization of the feature in the spec we levy a       constraint on everybody who implements "the protocol", (Cf.       Fabrication under Non-Issues, below). Just as we were feeling our       way on syntax in general, we're really feeling our way when it       comes to the L III stuff.  (I'm not even sure I managed to convey       what I meant for "mediation level" to Joel and Dick.)  Again,       suggestions are solicited. 
  134.  
  135.    Security 
  136.  
  137.       During the detailed design pass, we had an intensive discussion       with some of the Blacker design team on the interplay between the       new H-FP and a meant-to-be multilevel-secure OPE such as Blacker.       The conclusion was that by and large "Security" is to be an aspect       of an enhanced H-FP, rather than the standard one. The reasoning       was rather involved, but seems to amount to the following:  Hosts       that are NOT MLS (or "Compartmented") have two significant       properties in our context: They're in the vast majority of       present-day systems.  They have no legitimate need even to tell       their OPEs what they "think" their current System High or       Dedicated Mode level is; that information should be furnished by       some trusted portion of a network security architecture (e.g., a       security enhanced OPE, or a table in a "secure" comm subnet       processor). 
  138.  
  139.       Thus, even having the optional security label/level field in the       Begin command is in some sense overkill, because we're not sure of       any sensible circumstances in which it would be useful, but we put       it in "just in case".  On the other hand, Hosts that ARE       MLS/Compartmented by definition can be permitted to assert what       the level of a given transmission (or perhaps of a given       connection) should be, and their OPEs need to have a mechanism for       learning this.  But it is by no means clear that a given Host (or       even a given OPE) will be so structured as to make the H-FP PI, 
  140.  
  141.  Padlipsky                                                       [Page 9] 
  142.  
  143.  
  144.  RFC 928                                                    December 1984 Introduction to H-FP 
  145.  
  146.        the Channel PI, and the Link PI ALL trustworthy--as they'd have to       be if the security labeling were part of H-FP.  So, we envision       the labeling's being handled by trusted code in both Host and OPE       that will be inserted into the normal processing route at the       appropriate point for the given architecture (presumably "at the       very bottom" of the Host, and "the very top" of the OPE), and that       will place the label in a convenient, known position in the       Host-OPE transmission "chunk" (block/packet/data unit) as the       circumstances dictate. (It's likely--but we wouldn't swear to       it--that a good place would be just before the H-FP command, and       if that's the case then semi-clearly the security enhanced H-FP       PIs would have to "make room" for it in the sense of handing the       Channel Layer a suitably lengthened "chunk".) 
  147.  
  148.       The Host and its OPE should be viewed as a single entity with       regard to labeling requirements in the non-MLS/C case, and either       the OPE will be conditioned to emit the right label or the CSNP       will "know" anyway; in the MLS/C Host and OPE case (and it should       be noted that it's just about impossible to envision a MLS/C Host       which IS outboarded which DOESN'T have a MLS/C OPE) it will depend       on the given security architectures as to whether each "chunk"       needs labeling (i.e., there COULD be trusted H-FP, Channel, and       Link PIs, so that only at channel establishment time does the       label need to be passed), but it seems likely each "chunk" would       need labeling, and we can see how that would happen (as sketched       above). 
  149.  
  150.       This is all, of course, subject to reappraisal when the full-time       Security folks get in the act, but for now, H-FP per se is viewed       as playing no direct role in "Security"--except indirectly, as       noted below under the Symmetric Begins Non-Issue.  (In case       anybody's worrying about the case where the OPE is physically       remote from its Host, by the way, that line would have to be       protected anyway, so the Host/OPE-asa-single-unit view should hold       up.) 
  151.  
  152.    How It Implements 
  153.  
  154.       The final issue to take note of is that one of the central       premises of the Outboard Processing approach has always been that       H-FPs can be invented which implement more compactly on the Host       side than the code they're allowing to be offloaded.  We certainly       think the new H-FP will fulfill that condition, but we'd certainly       like to hear of any evidence to the contrary. 
  155.  
  156.  
  157.  
  158.  
  159.  
  160. Padlipsky                                                      [Page 10] 
  161.  
  162.  
  163.  RFC 928                                                    December 1984 Introduction to H-FP 
  164.  
  165.  Non-Issues 
  166.  
  167.    The following items are declared to be non-issues, in the sense that    even though some people have expressed concern over them we believe    that they are either "not part of the protocol" or resolved already    for reasons that were overlooked by those worried about them: 
  168.  
  169.    Fabrication 
  170.  
  171.       Who builds OPEs isn't within our purview, except to the extent of       hoping a few volunteers come forward to do testcase       implementations of what is, at present, only a paper protocol.       However, beyond agreeing that a few points should be marked as       "Notes to Entrepreneurs" in the spec, we didn't attempt to dictate       how an OPE vendor would behave, beyond the explicit and implicit       dictates of the protocol per se. For example, if a given OPE       doesn't offload SMTP, it jolly well ought to respond with the       appropriate "Function not implemented" code, and if a vendor       claims to accept X.25 for Channel and Link disagreements over what       X.25 "is" are the province of the vendor and the customer, not of       the H-FP spec.  As OPE'S are supposed to be offloading COMMON       protocols in a COMMON fashion, a given OPE should be able to       interoperate with another Host irrespective of whether that Host       even has an OPE, much less whose OPE it is if it's there. Thus,       for example, even though you'd expect to find OPEs that "come       with" their own LANs as a fairly frequent product, we don't appeal       to the notion in the conceptual model; nor do we attempt to       dictate "chunk" sizes at the Channel level. A protocol spec isn't       an implementation spec. 
  172.  
  173.    Symmetric Begins 
  174.  
  175.       For almost as long as there have been H-FPs, there has been       disagreement over whether only the Host can begin a connection or       if the OPE can also take the initiative.  I am delighted to be       able to resolve this one finally:  It turns out there IS a       compelling reason for insisting that THE PROTOCOL include       provision for OPE --> Host Begins, so it's "in" the protocol--but       any Host that doesn't need to deal with them doesn't have to (just       "spell" the "Function not implemented" response code correctly). 
  176.  
  177.       (In case anybody cares, the compelling reason is that if you HAD       an MLS OPE which happened to use a security kernel and a process       per level, you'd need IT to be listening for incoming connection       requests "from the net" rather than having the Host tell it to do       so, for various esoteric reasons--but in order to cater to the       possibility, we want the function in the protocol from the 
  178.  
  179.  Padlipsky                                                      [Page 11] 
  180.  
  181.  
  182.  RFC 928                                                    December 1984 Introduction to H-FP 
  183.  
  184.        beginning, on the grounds that we can envision SOME other uses for       it even in non-MLS environments [unlike the security labeling       trick discussed above, which only seems to make sense for MLS       Hosts/OPEs--that is, it doesn't burden the Host to reject a Begin       every once in a while but it would to go around labeling "chunks"       unnecessarily all the time].) 
  185.  
  186.    Routing 
  187.  
  188.       Concern has been voiced over the issue of what provisions the       protocol should make to deal with the situation where a Host,       probably for traffic/load reasons, has multiple OPEs and the       question arises of which OPE to use/route to.  I claim this is a       non-issue at the protocol level.  If the Host-side H-FP PI gets a       "No resources" response to a Begin, it can go off to another OPE       if it wants to.  "Not our department".  The conceptual model is       that of a Host and AN OPE--which "ought to" be expandable to carry       more load at some level.  If you want multiple links for some       reason, the simplest solution would seem to be to have multiple       Channel Layers as well, but the whole thing just gets too iffy to       have anything sensible to prescribe in the protocol.  In other       words, extending the concept to deal with discrete multiple OPEs       is either a Fabrication sort of thing, or a Notes to Host-side       Implementors sort of thing on a per specific OPE basis. 
  189.  
  190.    Operator Interface 
  191.  
  192.       It's probably implicit in the foregoing, but it might be worth       saying explicitly that the operator interface to a specific OPE is       a non-issue in terms of the protocol, beyond the provision we're       made for "Shutdown coming" responses as a reflection of a probable       operator interface action we imagine most operator interfaces       would provide.  (It might also be worth noting that if your Host       does "color changes", your OPE had better have a trustworthy way       of being told to change the label it plops on all IP datagrams it       emits, but that comes under the heading of an Aside to Specialized       Implementors.) 
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  Padlipsky                                                      [Page 12] 
  205.  
  206.  
  207.  RFC 928                                                    December 1984 Introduction to H-FP 
  208.  
  209.  Fine Points 
  210.  
  211.    There are a couple of known "loose ends" which are exceedingly fine    points in some sense that do bear separate mention: 
  212.  
  213.    The Allocate Event 
  214.  
  215.       While mentally testing to see if the new H-FP would indeed       off-load TCP, we came up against an interesting question: Viewing       H-FP as "just an interface at a distance" to a TCP PI, what about       the Allocate "Interface Event" in the TCP spec?  As far as I'm       concerned, this could be classed as a non-issue, because I submit       that the spec is wrong in declaring that there is such a thing as       a MANDATORY Interface Event whereby the user of a TCP PI lets the       PI know how much data it can take. Granted, you might find such a       thing in most implementations, but what if you were in a virtual       memory environment with segment sharing (or a distributed       supervisor) and you wanted to avoid copies, so all that passed at       the interface to the PI (or even at the interface from the PI) was       a pointer?  That is, the "DOD version" of the TCP spec has fallen       into the trap of assuming things about the execution environment       that it shouldn't have. 
  216.  
  217.       One moral of this is that 
  218.  
  219.          AN INTERFACE TO AN INTERPRETER OF A PROTOCOL IS N*O*T "THE          PROTOCOL". 
  220.  
  221.       Another moral is that the interface to the Host-side H-FP PI is       hard to say much about, but is where the equivalent functionality       will be found if you've offloaded TCP.  That is, it's reasonable       to let the user "tell" the outboard PI at Begin time if big or       small buffers are expected to be in play "net-ward" as part of the       protocol, but the outboard PI is expected to deliver bits to the       Host as they come unless throttled by the Channel Layer, or by       some to-be-invented other discipline to force the OPE to buffer.       (For present purposes, we envision letting the Channel Layer       handle it, but nifty mechanizations of encouraging the OPE to       "make like a buffer" would be at least looked at.)  As a       Fabrication issue, it is the case that "equity" has to be dealt       with with regard to the use of the OPE's resources (especially       buffers) across H-FP connections/channels, but that's a different       issue anyway, touched upon in the final fine point. 
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  Padlipsky                                                      [Page 13] 
  228.  
  229.  
  230.  RFC 928                                                    December 1984 Introduction to H-FP 
  231.  
  232.     Precedence 
  233.  
  234.       Clearly, the existence of a notion of Precedence in DOD protocols       has to get reflected in the outboard PI's implementations. Just       what, if any, role it has in the H-FP, per se, is, however, by no       means clear.  That is, if the Host doesn't take Begins from the       OPE and is "full up" on the number of Server Telnet connections       it's willing to handle, what should happen if a high precedence       SYN comes in on the Telnet Well-Known Socket (in present day       terms)?  Probably the OPE should arbitrarily close a low       precedence connection to make room for the new one, and signal the       Host, but even that assumes the Host will always hurry to be       prepared to do a new passive Begin.  Perhaps we've stumbled across       still another argument in favor of "Symmetric Begins"....  At any       rate, Precedence does need further study--although it shouldn't       deter us from making "the rest" of the protocol work while we're       waiting for inspiration on how to handle Precedence too. 
  235.  
  236. A Note on Host Integration 
  237.  
  238.    The most important thing about Hosts in any intercomputer network is    that they furnish the resources to be shared. The most significant    obstacle to sharing those resources, however, is the fact that almost    invariably they were designed under the assumption that the Host was    a fully autonomous entity.  That is, few operating systems currently    deployed "expect" to be members of a heterogeneous community of    operating systems.  In many cases, this built-in insularity goes so    far as to have applications programs cognizant of the particular type    of terminal from which they will be invoked. 
  239.  
  240.    Intercomputer networking protocols attempt to resolve the problems of    heterogeneity by virtue of presenting appropriate common intermediate    representations (or "virtualizations") of the constructs and concepts    necessary to do resource sharing.  A Host-Host protocol such as TCP    "is" a virtual interprocess communication mechanism; a virtual    terminal protocol such as Telnet obviously is a mechanism for    defining and dealing with virtual terminals; FTP offers common    representations of files; and so on.  It cannot be stressed strongly    enough, though, that this entire approach to intercomputer networking    is predicated on the assumption that the modules which interpret the    protocols (PIs, as we'll refer to them often) will be PROPERLY    integrated into the various participating operating systems.  Even in    the presence of powerful OPEs, wherein the bulk of the work of the    various PIs is performed outboard of the Host, the inboard "hooks"    which serve to interface the outboard PIs to the native system must    not only be present, they must be "right".  The argument parallels    the analysis of the flexible vs. rigid front-ending attachment 
  241.  
  242.  Padlipsky                                                      [Page 14] 
  243.  
  244.  
  245.  RFC 928                                                    December 1984 Introduction to H-FP 
  246.  
  247.     strategy issue of [1]; to borrow an example, if you attempt to    integrate FTP by "looking like" a native terminal user and the    operator forces a message to all terminals, you've got an undetected    pollution of your data stream. So the key issue in attaching Hosts to    networks is not what sort of hardware is required or what sort of    protocol is interpreted by the Host and the OPE (or comm subnet    processor, for that matter), but how the PIs (full or partial) are    made to interrelate with the pre-existing environment. 
  248.  
  249.    It would be well beyond the scope of this document to attempt even to    sketch (much less specify) how to integrate H-FP PIs into each type    of operating system which will be found in the DoD.  An example,    though, should be of use and interest.  Therefore, because it is the    implementation with which we are most intimately familiar, even    though it's been several years, we propose to sketch the Multics    operating system integration of the original ARPANET Network Control    Program (NCP)--which is functionally equivalent to an H-FP PI for    offloading ARM L II and L I--and Telnet.  (A few comments will also    be made about FTP.) Note, by the way, that the sketch is for a    "full-blown" H-FP; that is, shortcuts along the lines of the    scenario-driven approach mentioned above are not dealt with here. 
  250.  
  251.    One of the particularly interesting features of Multics is the fact    that each process possesses an extremely large "segmented virtual    memory".  That is, memory references other than to the segment at    hand (which can itself be up to 256K 36-bit words long) indirect    through a descriptor segment, which is in principle "just another    segment", by segment number and offset within the segment, so that a    single process--or "scheduling and access control entity"--can    contain rather impressive amounts of code and data.  Given that the    code is "pure procedure" (or "re-entrant"), a "distributed    supervisor" approach is natural; each process, then, appears to have    in its address space a copy of each procedure segment (with    system-wide and process-specific data segments handled    appropriately).  Without going too far afield, the distributed    supervisor approach allows interrupts to be processed by whichever    process happens to be running at a given time, although, of course,    interprocess communication may well be a consequence of processing a    particular interrupt. 
  252.  
  253.    A few other necessary background points:  A distinguished process,    called the Answering Service, exists, originally to field interrupts    from terminals and in general to create processes after    authenticating them.  Other shared resources such as line printers    are also managed by distinguished processes, generically known as    "Daemons".  Device driver code, as is customary on many operating    systems, resides at least in part in the supervisor (or hard core 
  254.  
  255.  Padlipsky                                                      [Page 15] 
  256.  
  257.  
  258.  RFC 928                                                    December 1984 Introduction to H-FP 
  259.  
  260.     operating system).  Finally (for our purposes, at least), within a    process all interfaces are by closed subroutine calls and all I/O is    done by generic function calls on symbolically named streams; also,    all system commands (and, of course, user written programs which need    to) use the streams "user_input" and "user_output" for the obvious    purposes.  (At normal process creation time, both user I/O streams    are "attached" to the user's terminal, but either or both can be    attached to any other I/O system interface module instead--including    to one which reads and writes files, which is handy for consoleless    processes.) 
  261.  
  262.    All that almost assuredly doesn't do justice to Multics, but equally    likely is more than most readers of this document want to know, so    let's hope it's enough to make the following integration sketch    comprehensible. (There will be some conscious omissions in the    sketch, and doubtless some unconscious ones, but if memory serves, no    known lies have been included.) 
  263.  
  264.    Recalling that NCP is functionally equivalent to H-FP, let's start    with it. In the first place, the device driver for the 1822 spec    hardware interface resides in the supervisor. (For most systems, the    PI for H-FP's link protocol probably would too.)  In Multics,    interrupt time processing can only be performed by supervisor    segments, so in the interests of efficiency, both the IMP-Host (1822    software) Protocol PI and the multiplexing/demultiplexing aspects of    the Host-Host Protocol PI also reside in the supervisor.  (An H-FP PI    would probably also have its multiplexing/demultiplexing there; that    is, that portion of the Channel Layer code which mediates access to    the OPE and/or decides what process a given message is to be sent to    might well be in the supervisor for efficiency reasons.  It is not,    however, a hard and fast rule that it would be so. The system's    native interprocess communications mechanism's characteristics might    allow all the Channel Layer to reside outside of the supervisor.) 
  265.  
  266.    Even with a very large virtual memory, though, there are    administrative biases against putting too much in the supervisor, so    "everything else" lives outside the supervisor. In fact, there are    two places where the rest of the Host-Host Protocol is interpreted on    Multics, although it is not necessarily the case that an H-FP PI    would follow the same partitioning even on Multics, much less on some    other operating system.  However, with NCP, because there is a    distinguished "control link" over which Host-Host commands are sent    in the NCP's Host-Host protocol, the Multics IMP-Host Protocol PI    relegates such traffic to a Network Daemon process, which naturally    is a key element in the architecture.  (Things would be more    efficient, though, if there weren't a separate Daemon, because other    processes then have to get involved with interprocess communication 
  267.  
  268.  Padlipsky                                                      [Page 16] 
  269.  
  270.  
  271.  RFC 928                                                    December 1984 Introduction to H-FP 
  272.  
  273.     to it; H-FP PI designers take note.)  To avoid traversing the Daemon    for all traffic, though, normal reads and writes (i.e., noncontrol    link traffic) are done by the appropriate user process.  By virtue of    the distributed supervisor approach, then, there is a supervisor call    interface to "the NCP" available to procedures (programs) within user    processes. (The Daemon process uses the same interface, but by virtue    of its ID has the ability to exercise certain privileged primitives    as well.) 
  274.  
  275.    If a native process (perhaps one meaning to do "User Telnet", but not    limited to that) wanted to use the network, it would call the open    primitive of "the NCP", do reads and writes, and so on.  An    interesting point has to do with just how this interface works:  The    reads are inherently asynchronous; that is, you don't know just when    the data from the net are going to be available.  In Multics, there's    an "event" mechanism that's used in the NCP interface that allows the    calling process to decide whether or not it will go blocked waiting    for input when it reads the net (it might want to stay active in    order to keep outputting, but need to be prepared for input as well),    so asynchrony can be dealt with.  In the version of Unix (tm) on    which an early NFE was based, however, native I/O was always    synchronous; so in order to deal with both input from the terminal    and input from the net, that system's User Telnet had to consist of    two processes (which is not very efficient of system resources).    Similar considerations might apply to other operating systems    integrating H-FP; native I/O and interprocess communication    disciplines have to be taken into account in designing.  (Nor can one    simply posit a brand new approach for "the network", because Telnet    will prove to rely even more heavily on native mode assumptions.) 
  276.  
  277.    The other aspect of NCP integration which we should at least touch    on--especially because process-level protocols make no sense without    it--is how "Well-Known Sockets" (WKSs) work. In broad terms, on    Multics the Network Daemon initially "owns" all sockets.  For    Well-Known Sockets, where a particular process-level protocol will be    in effect after a successful connection to a given WKS, code is added    to the Answering Service to call upon the NCP at system    initialization time to be the process "listening" on the WKSs.  (This    is a consequence of the fact that the Answering Service is/was the    only Multics process which can create processes; strategies on other    systems would differ according to their native process creation    disciplines.)  How to get the "right kind of process" will be    sketched in the discussions of the process level protocols, but the    significant notion for now is that typically SOME sort of prior    arrangement would be done by any networked Host to associate the    right kind of process with a WKS. 
  278.  
  279.  
  280.  
  281. Padlipsky                                                      [Page 17] 
  282.  
  283.  
  284.  RFC 928                                                    December 1984 Introduction to H-FP 
  285.  
  286.     Now, we don't expect that the foregoing will enable even the world's    greatest system jock to go out and design the integration of an H-FP    PI for a system that had never been networked (in the ARPANET style    of networking) before. But we propose to stop there and turn to some    comments on process level protocols, for two reasons: In the first    place, it would take us much too far afield to go into significantly    greater detail; and in the second place, because of the functional    equivalence of H-FP and NCP combined with the number of operating    systems which have integrated NCP and, for that matter, TCP/IP, which    are also functionally equivalent to H-FP (used for offloading L II    and L I), models are available in the ARPANET community and concerned    H-FP PI implementors can follow them. 
  287.  
  288.    Turning to Telnet integration, and returning to Multics as an    example, we note that "User Telnet" is straightforward. "All you    need" (for small values of "all") from an INBOARD User Telnet is a    command that gives the user some sort of interface, converts between    the native Multics character set and terminal discipline and the    Network Virtual Terminal equivalents (and as Multics is very generic    when it comes to I/O, that's not hard), and writes and reads "the    net" (more accurately, calls upon the Host-Host protocol PI--or upon    the H-FP PI to get at the H-HP--appropriately).  (One point that's    not obvious:  make the Well-Known Socket "on the other side" a    parameter, defaulting to the Telnet WKS, because you'll want to use    the same command to get at other process-level protocols.)  If    there's an OPE in play which offloads User Telnet, however, things    can be even simpler: the inboard command just reads and writes the    terminal and lets the OUTBOARD User Telnet PI handle the conversion    to and from the Virtual Terminal form (presumably, from and to the    desired local form). 
  289.  
  290.    When it comes to the incoming ("Server") aspects of Telnet, life can    get complicated on some systems for an inboard implementation.    However, fortunately for our purposes, 
  291.  
  292.    Multics' native mechanisms lend themselves readily to integration; an    awareness of the inboard issues will be useful even if in response to    a connection attempt on the Telnet WKS, the (Server) Host is    obligated to associate the connection (the actual logic is somewhat    more complex under the ARPANET Host-Host Protocol, which employs    paired simplex connections) with a process that is prepared to    translate between Telnet and native mode representations and    otherwise "look like" a local user process--that is, in particular    the connection becomes an I/O source/sink to the native command    processor on time-sharing systems.  As indicated, process creation is    taken care of in Multics by having the Answering Service process    listen on the WKS.  Because the Answering Service is in some sense 
  293.  
  294.  Padlipsky                                                      [Page 18] 
  295.  
  296.  
  297.  RFC 928                                                    December 1984 Introduction to H-FP 
  298.  
  299.     just another Multics process, it too does user I/O through the normal    system mechanisms.  So while for local terminals the user I/O streams    are attached through a module called "ttydim" (where "dim" stands for    "device interface module"), NVTs are attached through a functionally    equivalent and identically invoked module called "nttydim" (the    Answering Service knows which DIM to use based on the symbolic    designator of the "line" on which it received the interrupt, as it    happens). 
  300.  
  301.    [The notion of "attaching" the streams bears a bit more explanation:    Attach is a primitive of the Multics generic I/O mechanism which    associates a stream name and a particular DIM (or I/O system    interface module in later terminology); the other I/O primitives    (read, write, etc.) are invoked with the stream name as a parameter    and an I/O "switch" causes the entry point corresponding to the    primitive to be invoked in whichever DIM the stream is currently    attached to.   So a Server Telnet process starts life attached    through nttydim to a particular network connection, while a local    process starts life attached through ttydim to a particular physical    line, and both processes proceed indistinguishably (viewed from    outside the I/O switch, anyway).] 
  302.  
  303.    The pre-existing orderliness that makes things easy on Multics does    not, unfortunately, appear in all operating systems.  Indeed,    delicate choices occasionally have to be made as to WHICH native    terminal to map to on systems that don't do generic I/O in native    mode, and it is likely that for some systems the particular mapping    to bring into play in Server Telnet might be determined by the    particular application program invoked.  This issue can become very    touchy when the application "expects" a "data entry terminal", say.    The Server Telnet for such a system would naturally attempt to    negotiate the "DET" option with the corresponding User Telnet.  But    the user might be at a physical terminal that isn't a member of the    DET class, so that User Telnet must either refuse to negotiate the    option or--and we would recommend this alternative strongly, as it    seems to be within the "spirit" of the protocol--offer some sort of    simulation, however crude, of the behavior of a DET.   Also,    something sensible has to be done on systems where there is no clear    analog of the command processor expected to be managing the Server    process.  (Say, when a "menu" of applications is always displayed on    an available terminal in native mode.) 
  304.  
  305.    A final Telnet integration issue (although other points could be    noted, we're not pretending to be exhaustive and this should be    enough to "give the flavor"):  The Telnet Interrupt Process generic    function calls for particularly careful integration.  Here, the    intent of the function is to virtualize what is called the "quit 
  306.  
  307.  Padlipsky                                                      [Page 19] 
  308.  
  309.  
  310.  RFC 928                                                    December 1984 Introduction to H-FP 
  311.  
  312.     button" on some systems. That is, the user wants the system to    interrupt his process (which may, for example, be in a loop) and get    back to the command processor (or "the system" itself).   On native    character-at-a-time systems, the native mechanism is usually the    entering of a particular "control character"; on native    line-at-a-time systems, the native mechanism is usually the striking    of the "ATTN" or Interrupt button or the "Break" key (sometimes more    than once, to distinguish it from a communication to the executing    program).  But the native mechanisms typically involve interrupt time    code, and Server Telnet typically wouldn't be executing at that    level, so the solution (omitting the intricacies of the interaction    with the NCP or the H-FP PI, which also get into the act) would be to    make use of--in the Multics case--a pre-existing INTRAprocess signal,    or to add such a mechanism (unless the architecture chosen has a    Server Telnet Daemon of some sort, in which case an INTERprocess    signal would be needed). 
  313.  
  314.    The extension of the foregoing to an outboard Server Telnet may not    be obvious, but we won't expend a great deal of time on it here.    Even if "the protocol" is being handled in an OPE, the Host-side    software must be able to associate an H-FP connection with the    command language interpreter of a user process and to respond    appropriately to an H-FP Signal command if it arrives, and the OPE    must know not only the desired character set but also the local    equivalents of Erase and Kill, at the minimum. 
  315.  
  316.    We'll skip FTP integration, on the grounds that this note is already    too lengthy, except to mention that in the OUTBOARD case it's still    going to be necessary to convey the name of the appropriate file and    directory to/from some appropriate Host-side code.  (Similar problems    must be dealt with for outboard handling of "mail" if it's not part    of FTP.) 
  317.  
  318.    One other "integration" issue, which has been hinted at earlier and    about which not much can be said beyond some general guidelines: The    "top edge" of a Host-side H-FP protocol interpreter (i.e., the Host    user program interface, for 
  319.  
  320.    Hosts that are "doing real networking" rather than just using the OPE    to get at User Telnet and/or FTP and to offer Server Telnet and/or    FTP [and maybe "mail"], presumably in the "scenario-driven" fashion    sketched earlier) MUST BE APPROPRIATE TO THE HOST.  In other words,    on Multics, where "everything" is closed subroutines, there would    presumably be a closed subroutine interface with event channels for    reads, pointers to buffers, and all that sort of thing, but on some    other style of operating system, the interface to the H-FP PI might    turn out to be "all" interprocess communication, or to "look like" a 
  321.  
  322.  Padlipsky                                                      [Page 20] 
  323.  
  324.  
  325.  RFC 928                                                    December 1984 Introduction to H-FP 
  326.  
  327.     device of some special class, or "all" system    calls/JSYSs/EOTs/Whatevers.  We can't be much more specific, but we'd    be remiss to convey any impression that H-FP is a "free lunch".  As    noted, an H-FP PI requires the same kind of integration as a generic    NCP--it's just smaller, and serves as insulation against changes (in    the offloaded protocols in general, or in the proximate comm subnet    in particular). 
  328.  
  329. References 
  330.  
  331.    (References [1]-[3] will be available in M. A. Padlipsky's "The    Elements of Networking Style", Prentice Hall, 1985.) 
  332.  
  333.    [1] Padlipsky, M. A., "The Host-Front End Protocol Approach", MTR    3996, Vol. III, MITRE Corp., 1980. 
  334.  
  335.    [2] Padlipsky, M. A., "The Elements of Networking Style", M81-41,    MITRE Corp., 1981. 
  336.  
  337.    [3] Padlipsky, M. A., "A Perspective on the ARPANET Reference Model",    M82-47, MITRE Corp., 1982. 
  338.  
  339.    [4] Bailey, G., "Network Access Protocol", S-216,718, National    Security Agency Central Security Service, 1982. 
  340.  
  341.    [5] Day, J. D., G. R. Grossman, and R. H. Howe, "WWMCCS Host to Front    End Protocol", 78012.C-INFE.14, Digital Technology Incorporated,    1979. 
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363. Padlipsky                                                      [Page 21] 
  364.  
  365.