About LBFO
Note NDIS 5. x has been deprecated and is superseded by NDIS 6. x. For new NDIS driver development, see Network Drivers Starting with Windows Vista. For information about porting NDIS 5. x drivers to NDIS 6. x, see Porting NDIS 5.x Drivers to NDIS 6.0.
A miniport driver can be implemented to support LBFO. Such a miniport driver can balance its workload of packet transfers by distributing the workload over its bundle of miniport instances and can set a secondary miniport instance to take over packet indications and information requests if the primary miniport instance fails. The bundle of miniport instances that a miniport driver manages can include miniport instances from both single-port and multiple-port NICs.
NDIS only exposes the miniport driver's primary miniport instance to transports. If transports request to send packets to the miniport driver or request to set or query information in the miniport driver, NDIS passes these requests to the primary miniport instance.
Only miniport instances that have been initialized by the same miniport driver can be part of an LBFO solution. In order for two or more miniport instances that have been initialized by different miniport drivers to be part of an LBFO solution, an intermediate miniport driver must be implemented to provide LBFO for those miniport instances.
A secondary miniport instance should only use the handle to the primary miniport instance to indicate packets up to bound transports.
The primary miniport instance handles all requests for information that transports make. However, NDIS can send specific requests to secondary miniport instances. For example, NDIS might query all miniport instances for their media connectivity. Secondary miniport instances must process and respond to this query.
A miniport driver must specify that it implements LBFO when it is installed. To specify LBFO support, the miniport driver's information (INF) file specifies the BundleIdkeyword and a case-insensitive string value to identify the miniport driver's bundle of adapters. The registry is then configured with this information.
During initialization, the miniport driver must determine if a miniport instance that is being initialized belongs to an existing bundle. To determine if a miniport instance is a member of the bundle, the miniport driver retrieves the string value from the BundleId keyword under the miniport instance's registry key. Each miniport instance should copy the bundle-identifier value to the miniport instance's internal structure.
The miniport instance should then search through the internal structures of the miniport instances that have already been initialized to locate a miniport instance that has an identical bundle-identifier value. If the miniport instance does not locate a match, it becomes the bundle's primary miniport instance. This situation occurs if the miniport instance is the first miniport instance from the bundle to be initialized. If the miniport instance locates an identical bundle-identifier value, the miniport instance should set itself to the secondary role in relation to the primary miniport instance. The miniport driver can set multiple secondary miniport instances, that is, multiple secondary miniport instances can exist in a bundle.
A miniport driver must provide LBFO for packet transfers and information requests, as appropriate. The following describes examples of a miniport driver providing LBFO:
The miniport driver reroutes packet transfers and information requests to secondary miniport instances.
If the bundle's primary miniport instance fails, the miniport driver can remove the primary miniport instance from the bundle and promote the secondary miniport instance to the primary role.