RPC/XDR experience?
Olof Johansson
olof at austin.ibm.com
Sat Jun 7 08:56:35 EST 2003
linas at austin.ibm.com wrote:
> This is exactly what is happening.
Good.
>> if (xdrs->x_op == XDR_ENCODE
>> && (sizeof (int32_t) == sizeof (long)
>> || (int32_t) *lp == *lp)) // <-- HERE is the check
>
> OK, get ready:
>
> I presume you pulled this from glibc sunrpc subdir? Or the kernel
> rpc subdir? (The linux kernel rpc's can/should be different than
> the glibc ones).
glibc (2.2).
> Is this a 'well known limitation'? (i.e. that xdr_long will only
> send 32 bits), or is this a 'buggy implementation'?
This is a (well) known limitation. XDR calls 64-bit integers for "hyper integers". See RFC1014 for
reference.
> If its 'well known', where is it documented? 'man xdr' gives no hint,
> and implies the opposite is true ...
I can't find any documentation on Linux/glibc for this. This is the behaviour that AIX, Solaris and
other ONC+-based implementations have, to change it would be a bad idea for compatibility reasons.
http://docs.sun.com/db/doc/806-6543/6jffrdmf8?a=view for reference. Search for "xdr_long":
"The XDR routine xdr_long(3NSL) might seem to be a problem; however, it is still handled as a 32-bit
quantity over the wire to be compatible with existing protocols. If the 64-bit version of the
routine is asked to encode a long value that does not fit into a 32-bit quantity, the encode
operation fails."
> Does RPC define a 64-bit encoding (that can be received by 32-bit
> servers)?
xdr_hyper()
> If so, shouldn't the xdr_long be modified to use the 64-bit marshalling?
It would probably not be wise, since there's a lot of 32-bit code out there that will change
protocol behavior if it's recompiled in 64-bit mode, etc.
> I'm thinking to myself that there are valid reasons for applications
> on 32-bit CPU's to use 64-bit ints. I know gcc handles 64-bit 'long-long
> ints' on intel machines just fine, and has done so for at least 5 years.
> (if not 10). By extension, one must conclude that there are valid
> reasons for RPC's to support 64-bit ints, even on 32-bit arch's.
> If you buy the argument in the last 3 sentances, then I would think
> that xdr_long should be generating a 64-bit wire protocol on ppc64.
>
> There. Pandora's box is now open ...
Nah, no need to make the problem bigger than it already is and fix something that isn't broken.
-Olof
--
Olof Johansson Office: 4E002/905
pSeries Linux Development IBM Systems Group
Email: olof at austin.ibm.com Phone: 512-838-9858
All opinions are my own and not those of IBM
** Sent via the linuxppc64-dev mail list. See http://lists.linuxppc.org/
More information about the Linuxppc64-dev
mailing list