Endianness and comparing IP's

Clayton,Keith - Programmer Clayton at ltcc.cc.ca.us
Sat Jan 6 08:45:33 EST 2001


Is the BSWAP32 macro a destructive macro . . destructive in the sense that
the value ip is modified?

If so, you run BSWAP32(ip) in the condition and ip is modified.  Conditional
fails . . pass ip through BSWAP32 again and the byte order is back to the
original!

Its quite possible that ip is coming to you in a form that is already
byte-order correct . .

Try this . . remove all the BSWAP32 refs and before the condition put in
this line

log ("server_login: ip=%u con->ip=%u", ip, con->ip);


I'd venture a guess that ip will show as equivalent to con->ip . . so the
use of BSWAP32 here is incorrect


Keith Clayton
Programmer/Analyst, Lake Tahoe Community College
clayton at ltcc.cc.ca.us

"If you don't trust me with your source code, why should I trust you with my
computer"

No electrons were harmed in the creation of this email

> -----Original Message-----
> From:	alex avriette [SMTP:alex at macachu.yi.org]
> Sent:	Friday, January 05, 2001 12:25 PM
> To:	linuxppc-dev at lists.linuxppc.org
> Cc:	drscholl at users.sourceforge.net
> Subject:	Endianness and comparing IP's
>
>
> I am still working with the opennap software (available at
> opennap.sourceforge.net) to resolve a strange issue whereby two IP's are
> reported as equal, but fail a conditional for equality. the code in
> question is here:
>
>   if (BSWAP32(ip) != con->ip)
>   {
>     log ("server_login: ip=%u con->ip=%u", BSWAP32(ip), con->ip);
>     log ("server_login: %s does not match %s (%s)",
>          con->host, fields[0], my_ntoa (ip));
>     con->destroy;
>     return;
>    }
>
> the output of this is here:
>
> server_login: ip=523706576 con->ip=523706576
> server_login: 208.32.55.31 does not match cygnus.theblackmoor.net
> (208.32.55.31)
>
> so what I see happening is that BSWAP32(ip) doesnt equal con->ip which is
> reported by the log (as seen earlier on the list, it uses a v*printf
> followed by a fputs) as indeed being equal. I dont have host entries for
> this host nor any of the other hosts I am trying to connect to.
>
> Apparently this software is developed on x86 machines and tested in
> Solaris on Suns for big endian compatibility. The code works fine on PC's
> in this configuration:
>
>     if (ip != BSWAP32 (con->ip))
>     {
>       log ("server_login: %s does not match %s (%s)",
>            con->host, fields[0], my_ntoa (ip));
>       con->destroy;
>       return;
>     }
>
> I am not familiar with the concept of endianness and it hasnt quite been
> explained sufficiently to me. I have Cc'ed the primary developer of
> opennap on this message, though I am pretty familiar with the concepts and
> workings of the code.
>
> Thanks in advance.
>
> alex
>
>

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/





More information about the Linuxppc-dev mailing list