mirror of
				https://git.proxmox.com/git/mirror_iproute2
				synced 2025-10-30 13:16:29 +00:00 
			
		
		
		
	 bdd6104f52
			
		
	
	
		bdd6104f52
		
	
	
	
	
		
			
			- baseclass: major handle must match that of class's, Y defaults to 1 - flow map example: maps to 1-256, not 1-257 Signed-off-by: Michal Soltys <soltys@ziu.info>
		
			
				
	
	
		
			268 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .TH "Flow filter in tc" 8 "20 Oct 2015" "iproute2" "Linux"
 | |
| 
 | |
| .SH NAME
 | |
| flow \- flow based traffic control filter
 | |
| .SH SYNOPSIS
 | |
| .TP
 | |
| Mapping mode:
 | |
| 
 | |
| .RS
 | |
| .in +8
 | |
| .ti -8
 | |
| .BR tc " " filter " ... " "flow map key "
 | |
| .IR KEY " [ " OPS " ] [ " OPTIONS " ] "
 | |
| .RE
 | |
| .TP
 | |
| Hashing mode:
 | |
| 
 | |
| .RS
 | |
| .in +8
 | |
| .ti -8
 | |
| .BR tc " " filter " ... " "flow hash keys "
 | |
| .IR KEY_LIST " [ "
 | |
| .B perturb
 | |
| .IR secs " ] [ " OPTIONS " ] "
 | |
| .RE
 | |
| 
 | |
| .in +8
 | |
| .ti -8
 | |
| .IR OPS " := [ " OPS " ] " OP
 | |
| 
 | |
| .ti -8
 | |
| .IR OPTIONS " := [ "
 | |
| .B divisor
 | |
| .IR NUM " ] [ "
 | |
| .B baseclass
 | |
| .IR ID " ] [ "
 | |
| .B match
 | |
| .IR EMATCH_TREE " ] [ "
 | |
| .B action
 | |
| .IR ACTION_SPEC " ]"
 | |
| 
 | |
| .ti -8
 | |
| .IR KEY_LIST " := [ " KEY_LIST " ] " KEY
 | |
| 
 | |
| .ti -8
 | |
| .IR OP " := { "
 | |
| .BR or " | " and " | " xor " | " rshift " | " addend " } "
 | |
| .I NUM
 | |
| 
 | |
| .ti -8
 | |
| .IR ID " := " X : Y
 | |
| 
 | |
| .ti -8
 | |
| .IR KEY " := { "
 | |
| .BR src " | " dst " | " proto " | " proto-src " | " proto-dst " | " iif " | "
 | |
| .BR priority " | " mark " | " nfct " | " nfct-src " | " nfct-dst " | "
 | |
| .BR nfct-proto-src " | " nfct-proto-dst " | " rt-classid " | " sk-uid " | "
 | |
| .BR sk-gid " | " vlan-tag " | " rxhash " }"
 | |
| .SH DESCRIPTION
 | |
| The
 | |
| .B flow
 | |
| classifier is meant to extend the
 | |
| .B SFQ
 | |
| hashing capabilities without hard-coding new hash functions. It also allows
 | |
| deterministic mappings of keys to classes.
 | |
| .SH OPTIONS
 | |
| .TP
 | |
| .BI action " ACTION_SPEC"
 | |
| Apply an action from the generic actions framework on matching packets.
 | |
| .TP
 | |
| .BI baseclass " ID"
 | |
| An offset for the resulting class ID.
 | |
| .I ID
 | |
| may be
 | |
| .BR root ", " none
 | |
| or a hexadecimal class ID in the form [\fIX\fB:\fR]\fIY\fR. \fIX\fR must
 | |
| match qdisc's/class's major handle (if omitted, the correct value is chosen
 | |
| automatically). If the whole \fBbaseclass\fR is omitted, \fIY\fR defaults
 | |
| to 1.
 | |
| .TP
 | |
| .BI divisor " NUM"
 | |
| Number of buckets to use for sorting into. Keys are calculated modulo
 | |
| .IR NUM .
 | |
| .TP
 | |
| .BI "hash keys " KEY-LIST
 | |
| Perform a
 | |
| .B jhash2
 | |
| operation over the keys in
 | |
| .IR KEY-LIST ,
 | |
| the result (modulo the
 | |
| .B divisor
 | |
| if given) is taken as class ID, optionally offset by the value of
 | |
| .BR baseclass .
 | |
| It is possible to specify an interval (in seconds) after which
 | |
| .BR jhash2 's
 | |
| entropy source is recreated using the
 | |
| .B perturb
 | |
| parameter.
 | |
| .TP
 | |
| .BI "map key " KEY
 | |
| Packet data identified by
 | |
| .I KEY
 | |
| is translated into class IDs to push the packet into. The value may be mangled by
 | |
| .I OPS
 | |
| before using it for the mapping. They are applied in the order listed here:
 | |
| .RS
 | |
| .TP 4
 | |
| .BI and " NUM"
 | |
| Perform bitwise
 | |
| .B AND
 | |
| operation with numeric value
 | |
| .IR NUM .
 | |
| .TP
 | |
| .BI or " NUM"
 | |
| Perform bitwise
 | |
| .B OR
 | |
| operation with numeric value
 | |
| .IR NUM .
 | |
| .TP
 | |
| .BI xor " NUM"
 | |
| Perform bitwise
 | |
| .B XOR
 | |
| operation with numeric value
 | |
| .IR NUM .
 | |
| .TP
 | |
| .BI rshift " NUM"
 | |
| Shift the value of
 | |
| .I KEY
 | |
| to the right by
 | |
| .I NUM
 | |
| bits.
 | |
| .TP
 | |
| .BI addend " NUM"
 | |
| Add
 | |
| .I NUM
 | |
| to the value of
 | |
| .IR KEY .
 | |
| 
 | |
| .RE
 | |
| .RS
 | |
| For the
 | |
| .BR or ", " and ", " xor " and " rshift
 | |
| operations,
 | |
| .I NUM
 | |
| is assumed to be an unsigned, 32bit integer value. For the
 | |
| .B addend
 | |
| operation,
 | |
| .I NUM
 | |
| may be much more complex: It may be prefixed by a minus ('-') sign to cause
 | |
| subtraction instead of addition and for keys of
 | |
| .BR src ", " dst ", " nfct-src " and " nfct-dst
 | |
| it may be given in IP address notation. See below for an illustrating example.
 | |
| .RE
 | |
| .TP
 | |
| .BI match " EMATCH_TREE"
 | |
| Match packets using the extended match infrastructure. See
 | |
| .BR tc-ematch (8)
 | |
| for a detailed description of the allowed syntax in
 | |
| .IR EMATCH_TREE .
 | |
| .SH KEYS
 | |
| In mapping mode, a single key is used (after optional permutation) to build a
 | |
| class ID. The resulting ID is deducible in most cases. In hashing more, a number
 | |
| of keys may be specified which are then hashed and the output used as class ID.
 | |
| This ID is not deducible in beforehand, and may even change over time for a
 | |
| given flow if a
 | |
| .B perturb
 | |
| interval has been given.
 | |
| 
 | |
| The range of class IDs can be limited by the
 | |
| .B divisor
 | |
| option, which is used for a modulus.
 | |
| .TP
 | |
| .BR src ", " dst
 | |
| Use source or destination address as key. In case of IPv4 and TIPC, this is the
 | |
| actual address value. For IPv6, the 128bit address is folded into a 32bit value
 | |
| by XOR'ing the four 32bit words. In all other cases, the kernel-internal socket
 | |
| address is used (after folding into 32bits on 64bit systems).
 | |
| .TP
 | |
| .B proto
 | |
| Use the layer four protocol number as key.
 | |
| .TP
 | |
| .B proto-src
 | |
| Use the layer four source port as key. If not available, the kernel-internal
 | |
| socket address is used instead.
 | |
| .TP
 | |
| .B proto-dst
 | |
| Use the layer four destination port as key. If not available, the associated
 | |
| kernel-internal dst_entry address is used after XOR'ing with the packet's
 | |
| layer three protocol number.
 | |
| .TP
 | |
| .B iif
 | |
| Use the incoming interface index as key.
 | |
| .TP
 | |
| .B priority
 | |
| Use the packet's priority as key. Usually this is the IP header's DSCP/ECN
 | |
| value.
 | |
| .TP
 | |
| .B mark
 | |
| Use the netfilter
 | |
| .B fwmark
 | |
| as key.
 | |
| .TP
 | |
| .B nfct
 | |
| Use the associated conntrack entry address as key.
 | |
| .TP
 | |
| .BR nfct-src ", " nfct-dst ", " nfct-proto-src ", " nfct-proto-dst
 | |
| These are conntrack-aware variants of
 | |
| .BR src ", " dst ", " proto-src " and " proto-dst .
 | |
| In case of NAT, these are basically the packet header's values before NAT was
 | |
| applied.
 | |
| .TP
 | |
| .B rt-classid
 | |
| Use the packet's destination routing table entry's realm as key.
 | |
| .TP
 | |
| .B sk-uid
 | |
| .TQ
 | |
| .B sk-gid
 | |
| For locally generated packets, use the user or group ID the originating socket
 | |
| belongs to as key.
 | |
| .TP
 | |
| .B vlan-tag
 | |
| Use the packet's vlan ID as key.
 | |
| .TP
 | |
| .B rxhash
 | |
| Use the flow hash as key.
 | |
| 
 | |
| .SH EXAMPLES
 | |
| .TP
 | |
| Classic SFQ hash:
 | |
| 
 | |
| .EX
 | |
| tc filter add ... flow hash \\
 | |
| 	keys src,dst,proto,proto-src,proto-dst divisor 1024
 | |
| .EE
 | |
| .TP
 | |
| Classic SFQ hash, but using information from conntrack to work properly in combination with NAT:
 | |
| 
 | |
| .EX
 | |
| tc filter add ... flow hash \\
 | |
| 	keys nfct-src,nfct-dst,proto,nfct-proto-src,nfct-proto-dst \\
 | |
| 	divisor 1024
 | |
| .EE
 | |
| .TP
 | |
| Map destination IPs of 192.168.0.0/24 to classids 1-256:
 | |
| 
 | |
| .EX
 | |
| tc filter add ... flow map \\
 | |
| 	key dst addend -192.168.0.0 divisor 256
 | |
| .EE
 | |
| .TP
 | |
| Alternative to the above:
 | |
| 
 | |
| .EX
 | |
| tc filter add ... flow map \\
 | |
| 	key dst and 0xff
 | |
| .EE
 | |
| .TP
 | |
| The same, but in reverse order:
 | |
| 
 | |
| .EX
 | |
| tc filter add ... flow map \\
 | |
| 	key dst and 0xff xor 0xff
 | |
| .EE
 | |
| .SH SEE ALSO
 | |
| .BR tc (8),
 | |
| .BR tc-ematch (8),
 | |
| .BR tc-sfq (8)
 |