[Haskell] Piffle, a Packet Filter Language
weel at ugcs.caltech.edu
Fri May 25 11:47:35 EDT 2007
I have written a compiler for a packet filter language in Haskell. I
think this is a good example of how Haskell can be used in an
application domain (low level computer networking) where people tend
to use C for everything, including writing compilers. The language
itself is not very fancy, from a Haskell programmer's point of view,
but maybe you will still find this worth having at least a glance at.
This is a very early release. Expect it to blow up in your face, or,
more likely, fail to compile. Please report bugs. Thanks.
PIFFLE, A PACKET FILTER LANGUAGE
What is Piffle?
* "Piffle" is a pronounceable form of PFL, that is, Packet Filter
Language. ("Piffle" is also an obscure word for "chatter".)
* Piffle is a programming language for writing network packet
* The Piffle compiler accepts resource limits on the processor time
and memory used for processing each packet of input; simply pass
the -C or -M option, and it will check at compile time that your
program cannot not exceed the limits you specify.
* Piffle is easy to learn, because it is built around the familiar
abstractions of procedural languages such as C and Pascal.
* Piffle programs can be compiled with interchangeable back-ends
called "boilerplates". The pcap boilerplate, which comes with the
Piffle compiler, allows Piffle programs to read and write
pcap/tcpdump dump files, to read packets from network devices,
and to preprocess packets with Berkeley Packet Filters. You can
write your own boilerplates to talk to other network monitoring
interfaces, such as tun/tap.
* Piffle runs on GNU/Linux systems, and is designed to be portable
to other POSIX-compliant systems that run the GNU C Compiler gcc
and the Glasgow Haskell Compiler ghc.
* Hopefully, Piffle will in the future become available as an
operation in Streamline, an advanced network monitoring
framework, formerly known as FFPF, the fairly fast packet
filter. Streamline is being developed at the VU Amsterdam
Computer Systems Section. Within Streamline, Piffle will coexist
with Ruler, a regular-expression based packet rewriting language.
Piffle was designed and implemented by Jaap Weel as part of the
Compiler Construction Practical course at the VU Amsterdam CS
Read the code
Feel free to have a look at the source and do with it as you please
(within the bounds of the GPL, of course).
Download the code
For the most recent tarball release, which may still be broken, check
the downloads page.
For the latest (and even more possibly broken) version of Piffle, you
will have to use subversion.
Read the documentation
Be sure to have a look at the latest published version of the manual.
I would very much appreciate if people could try to compile and run
Piffle (in particular make test) on their own machines, and report
any problems on the issues page or by e-mail.
Get in touch with the author
You can contact the author at weel at ugcs dot caltech dot edu , or
visit his web site at http://www.ugcs.caltech.edu/~weel.
More information about the Haskell