Hi,
I have been looking at the networking code of Linux for my Masters thesis.
I observed the following:
In ip_route_input(), if a route is found in the cache, the skb->dst is setup
with the route found by casting the rtable entry to dst_entry:
skb->dst = (struct dst_entry*)rth;
Later in ip_route_input(), skb->dst->input() is called:
return skb->dst->input(skb);
In ip_forward(), skb->dst is again casted to rtable:
rt = (struct rtable*)skb->dst;
I am unable to understand how a rtable structure casted to dst_entry will give
a correct pointer to the input() function. I looked at the fields in rtable
and dst_entry, the fields in the structures are cannot be lined up (the
fourth field in rtable is not the same type as the fourth field in
dst_entry).
Can anybody help me understand this casting of rtable to dst_entry and then
back to rtable?
Thanks,
Ashok
|