marignotti/README.md

105 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2013-08-09 00:33:56 +00:00
MariGNOtti
==========
MariGNOtti is a network driver for GNO/ME 2.0.6. It provides a translation
layer between BSD sockets and Marinetti. Think of it as a replacement for
GSTCP.
Installation:
-------------
2013-08-09 00:45:52 +00:00
1. copy the `marignotti`, `ftp`, `sic`, and `whois` executables to your `/usr/local/bin` directory.
2013-08-09 00:33:56 +00:00
* `ftp` is an update of the gno 2.0.6 ftp (it adds passive ftp support).
* `whois` is an updated version (from FreeBSD 9.0). The gno 2.0.6 version is from FreeBSD 2.1.
* `sic` is a very simple irc client.
2013-08-09 00:45:52 +00:00
Example:
sic -h irc.a2central.com -p 6667 -n myname
(a bunch of messages)
:j #a2c.chat << join a room
2013-08-09 00:33:56 +00:00
2. copy the `etc/services` file to `/etc/services` (if it does not exist).
2015-12-31 14:39:37 +00:00
3. edit and copy the `etc/resolv.conf` file to `/etc/resolv.conf` (if it does
not exist). This file points to your DNS server; update it as needed.
2013-08-09 00:33:56 +00:00
2015-12-31 14:39:37 +00:00
4. If you do not have a DNS server, edit `/etc/hosts` to include your favorite
2013-08-09 00:33:56 +00:00
sites.
Usage:
------
Run marignotti in the background (`marignotti &`). To quit, bring it to the
foreground (`fg`) and hit `control-C`.
2013-08-09 00:45:52 +00:00
If you are using the Sweet-16 emulator version 3.0, `marignotti -d` will print
2013-08-09 00:33:56 +00:00
some debugging information to the debugger console. `marignotti -dd` will
enable extra debugging information (including the contents of reads and
writes).
What it does:
-------------
While marignotti is running in the background, it translates BSD socket calls
into Marinetti tool calls. It also handles blocking IO, socket options,
select, etc.
Architecture:
-------------
BSD sockets are, by default, blocking whereas everything Marinetti does
(other than the inital network connection) is non-blocking. To handle
blocking behavior, each socket has a semaphore. The main thread performs
all the polling and uses the semaphore to signal the other threads when they
can proceed.
Supported:
----------
`socket` -- only support for `PF_UNIX`, `SOCK_STREAM`, and `SOCK_DGRAM`.
`connect` -- but non-blocking connects are not yet supported.
`bind` -- currently a no-op since the old `whois` used it.
`read`/`recv`/`recvfrom` -- supports blocking, non-blocking, timeouts, and `RCVLOWAT`.
The address parameter of `recvfrom` is not supported. OOB is not supported.
`write`/`send`/`sendto` -- does not support `SNDLOWAT`, OOB, or the address parameter
of `sendto`.
`close` -- does not support `SOLINGER` type functionality.
`shutdown` -- sets flags but the flags are not completely implemented.
`ioctl` -- support for `FIONREAD` (bytes available to read) and `FIONBIO`
(set/clear non-blocking).
2015-06-16 18:26:41 +00:00
`setsockopt` -- `SO_SNDLOWAT`, `SO_RCVLOWAT`, `SO_SNDTIMEO`, and `SO_RCVTIMEO` are supported.
`SO_OOBINLINE` errors unless it's true.
`SO_DEBUG`, `SO_REUSEADDR`, `SO_REUSEPORT`, `SO_KEEPALIVE` set a flag but have no other effect.
`getsockopt` -- support for `SO_TYPE`, `SO_DEBUG`, `SO_REUSEADDR`, `SO_REUSEPORT`, `SO_KEEPALIVE`,
`SO_OOBINLINE`, `SO_SNDLOWAT`, `SO_RCVLOWAT`, `SO_SNDTIMEO`, `SO_RCVTIMEO`, `SO_NREAD`, `SO_NWRITE`
2013-08-09 00:33:56 +00:00
`getsockopt` -- support for `SO_OOBINLINE`, `SO_SNDLOWAT`, `SO_RCVLOWAT`,
2013-08-09 00:45:52 +00:00
`SO_SNDTIMEO`, `SO_RCVTIMEO`, `SNDLOWAT` and `SNDTIMEO` set flags but don not have any
2013-08-09 00:33:56 +00:00
other effect. `OOBINLINE` is only be supported when true.
Not (yet) supported:
--------------------
- OOB (out of band) data (and will never be supported).
- raw sockets (`SOCK_RAW`)
- TCP servers (`listen`/`accept`). Should be simple, though.
- UDP servers