[home] | [FODA/IBEA] | [GaliLEO] | [fracas] | [fractals] | [leasqr] | [tcpdpriv] | [vbrsr] | [wifiutils] | [TDMA-DAMA] | [CostGlue]
[etags] | [checkiso] | [cgrep] | [debian-bug] | [floppyimg] | [run-freenet] | [tcpdump] | [truncate] | [movie]

CNR logo (png 3k) Software that I wrote or designed for supporting my research activity

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.

Fractal functions

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.

hurst 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, fGn, and RMDtraffic, 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 hurstIDC and hurstVTP in the single hurst function.


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.

WiFi utils

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 module for ns-2

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: a tool for packaging and exchanging simulation results

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

small GNU Head (png 3k) Free software that I wrote for the GNU project or for my personal or work interest


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.


A function for Octave that creates movies from a series of plots. The file movie.m contains a function that uses external programs like ffmpeg, convert, png2swf. It is not necessary to have all of them installed. The function includes complete documentation.

The Error Correcting Codes (ECC) Page
This is a really good list of free (in various senses) programs for coding and decoding. I keep a mirror of this page.
Forward error correcting codes by Phil Karn
Phil Karn's optimised really free codes.
Spamassassin is free software that tags spam mail. It is very powerful, using fuzzy checks that can rely upon other spam tagging systems. Its documentation is not perfecty clear, so I set up a small page explaining my experience with it, which may be useful to other people using it.