initial commit

This commit is contained in:
root
2023-06-12 09:14:09 +02:00
commit b4912f303e
2545 changed files with 209350 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
These are strictly speaking no bugs, but unimplemented features or
BSD incompatibilities:
Transmission Control Protocol:
------------------------------
- MSS fixed at 536 bytes currently. May use larger values on directly
connected networks. DONE.
- Selecting for exceptional conditions (ie waiting for urgent data)
does not work. This needs work on the kernel. WORKS with TeSches
patches applied.
- A process is only notified of urgent data arrival via SIGURG when
he does a read(), write() or select(). FIXED. Signalling is now done
asynchronously using a separate process.
- There is currently no round trip time estimation done for calculating
the retransmission timeout. DONE.
- No "Nagle-Algorithm" implemented.
- No congestion avoidance. DONE.
- No slow start implemented. DONE.
- No delayed acks.
- The following is really a bug in BSD. Here are the BSD out-of-band semantics:
Lets say you write 5 bytes of out of band data using the MSG_OOB
flag with send().
Then the receiver will only be able to receive the urgent data if he
has no other unread urgent data pending. If he has no urgent data
pending he can receive the last byte of the urgent data using recv()
with MSG_OOB.
The other 4 bytes are received as normal data. The "mark" (you can
query the system if you have received all data up until the mark
using the SIOCATMARK ioctl) is placed behind these 4 bytes.
Here are the MintNet semantics of out of band handling.
You can write as much urgent data as you want.
The receiver can read *all* the urgent data using recv() with the
MSG_OOB flag.
The "mark" is placed *before* the urgent data byte with the lowest
sequence number.
If there are several chunks of urgent data waiting to be read, the
"mark" moves from the first to the next one when you read data after
the current position of the mark.
You can partially emulate the BSD semantics by placing the socket
into "out-of-band-data-inline" mode using the SO_OOBINLINE socket
option. You can then read urgent data using MSG_OOB or the normal
read().
User Datagram Protocol:
-----------------------
- recv/recvfrom return the amount of data copied -- not the size of
the datagram as BSD does with MSG_PEEK.
Internet Control Message Protocol:
----------------------------------
- Most message types not implemented.

View File

@@ -0,0 +1,36 @@
All files in this archive are Copyright (c) 1993-95 Kay Roemer.
Exceptions are explicitely stated.
I cannot take over any responsibility for any files in this distribution.
Therefore the following disclaimer:
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You are welcome to use, copy, distribute and modify the source code
included in this package for noncommercial purposes as long as the
following conditions are met:
o All the files are kept in the distribution.
o Any modifications on files in the distribution are clearly
marked as such, including a statement that the original author
is not responsible for your modifications and possible damage
resulting in your modifications.
o You may not sell this package or parts of it for more than
double the cost of copying the files onto media, including
the cost of the media, excluding local taxes.
Usage of MintNet or parts of it as part of commercial products requires a
written licence from Kay Roemer.
You have agreed with the above conditions when holding copies of the
distribution in your posession.

View File

@@ -0,0 +1,324 @@
MintNet alpha release README
----------------------------
Contents:
0. Disclaimer
1. What is MintNet?
2. Things needed to run MintNet
3. Things needed to recompile MintNet
4. Recompiling MintNet
5. How to install
6. Network programming
7. BSD Unix (in)compatibilities
8. If you have found a bug
0. Disclaimer
-------------
This package should be regarded as experimental. It is quite possible
that it contains bugs that may do the weirdest things to your hard drive
although I believe it is quite stable now. Anyway, make regular backups!
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1. What is MintNet?
-------------------
MintNet is a networking extension for Atari computers running Mint.
It currently implements the suite of networking protocols referred to as
'TCP/IP' and a local interprocess communication mechanism known as 'unix
sockets' that is in principle similar to named pipes. MintNet is prepared
for adding further networking protocol stacks (like Novells IPX/SPX or
Appletalk for instance).
Thus you can use MintNet to intergrate your Atari into a networked environ-
ment that consists of systems supporting TCP/IP (as the Internet).
MintNet consists of four major parts, a loadable device driver for Mint
(sockdev.xdd), several loadable packet drivers (eg. slip.xif), a library
(socket.olb) and some tool programs (in the tool/ subdirectory) to setup
and manage MintNet.
The device driver links to the Mint Kernel when loaded and installs the
device u:/dev/socket through which the services provided by MintNet can
be accessed.
The libary provides you with the usual BSD socket API functionality using
the services of u:/dev/socket. That means porting Unix software to MintNet
using this libary is really easy. In fact many important packages like ftp,
telnet, ... are ported to MintNet using this library.
The packet drivers are responsible for sending and receiving datagrams over
some type of hardware, for instance slip.xif is responsible for sending
datagrams over serial lines using the SLIP or PPP protocol. For every type
of communication hardware such a packet driver is needed. sockdev.xdd calls
the proper packet driver for sending and receiving datagrams and does not
contain communication hardware specific code.
Packet drivers are currently available for SLIP, PPP, PLIP, Ethernet and
loopback.
Please contact me if you want to write Ethernet hardware drivers or have
hardware that is worth to write a driver for.
2. Things needed to run MintNet
-------------------------------
There are some (in fact a lot) things needed to get MintNet running:
1) An up to date Mint version. Preferably Mint 1.12, MH-Mint 1.12hX or
newer. A megapatched Mint 1.11h9 will probably work too. This is because
the MintNet device driver needs some features of the Mint Kernel that have
been added recently.
Mint binaries, sources and documentation is available via anonymous FTP
from ftp.uni-muenster.de:/pub/atari/Mint/Kernel.
2) Until there are no easy to use installer program and window system based
applications for MintNet you need some experience with cli's and a Unix-like
setup. That is *not* because MintNet itself needs this, but (un)fortunately
all the currently available applications using MintNet are ports of Unix
programs and they need a basic Unix setup to work.
3) Some networking applications for MintNet. A good starting set is inetd,
ping, telnet, ftp, pppd (if you want to use PPP), dip (if you want to use
SLIP).
These programs are not part of this package. They can be found for instance
at ftp.uni-muenster.de:/pub/atari/Mint/Network.
4) Most of those Networking applications require you to run syslogd, a program
that logs system messages to files or the console. If you want to run telnet
or rlogin *servers* on your host you need the login program, too.
Both programs are part of the MintOS 1.4.1 package which is available via
anonymous ftp from earth.ox.ac.uk:/pub/mintos.
For the unexperienced KGMD (Knarfs German Mint Distribution) is a good
starting point. It provides you with a ready to go MintNet environment.
KGMD 1.0 can be found at ftp.phil.uni-sb.de:/pub/atari/mint/KGMD-1.0/.
Another package that contains a basic Mint setup is the Mint distribution kit
MDK (which is a bit outdated), available from phlem.ph.kcl.ac.uk.
3. Things needed for compiling
------------------------------
This package contains already compiled versions of the libraries and the
socket device driver for people who are not willing or able to compile
the stuff. If you are one of them you can ignore the following instructions
about compiling and use the precompiled binaries instead.
1) tar and gzip to unpack the archive (bit silly this one since you are
reading this file).
2) gcc, preferably 2.3.3 or >= 2.5.8, since versions inbetween those have
been reported to be buggy.
3) gmake, preferably 3.6x or later.
4) binutils PL >= 30.
5) MiNTLibs PL >= 41, because as of PL 41 they support the socket library
in errno.h and strerror(). If you don't mind getting messages like 'unknown
error' from perror(), you can use earlier versions too.
6) Minixfs or something similar that supports long filenames. This is not
absolutely neccessary, but there are some filenames that do not fit into
the 8+3 filename scheme.
4. Rebuilding the library and device driver
-------------------------------------------
Edit MakeVars to reflect your setup.
It is easiest to rebuild the whole package by typing
1) make clean
2) make depend
3) make all
into the top level directory. This will rebuild the socket device driver
and all the libraries as necessary. 1) deletes all .o files from previous
compilations. 2) generates the dependency-files that tell make which files
need to be rebuilt when changing one particular file.
Of cource you can 'cd' to one particular subdirectory and remake only parts
of the package. Please have a look at the Makefiles.
You should get the following binaries out of the above steps:
lib/socket.olb -- 32 bit socket library.
lib/socket16.olb -- 16 bit socket library.
lib/bsocket.olb -- 32 bit -mbaserel socket library.
lib/bsocket16.olb -- 16 bit -mbaserel socket library.
net/sockdev.xdd -- socket device driver.
net/drivers/plip.xif -- PLIP packet driver
net/drivers/slip.xif -- combined SLIP/PPP packet driver
net/drivers/dummy.xif -- dummy (lookpback) ethernet driver
net/drivers/de600.xif -- driver for de600 adapter connected to ROM port
net/drivers/riebl*.xif -- drivers for RIEBL card
net/drivers/pamsdma.xif -- driver PAM's external DMA adaptor
net/drivers/lance.xif -- driver for PAM's internal card
net/drivers/biodma.xif -- driver for BIODATA's external DMA adaptor
tool/netstat -- netstat utility, show active connections.
tool/route -- route utility, change/show routing table.
tool/ifconfig -- ifconfig utility, change/show interface config.
tool/slattach -- slattach utility, attach SLIP interface.
tool/iflink -- iflink utility, link Mint device to interface.
tool/arp -- arp utility, change/show ARP table.
tool/ifstats -- ifstats utility, show interface statistics.
5. Installing the libraries and the device driver
-------------------------------------------------
Run the shell script install.sh in the MintNet top level directory:
# ./install.sh
You will be asked for your networking parameters like hostname, domainname,
IP address and what connections to directly connected hosts you wish to
establish. From your answers the script will generate basic config files, that
enable you to use MintNet after reboot.
Now you may want to "hand tune" the configuration files a bit. They are
hold in /etc. The most important are
* /etc/resolv.conf (host name resolver config. Read man/cat5/resolver.5)
* /etc/host.conf (more host name resolver config. Read man/cat8/resolv+.8)
* /etc/hosts (host name database)
* /etc/hostname (your hostname)
* /etc/domainname (your domainname)
* /etc/rc.net (MintNet startup shell script, *must* be executed after reboot,
from /etc/rc or mint.cnf)
The basic MintNet utilities are described by manual pages in man/cat8/.
Read route.8, ifconfig.8, netstat.8!
The script install.sh is intended for first installation only. If you have
already a working MintNet installation and only want to update the binaries
to a newer version, then type 'make install' into the toplevel MintNet
directory. Change to the 'man' directory and type 'make install' to install
the manuals.
6. Getting information about socket and network programming
-----------------------------------------------------------
Because MintNet providedes you with a BSD socket compatible API (with some
extensions and omissions) through the socket.olb library, any literature on
Unix networking would help alot.
You can obtain information about using the facilities provided by this package
by having a look at the manual pages in the man subdirectory. You could also
get the texinfo manual from the GNU-C library or a good book, like
- Comer, Stevens: `Internetworking with TCP/IP I-III' (for learning)
- Richard W. Stevens: `Unix Network Programming'
- Andrew S. Tannenbaum: `Computer Networks'
- Leffler, McKusick, Karels, Quaterman: `4.3 BSD Unix -- Design and
Implementation' (for insiders)
- Santifaller: `TCP/IP und NFS in Theorie und Praxis' (an introduction)
- Loosemore, McGrath, Oram, Stallman: `The GNU C Library Reference Manual'
(for reference)
- RFCs 786(UDP), 790(assigned numbers), 791(IP), 792(ICMP), 793(TCP),
1055(SLIP), 1122(Host Requirements), 1331(PPP), 1144(VJ compression),
894,1042(IP over 802.x), 826(ARP), 903(RARP) (for protcol specifications)
7. BSD Unix (in)compatibility
-----------------------------
Here are some notes on incompatibilities to the BSD Unix programming interface
for the ones familiar with it.
- The socket ioctl's are currently not in the Mint Library. Use the file
sockios.h from the include dir instead or get my portlib.
- Most IP options are not processed like they should.
- Very few (only the most important from my point of view) ICMP message
types are implemented.
- Currently sendmsg() and recvmsg() on AF_UNIX sockets do not support sending
and receiving of access rights. (ie file handles).
- There are lots of new error codes, like ENOTCONN, ... To get meaningful
messages from perror() and strerror() and for support of the new errorcodes
you will need the MiNTLibs patchlevel >= 41.
- On AF_UNIX stream sockets you can set the send buffer size with the
setsockopt() call only if the socket is connected. For AF_UNIX dgram
sockets you can't at all set the send buffer size, only receive buffer size.
- stat(), fstat() on sockets and AF_UNIX socket files return for the file
type S_IFCHR and S_IFREG, respectively (not S_IFSOCK).
- select()ing for writing on dgram sockets will always report that writing
will not block, even if the desriptor is NOT ready for writing.
- The FIONREAD ioctl() call on AF_UNIX/AF_INET dgram sockets returns the
size of the next datagram or zero if none is available.
The FIONWRITE ioctl() call on AF_UNIX dgram sockets returns an infinite
number bytes if you did not specify a destination address for the socket
using connect().
FIONWRITE on UDP sockets returns always `infinity'.
- Sending and receiving of more than one TCP urgent data byte is supported.
Unfortunately this causes some incompatibilities. Read the file net/inet/BUGS
to learn the differences.
8. If you have found a bug
--------------------------
In case you find a bug or incompatibility in MintNet or want me to implement
some feature you need then don't hesitate to contact me at the below given
Email address.
If you report a bug I need a detailed description of your setup, of the
symptoms and the circumstances that caused the bug to appear and if possible
a small peace of code that reproduces the bug.
Keep in mind that I can't do anything to solve problems described by messages
like 'MintNet does not work! What shall I do?'
Please report bugs only to me (Torsten Lang) since Kay Roemer does not maintain
the package any more. Thanks.
Have fun with MintNet,
--
Kay Roemer roemer@informatik.uni-frankfurt.de
http://www.uni-frankfurt.de/~roemer/
--
Torsten Lang Torsten@Lang.net

View File

@@ -0,0 +1,10 @@
!!! IMPORTANT !!!
MintNet now needs Mint 1.11h9 or newer to run. I don't consider this a
problem, because Mint 1.12 and later versions are available in binary form.
If you intend to use MintNet in a SingleTOS+Mint environment, you must copy
nohog.acc to the root of your boot drive. This accessory keeps AES from
staying all the time in supervisor mode (thus preventing Mint from switching
contexts and MintNet from working). nohog.acc is taken from the MinixFS
distribution and is written by Stephen N. Henson.

View File

@@ -0,0 +1,151 @@
README FILE FOR IP MASQUERADING
The IP masquerading support was implemented by Mario Becroft in May 1999 and
is placed in the public domain.
The following files changed from the standard net-1.03 distribution:
tool/Makefile
net/inet/Makefile
net/inet/ip.c
net/inet/ip.h
net/inet/tcp.c
net/inet/inet.c
The following files were added to the standard net-1.03 distribution:
include/masquerade.h
include/masqextern.h
tool/masqconf.c
net/inet/masqdev.c
net/inet/masquerade.c
README.masquerade
INTRODUCTION
I implemented IP masquerading for MiNTnet, as well as a quick fix for the "land"
bug which would freeze mintnet.
I am sure that my implementation is not optimal and contains many bugs, because
this is the first low-level network programming I have ever done and I am not
very familiar with it. When even experienced programmers get bugs in their code,
you can only begin to imagine the kind of errors I am likely to make.
Nevertheless it does seem to work, so I must have done something right.
To use the IP masquerading features, simply copy the new sockdev.xdd into
your mint folder and reboot the machine. IP masquerading is still disabled by
default, but can be enabled using the masqconf program, as explained below.
USING MASQCONF / QUICK START GUIDE
To configure the IP masquerading you use the masqconf program from the tool
directory.
To show the current configuration and any masquerade database entries, invoke
masqconf with no arguments.
To get help, invoke masqconf with help or any unknown command as an argument.
Normally you don't need to worry about all the available settings, the only
important ones are address, netmask and flags. The rest can be left at the
default values.
address should be set to the address of the network to be masqueraded for,
and netmask should be the netmask of that network.
For example if you have a local network 10.0.0.0 you might configure IP
masquerading for all machines on the network with the following command:
masqconf address 10.0.0.0 netmask 255.0.0.0
Once you have correctly set the parameters you must set the ENABLED flag to
make IP masquerading operate, like so:
masqconf set ENABLED
That is all there is to it. Now you can access the internet from any of
the machines on your network, even though you only have one actual IP address!
PORT REDIRECTION
Apart from allowing a masqueraded machine to initiate connections to another
computer the IP masquerading supports permanent redirection of certain ports
on the masquerading gateway to go to a masqueraded machine. You configure this
with the masqconf redirect command. The parameters are gateway port,
destination address an destination port.
For example to redirect incoming HTTP requests on the gateway machine to
port 456 of masqueraded machine 10.0.0.5, you could use the following command:
masqconf redirect 80 10.0.0.5 456
To stop redirecting a port, use the masqconf unredirect command. For example
to reverse the above redirection, issue the following command:
masqconf unredirect 80
FAQ
Q. Why does (xyz feature) not work properly?
A. Like I said this is my first project with any kind of low-level network
programming, and I probably made quite a lot of mistakes. Certainly notify me
if you find a bug, but it's even better if you try to fix it yourself then
mail me and explain how you fixed it. But also see the next question.
Q. Why do some protocols like FTP and DCC not work via IP masquerading?
A. Some programs send low-level protocol information in a high-level protocol,
including IP addresses and port numbers. IP masquerading doesn't know about
that, and doesn't masquerade those addresses properly. Eventually I plan to
add support for this, but it is very complicated. In the mean time, you can
sometimes avoid the problem by adjusting the settings in the problematic
program, for example if you set your FTP client to passive mode it will work
ok.
Q. Why doesn't this documentation explain a whole lot of things like the
timeouts, masquerade database, port redirection, flags, etc., etc.?
A. I want to make IP masquerading available, but I did not have time to
write lots of documentation. Read the source code! Or if you send me an email
I will be happy to help. I hope to write some better documentation later.
BUGS
Lots!
Seriously, it can't be so bad as I've used the IP masquerading quite a lot and
it doesn't fail. But I have noticed some inconsistencies.
Sometimes a condition occurs where a TCP connection that is not yet opened
(or not yet properly closed) tosses lots of packets backwards and forwards in
an endless loop. I don't know why this happens, but I am looking into it. If
you see this bug, try to track it down and fix it. As a temporary fix, just
disable IP masquerading (masqconf unset ENABLED) then enable it again
(masqconf set ENABLED) to break the loop.
I think there is some sort of bug handling incoming ICMP error messages
for a masqueraded host. Particularly, error messages about UDP datagrams
seem to get through to the host that sent the datagram which caused the error,
but the host doesn't seem to interpret them. Is the checksum wrong, or
something?
CONTACTING ME
I would like to hear anything you have to say about the IP masquerading.
Please send an email to:
mb@tos.pl.net
Please note that this address will become invalid in about a month's time.
I will announce my new address at that time via the MiNT mailing list and
other appropriate forums.

View File

@@ -0,0 +1,19 @@
README FILE FOR IP MASQUERADING (TORSTEN LANG)
The ip masquerading support now also contains support for ftp. Unfortunately
this still is not stable but I realease it anyway and hope that someone else
will be able to find and fix the problem (and certainly pass the fix to me ;-).
The ftp support is implemented in a way that makes it quite easy to add support
for other protocols too (like irc). Since I have no possibility to test these
other protocols I have not implemented support for these.
CONTACTING ME
If you find the remaining bug in the ftp support that causes the connection to
break after a few "dir" commands please let me know immediately. Please send
mail to:
Torsten@Lang.net
Hopefully this address will stay valid for the near future.