knowplace.org

Requirements

Downloads

  • Linux Kernel 2.4.20+ - It's possible to run with older kernels, but why make life harder on yourself.
  • iproute2 - note that the included tc binary typically does NOT support HTB.
  • Modified (Intel) tc binary - also includes the tc diff (only if you need to compile) and other (unnecessary) patches
  • iptables - (recommended but not strictly required) - you can use iptables to either classify the traffic directly (may require patch-o-matic and the patching of your kernel), or mark the packets for classification via tc.

Compiling

kernel - I won't cover how to compile a kernel, but here are the config options that you'll probably need:

  • CONFIG_NET_SCHED=y
  • CONFIG_NET_SCH_CBQ=m*
  • CONFIG_NET_SCH_HTB=m
  • CONFIG_NET_SCH_CSZ=m*
  • CONFIG_NET_SCH_PRIO=m
  • CONFIG_NET_SCH_RED=m*
  • CONFIG_NET_SCH_SFQ=m
  • CONFIG_NET_SCH_TEQL=m*
  • CONFIG_NET_SCH_TBF=m*
  • CONFIG_NET_SCH_GRED=m*
  • CONFIG_NET_SCH_DSMARK=m*
  • CONFIG_NET_SCH_INGRESS=m*
  • CONFIG_NET_QOS=y
  • CONFIG_NET_ESTIMATOR=y*
  • CONFIG_NET_CLS=y
  • CONFIG_NET_CLS_TCINDEX=m
  • CONFIG_NET_CLS_ROUTE4=m
  • CONFIG_NET_CLS_ROUTE=y*
  • CONFIG_NET_CLS_FW=m
  • CONFIG_NET_CLS_U32=m
  • CONFIG_NET_CLS_RSVP=m
  • CONFIG_NET_CLS_RSVP6=m*
  • CONFIG_NET_CLS_POLICE=y

If you want to use iptables to mark packets, you'll need at least:

  • CONFIG_IP_NF_CONNTRACK=m
  • CONFIG_IP_NF_FTP=m
  • CONFIG_IP_NF_IRC=m
  • CONFIG_IP_NF_QUEUE=m*
  • CONFIG_IP_NF_IPTABLES=m
  • CONFIG_IP_NF_MATCH_LIMIT=m
  • CONFIG_IP_NF_MATCH_MAC=m
  • CONFIG_IP_NF_MATCH_PKTTYPE=m*
  • CONFIG_IP_NF_MATCH_MARK=m
  • CONFIG_IP_NF_MATCH_MULTIPORT=m*
  • CONFIG_IP_NF_MATCH_TOS=m*
  • CONFIG_IP_NF_MATCH_ECN=m*
  • CONFIG_IP_NF_MATCH_DSCP=m*
  • CONFIG_IP_NF_MATCH_AH_ESP=m*
  • CONFIG_IP_NF_MATCH_LENGTH=m
  • CONFIG_IP_NF_MATCH_TTL=m*
  • CONFIG_IP_NF_MATCH_TCPMSS=m*
  • CONFIG_IP_NF_MATCH_HELPER=m
  • CONFIG_IP_NF_MATCH_STATE=m
  • CONFIG_IP_NF_MATCH_IPLIMIT=m
  • CONFIG_IP_NF_MATCH_CONNTRACK=m
  • CONFIG_IP_NF_MATCH_UNCLEAN=m*
  • CONFIG_IP_NF_MATCH_OWNER=m*
  • CONFIG_IP_NF_FILTER=m*
  • CONFIG_IP_NF_TARGET_REJECT=m*
  • CONFIG_IP_NF_TARGET_MIRROR=m*
  • CONFIG_IP_NF_NAT=m*
  • CONFIG_IP_NF_NAT_NEEDED=y*
  • CONFIG_IP_NF_TARGET_MASQUERADE=m*
  • CONFIG_IP_NF_TARGET_REDIRECT=m*
  • CONFIG_IP_NF_NAT_LOCAL=y*
  • CONFIG_IP_NF_NAT_SNMP_BASIC=m*
  • CONFIG_IP_NF_NAT_IRC=m*
  • CONFIG_IP_NF_NAT_FTP=m*
  • CONFIG_IP_NF_MANGLE=m
  • CONFIG_IP_NF_TARGET_TOS=m*
  • CONFIG_IP_NF_TARGET_ECN=m*
  • CONFIG_IP_NF_TARGET_DSCP=m*
  • CONFIG_IP_NF_TARGET_MARK=m
  • CONFIG_IP_NF_TARGET_CLASSIFY=m (note that this is preferred over marking the packets)
  • CONFIG_IP_NF_TARGET_IMQ=m*
  • CONFIG_IP_NF_TARGET_LOG=m*
  • CONFIG_IP_NF_TARGET_ULOG=m*
  • CONFIG_IP_NF_TARGET_TCPMSS=m*

* You might not need these, but this is what I have enabled.

iproute2 + htb3.6_tc.diff:

  • Download and untar the content of iproute2-2.4.7-now-ss020116-try.tar.gz
  • Download and untar the content of htb3.6-020525.tgz - Note: You might want to make a directory first if you don't want the scatter
  • While inside the iproute2 directory, run patch -p1 < /path/to/htb3.6_tc.diff
  • After patching, run make && make install

If you run strings /sbin/tc |grep -i htb
it should return:

htb_util
htb2_util
Usage: ... qdisc add ... htb [default N] [r2q N]
... class add ... htb rate R1 burst B1 [prio P] [slot S] [pslot PS]
TC HTB version %d.%d
htb: failed to calculate rate table.
htb: failed to calculate ceil rate table.
htb2
            
 
Shane Tzen © 2010