YOSHIFUJI Hideaki / ???? wrote:
In article <4024A488.60203@xxxxxxxxxxx> (at Sat, 07 Feb 2004 10:40:40 +0200), Mika
Penttilä <mika.penttila@xxxxxxxxxxx> says:
The ip6_output2() resolves and inserts link-layer address appropriately.
If it did, we would have noticed (by conformance test or even by
usual operation). ;-)
ip6_output2() doesn't resolve link-layer addresses. We don't even have a
neighbour, in
ndisc_dst_alloc(dev, NULL, ip6_output2); case.
ip6_output2() calls ip6_output_flinish().
ip6_output_finish() calls dst->hh->hh_output() if hh is already built.
Otherwise, dst->neighbour->output() is called and it resolves
link-layer address of neighbor.
I think you missed our ndsic_dst_alloc() change.
ndisc_dst_alloc() takes 4 argument:
struct dst_entry *ndisc_dst_alloc(struct net_device *dev,
struct neighbour *neigh,
struct in6_addr *addr,
int (*output)(struct sk_buff *));
If neigh is NULL, we do ndisc_get_neigh(dev, addr) to get one.
hmm. where is this ndisc_dst_alloc() change? In the patch it's called
with three params, only the output routine is changed :
- dst = ndisc_dst_alloc(dev, NULL, ndisc_output);
+ dst = ndisc_dst_alloc(dev, NULL, ip6_output2);
--Mika
|