Wenn ich ein paar Kernel-Module schreiben, und in allen von ihnen angeben, sollten sie die ersten (oder letzten) Netfilter Hook genannt werden, in welcher Reihenfolge werden sie tatsächlich aufgerufen?In welcher Reihenfolge gehen Netfilter-Hooks ein, wenn sie alle NF_IP_PRI_LAST oder NF_IP_PRI_FIRST angeben?
netfilter_ops_out.hook = hook_func_out;
netfilter_ops_out.pf = PF_INET;
netfilter_ops_out.hooknum = NF_IP_LOCAL_OUT;
netfilter_ops_out.priority = NF_IP_PRI_FIRST;
ret = nf_register_hook(&netfilter_ops_out);
if (0 > ret) {
printk("Error registering netfilter hook: %d\n", ret);
return ret;
}
netfilter_ops_in.hook = hook_func_in;
netfilter_ops_in.pf = PF_INET;
netfilter_ops_in.hooknum = NF_IP_LOCAL_IN;
netfilter_ops_in.priority = NF_IP_PRI_LAST;
ret = nf_register_hook(&netfilter_ops_in);
if (0 > ret) {
printk("Error registering netfilter hook: %d\n", ret);
return ret;
}
Experimentell, machte ich zwei Module, insmod
ed sie in den beiden verschiedenen Ordnungen - aber sie gaben das gleiche Ergebnis, was bedeutet, dass eine Unterordnung ist, die nicht nur ist ‚first come first serve‘. (Es ist auch nicht alphabetisch ...)
'nf_register_hook()' wird in der Funktion 'module_init' aufgerufen. Ein älterer Kernel: 2.6.18. Ein Modul ändert ein Paket, das andere protokolliert es, beide verwenden denselben Registrierungscode (oben). Aber egal in welcher Reihenfolge ich die Module einlade, ich sehe das Paket immer im Logger modifiziert. Ich dachte, irgendwie sollte ich in der Lage sein, den Logger vor dem Modifikator laufen zu lassen ... aber keine Würfel. –
Entschuldigung, meine Erklärung hat das Problem nur noch verwirrender gemacht. Ich habe vier Haken, jeweils 2 von LOCAL_IN und LOCAL_OUT. Die beiden Module hängen beide an den eingehenden und ausgehenden, aber ich konzentriere mich nur auf den eingehenden. –