|  |  | 
|  | 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 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 ) | 
|  | ----- |