From 489c54be1766844a2b4521bccdab99f85de0debe Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Thu, 30 Oct 2014 15:38:13 +0100 Subject: This is VERSION 1. --- doc/narp.html | 1718 ------------------------------------------------------- doc/narp.pdf | Bin 131165 -> 0 bytes doc/spec-1.html | 1718 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/spec-1.pdf | Bin 0 -> 131165 bytes 4 files changed, 1718 insertions(+), 1718 deletions(-) delete mode 100644 doc/narp.html delete mode 100644 doc/narp.pdf create mode 100644 doc/spec-1.html create mode 100644 doc/spec-1.pdf diff --git a/doc/narp.html b/doc/narp.html deleted file mode 100644 index c9ee0df..0000000 --- a/doc/narp.html +++ /dev/null @@ -1,1718 +0,0 @@ - - - - - No title - - - - - - - - -
- - - -
The NARP protocol specification -
- - - -
A Generic Recursive Communication Protocol for - Networked Applications
-

- In this document we explain the purpose and provide a draft - specification for the NARP protocol, a general-purpose networking - protocol destined to be used in many layers of a new operating system - and networking system. -

-

1Introduction

-

- We begin by remarking that a basic operation in all computer operation - processes consists in naming objects and providing acces to these named - objects. Here are a few examples of naming in real use cases: -

- -

- We propose here a novel architecture with the purpose of unifying all - the naming happening at all levels of the system, with two base concepts - : objects and service. -

- -

- We suggest that a NARP service may be provided on any bidirectionnal - channel of communication supporting the (reliable) sending and recieving - of messages. In addition, NARP objects may implement such a send/recieve - interface ; therefore a NARP service can be channeled into an object. - Such a construction of using a NARP object to access a NARP service is a - fundamental operation that we call recursive multiplexing, or - just multiplexing. -

-

- The NARP protocol is a client/server protocol meant to include a variety - of different operations that may or may not be implemented by a specific - NARP server. -

-

2High-level overview

-

2.1The basic operations on services and - objects

-

- A NARP service is basically any object that implements the following - operations: -

- -

- A NARP object is basically any object that implements the following - operations : -

- -

2.2The basics of the NARP protocol

-

- Given any interface with send/recieve capabilities considered as an - assymetric (client/server) configuration, the following client messages - consitute the basics of the NARP protocol for providing a NARP service - on the interface: -

- -

- The server may also at any moment send a message, including: -

- -

2.3Recursion

-

- If an object is a NARP server, the messages sent to it and recieved from - it are messages of the NARP protocol. Otherwise, they are arbitrary. -

-

2.4Reverse object

-

- Some NARP servers may support reverse object serving: the client creates - an object on the server and handles all the requests arriving to this - object (therefore the initial NARP server only serves as a relay between - the new server and its clients -

-

-
-
-

- 1. Research is to be done on shortcutting mechanisms in - specific situations where too many levels of recursion cause a - performance issue. -

-
-
-
-

- - - 1 - ). A client wishing to act as a reverse object server may use the - following commands: -

- -

- The server may in turn send the following messages concerning the server - object: -

- -

- Once a client is attached to the object, a classical send/recieved - interface is provided. -

-

- Typically, the protocol exchanged over the object is NARP protocol, - therefore enabling the reverse server to provide its own namespace and - other functionnality. -

-

2.5Specific object types and associated - messages

-

2.5.1Objects are sockets

-

- Sockets are the basis of the NARP protocol : attaching to an objects - opens a socket connection to the process serving the object, and when - the connection is accepted, basic send/recieve functionnality is - provided. See also the reverse object protocol described in section 2.4. -

-

2.5.2File objects

-

- Small files may implement the following interface: -

- -

- Big files may implement the following interface: -

- -

2.5.3User IO (terminals…)

-

- Virtual terminals can be seen as objects implementing a simple - send/recieve semantic, where the data transmitted is unstructured (or - structured given a specific terminal data structure). More specific - interfaces can be defined for advanced terminals and GUIs. -

-

2.5.4Specific applications

-

- Specific applications may define custom messages. Examples include: -

- -

- and many other applications yet to be invented. -

-

2.6Big messages

-

- The message size in the NARP protocol is limited to 64kb, and - recommended not to exceed 4kb+header (4kb is the size of a memory page - on many machines). Therefore a possibility would be for the NARP - protocol to include a way to transmit big messages by fragmenting them - into small messages. Optionnal error correction may be included. This - can be useful for example when using put or get - on large files, or reads and writes of - big file portions. The recieving of a large fragmented message may have - a specific implementation allowing the reciever to work with the partial - data as soon as it starts arriving and not having to wait for the whole - message to be transmitted and buffered. Research is yet to be done on - this specific subject. -

-

2.7Permissions

-

- For each attached client the server may keep track of associated - permissions, and accept or reject requests according to those - permissions. The client may use an authentication command to gain - supplementary privileges on the server's ressources. The client may - request a token to delegate it's privileges on a given object to another - client. Advanced right management functionnalities are to be discussed. -

-

2.8Reliability concerns

-

- The NARP protocol relies on the fact that when transmitting a message, - the other end will recieve it. It is nevertheless recommended that NARP - implementations support the repeating of messages if an expected - acknowlegment has not arrived after a given delay. -

-

2.9Example NARP servers

-

2.9.1Virtual NARP server (i.e. NARP - router)

-

- This server implements a namespace where any client may create an empty - object and serve connections to it. Additionnaly, the server may - implement the possibility to create virtual files, virtual directories, - FIFO queues, etc. -

-

- This server may be connected to other virtual NARP servers in order to - provide a global namespace accessible to all. Each virtual NARP server - acts as an endpoint into the network and may have functionnality for - routing the communications to objects to the clients that serve them. -

-

2.9.2NARP file server

-

- This server simply implements access to a filesystem : listed ressources - are the same as the files present in a served directory, each of these - implements the filing protocol (served directly by the file server), and - the creation of files/directories may also be implemented. -

-

2.9.3NARP terminal/GUI server

-

- Clients may create objects on the server ; each of these objects - correspond to a GUI window. Two interfaces may be implemented : text IO - (terminal) and graphical interaction. Advanced terminal interaction - features may be implemented at the protocol level, such as - auto-completion of commands or of text being edited… -

-

- Suggestion for a third kind of window : the data sent by the client - corresponds to a description of the scene in a given markup language and - the server does the rendering. The client can also subscribed to events - such as clicking on an item or entering text. This possibility is to be - explored. -

-

2.9.4NARP e-mail and newsgroup server

-

- Several features to be implemented: -

- -

2.9.5NARP chat server

- -

2.9.6NARP applicative server

-

- TODO… -

-

3Specifics of the NARP protocol

-

3.1Protocol description format

-

- A protocol message is given in the following form: -

- - - - - - - - - - - - -
element typeelement typeelement type
element descriptionelement descriptionelement description
-

- The following element types apply: -

- -

3.2Basic message format

-

- The basic format of a message is : -

- - - - - - - - - - -
int16int16*
message sizemessage typepayload
-

- We will abbreviate by “header” the first 32 bits (4 bytes) - of the message. The list of message types is given in section 3.10.1. -

-

- Messages for communication with an attached ressource will have the - following format : -

- - - - - - - - - - - - -
int16int16int32*
message sizemessage typeressource descriptor (handle)payload
-

- Many client messages awating a response will have a message ID included - ; this message ID is an arbitrary number generated by the client and - used by the server when giving its response. The header then looks like - this: -

- - - - - - - - - - - - -
int16int16int32*
message sizemessage typemessage IDpayload
-

3.3Message list for core NARP protocol

-

- Client messages have an up arrow () next to their name, - while server messages have a down arrow (). -

-

- The core NARP protocol is meant for small size and rapidity (so that - many layers can be encapsulated with minimal overhead), therefore no - acknowlegment is to be sent for recursive send/recieve messages. Other - messages usually imply some kind of action or getting of information, - therefore an acknowlegment or an error is usually sent as a response. -

-

-

Hello
-

-

-

-

- - - - - - - - - - -
int32arr(int32)
headerversionlist of needed/provided interfaces
- -

-
-
-

- When a NARP connection is established, the client is always the - first to send a Hello message. The object may then - respond either with a Hello message indicating that - the requested interfaces can be provided, or with an - Error message. The two common error causes are - interface not implemented and incompatible - versions. -

-
-
-

- For interface numbers : see table in section 3.10.3. -

-
-

-

-

Error
-

-

-

-

- Generic error response message for any operation. -

-
-
- - - - - - - - - - - - -
int32int32str
headerrequest IDerror IDerror string
-
-
-

- Common error IDs are specified in section 3.10.2. -

-
-

-

-

Ack
-

-

-

- - - - - - - - -
int32
headerrequest ID
-
-

- -

-
-

- Generic acknowlegment message for commands that require it. An - acknowlege implies the command has been sucessfully executed - (otherwise an error message is sent). -

-
-

-

-

Stat
-

-

-

- - - - - - - - - - -
int32str
headerrequest IDfilename
-
-

- -

-
-

- The request ID is an ID decided by the client so that it can - identify the answer. -

-
-

-

-

StatR
Response to the - Stat message. -

-

-

- - - - - - - - - - -
int32arr(int32)
headerrequest IDimplemented interface
-
-
-

- Common interface numbers are to be found in section 3.10.3. -

-

- If a Stat query on an object gives a certain list - of interfaces, then when connecting to the object at least all these - interfaces must be included in the server's Hello - message as supported interfaces. -

-
-
-

- Note that some interface numbers correspond to actions that can be - done on the object from the connection where the object exists (e.g. - : symbolic link, directory), and others correspond to actions that - can be performed after attaching to the object (e.g. file, terminal, - …) -

-
-

-

-

List
-

-
- - - - - - - - - - - - - - -
int32int32int32str
headerrequest IDfirst entry numbernumber of entries requestedbase path string
-
-

-

ListR
Response to the - List message. -

-

-

-

- One message is passed for each entry in the requested range: -

-
-
- - - - - - - - - - - - -
int32int32str
headerrequest IDentry numberentry name
-
-
-

- After the directory has finished being enumerated, a supplementary - entry is given with entry number the last valid entry number plus - one and an empty entry name. This supplementary entry is only given - if its (ficious) entry number is included in the range requested by - the client. -

-
-

-

- Possible extension : combine List and Stat so that when the answer to - List is given, information is also given on the object's implemented - interfaces. -

-

-

Attach
-

-
- - - - - - - - - - -
int32str
headerrequest IDfilename
-
-

-

Attached
Response to the - Attach command. -

-

-

- - - - - - - - - - -
int32int32
headerrequest IDhandle
-
-

- -

-
-

- (the handle, ie the ressource descriptor, is attributed by the - server) -

-
-

-

-

Send
-

-

-

- - - - - - - - - - -
int32*
headerhandlepayload
-
-

- -

-
-

- This message does not expect a response. -

-
-

-

-

Recieve
-

-

-

-

- Spontaneous server message indicating some data is sent by an - attached ressource. This message does not expect a response. -

-
-

- -

-
- - - - - - - - - - -
int32*
headerhandlepayload
-
-

-

-

Detach
-

-

-

- - - - - - - - -
int32
headerhandle
-
-

- -

-
-

- This message does not expect a response. -

-
-

-

-

Detached
-

-

-

-

- Spontaneous server message indicating the object has been detached. -

-
-

- -

-
- - - - - - - - -
int32
headerhandle
-
-

-

-

Create
-

-

-

- - - - - - - - - - - - -
int32arr(int32)str
headerrequest IDneeded interfacespath
-
-

- -

-
-

- A create request is accompanied with a list of needed interfaces - that direct the server into creating the corresponding type of - object (e.g. an empty object to be served, a directory, a file, - …) -

-
-

-

-

Created
Response to the - Create command. -

-

-

- - - - - - - - - - -
int32arr(int32)
headerrequest IDimplemented interfaces
-
-

- -

-
-

- Signals that the object has been created, and has corresponding - interfaces associated to it. -

-
-

-

-

Delete
-

-

-

- - - - - - - - - - -
int32str
headerrequest IDpath
-
-

- -

-
-

- This message expects a standard Ack response - message. -

-
-

-

-

Link
-

-

-

- - - - - - - - - - - - -
int32strstr
headerrequest IDdestination pathlink path
-
-
-

- This message expects a standard Ack response - message. -

-

- Semantics of the link object: -

-
-
- -
-

-

-

ReadLink
-

-
- - - - - - - - - - -
int32str
headerrequest IDpath
-
-

-

ReadLinkR
Response to the - ReadLink message. -

-

-

- - - - - - - - - - -
int32str
headerrequest IDlink description
-
-

- -

-
-

- This will only return the first level of linking, ie the link data - directly associated to the link object. -

-
-

-

-

Rename
-

-

-

- - - - - - - - - - - - -
int32strstr
headerrequest IDoriginal pathnew path
-
-

- -

-
-

- This message expects a standard Ack response - message. -

-
-

-

-

Serve
-

-

-

- - - - - - - - - - - - -
int32strarray(int32)
headerrequest IDpathannounced interfaces
-
-
-

- This message is a request for the client to be a reverse server to - an object. The response message to this message is an - Attached message. The handle attributed to the - served object is known as the server handle and is used in - the Incoming and Detach messages. -

-

- To stop serving an object, the client simply sends a - Detach command on the server handle. The semantics - is that all connections that have been openned through the - reverse-served object are preserved when the object stops being - served, and an individual Detach message must be - sent to all of them if we want to close them. -

-
-
-

- The announced interfaces serves to answer - Stat messages on the object while we are serving - it. -

-
-

-

-

Incoming
-

-

-

- - - - - - - - - - -
int32int32
headerserver handleclient hande
-
-

- -

-
-

- This message is sent by the server when another client wishes to - attach to an object reverse-served by this client. The server handle - is the one given as a response to the Serve - message. The client handle is a handle associated to the connection. - The reverse server may reject the connection by issuing a - Detach command on the client handle, or may accept - it using the Accept message given below. -

-
-

-

-

Accept
-

-

-

- - - - - - - - -
int32
headerclient handle
-
-

- -

-
-

- Once a connection has been accepted, the reverse server may at any - moment close it by sending a Detach command on the - corresponding client handle. -

-
-

-

3.4Big message protocol

-

- To be defined. Is it really usefull? What role exactly does it have? Can - it implement repetition in the case where the message hasn't been - acknowledge? … -

-

- Reserved message IDs : [20,30) and [10020,10030). -

-

3.5Authentification and rights managment - commands

-

-

Authenticate
-

-

-

- - - - - - - - - - - - -
int32int32*
headermessage IDauthentification methodauthentification data
-
-
-

- Used to gain access using credentials (user/password, token, - …). Response messages are standard Ack on - success or Error on failure. Autentification - methods include : -

-
-
- -
-

-

-

NewToken
-

-

-

- - - - - - - - - - -
int32str
headermessage IDpath
-
-

- -

-
-

- Requests the server to create an authentication token for accessing - a given object with the privileges of the connected client. Once the - token has been returned, it may be transmitted to another client so - that that client will use it to gain same access to the object. -

-
-

-

-

NewTokenR
Response to the - NewToken message. -

-
- - - - - - - - - - -
int32str
headermessage IDtoken
-
-

- TODO : request account creation, manage user groups and ACLs, … -

-

3.6File protocol

-

- Client messages [50,100) ; server messages [10050,10100). TODO -

-

3.7UI protocols

-

- Client messages [100,200) and server messages [10100,10200). -

-

3.7.1Terminal protocol

-

- TODO -

-

3.7.2Graphical user interface protocol

-

- TODO -

-

3.8Communication protocols

-

- Client messages [200,300) and server messages [10200,10300). -

-

3.8.1Email and newsgroups protocol

-

- Client messages [200,220), server messages - [10200,10220). -

-

3.8.2Instant messaging protocol

-

- Client messages [220,250), server messages - [10220,10250). -

-

3.9Other protocols

-

- Protocols not discussed in this specification may use client messages - with type IDs [1000,10000) and server messages [11000,20000). Overlaps - between several protocols are allowed : the information about - implemented interfaces for an object is meant to disambiguate such - situations. -

-

3.10Table of IDs

-

- The tables presented in this section give the number associated to the - message types. These tables are the reference on the subject ; any - information found somewhere else is wrong if it is not the same as found - here. This is for protocol version 1. -

-

3.10.1Message types

-

-

Base protocol
-

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
message id idmessage id id
Hello010000Stat / StatR1010010
Error10001List / ListR1110011
Ack10002Create / Created1210012
Delete13
Attach / Attached510005Rename14
Send / Recieve610006Link15
Detach / Detached710007ReadLink / - ReadLinkR1610016
Serve8
Incoming10008
Accept9
-
-

-

Authentication & privileges
-

-
- - - - - - - - - - - - - - -
message id id
Authenticate30
NewToken / - NewTokenR3110031
-
-

3.10.2Error messages

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idcause
1Incompatible versions
2Command/interface not implemented
3Invalid request (e.g. : out of bounds)
4Invalid handle
5Attach request rejected
6Action impossible because object is in use (cannot - delete, …)
7No such object (invalid path)
8Could not resolve link
9Incorrect credentials
10Unauthorized
-
-

3.10.3Object interfaces

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
idnamemust implement messages
0servableServe, Accept, - Incoming
1non-NARP insideonce attached, inside data is arbitrary
2NARP serviceonce attached, inside data is a NARP service (ie has - objects, …)
3enumerableList, ListR
4is symlinkReadLink, - ReadLinkR
10fileonce attached, file semantics
11terminalonce attached, terminal semantics
12graphics windowonce attached, GUI semantics
-
-

-

Servable
This interface specifies that the object is - currently an empty object waiting for someone to issue a - Serve command on it, providing it with an - implementation of some interfaces. -

-

-

non-NARP inside
This interfaces indicates that once - attached to the object, the messages sent/recieved to it are not - supposed to be NARP format but any arbitrary format. If this interface - is not specified, then it is expected that the messages transmitted will - follow the general NARP protocol (message format, standard - hello/ack/error messages). -

-

-

NARP service
This interface indicates that once - attached to the object, one can have access to a new NARP namespace - where at least the following operations are supported : - Stat, Attach, Send, - Recieve, Detach. Additionnal messages - may or may not be supported. -

-

4Architecture of a NARP implementation in - OCaml or Haskell

-

- An asynchronous implementation can be easily programmed in functionnal - languages such as OCaml or Haskell, using closures as continuations for - what to do when a (response) message arrives. -

-

- TODO -

-

5Using NARP to design an Operating System

-

- When designing the NARP protocol, we had in mind that it would be - possible to use it in a new operating system design at many levels : - access to devices, process management, memory management, filesystems, - IPC, GUI, … -

-

- Kernel helpers could be developped so that a part of the NARP - multiplexing and demultiplexing takes place in kernel land, before - messages are passed to userspace. This would allow the simplification of - useless mux-demux chains taking place on the same machine. Another - possible helper would be to map a virtual memory region to a NARP - ressource implementing a standard filing protocol, much as memory mapped - files in standard OSes (only this would work with arbitrary ressources). -

-

- TODO -

- - \ No newline at end of file diff --git a/doc/narp.pdf b/doc/narp.pdf deleted file mode 100644 index 26ba059..0000000 Binary files a/doc/narp.pdf and /dev/null differ diff --git a/doc/spec-1.html b/doc/spec-1.html new file mode 100644 index 0000000..c9ee0df --- /dev/null +++ b/doc/spec-1.html @@ -0,0 +1,1718 @@ + + + + + No title + + + + + + + + +
+ + + +
The NARP protocol specification +
+ + + +
A Generic Recursive Communication Protocol for + Networked Applications
+

+ In this document we explain the purpose and provide a draft + specification for the NARP protocol, a general-purpose networking + protocol destined to be used in many layers of a new operating system + and networking system. +

+

1Introduction

+

+ We begin by remarking that a basic operation in all computer operation + processes consists in naming objects and providing acces to these named + objects. Here are a few examples of naming in real use cases: +

+ +

+ We propose here a novel architecture with the purpose of unifying all + the naming happening at all levels of the system, with two base concepts + : objects and service. +

+ +

+ We suggest that a NARP service may be provided on any bidirectionnal + channel of communication supporting the (reliable) sending and recieving + of messages. In addition, NARP objects may implement such a send/recieve + interface ; therefore a NARP service can be channeled into an object. + Such a construction of using a NARP object to access a NARP service is a + fundamental operation that we call recursive multiplexing, or + just multiplexing. +

+

+ The NARP protocol is a client/server protocol meant to include a variety + of different operations that may or may not be implemented by a specific + NARP server. +

+

2High-level overview

+

2.1The basic operations on services and + objects

+

+ A NARP service is basically any object that implements the following + operations: +

+ +

+ A NARP object is basically any object that implements the following + operations : +

+ +

2.2The basics of the NARP protocol

+

+ Given any interface with send/recieve capabilities considered as an + assymetric (client/server) configuration, the following client messages + consitute the basics of the NARP protocol for providing a NARP service + on the interface: +

+ +

+ The server may also at any moment send a message, including: +

+ +

2.3Recursion

+

+ If an object is a NARP server, the messages sent to it and recieved from + it are messages of the NARP protocol. Otherwise, they are arbitrary. +

+

2.4Reverse object

+

+ Some NARP servers may support reverse object serving: the client creates + an object on the server and handles all the requests arriving to this + object (therefore the initial NARP server only serves as a relay between + the new server and its clients +

+

+
+
+

+ 1. Research is to be done on shortcutting mechanisms in + specific situations where too many levels of recursion cause a + performance issue. +

+
+
+
+

+ + + 1 + ). A client wishing to act as a reverse object server may use the + following commands: +

+ +

+ The server may in turn send the following messages concerning the server + object: +

+ +

+ Once a client is attached to the object, a classical send/recieved + interface is provided. +

+

+ Typically, the protocol exchanged over the object is NARP protocol, + therefore enabling the reverse server to provide its own namespace and + other functionnality. +

+

2.5Specific object types and associated + messages

+

2.5.1Objects are sockets

+

+ Sockets are the basis of the NARP protocol : attaching to an objects + opens a socket connection to the process serving the object, and when + the connection is accepted, basic send/recieve functionnality is + provided. See also the reverse object protocol described in section 2.4. +

+

2.5.2File objects

+

+ Small files may implement the following interface: +

+ +

+ Big files may implement the following interface: +

+ +

2.5.3User IO (terminals…)

+

+ Virtual terminals can be seen as objects implementing a simple + send/recieve semantic, where the data transmitted is unstructured (or + structured given a specific terminal data structure). More specific + interfaces can be defined for advanced terminals and GUIs. +

+

2.5.4Specific applications

+

+ Specific applications may define custom messages. Examples include: +

+ +

+ and many other applications yet to be invented. +

+

2.6Big messages

+

+ The message size in the NARP protocol is limited to 64kb, and + recommended not to exceed 4kb+header (4kb is the size of a memory page + on many machines). Therefore a possibility would be for the NARP + protocol to include a way to transmit big messages by fragmenting them + into small messages. Optionnal error correction may be included. This + can be useful for example when using put or get + on large files, or reads and writes of + big file portions. The recieving of a large fragmented message may have + a specific implementation allowing the reciever to work with the partial + data as soon as it starts arriving and not having to wait for the whole + message to be transmitted and buffered. Research is yet to be done on + this specific subject. +

+

2.7Permissions

+

+ For each attached client the server may keep track of associated + permissions, and accept or reject requests according to those + permissions. The client may use an authentication command to gain + supplementary privileges on the server's ressources. The client may + request a token to delegate it's privileges on a given object to another + client. Advanced right management functionnalities are to be discussed. +

+

2.8Reliability concerns

+

+ The NARP protocol relies on the fact that when transmitting a message, + the other end will recieve it. It is nevertheless recommended that NARP + implementations support the repeating of messages if an expected + acknowlegment has not arrived after a given delay. +

+

2.9Example NARP servers

+

2.9.1Virtual NARP server (i.e. NARP + router)

+

+ This server implements a namespace where any client may create an empty + object and serve connections to it. Additionnaly, the server may + implement the possibility to create virtual files, virtual directories, + FIFO queues, etc. +

+

+ This server may be connected to other virtual NARP servers in order to + provide a global namespace accessible to all. Each virtual NARP server + acts as an endpoint into the network and may have functionnality for + routing the communications to objects to the clients that serve them. +

+

2.9.2NARP file server

+

+ This server simply implements access to a filesystem : listed ressources + are the same as the files present in a served directory, each of these + implements the filing protocol (served directly by the file server), and + the creation of files/directories may also be implemented. +

+

2.9.3NARP terminal/GUI server

+

+ Clients may create objects on the server ; each of these objects + correspond to a GUI window. Two interfaces may be implemented : text IO + (terminal) and graphical interaction. Advanced terminal interaction + features may be implemented at the protocol level, such as + auto-completion of commands or of text being edited… +

+

+ Suggestion for a third kind of window : the data sent by the client + corresponds to a description of the scene in a given markup language and + the server does the rendering. The client can also subscribed to events + such as clicking on an item or entering text. This possibility is to be + explored. +

+

2.9.4NARP e-mail and newsgroup server

+

+ Several features to be implemented: +

+ +

2.9.5NARP chat server

+ +

2.9.6NARP applicative server

+

+ TODO… +

+

3Specifics of the NARP protocol

+

3.1Protocol description format

+

+ A protocol message is given in the following form: +

+ + + + + + + + + + + + +
element typeelement typeelement type
element descriptionelement descriptionelement description
+

+ The following element types apply: +

+ +

3.2Basic message format

+

+ The basic format of a message is : +

+ + + + + + + + + + +
int16int16*
message sizemessage typepayload
+

+ We will abbreviate by “header” the first 32 bits (4 bytes) + of the message. The list of message types is given in section 3.10.1. +

+

+ Messages for communication with an attached ressource will have the + following format : +

+ + + + + + + + + + + + +
int16int16int32*
message sizemessage typeressource descriptor (handle)payload
+

+ Many client messages awating a response will have a message ID included + ; this message ID is an arbitrary number generated by the client and + used by the server when giving its response. The header then looks like + this: +

+ + + + + + + + + + + + +
int16int16int32*
message sizemessage typemessage IDpayload
+

3.3Message list for core NARP protocol

+

+ Client messages have an up arrow () next to their name, + while server messages have a down arrow (). +

+

+ The core NARP protocol is meant for small size and rapidity (so that + many layers can be encapsulated with minimal overhead), therefore no + acknowlegment is to be sent for recursive send/recieve messages. Other + messages usually imply some kind of action or getting of information, + therefore an acknowlegment or an error is usually sent as a response. +

+

+

Hello
+

+

+

+

+ + + + + + + + + + +
int32arr(int32)
headerversionlist of needed/provided interfaces
+ +

+
+
+

+ When a NARP connection is established, the client is always the + first to send a Hello message. The object may then + respond either with a Hello message indicating that + the requested interfaces can be provided, or with an + Error message. The two common error causes are + interface not implemented and incompatible + versions. +

+
+
+

+ For interface numbers : see table in section 3.10.3. +

+
+

+

+

Error
+

+

+

+

+ Generic error response message for any operation. +

+
+
+ + + + + + + + + + + + +
int32int32str
headerrequest IDerror IDerror string
+
+
+

+ Common error IDs are specified in section 3.10.2. +

+
+

+

+

Ack
+

+

+

+ + + + + + + + +
int32
headerrequest ID
+
+

+ +

+
+

+ Generic acknowlegment message for commands that require it. An + acknowlege implies the command has been sucessfully executed + (otherwise an error message is sent). +

+
+

+

+

Stat
+

+

+

+ + + + + + + + + + +
int32str
headerrequest IDfilename
+
+

+ +

+
+

+ The request ID is an ID decided by the client so that it can + identify the answer. +

+
+

+

+

StatR
Response to the + Stat message. +

+

+

+ + + + + + + + + + +
int32arr(int32)
headerrequest IDimplemented interface
+
+
+

+ Common interface numbers are to be found in section 3.10.3. +

+

+ If a Stat query on an object gives a certain list + of interfaces, then when connecting to the object at least all these + interfaces must be included in the server's Hello + message as supported interfaces. +

+
+
+

+ Note that some interface numbers correspond to actions that can be + done on the object from the connection where the object exists (e.g. + : symbolic link, directory), and others correspond to actions that + can be performed after attaching to the object (e.g. file, terminal, + …) +

+
+

+

+

List
+

+
+ + + + + + + + + + + + + + +
int32int32int32str
headerrequest IDfirst entry numbernumber of entries requestedbase path string
+
+

+

ListR
Response to the + List message. +

+

+

+

+ One message is passed for each entry in the requested range: +

+
+
+ + + + + + + + + + + + +
int32int32str
headerrequest IDentry numberentry name
+
+
+

+ After the directory has finished being enumerated, a supplementary + entry is given with entry number the last valid entry number plus + one and an empty entry name. This supplementary entry is only given + if its (ficious) entry number is included in the range requested by + the client. +

+
+

+

+ Possible extension : combine List and Stat so that when the answer to + List is given, information is also given on the object's implemented + interfaces. +

+

+

Attach
+

+
+ + + + + + + + + + +
int32str
headerrequest IDfilename
+
+

+

Attached
Response to the + Attach command. +

+

+

+ + + + + + + + + + +
int32int32
headerrequest IDhandle
+
+

+ +

+
+

+ (the handle, ie the ressource descriptor, is attributed by the + server) +

+
+

+

+

Send
+

+

+

+ + + + + + + + + + +
int32*
headerhandlepayload
+
+

+ +

+
+

+ This message does not expect a response. +

+
+

+

+

Recieve
+

+

+

+

+ Spontaneous server message indicating some data is sent by an + attached ressource. This message does not expect a response. +

+
+

+ +

+
+ + + + + + + + + + +
int32*
headerhandlepayload
+
+

+

+

Detach
+

+

+

+ + + + + + + + +
int32
headerhandle
+
+

+ +

+
+

+ This message does not expect a response. +

+
+

+

+

Detached
+

+

+

+

+ Spontaneous server message indicating the object has been detached. +

+
+

+ +

+
+ + + + + + + + +
int32
headerhandle
+
+

+

+

Create
+

+

+

+ + + + + + + + + + + + +
int32arr(int32)str
headerrequest IDneeded interfacespath
+
+

+ +

+
+

+ A create request is accompanied with a list of needed interfaces + that direct the server into creating the corresponding type of + object (e.g. an empty object to be served, a directory, a file, + …) +

+
+

+

+

Created
Response to the + Create command. +

+

+

+ + + + + + + + + + +
int32arr(int32)
headerrequest IDimplemented interfaces
+
+

+ +

+
+

+ Signals that the object has been created, and has corresponding + interfaces associated to it. +

+
+

+

+

Delete
+

+

+

+ + + + + + + + + + +
int32str
headerrequest IDpath
+
+

+ +

+
+

+ This message expects a standard Ack response + message. +

+
+

+

+

Link
+

+

+

+ + + + + + + + + + + + +
int32strstr
headerrequest IDdestination pathlink path
+
+
+

+ This message expects a standard Ack response + message. +

+

+ Semantics of the link object: +

+
+
+ +
+

+

+

ReadLink
+

+
+ + + + + + + + + + +
int32str
headerrequest IDpath
+
+

+

ReadLinkR
Response to the + ReadLink message. +

+

+

+ + + + + + + + + + +
int32str
headerrequest IDlink description
+
+

+ +

+
+

+ This will only return the first level of linking, ie the link data + directly associated to the link object. +

+
+

+

+

Rename
+

+

+

+ + + + + + + + + + + + +
int32strstr
headerrequest IDoriginal pathnew path
+
+

+ +

+
+

+ This message expects a standard Ack response + message. +

+
+

+

+

Serve
+

+

+

+ + + + + + + + + + + + +
int32strarray(int32)
headerrequest IDpathannounced interfaces
+
+
+

+ This message is a request for the client to be a reverse server to + an object. The response message to this message is an + Attached message. The handle attributed to the + served object is known as the server handle and is used in + the Incoming and Detach messages. +

+

+ To stop serving an object, the client simply sends a + Detach command on the server handle. The semantics + is that all connections that have been openned through the + reverse-served object are preserved when the object stops being + served, and an individual Detach message must be + sent to all of them if we want to close them. +

+
+
+

+ The announced interfaces serves to answer + Stat messages on the object while we are serving + it. +

+
+

+

+

Incoming
+

+

+

+ + + + + + + + + + +
int32int32
headerserver handleclient hande
+
+

+ +

+
+

+ This message is sent by the server when another client wishes to + attach to an object reverse-served by this client. The server handle + is the one given as a response to the Serve + message. The client handle is a handle associated to the connection. + The reverse server may reject the connection by issuing a + Detach command on the client handle, or may accept + it using the Accept message given below. +

+
+

+

+

Accept
+

+

+

+ + + + + + + + +
int32
headerclient handle
+
+

+ +

+
+

+ Once a connection has been accepted, the reverse server may at any + moment close it by sending a Detach command on the + corresponding client handle. +

+
+

+

3.4Big message protocol

+

+ To be defined. Is it really usefull? What role exactly does it have? Can + it implement repetition in the case where the message hasn't been + acknowledge? … +

+

+ Reserved message IDs : [20,30) and [10020,10030). +

+

3.5Authentification and rights managment + commands

+

+

Authenticate
+

+

+

+ + + + + + + + + + + + +
int32int32*
headermessage IDauthentification methodauthentification data
+
+
+

+ Used to gain access using credentials (user/password, token, + …). Response messages are standard Ack on + success or Error on failure. Autentification + methods include : +

+
+
+ +
+

+

+

NewToken
+

+

+

+ + + + + + + + + + +
int32str
headermessage IDpath
+
+

+ +

+
+

+ Requests the server to create an authentication token for accessing + a given object with the privileges of the connected client. Once the + token has been returned, it may be transmitted to another client so + that that client will use it to gain same access to the object. +

+
+

+

+

NewTokenR
Response to the + NewToken message. +

+
+ + + + + + + + + + +
int32str
headermessage IDtoken
+
+

+ TODO : request account creation, manage user groups and ACLs, … +

+

3.6File protocol

+

+ Client messages [50,100) ; server messages [10050,10100). TODO +

+

3.7UI protocols

+

+ Client messages [100,200) and server messages [10100,10200). +

+

3.7.1Terminal protocol

+

+ TODO +

+

3.7.2Graphical user interface protocol

+

+ TODO +

+

3.8Communication protocols

+

+ Client messages [200,300) and server messages [10200,10300). +

+

3.8.1Email and newsgroups protocol

+

+ Client messages [200,220), server messages + [10200,10220). +

+

3.8.2Instant messaging protocol

+

+ Client messages [220,250), server messages + [10220,10250). +

+

3.9Other protocols

+

+ Protocols not discussed in this specification may use client messages + with type IDs [1000,10000) and server messages [11000,20000). Overlaps + between several protocols are allowed : the information about + implemented interfaces for an object is meant to disambiguate such + situations. +

+

3.10Table of IDs

+

+ The tables presented in this section give the number associated to the + message types. These tables are the reference on the subject ; any + information found somewhere else is wrong if it is not the same as found + here. This is for protocol version 1. +

+

3.10.1Message types

+

+

Base protocol
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
message id idmessage id id
Hello010000Stat / StatR1010010
Error10001List / ListR1110011
Ack10002Create / Created1210012
Delete13
Attach / Attached510005Rename14
Send / Recieve610006Link15
Detach / Detached710007ReadLink / + ReadLinkR1610016
Serve8
Incoming10008
Accept9
+
+

+

Authentication & privileges
+

+
+ + + + + + + + + + + + + + +
message id id
Authenticate30
NewToken / + NewTokenR3110031
+
+

3.10.2Error messages

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idcause
1Incompatible versions
2Command/interface not implemented
3Invalid request (e.g. : out of bounds)
4Invalid handle
5Attach request rejected
6Action impossible because object is in use (cannot + delete, …)
7No such object (invalid path)
8Could not resolve link
9Incorrect credentials
10Unauthorized
+
+

3.10.3Object interfaces

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
idnamemust implement messages
0servableServe, Accept, + Incoming
1non-NARP insideonce attached, inside data is arbitrary
2NARP serviceonce attached, inside data is a NARP service (ie has + objects, …)
3enumerableList, ListR
4is symlinkReadLink, + ReadLinkR
10fileonce attached, file semantics
11terminalonce attached, terminal semantics
12graphics windowonce attached, GUI semantics
+
+

+

Servable
This interface specifies that the object is + currently an empty object waiting for someone to issue a + Serve command on it, providing it with an + implementation of some interfaces. +

+

+

non-NARP inside
This interfaces indicates that once + attached to the object, the messages sent/recieved to it are not + supposed to be NARP format but any arbitrary format. If this interface + is not specified, then it is expected that the messages transmitted will + follow the general NARP protocol (message format, standard + hello/ack/error messages). +

+

+

NARP service
This interface indicates that once + attached to the object, one can have access to a new NARP namespace + where at least the following operations are supported : + Stat, Attach, Send, + Recieve, Detach. Additionnal messages + may or may not be supported. +

+

4Architecture of a NARP implementation in + OCaml or Haskell

+

+ An asynchronous implementation can be easily programmed in functionnal + languages such as OCaml or Haskell, using closures as continuations for + what to do when a (response) message arrives. +

+

+ TODO +

+

5Using NARP to design an Operating System

+

+ When designing the NARP protocol, we had in mind that it would be + possible to use it in a new operating system design at many levels : + access to devices, process management, memory management, filesystems, + IPC, GUI, … +

+

+ Kernel helpers could be developped so that a part of the NARP + multiplexing and demultiplexing takes place in kernel land, before + messages are passed to userspace. This would allow the simplification of + useless mux-demux chains taking place on the same machine. Another + possible helper would be to map a virtual memory region to a NARP + ressource implementing a standard filing protocol, much as memory mapped + files in standard OSes (only this would work with arbitrary ressources). +

+

+ TODO +

+ + \ No newline at end of file diff --git a/doc/spec-1.pdf b/doc/spec-1.pdf new file mode 100644 index 0000000..26ba059 Binary files /dev/null and b/doc/spec-1.pdf differ -- cgit v1.2.3