Hi,
I have setup a basic 3 node topology for Aodv Ipv6 routing.
Src--------NodeA--------Dst
All the nodes configured as routers.
All the nodes are successfully sending Hello messages to their immediate neighbours and the packets are also received, Src and Dst nodes process NodeA's hello message and make an entry to the routing table, but NodeA is processing only Src node's hello packet and not Dst node's Hello packet.(I dont understand why, could someone please explain?)
Src node sends a route request for Dst node. NodeA sends it to Dst. Now Dst figures out that the request was meant for it and sends a SendReply packet and NodeA receives it. Theoretically, NodeA should just lookup for a route to Src (which it already has in its routing table), but it isnt processing this packet at all. To be more specific, the RecvReply isnt called. As i see from the Log, after MAC processing at NodeA, it sends NS (Neighbour Solicitation) to Dst and Dst replies with NA (Neighbour Advertisement), following which NodeA wants to send some IP packet (I dont know what packet and why it has to send) to Dst node, but it doesnt have a routing table entry because it did not process the hello packet :( so in the ICMP message, it says destination unreachable.
I enabled the UdpL4Protocol and Ipv6EndPointDemux logs to see why the hello messages are not processed and found out few things.
1. The UdpL4Protocol::Receive is called by L3 protocol. In this Receive, it calls Ipv6EndPointDemux::LookUp to make sure that a matching EndPoint tuple is obtained. If a matching tuple not found, then it says "RX_ENDPOINT_UNREACH"
2. Now on digging into Ipv6EndPointDemux::LookUp there are plenty of match cases to check for. The reason which I think is responsible for the packet not being processed is that it just cant find any matches at all for every endpoint in the 'for' loop.
3. I did compare with the logs of hello packets which were processed and found that it is sufficient if a match case is obtained for the criteria "Only local port matches exactly".
4. In my case, for an EndPoint created at NodeA for link between NodeA and Dst the basic criteria of a "localAddressMatchesWildCard" doesnt pass.
(Please note: I have used the exact object names to make it easy to track my problem and reproduce the path, I hope this helps)
Please let me know if am looking at the right point as my problem, if you think otherwise, please point me in the right direction.
I had observed same behaviour in a larger network consisting of 6 nodes.
In summary: The nodes are able to listen to broadcast packets on only one of their interfaces and fail to process packets directed to their LinkLocalAddress. The problem could also be that am not binding the sockets appropriately.
If you had the patience to read all the way till here, am sure you are capable of helping me out :)
Thank you for your time.
Regards
Shashidhar B.L