summaryrefslogtreecommitdiffstats
path: root/doc/actions/gact-usage
blob: 7cf48abbd90abc59d2d17fae9c22ebc69cc88c6a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
gact <ACTION> [RAND] [INDEX]

Where:
	ACTION := reclassify | drop | continue | pass | ok
	RAND := random <RANDTYPE> <ACTION> <VAL>
	RANDTYPE := netrand | determ
        VAL : = value not exceeding 10000
        INDEX := index value used

ACTION semantics
- pass and ok are equivalent to accept
- continue allows one to restart classification lookup
- drop drops packets
- reclassify implies continue classification where we left off

randomization
--------------

At the moment there are only two algorithms. One is deterministic
and the other uses internal kernel netrand.

Examples:

Rules can be installed on both ingress and egress - this shows ingress
only

tc qdisc add dev eth0 ingress

# example 1
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 match ip src \
10.0.0.9/32 flowid 1:16 action drop

ping -c 20 10.0.0.9

--
filter u32
filter u32 fh 800: ht divisor 1
filter u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:16  (rule hit 32 success 20)
  match 0a000009/ffffffff at 12 (success 20 )
        action order 1: gact action drop
         random type none pass val 0
         index 1 ref 1 bind 1 installed 59 sec used 35 sec
         Sent 1680 bytes 20 pkts (dropped 20, overlimits 0 )

----

# example 2
#allow 1 out 10 randomly using the netrand generator
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 match ip src \
10.0.0.9/32 flowid 1:16 action drop random netrand ok 10

ping -c 20 10.0.0.9

----
filter protocol ip pref 6 u32 filter protocol ip pref 6 u32 fh 800: ht divisor 1filter protocol ip pref 6 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:16  (rule hit 20 success 20)
  match 0a000009/ffffffff at 12 (success 20 )
        action order 1: gact action drop
         random type netrand pass val 10
         index 5 ref 1 bind 1 installed 49 sec used 25 sec
         Sent 1680 bytes 20 pkts (dropped 16, overlimits 0 )

--------
#alternative: deterministically accept every second packet
tc filter add dev eth0 parent ffff: protocol ip prio 6 u32 match ip src \
10.0.0.9/32 flowid 1:16 action drop random determ ok 2

ping -c 20 10.0.0.9

tc -s filter show parent ffff: dev eth0
-----
filter protocol ip pref 6 u32 filter protocol ip pref 6 u32 fh 800: ht divisor 1filter protocol ip pref 6 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:16  (rule hit 20 success 20)
  match 0a000009/ffffffff at 12 (success 20 )
        action order 1: gact action drop
         random type determ pass val 2
         index 4 ref 1 bind 1 installed 118 sec used 82 sec
         Sent 1680 bytes 20 pkts (dropped 10, overlimits 0 )
-----