Wednesday, July 11, 2007

New library

I have almost finished switching the LQL library to libnl, the netlink library. It supports more queuing disciplines but seems to be a bit less mature in terms of development. I have been adding bits of code to it as I start to understand how it works.

So far, parsing from XML is working, as well as parsing to XML (the save feature). Next up, is to port the CLASSIFY iptables extension into libnl and to extend the XML parse/safe format to include it.

Tuesday, June 19, 2007

Next up, "save" feature

After some compilation issues which were remedied by my mentor, Steven Pritchard, I successfully parsed the XML test file (shown earlier) and created the correct qdiscs/classes.

Still to do:
- "default" HTB class setting
- the Priomap qdisc and "set_prio" setting
- better error checking
- freeing memory

Tomorrow I will begin working on the "save" feature, which should allow current QoS settings to be saved into a gnode tree (similar to iptables-save).

Thursday, June 7, 2007

More on parsing

I lied in the last post, I've been using libxml2 to parse and write the config file. The example I posted had some minor errors in syntax which have been fixed now.

I had some problems with the Priomap qdisc and recursively traversing the xmlNodes while creating LQLElements. Because of this, I am creating a tree (a copy of the xml tree) using N-ary Trees included in Glib. This tree holds an xmlNode (for data such as qdisc type, and other properties), an LQLInterface (required for new LQLElements), and an LQLElement.

Thursday, May 31, 2007

Config file

I've decided to use XML (or a subset of XML) for saving settings to a text file.

Some notes:
- XML is able to save hierarchical information
- Major & minor numbers no longer need to be specified (program should do this automatically)
- Priority for HTB classes does not need to be specified (priority decreases for each additional class)
- Indentation will be ignored and probably not used by the program

Example file:

After looking into the GLib Simple XML Subset Parser, I think it would probably be easier to write my own parser.

Wednesday, May 30, 2007


Reading up on GLib and GObjects

IBM tutorial
GLib Reference Manual
GObject Reference Manual


Proposed Schedule

  • May 28 – June 11

    • Start coding

    • Compile and implement IMQ on Fedora 7

    • Look for additional use cases (e.g. by looking for other implementations of traffic shaping)

    • Work on design of GUI

    • Read up on ncurses API

  • June 12 – June 25

    • Finish use case study. Rough drawings of GUI have been made and shown to mentor.

    • Create IMQ rpm package

    • Testing of a basic traffic shaping script with IMQ package under different machines and networks

    • Start coding GUI

    • Look at code from other programs which use ncurses (e.g. bwm, aptitude, etc.).

  • June 26 – July 10

    • Complete all non-GUI related functions

  • July 11 – July 16

    • Have a rough GUI available for the end of Mid-term evaluation

  • July 17 – August 10

    • Program should be completed

  • August 11 – August 31

    • Advertise on Fedora forums and try to get beta testers

    • If additional time remains:

      • Add support for ipp2p and l7filter

      • Add CONNMARK support

      • Port tcconf to other distributions