$Id: README.txt,v 1.27 2002/12/22 14:13:30 kingofgib Exp $

LIBPNET6: A Portable Network Library
LIBPNET6 is Copyright (c) 2002 Peter Bozarov

send mail and suggestions to libpnet6 {at} bozz {dot} demon {dot} nl

Introduction
============

LIBPNET6 is an ANSI-C library designed to simplify the writing of networked
applications, without sacrificing either flexibility, functionality,
or speed. In addition, it has been designed from the ground up to be highly
portable accross many flavors of operating systems, including, but not
limited to POSIX Unices, Microsoft Windows, and Mac OS. As far as possible,
code using LIBPNET6 should be portable without problems to any other system
which LIBPNET6 supports, or in any case, at least the parts that actually
use the LIBPNET6 API.

LIBPNET6's major features are fully functional IP/IPv6 support, and
advanced features that are required by more complex network programs, such as
access to network interface information, access to raw network traffic at the
link layer, raw sockets, and sending and receiving of custom-built network
packets.

All IPv6 features are handled as generically as possible, without exposing
applicaton code to the miscellaneous issues and discrepancies between the
IPv4 and IPv6 socket API.

Features
========

    1 Currently LIBPNET6 supports a host of operating systems. See the
      section Supported Platforms for a list of platform to which
      LIBPNET6 has been ported.

    2 Fully working TCP/UDP/ICMP communications suite, both for IPv4 and
      IPv6 (including Windows 2000).

    3 Simultaneous listen on multiple sockets.
      Multiple means different port numbers, different network interfaces and
      addresses (broadcast, unicast, multicast), as well as different
      families IPv4 and IPv6, (also AF_LOCAL where supported).

    4 Get network interface information (MAC address, IP address, 
      broadcast address, interface index and name, etc ...). 

    5 Advanced datagram handling: get actual datagram destination address,
      get interface index on which datagram arrived. This is still being
      implemented for Windows. Additional information, pertaining to IPv6
      sockets, is also available (such as datagram's hoplimit).

    6 Multicasting: this work for both IPv6 and IP (at least where
      supported).

    7 Raw sockets. This lets us write ICMP and IGMP datagrams as well as
      datagrams with an own protocol (instead of TCP/UDP/ICMP etc...).
      Also, the building of own TCP/UDP packets is also supported.
      Rudimentary support is offered for IP_HDRINCL like functionality
      with IPv6 raw sockets. This is still highly experimental.

    8 Packet capture is implemented on BSD derived implementations,
      Linux and Windows (but not under CygWin). Can't implemented it under
      Solaris yet, cause I have no root access to a Sun.

    9 Multi-threading support is also provided, both explicitly through 
      API calls, and implicitly, dictating the behavior of the listen
      loop: each listen socket gets split off in a separate read thread
      once input for it becomes available so that the rest of the program
      remain active. Requires that your system supports POXIS threads. 

    - Whatever else I can think of.

Installing
==========

    See the file INSTALL.txt in the root of the LIBPNET6 distribution.


Contributing
============

    See the file DEVELOPERS in the root of the LIBNET6 distribution.

Tested and certified to work (if final version) 
===============================================

(Refers to the points in Section Features)

2 - 4, 6 - 9:  Windows 2000

1 - 9:  Linux 2.2.18pre21 #1 SMP sparc64 unknown
	Linux 2.4.19-pre3-ben0 #2 ppc unknown
	Linux 2.4.17 #1 SMP alpha unknown

	Linux 2.4.18-3 #1 i686 unknown	--> w/ IPv6

	Linux 2.4.14 #1 SMP i686 unknown
	Linux 2.2.17-pre1 #2 SMP ppc unknown
	Linux 2.4.18 #2 sparc64 unknown
	Linux 2.4.7-10 #1 i686 unknown

	Linux 2.2.20 #2 alpha

	FreeBSD 4.6-RELEASE FreeBSD 4.6-RELEASE #0 i386 --> w/ IPv6
	FreeBSD 4.7-RC FreeBSD 4.7-RC #14 i386 --> w/ IPv6

	OpenBSD 3.5 --> w/ IPv6
	NetBSD 1.5.3 --> w/ IPv6
	NetBSD-1.6-i386 --> w/ IPv6
	Darwin 5.5 Darwin Kernel Version 5.5 --> w/ IPv6

1 - 7:  CYGWIN_NT-5.0 1.3.11(0.53/3/2) 2002-06-23 i686

1 - 6, 9: 
	SunOS 5.8 sun4u sparc SUNW,Ultra-60 (*)
	AIX 4.3 
	OSF1 V5.0 (Tru64) w/ IPv6
	HP-UX B.11.00 A 9000/785 (*)

	(*) except hardware address of network interface card. 
