> > ->func() must either take or free up the SKB, there must be no > violations of this rule. > Could you explain it more clearly? How it applies to that two ( even three ) scenarios, I've told? What if we have the first scenario: ptype_all->func = func1; ptype_all->next = NULL; Will this function be called or not? Second scenario: ptype_all->func = func1; ptype_all->next = &ptype1; ptype1->func = func2; ptype1->next = NULL; Will func2() be called? Third scenario: ptype_all->func = func1; ptype_all->next = &ptype1; ptype1->func = func2; ptype1->next = &ptype2; ptype2->func = func3; ptype2->next = &ptype3; ptype3->func = func4; ptype3->next = NULL; If func2() freed skb, and return NET_RX_DROP, what will happen? PS: I still don't understand why we should skip the first step, and call first function on second cycle? - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html