Given the continually increased reliance on computers in contemporary society, computer technology has had to advance on many fronts to keep up with increased demand. One particular subject of significant research and development efforts is parallelism, i.e., the performance of multiple tasks in parallel.
A number of computer software and hardware technologies have been developed to facilitate increased parallel processing. From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. Furthermore, some microprocessors have been developed that support the ability to execute multiple threads in parallel, effectively providing many of the same performance gains attainable through the use of multiple microprocessors. From a software standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to concurrently execute in multiple threads so that multiple tasks can essentially be performed at the same time.
In addition, some computers implement the concept of logical partitioning, where a single physical computer is permitted to operate essentially like multiple and independent “virtual” computers (referred to as logical partitions), with the various resources in the physical computer (e.g., processors, memory, input/output devices) allocated among the various logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the software applications executing on the logical partition, operates as a fully independent computer.
Some logically-partitioned computers, as well as some non-logically-partitioned computers, may additionally support the use of integrated computers. For example, some computers may support the use of integrated card-based computers, where complete computers, including all necessary processors, memory and support circuitry, are mounted on cards that are in turn mounted in slots in a logically-partitioned computer. Each card-based computer runs its own operating system, and in most respects operates as a separate computer. However, typically some resources used by a card-based computer, such as mass storage and network connections, are shared with and managed by the logically-partitioned computer.
In a logically-partitioned computer, integrated card-based computers are treated as system resources, and are typically allocated to different logical partitions, such that overall management and interaction with the card-based computers are handled by the logical partitions to which such card-based computers are allocated. The logical partitions also serve to manage mass storage and network connectivity for card-based computers in such a manner that the card-based computers are able to behave as if those computers were independent and stand-alone computers. In this manner, a large number of independently-acting card-based computers may be supported and managed by a single logically-partitioned computer.
Considering that card-based computers are permitted to behave like independent computers, and that logical partitions are also permitted to behave like independent computers, enabling these various computers to communicate with one another without the need for specialized functionality is highly desirable. Put another way, it is desirable to enable a card-based computer to communicate with a logical partition or another card-based computer, in the same manner as that card-based computer would communicate with any other independent computer. It is also desirable to permit a logical partition to communicate with other logical partitions or card-based computers in the same manner as that logical partition would communicate with any other independent computer.
To serve these needs, the concept of “virtual networking” has been developed. In a virtual network, a physical network is simulated in lower levels of software to enable higher levels of software to communicate in the same manner as would be required to communicate over a physical network.
For example, in an Ethernet-compatible network, connectivity is supported through the use of network adapters that are connected to a physical medium such as a series of wires, routers, hubs, switches, etc. The network adapters are typically implemented as cards that install in available slots in a computer. Each network adapter typically has an identifier that uniquely identifies the network adapter on the network, so that data can be sent to particular network adapters using their unique identifiers. For example, each network adapter may have a unique Media Access Control (MAC) address that uniquely identifies that adapter. Network information is then typically sent over a network in the form of frames, with those frames including the MAC addresses of both the source and destination network adapters. Logic in the network adapters, as well as in any hardware components in the network itself (e.g., routers, switches, etc.), enables network frames to ultimately reach the destination network adapter regardless of the actual topology of the network. As such, the computers that utilize such network adapters are able to send information over a network without regard for where other network adapters, and their respective computers, reside on the network.
Another aspect of Ethernet-based networking is the use of multiple layers of protocols to enable higher-level networking functionality. For example, many networks support the use of higher-level protocols such as TCP/IP to add functionality such as guaranteed delivery, dynamic addressing, delivery confirmation, etc. A TCP/IP packet, in essence, provides a header that “wraps” around a lower-level frame, e.g., a layer 2 frame that relies on MAC addressing. Higher level protocols such as TCP/IP, however, require additional software support in the computers coupled to a network to provide the additional functionality supported by the protocol.
From the perspective of a computer that utilizes a network adapter to connect to a physical network, program code resident in the computer, typically referred to as a “device driver”, is used to effectively manage the interaction between the computer and its network adapter, including the transfer of data to and from the network. A device driver is typically designed for a specific make and model of network adapter, and enables the operating system of a computer to be designed to generically communicate with a network irrespective of the type of network adapter that is installed.
Virtual networking relies on many of the same protocols as physical networking, such that the operating system and device drivers in a computer that communicate with a virtual network are able to do so in the same manner that would occur were a physical network used. Instead of using physical network adapters, however, virtual networking relies on the use of “virtual” network adapters that effectively mimic the operations of a physical network adapter. The virtual network adapters are implemented in software, and logically reside outside of the scope of a computer attempting to communicate over a virtual network. As such, the fact that a network is virtual is effectively hidden from the computer.
Thus, for a card-based computer being managed by a logical partition, the virtual network adapter for the card-based computer is typically software that logically resides in a logical partition. Likewise, for a logical partition, the virtual network adapter therefor is typically implemented as software resident in a partition manager.
The software-based virtual network adapters in a virtual network are logically connected to one another to mimic the transfer of network frames over a network. This additional functionality is also typically implemented in software residing in the same logical entity as the virtual network adapters.
As with physical networking, it may be desirable in some circumstances to enable a virtual network adapter on a virtual network to communicate with network adapters on other networks. For example, in the aforementioned logically-partitioned computer architecture that utilizes integrated card-based computers, it may be desirable to permit an integrated card-based computer being managed by one logical partition to communicate with an integrated card-based computer being managed by another logical partition, or to communicate with another computer that is physically remote from the logically-partitioned computer (as a card-based computer may not have its own hardware-based network port). Given, however, that the virtual networks for the integrated card-based computers reside within the logical partitions, direct connectivity by computers that are not logically located in the same logical partition is prohibited. In this regard, the virtual networks implemented within a logical partition or within a partition manager are effectively “isolated” networks insofar as no direct communication is supported with external networks.
Thus, a significant need exists for a manner of “bridging” an isolated network such as a virtual network with another network (virtual or physical) that is external to the computer within which the virtual network is implemented.
Traditional bridging mechanisms used for bridging physical networks have not been found to be optimal for isolated or virtual network applications. For example, some physical networks rely on hardware network switches or routers to bridge network traffic between multiple networks. However, given that virtual networks are implemented entirely in software, the use of hardware switches and the like is not feasible. As another example, some physical networks rely on software-implemented network bridges to bridge traffic between network adapters coupled to different networks. Conventional software-implemented network bridges, however, typically rely on TCP/IP or other higher level protocols to implement bridging, which is relatively complex to implement, requires additional processing overhead, requires operating system participation, and limits bridging to data communicated only using specific higher level protocols.
Therefore, a significant need continues to exist in the art for a manner of bridging network traffic between an isolated network such as a virtual network, and other virtual and/or physical networks.