Virtual network devices

A trunk in a network file server includes at least two communications ports. The trunk is created by combining the communications ports into a single virtual device and assigning ownership of the communications ports to the virtual device. A failsafe network device including at least two trunks, with each trunk coupled to different switches can be created by creating a third virtual device. Ownership of a first virtual device including communication ports coupled to a first switch and a second virtual device including communication ports coupled to a second switch is assigned to the third virtual device.

BACKGROUND OF THE INVENTION

A data processor such as a file server can include at least one Network Interface card (“NIC”) to provide access to a communications network. The NIC includes at least one network device port for communicating over a particular type of communications network. The specific type and format of data transmitted over the network depends upon the communication network protocols used such as, the Ethernet or Institute of Electrical and Electronics Engineers (IEEE) 802.3 protocol, higher layer Transmission Control Protocol/Internet Protocol (TCP/IP), or the Asynchronous Transfer Method (“ATM”) protocol.

In a communications network that transmits data using the Ethernet protocol, ports coupled to the communications network are identified by a Media Access Control (“MAC”) address. Data is transmitted over the communications network in the payload of a data packet. Each data packet includes a MAC source address associated with the transmitting port and a MAC destination address associated with the port to which the data packet is to be delivered.

The file server receives requests for files made accessible by the file server from clients connected to the communication network. Each such request is transmitted in the payload of a data packet. The data packet includes a MAC destination address assigned to one or more network device ports in the file server. Although the client can transmit data to the file server to any of the MAC addresses assigned to network device ports in the file server, this can result in uneven distribution of data packets, resulting in reduced bandwidth to the file server.

Bandwidth to a file server can be increased by aggregating physical links from the file server to a switch connected to the communications network. One scheme for link aggregation or trunking for an Ethernet network is described in the IEEE 802.3ad standard. To implement link aggregation, a plurality of ports in the switch are assigned to a trunk by assigning the same MAC address to each port. A data packet for the MAC destination address assigned to the trunk can be forwarded through any port that is a member of the trunk.

A virtual device driver in the file server can then process data packets received by any of the network device ports that are members of the trunk. The file server also selects one of the network device ports that are members of the trunk through which to transmit a data packet to the switch.

Upon detecting a failure in one of the network device ports or physical links in the trunk, the virtual device driver can also transmit the data packet through another network device port that is a member of the same trunk. However, upon failure of the trunk there is no alternate path to the MAC address.

SUMMARY OF THE INVENTION

A method and apparatus is provided for aggregating bandwidth over a communications network and providing redundancy in case of failure of a link in a switch, the switch coupled between a network file server and the communications network. The network file server includes a plurality of communications ports coupled to a switch. A trunk configuration routine in the network file server creates a virtual device for the plurality of communications ports and sets a trunk network address to a first network address assigned to a first communications port. The trunk configuration routine sets network addresses for the plurality of communications ports and a virtual network address assigned to the virtual network device to the trunk network address. The network file server also includes an owner routine. The owner routine selects a virtual device associated with the trunk network device for a data packet for the trunk network address received by any of the communications ports in the trunk.

The network file server also includes a device driver. The device driver allocates a device structure for each of the plurality of communications ports. Each device structure including an owner field. The trunk configuration routine allocates a device structure for the virtual device and stores a pointer to the device structure allocated for the virtual network device in the owner field in each of the device structures allocated for the plurality of communications ports. The owner routine examines the contents of the owner field in the device structure allocated to the communications port receiving the data packet and selects the virtual device pointed to by the pointer stored in the owner field.

The network file server also includes a virtual device driver which selects one of the plurality of communications ports through which to transmit a data packet on the trunk. The virtual device driver may select the one of the plurality of communications ports dependent on the result of an exclusive OR operation on a portion of a source network address and a destination network address. The portion of the source network address and the destination network address are dependent on a number of communications ports in the trunk. The trunk network may be a data link layer address. The data link layer address may be an Ethernet address.

A second plurality of communications ports may be coupled to a second switch. In that case, the configuration routine assigns ownership of the second plurality of communications ports coupled to a second switch to a second virtual network device and ownership of the virtual network device and the second virtual network device to a third virtual network device. The configuration routine also sets a failsafe network device address to the trunk network address and sets network addresses assigned to the plurality of communications ports to the third network address and a virtual network address assigned to the virtual network address to the failsafe network device address. The owner routine selects the third virtual network device associated with the failsafe network device for a data packet for the failsafe network device address received by any of the communications ports in the failsafe network device.

DETAILED DESCRIPTION OF THE INVENTION

FIG. 1is a block diagram illustrating a data mover100for moving data between a plurality of clients126-0,126-1,126-2, . . . ,126-N and a storage subsystem102over physical links122-0, . . . ,122-7coupled between switches104,130and the data mover100according to the principles of the present invention.

The data mover100includes a Cental Processing Unit (“CPU”)110, memory108, a storage interface106and a network interface120. The data mover100acts as a file server for clients126-0,126-1,126-2, . . . ,126-N coupled to a communications network132. The network interface120provides access to the communications network132through switches104,130. The data mover100also provides access to data stored in the storage subsystem102through the storage interface106in the storage subsystem102and stores data received from any of the clients126-1,126-2,126-3, . . . ,26-N in the storage subsystem102.

The storage interface106is coupled to the storage subsystem102through a storage bus112. The storage bus112can be a parallel Small Systems Computer Interface (“SCSI”) bus defined by the American National Standards Institute (“ANSI”) SCSI standard or a serial Fibre Channel (“FC”) bus also defined by the ANSI SCSI standard, or any other type of storage peripheral bus. The ANSI SCSI standard is well-known and beyond the scope of the present invention. The storage subsystem102can include non-volatile storage such as disks in a cached disk array or tapes in a tape silo.

An embodiment of the invention is described for a communications network132that transmits data using the Ethernet protocol. However, the invention is not limited to a communications network132using the Ethernet protocol. It should be understood that the invention can be used with any communications network that supports link aggregation by allowing the configuration of a trunk including a plurality of physical links coupled to a switch.

The Ethernet protocol performs functions of various layers in the Open Systems Interconnection (“OSI”) reference model. Data is stored in the payload of a frame or data packet. The data packet includes a data link layer header which stores a data link layer destination address to which the frame is to be delivered and a data link layer source address associated with the transmitter of the data packet. The data link layer source address and destination address included in an Ethernet data packet are commonly referred to as the Media Access Control (“MAC”) source and destination addresses.

The network interface120includes at least one Network Interface Card (“NIC”)>134-0, . . . ,134-4. Each NIC134-0, . . . ,134-4includes at least one network device port136-0, . . . ,136-9. Each network device port136-0, . . . ,136-9can be assigned a unique MAC address and can independently transmit and receive data over the communications network132through the switch104,130.

Each NIC134-0, . . . ,134-4is shown with two network device ports136-0, . . . ,136-9. However, any of the NICs134-0, . . . ,134-4can include more or less network device ports. For example, a NIC can include eight Fast Ethernet (FE) device ports or one Gigabit Ethernet (GE) device port.

The network interface120is coupled to switches104,130through physical links122-0, . . . ,122-7. The network interface120transmits and receives data packets over the physical links122-0, . . . ,122-7using a network communications protocol. Link aggregation is provided by configuring physical links122-0, . . . ,122-3coupled to switch104as members of trunk124-0and configuring physical links122-4, . . . ,122-7as members of trunk124-1. A destination address assigned to trunk124-0is also assigned to all physical links122-0, . . . ,122-3which are members of trunk124-0. Bandwidth to the MAC destination address associated with trunk124-0is increased by providing multiple physical links122-0, . . . ,122-3to the MAC destination address. The plurality of physical links122-0, . . . ,122-3provide redundancy in the case of a failure of any of the physical links or network device ports by providing alternate paths to the MAC destination address.

The Ethernet protocol supports a plurality of data transfer rates over the network. The data transfer rate for Fast Ethernet is 100 Mega-bits per second (“Mbps”) and the data rate for Gigabit Ethernet is one Gigabit per second (“Gbps”). A plurality of NICS134-0, . . . ,134-4with different data transfer rates can be included in the data mover100. For example, the network interface120can include Fast Ethernet or Gigabit Ethernet network device ports. However, for link aggregation of physical links using the Ethernet protocol, all of the physical links122-0, . . . ,122-3in the trunk124-0in the switch104,130must support the same data transfer rate.

The network switch104,130coupled to the data mover100also implements the Ethernet protocol and supports link aggregation. Ethernet protocol switches that support link aggregation include ALTEON's ACEswitch180, NORTEL's BAYSTACK350switch, CABLETRON's SMARTSWITCH 2200 switch, CISCO's 6500, 5505 and 29489 switches and FOUNDING BIG IRON's Ethernet switch.

In the embodiment shown, trunk124-0includes four physical links122-0, . . . ,122-3, and trunk124-1includes four physical links122-4, . . . ,122-7. However, the invention is not limited to four physical links per trunk. Each of the physical links122-0, . . . ,123-3in trunk124-0and physical links122-4, . . . ,122-7in trunk124-1are coupled to an independent physical network device port136-0, . . . ,136-9in the network interface120. Each network device port136-1, . . . ,136-9can be assigned a different Media Access Control (“MAC”) address and Internet Protocol (“IP”) address.

Each trunk124-0,124-1is configured in both the respective network switch104,130and the data mover100. In each switch104,130the same trunk mode is configured for all ports in the respective trunk. The trunk mode includes the selection of auto-negotiate, duplex and speed settings for all ports in the trunk124-0,124-1. Configuration of a trunk124-0,124-1in a switch104to provide link aggregation is well-known in the art and beyond the scope of the present invention. Configuration of a trunk124-0,124-1is performed by the trunk configuration routine144in the data mover100and is described later in conjunction withFIG. 3.

Upon receiving a data packet from a client126-1, . . . ,126-N to be transmitted over trunk124-0, switch104selects one of the physical links122-0, . . . ,122-3coupled to ports in the switch104over which to transmit the data packet. Methods implemented in the switch104for selecting one of the physical links122-0, . . . ,122-3in the trunk104are well known in the art and beyond the scope of the present invention. The method for processing a data packet received on one of the physical links122-0, . . . ,122-3in trunk124-0implemented in memory108(FIG. 1) is described later in conjunction withFIG. 6.

Before transmitting a data packet over trunk124-0, a virtual device driver150selects one of the physical links122-0, . . . ,122-3coupled to network device ports136-0, . . . ,136-5. The data packet is forwarded to the respective NICdevice driver142(FIG. 1) dependent on the selected physical link. The NICdevice driver142handles requests to transmit data packets through network device ports in the NIC134-0, . . . ,134-4and processes data packets received from the network device ports136-0, . . . ,136-9(FIG. 1). Typically, a NICdevice driver manages data packet transfer through all NICs of the same vendor type.

Upon receiving a request to forward the data packet, the NIC device driver142(FIG. 1) requests that the NIC transmit the data packet over the selected physical link122-0, . . . ,122-4. In one embodiment, the physical link122-0, . . . ,122-3is selected by performing an eXclusive OR (“XOR”) operation on a number of bits of the source and destination MAC addresses. The result of the XOR operation selects one of the physical links122-0, . . . ,122-3. The number of bits of the source and destination MAC addresses, selected for performing the XOR operation is dependent on the number of physical links122-0, . . . ,122-3in the trunk124-0. For example, for the four physical links122-0, . . . ,122-3in trunk124-0, the XOR operation is performed on two bits of the source and destination MAC addresses. If the selected physical link122-0, . . . ,122-3is not available, one of the other physical links122-0, . . . ,122-3is selected. For example, the other physical link can be the next sequential physical link122-0, . . . ,122-3or the first physical link122-0, . . . ,122-3in the trunk124-0.

For trunk124-0with four physical links122-0, . . . ,122-3, the two Least Significant Bits (“LSBs”) of the source address and the destination address are XORed to select a physical link122-0, . . . ,122-3. The physical link122-0, . . . ,122-3in the trunk124-0that is selected, is dependent on the two LSBs of the source and destination MAC addresses as shown in the table below:

Each trunk124-0,124-1can include physical links that are coupled to network device ports136-0, . . . ,136-9in different NICs134-0,134-4. As shown, trunk124-0includes physical links122-0, . . . ,122-4. Physical link122-0is coupled to network device port136-1in NIC134-0. Physical link122-1is coupled to network device port136-2in NIC134-1. Physical link122-2is coupled to network device port136-4in NIC134-2and physical link122-3is coupled to network device port136-5in NIC134-2.

A failsafe network device146that includes trunks124-0and124-1can be configured. Trunk124-0includes physical links122-0, . . . ,122-3coupling the network interface120to switch104. Trunk124-1includes physical links122-4, . . . ,122-7coupling the network interface120to switch130. Failsafe network device146provides redundancy in the case of failure of one of the trunks124-0,124-1by providing a path to the MAC destination address assigned to failsafe network device142through the other trunk124-0,124-1. The same MAC address is assigned to trunks124-0,124-1and failsafe network device146. Thus, a data packet received by switch104from clients126-1, . . . ,126-N is forwarded to the network interface120on trunk124-0. A data packet received by switch130for the MAC address assigned to failsafe network device146is forwarded by switch130on trunk124-1. Upon a failure of trunk124-0, clients126-1, . . . ,26-N can access the MAC address assigned to failsafe network device146through trunk124-1. Thus, multiple levels of redundancy can be provided by creating virtual devices for trunks and failsafe network devices.

FIG. 2is a block diagram of device structures allocated in the NICdevice driver142in memory108for each network device port shown inFIG. 1. A NICdevice structure200is allocated for each network device port136-0, . . . ,136-9in the network interface120in the data mover100. A NICdevice structure200is also allocated for each trunk124-0,124-1and failsafe network device146. The NICdevice structure200includes an owner field202, a port field204and a driver field206. The port field204stores a unique number assigned to the network device port136-0, . . . ,136-9. The driver field206stores a pointer to the NICdevice driver142associated with the network device port136-0, . . . ,136-9. The NICdevice driver142manages NICs134-0, . . . ,134-4of the same vendor type installed in the data mover100.

The data link routines140and virtual device driver150process a request to transmit data to a MAC destination address and forward the request including the source MAC address and the destination MAC address to the respective NICdevice driver142. The data link routines140and virtual device driver150also process data included in data packets received from the NICdevice driver142dependent on the MAC destination address included in the received data packet.

The owner field202in the NICdevice structure200allows the data link driver140to configure a network device port136-0, . . . ,136-9as a member of a trunk124-0,124-1. If the network device port136-0, . . . ,136-9is not assigned to a trunk124-0,124-1the owner field202in the NICdevice structure200allocated for the network device port136-0, . . . ,136-9stores ‘0’. If the network device port136-0, . . . ,136-9is a member of a trunk124-0,124-1the owner field202in the NICdevice structure200allocated for the network device port136-0, . . . ,136-9stores a pointer to the NICdevice structure200allocated for the trunk124-0,124-1.

Upon receiving a data packet, a locatestream routine210is called by the NICdevice driver with a pointer to the NICdevice structure212allocated to the network device port through which the data packet was received and the protocol type of the message. The protocol type can be Internet Protocol (“IP”) or Address Resolution Protocol (“ARP”). The owner routine208examines the state of the owner202in the NICdevice structure200to determine if the network device port is a member of trunk. If the owner202stores a pointer to another NICdevice structure200, the locatestream routine is called again with the pointer to the other NICdevice structure200and the owner routine208examines the state of the owner in the other NICdevice structure.

The owner routine208continues to examine the state of the owner bit in successive NICdevice structures until the owner bit in the referenced NICdevice structure is ‘0’ indicating that the NICdevice structure does not have an owner.

Once the NICdevice structure with owner=‘0’ is found, the locatestream routine210calls one of the routines in the data link routines140(FIG. 1) to process the received data packet for the destination MAC address. A routine in the data link routines140searches a list of protocol stream modules registered with the port for the protocol stream module matching the protocol type (ARP or IP). The up stream queue associated with the protocol module is returned. Later, another routine in the data link routines140packages the message in the data packet and sends the message up stream to the selected protocol module.

FIG. 3is a flowchart illustrating a method for configuring a trunk124-0,124-1including physical links122-0, . . . ,122-7coupled between the data mover100and any of the network switches104,130shown inFIG. 1.

The trunk configuration routine144in memory108in the data mover100is called to create a trunk124-0,124-1upon receiving a user command to create a trunk124-0,124-1. The configuration routine144is called to create a trunk124-0,124-1by entering the following command:

wheredevice=user-defined device name of trunk (trk3).class=class of the interface being created. (trunk).option list=list of trunks being aggregated in this trunk. (For example, trk0fortrunk124-0and trk1for trunk124-1)

The server_sysconfig command is parsed using a command line interface utility program. Command link interface utility programs are well-known to those skilled in the art and beyond the scope of the present invention. After parsing the command, the utility program calls the trunk configuration routine144to create the trunk124-0,124-1.

The members of the trunk124-0,124-1can include network device ports136-0, . . . ,136-9on different NICs134-0, . . . ,134-4. A method implemented by the trunk configuration routine144for configuring of a trunk124-0,124-1is now described in conjunction withFIGS. 1 and 3.

At step300, the trunk configuration routine144executing in memory108in the data mover100creates a virtual device for the trunk124-0,124-1by allocating a NICdevice structure200. The NICdevice structure200is created for a “virtual” device because there is no physical network device port136-0, . . . ,136-9associated with the trunk124-0,124-1. A virtual device driver150in the memory108includes a virtual device receive routine for processing data received for a virtual device. The data link layer routines140perform data link layer processing for all data packets received by any of the network device ports136-0, . . . ,136-9in the trunk124-0,124-1, using the NICdevice structure200allocated for the respective trunk124-0,124-1. The trunk configuration routine144initializes NICdevice structure200allocated for the trunk124-0,124-1by setting the owner element202to ‘0’ to indicate that the trunk124-0,124-1is not a member of another trunk124-0,124-1.

At step302, the trunk configuration routine144sets the owner202in each of the respective NICdevice structures200for each network device port136-0, . . . ,136-9to be included in the trunk124-0,124-1to the address of the NICdevice structure200allocated for the respective trunk124-0,124-1.

At step304, the trunk configuration routine144checks if owner202has been set to the address of the owner's NICdevice structure in the NICdevice structure200for each of the network device ports136-0, . . . ,136-9in the trunk124-0,124-1. If so, processing continues with step306. If not, processing continues with step302to set owner202to the address of the owner's NICdevice structure in the next NICdevice structure200. Processing continues with step306.

At step306, each network device port136-0, . . . ,136-9has a software configurable MAC address through an interface routine in the NICdevice driver142associated with the network device port136-0, . . . ,136-9. The trunk configuration routine144reads the MAC address assigned to the first network device port136-0, . . . ,136-9in the trunk124-0,124-1. The MAC address assigned to the first network device port is assigned to the trunk124-0,124-1. Processing continues with step308.

At step308, the configuration utility assigns the MAC address assigned to the trunk124-0,124-1to the other network device ports136-0, . . . ,136-9in the trunk124-0,124-1. Processing is then complete.

Thus, a trunk124-0,124-1is created by allocating a NICdevice structure200for the trunk124-0,124-1modifying owner202in NICdevice structures already allocated for each network device port136-0, . . . ,136-9to be members of the trunk124-0,124-1by storing a pointer to the allocated NICdevice structure200for the trunk124-0,124-1. Data link processing for data packets received by any of the network device ports136-0, . . . ,136-9are processed by the virtual device driver150for the trunk124-0,124-1using the allocated NICdevice structure200for the trunk124-0,124-1. The fact that a network device port136-0, . . . ,136-9is a member of a trunk124-0,124-1is transparent to each network device port136-0, . . . ,136-9in the trunk124-0,124-1.

After the NICdevice structure200has been created for the trunk124-0,124-1an IP address is assigned to the trunk124-0,124-1. The IP address can be assigned by entering the following command:server_ifconfig movername -c -D -n device -p IP address subnet mask broadcast addresswhere:movername=data mover node name.device=user-defined device name of trunked Ethernet port(trk0).-C creates an interface object-D specifies the device that is associated with the interface

FIG. 4is a block diagram illustrating NICdevice structures400-0, . . . ,400-5and402-0allocated in memory108after configuring one of the trunks124-0shown inFIG. 1. NICdevice structures400-0, . . . ,400-5are allocated for respective network device ports136-0, . . . ,136-5and NICdevice structure402-0is allocated for trunk124-0. Trunk124-0includes network device ports136-1,136-2,136-4and136-5. NICdevice structure400-0is allocated to network device port136-0which is not a member of trunk124-0. Thus, owner404is set to ‘0’. NICdevice structure400-1is allocated for network device port136-1. Network device port136-1is a member of trunk124-0. Thus, owner405stores a pointer to NICdevice structure402-0allocated for trunk124-0. NICdevice structures400-2,400-4are allocated for network device ports136-2,136-4which are members of trunk124-0. Thus, owner406,408stores a pointer to NICdevice structure402-0. NICdevice structure400-3is allocated for network device port136-3, which is not a member of trunk124-0. Thus, owner407stores ‘0’.

Trunk124-0is not a member of a failsafe network device. Thus, owner410stores ‘0’. All data link processing for network device ports that are members of trunk124-0is performed using NICdevice structure402-0. Data link layer processing for all network device ports136-0, . . . ,136-9is performed by the data link routines140. The owner routine208selects the NICdevice structure402-0for the trunk124-0for processing all data packets received by any of the network device ports136-1,136-2,136-4,136-5in trunk124-0. Each network port136-0, . . . ,136-5shares the same MAC address and Internet Protocol (“IP”) address with all members of the trunk124-0. A data packet for the MAC address assigned to trunk124-0can be received by any one of the physical links136-0, . . . ,136-9in the trunk124-0. The received data packet is forwarded to the respective NICdevice driver142dependent on the type of NIC134-0, . . . ,134-4through which the data packet was received.

The owner routine208(FIG. 2) is then called to find the NICdevice structure allocated to the owner of the MAC address. The owner routine208determines if the network device port136-0, . . . ,136-5is a member of a trunk124-0by checking the state of owner202in the respective NICdevice structure400-0, . . . ,400-5. If owner202in the respective NICdevice structure200-0, . . . ,200-9stores a pointer to another NICdevice structure200-0, . . . ,200-9, a trunk124-0has been configured and a NICdevice structure allocated. If the owner bit in the pointer to NICdevice structure200-0, . . . ,200-9is ‘0’, data link processing is performed using the pointed to NICdevice structure200-0, . . . ,200-9. If not, the owner routine208is called again. The owner of the trunk124-0has a NICdevice structure200-0, . . . ,200-9with owner202set to ‘0’. Data link processing is performed for all data packets received through any of the physical network ports136-0, . . . ,136-5included in the trunk124-0using the NICdevice structure allocated to the trunk124-0.

The locatestream routine210(FIG. 2) processes data for packets received over any of the physical links122-0, . . . ,122-3in the trunk124-0. Data link processing for data packets is well-known in the art and beyond the scope of the present invention.

Trunk124-0aggregates bandwidth to a particular MAC destination address by increasing the number of physical links122-0, . . . ,122-3through which data can be transferred. Data packets for a particular MAC destination address assigned to the trunk124-0can be received through a plurality of physical links122-0, . . . ,122-4coupled to a plurality of network device ports136-0, . . . ,136-4in a plurality of NICs134-0, . . . ,134-2. Failover support is provided by providing multiple paths to the destination MAC address through a single switch.

FIG. 5is a block diagram illustrating NICdevice structures allocated in memory108in the data mover100for a failsafe network device146including trunks124-0and trunk124-1.

Trunk124-0is created by storing a pointer to NICdevice structure402-0in owner406,408,412and414in respective NICdevice structures400-1,400-2,400-4and400-5. Trunk124-1is created by storing a pointer to NICdevice structure402-1in owner416,418,420and422in respective NICdevice structures400-6,400-7,400-8and400-9.

NICdevice structure402-2is created for failsafe network device146. Failsafe network device146is created by storing a pointer to NICdevice structure402-2in owner424in NICdevice structure402-0and owner426in NICdevice structure402-1. Thus a data packet received on any of physical links122-0, . . . ,122-7is processed using NICdevice structure402-2.

Thus, multiple levels of redundancy can be provided by storing the pointer to another NICdevice structure in owner. The data packet is processed using the NICdevice structure with owner set to ‘0’. Thus, the implementation of a trunk or a failsafe network device does not require any changes to the underlying vendor device drivers or data link protocol routines.

FIG. 6is a flowchart illustrating the method for receiving a data packet from any of the physical links in any of the trunks shown inFIG. 1.FIG. 6is now described here in conjunction withFIGS. 2,4and5.

At step600, the NICdevice driver142checks for a data packet received on any of the physical links. If so, processing continues with step602. If not, processing continues with step600to wait for a received data packet.

At step602, the owner routine208examines the state of owner202in the NICdevice structure200-0, . . . ,200-9allocated to the network port device coupled to the physical link126-0, . . . ,126-1on which the data packet was received. If owner200is ‘0’, the physical link126-0, . . . ,126-9on which the data packet was received is not a member of trunk124-0,124-1and processing continues with step606. If the owner202stores a pointer to a another NICdevice structure200, the physical link126-0, . . . ,126-9on which the data packet was received is a member of trunk124-0,124-1and processing continues with step604.

At step604, the physical link126-0, . . .126-9on which the data packet was received is a member of trunk124-0,124-1or failsafe network device146. Processing of the data link header is not performed using the NICdevice structure allocated to the network port device136-0, . . . ,136-9through which the data packet was received. Instead, the NICdevice structure allocated for trunk124-0,124-1or the failsafe network device146is forwarded to the locatestream routine for processing the received data packet. Processing continues with step602to examine the forwarded NICdevice structure.

At step606, the network device port is not a member of a trunk. The locatestream routine in the network port driver is called with the pointer to the NICdevice structure allocated to the network device port to process received data packet.

At step608, the NICdevice driver142checks if there is more data to process. If so, processing continues with step606. If not, processing continues with step600to wait for the next received data packet.

It will be apparent to those of ordinary skill in the art that methods involved in the present invention may be embodied in a computer program product that includes a computer usable medium. For example, such a computer usable medium may consist of a read only memory device, such as a CD ROM disk or conventional ROM devices, or a random access memory, such as a hard drive device or a computer diskette, having a computer readable program code stored thereon.