Currently ip_route_output_slow() sets rth->u.dst.output = ip_output; And
then there is this line in the same function:
if (flags & RTCF_LOCAL) {
rth->u.dst.input = ip_local_deliver;
rth->rt_spec_dst = fl.fl4_dst;
}
Basically what this means is that when the user calls skb->dst->output(),
neighbour resolution would be implicitly performed. And at the time of
actually sending an ARP request for link layer address the transmission is
bypassed (due to the check in neigh_event_send()) and a dummy neighbour
entry for the loopback device is constructured.
I propose that in the above code fragment rth->u.dst.output be changed to
ip_dev_loopback_xmit() (much like what happens inside of ip_mc_output()). I
think this would _significantly_ improve performance in the
delivery-to-local-destination case. What do you think?
tx
yedok
_________________________________________________________________
<b>Get MSN 8</b> and help protect your children with advanced parental
controls. http://join.msn.com/?page=features/parental
|