[AFS3-std] Re: first draft: ubik update proposal
Derrick Brashear
shadow@gmail.com
Sat, 5 Feb 2011 09:31:12 -0500
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 {
>>> =A0 =A0 =A0 =A0afsUUID uuid;
>>> =A0 =A0 =A0 =A0struct 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 f=
or
> use in an Rx RPC signature. =A0The appropriate thing here is some kind of
> discriminated union. =A0We should probably define such a type as an exten=
sion
> 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;
where
typedef enum
{
/* IPv4 address */
RX_IPV4 =3D 0x1,
/* IPv6 address */
RX_IPV6 =3D 0x2
} rx_addrtype_t;
--=20
Derrick