[Rdma-developers] Re: [openib-general] OpenIB and OpenRDMA: Convergence on common RDMAAPIs and ULPs for Linux

Grant Grundler iod00d at hp.com
Tue May 31 09:48:03 PDT 2005


On Sat, May 28, 2005 at 05:18:39PM -0700, Caitlin Bestler wrote:
> Verus..
> 
> struct rdma_xyz {
>      /* common fields */
> };
> 
> struct rdma_xyz_ib {
>     struct rdma_xyz common;
>     /* ib fields */
> };
> 
> struct rdma_xyz_iwarp {
>     struct rdma_xyz common;
>     /* iwarp fields */
> };
> 
> 
> The latter style is extensible, but makes it difficult to properly
> allocate a buffer that works for all variants.

The latter assumes the transport specific code is owns responsibilty
for allocating/deallocating those buffers.
It also forces the generic code to be completely ignorant of
the transport specific stuff. It doesn't allow the programmer
to hacking around in the "public" unions.

> The union style is also already in use in both IT-API and RNIC-PI.
> 
> I personally prefer sub-classing to unions, but I have found myself in the 
> minority on *most* projects where the issue has been discussed.
> One reason is that sub-classing provides very little type-safety.
> struct sockaddr is an example of this. It takes manual inspection
> to ensure that the variants are properly differentiated and it is
> still common for developers to pass in a plain struct sockaddr
> without realizing that it is not large enough for a struct sockaddr_in6.

IMHO, unions are a sort of "casts on whole structures". 
Neither method really offers an advantage in type checking.
Both require one "knows" which type is the right one.

grant



More information about the general mailing list