Kickass Qdisc - v. 1.0
Marcel Flores - marcel-flores@u.northwestern.edu

About
=====
Kickass is a congestion control mechanism by Marcel Flores and Aleksandar
Kuzmanovic at the Northwestern Networks Group.

These files contain the implementation of the Kickass router for Linux. The
router logic has been implemented as a Linux qdisc which can be attached to an
outgoing network interface

Dependencies
============
0) Ensure you have the source headers installed for your current kernel version
   (sch_kickass has only been tested in 3.12.3, but will likely work in other
   versions, user beware!)

1) Custom version of tc (included).

    Unpack the included coded for iproute2
    
        tar xzvf iproute2_kickass.tgz

    Compile it:
        
        cd iproute2_kickass
        make

2) ethtool - the setup scripts make use of ethtool to disable offloading.

Building sch_kickass:
=====================
1) make

Installing:
===========
1) First, be sure to turn off offloading (current implementations require
   offloading to be truned off):
     
    ./turn_off_offloading.sh <network_device>

2) Run the launch script

    ./launch_sch_kickass.sh <network_device>

    This performs two tasks. First, it loads the kernel module. Second, it
    attaches to kickass queueing discipline to the specified network device with
    a 1000 packet queue

Removing:
=========

1) Simply run:

    ./kill_sch_kickass.sh <network_device>

    to remove the qdisc and remove the kernel module.

Known Bugs:
===========
-Fragmentation behaves oddly on other kernel versions.
-Any checksum or other offloading causes issues (maybe fundamemtal with packet
    manipulation)
-Router rate subject to integer inaccuracies. The reference implementation uses
a user space daemon to perform calculations in userspace, however this
introduces a number of issues. Given that we have to massage to the nearest
acceptable fragment size, the error should be tolerable. In the mean time, it
keeps the rate stored as a *10 value, to add precision.

Acknowledgements
================
Kickass development team acknowledgements can be found on the project website.

Contact
=======
Questions and comments should be directed to Marcel Flores at
marcel-flores@u.northwestern.edu


