GNO + Marinetti = MariGNOtti
Go to file
Kelvin Sherlock 46e8e8e20f pascal-ize the error string 2021-03-14 22:35:33 -04:00
bin gno/me compatibility 2012-07-09 23:10:15 -04:00
etc add ssh service. 2015-12-31 09:40:15 -05:00
.gitignore updated git ignore 2012-07-09 22:56:24 -04:00
README.md fix resolv.conf name. 2015-12-31 09:39:37 -05:00
README.text fix resolv.conf name. 2015-12-31 09:39:37 -05:00
driver.c fix compile errors. 2012-05-14 21:44:13 -04:00
maccept.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
main.c pascal-ize the error string 2021-03-14 22:35:33 -04:00
makefile.mk fix compile errors. 2012-05-14 21:44:13 -04:00
marignotti.h getpeername 2012-05-14 21:30:27 -04:00
mattach.c UDP support (socket, read, write) 2012-05-12 19:44:10 -04:00
mbind.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mconnect.c fix connect bug when family is unspecified 2013-08-08 20:19:59 -04:00
mdetach.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mgetpeername.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mgetsockname.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mgetsockopt.c SO_TYPE 2012-05-12 01:25:36 -04:00
mioctl.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mlisten.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mread.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mselect.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
msetsockopt.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mshutdown.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
mwrite.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
net.h end-of-file newlines. 2016-01-05 19:59:13 -05:00
s16debug.c end-of-file newlines. 2016-01-05 19:59:13 -05:00
s16debug.h debug updates 2012-05-12 19:42:54 -04:00
table.c end-of-file newlines. 2016-01-05 19:59:13 -05:00

README.md

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:

  1. copy the marignotti, ftp, sic, and whois executables to your /usr/local/bin directory.
  • 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.

    Example:

    sic -h irc.a2central.com -p 6667 -n myname
    (a bunch of messages)
    :j #a2c.chat << join a room
    
  1. copy the etc/services file to /etc/services (if it does not exist).

  2. 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.

  3. If you do not have a DNS server, edit /etc/hosts to include your favorite sites.

Usage:

Run marignotti in the background (marignotti &). To quit, bring it to the foreground (fg) and hit control-C.

If you are using the Sweet-16 emulator version 3.0, marignotti -d will print 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).

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

getsockopt -- support for SO_OOBINLINE, SO_SNDLOWAT, SO_RCVLOWAT, SO_SNDTIMEO, SO_RCVTIMEO, SNDLOWAT and SNDTIMEO set flags but don not have any 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