high level router architecture and API

<auto97841-revL73yDgGBWk0Htik3J/[email protected]> Fri, 11 Jul 2003 12:45:37 -0700
Newsgroups gmane.comp.security.invisiblenet.iip.devel
Message-ID <[email protected]>
See attached file for a very high level architecture i'm proposing for
the software side of things.  

software architecture?  before network design is done?  

yes.  because we need to delineat responsabilities of what the router
is and is not responsible for, plus make sure its responsible for enough
that it will be usable to real applications.

So, any thoughts on the seperation of things described in that diagram?

mail the list to discuss.

here's what I'm thinking for the client API (the socket layer comm between
the {java,C,python} libs and the socket listener on the router implementation
in that diagram):

Client to Router:
* create session {sessionConfig}
* reconfigure session {sessionID, sessionConfig}
* destroy session {sessionID}
* create lease {sessionID, Lease, leaseRevokationPrivateKey}
* send message {sessionID, payload, destination}
* recieve message {sessionID, msgID}
* report abuse {sessionID, destination, msgID, reason}
= get bandwidth limit {auth}
= set bandwidth limit {auth, BandwidthLimits}
= get trusted routers {auth}
= set trusted routers {auth, Identity[]}
= get address visibility {auth}
= set address visibility {auth, boolean}
= get address rotation period {auth}
= set address rotation period {auth, numHours}
= force address rotation {auth}
= add peers {auth, RouterInfo[]}
= get peers {auth}

Router to Client:
* session status {sessionID, ['Created','Updated','Destroyed']}
* request lease {sessionID, gwRouterHash, tunnel, start, end}
* message status {sessionID, msgID, ['Accepted','Sent','Failed']}
* message available {sessionID, msgID}
* deliver message {sessionID, msgID, payload}
* report abuse {sessionID, reason}
= bandwidth limits {BandwidthLimits}
= trusted routers {Identity[]}
= address visibility {boolean}
= address rotation period {numHours}
= last address rotation date {date}
= peers {RouterInfo[]}

Key: "*" are normal methods
     "=" are administrative methods

Todo: describe data structures, define bitbuckets, and formalize semantics

Again, thoughts?

-jrandom
routerArchitecture.png (image/png, 26.5 KB) - not displayed