A quick review of the code seems to indicate that this is indeed a bug.
    As far as I can tell, the IN_CLASS*() macros assume host order.  e.g.
    from /usr/include/netinet/in.h:

    #define IN_CLASSA(i)            (((u_int32_t)(i) & 0x80000000) == 0)

    Since s_addr is in network byte order, the conversion is necessary.  If
    this fixes Danny's problems, and doesn't break anyone else (Paul?), I'd
    say it should be committed.

                                                -Matt

:Umm..  I'm using the netboot just fine here for the ports cluster and
:it is using the code in the tree w/ zero modifications.  It boots via
:nfs and comes up with ip, netmask, and gateway.
:
:paul
:
:Danny Braniss ([EMAIL PROTECTED]) wrote:
:> bug report:
:>      in lib/libstand/bootp.c:
:> 
:>      if (IN_CLASSA(myip.s_addr))
:>              nmask = htonl(IN_CLASSA_NET);
:>      else if (IN_CLASSB(myip.s_addr))
:>              nmask = htonl(IN_CLASSB_NET);
:>      else
:>              nmask = htonl(IN_CLASSC_NET);
:> should be:
:> 
:>      if (IN_CLASSA(ntohl(myip.s_addr)))
:>              nmask = htonl(IN_CLASSA_NET);
:>      else if (IN_CLASSB(ntohl(myip.s_addr)))
:>              nmask = htonl(IN_CLASSB_NET);
:>      else
:>              nmask = htonl(IN_CLASSC_NET);
:> 
:> which explains why gateway was zero, even if it was provided by dhcp.
:> it also explains why it hung trying to mount via nfs.
:> 
:>      danny


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to