On Thursday 20 March 2003 00:33, David S. Miller wrote: > From: N N Ashok <nalkunda@cse.msu.edu> > Date: Thu, 20 Mar 2003 00:27:41 -0500 > > I did see that. But however, I could not understand how "struct rtable" > can be casted to "struct dst_entry" and then back again, all the while > accessing fields of both structures. > > You miss the point that they are the same structure. It is allocated > the size of "struct rtable" but it may be casted back and forth > between rtable and dst_entry as desired. > > void foo(void) > { > struct rtable rt; > struct dst_entry *dst; > > rt->u.dst.bar = 1; > > dst = (struct dst_entry *) &rt; > ASSERT(dst->bar == 1); > > dst = &rt->u.dst; > ASSERT(dst->bar == 1); > } I think I finally understand the whole setup. Please correct if I'm wrong. "struct rtable" has its first field "u" which is a union of "dst_entry" and "struct rtable *". Thus when we cast rtable to dst_entry, we are accessing the rtable.u.dst_entry itself and not any other part of rtable. Since originally the data was allocated the size of "rtable", when we cast "dst_entry" to "struct rtable" we can access all the fields of "struct table". Thanks a lot for the clarification. Ashok - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html