
README for SCTP stack for KAME

Description
-----------
This SCTP stack is a kernel implementation which fully supports RFC 2960
as well as updates and enhancements from the following Internet Drafts:
   draft-ietf-tsvwg-sctpcsum-05.txt
   draft-ietf-tsvwg-sctpimpguide-05.txt
   draft-ietf-tsvwg-sctpsocket-04.txt
   draft-ietf-tsvwg-addip-sctp-05.txt
   draft-stewart-prsctp-00.txt
   draft-stewart-tsvwg-sctpipv6-00.txt
   draft-iyengar-sctp-cacc-00.txt

A small user-space library addition to 'libc' is used to provide the new
system calls that SCTP provides (see draft-ietf-tsvwg-sctpsocket-03.txt
for details).

Both IPv4 and IPv6 are supported-- e.g. it is a dual-stack implementation.
Provisions are given for passing either IPv4-mapped or native IPv4 addresses
over PF_INET6 sockets.

The SCTP stack has been integrated and tested with KAME releases of
FreeBSD 4.5 and NetBSD 1.5.2. This release has been compiled with
the KAME release for OpenBSD on a Ultra-sparc however it could
not be tested due to alignment problems in the base IPv6 code with
the 64 bit processor. We hope to test OpenBSD on x86 soon.


Configuring and Building the Kernel
-----------------------------------
Get the KAME source for your target platform (eg. freebsd4, netbsd152, 
openbsd3) and "prepare" the source (see 'INSTALL' at the top of the 
KAME source tree)

Run 'prepare.sh' at the top of the sctpBsd source tree if
you have a seperate SCTP/KAME installation. Newer
versions of KAME include the SCTP stack so you do not
need to get the seperate tar image and run prepare.sh

[FIX ME - remove this since the source will be part of KAME now...]

The following kernel options have been added for SCTP:
options	      SCTP		       # adds SCTP stack to kernel
options	      SCTP_DEBUG	       # adds debugging support for SCTP
options	      SCTP_TCP_MODEL_SUPPORT   # adds TCP model support
options	      SCTP_USE_ADLER32	       # use obsolete Adler32 checksum,
				       # instead of CRC-32c
				       # this may be removed in the future

Add 'SCTP' at a minimum to your kernel configuration file, and build as
directed for the appropriate target platform (e.g. see 'freebsd4/INSTALL')

After configuring the kernel above, goto {$TARGET}/sys/kern in the KAME
distribution and do make init_sysent.c'.  This will generate the following
files:
   {$TARGET}/sys/kern/syscalls.c
   {$TARGET}/sys/kern/init_sysent.c
   {$TARGET}/sys/sys/sysproto.h
   {$TARGET}/sys/sys/syscall.h
   {$TARGET}/sys/sys/syscall.mk
   {$TARGET}/sys/sys/syscall-hide.h

You will need to copy the .h files when building libc to
/usr/src/sys/sys.

and you should also copy them to /usr/include/sys
as well.



Configuring and Building the user library portion
-------------------------------------------------
0. Kernel must be configured and built before proceeding.

1. Copy files from usr.lib to /usr/src/lib/libc/net:
      sctp_sys_calls.c

2. Copy files from the KAME distribution into /usr/src/lib/libc/net:
      kame/kame/libinet6/getaddrinfo.3
      kame/kame/libinet6/getaddrinfo.c
      kame/kame/libinet6/rthdr.c
      kame/kame/libinet6/resolv/res_send.c

3. Add sctp_sys_calls.c to SRCS in /usr/src/lib/libc/net/Makefile.inc

4. Copy the syscall related header files created during kernel configuration
   and build into the non-KAME kernel build tree (eg. from KAME's
   {$TARGET}/sys/sys/ to /usr/src/sys/sys/)

4.a For netbsd you will also need to /usr/src/lib/libc/sys/Makefile.inc
    by adding sctp_peeloff.o to the ASM line (near select.o).

5. Rebuild the library from /usr/src/lib/libc and install


Multi-homing considerations
---------------------------
The SCTP stack provides full support of multi-homed platforms by adding
support for multiple default gateway routes and alternate route selection
to the routing subsystem.

This feature is added to the routing subsystem when SCTP is compiled in
and is currently required.


Application development considerations
--------------------------------------
The following are the only header files that are normally required by
the application to add SCTP support:
   <netinet/sctp.h>
   <netinet/sctp_uio.h>

See Internet Draft draft-ietf-tsvwg-sctpsocket-04.txt for details.

>>> Undocumented Socket Options <<<
IPv4-mapped addresses vs. the default IPv4 addresses on PF_INET6 sockets
  Note: KAME kernel tunable must also be appropriately set to enable mapped
  addresses support

>>> PR-SCTP "timeout" types <<<
time
available buffer space

Test application
----------------
The sctp_test_app can be built from the top of the 
current SCTP tree. [we will need to move this
into the kame tree somewhere]. It builds two libraries
under the directories baselib and user. The app directory
holds the actual sctp_test_app. Note the libc.a must be
rebuilt with the sctp_peeloff and other library functions.



