Release 0.9 of the Erlang Driver ToolKit available

Scott Lystig Fritchie fritchie@REDACTED
Sat Oct 12 20:18:26 CEST 2002

I haven't been doing a very good job of publicizing the EDTK.  This
announcement won't do a very good job, either, but it's a start.

Version 0.9 of the Erlang Driver ToolKit is now available at  It can be used to create an
Erlang "driver" to execute functions in a pre-existing C library.  In
this sense, it is similar to SWIG (, which can be
used to create C & C++ extensions for Tcl, Perl, Python, and many
other languages.

The 0.9 release is quite mature: the drivers it generates, as far as I
can tell, are quite stable and usable.  Both "pipe" and "linked-in"
drivers are fully supported.  I've been developing on FreeBSD and
Linux platforms -- there isn't any reason why other UNIX flavors
wouldn't also work, so lemme know!

However, the documentation is still scant.  The best documentation is:

	* The paper I wrote and presented at the Erlang workshop
	associated with the ACM's PLI 2002.  It is also available at the
	above URL, separate from the source distribution.

	* A few README files, which may be helpful if you're at least
	a bit familiar with Erlang drivers already.

I'll attach below the README file that explains briefly each of the
example drivers.  Each driver comes with an Erlang regression test
program, which is (currently) the best documentation on how to use the

I'm going to be working on some more comprehensive documentation in
preparation for a symbolic "1.0" release.  Bug reports, bug fixes,
feature requests, feature implementations, etc. will all be


--- snip --- snip --- snip --- snip --- snip --- snip --- 


This directory contains example drivers, their XML specification
files, misc. glue code, and regression tests.

If you're just starting and want to look at some simple examples,
see the "simple0", "simple-pli2002", and "simple1" directories.

3rd-party-files This is where I put the header files and shared
		libraries to make compilation easier.  The Makefiles I
		use are pretty dumb, brute-force things.  What you'll
		find in here were compiled on FreeBSD 4.5 and Linux
		RedHat 6.1 systems.  For other platforms, You'll need
		to fetch the original source distributions and
		reconfigure/recompile those things for yourself.

berkeley_db	This driver is still incomplete: the Berkeley DB 4.x
		API is about 2/3 complete.

		for source distributions for Berkeley DB, which is a
		prerequisite for attempting to build this driver.

ethbridge	Not a driver but an Erlang OTP application: a
		multi-port Ethernet bridge.  Uses the libnet and
		libpcap drivers.  Startup/usage is poorly documented
		in this release, alas.

		It would be interesting if, in conjunction with an
		802.11b "Wi-Fi" wireless network interface, if this
		could be used to create an Erlang-based "access point"
		(also often called a "base station").  If so, then
		with a bit of extra Erlang code, you could build a
		custom authentication & filtering infrastructure.

libnet		Erlang's bit syntax makes half of libnet's features,
		packet creation, not very attractive.  However, it
		does provide a common API for transmitting network
		data at Layer 3 (IP) and Layer 2 (Ethernet).  There
		are weird quirks regarding those things, especially on
		Linux platforms ... a consistent API is quite welcome.

		for source distributions for libnet, which is a
		prerequisite for attempting to build this driver.
		See also: the file "../README" for additional
		compilation instructions.

libpcap		This driver covers most of libpcap's API.  The only
		function that's implemented but not implemented
		very well is pcap_findalldevs(), since I don't know
		how to pick apart all of the data structures that
		it returns.  Perhaps some kind soul could suggest
		a fix?  :-)

		for source distributions for libpcap, which is a
		prerequisite for attempting to build this driver.
		See also: the file "../README" for additional
		compilation instructions.

simple0		Implements only one function, sleep(3), but does
		it using two different methods: synchronously
		and asynchronously.  The asynchronous driver call will
		not block the entire Erlang virtual machine while
		the sleep(3) call is executing.

simple1		This was the first XML spec I wrote, to flesh things
		out from the bottom-up.  It doesn't make a whole lot
		of sense: it's a lot of things thrown together into
		the same simple1.xml spec.  However, I didn't want to
		implement too much that "wasn't needed", so it grew
		organically.  From an XML purist's perspective, I've
		probably done some horrible things.  From a XML
		pragmatist's point of view, it's been wonderfully

simple-pli2002	Contains the verbatim examples from the PLI2002 paper.

spread		Spread is a high-performance multicast messaging
		library.  This driver covers most of Spread's compact
		API.  The most notable omissions are the
		scatter/gather versions of the message send & receive
		functions.  Erlang doesn't give the programmer the
		kind of control over memory allocation & use, so it
		didn't make sense to create driver interfaces for
		those functions.
		for source distributions for Spread, which is a
		prerequisite for attempting to build this driver.

More information about the erlang-questions mailing list