SctpDrv


History

The SCTP stack upon which SctpDrv is based was originally released for FreeBSD, OpenBSD and NetBSD as a set of patches in April 2002. In November 2006 it was merged to FreeBSD -CURRENT (CVS HEAD). The authoritative location for the code is in the sctpCVS repository; changes are taken from there and committed to FreeBSD SVN, as well as for other platforms including OS X, NetBSD, OpenBSD and Windows.

The Windows port of the FreeBSD SCTP stack was originally developed by co-research between CO-CONV, Corp. and WIDE Project.  The first release was made in March 2008, and was made available on the CO-CONV site here. In December 2008 another release was created which added the SCTP API. It can be found here. At that time the Windows SCTP code was held in a repository at http://trac.sctp.jp but unfortunately due to time constraints the sctp.jp site was discontinued in ealy-mid 2009. In late 2009 I decided to take a snapshot of code I had obtained while sctp.jp was still active and re-host it on bluestop.org. In the following months I attempted to take it from beta into a production-ready state.

All of the SCTP API documentation and a lot of the other documentation has been adapted from the FreeBSD manual pages which can be viewed online at http://www.freebsd.org/cgi/man.cgi

Installing

To use SctpDrv you must be running Windows XP, Windows Vista or Windows 7 (it should also work on Windows Server 2003 and Windows Server 2008, but is untested).

Download the latest version from http://www.bluestop.org/SctpDrv/releases/ and double-click the MSI file.

If the installation finds a copy of Vista or newer and the Windows Firewall is running, a new rule will be added to allow SCTP traffic to pass inbound through the firewall. If Windows XP is running or a 3rd-party firewall is installed, no firewall configuration will be done and you must allow protocol 132 to pass through the firewall in order for remote communications to work.

Once installed, you can verifiy the installation by runnning the echo_client.exe and echo_server.exe progams in C:\Program Files\SctpDrv\bin . These verify that loopback SCTP communication is working.

Tuning

You can modify stack parameters at runtime by using netsh; this provides a similar interface to sysctl on BSD and Linux. For example, to change the UDP tunneling port to 10000:

netsh sctp set sysctl udp_tunneling_port 10000

To see the current values, use netsh sctp show sysctl, to see descriptions of the sysctl nodes, use netsh sysctl show sysctl_desc and to see information about active associations, run netsh sysctl show association. For more information, just type netsh sctp.

Note that in order to use the sctp netsh interface you must have Administrator privileges - i.e. you need to run the commands in an elevated command prompt.

Status

The following SCTP API functions have been implemented:
sctp_peeloff, sctp_sendmsgx, sctp_sendx, sctp_sendmsg, sctp_send, sctp_recvmsg, sctp_opt_info, sctp_getpaddrs, sctp_getladdrs, sctp_getassocid, sctp_getaddrlen, sctp_freepaddrs, sctp_freeladdrs, sctp_connectx and sctp_bindx .

Information about the features supported by the SCTP stack can be found here.

Developing SCTP applications using SctpDrv

SctpDrv is provided as a kernel driver which contains the SCTP stack.  A Winsock provider dll is registered with Windows and gets called whenever an application wants to send data over SCTP. This way, the functionality is provided transparently to applications: IPPROTO_SCTP is just another protocol available in the socket (WSASocket) function call. The SCTP specific functions such as sctp_send are provided by linking to sctpsp.lib.

For information about using SctpDrv as a developer as opposed to an end-user, please see this page.


Time: 13:16:10 GMT, June 29, 2010
Windows is a registered trademark of Microsoft Corporation in the United States and other countries.