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
http://www.snookles.com/erlang/edtk/. 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 (http://www.swig.org/), 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
drivers.
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
appreciated.
-Scott
--- snip --- snip --- snip --- snip --- snip --- snip ---
examples/README:
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.
See http://www.sleepycat.com/
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.
See http://www.packetfactory.net/projects/libnet/
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? :-)
See http://www.tcpdump.org/
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
flexible.
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.
See http://www.spread.org/
for source distributions for Spread, which is a
prerequisite for attempting to build this driver.
More information about the erlang-questions
mailing list