#!/bin/bash
#
#    cbq.init v0.7.3
#    Copyright (C) 1999  Pavel Golubev <pg@ksi-linux.com>
#    Copyright (C) 2001-2004  Lubomir Bulej <pallas@kadan.cz>
#
#    chkconfig:   2345 11 89
#    description: sets up CBQ-based traffic control
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#    To get the latest version, check on Freshmeat for actual location:
#
#		http://freshmeat.net/projects/cbq.init
#
#
# VERSION HISTORY
# ---------------
# v0.7.3- Deepak Singhal <singhal at users.sourceforge.net>
#	  - fix timecheck to not ignore regular TIME rules after
#	    encountering a TIME rule that spans over midnight
#	- Nathan Shafer <nicodemus at users.sourceforge.net>
#	  - allow symlinks to class files
#	- Seth J. Blank <antifreeze at users.sourceforge.net>
#	  - replace hardcoded ip/tc location with variables
#	- Mark Davis <mark.davis at gmx.de>
#	  - allow setting of PRIO_{MARK,RULE,REALM} in class file
#	- Fernando Sanch <toptnc at users.sourceforge.net>
#	  - allow underscores in interface names
# v0.7.2- Paulo Sedrez
#	  - fix time2abs to allow hours with leading zero in TIME rules
#	- Svetlin Simeonov <zvero at yahoo.com>
#	  - fix cbq_device_list to allow VLAN interfaces
#	- Mark Davis <mark.davis at gmx.de>
#	  - ignore *~ backup files when looking for classes
#	- Mike Boyer <boyer at administrative.com>
#	  - fix to allow arguments to be passed to "restart" command
# v0.7.1- Lubomir Bulej <pallas at kadan.cz>
#	  - default value for PERTURB
#	  - fixed small bug in RULE parser to correctly parse rules with
#	    identical source and destination fields
#	  - faster initial scanning of DEVICE fields
# v0.7	- Lubomir Bulej <pallas at kadan.cz>
#	  - lots of various cleanups and reorganizations; the parsing is now
#	    some 40% faster, but the class ID must be in range 0x0002-0xffff
#	    (again). Because of the number of internal changes and the above
#	    class ID restriction, I bumped the version to 0.7 to indicate
#	    something might have got broken :)
#	  - changed PRIO_{U32,FW,ROUTE} to PRIO_{RULE,MARK,REALM}
#	    for consistency with filter keywords
#	  - exposed "compile" command
#	- Catalin Petrescu <taz at dntis.ro>
#	  - support for port masks in RULE (u32) filter
#	- Jordan Vrtanoski <obeliks at mt.net.mk>
#	  - support for week days in TIME rules
# v0.6.4- Lubomir Bulej <pallas at kadan.cz>
#	  - added PRIO_* variables to allow easy control of filter priorities
#	  - added caching to speed up CBQ start, the cache is invalidated
#	    whenever any of the configuration files changes
#	  - updated the readme section + some cosmetic fixes
# v0.6.3- Lubomir Bulej <pallas at kadan.cz>
#	  - removed setup of (unnecessary) class 1:1 - all classes
#	    now use qdisc's default class 1:0 as their parent
#	  - minor fix in the timecheck branch - classes
#	    without leaf qdisc were not updated
#	  - minor fix to avoid timecheck failure when run
#	    at time with minutes equal to 08 or 09
#	  - respect CBQ_PATH setting in environment
#	  - made PRIO=5 default, rendering it optional in configs
#	  - added support for route filter, see notes about REALM keyword
#	  - added support for fw filter, see notes about MARK keyword
#	  - added filter display to "list" and "stats" commands
#	  - readme section update + various cosmetic fixes
# v0.6.2- Catalin Petrescu <taz at dntis.ro>
#	  - added tunnels interface handling
# v0.6.1- Pavel Golubev <pg at ksi-linux.com>
#	  - added sch_prio module loading
#	    (thanks johan at iglo.virtual.or.id for reminding)
#	  - resolved errors resulting from stricter syntax checking in bash2
#	- Lubomir Bulej <pallas at kadan.cz>
#	  - various cosmetic fixes
# v0.6	- Lubomir Bulej <pallas at kadan.cz>
#	  - attempt to limit number of spawned processes by utilizing
#	    more of sed power (use sed instead of grep+cut)
#	  - simplified TIME parser, using bash builtins
#	  - added initial support for SFQ as leaf qdisc
#	  - reworked the documentation part a little
#	  - incorporated pending patches and ideas submitted by
#	    following people for versions 0.3 into version 0.6
#	- Miguel Freitas <miguel at cetuc.puc-rio.br>
#	  - in case of overlapping TIME parameters, the last match is taken
#	- Juanjo Ciarlante <jjo at mendoza.gov.ar>
#	  - chkconfig tags, list + stats startup parameters
#	  - optional tc & ip command logging (into /var/run/cbq-*)
#	- Rafal Maszkowski <rzm at icm.edu.pl>
#	  - PEAK parameter for setting TBF's burst peak rate
#	  - fix for many config files (use find instead of ls)
# v0.5.1- Lubomir Bulej <pallas at kadan.cz>
#	  - fixed little but serious bug in RULE parser
# v0.5	- Lubomir Bulej <pallas at kadan.cz>
#	  - added options PARENT, LEAF, ISOLATED and BOUNDED. This allows
#	    (with some attention to config file ordering) for creating
#	    hierarchical structures of shapers with classes able (or unable)
#	    to borrow bandwidth from their parents.
#	  - class ID check allows hexadecimal numbers
#	  - rewritten & simplified RULE parser
#	  - cosmetic changes to improve readability
#	  - reorganization to avoid duplicate code (timecheck etc.)
#	  - timecheck doesn't check classes without TIME fields anymore
# v0.4  - Lubomir Bulej <pallas at kadan.cz>
#	  - small bugfix in RULE parsing code
#	  - simplified configuration parsing code
#	  - several small cosmetic changes
#	  - TIME parameter can be now specified more than once allowing you to
#	    differentiate RATE throughout the whole day. Time overlapping is
#	    not checked, first match is taken. Midnight wrap (eg. 20:00-6:00)
#	    is allowed and taken care of.
# v0.3a4- fixed small bug in IF operator. Thanks to
#	  Rafal Maszkowski <rzm at icm.edu.pl>
# v0.3a3- fixed grep bug when using more than 10 eth devices. Thanks to David
#	  Trcka <trcka at poda.cz>.
# v0.3a2- fixed bug in "if" operator. Thanks kad at dgtu.donetsk.ua.
# v0.3a - added TIME parameter. Example: TIME=00:00-19:00;64Kbit/6Kbit
#	  So, between 00:00 and 19:00 the RATE will be 64Kbit.
#	  Just start "cbq.init timecheck" periodically from cron
#	  (every 10 minutes for example). DON'T FORGET though, to run
#	  "cbq.init start" for CBQ to initialize.
# v0.2  - Some cosmetic changes. Now it is more compatible with old bash
#	  version. Thanks to Stanislav V. Voronyi <stas at cnti.uanet.kharkov.ua>.
# v0.1  - First public release
#
#
# README
# ------
#
# First of all - this is just a SIMPLE EXAMPLE of CBQ power.
# Don't ask me "why" and "how" :)
#
# This script is meant to simplify setup and management of relatively simple
# CBQ-based traffic control on Linux. Access to advanced networking features
# of Linux kernel is provided by "ip" and "tc" utilities from A. Kuznetsov's
# iproute2 package, available at ftp://ftp.inr.ac.ru/ip-routing. Because the
# utilities serve primarily to translate user wishes to RTNETLINK commands,
# their interface is rather spartan, intolerant and requires quite a lot of
# typing. And typing is what this script attempts to reduce :)
#
# The advanced networking stuff in Linux is pretty flexible and this script
# aims to bring some of its features to the not-so-hard-core Linux users. Of
# course, there is a tradeoff between simplicity and flexibility and you may
# realize that the flexibility suffered too much for your needs -- time to
# face "ip" and "tc" interface.
#
# To speed up the "start" command, simple caching was introduced in version
# 0.6.4. The caching works so that the sequence of "tc" commands for given
# configuration is stored in a file (/var/cache/cbq.init by default) which
# is used next time the "start" command is run to avoid repeated parsing of
# configuration files. This cache is invalidated whenever any of the CBQ
# configuration files changes. If you want to run "cbq.init start" without
# caching, run it as "cbq.init start nocache". If you want to force cache
# invalidation, run it as "cbq.init start invalidate". Caching is disabled
# if you have logging enabled (ie. CBQ_DEBUG is not empty).
#
# If you only want cqb.init to translate your configuration to "tc" commands,
# use "compile" command which will output "tc" commands required to build
# your configuration. Bear in mind that "compile" does not check if the "tc"
# commands were successful - this is done (in certain places) only when the
# "start nocache" command is used, which is also useful when creating the
# configuration to check whether it is completely valid.
#
# All CBQ parameters are valid for Ethernet interfaces only, The script was
# tested on various Linux kernel versions from series 2.1 to 2.4 and several
# distributions with KSI Linux (Nostromo version) as the premier one.
#
#
# HOW DOES IT WORK?
# -----------------
#
# Every traffic class must be described by a file in the $CBQ_PATH directory
# (/etc/sysconfig/cbq by default) - one file per class.
#
# The config file names must obey mandatory format: cbq-<clsid>.<name> where
# <clsid> is two-byte hexadecimal number in range <0002-FFFF> (which in fact
# is a CBQ class ID) and <name> is the name of the class -- anything to help
# you distinguish the configuration files. For small amount of classes it is
# often possible (and convenient) to let <clsid> resemble bandwidth of the
# class.
#
# Example of valid config name:
#	cbq-1280.My_first_shaper
#
#
# The configuration file may contain the following parameters:
#
### Device parameters
#
# DEVICE=<ifname>,<bandwidth>[,<weight>]	mandatory
# DEVICE=eth0,10Mbit,1Mbit
#
#	<ifname> is the name of the interface you want to control
#		traffic on, e.g. eth0
#	<bandwidth> is the physical bandwidth of the device, e.g. for
#		ethernet 10Mbit or 100Mbit, for arcnet 2Mbit
#	<weight> is tuning parameter that should be proportional to
#		<bandwidth>. As a rule of thumb: <weight> = <bandwidth> / 10
#
# When you have more classes on one interface, it is enough to specify
# <bandwidth> [and <weight>] only once, therefore in other files you only
# need to set DEVICE=<ifname>.
#
### Class parameters
#
# RATE=<speed>					mandatory
# RATE=5Mbit
#
#	Bandwidth allocated to the class. Traffic going through the class is
#	shaped to conform to specified rate. You can use Kbit, Mbit or bps,
#	Kbps and Mbps as suffices. If you don't specify any unit, bits/sec
#	are used. Also note that "bps" means "bytes per second", not bits.
#
# WEIGHT=<speed> 				mandatory
# WEIGHT=500Kbit
#
#	Tuning parameter that should be proportional to RATE. As a rule
#	of thumb, use WEIGHT ~= RATE / 10.
#
# PRIO=<1-8>					optional, default 5
# PRIO=5
#
#	Priority of class traffic. The higher the number, the lesser
#	the priority. Priority of 5 is just fine.
#
# PARENT=<clsid>				optional, default not set
# PARENT=1280
#
#	Specifies ID of the parent class to which you want this class be
#	attached. You might want to use LEAF=none for the parent class as
#	mentioned below. By using this parameter and carefully ordering the
#	configuration files, it is possible to create simple hierarchical
#	structures of CBQ classes. The ordering is important so that parent
#	classes are constructed prior to their children.
#
# LEAF=none|tbf|sfq				optional, default "tbf"
#
#	Tells the script to attach specified leaf queueing discipline to CBQ
#	class. By default, TBF is used. Note that attaching TBF to CBQ class
#	shapes the traffic to conform to TBF parameters and prevents the class
#	from borrowing bandwidth from its parent even if you have BOUNDED set
#	to "no". To allow the class to borrow bandwith (provided it is not
#	bounded), you must set LEAF to "none" or "sfq".
#
#	If you want to ensure (approximately) fair sharing of bandwidth among
#	several hosts in the same class, you might want to specify LEAF=sfq to
#	attach SFQ as leaf queueing discipline to that class.
#
# BOUNDED=yes|no				optional, default "yes"
#
#	If set to "yes", the class is not allowed to borrow bandwidth from
#	its parent class in overlimit situation. If set to "no", the class
#	will be allowed to borrow bandwidth from its parent.
#
# Note:	Don't forget to set LEAF to "none" or "sfq", otherwise the class will
#	have TBF attached to itself and will not be able to borrow unused
#	bandwith from its parent.
#
# ISOLATED=yes|no				optional, default "no"
#
#	If set to "yes", the class will not lend unused bandwidth to
#	its children.
#
### TBF qdisc parameters
#
# BUFFER=<bytes>[/<bytes>]			optional, default "10Kb/8"
#
#	This parameter controls the depth of the token bucket. In other
#	words it represents the maximal burst size the class can send.
#	The optional part of parameter is used to determine the length
#	of intervals in packet sizes, for which the transmission times
#	are kept.
#
# LIMIT=<bytes>					optional, default "15Kb"
#
#	This parameter determines the maximal length of backlog. If
#	the queue contains more data than specified by LIMIT, the
#	newly arriving packets are dropped. The length of backlog
#	determines queue latency in case of congestion.
#
# PEAK=<speed>					optional, default not set
#
#	Maximal peak rate for short-term burst traffic. This allows you
#	to control the absolute peak rate the class can send at, because
#	single TBF that allows 256Kbit/s would of course allow rate of
#	512Kbit for half a second or 1Mbit for a quarter of second.
#
# MTU=<bytes>  					optional, default "1500"
#
#	Maximum number of bytes that can be sent at once over the
#	physical medium. This parameter is required when you specify
#	PEAK parameter. It defaults to MTU of ethernet - for other
#	media types you might want to change it.
#
# Note: Setting TBF as leaf qdisc will effectively prevent the class from
#	borrowing bandwidth from the ancestor class, because even if the
#	class allows more traffic to pass through, it is then shaped to
#	conform to TBF.
#
### SFQ qdisc parameters
#
# The SFQ queueing discipline is a cheap way for sharing class bandwidth
# among several hosts. As it is stochastic, the fairness is approximate but
# it will do the job in most cases. If you want real fairness, you should
# probably use WRR (weighted round robin) or WFQ queueing disciplines. Note
# that SFQ does not do any traffic shaping - the shaping is done by the CBQ
# class the SFQ is attached to.
#
# QUANTUM=<bytes>				optional, default not set
#
#	This parameter should not be set lower than link MTU, for ethernet
#	it is 1500b, or (with MAC header) 1514b which is the value used
#	in Alexey Kuznetsov's examples.
#
# PERTURB=<seconds>				optional, default "10"
#
#	Period of hash function perturbation. If unset, hash reconfiguration
#	will never take place which is what you probably don't want. The
#	default value of 10 seconds is probably a good one.
#
### Filter parameters
#
# RULE=[[saddr[/prefix]][:port[/mask]],][daddr[/prefix]][:port[/mask]]
#
#	These parameters make up "u32" filter rules that select traffic for
#	each of the classes. You can use multiple RULE fields per config.
#
#	The optional port mask should only be used by advanced users who
#	understand how the u32 filter works.
#
# Some examples:
#
#	RULE=10.1.1.0/24:80
#		selects traffic going to port 80 in network 10.1.1.0
#
#	RULE=10.2.2.5
#		selects traffic going to any port on single host 10.2.2.5
#
#	RULE=10.2.2.5:20/0xfffe
#		selects traffic going to ports 20 and 21 on host 10.2.2.5
#
#	RULE=:25,10.2.2.128/26:5000
#		selects traffic going from anywhere on port 50 to
#		port 5000 in network 10.2.2.128
#
#	RULE=10.5.5.5:80,
#		selects traffic going from port 80 of single host 10.5.5.5
#
#
#
# REALM=[srealm,][drealm]
#
#	These parameters make up "route" filter rules that classify traffic
#	according to packet source/destination realms. For information about
#	realms, see Alexey Kuznetsov's IP Command Reference. This script
#	does not define any realms, it justs builds "tc filter" commands
#	for you if you need to classify traffic this way.
#
#	Realm is either a decimal number or a string referencing entry in
#	/etc/iproute2/rt_realms (usually).
#
# Some examples:
#
#	REALM=russia,internet
#		selects traffic going from realm "russia" to realm "internet"
#
#	REALM=freenet,
#		selects traffic going from realm "freenet"
#
#	REALM=10
#		selects traffic going to realm 10
#
#
#
# MARK=<mark>
#
#	These parameters make up "fw" filter rules that select traffic for
#	each of the classes accoring to firewall "mark". Mark is a decimal
#	number packets are tagged with if firewall rules say so. You can
#	use multiple MARK fields per config.
#
#
# Note: Rules for different filter types can be combined. Attention must be
#	paid to the priority of filter rules, which can be set below using
#	PRIO_{RULE,MARK,REALM} variables.
#
### Time ranging parameters
#
# TIME=[<dow>,<dow>, ...,<dow>/]<from>-<till>;<rate>/<weight>[/<peak>]
# TIME=0,1,2,5/18:00-06:00;256Kbit/25Kbit
# TIME=60123/18:00-06:00;256Kbit/25Kbit
# TIME=18:00-06:00;256Kbit/25Kbit
#
#	This parameter allows you to differentiate the class bandwidth
#	throughout the day. You can specify multiple TIME parameters, if
#	the times overlap, last match is taken. The fields <rate>, <weight>
#	and <peak> correspond to parameters RATE, WEIGHT and PEAK (which
#	is optional and applies to TBF leaf qdisc only).
#
#	You can also specify days of week when the TIME rule applies. <dow>
#	is numeric, 0 corresponds to sunday, 1 corresponds to monday, etc.
#
###
#
# Sample configuration file: cbq-1280.My_first_shaper
#
# --------------------------------------------------------------------------
# DEVICE=eth0,10Mbit,1Mbit
# RATE=128Kbit
# WEIGHT=10Kbit
# PRIO=5
# RULE=192.128.1.0/24
# --------------------------------------------------------------------------
#
# The configuration says that we will control traffic on 10Mbit ethernet
# device eth0 and the traffic going to network 192.168.1.0 will be
# processed with priority 5 and shaped to rate of 128Kbit.
#
# Note that you can control outgoing traffic only. If you want to control
# traffic in both directions, you must set up CBQ for both interfaces.
#
# Consider the following example:
#
#                    +---------+      192.168.1.1
# BACKBONE -----eth0-|  linux  |-eth1------*-[client]
#                    +---------+
#
# Imagine you want to shape traffic from backbone to the client to 28Kbit
# and traffic in the opposite direction to 128Kbit. You need to setup CBQ
# on both eth0 and eth1 interfaces, thus you need two config files:
#
# cbq-028.backbone-client
# --------------------------------------------------------------------------
# DEVICE=eth1,10Mbit,1Mbit
# RATE=28Kbit
# WEIGHT=2Kbit
# PRIO=5
# RULE=192.168.1.1
# --------------------------------------------------------------------------
#
# cbq-128.client-backbone
# --------------------------------------------------------------------------
# DEVICE=eth0,10Mbit,1Mbit
# RATE=128Kbit
# WEIGHT=10Kbit
# PRIO=5
# RULE=192.168.1.1,
# --------------------------------------------------------------------------
#
# Pay attention to comma "," in the RULE field - it denotes source address!
#
# Enjoy.
#
#############################################################################

export LC_ALL=C

### Command locations
TC=/sbin/tc
IP=/sbin/ip
MP=/sbin/modprobe

### Default filter priorities (must be different)
PRIO_RULE_DEFAULT=${PRIO_RULE:-100}
PRIO_MARK_DEFAULT=${PRIO_MARK:-200}
PRIO_REALM_DEFAULT=${PRIO_REALM:-300}

### Default CBQ_PATH & CBQ_CACHE settings
CBQ_PATH=${CBQ_PATH:-/etc/sysconfig/cbq}
CBQ_CACHE=${CBQ_CACHE:-/var/cache/cbq.init}

### Uncomment to enable logfile for debugging
#CBQ_DEBUG="/var/run/cbq-$1"

### Modules to probe for. Uncomment the last CBQ_PROBE
### line if you have QoS support compiled into kernel
CBQ_PROBE="sch_cbq sch_tbf sch_sfq sch_prio"
CBQ_PROBE="$CBQ_PROBE cls_fw cls_u32 cls_route"
#CBQ_PROBE=""

### Keywords required for qdisc & class configuration
CBQ_WORDS="DEVICE|RATE|WEIGHT|PRIO|PARENT|LEAF|BOUNDED|ISOLATED"
CBQ_WORDS="$CBQ_WORDS|PRIO_MARK|PRIO_RULE|PRIO_REALM|BUFFER"
CBQ_WORDS="$CBQ_WORDS|LIMIT|PEAK|MTU|QUANTUM|PERTURB"

### Source AVPKT if it exists
[ -r /etc/sysconfig/cbq/avpkt ] && . /etc/sysconfig/cbq/avpkt
AVPKT=${AVPKT:-3000}


#############################################################################
############################# SUPPORT FUNCTIONS #############################
#############################################################################

### Get list of network devices
cbq_device_list () {
	ip link show| sed -n "/^[0-9]/ \
		{ s/^[0-9]\+: \([a-z0-9._]\+\)[:@].*/\1/; p; }"
} # cbq_device_list


### Remove root class from device $1
cbq_device_off () {
	tc qdisc del dev $1 root 2> /dev/null
} # cbq_device_off


### Remove CBQ from all devices
cbq_off () {
	for dev in `cbq_device_list`; do
		cbq_device_off $dev
	done
} # cbq_off


### Prefixed message
cbq_message () {
	echo -e "**CBQ: $@"
} # cbq_message

### Failure message
cbq_failure () {
	cbq_message "$@"
	exit 1
} # cbq_failure

### Failure w/ cbq-off
cbq_fail_off () {
	cbq_message "$@"
	cbq_off
	exit 1
} # cbq_fail_off


### Convert time to absolute value
cbq_time2abs () {
	local min=${1##*:}; min=${min##0}
	local hrs=${1%%:*}; hrs=${hrs##0}
	echo $[hrs*60 + min]
} # cbq_time2abs


### Display CBQ setup
cbq_show () {
	for dev in `cbq_device_list`; do
		[ `tc qdisc show dev $dev| wc -l` -eq 0 ] && continue
		echo -e "### $dev: queueing disciplines\n"
		tc $1 qdisc show dev $dev; echo

		[ `tc class show dev $dev| wc -l` -eq 0 ] && continue
		echo -e "### $dev: traffic classes\n"
		tc $1 class show dev $dev; echo

		[ `tc filter show dev $dev| wc -l` -eq 0 ] && continue
		echo -e "### $dev: filtering rules\n"
		tc $1 filter show dev $dev; echo
	done
} # cbq_show


### Check configuration and load DEVICES, DEVFIELDS and CLASSLIST from $1
cbq_init () {
	### Get a list of configured classes
	CLASSLIST=`find $1 -maxdepth 1 \( -type f -or -type l \) -name 'cbq-*' \
		-not -name '*~' -printf "%f\n"| sort`
	[ -z "$CLASSLIST" ] &&
		cbq_failure "no configuration files found in $1!"

	### Gather all DEVICE fields from $1/cbq-*
	DEVFIELDS=`find $1 -maxdepth 1 \( -type f -or -type l \) -name 'cbq-*' \
		  -not -name '*~' | xargs sed -n 's/#.*//; \
		  s/[[:space:]]//g; /^DEVICE=[^,]*,[^,]*\(,[^,]*\)\?/ \
		  { s/.*=//; p; }'| sort -u`
	[ -z "$DEVFIELDS" ] &&
		cbq_failure "no DEVICE field found in $1/cbq-*!"

	### Check for different DEVICE fields for the same device
	DEVICES=`echo "$DEVFIELDS"| sed 's/,.*//'| sort -u`
	[ `echo "$DEVICES"| wc -l` -ne `echo "$DEVFIELDS"| wc -l` ] &&
		cbq_failure "different DEVICE fields for single device!\n$DEVFIELDS"
} # cbq_init


### Load class configuration from $1/$2
cbq_load_class () {
	CLASS=`echo $2| sed 's/^cbq-0*//; s/^\([0-9a-fA-F]\+\).*/\1/'`
	CFILE=`sed -n 's/#.*//; s/[[:space:]]//g; /^[[:alnum:]_]\+=[[:alnum:].,:;/*@-_]\+$/ p' $1/$2`

	### Check class number
	IDVAL=`/usr/bin/printf "%d" 0x$CLASS 2> /dev/null`
	[ $? -ne 0 -o $IDVAL -lt 2 -o $IDVAL -gt 65535 ] &&
		cbq_fail_off "class ID of $2 must be in range <0002-FFFF>!"

	### Set defaults & load class
	RATE=""; WEIGHT=""; PARENT=""; PRIO=5
	LEAF=tbf; BOUNDED=yes; ISOLATED=no
	BUFFER=10Kb/8; LIMIT=15Kb; MTU=1500
	PEAK=""; PERTURB=10; QUANTUM=""

	PRIO_RULE=$PRIO_RULE_DEFAULT
	PRIO_MARK=$PRIO_MARK_DEFAULT
	PRIO_REALM=$PRIO_REALM_DEFAULT

	eval `echo "$CFILE"| grep -E "^($CBQ_WORDS)="`

	### Require RATE/WEIGHT
	[ -z "$RATE" -o -z "$WEIGHT" ] &&
		cbq_fail_off "missing RATE or WEIGHT in $2!"

	### Class device
	DEVICE=${DEVICE%%,*}
	[ -z "$DEVICE" ] && cbq_fail_off "missing DEVICE field in $2!"

	BANDWIDTH=`echo "$DEVFIELDS"| sed -n "/^$DEVICE,/ \
		  { s/[^,]*,\([^,]*\).*/\1/; p; q; }"`

	### Convert to "tc" options
	PEAK=${PEAK:+peakrate $PEAK}
	PERTURB=${PERTURB:+perturb $PERTURB}
	QUANTUM=${QUANTUM:+quantum $QUANTUM}

	[ "$BOUNDED" = "no" ] && BOUNDED="" || BOUNDED="bounded"
	[ "$ISOLATED" = "yes" ] && ISOLATED="isolated" || ISOLATED=""
} # cbq_load_class


#############################################################################
#################################### INIT ###################################
#############################################################################

### Check for presence of ip-route2 in usual place
[ -x $TC -a -x $IP ] ||
	cbq_failure "ip-route2 utilities not installed or executable!"


### ip/tc wrappers
if [ "$1" = "compile" ]; then
	### no module probing
	CBQ_PROBE=""

	ip () {
		$IP "$@"
	} # ip

	### echo-only version of "tc" command
	tc () {
		echo "$TC $@"
	} # tc

elif [ -n "$CBQ_DEBUG" ]; then
	echo -e "# `date`" > $CBQ_DEBUG

	### Logging version of "ip" command
	ip () {
		echo -e "\n# ip $@" >> $CBQ_DEBUG
		$IP "$@" 2>&1 | tee -a $CBQ_DEBUG
	} # ip

	### Logging version of "tc" command
	tc () {
		echo -e "\n# tc $@" >> $CBQ_DEBUG
		$TC "$@" 2>&1 | tee -a $CBQ_DEBUG
	} # tc
else
	### Default wrappers
	
	ip () {
		$IP "$@"
	} # ip
	
	tc () {
		$TC "$@"
	} # tc
fi # ip/tc wrappers


case "$1" in

#############################################################################
############################### START/COMPILE ###############################
#############################################################################

start|compile)

### Probe QoS modules (start only)
for module in $CBQ_PROBE; do
	$MP $module || cbq_failure "failed to load module $module"
done

### If we are in compile/nocache/logging mode, don't bother with cache
if [ "$1" != "compile" -a "$2" != "nocache" -a -z "$CBQ_DEBUG" ]; then
	VALID=1

	### validate the cache
	[ "$2" = "invalidate" -o ! -f $CBQ_CACHE ] && VALID=0
	if [ $VALID -eq 1 ]; then
		[ `find $CBQ_PATH -maxdepth 1 -newer $CBQ_CACHE| \
		  wc -l` -gt 0 ] && VALID=0
	fi

	### compile the config if the cache is invalid
	if [ $VALID -ne 1 ]; then
		$0 compile > $CBQ_CACHE ||
			cbq_fail_off "failed to compile CBQ configuration!"
	fi

	### run the cached commands
	exec /bin/sh $CBQ_CACHE 2> /dev/null
fi

### Load DEVICES, DEVFIELDS and CLASSLIST
cbq_init $CBQ_PATH


### Setup root qdisc on all configured devices
for dev in $DEVICES; do
	### Retrieve device bandwidth and, optionally, weight
	DEVTEMP=`echo "$DEVFIELDS"| sed -n "/^$dev,/ { s/$dev,//; p; q; }"`
	DEVBWDT=${DEVTEMP%%,*};	DEVWGHT=${DEVTEMP##*,}
	[ "$DEVBWDT" = "$DEVWGHT" ] && DEVWGHT=""

	### Device bandwidth is required
	if [ -z "$DEVBWDT" ]; then
		cbq_message "could not determine bandwidth for device $dev!"
		cbq_failure "please set up the DEVICE fields properly!"
	fi

	### Check if the device is there
	ip link show $dev &> /dev/null ||
		cbq_fail_off "device $dev not found!"

	### Remove old root qdisc from device
	cbq_device_off $dev


	### Setup root qdisc + class for device
	tc qdisc add dev $dev root handle 1 cbq \
	bandwidth $DEVBWDT avpkt $AVPKT cell 8

	### Set weight of the root class if set
	[ -n "$DEVWGHT" ] &&
		tc class change dev $dev root cbq weight $DEVWGHT allot 1514

	[ "$1" = "compile" ] && echo
done # dev


### Setup traffic classes
for classfile in $CLASSLIST; do
	cbq_load_class $CBQ_PATH $classfile

	### Create the class
	tc class add dev $DEVICE parent 1:$PARENT classid 1:$CLASS cbq \
	bandwidth $BANDWIDTH rate $RATE weight $WEIGHT prio $PRIO \
	allot 1514 cell 8 maxburst 20 avpkt $AVPKT $BOUNDED $ISOLATED ||
		cbq_fail_off "failed to add class $CLASS with parent $PARENT on $DEVICE!"

	### Create leaf qdisc if set
	if [ "$LEAF" = "tbf" ]; then
		tc qdisc add dev $DEVICE parent 1:$CLASS handle $CLASS tbf \
		rate $RATE buffer $BUFFER limit $LIMIT mtu $MTU $PEAK
	elif [ "$LEAF" = "sfq" ]; then
		tc qdisc add dev $DEVICE parent 1:$CLASS handle $CLASS sfq \
		$PERTURB $QUANTUM
	fi


	### Create fw filter for MARK fields
	for mark in `echo "$CFILE"| sed -n '/^MARK/ { s/.*=//; p; }'`; do
		### Attach fw filter to root class
		tc filter add dev $DEVICE parent 1:0 protocol ip \
		prio $PRIO_MARK handle $mark fw classid 1:$CLASS
	done ### mark

	### Create route filter for REALM fields
	for realm in `echo "$CFILE"| sed -n '/^REALM/ { s/.*=//; p; }'`; do
		### Split realm into source & destination realms
		SREALM=${realm%%,*}; DREALM=${realm##*,}
		[ "$SREALM" = "$DREALM" ] && SREALM=""

		### Convert asterisks to empty strings
		SREALM=${SREALM#\*}; DREALM=${DREALM#\*}

		### Attach route filter to the root class
		tc filter add dev $DEVICE parent 1:0 protocol ip \
		prio $PRIO_REALM route ${SREALM:+from $SREALM} \
		${DREALM:+to $DREALM} classid 1:$CLASS
	done ### realm

	### Create u32 filter for RULE fields
	for rule in `echo "$CFILE"| sed -n '/^RULE/ { s/.*=//; p; }'`; do
		### Split rule into source & destination
		SRC=${rule%%,*}; DST=${rule##*,}
		[ "$SRC" = "$rule" ] && SRC=""


		### Split destination into address, port & mask fields
		DADDR=${DST%%:*}; DTEMP=${DST##*:}
		[ "$DADDR" = "$DST" ] && DTEMP=""

		DPORT=${DTEMP%%/*}; DMASK=${DTEMP##*/}
		[ "$DPORT" = "$DTEMP" ] && DMASK="0xffff"


		### Split up source (if specified)
		SADDR=""; SPORT=""
		if [ -n "$SRC" ]; then
			SADDR=${SRC%%:*}; STEMP=${SRC##*:}
			[ "$SADDR" = "$SRC" ] && STEMP=""

			SPORT=${STEMP%%/*}; SMASK=${STEMP##*/}
			[ "$SPORT" = "$STEMP" ] && SMASK="0xffff"
		fi


		### Convert asterisks to empty strings
		SADDR=${SADDR#\*}; DADDR=${DADDR#\*}

		### Compose u32 filter rules
		u32_s="${SPORT:+match ip sport $SPORT $SMASK}"
		u32_s="${SADDR:+match ip src $SADDR} $u32_s"
		u32_d="${DPORT:+match ip dport $DPORT $DMASK}"
		u32_d="${DADDR:+match ip dst $DADDR} $u32_d"

		### Uncomment the following if you want to see parsed rules
		#echo "$rule: $u32_s $u32_d"

		### Attach u32 filter to the appropriate class
		tc filter add dev $DEVICE parent 1:0 protocol ip \
		prio $PRIO_RULE u32 $u32_s $u32_d classid 1:$CLASS
	done ### rule

	[ "$1" = "compile" ] && echo
done ### classfile
;;


#############################################################################
################################# TIME CHECK ################################
#############################################################################

timecheck)

### Get time + weekday
TIME_TMP=`date +%w/%k:%M`
TIME_DOW=${TIME_TMP%%/*}
TIME_NOW=${TIME_TMP##*/}

### Load DEVICES, DEVFIELDS and CLASSLIST
cbq_init $CBQ_PATH

### Run through all classes
for classfile in $CLASSLIST; do
	### Gather all TIME rules from class config
	TIMESET=`sed -n 's/#.*//; s/[[:space:]]//g; /^TIME/ { s/.*=//; p; }' \
		$CBQ_PATH/$classfile`
	[ -z "$TIMESET" ] && continue

	MATCH=0; CHANGE=0
	for timerule in $TIMESET; do
		TIME_ABS=`cbq_time2abs $TIME_NOW`
		
		### Split TIME rule to pieces
		TIMESPEC=${timerule%%;*}; PARAMS=${timerule##*;}
		WEEKDAYS=${TIMESPEC%%/*}; INTERVAL=${TIMESPEC##*/}
		BEG_TIME=${INTERVAL%%-*}; END_TIME=${INTERVAL##*-}

		### Check the day-of-week (if present)
		[ "$WEEKDAYS" != "$INTERVAL" -a \
		  -n "${WEEKDAYS##*$TIME_DOW*}" ] && continue

		### Compute interval boundaries
		BEG_ABS=`cbq_time2abs $BEG_TIME`
		END_ABS=`cbq_time2abs $END_TIME`

		### Midnight wrap fixup
		if [ $BEG_ABS -gt $END_ABS ]; then
			[ $TIME_ABS -le $END_ABS ] &&
				TIME_ABS=$[TIME_ABS + 24*60]

			END_ABS=$[END_ABS + 24*60]
		fi

		### If the time matches, remember params and set MATCH flag
		if [ $TIME_ABS -ge $BEG_ABS -a $TIME_ABS -lt $END_ABS ]; then
			TMP_RATE=${PARAMS%%/*}; PARAMS=${PARAMS#*/}
			TMP_WGHT=${PARAMS%%/*}; TMP_PEAK=${PARAMS##*/}

			[ "$TMP_PEAK" = "$TMP_WGHT" ] && TMP_PEAK=""
			TMP_PEAK=${TMP_PEAK:+peakrate $TMP_PEAK}

			MATCH=1
		fi
	done ### timerule


	cbq_load_class $CBQ_PATH $classfile

	### Get current RATE of CBQ class
	RATE_NOW=`tc class show dev $DEVICE| sed -n \
		 "/cbq 1:$CLASS / { s/.*rate //; s/ .*//; p; q; }"`
	[ -z "$RATE_NOW" ] && continue

	### Time interval matched
	if [ $MATCH -ne 0 ]; then

		### Check if there is any change in class RATE
		if [ "$RATE_NOW" != "$TMP_RATE" ]; then
			NEW_RATE="$TMP_RATE"
			NEW_WGHT="$TMP_WGHT"
			NEW_PEAK="$TMP_PEAK"
			CHANGE=1
		fi

	### Match not found, reset to default RATE if necessary
	elif [ "$RATE_NOW" != "$RATE" ]; then
		NEW_WGHT="$WEIGHT"
		NEW_RATE="$RATE"
		NEW_PEAK="$PEAK"
		CHANGE=1
	fi

	### If there are no changes, go for next class
	[ $CHANGE -eq 0 ] && continue

	### Replace CBQ class
	tc class replace dev $DEVICE classid 1:$CLASS cbq \
	bandwidth $BANDWIDTH rate $NEW_RATE weight $NEW_WGHT prio $PRIO \
	allot 1514 cell 8 maxburst 20 avpkt $AVPKT $BOUNDED $ISOLATED

	### Replace leaf qdisc (if any)
	if [ "$LEAF" = "tbf" ]; then
		tc qdisc replace dev $DEVICE handle $CLASS tbf \
		rate $NEW_RATE buffer $BUFFER limit $LIMIT mtu $MTU $NEW_PEAK
	fi

	cbq_message "$TIME_NOW: class $CLASS on $DEVICE changed rate ($RATE_NOW -> $NEW_RATE)"
done ### class file
;;


#############################################################################
################################## THE REST #################################
#############################################################################

stop)
	cbq_off
	;;

list)
	cbq_show
	;;

stats)
	cbq_show -s
	;;

restart)
	shift
	$0 stop
	$0 start "$@"
	;;

*)
	echo "Usage: `basename $0` {start|compile|stop|restart|timecheck|list|stats}"
esac
