iproute2/tc
Jamal Hadi Salim 120f556d15 tc filters: add support to get individual filters by handle
sudo $TC filter add dev $ETH parent ffff: prio 2 protocol ip \
u32 match u32 0 0 flowid 1:1 \
action ok
sudo $TC filter add dev $ETH parent ffff: prio 1 protocol ip \
u32 match ip protocol 1 0xff flowid 1:10 \
action ok

now dump to see all rules..
$TC -s filter ls dev $ETH parent ffff: protocol ip
 ....
filter pref 1 u32
filter pref 1 u32 fh 801: ht divisor 1
filter pref 1 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:10  (rule hit 0 success 0)
  match 00010000/00ff0000 at 8 (success 0 )
        action order 1: gact action drop
         random type none pass val 0
         index 6 ref 1 bind 1 installed 4 sec used 4 sec
        Action statistics:
        Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0

filter pref 2 u32
filter pref 2 u32 fh 800: ht divisor 1
filter pref 2 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1  (rule hit 336 success 336)
  match 00000000/00000000 at 0 (success 336 )
        action order 1: gact action pass
         random type none pass val 0
         index 5 ref 1 bind 1 installed 38 sec used 4 sec
        Action statistics:
        Sent 24864 bytes 336 pkt (dropped 0, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0
 ....

..get filter 801::800
$TC -s filter get dev $ETH parent ffff: protocol ip \
handle 801:0:800 prio 2  u32

 ....
filter parent ffff: protocol ip pref 1 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:10  (rule hit 260 success 130)
  match 00010000/00ff0000 at 8 (success 130 )
        action order 1: gact action drop
         random type none pass val 0
         index 6 ref 1 bind 1 installed 348 sec used 0 sec
        Action statistics:
        Sent 11440 bytes 130 pkt (dropped 130, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0
 ....

..get other one
$TC -s filter get dev $ETH parent ffff: protocol ip \
handle 800:0:800 prio 2  u32

....
filter parent ffff: protocol ip pref 2 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:1  (rule hit 514 success 514)
  match 00000000/00000000 at 0 (success 514 )
        action order 1: gact action pass
         random type none pass val 0
         index 5 ref 1 bind 1 installed 506 sec used 4 sec
        Action statistics:
        Sent 35544 bytes 514 pkt (dropped 0, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0
....

..try something that doesnt exist
$TC -s filter get dev $ETH parent ffff: protocol ip  handle 800:0:803 prio 2  u32

.....
RTNETLINK answers: No such file or directory
We have an error talking to the kernel
.....

Note, added NLM_F_ECHO is for backward compatibility. old kernels never
before Eric's patch will not respond without it and newer kernels (after Erics patch)
will ignore it.
In old kernels there is a side effect:
In addition to a response to the GET you will receive an event (if you do tc mon).
But this is still better than what it was before (not working at all).

Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
2016-10-12 15:14:47 -07:00
..
.gitignore Add ignore files to make using git easier 2006-08-08 12:04:38 -07:00
Makefile tc: Add support for the matchall traffic classifier. 2016-09-01 08:37:01 -07:00
README.last tc: remove extra whitespace 2015-10-23 15:43:28 -07:00
e_bpf.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
em_canid.c Replace malloc && memset by calloc 2016-07-20 12:05:24 -07:00
em_cmp.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
em_ipset.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
em_meta.c tc: ematch: Ignore all-zero mask value when printing filters 2016-07-20 12:20:13 -07:00
em_nbyte.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
em_u32.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
emp_ematch.l fix build issues with flex ver 2.5 2010-04-22 15:27:42 -07:00
emp_ematch.y tc: remove extra whitespace 2015-10-23 15:43:28 -07:00
f_basic.c tc: code cleanup 2016-03-21 11:48:36 -07:00
f_bpf.c f_bpf: fix filling of handle when no further arg is provided 2016-05-23 16:14:18 -07:00
f_cgroup.c tc: code cleanup 2016-03-21 11:48:36 -07:00
f_flow.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
f_flower.c tc: flower: Introduce vlan support 2016-09-01 08:38:41 -07:00
f_fw.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
f_matchall.c tc: Add support for the matchall traffic classifier. 2016-09-01 08:37:01 -07:00
f_route.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
f_rsvp.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
f_tcindex.c tc classifiers: Modernize tcindex classifier 2016-08-22 10:08:00 -07:00
f_u32.c tc: f_u32: Fill in 'linkid' provided by user 2016-10-09 18:51:00 -07:00
m_action.c tc: fix a misleading failure 2016-08-09 11:18:14 -07:00
m_bpf.c tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00
m_connmark.c tc: use action_a2n() everywhere 2016-07-25 08:10:43 -07:00
m_csum.c tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00
m_ematch.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
m_ematch.h include needed files 2012-12-23 11:49:06 -08:00
m_estimator.c tc: code cleanup 2016-03-21 11:48:36 -07:00
m_gact.c action gact: list pipe as a valid action 2016-10-12 15:09:52 -07:00
m_ife.c actions ife: Introduce encoding and decoding of tcindex metadata 2016-10-12 15:09:52 -07:00
m_ipt.c Replace malloc && memset by calloc 2016-07-20 12:05:24 -07:00
m_mirred.c tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00
m_nat.c tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00
m_pedit.c tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00
m_pedit.h Remove trailing whitespace 2006-12-05 10:10:22 -08:00
m_police.c police: improve usage message 2016-08-29 10:54:40 -07:00
m_simple.c tc: use action_a2n() everywhere 2016-07-25 08:10:43 -07:00
m_skbedit.c Merge branch 'master' into net-next 2016-07-25 08:21:00 -07:00
m_skbmod.c tc: skbmod style cleanup 2016-10-12 15:12:51 -07:00
m_vlan.c tc: m_vlan: Add vlan modify action 2016-10-09 19:11:34 -07:00
m_xt.c m_xt: whitespace cleanup 2016-06-14 14:40:53 -07:00
m_xt_old.c tc: code cleanup 2016-03-21 11:48:36 -07:00
p_icmp.c tc: code cleanup 2016-03-21 11:48:36 -07:00
p_ip.c tc/p_ip.c: Minor coding style cleanup 2016-03-27 10:34:22 -07:00
p_tcp.c tc: code cleanup 2016-03-21 11:48:36 -07:00
p_udp.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_atm.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_cbq.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_choke.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_clsact.c ingress, clsact: don't add TCA_OPTIONS to nl msg 2016-05-16 11:20:50 -07:00
q_codel.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_drr.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_dsmark.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_fifo.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_fq.c tc: fq: display unthrottle latency 2016-10-09 19:15:13 -07:00
q_fq_codel.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_gred.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_hfsc.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_hhf.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_htb.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_ingress.c ingress, clsact: don't add TCA_OPTIONS to nl msg 2016-05-16 11:20:50 -07:00
q_mqprio.c ip: make local functions static 2013-02-12 11:38:35 -08:00
q_multiq.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_netem.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_pie.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_prio.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_qfq.c qfq: fix parse_opt dead code 2015-10-27 15:46:20 +09:00
q_red.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_rr.c tc: code cleanup 2016-03-21 11:48:36 -07:00
q_sfb.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_sfq.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
q_tbf.c Use C99 style initializers everywhere 2016-07-20 12:05:24 -07:00
static-syms.c Fix build when shared libraries are disabled 2013-03-13 08:29:59 -07:00
tc.c Replace malloc && memset by calloc 2016-07-20 12:05:24 -07:00
tc_bpf.c Replace malloc && memset by calloc 2016-07-20 12:05:24 -07:00
tc_bpf.h tc, bpf: further improve error reporting 2016-04-11 21:53:58 +00:00
tc_cbq.c tc: code cleanup 2016-03-21 11:48:36 -07:00
tc_cbq.h (Logical change 1.3) 2004-04-15 20:56:59 +00:00
tc_class.c remove useless return statement 2016-09-01 08:44:20 -07:00
tc_common.h tc: built-in eBPF exec proxy 2015-04-27 16:39:23 -07:00
tc_core.c scrub out whitespace issues 2016-03-27 10:50:14 -07:00
tc_core.h htb: support 64bit rates 2013-11-22 17:36:18 -08:00
tc_estimator.c tc: code cleanup 2016-03-21 11:48:36 -07:00
tc_exec.c Replace malloc && memset by calloc 2016-07-20 12:05:24 -07:00
tc_filter.c tc filters: add support to get individual filters by handle 2016-10-12 15:14:47 -07:00
tc_monitor.c tc: code cleanup 2016-03-21 11:48:36 -07:00
tc_qdisc.c tc: Fix for missing estimator initialization 2016-08-06 10:14:06 -07:00
tc_red.c tc: code cleanup 2016-03-21 11:48:36 -07:00
tc_red.h (Logical change 1.3) 2004-04-15 20:56:59 +00:00
tc_stab.c remove useless return statement 2016-09-01 08:44:20 -07:00
tc_util.c tc: don't accept qdisc 'handle' greater than ffff 2016-09-20 09:44:59 -07:00
tc_util.h tc: util: No need for action_n2a() to be reentrant 2016-07-25 08:10:43 -07:00

README.last

Kernel code and interface.
--------------------------

* Compile time switches

There is only one, but very important, compile time switch.
It is not settable by "make config", but should be selected
manually and after a bit of thinking in <include/net/pkt_sched.h>

PSCHED_CLOCK_SOURCE can take three values:

	PSCHED_GETTIMEOFDAY
	PSCHED_JIFFIES
	PSCHED_CPU


 PSCHED_GETTIMEOFDAY

Default setting is the most conservative PSCHED_GETTIMEOFDAY.
It is very slow both because of weird slowness of do_gettimeofday()
and because it forces code to use unnatural "timeval" format,
where microseconds and seconds fields are separate.
Besides that, it will misbehave, when delays exceed 2 seconds
(f.e. very slow links or classes bounded to small slice of bandwidth)
To resume: as only you will get it working, select correct clock
source and forget about PSCHED_GETTIMEOFDAY forever.


 PSCHED_JIFFIES

Clock is derived from jiffies. On architectures with HZ=100
granularity of this clock is not enough to make reasonable
bindings to real time. However, taking into account Linux
architecture problems, which force us to use artificial
integrated clock in any case, this switch is not so bad
for schduling even on high speed networks, though policing
is not reliable.


 PSCHED_CPU

It is available only for alpha and pentiums with correct
CPU timestamp. It is the fastest way, use it when it is available,
but remember: not all pentiums have this facility, and
a lot of them have clock, broken by APM etc. etc.