Andrew Hall wrote:
>Hello,
>
>I am using the IMQ with iptables (latest versions) and asking all packets to
>be enqueued to IMQ0 from both prerouting and postrouting (using different
>iptables rules to mark different streams). When I do this I get the kernel
>saying:
>
>"Dead loop on netdevice imq0, fix it urgently!" and communications
stop
>intermittently. If I remove the jump from either preroute or postroute it
>works fine but won't work together.
>
>Is this what is mean't to happen, because as far as I can see there is no
>loop happening here?
>
You probably forward packets. The loop happening ist
input-device -> prerouting -> imq (xmit_lock locked) -> reinject ->
...
-> postrouting -> imq (LOCKED!!)
To avoid this one has to drop xmit_lock in imq_xmit function before
reinjecteing and grab it back afterwards.
unfortunately this allows for endless recursion which is not possible in
the kernel due to limited stack space.
I've completed a version which should hopefully fix this as many people
requested such a feature.
I haven't released it yet because i have to do alot for my university
atm and haven't got the time for testing
although i promised the new version to some people for january ;(
In about two weeks my semester-vacation start, i hope to release the new
version very quickly afterwards.
Thanks for your patience,
Patrick