Free software is software that can be freely (as in free speech,
not as in free beer) copied, modified and redistributed, whether
modified or not. When free software is distributed, it is accompanied by the
source code and by a copyright license that
grants the said rights to those who obtain it.
Free software licenses are a natural choice
in a research environment.
The Multi-Application traffic generator was written in 1990 to run on a proprietary Motorola Delta SysV Unix running on 68030. It is a programmable packet traffic generator for Ethernet with a curses-based frontend and a backend that I wrote. MTG was used to develop, test and evaluate the FODA/IBEA satellite access protocol.
The backend of MTG was a Unix device driver which took control of the timer and Lance interrupts, after having programmed them at the unmaskable level. Since I had no access to the kernel sources, after having studied Writing a Unix device driver by Egan Teixeira I had to get really well acquainted with the Motorola C compiler and then to disassemble a couple of kernel routines. For anyone interested in historical programming, here is the code.
The Framed Channel Access Simulator was written around 1995 to study MAC protocols to access a geostationary satellite channel. It is a little more general than that, though, and can be used to simulate any framed multiple access scheme. It is a very fast, extensible, non-user friendly C program that has been used for several protocol studies:
Everyone is welcome to download the complete sources and a draft manual. There is also a short presentation (10 slides, 340KB). I will be happy to assist those who would like to adapt Fracas to their purposes.
A prototype simulator for satellite constellations that I contributed to design and implement in Java. It is configurable and extensible and works, tool. But it is little more than a core and a demo, and needs extension modules. Released under the GPL.
These are functions for Octave, a high-level language which uses a language very similar to that of Matlab. All these functions deal with Hurst noise, commonly known as fractional Gaussian noise (fGn). Network traffic generated as an aggregate of many sources has been shown to behave like fGn. A brief introduction to this topic, with references, can be found in Section 3 of Modeling Ka band scintillation as a fractal process, a paper published in 1999 on the IEEE Journal on selected areas in communications (JSAC). Fractional noise is characterised by at least the Hurst (H) parameter, which sinthetically describes its correlation properties. Estimating the Hurst parameter is not an easy task, and requires some knowledge of the possible pitfalls.
is a function for estimating the Hurst parameter of Hurst noise using one
of three methods: a quick and crude estimate of the Hurst parameter by
using the rescaled range statistic; the index of dispersion for
counts, more commonly known as peakedness, that is the
ratio of variance over mean; the variance-time plot method.
The two latter algorithms compute the relevant quantity over intervals of
different lenghts, and use the results to give an estimate of how well the
input data fit an fGn model in the form of a correlation coefficient, which
should be close to 1. The algorithms yield exactly the same results as far
as the Hurst parameter is concerned, but are differently sensitive to the
kind of noise they are feeded with, so it is useful to run both on the same
data and verify that they both return a high correlation coefficient.
Two related functions,
are conversely used to generate Gaussian Hurst noise, also called
fractional Gaussian noise (fGn for short). fGn can be used to
produce synthetic traces representing the traffic generated by the
aggregation of a multiplicity of traffic sources on a network. The first
function generates noise in the frequency domain and then uses
ifft to produce the result, which is a statistically exact
procedure. The second function uses the Random Midpoint Displacement
algorithm, hence its name. The algorithm, referenced in the above cited
paper, efficiently computes an approximation of fGn. The output of
RMDtraffic only contains nonnegative samples, making the results
immediately usable as synthetic traffic traces for simulation purposes in
the communications field.
Some more detail on these functions can be found in the message
that I sent to announce them to the Octave help mailing list. Since then,
I have merged
hurstVTP in the single
This is a package for Octave, a high-level language which uses a language very similar to that of Matlab. Leasqr uses the Levenberg-Marquardt algorithm for doing nonlinear regression. I found leasqr on the web, but it did not run on Octave (it was made for Matlab) and so I adapted it and published it. Since then, the original authors Richard I. Shrager, A.Jutan, Ray Muzic, and Sean Brennan agreed to put it under the GPL. Matthias Jueschke tested the program using a non-linear optimisation test suite, and was satisfied with the results.
The most current version of the leasqr is part of the optimization package at octave-forge. You should refer to the files leasqr.m, leasqrdemo.m and dfdp.m therein. The names of the individual files may change in the future. Please let me know if that happens so I can update this page.
A program written by Greg Minshall, presumably starting from the tcpdump sources, while he was working for Ipsilon Network, which was later bought by Nokia. Its most interesting feature is that it can take a tcpdump trace and change the source and destination IP addresses inside, but preserving common prefixes (if two addresses share the most significant k bits, so will the changed addresses). I added a flag for preserving the TCP and IP options. Also, all-zeros and all-ones IP addresses are now unconditionally preserved. I updated the presentation page, which has references to the source and documentation. A more recent anonymizer library and program is Anontool.
Vbrsr, a Wi-Fi frame sender and receiver that collects statistics relevant to channel state. This low-level software, written in C is being extensively used for reliable measurements, but is not user friendly.
Functions for Octave for performing computations about Wi-Fi networks (as defined by the IEEE 802.11 standard).
Measurements made on a rural open area have shown that the ns-2 two-ray CMU Monarch propagation model is too simplistic. In fact, ns-2 uses a double regression to approximate 2-ray, which is resonable for lower frequencies, such as GSM. For 802.11 frequencies, an exact 2-ray propagation model is more appropriate, as it accounts for holes in the signal strength that happen at the distances where the direct and reflected ray interfere destructively; this phenomenon may altogether prevent correct frame reception. Additionally, frame reception is not a yes-or-no condition based on a threshold power level at the receiver, but rather is well approximated by receiving error probability given by a simple AWGN (additive white Gaussian noise) channel model. wifiper is a function that computes PER (packet error rate) on a Wi-Fi link in rural area, without obstacles, given distance, packet length, speed and other parameters. The model used and the measurements upon which the model was based are described in
wifitmt is an utility function that computes the theoretical maximum throughput (TMT) of a Wi-Fi channel. The result is accurate for a two-nodes network in ad hoc mode where unicast traffic flows in a single direction without errors or collisions and ACKs are sent back at the same speed as the data.
TDMA-DAMA is an extension to ns-2.28, ns-2.31 and probably later written by Raffaello Secchi, of which I directed the design and validation. It is described in
An application is sketched as a fluidic simulator for TFRC connections, which mimics the ns-2 simulation.
CostGlue is a Python modular program for storing huge quantities of scientific data written by Dragan Savić, of which I directed the design and implementation. It is described in
On behalf of the Free Software Foundation (FSF) I currently volunteer to maintain etags, a program that can be compiled either as a replacement of the classic ctags Unix program or as etags, whose output file format is used by Emacs. The latest (unofficial) version of etags is available for download (30 KB).
A Unix shell script for checking a CD against the ISO image from which it has been burned. The comparison is made using an MD5 signature built from the original image or from a known good CD. Shows the location of the first read error detected. Can extract a disk Id from the image or the CD itself and build a local database of Ids for future checking of archived CDs. The Id contains the image length, the MD5 signature and the Volume ID of the disk, so it can automatically recognise the CD to check. Contains a small internal database of Debian CD images.
A Unix shell script that wraps around grep to make it understand files compressed with gzip or bzip2. You just use it like grep. If you rename it cegrep or cfgrep it will wrap around egrep or fgrep, respectively. Instead of renaming it, you can use a symbolic or hard link.
An Emacs add-on script in emacs lisp which simplifies the task of submitting a bug report to the Debian bug tracking system. Part of the debian-el Debian package. I handed the package over to Peter Galbraith, who is maintaining it much more actively than I was.
A Bash script for archiving images of your old floppy disks. In the default usage mode (no arguments) you just insert the diskette in drive A: and invoke the script, which will ask you for the name of the image it will create on file. floppyimg.sh then goes on reading the diskette geometry (using the mtools) and dumping an the image file. When it meets a bad sector it retries several times.
A Bash script for controlling and automatically restarting a Freenet node using the standard start-freenet.sh and stop-freeent.sh scripts. Continuously keeps an eye on the server, and restarts it when necessary, that is, when it does not respond, or exhausts the Java memory heap, or has not updated its working files for some minutes, or has had bad connection with other servers lately for many minutes. Keeps the length of the log file bounded. Use --help to know more. You can control run-freenet by means of this init.d script.
A Unix shell wrapper around tcpdump which optionally displays the contents of the packets.
A Unix shell script that implements a user interface to the Unix truncate(2) function using dd(1). It can be used both to shrink or enlarge a file without changing its inode number. If the file is shrunk, the contents can be discarded either from the beginning or from the end.