Please Note

This page looks much better in a browser that supports current web standards, but it is accessible to any browser or Internet device in the plain format you are currently seeing. Please consider updating your browser.

Archive Email

Somewhat similar to archivemail, this perl script (archive-mail.pl) takes an mbox-format mail folder, say MBOX, and moves all messages older than a particular cutoff date into separate mail folders by year, i.e., MBOX.2004, MBOX.2003, etc.

It's somewhat slow, because it forks around a lot, but it's not like you'd run it every hour.

Automatic Bonjour Proxy

This script (auto-bonjour-proxy.pl) periodically probes the local subnet for web servers and then becomes a Bonjour proxy for them. Basically, it integrates non-Bonjour servers into Apple's auto-configuration networking framework.

Requires a number of perl packages (get them from fink), nmap (also from fink) and mDNSProxyResponderPosix available as part of Apple's free POSIX Bonjour code.

Convert IETF Agendas to ical Format

This is a small perl script (ietf2ical.pl) that imports the ASCII agenda for an IETF meeting into Apple iCal. Once it's in there, you can then share it with the world (or not.)

Not for the faint of heart! One, because the IETF secretariat likes to change the format of the ASCII agenda from meeting to meeting, so this thing requires constant tweaking. Two, because I really wanted to try scripting MacOS X applications with perl, so this thing grabs stuff off the web, munges it badly and then shoots AppleEvents off to iCal in the vain hope of triggering some sort of response. Don't blame me if it messes up your iCal data!

But when it works, it works well enough.

Obsoleted by http://tools.ietf.org/agenda/.

Mail Stats

Spam graph.

This script (mail-stats.pl) takes an mbox-format mail folder and computes a histogram of emails per day, ready for feeding into gnuplot. I used to run this on my spam folder to see how well my filters were doing. (The graph is from a year-old folder, hence the dates in the past.)

KAME Idletime Scheduler Patch

This is a patch that implements idletime scheduling for the disk and network interfaces in FreeBSD. It is based on a 2002-10-28 snapshot of the KAME FreeBSD-4.7-SNAP code, which unfortunately isn't available on the KAME site anymore but may be gotten through their CVS. With a little work, this may well be ported to recent FreeBSD trees that incorporate the KAME ALTQ framework.

Use at your own risk - "research quality" code.

FreeBSD Bridging Fixes

This is a set of patches that we use with the TetherNet client boxes. The FreeBSD 4.7-RELEASE bridging code has two shortcomings:

  1. When a DHCP server runs on an interface that is part of a bridge set but has no carrier, DHCP requests from clients connected to other interfaces of the bridge set fail. This is because FreeBSD's ISC DHCP server uses bpf to capture incoming requests, and such bridged client requests are dropped on interfaces with no carrier before they reach the bpf. (The ISC DHCP server should really be using RawIP.) This is fixed by the first patch.
  2. Placing IPv6-enabled interfaces in a bridge set causes stateless auto-configuration to fail. IPv6 stateless auto-configuration is based on link-local addresses, and bridging causes link-local addresses associated to one interface to appear on another. As a work-around, the second patch prevents IPv6 packets from being bridged at all; this at least allows a routed IPv6 configuration to coexist with a bridged IPv4 one. (Much more extensive changes to the bridge code are required to cleanly integrate bridging and IPv6.)

Download patch »

IPdump

IPdump is a tool to generate detailed packet header dumps from packet traces in LBNL's libpcap format, such as generated by tcpdump. Ethereal is a vastly superior program (that wasn't available when I wrote this), but IPdump is still sometimes useful when post-processing dumps with pipes and command line tools. IPdump has been open-sourced under the Artistic License, and is hosted on SourceForge now.

IPdump development page »

Net::SSLeay Patches

Patches to Sampo Kellomäki's Net::SSLeay perl module. Adds support for registering a password callback and fixing various warning messages. Patches are against version 1.03 of the package, which should be on CPAN. Most of these patches are in Net::SSLeay 1.06.

Download patch »

Ensemble-TCP

TCP currently recalculates the path state of each connection from a fixed set of initial parameters over several round trips, during which the connection can be less than efficient. Ensemble-TCP (E-TCP) shares control block information among connections in series and aggregating it among connections in parallel. It makes the network transmission behavior of group of parallel E-TCP connections closely resemble that of a single TCP/Reno connection. Simulated web accesses using HTTP/1.0 over E-TCP show a significant performance improvement compared to TCP/Reno connection bundles.

Please refer to the CCR paper for details on E-TCP, or see RFC 2140 for the general idea.

The E-TCP implementation for the ns network simulator is available. This module was developed for ns-2.1b4, it will possibly break under newer versions.

Download tarball »

Webstone Patches

Patches SGI's webstone-2.1 providing per-request statistics and significantly improving stability. Webstone is now maintained by Mindcraft, and these patches will very likely not work for their newer versions.

Download patch »

NetPacket::IP Patches

This small patch fixes a bug present in the perl NetPacket-0.03 module that breaks IP checksum calculation. I've submitted it back to the authors. (The bug is still present in NetPacket-0.04. The FreeBSD port now includes this bugfix.)

Download patch »