Herbert Xu wrote:
Actually it was me who was confused. ip_route_me_harder can be called
on both incoming/outgoing packets. That's what the if clause is trying
to determine. You should only call xfrm_lookup on the outgoing path.
No, ip_route_me_harder is currently (without the patches) only called
for outgoing packets. The if-clause is there because ip_route_output
doesn't handle packets with non-local source, and we don't want to set
the source to 0 (as was done before) because it prevents policy routing
from working properly. That's why we need the xfrm_lookup for both
cases.
Regards
Patrick
So this should be moved back to the if clause above:
fl.proto = iph->protocol;
lookup = __ip_route_output_key;
#ifdef CONFIG_XFRM
if (!(IPCB(*pskb)->flags & IPSKB_XFRM_TRANSFORMED)) {
lookup = ip_route_output_key;
do_decode
}
#endif
if (lookup(&rt, &fl) != 0)
return -1;
|