Hi. Is there anyone who has understood of how u32 nexthdr addressing is supposed to work? (including the "tcp/icmp/.." matches who implicitly uses nexthdr) From reading the kernel code it apparently is using the location set by "offset at", but this seems to only be evaluated on hash parents, and only for it''s children.. I.e. the logic for u32 filter rule processing seems to be something like if all matches true if terminal filter rule execute action else if link rule if offset plus/at calculate nexthdr offset if offset eat skip any data up to the nexthdr pointer follow filter link endif endif Think it would be more logical if the nexthdr offset was calculated before the matches. This way one could create a simple filter rule for matching TCP data. But I am sure there is some reason to why it is the way it is? Also, the filter processing seems to be capable of linking filter rules without using a hash table, but I cannot figure out how to create such a tc filter rule. Obviously I am a bit confused.. I have not yet fully got the grips on how to set up hashed or linked filters. The HOWTO is a bit confusing in this chapter I think. Would be nice with a explanation why that many filter rules are created (or if they are not actually many filters, why that many commands are required). Intuitively it should be sufficient with one tc filter command to create the hash table rule, and then the tc filter commands to create the hash chains as required... And the fact that some qdisc has built in filters does not make the filter concepts easier to understand either (prio).. Regards Henrik Nordström