I''m trying to get IMQ working correctly as incoming on a box that is running SNAT. I''ve modified imq.c so that it fires after IP_PRI_NAT_DST instead of mangle and am using tc filter commands to choose the flowid based on the destination address. IMQ still seems to be firing before the system has reversed the SNAT. scripts I''m using tc qdisc add dev imq0 root handle 1: htb default 20 DOWNLINK=512 LIMIT="ceil ${DOWNLINK}kbit" tc class add dev imq0 parent 1: classid 1:1 htb rate ${DOWNLINK}kbit tc class add dev imq0 parent 1:1 classid 1:10 htb rate 64kbit $LIMIT tc class add dev imq0 parent 1:1 classid 1:20 htb rate 64kbit $LIMIT tc qdisc add dev imq0 parent 1:10 handle 10: sfq tc qdisc add dev imq0 parent 1:20 handle 20: sfq tc filter add dev imq0 parent 1: protocol ip prio 1 u32 match ip dst 172.30.0.2/32 flowid 1:10 iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0 iptables -t nat -A PREROUTING -s 172.30.0.0/24 -d ! 172.30.0.0/24 -j MASQUERADE ip link set imq0 up