Ethereal-dev: Re: [Ethereal-dev] [patch] The real packet-hclnfsd.c patch...

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <guy@xxxxxxxxxx>
Date: Mon, 1 Apr 2002 14:40:50 -0800
On Mon, Apr 01, 2002 at 05:20:28PM -0500, Mike Frisch wrote:
> Please disregard the last one, I am new...

That patch applied, although it appears to include your previous patch;
that part didn't apply, as it was applied to the code in my tree, which
included your previous patch.  I've checked in in.

> 160c183,186
> < 	ip=((ip&0x000000ff)<<24)|((ip&0x0000ff00)<<8)|((ip&0x00ff0000)>>8)|((ip&0xff000000)>>24);
> ---
> > 	ip = ((ip & 0x000000ff) << 24) | 
> > 		((ip & 0x0000ff00) << 8) | 
> > 		((ip & 0x00ff0000) >> 8) | 
> > 		((ip & 0xff000000) >> 24);

That code is preceded by

	ip = tvb_get_ntohl(tvb, offset);

so you could replace that code, and the "tvb_get_ntohl()",
line with

	ip = tvb_get_letohl(tvb, offset);

*However*, I suspect, in practice, that the underlying problem is that
it's an IP address, and "proto_tree_add_ipv4()" expects the IP address
argument to be in *network* byte order, not *host* byte order. 
"tvb_get_letohl()" leaves the value alone if you run it on, say, a
little-endian PC, so either "tvb_get_ntohl()" followed by a
byte-swapping, or "tvb_get_letohl()", would do the right thing on a PC.

However, they won't do the right thing on a big-endian machine, such as
a SPARC or PowerPC machine.

Thus, you'd want to do

	tvb_memcpy(tvb, (guint8 *)&ip, offset, 4);

to extract the bytes without byte-swapping.

However, given that "ip" isn't actually *used*, you can save yourself
even more trouble by just doing

	proto_tree_add_item(tree, hf_hclnfsd_server_ip, tvb, offset, 4, FALSE);

(the last argument doesn't matter for IPv4 addresses, as they're not
FT_UINTn or FT_INTn or FT_BOOLEAN types).

I checked in changes to both places where an IP address was being
fetched to use "proto_tree_add_item()".