Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
ICMP errors born at Jool are not being sent. #79
When Jool is translating a ICMP error from 4 to 6 or 6 to 4, it crosses the border troublelessly.
But when Jool is the one who emits the error, it never reaches the cord.
The problem seems to stem from incorrect use of the kernel's icmp_send() and icmpv6_send() functions: The offending packet is apparently supposed to be already routed; if it's not, then those functions fail early and silently.
This is expected to be fixed by 3.1.3, but I'll try to work a bit extra to get it done by 3.1.2.
I hacked to solve this issue. Because rtable is not made before routing, I forced it made by ip_route_input_noref as the following patch.
referenced this issue
Mar 18, 2014
Your solution looks good to me. It only needs to be mirrored to IPv6, since ip_route_input_noref() is IPv4 only.
I've been thinking: For some reason, we seemed to either assume that we didn't need to route the incoming packet, or that it was already routed, but this bug contradicts the former, and issue #84 contradicts the latter.
Because your solution is also a fix for #84, I will move it to the fragment's initialization code (probably next to frag->original_skb in packet.c), so both icmp_wrapper and translate_packet can see it.
Thank you. I better commit the fix tomorrow, since otherwise it won't make it to the milestone.