The Visual Traffic Control Configurator project (TCGUI) provides a tool for designing traffic control structure of Linux systems using the iproute2 networking subsystem. Created configuration schemas keep information about the structure and attributes of shaped interfaces, queuing disciplines, filters and classes. Specifications of supported traffic control objects, their features, attributes and usage are held in separate XML definition files. TCGUI allows exporting the configuration into a shell script, that sets the traffic control configuration of the kernel. Generated scripts are intended to be easy to understand and easy to modify - that makes them independent of TCGUI itself. TCGUI can be run on any platform with Java 1.4 environment and it is based on the JGraph library.
The TCGUI should allow user to easily create a diagram defining the network traffic control. Using this, it is possible e.g. to split the main bandwith into smaller parts with smaller bandwiths defined. Those parts can be subsequently assigned to system services, different processes, i.p. addressess or single users as well. Iproute2, of course, provides lots of other methods and apporoaches and the aim of TCGUI is to reduce the complixity of their usage. After creating of such a diagram user tells TCGUI to generate the configuration script, which is responsible for kernel traffic control setting.
Figure 1 shows modules of TCGUI system.
#!/bin/bash # ########################################################### # # This script was generated by the TCGUI project. # # # http://sourceforge.net/projects/tcgui # # ########################################################### # Initialize variables used through the script. DEVICE="eth0" # Delete all previous egress tc settings on the device. tc qdisc del dev $DEVICE root >/dev/null 2>&1 # Delete all previous ingress tc settings on the device. #tc qdisc del dev $DEVICE ingress >/dev/null 2>&1 # (ingress not supported yet, check for new versions) # create root qdisc 'Root Qdisc' of type htb tc qdisc add dev $DEVICE root handle 1: htb # create class 'Main Class' of type htb tc class add dev $DEVICE parent 1: classid 1:1 htb rate 512kbit # create class 'LOW Prio' of type htb tc class add dev $DEVICE parent 1:1 classid 1:3 htb rate 384kbit ceil 512kbit # create class 'HI Prio' of type htb tc class add dev $DEVICE parent 1:1 classid 1:2 htb rate 128 ceil 128 # create filter element 'games' for filter 'Main Class Filter' of type u32 tc filter add dev $DEVICE parent 1:1 protocol ip prio 1 u32 match ip sport 27005 0xffff flowid 1:2 # create filter element 'default' for filter 'Main Class Filter' of type u32 tc filter add dev $DEVICE parent 1:1 protocol ip prio 1 u32 match ip src 0.0.0.0/0 flowid 1:3