[ofw] [PATCH] Make WSD use new IBAT library

Fab Tillier ftillier at windows.microsoft.com
Wed Jul 2 13:53:18 PDT 2008


>> Making IBAT::Resolve synchronous would move the loop/sleep into it,
>> which removes the option for the caller to process it asynchronously
>> (or do something else in between calls).
>  I don't mind ibat:resolve being asynchronous, just the fact that it
> requires polling to check for completions.  Why not add an overlapped
> parameter?

The GetIpNetEntry2 function doesn't take an overlapped, so making it an overlapped operation would be a tad difficult without kicking off a thread and having the thread poll periodically (or some similar concept).

The call returns E_PENDING if GetIpNetEntry2 returns a MIB_IPNET_ROW2 with a State of NlnsIncomplete, which means "Address resolution is in progress and the link-layer address of the neighbor has not yet been determined. Specifically fro IPv6, a Neighbor Solicitation has been sent to the solicited-node multicast IP address of the target, but the corresponding neighbor advertisement has not yet been received."

I'm not aware of a way to block until this is complete, or how to detect that it is complete without just polling.

>> The pending case doesn't happen often, except in very busy fabrics
>> because IPoIB does a PR query to send the unicast response to an ARP
>> request.
>
> Is the pending related to the query or the ARP?  Why would the activity
> on the
> subnet change whether the call returns pending?

Pending is related to the resolution.  The IP Helper library will cause an ARP to be sent if there isn't a valid entry for that destination.  IPoIB will send the ARP, the recipient will do a PR query to send the response.  I don't know which of the operations actually cause the state to be returned as incomplete, though, just that I saw it come back as such, and wanted to allow MS MPI to go do something else (such as try to connect to someone else if needed) rather than block and poll.

-Fab



More information about the ofw mailing list