105 lines
3.4 KiB
Raw Normal View History

2013-08-09 00:33:56 +00:00
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
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
sic -h -p 6667 -n myname
(a bunch of messages)
:j << 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).
3. edit and copy the `etc/resolve.conf` file to `/etc/resolve.conf` (if it does
not exist). This file is your DNS server
2013-08-09 00:45:52 +00:00
4. If you don not have a DNS server, edit `/etc/hosts` to include your favorite
2013-08-09 00:33:56 +00:00
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
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.
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.
`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`,
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