You need: iproute2-2.2.4-now-ss001007.tar.gz linux-2.4.18.tar.gz This may work with next versions too. Example Step by Step install ------------------------------------------------------------------ Install kernel: tar zxvf linux-2.4.18.tar.gz cd linux cat linux-2.4.18-esfq.diff | patch -p1 make menuconfig Now you have it in: Networking options ---> QoS and/or fair queueing ---> ESFQ queue Configure and install kernel make dep clean bzImage modules_install cp System.map /boot/ cp arch/i386/boot/bzImage /boot/bzImage Edit lilo.conf and add your new kernel. ------------------------------------------------------------------ Install iproute: tar zxvf iproute2-2.2.4-now-ss001007.tar.gz cd iproute2 cat iproute2-2.2.4-now-ss001007-esfq.diff | patch -p1 make /* Note: If you get an error in lib/ll_proto.c comment _PF(ECHO,echo) */ cp tc/tc your_favourite_iproute_path/tc cp ip/ip your_favourite_iproute_path/ip ------------------------------------------------------------------ Usage: ... esfq [ perturb SECS ] [ quantum BYTES ] [ depth FLOWS ] [ divisor HASHBITS ] [ limit PKTS ] [ hash HASHTYPE] Where: HASHTYPE := { classic | src | dst } Examples: tc qdisc add dev eth0 root esfq limit 128 depth 128 divisor 10 \ hash classic perturb 15 Setups a classic SFQ. tc qdisc add dev eth0 root esfq limit 64 depth 64 divisor 11 \ hash dst Setups a dst SFQ with limit and depth of 64 packets and 11bits (2048 rows) hash table. 1:1 with sch_sfq. You can experiment with the values as you like to find the best which sfq can do for you. More can be found in: linux/net/sched/sch_sfq.c linux/net/sched/sch_esfq.c Limits: - limit must be less than depth - divisor must be less than 15