Re: Casting (struct rtable*) to (struct dst_entry*)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux