jrp-origin


Network Working Group                                    FX of Phenoelit
Request for Comments: XXXX                                     Phenoelit 
Category: Informational                                     January 2002

                      Joint Routing Protocol 

Status of this Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.

Copyright Notice

   Copyright (C) Phenoelit Group - as long as someone still understands
   the meaning of copyrights at all after implementation and more or
   less extensive testing of this protocol and it's features.

Management Summary
   
   The Joint Routing Protocol is designed to make any given number of
   people look equally stupid using only one joint. It is basically
   an improved version of having any given number of people sit in
   a management meeting for approximately eight hours.

Application

   Although the protocol itself is not strictly limited to digital
   machines in general and the Internet in particular, it can be
   implemented for both. The main application of this protocol
   comes from the fact that the Internet community at large has a 
   great need for this protocol to be standardized.

Introduction
 
   The Joint Routing Protocol (JRP) is designed to overcome problems
   arising during gatherings of more than one entity participating in
   the application of certain gifts of nature. These includes (but are 
   not limited to) smoking of any kind of cigarette (better known as 
   joint) that contains the substance known as THC.

   The goal is, for any given amount of entities to distribute the 
   effects of the substance THC equally between all of them. Since
   physiological and technical conditions may vary significantly between
   different participating entities, a protocol for distribution is
   required.

Terms used 

   The following terms are used throughout the protocol definition:

   Element of Interest (EoI)
      The device that contains the substance THC. It is assumed that
      every PARTICIPANT (see below) is able to apply this device to
      himself more or less effectively.

   CURRENT HOLDER (CH)
      The participating entity that currently possesses the element of
      interest.

   REQUESTOR (REQ)
      One or more participating entities that would like to become the
      CURRENT HOLDER.

   PARTICIPANT (PA)
      Any entity participating in the protocol communication and willing
      to become at least once a CH or REQ.

   AREA
      The AREA describes the protocol space of the underlying transport
      mechanism. This might be any media driven by electricity, light or
      sound. The default media is a gas consisting mainly of Oxygen,
      carbon dioxide and other parts that uses sonic transmission.
      The AREA MAY contain entities that are not PAs - these are ignored
      and will be automatically ignored if the JRP protocol run is
      successful.

   The terms MAY, SHOULD, SHOULD NOT, MUST and MUST NOT are used
   according to RFC 2119. The rest is pure bullshit.

States of processing - general overview

   The protocol's execution begins at the point where the Element of
   Interest (probably a joint) is engaged. This is usually the case if
   the element of interest is lit or set on fire in some other way that
   facilitates the effective application. Throwing the Element of
   Interest into a larger fire (such as a fireplace or tendril) is not
   considered a protocol execution start point but rather a protocol
   violation and a good reason to beat the shit out of the entity 
   doing this.
   
   The protocols execution MAY end at various stages of processing.

   A complete JRP run is marked by the lifetime of the Element of
   Interest. If this lifetime ends (due to whatever reason), the
   protocol run is considered finished. 

   During a protocol run, the general procedure is executed in a loop:
   The CURRENT HOLDER announces the availability of the Element of 
   Interest using a broadcast message to the AREA. Any interested 
   REQUESTOR then reacts to this announcement using a request
   message. The CURRENT HOLDER passes the Element of Interest to the
   first REQUESTOR who's message reached the central processing unit of
   the CURRENT HOLDER. This may be different from the REQUESTOR who
   actually send the request message first but is not considered a
   protocol violation itself - unless the ignored REQUESTOR is ignored
   several times (see Implementation below). 

   In case the end of life for the Element of Interest is reached, the
   CURRENT HOLDER announces this using another broadcast message to the
   AREA. 

   The ultimate goal is to reach JRP convergence. Convergence is reached
   if no PARTICIPANT is interested in becoming a REQUESTOR. This is the
   final state of the AREA and there should be no more JRP runs in this
   AREA after this state.
   An AREA (including all PARTICIPANTS) reaches convergence, if the
   last protocol run has come to a state where no JRP messages are
   transmitted anymore for a considerable long period of time. This can
   be the result of no messages of any kind transmitted or just no more
   potential REQUESTORS available. In case the Element of Interest is
   still available and has not yet reached it's end of life, the end of
   life is forced by the CURRENT HOLDER at this point. An optional JRP
   finish request can be used to validate this state (see
   Implementation).

   Various protocol features are defined to handle situations where the
   CURRENT HOLDER violates protocol timers or PARTICIPANTS violate the
   protocol. See the Implementation section for details.

General Implementation Notes

   Timing in this protocol is not very critical and does not require
   time synchronization of any kind between the PARTICIPANTS. This would
   be counterproductive anyway. Every entity is allowed to have it's own
   understanding of the time-space environment and scale. This is a
   desired effect of JRP. In case of huge discrepancies between the time
   scale of several PARTICIPANTS, a general friendly attitude towards
   the point of view of REQUESTORS SHOULD BE taken.

   Although the protocol is based on broadcast, the strength of the
   signal should be adjusted so that only the PARTICIPANTS in the AREA
   can receive the message. There is no need to waste bandwidth of a
   shared medium. The signal strength is not considered an element of
   decision for the CURRENT HOLDER while deciding which REQUESTOR will 
   receive the Element of Interest next.

   Implementation messages highly depend on the medium the protocol is
   run over. This document assumes a clear text protocol - but the
   messages can be replaced by next to anything - as long as they stay
   unique. As long as a clear text protocol implementation seems
   feasible, it SHOULD BE implemented. The messages in this paper SHOULD
   be used unless there is a requirement for internationalization or
   numeric representation.

Implementation

I) Start Phase 

   When starting a protocol run, the CURRENT HOLDER SHOULD take care
   that the Element of Interest is started in a way that makes it's life
   time as long as possible. The CURRENT HOLDER MAY choose to announce 
   the protocol start by the JRP start message:
           "HERE WE GO"

II) Joining

   To become a PARTICIPANT, the entity is required to discover the
   availability of an Element of Interest. This is easily done if there
   is already a JRP run in progress. Joining an AREA as a PARTICIPANT is
   always possible. The newly joined PARTICIPANT SHOULD try to discover
   the state of the other PARTICIPANTS and the JRP run state. If the
   Element of Interest has nearly reached the end of life state, the new
   PARTICIPANT could as well look for the required requisites to create
   a new one rather then trying to join the current run. This makes
   everyone more happy.
   It is not required to announce the transition from an external entity
   to PARTICIPANT in any way.

III) Normal routing

   Normal routing occurs if the CURRENT HOLDER used the Element of
   Interest and wants to forward it to another PARTICIPANT. The CURRENT
   HOLDER SHOULD perform this step after one or two applications of the
   Element of Interest. In this case, the CURRENT HOLDER announces the
   availability using the JRP available message:
           "PING"

   Any PARTICIPANT that wants to become a REQUESTOR will then respond to
   this message by the appropriate JRP request message:
           "PONG"

   Note: Although it might appear as a valid response, the message "BONG"
         is not considered valid . It could be misinterpreted and is 
         therefore a clear protocol violation. The CURRENT HOLDER
         MUST ignore REQUESTORS using different messages.

   After the REQUESTORS send their message one or more times to the
   AREA, the CURRENT HOLDER passes the Element of Interest to the
   REQUESTOR who's message first reached the central processing unit of
   the CURRENT HOLDER. This REQUESTOR becomes the CURRENT HOLDER.

   In case of no REQUESTORS answering to the JRP availability message,
   the CURRENT HOLDER MUST repeat the availability message at least
   three times. Then he MAY continue to apply the Element of Interest
   to himself. If he chooses to not proceed, the CURRENT HOLDER MUST 
   transit the protocol into the forced end of life state.

IV) End of Life

   If the end of life for the Element of Interest is reached, the
   CURRENT HOLDER announces this with the JRE end of life message:
           "Eeergh"
   An alternative implementation of this message is supported:
           "That's it"

V) Forced End of Life

   If the CURRENT HOLDER did not receive any request messages following
   the availability message (see Normal Routing), he MAY choose to
   announce the forced end of life for the Element of Interest using the
   informal message:
           "OK, end"

   Following this optional message, the CURRENT HOLDER will force an end
   of life state to the Element of Interest and finish the JRP run.

VI) Status Messages

   Any CURRENT HOLDER MAY issue status messages to the AREA. These can
   be used to inform other PARTICIPANTS of the effectiveness of the
   current JRP run and therefore shorten the time to convergence. The
   supported status messages are listed below.

           "Oh my god"
           This message indicates that the Element of Interest is highly
           effective.

        "Oh well"
           This message indicates that the Element of Interest is not
           very effective. 

        "Who build this?"
           This status message is a feedback provided to the entity that
           initially built the Element of Interest. The entity that
           builds the next one should consider doing it better since
           this status message normally hints at a bad implementation of
           the current one.

        "Shit"
           This message indicates that the CURRENT HOLDER will probably
           announce the availability of the Element of Interest shortly.

        "Where is the beer?"
           This request is a special message indicating that the CURRENT
           HOLDER will need an additional device containing some liquid
           (preferable beer) to complete his application. The
           PARTICIPANTS can now decide to offer such device to the
           CURRENT HOLDER and delay the next availability message a
           little or refuse to support him and hereby force an
           earlier availability.

VII) Failover Mechanism
 
   Since the protocol is designed to come to a halt in case of
   convergence, the PARTICIPANTS that did not reach convergence so far
   have to take care that the CURRENT HOLDER did not already reach it. If
   this is the case, the CURRENT HOLDER will not announce the
   availability of the Element of Interest to the AREA and therefore
   would break the JRP run. 
   This condition does not require that the CURRENT HOLDER stopped to
   communicate completely. It might happen frequently that the CURRENT
   HOLDER has reached convergence and his JRP protocol stack simply does
   not require any more JRP communication.

   In the case of a not announcing CURRENT HOLDER, a forced passing of
   the Element of Interest is supported. A PARTICIPANT becomes a forcing
   REQUESTOR by issuing the JRP request message several times as unicast
   to the CURRENT HOLDER:
           "PONG,PONG,PONG"

   If the CURRENT HOLDER is for some reason unable to understand the
   request correctly or does no longer react to protocol messages at all
   (because of a faulty protocol stack implementation), the REQUESTOR is
   allowed to obtain the Element of Interest directly. 

   This method SHOULD NOT be used unless the CURRENT HOLDER is not
   reacting in a timely fashion (see notes about timing).

VIII) Unsolicited Request

   During any time in the protocol run, a PARTICIPANT is allowed to
   advance his state to REQUESTOR. This can be done by issuing an
   informal message to the CURRENT HOLDER:
           "Here"

   The CURRENT HOLDER SHOULD cache this information and pass the Element
   of Interest to the early REQUESTOR in case of availability. The
   CURRENT HOLDER MAY run a normal routing step (JRP availability
   message) to validate that the early REQUESTOR has still interest in
   the Element of Interest.

   The unsolicited request SHOULD be used by PARTICIPANTS that got 
   ignored several times during protocol steps although they reacted 
   in a proper way.

IX) Leaving and Rejoining the AREA

   In case a PARTICIPANT needs to leave the AREA for some time, he
   SHOULD announce this using the JRP away message:
           "Back in a few"
   
   The PARTICIPANT MUST NOT expect to be part of the next routing steps.
   Rejoining the AREA is always possible due to the fact that there is
   no announcement message needed to inform other PARTICIPANTS.

X) Preventive Request for a new JRP run

   In case the Element of Interest might reach the end of life state
   frequently until convergence is reached, PARTICIPANTS MAY inform the
   AREA that a new Element of Interest is required shortly. Any
   PARTICIPANT MAY choose to send a message to the AREA or another
   PARTICIPANT:
           "Make one"

   The PARTICIPANT MUST NOT send this message as unicast to the CURRENT
   HOLDER, since he is probably busy performing the application of the
   currently used Element of Interest.

XI) Handling protocol violations

   If any PARTICIPANT violates the protocol, another PARTICIPANT MAY
   choose to inform the violator by sending the JRP protocol violation
   message:
           "Hey!"
   An alternative implementation is supported:
           "Protocol violation"

   This message might SHOULD include an extensive explanation of the
   violation spotted but has no effect on the state of the entity
   violating the protocol. In case there is a loop where multiple
   parties cannot agree on the correct implementation, one side can
   decide to dump core and leave the others the fuck alone. The
   PARTICIPANTS MAY as well choose to split the AREA in two AREAs and
   handling the protocol slightly differently for the sake of
   functionality until one party can prove their claim using this
   document. If none of this can be achieved, all PARTICIPANTS SHOULD
   accept the ruling of the entity who provided the current Element of
   Interest to the AREA.

Security Considerations

   The protocol is totally insecure. It does not provide security for
   the PARTICIPANTS in any way. PARTICIPANTS should try to avoid
   security violations by handling the Element of Interest carefully and
   not misusing the failover mechanism. Also, PARTICIPANTS MAY implement
   sanity checks to make sure the Element of Interest stays the same
   during the protocol run.
   It is especially insecure to drive or operate heavy machinery during of
   after one or more JRP runs - even if a PARTICIPANT comes to the
   (wrong) conclusion it is perfectly OK to do so.

Extensions
 
   In general, extensions to JRP are supported as long as all
   PARTICIPANTS would understand them. PARTICIPANTS MUST NOT use
   protocol extensions unknown to one or more PARTICIPANTS in this AREA.
   All PARTICIPANTS SHOULD announce the use of extensions (and their
   respective version number) to the AREA prior to using them.

   Although the protocol is designed to work via broadcast, special
   implementations may allow the use of underlying multicast protocols.
   The protocol itself does not support multicast since joining the AREA
   does not require any special action. If the underlying medium is a
   MCNB (Multicast capable/ non-broadcast) medium, any message MUST BE 
   directed to all known PARTICIPANTS and MAY be directed to other
   entities not explicitly known as PARTICIPANTS so far.

Multiple Elements of Interest

   Multiple Elements of Interest at a given time are supported. The only
   exception to a normal JRP run is the limitation that a CURRENT
   HOLDER (of which we now have more than one) MUST NOT issue request
   messages to another CURRENT HOLDER who just announced the
   availability of an Element of Interest.

   If there are as many Elements of Interest as there are PARTICIPANTS
   in the current AREA, JRP should not be used for the sake of
   effectiveness.

Internationalization example

   To give an example of internationalization of JRP protocol messages,
   this section provides an official translation to German:

        English Message                        German Message
        "HERE WE GO"                        "Ich mach ma an"
        "PING"                                "PING"
        "PONG"                                "PONG"
        "Eeergh"                        "Ähhrg"
        "That's it"                        "Is tot"
        "OK, end"                        "OK, ich machs tot"
        "Oh my god"                        "Heilige Scheisse"
        "Oh well"                        "Na ja"
        "Who build this?"                "Wer hat den scheiss gebaut?"
        "Shit"                                "Oh Scheisse"
        "Where is the beer?"                "Hat's noch Bier?"
        "PONG,PONG,PONG"                "PONG,PONG,PONG"
        "Here"                                "Heute!"
        "Back in a few"                        "Bin gleich wieder da"
        "Make one"                        "Bau ma"
        "Hey!"                                "Hey!"
        "Protocol violation"                "Neee - falsch"

Credits
   There are many people to thank here. As far as the author knows was
   the idea for this protocol first developed during the Chaos Camp in
   Germany organized by the Chaos Computer Club. 

   For implementation ideas, features and especially extensive testing
   go special thanks to DirkB (who still refuses to choose a handle),
   Zet (for providing plenty of Elements of Interest for test purposes)
   and Marie-Luise, Nico, Brain and Voltage for general testing.

$Id: jrp.txt,v 1.5 2002/01/30 11:44:31 fx Exp fx $

JavaScript license information


(Site generated by E2H, an "Etherpad hypermedia" project by @dcht00). Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


Edit Site

Talk