[AFS3-std] Re: first draft: ubik update proposal

Hartmut Reuter reuter@rzg.mpg.de
Sat, 05 Feb 2011 17:12:32 +0100


Derrick Brashear wrote:
> On Sat, Feb 5, 2011 at 4:09 AM, Jeffrey Hutzelman<jhutz@cmu.edu>  wrote:
>> --On Friday, February 04, 2011 10:14:23 AM -0600 Andrew Deason
>> <adeason@sinenomine.net>  wrote:
>>
>>> On Fri, 4 Feb 2011 09:32:53 -0500
>>> Derrick Brashear<shadow@gmail.com>  wrote:
>>>
>>>> struct UbikInterfaceInfo {
>>>>         afsUUID uuid;
>>>>         struct sockaddr_storage hostAddr[UBIK_MAX_INTERFACE_ADDR];
>>>> };
>>>
>>> I thought struct sockaddr_storage can be different on different
>>> implementations, and isn't guaranteed to store ~everything, just the
>>> representations that host supports. This is something I've been a little
>>> unclear about, actually; is there any existing standard for transmitting
>>> generalized network addresses across platforms? Or does everyone just
>>> come up with their own?
>>
>> Indeed, sockaddr_storage is an API artifact, and certainly not suitable for
>> use in an Rx RPC signature.  The appropriate thing here is some kind of
>> discriminated union.  We should probably define such a type as an extension
>> to the "standard" types supported by Rx, rather than doing it in Ubik and
>> again in VL and again in RXAFSCB and so on and so on.
>
> to that end, may i propose that rx define a type e.g.
> typedef struct
> {
>    /* The discriminator for the union below. */
>    rx_addrtype_t addr_type;
>    union
>    {
>      /* IPv4 address, in network byte order. */
>      struct in_addr ipv4;
>
>      /* IPv6 address, in network byte order. */
>      struct in6_addr ipv6;
>    } addr;
> } rxaddr_t;


This will not work because in6_addr is a union and xdr cannot handle unions 
unless you have a switch variable which says which branch of the union should be 
used. 16 bytes are not the same as 4 int32 if you have different endianess!

>
> where
>
> typedef enum
> {
>    /* IPv4 address */
>    RX_IPV4 = 0x1,
>    /* IPv6 address */
>    RX_IPV6 = 0x2
> } rx_addrtype_t;
>
>
>


-- 
-----------------------------------------------------------------
Hartmut Reuter                  e-mail 		reuter@rzg.mpg.de
			   	phone 		 +49-89-3299-1328
			   	fax   		 +49-89-3299-1301
RZG (Rechenzentrum Garching)   	web    http://www.rzg.mpg.de/~hwr
Computing Center of the Max-Planck-Gesellschaft (MPG) and the
Institut fuer Plasmaphysik (IPP)
-----------------------------------------------------------------