5.1. Kernel requirements
Many distributions provide kernels with modular or monolithic support
for traffic control (Quality of Service). Custom kernels may not
already provide support (modular or not) for the required features. If
not, this is a very brief listing of the required kernel options.
The user who has little or no experience compiling a kernel is
recommended to Kernel
HOWTO. Experienced kernel compilers should
be able to determine which of the below options apply to the desired
configuration, after reading a bit more about traffic control and
planning.
Example 1. Kernel compilation options
#
# QoS and/or fair queueing
#
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
|
A kernel compiled with the above set of options will provide modular
support for almost everything discussed in this documentation. The user
may need to modprobe
module before using a given
feature. Again, the confused user is recommended to the
Kernel
HOWTO, as this document cannot adequately address questions
about the use of the Linux kernel.
5.2. iproute2 tools (tc)
iproute2 is a suite of command line utilities which
manipulate kernel structures for IP networking
configuration on a machine. For technical documentation on these tools,
see the iproute2
documentation and for a more expository discussion, the
documentation at linux-ip.net. Of the tools in the iproute2
package, the binary tc is the only one used for traffic control. This
HOWTO will ignore the other tools in the suite.
Because it interacts with the kernel to direct the creation, deletion
and modification of traffic control structures, the tc binary needs to
be compiled with support for all of the qdiscs you wish to use.
In particular, the HTB qdisc is not supported yet in the upstream
iproute2 package. See
Section 7.1 for more information.
The tc tool performs all of the configuration of the kernel structures
required to support traffic control. As a result of its many uses, the
command syntax can be described (at best) as arcane. The utility takes
as its first non-option argument one of three Linux traffic control
components, qdisc, class or filter.
Example 2. tc command usage
[root@leander]# tc
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
where OBJECT := { qdisc | class | filter }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] }
|
Each object accepts further and different options, and will be
incompletely described and documented below. The hints in the examples
below are designed to introduce the vagaries of tc command line
syntax. For more examples, consult the LARTC HOWTO. For even
better understanding, consult the kernel and iproute2 code.
Above was the simplest use of the tc utility for adding a queuing
discipline to a device. Here's an example of the use of tc to add a
class to an existing parent class.
As evidenced above, the tc command line utility has an arcane and
complex syntax, even for simple operations such as these examples show.
It should come as no surprised to the reader that there exists an easier
way to configure Linux traffic control. See the next section,
Section 5.3.
5.3. tcng, Traffic Control Next Generation
FIXME; sing the praises of tcng. See also
Traffic Control using tcng and HTB HOWTO and
tcng
documentation.
Traffic control next generation (hereafter, tcng) provides all of the
power of traffic control under Linux with twenty percent of the
headache.