*** Version 0.3:

net/inet/if.c:
	Some changes to if_net2if(), so that you can have several
	point to point interfaces with the same local address.

net/inet/{plip.c, pl0.c, pl0.h, pl0asm.s}:
	Implemented PLIP interface. Read the file net/inet/README.PLIP
	for important notes about the driver.	

net/inet/route.c:
	Fixed two bugs in route_del() and route_flush() (pointers
	weren't handled correctly when two continuous entries were
	deleted).

net/inet/ip.c:
	Some more validation checks on imcoming packets. If IP now
	says an incoming packet is valid, then it *is* valid :)

net/inet/buf.c:
	Fixed two horrible bugs in the buffer allocator.
	Made the allocater return tighter fitting memory blocks.
	Introduced a `garbage collector' (invoked once every minute)
	which frees all unused blocks.
	That way MintNet can increase its memory usage in times of
	heavy network traffic without calling kmalloc() to often
	and all unused memory is returend to Mint.

tool/{ifconfig.8, route.8}:
	Wrote manual pages for the `ifconfig' and `route' commands.
	Preformatted versions are in man/cat8/.

net/inet/{udp.c, inetutil.c}:
	Corrected a bug in the checksum computation routines.

tool/route.c:
	Wrote route(8) utility. Docu missing. Route without arguments
	displays the routing table in the `netstat -rn' format.

tool/ifconfig.c:
	Wrote ifconfig(8) utility. Documentation missing, but is
	*very* similar to Unix ifconfigs.

lib/net/{if.h, route.h}:
	New subdirectory and include files for the library.

net/inet/icmp.c:
	Overhauled the ICMP stuff. Classifies all input messages
	and prints debug infos when they are received.
	Destination unreachable/time exceeded messages can be received
	and sent, Echo Request can be received and Echo Replies sent,
	thus `ping'ing your Atari with ping(8) works.

net/inet/routedev.c:
	Implemented /dev/route, from which the routing table can be read.
	route(8) uses this.

net/inet/{slip.c, sl0.c, sl0asm.s, sl0.h}:
	Implemented SLIP interface. Read the file net/inet/README.SLIP
	for important notes about the driver.

net/inet/loopback.c:
	Wrote loopback interface.

net/inet/if.c:
	Implemented network interfaces. Arp is still missing.

net/inet/{route.c, route.h}:
	Implemented a simple IP router.

net/inet/{ip.c, ip.h}:
	Did a working IP implementation. Fragmentation and option
	processing are missing.

net/unix/{dgram.c, stream.c}, net/inet/udp.c:
	Changed the value returned from FIONWRITE/FIONREAD for
	`unlimited data/space available' from -1L to 0x7fffffff.
	This is because Fselect() does an 'if (bytes > 0)'. So
	bytes MUST NOT be less than zero in signed long format.

net/inet/buf.c:
	Made buf_alloc() and buf_free() interrupt prove.

lib/Makefile:
	Cleaned up a bit for cross compiling. You need to set
	SYSINCLUDE to your cross include dir and CROSS to anything
	when cross compiling.
	$ gmake SYSINCLUDE=~/cgcc/include CROSS=yes
	is enough to build the library on a Sun or HP (provided your
	cpp/cc1 understand \n\r line endings).

net/inet/{udp.c, ip.c}:
	Added ip_dst_addr(a) which returns the real IP address
	to which a packet should be sent/socket should be connected.
	a		->	ip_dst_addr(a)
	INADDR_ANY		address of the primary interface
	INADDR_BROADCAST	broadcast address of the primary
				interface if it supports broadcasts,
				INADDR_BROADCAST otherwise.
	other			a
	udp_send() and udp_connect() use this.

net/inet/inet.c, include/socket.h, lib/sys/socket.h:
	New option SO_CHKSUM to switch on/off protocol checksum
	generation for UDP, TCP (off by default).

net/inet/{inet.c, ip.c, ip.h}, lib/sys/socket.h, include/socket.h:
	Allow only broadcasts if SO_BROADCAST is set on the socket.
	Pass trough some flags to IP (dontroute, broadcast).
	Added MSG_DONTROUTE.

net/unix/dgram.c: ++schwab
	Fixed a bug in unix_dgram_send() which made it impossible to
	send messages on a DGRAM socketpair.

test/sockpair.c: ++schwab@informatik.uni-dortmund.de (Andreas Schwab)
	Fixed some return values and close the socket file descriptors
	where appropriate.

lib/netdb.h:
	Included the RPC stuff, namley `struct rpcent', getrpcbyname(),
	getrpcbynumber(), setrpcent(), getrpcent() and endrpcent().
	To use these functions you need librpc.olb which comes with
	the Sun RPC 4.0 distribution.

net/netinet/udp.c:
	Made some changes to connect() so that connecting to INADDR_ANY
	and INADDR_BROADCAST does what you expect it to do.

lib/netinet/in_systm.h:
	Included in_systm.h into the library.

lib/res_init.c:
	By default INADDR_LOOPBACK is used instead of INADDR_ANY (when
	no /etc/resolv.conf is present).

net/inet/icmp.[ch]:
	New files implementing some sort of ICMP. Only support for
	localhost.

*** PL 2:

lib/Makefile:
	A *much* nicer rule for the `*.olb' targets. Now a .c file
	needs only to be recompiled if it was modified after the .o
	file was copied to the archive. This means that if I change
	a source file only *this modified* file needs to be recompiled,
	even if you hanven't got all the other .o files.

lib/*:
	Started work on the inet library.

net/inet/*:
	Started work on the internet domain.

*** PL 1:

net/unix/unix.c:
	Changed the behavior of read() and write() for streams. They
	return now as soon as any data is available (Unix like).
	However, you can turn it off (ie make read() and write() block
	as necessary) by undefining USE_UNIX_TRANSFER_STYLE in config.h.
	
net/sockutil.c, net/unix/unix.c:
	Moved the peer wakup stuff from so_release() to the abort()
	function, because probably not all protos need to do that.
	Fixed that way a problem with select(). If you select on
	a connected socket and the peer is released, you were not
	woken up from the select.

net/unix/{ stream.c, dgram.c }:
	Fixed again the return values for the FIONREAD/FIONWRITE
	Fcntl's. They return now -1 ("infinity") for broken connect-
	ions or shutdown ones.

tool/netstat.8:
	Wrote a manualpage for netstat(8).

net/unix/unixdev.c:
	Fixed a silly bug which crashed netstat sometimes. (Forgot
	the second argument to un_read_header...)

tool/netstat.c:
	Implemented a simple netstat(8). For now, only the -f option
	for `unix' is implemented. It uses the new /dev/unix device.
	So it will not work with earlier versions of MiNT-Net.

net/unix/{ unix.c, dgram.c }:
	Do un_put() when attaching, not when binding. So you can read
	also information for unbound sockets out of /dev/unix.

net/unix/{ Makefile, un.h, unixdev.c }:
	Implemented a /dev/unix device for unix domain configuration/
	information/statistics/debugging. Currently you can read an
	info structure for every unix domain socket in the system out
	of it. See unixdev.c for more infos.

*** Version 0.2:

net/unix/cache.c, net/unix/unix.c, include/config.h:
	Implemented some sort of file name lookup cache to gain some
	speed on real filesystems like the minix one. You can switch
	it on by defining USE_UN_LOOKUP_CACHE in config.h, which is
	the default. Please read the comments in config.h.

net/unix/dgram.c:
	Fixed a bug in the FIONREAD Fcntl(). Now returns 1 byte if
	shut down instead if 0.

*** PL 2:

test/dgram.c, test/dgramd.c:
	Changed to use the ability to get the senders address with
	recvfrom() or recvmsg(). Client contacts the server. Server
	gets the clients address and writes back some stuff.

test/sockname.c, test/Makefile*:
	New file to test getpeername() and getsockname().

lib/{accept.c, getsockname.c, getpeername.c, recvfrom.c, recvmsg.c}:
	Changed so they do dos->unix path name conversion when
	appropriate.

net/unix/*.c, net/unix/un.h:
	Implemented getpeername(), getsockname() on unix sockets.
	accept() returns now the address of the client (if it has one).
	recvfrom() and recvmsg() return the address of the sender.
	NOTE that the addresses returned from the above calls make only
	sense if you use ALWAYS ABSOLUTE paths for the socket files
	(for instance /tmp/sock or u:/tmp/sock, but not just sock) when
	doing bind().
	NOTE that the returned path names are always null terminated like
	normal C strings.
	The returned address length does NOT include the trailing zero.
	This is done to let you pass the addrlen returned from one of the
	above calls unchanged to socket calls like connect() or sendto().

net/unix/unix.c, net/unix/dgram.c:
	Remove the silly `un_index' and use the address of the `undata'
	instead.

*** PL 1:

INSTALL, README, lib/Makefile*:
	Cleaned up a bit, to give more information about installing
	and compiling MiNT-Net.

include/net.h, net/sockdev.c:
	Implemented file locking on sockets. It is rarely useful,
	done for completeness only. :-)

net/sockdev.c:
	Set addrlen in sock_accept() to zero if getname() failed.

lib/bind.c, lib/connect.c, lib/sendto.c, lib/sendmsg.c:
	Removed the attempt to terminate the file name in sun_path
	with '\0'. If the address structure is in read only memory
	this could cause memory violations.

lib/recvmsg.c, lib/sendmsg.c, man/recvmsg.3, man/sendmsg.3:
	Complete rewrite so that they use the dev drivers recvmsg()
	and sendmsg(). Updated the manual pages.

net/Makefile:
	Cleaned up a bit. Hopefully neither .xdd nor .tos versions
	are broken now :-)

lib/Makefile, lib/Makefile.tcc, lib/perror.c, lib/strerror.c:
	Removed Strerror() and Perror() from the socket lib, since 
	the MiNTLibs as of patchlevel 41 support the new error
	codes both in errno.h and strerror().

include/sockerr.h:
	Changed EINTR's value to 128 to match the MiNTLibs EINTR.

include/mintsock.h, include/socket.h, net/sockdev.c:
	Added recvmsg() and sendmsg() calls to the device driver.
	They handle io-vectors, but still no access rights.

lib/socket.c (-DKERNEL version only):
	socket() in ksocket16.olb now opens a O_GLOBAL handle. This
	is done because normal handles are rarely useful for a file-
	system or dev driver that uses sockets. However, if you need
	a non global handle, you can use Fdup() to get one.

include/net.h, include/iov.h, net/sockdev.c, net/unix/*.c:
	Internally all reads and writes now use io-vectors instead of
	one continuous buffer. This should make it easy to add readv(),
	writev() (if the kernel ever implements them), sendmsg() and
	recvmsg().

net/Makefile:
	Fixed so that building the .tos version is possible again
	(init.o must not be linked when building the .tos version).

*** Version 0.1

net/unix/dgram.c:
	The FIONREAD ioctl() request on unix dgram sockets returns
	now the size of the next available datagram or zero if none
	is available.

net/unix/*.c:
	Made seperate select() and ioctl() functions for unix stream
	and dgram sockets. Fixed that way some problems with select()
	and ioctl() on unix dgram sockets.

net/unix/unix.c:
	Made listen() on dgram sockets return success instead of
	failure (listen on dgram sockets has no functionality).
	This is made because BSD lets you do it too, but I'm not
	sure at all if this is right, since listen() is defined
	only for SOCK_STREAM sockets. Does anybody know better?

lib/Makefile, lib/*.c:
	Added a new make target `kernel' to build `ksocket16.olb',
	a socket library which can be used in MiNT filesystems that
	uses sockets (such as Ulrich Kuehn's NFS).
	Note that before using any of the functions in the library
	you MUST set a variable `kernelinfo' to point at the `struct
	kerinfo' obtained from the kernel, like this:
		struct kerinfo *kernelinfo;
		kernelinfo = (struct kerinfo *)Dcntl (FS_INSTALL, ...);
	The functions in the library behave as their counterparts
	in socket16.olb, except that they do not set `errno'. Instead
	they return the (negative) errorcode as the result.
	Perror() is totally bogus. But you can use Strerror() on the
	ABSOLUTE VALUE of the results returned from the library
	functions, like this:
		r = socket (AF_UNIX, ...);
		if (r < 0) {
			DEBUG (("socket() returned %s", Strerror (-r)));
			...
		}
	`ksocket16.olb' is not made by default, instead you must type:
		$ cd lib
		$ make kernel

man/sendmsg.3, man/recvmsg.3:
	Added manual pages for the new sendmsg() and recvmsg()
	library calls.

lib/sendmsg.c, lib/recvmsg.c, lib/Makefile, lib/Makefile.tcc:
	Wrote sendmsg() and recvmsg() emulations which use sendto()
	and recvfrom(). They are COMPLETELY UNTESTED. If you don't
	mind trying something out which might not work at all, just
	go ahead and tell me about the results. <grin!>
	Note that neither sendmsg() nor recvmsg() support access
	rights. I'm not sure if it's worth to include the *msg()
	calls into the device driver (lots of work). I tend to
	not include them and use the emulation instead. Tell me
	if you don't think so.

lib/bind.c, lib/connect.c, lib/sendto.c:
	When `addrlen' is not valid those functions returned EINVAL
	instead of setting errno to EINVAL and returning -1.

include/sockerr.h, man/*, lib/strerror.c:
	Made EINVAL an alias for EINVFN to prepare including the
	socket stuff into the MiNTLibs. Updated the manual pages
	to reflect this change, also replaced the Atari specific
	error codes in the manual pages with the appropriate ones
	from the MiNTLibs (ie Unix style).

net/sockdev.c:
	From sock_select() we cannot return errors, only 0, 1 or 2.

*** PL 3

net/unix/unix.c, lib/bind.c, lib/sendto.c, lib/connect.c:
	Cleaned up a bit for BSD compatibility. Namely the address length
	of a unix domain address doesn't need to include the trailing 0
	(ie the string terminator) any longer.

test/sockpair.c
	Made the parent wait for `cat' to exit. You must now type
	^D or ^C to kill it. This seems to be a better solution than
	having a stopped `cat' process after running sockpair, which
	must be kill `by hand'.

net/Makefile, net/main.c, net/init.s: ++ts
	Changed the .xdd version of the dev driver, so that it installs
	itself with Dcntl() instead of letting MiNT do the job. So we
	don't run into trouble when the user chooses to change the dev
	drivers name to something other than socket.xdd.

lib/Makefile.tcc, test/Makefile.tcc: ++ts@uni-paderborn.de (Thomas Schulze)
	New makefiles for compiling the library and the test programs
	with TurboC, tcc (courtesty of Thomas Schulze) and unixname.prg.
	Does anybody use this besides from Thomas ? :-)

net/unix/unix.c:
	Allowed decreasing the send buffer size for connected unix stream
	sockets, which was not possible before.

*** PL 2:

net/unix/unix.c, net/unix/dgram.c: (thanks uk -- kuehn@math.uni-muenster.de)
	The unix-datas are now managed with a hash table instead
	of a linear list. send() and sendto() should now be somewhat
	more efficient for connected unix dgram sockets, espacially
	if lots of them are used at the same time.

net/unix/dgram.c:
	Set `head' in recv() to zero instead of subtracting `buflen'
	when wrapping around. This could save some micro sec's :-).

include/kerbind.h, net/unix/*:
	Made Unix domain sockets work on MiNT's brain damaged Tos
	filesystem. They did not work, because Fxattr() manages to
	return another value for `index' every time you call it
	on the *same* file. :-(

*** PL 1:

include/config.h:
	New file for keeping all global configuration defines.
	Currently you can define:
	NDEBUG		turn debugging output off.
	NEW_SELECT	use new way for select() device driver functions
			(not yet official, so do not use it).

net/Makefile, net/main.c, net/sockdev.c: (thanks uk)
	Added a new compile time option for making an .xdd. It is
	only useful if you use MiNT >= 1.08. By default only the
	.xdd version of the dev driver is made.
	To make the .tos version of the dev driver, you need to
	do the following:
		$ cd net
		$ make clean
		$ make
	To make the .xdd version, type (this is done by the toplevel
	Makefile by default):
		$ cd net
		$ make clean
		$ make XDD="a"

Makefile:
	Oops, forgot to change the library's name from libsocket.a
	to socket.olb.

include/version.h:
	New file for keeping version information.
