On (03/18/10 10:13), Peter Memishian wrote:
>  > I have some code that's trying to do a NetBIOS name lookup.
>  > This code is using the old fashioned method of sendto()
>  > with destination INADDR_BROADCAST.  This used to work,
>  > but recently started getting ENETUNREACH errors from
>  > the sendto() calls - but only SOME of the time!
>  >
>  > Anyone have ideas why this has started to fail?
> 
> As of b129 (IP Datapath Refactoring) the sendto() path can synchronously
> return errors.  Erik and Sowmini can likely help more since they're
> intimately familiar with the new codepaths, but it's possible this is
> also a longstanding issue which was not previously reported because of the
> previous sendto() semantics.
> 

Meem's right. To confirm, you could run the dscript below, and possibly
print ustack when you see the ENETUNREACH (error 0x80) being returned.

The dscript to run would be:

#!/usr/sbin/dtrace -Cs -
ip_attr_connect:entry
{
        self->trace = 1;
}
ip_set_destination_v4:entry
/self->trace/
{
        printf("%x", (ipaddr_t)arg1)
}
ip_set_destination_v4:return,
ipif_select_source_v4:return 
/self->trace/
{
        printf("arg1 %p", arg1);
}

ip_attr_connect:return
/self->trace/
{
        self->trace = 0;
}

_______________________________________________
networking-discuss mailing list
[email protected]

Reply via email to