A software network bridge is disclosed which allows the connected network
segments to be presented as a single network unit to the host computer.
The software bridge can be implemented as an intermediate network driver,
abstracting multiple network segments into a single network interface for
higher level protocols and applications. While the intermediate network
driver acts as a software bridge implementing the Spanning Tree
Algorithm, it also acts a network interface driver to higher level
protocols, conglomerating information from the multiple underlying
network interface cards and forwarding along commands from the higher
level software to the appropriate network interface card. The
intermediate network driver can also simultaneously send the same data
packet through multiple network interfaces by creating multiple packet
descriptors, each pointing to the same data, but each given individually
to the underlying network interfaces to control during their
transmission. Further efficiencies can also be achieved by the software
bridge, implemented as an intermediate network driver, through the use of
a dynamic allocation scheme which increases the size of the useable
buffers of each network interface without increasing the overall memory
consumption, and the use of a queuing scheme which preliminarily examines
incoming data packets to determine if any processing needs to be
performed, and queues the packets should they require processing.
Additionally, a user interface is presented exposing this functionality
of the intermediate network driver.