Using the "snarfer":

  Currently the decision about what hosts to RON between is made
  by installing ipfw divert rules for the hosts of interest.
  Perhaps the best way to fix this would be to allow the RON
  client to do two things:

    a)  Automatically add in its own firewall rules
        (I have some support for this so far, and it should work)

    b)  Automatically relay non-RON packets via the normal internet,
        so users can specify overly permissive ipfw rules.
        Would slow down packets that don't get ronned, but would work.

  These two are orthogonal, so I think I'll probably do at least b,
  and probably (a) as well.

  Anyway, to make it work between host 'a' and 'b', on host 'a':

    ipfw add 100 divert 9696 tcp from any to b

  and the symmetric rule on b:

    ipfw add 100 divert 9696 tcp from any to a

  Quite fun.  Shame that it needs FreeBSD and root on both ends.  Gotta
  work on the NAT side of things, and on the TCP relay part.  For the
  latter, grab that userland TCP implementation someone sent to 
  end2end interest a while ago.

---
PORTING

snarf requires divert sockets.  They're available for Linux with
ipchains; see:

http://www.icewalk.com/doclib/howtos/mini/Divert-Sockets-mini-HOWTO.html

Ensure that all raw packets are output properly for their
local host type.

Write an appropriate interface address grabber for the local system.
---



Organization:

Scheduler:
	Provides the main event loop.  Dispatches socket and timer
	events to clients of the scheduler.  Nearly all components
	know about the scheduler.  In some ways it might be nice to
	have the scheduler part of the default constructor for the
	Plumber class, but it's not necessary and seems to tie them
	together in ways that might not be needed.

Plumber:
	The superclass of packet-processing entities.  Plumbers
	have an input and a multiplexed output:

                        ---Type1---> [Type1 Dest]
	----> [Plumber] ---Type2---> [Type2 Dest]
         recv           ---Type3---> [Type3 Dest]
                      dispatch

        as well as a default output.  Plumbers can thus be used
        as type-agnostic pass-through processors or as type-specific
        entities.

class localhost :
  - Contains information about the host upon which we're running:
	- Interface names and addresses
	- The local hostname
	- etc.


class forw :
  - Handles RON forwarding.  

class node:
	Really just a struct.  Holds some information about the
	various nodes and next hops in the RON system.

class pkt:
	Again, mostly a struct, but this way only it knows about
	the contents of the RON header.
