Providing stateful services in a scalable manner for machines executing on host computers

Information

  • Patent Grant
  • 11611625
  • Patent Number
    11,611,625
  • Date Filed
    Tuesday, December 15, 2020
    4 years ago
  • Date Issued
    Tuesday, March 21, 2023
    a year ago
Abstract
Some embodiments provide a method for performing services on a host computer that executes several machines in a datacenter. The method configures a first set of one or more service containers for a first machine executing on the host computer, and a second set of one or more service containers for a second machine executing on the host computer. Each configured service container performs a service operation on data messages associated with a particular machine. For each particular machine, the method also configures a module along the particular machine's datapath to identify a subset of service operations to perform on a set of data messages associated with the particular machine, and to direct the set of data messages to a set of service containers configured for the particular machine to perform the identified set of service operations on the set of data messages.
Description
BACKGROUND

Sidecar containers have become popular for micro-services applications, which have one application implemented by many different application components each of which is typically implemented by an individual container. Sidecar containers are often deployed in series with forwarding across the individual service containers. One example is a service mesh that has a proxy container deployed in front of a web server container or application server container to handle services such as authentication, service discovery, encryption, or load balancing. The web server or application server container is configured to send its traffic to the sidecar proxy. In the return path, the sidecar proxy receives the packet and sends the packet to the web server or application server container.


These services and their orders are fixed and have to be deployed when the web server or application server container is deployed and essentially operates in a non-transparent mode, i.e., the web server or application server container is configured to forward packets to the sidecar proxy. Mobility of such a container is also restricted because of its dependency on the attached sidecar proxy. Moreover, for virtual machines (VMs) running legacy applications, deployment of inline services (e.g., load balancing, intrusion detection system, layer 7 firewall, etc.) in these architectures is still being done through middleboxes as it is not possible or recommended to touch any part of the VM image.


BRIEF SUMMARY

Some embodiments provide a method for performing services on a host computer that executes several machines (e.g., virtual machines (VMs), Pods, containers, etc.) in a datacenter. The method configures a first set of one or more service containers for a first machine executing on the host computer, and a second set of one or more service containers for a second machine executing on the host computer. Each configured service container performs a service operation (e.g., a middlebox service operation, such as firewall, load balancing, encryption, etc.) on data messages associated with a particular machine (e.g., on ingress and/or egress data messages to and/or from the particular machine).


For each particular machine, the method also configures a module along the particular machine's datapath (e.g., ingress and/or egress datapath) to identify a subset of service operations to perform on a set of data messages associated with the particular machine, and to direct the set of data messages to a set of service containers configured for the particular machine to perform the identified set of service operations on the set of data messages. In some embodiments, the first and second machines are part of one logical network or one virtual private cloud (VPC) that is deployed over a common physical network in the datacenter.


The first and second sets of containers in some embodiments can be identical sets of containers (i.e., perform the same middlebox service operations), or can be different sets of containers (i.e., one set of containers performs a middlebox service operation not performed by the other set of containers. In some embodiments, the first and second sets of containers respectively operate on first and second Pods. In other embodiments, each container operates on its own dedicated Pod. In still other embodiments, at least two containers in one set of containers execute on two different Pods, but at least one Pod executes two or more containers in the same container set.


Each Pod in some embodiments executes (i.e., operates) on a service virtual machine (SVM) in some embodiments. For instance, in some embodiments, the first set of containers execute on a first Pod that executes on a first SVM on the host computer, while the second set of containers execute on a second Pod that executes on a second SVM on the host computer. In some embodiments, the first and second machines are first and second guest virtual machines (GVMs) or first and second guest containers. In some embodiments where the first and second machines are first and second GVMs, the SVMs on which the Pods execute are lighter weight VMs (e.g., consume less storage resources and have faster bootup times) than the GVMs. Also, these SVMs in some embodiments support a smaller set of standard specified network interface drivers, while the GVMs support a larger set of network interface drivers.


In some embodiments, the first and second sets of containers (e.g., the first and second Pods) are respectively configured when the first and second machines are configured on the host computer. Each container set in some embodiments is deployed on the host computer when the set's associated machine is deployed. Alternatively, in other embodiments, the containers and/or machines are pre-deployed on the host computer, but the containers are configured for their respective machine when the machines are configured for a particular logical network or VPC.


In some embodiments, the first and second sets of containers (e.g., the first and second Pods) are terminated when the first and second machines are respectively terminated on the host computer. Also, in some embodiments, the first and second sets of containers (e.g., the first and second Pods) are defined to be part of a resource group of their respective first and second machines. This allows each service container set (e.g., each Pod) to migrate with its machine to another host computer. The migration tools that migrate the machine and its associated service container set in some embodiments not only migrate each service container in the service container set but also the service rules and connection-tracking records of the service containers.


The configured module along each machine's datapath (e.g., ingress and/or egress datapath) in some embodiments is a classifier that for each data message that passes along the datapath, identifies a subset of service operations that have to be performed on the data message, and passes the data message to a subset of service containers to perform the identified subset of service operations on the data message. In some embodiments, the module successively passes the data message to successive service containers in the subset of containers after receiving the data message from each service container in the identified subset of containers (e.g., passes the data message to a second container in the identified container subset after receiving the data message from a first container).


In other embodiments, the module passes the data message by generating a service identifier that specifies the identified subset of service operations that have to be performed on the data message by a subset of service containers, and providing the service identifier along with the data message so that the data message can be forwarded to successive service containers in the identified subset of service containers. The service operations in the subset of service operations identified by the classifier have a particular order, and the service identifier specifies the particular order. In some embodiments, a forwarding element executing on the host computer (e.g., a forwarding element executing on the Pod that executes the service containers) processes each generated service identifier in order to identify the subset of services that has to be performed on the data message for which the service identifier is generated, and to successively provide the data message to service containers in the subset of service containers to perform the identified subset of service operations.


Each particular machine's classifier in some embodiments can identify different subsets of service operations for different data message flows originating from the particular machine and/or terminating at the particular machine. In some embodiments, each particular machine's classifier is called by a port of a software forwarding element that receives the data messages associated with the particular machine.


The preceding Summary is intended to serve as a brief introduction to some embodiments of the invention. It is not meant to be an introduction or overview of all inventive subject matter disclosed in this document. The Detailed Description that follows and the Drawings that are referred to in the Detailed Description will further describe the embodiments described in the Summary as well as other embodiments. Accordingly, to understand all the embodiments described by this document, a full review of the Summary, Detailed Description, the Drawings and the Claims is needed. Moreover, the claimed subject matters are not to be limited by the illustrative details in the Summary, Detailed Description and the Drawing.





BRIEF DESCRIPTION OF THE DRAWINGS

The novel features of the invention are set forth in the appended claims. However, for purpose of explanation, several embodiments of the invention are set forth in the following figures.



FIG. 1 illustrates an example of a host computer with two different sets of containers that perform service operations for two different guest virtual machines executing on the host computer.



FIG. 2 illustrates an example wherein each Pod executes on a service virtual machine.



FIG. 3 illustrates a service processing engine that sequentially calls the service containers in a service chain that it identifies for a data message.



FIG. 4 illustrates a service processing engine that calls the first service container of the service chain that the service processing engine identifies for a data message.



FIG. 5 illustrates how some embodiments forward data message through the service containers when the service containers are distributed across multiple Pods.



FIG. 6 illustrates a process that a service processing engine performs to identify a subset of service operations to perform on a data message associated with its GVM, and to direct the data message to a subset of service containers configured for its GVM to perform the identified subset of service operations on the data message.



FIG. 7 illustrates a process that a service SFE performs to identify a subset of service operations to perform on a data message received from a service processing engine, and to direct the data message to a group of service containers of its Pod to perform the identified subset of service operations on the data message.



FIG. 8 illustrates a service processing engine obtaining a set of one or more contextual attributes associated with a data message from a context engine executing on the host.



FIG. 9 illustrates in three stages (corresponding to three instances in time) the migration of a GVM from one host computer to another host computer, along with the migration of the set of service containers configured for another GVM.



FIG. 10 illustrates an example of how the service processing engines and service Pods are managed and configured in some embodiments.



FIG. 11 conceptually illustrates a computer system with which some embodiments of the invention are implemented.





DETAILED DESCRIPTION

In the following detailed description of the invention, numerous details, examples, and embodiments of the invention are set forth and described. However, it will be clear and apparent to one skilled in the art that the invention is not limited to the embodiments set forth and that the invention may be practiced without some of the specific details and examples discussed.


Some embodiments provide a method for performing services on a host computer that executes several machines (e.g., virtual machines (VMs), Pods, containers, etc.). In some embodiments, the method uses at least two different sets of containers to perform service operations for at least two different machines executing on the same host computer. FIG. 1 illustrates an example of a host computer 100 with two different sets of containers 105 and 110 that perform service operations for two different guest virtual machines 115 and 120 executing on the host computer.


The first set of service containers 105 are configured to perform a first set of service operations for the first virtual machine 115 executing on the host computer 100, while the second set of service containers 110 are configured to perform a second set of service operations for the second virtual machine 120 executing on the host computer. In this example, the first set of service containers 105 includes firewall, network address translation (NAT), and load balancing service containers 122, 124 and 126 that perform firewall, NAT and load balancing service operations on ingressing and/or egressing data messages to and/or from the VM 115.


The second set of service containers 110 includes firewall, load balancing service, and intrusion detection system (IDS) containers 132, 134 and 136 that perform firewall, load balancing, and IDS service operations on ingressing and/or egressing data messages to and/or from the VM 120. In some embodiments, the set of service containers for each machine (e.g., for VM 115 or 120) includes other types of service containers performing other middlebox service operations (e.g., such as encryption, intrusion prevention, etc.) for one or more data message flows associated with their respective machine. The sets of containers 105 and 110 in some embodiments are identical sets of containers (i.e., include the same containers to perform the same middlebox service operations), while in other embodiments are different sets of containers (i.e., one set of containers has at least one container that is not part of the other container set and that performs one middlebox service operation not performed by the other container set).


For each particular VM 115 and 120, the host computer 100 includes a service processing engine 150 or 155 to identify different subsets of service operations to perform on different sets of data message flows associated with the particular VM, and to direct the different sets of data message flows to different sets of service containers configured for the particular machine to perform the identified sets of service operations on the set of data messages. As shown, the host computer executes a software forwarding element (SFE) 160 (e.g., a software switch) that connects the guest VMs of the host computer 100 to each other and to other VMs, machines, devices and appliances outside of the host computer 100.


The SFE has two ports 165 and 170 that connect with (i.e., communicate with) the virtual network interface card (VNIC) 1075 of the GVMs. In some embodiments, each port 165 or 170 is configured to re-direct all ingress and egress data messages to and from the port's associated VM (i.e., VM 115 for port 165, and VM 120 for port 170) to the service processing engine 150 or 155 of the VM. The SFE also has a port 180 that interfaces with a physical network interface controller (not shown) of the host computer to forward and receive all data messages exiting and entering the host computer 100.


In some embodiments, the SFE 160 implements different logical forwarding elements (e.g., multiple logical switches) for different logical networks with multiple other SFEs executing on other host computers. In some of these embodiments, each LFE spans multiple host computers that execute the SFEs that implement the LFE. In some embodiments, the VMs 115 and 120 are part of one logical network, while in other embodiments these VMs are part of two different logical networks. Other embodiments do not employ logical networks but partition the physical network of the datacenter (e.g., the IP address space of the datacenter) into segregated networks that can be treated as virtual private clouds (VPCs). In some such embodiments, the VMs 115 and 120 are part of one VPC, while in other embodiments these VMs are part of two different VPCs.


In some embodiments, each container set 105 or 110 has all of its containers operate on one Pod (i.e., the containers of set 105 execute on one Pod, while the containers of the set 110 execute on another Pod). In other embodiments, each container operates on its own dedicated Pod. In still other embodiments, at least two containers in one set of containers execute on two different Pods, but at least one Pod executes two or more containers in the same container set.


In some embodiments, a Pod is a group of one or more containers, with shared storage and network resources. A Pod typically has a specification for how to run the containers, and its contents is typically co-located and co-scheduled and run in a shared context. In some embodiments, a Pod models an application-specific “logical host,” and contains one or more application containers.


Each Pod in some embodiments executes (i.e., operates) on a service virtual machine (SVM). For instance, FIG. 2 illustrates a host computer 200 with a first set of containers that execute on a first Pod 205 that executes on a first SVM 215 on the host computer 200, while the second set of containers execute on a second Pod 210 that executes on a second SVM 220 on the host computer 200. In this example, the first set of containers includes a firewall 122, a network address translator 124, and a load balancer 126, and the second set of containers includes a firewall 132, a load balancer 134, and IDS detector 136.


In some embodiments, the SVMs 215 and 220 on which the Pods execute are lighter weight VMs (e.g., consume less storage resources and have faster bootup times) than the GVMs 105 and 110. Also, these SVMs in some embodiments support a smaller set of standard specified network interface drivers, while the GVMs support a larger set of network interface drivers. In some embodiments, each SVM has a vmxnet3 standard VNIC (not shown) through which the service processing engine 150 communicates with the SVM and its Pod.


As further described below, each Pod 205 or 210 in some embodiments includes a forwarding element 225 or 230 that (1) based on the service identifier supplied by the service processing engine 150 or 155, identifies the service containers that need to perform a service operation on a data message provided by the service processing engine 150 or 155, and (2) successively provides the data message to each identified service container.


In some embodiments, the set of containers 105 or 110 (e.g., Pod 205 or 210 with its containers) for each GVM 115 or 120 is respectively configured when the GVM 115 or 120 is configured on the host computer. Each container set in some embodiments is deployed on the host computer when the set's associated machine is deployed. Alternatively, in other embodiments, the containers (e.g., the Pods 205 or 210) and/or GVMs are pre-deployed on the host computer, but the containers are configured for their respective GVMs 115 or 120 when the GVMs 115 or 120 are configured for a particular logical network or VPC.


In some embodiments, the set of containers 105 or 110 (e.g., Pod 205 or 210 with its containers) for each GVM 115 or 120 is terminated when the GVM is respectively terminated on the host computer. Also, in some embodiments, the set of containers 105 or 110 (e.g., Pod 205 or 210 with its containers) for each GVM 115 or 120 is defined to be part of a resource group of its GVM. This allows each service container set (e.g., each Pod) to migrate with its GVM to another host computer. The migration tools that migrate the GVM and its associated service container set in some embodiments migrate the service rules and connection-tracking records of the service containers in the service container set.


As mentioned above, the service processing engine 150 or 155 of each GVM 115 or 120 identifies for a data message a subset of one or more service operations that have to be performed on that flow, and directs a subset of the service containers configured for the GVM to perform the identified subset of service operations on the data message. A subset of two or more service operations or containers are referred to below as a service chain or chain of service operations/containers.



FIG. 3 illustrates that in some embodiments a service processing engine 350 sequentially calls the service containers in a service chain that it identifies for a data message. Under this approach, each service container returns the service-processed data message back to the service processing engine (assuming that the service container does not determine that the data message should be dropped). In this example, the service chain includes first a firewall operation performed by a firewall container 305, next a NAT operation performed by a NAT container 310, and last a load balancing operation performed by a load balancing container 315.


For the same service chain as in FIG. 3, FIG. 4 illustrates that in other embodiments a service processing engine 450 calls the first service container (a firewall container 405) of the service chain that the service processing engine 450 identifies for a data message. The data message is then passed from one service container to the next service container (e.g., from the firewall container to a NAT container 410, or from NAT container 410 to the load balancing container 415) in the chain, until the last service container (in this example the load balancer 415) returns the service-processed data message to the service processing engine 450.


Different embodiments implement the data message forwarding of FIG. 4 differently. For instance, in some embodiments, each service container forwards the data message to the next service container in the service chain when there is a subsequent service container in the service chain, or back to the service processing engine when there is no subsequent service container in the service chain. In other embodiments, a service forwarding element forwards the data message to the successive service containers. For example, in the example illustrated in FIG. 2, a service SFE 225 or 230 forwards a data message received by its Pod 205 or 210 to successive service containers that are identified by the service identifier supplied by the service processing engine 150 or 155, in an order identified by this service identifier.



FIG. 5 illustrates how some embodiments forward data message through the service containers when the service containers are distributed across multiple Pods. As shown in this figure, each Pod's service SFE is responsible for forwarding a data message to its service containers that are on the service chain specified by the service identifier provided by the service processing engine. In this example, the service SFE 525 of Pod 505 first provides the data message to a firewall container 502 and then to a NAT container 506. The Pod 505 then returns the data message back to the service processing engine 550, which then provides the data message to Pod 510. The service SFE 530 of this Pod provides to the load balancing container 512 and then to the encryption container 516, before returning the data message back to the service processing engine 550.


In this example, the service processing engine provides the data message along with the service identifier to each Pod. In some embodiments, the service processing engine provides different service identifiers to the Pods 505 and 510 as the different Pods have to perform different service operations. In other embodiments, the service processing engine provides the same service identifier to each Pod, and each Pod's service SFE can map the provided service identifier to a group of one or more of its service containers that need to process the data message. In some of these embodiments, the service SFE or the service processing engine adjusts (e.g., increments or decrements) a next service value that specifies the next service to perform in a list of service operations identified by the service identifier. The service SFE of each Pod can then use this service value to identify the next service that has to be performed and the service container to perform this next service.



FIG. 6 illustrates a process 600 that a service processing engine 150 or 155 performs in some embodiments to identify a subset of service operations to perform on a data message associated with its GVM, and to direct the data message to a subset of service containers configured for its GVM to perform the identified subset of service operations on the data message. As shown, the process 600 starts when the service processing engine is called (at 605) by its associated SFE port to process a data message received at this port. The data message in some embodiments can be an egress data message originating from the service processing engine's associated GVM, or an ingress data message destined to this GVM.


At 610, the process 600 determines whether it has a record for the received data message's flow in a connection tracking storage that the process maintains. The process 600 would have this record if it previously analyzed another data message in the same flow. For its determination at 610, the process 600 in some embodiments compares the flow identifier (e.g., the five-tuple identifier, i.e., source and destination IP addresses, source and destination ports and protocol) of the received data message with identifiers of records stored in the connection tracking storage to determine whether the connection tracking storage has a record with a record identifier that matches the flow identifier.


If not, the process 600 determines that it has not previously processed the received data message's flow, and transitions to 625 to identify a service chain for the data message and to store in the connection tracker an identifier (i.e., a service chain ID) that specifies the identified service chain. The service processing engine's connection tracker in some embodiments stores CT records that specify service chain identifiers for different data message flows processed by the service processing engine.


To identify the service chain, the process 600 in some embodiments compares the flow identifier (e.g., the five-tuple identifier) of the received data message with identifiers of service-chain specifying records stored in a service rule storage that the process 600 analyzes. Based on this comparison, the process 600 identifies a service-chain specifying record that matches the received data message (i.e., that has a record identifier that matches the data messsage's flow identifier). For different ingress/egress data message flows, the process 600 can identify the same service chain or different service chain based on the service-chain specifying records stored in the service rule storage.


Each service chain in some embodiments has an associated service chain identifier. In some of these embodiments, each service-chain specifying record stores the service chain identifier along with the identities of the service containers and/or Pods that have to perform the services in the identified service chain. In other embodiments, each service-chain specifying record specifies the identities of the service containers and/or Pods that have to perform the services, and the service chain identifier is derived from the specified identities of the service containers and/or Pods. In still other embodiments, each service-chain specifying record just stores the service chain identifier. In these embodiments, the process 600 derives the identities of the service containers and/or Pods that have to perform the services from the service chain identifier stored by the record matching the data message's flow.


Next, at 630, the process 600 passes the data message and the service identifier (that specifies a subset of service operations that have to be performed on the data message by a subset of service containers) to a service Pod that contains the first service container in the identified service chain that has to process the data message. In some embodiments, the service processing engine 150 or 155 passes data messages and their attributes to its associated service Pod(s) by using shared memory allocated by a hypervisor on which both the service processing engine and the service Pod operate.


The service operations in the service chain have to be performed in a particular order, and the service identifier specifies the particular order (e.g., the service identifier in some embodiments is associated with a lookup table record maintained by the service Pod that identifies the order of the service operations, while in other embodiments the service identifier can be deconstructed to obtain the identifiers of the successive service operations or container). As mentioned above and further described below by reference to FIG. 7, a forwarding element of the service Pod processes the service identifier in order to identify the subset of services that has to be performed on the data message for which the service identifier is generated, and to successively provide the data message to service containers in a subset of service containers to perform the identified subset of service operations.


At 635, the process 600 receives the data message from the service Pod. It then determines (at 640) whether there are any additional services in the identified service chain that still need to be performed. As mentioned above (e.g., by reference to FIG. 5), sometimes not all of the service containers for a service chain are implemented on the same service Pods. In such cases, the process 600 has to check (at 640) whether it needs to pass the data message to another service Pod to have its service container(s) process the data message.


If the process 600 determines (at 640) that additional services need to be performed, it passes the data message and the service identifier to the next service Pod that contains the next service container(s) in the identified service chain for processing the data message. In some embodiments, the service processing engine adjusts (e.g., increments or decrements) a next service value that specifies the next service to perform in a list of service operations identified by the service identifier. The service SFE of each Pod then uses this service value to identify the next service that has to be performed and the service container to perform this next service. Alternatively, in the embodiments that have each service Pod contain only one service container, the process 600 does not even need to provide a service identifier with the data message to the next service Pod, as the process 600 just handles the successive calls to the successive service containers that perform the service operations in the service chain.


When the process determines (at 640) that all of the service operations specified by the identified service chain have been performed on the data message, the process returns (at 650) the data message back to the SFE port that called it, and then ends. The process also transitions to 650 from 620 to which the process 600 transitions when it determines (at 610) that its connection tracker has a record that matches the received data message (e.g., matches the data message's flow ID). At 620, the process retrieves the service chain identifier from the matching connection tracker record, and based on this service chain identifier, performs a set of operations that are similar to the operations 625-640. Once all of these operations are completed, the process transitions to 650 to return the data message back to the SFE port that called it, and then ends.



FIG. 7 illustrates a process 700 that a service SFE 225 or 230 performs in some embodiments to identify a subset of service operations to perform on a data message received from a service processing engine, and to direct the data message to a group of service containers of its Pod to perform the identified subset of service operations on the data message. As shown, the process 700 starts when the service SFE is called (at 705) to process a data message by its associated service processing engine 150 or 155. Along with this data message, the service SFE receives a service chain identifier in some embodiments.


At 710, the process 700 matches the service chain identifier with a record in a service rule storage that has several records that specify different sequences of service operations for different service chain identifiers. The matching record in some embodiments is the record that has a service chain identifier that matches the service chain identifier received with the data message. The service operations in the service chain have to be performed in a particular order. In some embodiments, the matching record identifies the order of the service operations.


The service SFE then performs operations 715-730 to successively provide the data message to service containers in a group of one or more service containers on its Pod to perform the identified group of service operations. Specifically, at 715, the process 700 passes the data message to the first service container in this group to perform its service operation on the data message. Next, at 720, the process 700 receives the data message from the service container. It then determines (at 725) whether there are any additional services in the identified group of service operations that still need to be performed.


If the process 700 determines (at 725) that additional services need to be performed, it passes (at 730) the data message to the next service container in the identified group for processing. When the process determines (at 725) that all of the service operations specified by the identified group of service containers have been performed on the data message, the process returns (at 735) the data message back to the service process engine that called it, and then ends.


In some embodiments, the service containers perform their service operations not only based on the flow identifiers of the data messages that they process, but also based on contextual attributes (e.g., attributes other than layers 2, 3 and 4 header values) associated with these data messages. For instance, for a data message, a service container in some embodiments selects a service rule that specifies the service operation to perform, by using the data message's flow attributes and one or more contextual attributes associated with the data message.


Specifically, to select the service rule, the service container in some embodiments compares the data message's flow attributes (e.g., one or more of the data message's L2-L4 header values) and one or more of the data message's contextual attributes with match attributes of the service rules, in order to identify the highest priority service rule with match attributes that match the message's flow and contextual attributes. Examples of contextual attributes in some embodiments include source application name, application version, traffic type, resource consumption parameter, threat level, layer 7 parameters, process identifiers, user identifiers, group identifiers, process name, process hash, loaded module identifiers, etc.



FIG. 8 illustrates that in some embodiments the service processing engine 850 obtains a set of one or more contextual attributes associated with a data message from a context engine 805 executing on the host. It also shows the service processing engine passing the obtained contextual attribute set to a service Pod 810 along with the data message and a service identifier specifying the service operations to perform on the data message. As shown in FIG. 8, the context engine 805 in some embodiments obtains some or all of the contextual attributes from a guest introspection agent 820 executing on the service processing engine's GVM 825. U.S. Pat. No. 10,802,857 further describes the context engine 805 and the manner that this engine obtains contextual attributes for data message flows from GI agents that execute on the GVMs and from other service engines (such as a deep packet inspector) executing on the host computer. U.S. Pat. No. 10,802,857 is incorporated herein by reference.



FIG. 9 illustrates in three stages (corresponding to three instances in time) the migration of a GVM 925 from one host computer 905 to another host computer 910, along with the migration of the set of service containers configured for the GVM 925. In this example, the set of configured service containers all reside on one Pod 920 that executes on one SVM 922. As shown, the SVM 922 (along with its Pod and the Pod's associated service containers) migrate from host computer 905 to host computer 910 along with the GVM 925.


In some embodiments, the SVM 922 along with its Pod and the Pod's associated service containers) are defined to be part of the resource group of the GVM 925, so that VM migration tools on host computers 905 and 910 (e.g., the VM live migration of VMware vSphere) can migrate the SVM 922 to the new host computer 910 when it migrates the GVM 925 to the host computer 910. The migration tools in some embodiments migrate a VM (e.g., a GVM or SVM) to a new host computer by migrating from the old VM to the new VM (1) the configuration file that includes the definition of the VM, (2) the runtime memory (e.g., RAM data) used by the VM, (3) the device memory (e.g., storage files and data structures) used by the VM. These tools also activate (e.g., instantiate) the VM on the new host computer.


As shown in FIG. 9, each migrating service container moves to the new host computer 910 along with it service rules 932 and its connection tracking records 934. Also, the service-chain identifying rules 936 and the connection tracking records 938 of the migrating GVM's service processing engine 950 are also migrated to the new host computer 910 from the old host computer 905, so that a service processing engine 955 on the new host computer 910 can use these rules and records for data messages associated with the migrating GVM on this host computer. As shown, the service processing engine 955 is terminated once the GVM 925 migrates to host 910.


By deploying on fast, lightweight SVMs and easily migrating with their GVMs, each GVMs associated service Pod serves as an easily constructed and configured sidecar for its GVM. Deploying such a sidecar service Pod for each GVM also eliminates service bottleneck issues, which become problematic as the number of GVMs increases on host computers. This sidecar architecture is also transparent to the guest machines as it is deployed inline in their datapaths without any changes to the configuration of the guest machines. The same service Pod architecture are employed with the same benefits in the embodiments in which the guest machines are guest containers instead of guest virtual machines.



FIG. 10 illustrates an example of how the service processing engines and service Pods are managed and configured in some embodiments. This figure illustrates multiple hosts 1000 in a datacenter. As shown, each host includes several service Pods 1030, a context engine 1050, several service processing engines 1022, several GVMs 1005, and an SFE 1010.


It also illustrates a set of managers/controllers 1060 for managing the service processing engines 1022 and the service Pods 1030, GVMs 1005, and SFEs 1010. The hosts and managers/controllers communicatively connect to each other through a network 1070, which can be a local area network, a wide area network, a network of networks (such as the Internet), etc. The managers/controllers provides a user interface for the administrators to define service rules for the service processing engines 1022 and the service containers of the service Pods 1030 in terms of flow identifiers and/or contextual attributes, and communicates with the hosts through the network 1070 to provide these service rules.


In some embodiments, the context engines 1050 collect contextual attributes that are passed to the managers/controllers 1060 through a network 1070 so that these contextual attributes can be used to define service rules. The managers/controllers in some embodiments interact with the discovery engines executing on the host computers 1000 in the datacenter to obtain and refresh inventory of all processes and services that are running on the GVMs on the hosts. The management plane in some embodiments then provides a rule creation interface for allowing administrators to create service rules for the service processing engines 1022, and the service containers of the service Pods 1030. Once the service rules are defined in the management plane, the management plane supplies some or all of these rules to the hosts 1000, through a set of configuring controllers.


Many of the above-described features and applications are implemented as software processes that are specified as a set of instructions recorded on a computer readable storage medium (also referred to as computer readable medium). When these instructions are executed by one or more processing unit(s) (e.g., one or more processors, cores of processors, or other processing units), they cause the processing unit(s) to perform the actions indicated in the instructions. Examples of computer readable media include, but are not limited to, CD-ROMs, flash drives, RAM chips, hard drives, EPROMs, etc. The computer readable media does not include carrier waves and electronic signals passing wirelessly or over wired connections.


In this specification, the term “software” is meant to include firmware residing in read-only memory or applications stored in magnetic storage, which can be read into memory for processing by a processor. Also, in some embodiments, multiple software inventions can be implemented as sub-parts of a larger program while remaining distinct software inventions. In some embodiments, multiple software inventions can also be implemented as separate programs. Finally, any combination of separate programs that together implement a software invention described here is within the scope of the invention. In some embodiments, the software programs, when installed to operate on one or more electronic systems, define one or more specific machine implementations that execute and perform the operations of the software programs.



FIG. 11 conceptually illustrates a computer system 1100 with which some embodiments of the invention are implemented. The computer system 1100 can be used to implement any of the above-described hosts, controllers, and managers. As such, it can be used to execute any of the above described processes. This computer system includes various types of non-transitory machine readable media and interfaces for various other types of machine readable media. Computer system 1100 includes a bus 1105, processing unit(s) 1110, a system memory 1125, a read-only memory 1130, a permanent storage device 1135, input devices 1140, and output devices 1145.


The bus 1105 collectively represents all system, peripheral, and chipset buses that communicatively connect the numerous internal devices of the computer system 1100. For instance, the bus 1105 communicatively connects the processing unit(s) 1110 with the read-only memory 1130, the system memory 1125, and the permanent storage device 1135.


From these various memory units, the processing unit(s) 1110 retrieve instructions to execute and data to process in order to execute the processes of the invention. The processing unit(s) may be a single processor or a multi-core processor in different embodiments. The read-only-memory (ROM) 1130 stores static data and instructions that are needed by the processing unit(s) 1110 and other modules of the computer system. The permanent storage device 1135, on the other hand, is a read-and-write memory device. This device is a non-volatile memory unit that stores instructions and data even when the computer system 1100 is off. Some embodiments of the invention use a mass-storage device (such as a magnetic or optical disk and its corresponding disk drive) as the permanent storage device 1135.


Other embodiments use a removable storage device (such as a flash drive, etc.) as the permanent storage device. Like the permanent storage device 1135, the system memory 1125 is a read-and-write memory device. However, unlike storage device 1135, the system memory is a volatile read-and-write memory, such a random access memory. The system memory stores some of the instructions and data that the processor needs at runtime. In some embodiments, the invention's processes are stored in the system memory 1125, the permanent storage device 1135, and/or the read-only memory 1130. From these various memory units, the processing unit(s) 1110 retrieve instructions to execute and data to process in order to execute the processes of some embodiments.


The bus 1105 also connects to the input and output devices 1140 and 1145. The input devices enable the user to communicate information and select commands to the computer system. The input devices 1140 include alphanumeric keyboards and pointing devices (also called “cursor control devices”). The output devices 1145 display images generated by the computer system. The output devices include printers and display devices, such as cathode ray tubes (CRT) or liquid crystal displays (LCD). Some embodiments include devices such as a touchscreen that function as both input and output devices.


Finally, as shown in FIG. 11, bus 1105 also couples computer system 1100 to a network 1165 through a network adapter (not shown). In this manner, the computer can be a part of a network of computers (such as a local area network (“LAN”), a wide area network (“WAN”), or an Intranet, or a network of networks, such as the Internet. Any or all components of computer system 1100 may be used in conjunction with the invention.


Some embodiments include electronic components, such as microprocessors, storage and memory that store computer program instructions in a machine-readable or computer-readable medium (alternatively referred to as computer-readable storage media, machine-readable media, or machine-readable storage media). Some examples of such computer-readable media include RAM, ROM, read-only compact discs (CD-ROM), recordable compact discs (CD-R), rewritable compact discs (CD-RW), read-only digital versatile discs (e.g., DVD-ROM, dual-layer DVD-ROM), a variety of recordable/rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.), flash memory (e.g., SD cards, mini-SD cards, micro-SD cards, etc.), magnetic and/or solid state hard drives, read-only and recordable Blu-Ray® discs, ultra-density optical discs, and any other optical or magnetic media. The computer-readable media may store a computer program that is executable by at least one processing unit and includes sets of instructions for performing various operations. Examples of computer programs or computer code include machine code, such as is produced by a compiler, and files including higher-level code that are executed by a computer, an electronic component, or a microprocessor using an interpreter.


While the above discussion primarily refers to microprocessor or multi-core processors that execute software, some embodiments are performed by one or more integrated circuits, such as application specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs). In some embodiments, such integrated circuits execute instructions that are stored on the circuit itself.


As used in this specification, the terms “computer”, “server”, “processor”, and “memory” all refer to electronic or other technological devices. These terms exclude people or groups of people. For the purposes of the specification, the terms display or displaying means displaying on an electronic device. As used in this specification, the terms “computer readable medium,” “computer readable media,” and “machine readable medium” are entirely restricted to tangible, physical objects that store information in a form that is readable by a computer. These terms exclude any wireless signals, wired download signals, and any other ephemeral or transitory signals.


While the invention has been described with reference to numerous specific details, one of ordinary skill in the art will recognize that the invention can be embodied in other specific forms without departing from the spirit of the invention. For instance, several figures conceptually illustrate processes. The specific operations of these processes may not be performed in the exact order shown and described. The specific operations may not be performed in one continuous series of operations, and different specific operations may be performed in different embodiments. Furthermore, the process could be implemented using several sub-processes, or as part of a larger macro process. Thus, one of ordinary skill in the art would understand that the invention is not to be limited by the foregoing illustrative details, but rather is to be defined by the appended claims.

Claims
  • 1. A method for providing services on a host computer that executes a plurality of machines, the method comprising: configuring, for a first machine executing on the host computer, a first plurality of service containers to perform a first plurality of service operations for the first machine;configuring, for a second machine executing on the host computer, a second plurality of service containers to perform a second plurality of service operations for the second machine, said first and second pluralities of service containers executing on the host computer;configuring, for each particular machine of the first and second machines, a module along the particular machine's data path to identify a set of service operations to perform on a set of data messages associated with the particular machine, and to direct the set of data messages to a set of service containers configured for the particular machine to perform the identified set of service operations on the set of data messages.
  • 2. The method of claim 1, wherein the first and second pluralities of service containers are respectively configured when the first and second machines are configured on the host computers.
  • 3. The method of claim 1, wherein at least two service containers in the first plurality of service containers are configured on two separate Pods.
  • 4. The method of claim 1, wherein the first and second machines belong to one logical network implemented over a physical network on which a plurality of logical networks are defined.
  • 5. The method of claim 1, wherein each particular machine's configured module is a classifier that for a data message that it processes, identifies a set of service operations that have to be performed on the data message, and passes the data message to a set of service containers to perform the identified set of service operations on the data message.
  • 6. The method of claim 5, wherein the module successively passes the data message to successive service containers in the identified set of service containers after receiving the data message from each service container in the identified set of service containers.
  • 7. The method of claim 5, wherein the module passes the data message by generating a service identifier that specifies the identified set of service operations that have to be performed on the data message by a set of service containers, and providing the service identifier along with the data message so that the data message can be forwarded to successive service containers in the identified set of service containers.
  • 8. The method of claim 7, wherein service operations in the set of service operations identified by the classifier have a particular order, and the service identifier specifies the particular order.
  • 9. The method of claim 7, wherein a forwarding element executing on the host computer processes each generated service identifier in order to identify the set of services that has to be performed on the data message for which the service identifier is generated, and to successively provide the data message to service containers in the set of service containers to perform the identified set of service operations.
  • 10. The method of claim 1, wherein at least one service container in the first plurality of service containers performs a same middlebox service operation as one service container in the second plurality of service containers, and at least another service container in the first plurality of service containers performs another middlebox service operation that is not performed by any other service container in the second plurality of service containers.
  • 11. A method for providing services on a host computer that executes a plurality of machines, the method comprising: configuring, for a first machine executing on the host computer, a first plurality of service containers to perform a first plurality of service operations for the first machine, said configuring the first plurality of service containers comprising configuring on the host computer a first Pod on which the first plurality of service containers for the first machine operate;configuring, for a second machine executing on the host computer, a second plurality of service containers to perform a second plurality of service operations for the second machine, said first and second pluralities of service containers executing on the host computer, said configuring the second plurality of service containers comprising configuring on the host computer a second Pod on which the second plurality of service containers for the second machine operate;configuring, for each particular machine of the first and second machines, a module along the particular machine's data path to identify a set of service operations to perform on a set of data messages associated with the particular machine, and to direct the set of data messages to a set of service containers configured for the particular machine to perform the identified set of service operations on the set of data messages.
  • 12. A non-transitory machine readable medium storing a program for execution by at least one processing unit of the host computer, the program providing services on the host computer that executes a plurality of machines, the program comprising sets of instructions for: configuring, for a first machine executing on the host computer, a first plurality of service containers to perform a first plurality of service operations for the first machine;configuring, for a second machine executing on the host computer, a second plurality of service containers to perform a second plurality of service operations for the second machine, said first and second pluralities of service containers executing on the host computer;configuring, for each particular machine of the first and second machines, a module along the particular machine's data path to identify a set of service operations to perform on a set of data messages associated with the particular machine, and to direct the set of data messages to a set of service containers configured for the particular machine to perform the identified set of service operations on the set of data messages.
  • 13. The non-transitory machine readable medium of claim 12, wherein the first and second pluralities of service containers are respectively configured when the first and second machines are configured on the host computers.
  • 14. The non-transitory machine readable medium of claim 12, wherein the program further comprises sets of instructions for: configuring a first Pod on which the first plurality of service containers for the first machine are configured;configuring a second Pod on which the second plurality of service containers for the second machine are configured.
  • 15. The non-transitory machine readable medium of claim 12, wherein at least two service containers in the first plurality of service containers are configured on two separate Pods.
  • 16. The non-transitory machine readable medium of claim 12, wherein the first and second machines belong to one logical network implemented over a physical network on which a plurality of logical networks are defined.
  • 17. The non-transitory machine readable medium of claim 12, wherein each particular machine's configured module is a classifier that for a data message that it processes, identifies a set of service operations that have to be performed on the data message, and passes the data message to a set of service containers to perform the identified set of service operations on the data message.
  • 18. The non-transitory machine readable medium of claim 17, wherein the module successively passes the data message to successive service containers in the identified set of service containers after receiving the data message from each service container in the identified set of service containers.
  • 19. The non-transitory machine readable medium of claim 17, wherein the module passes the data message by generating a service identifier that specifies the identified set of service operations that have to be performed on the data message by a set of service containers, and providing the service identifier along with the data message so that the data message can be forwarded to successive service containers in the identified set of service containers.
  • 20. The non-transitory machine readable medium of claim 19, wherein service operations in the set of service operations identified by the classifier have a particular order, and the service identifier specifies the particular order.
  • 21. The non-transitory machine readable medium of claim 19, wherein a forwarding element executing on the host computer processes each generated service identifier in order to identify the set of services that has to be performed on the data message for which the service identifier is generated, and to successively provide the data message to service containers in the set of service containers to perform the identified set of service operations.
US Referenced Citations (801)
Number Name Date Kind
6006264 Colby et al. Dec 1999 A
6104700 Haddock et al. Aug 2000 A
6154448 Petersen et al. Nov 2000 A
6772211 Lu et al. Aug 2004 B2
6779030 Dugan et al. Aug 2004 B1
6826694 Dutta et al. Nov 2004 B1
6880089 Bommareddy et al. Apr 2005 B1
6985956 Luke et al. Jan 2006 B2
7013389 Srivastava et al. Mar 2006 B1
7209977 Acharya et al. Apr 2007 B2
7239639 Cox et al. Jul 2007 B2
7379465 Aysan et al. May 2008 B2
7406540 Acharya et al. Jul 2008 B2
7447775 Zhu et al. Nov 2008 B1
7480737 Chauffour et al. Jan 2009 B2
7487250 Siegel Feb 2009 B2
7499463 Droux et al. Mar 2009 B1
7649890 Mizutani et al. Jan 2010 B2
7698458 Liu et al. Apr 2010 B1
7818452 Matthews et al. Oct 2010 B2
7898959 Arad Mar 2011 B1
7948986 Ghosh et al. May 2011 B1
8078903 Parthasarathy et al. Dec 2011 B1
8094575 Vadlakonda et al. Jan 2012 B1
8175863 Ostermeyer et al. May 2012 B1
8190767 Maufer et al. May 2012 B1
8201219 Jones Jun 2012 B2
8223634 Tanaka et al. Jul 2012 B2
8224885 Doucette et al. Jul 2012 B1
8230493 Davidson et al. Jul 2012 B2
8266261 Akagi Sep 2012 B2
8339959 Moisand et al. Dec 2012 B1
8451735 Li May 2013 B2
8484348 Subramanian et al. Jul 2013 B2
8488577 Macpherson Jul 2013 B1
8521879 Pena et al. Aug 2013 B1
8615009 Ramamoorthi et al. Dec 2013 B1
8707383 Bade et al. Apr 2014 B2
8743885 Khan et al. Jun 2014 B2
8804720 Rainovic et al. Aug 2014 B1
8804746 Wu et al. Aug 2014 B2
8811412 Shippy Aug 2014 B2
8830834 Sharma et al. Sep 2014 B2
8832683 Heim Sep 2014 B2
8849746 Candea et al. Sep 2014 B2
8856518 Sridharan et al. Oct 2014 B2
8862883 Cherukur et al. Oct 2014 B2
8868711 Skjolsvold et al. Oct 2014 B2
8873399 Bothos et al. Oct 2014 B2
8874789 Zhu Oct 2014 B1
8892706 Dalal Nov 2014 B1
8913611 Koponen et al. Dec 2014 B2
8914406 Haugsnes et al. Dec 2014 B1
8966024 Koponen et al. Feb 2015 B2
8966029 Zhang et al. Feb 2015 B2
8971345 McCanne et al. Mar 2015 B1
8989192 Foo et al. Mar 2015 B2
8996610 Sureshchandra et al. Mar 2015 B1
9009289 Jacob Apr 2015 B1
9015823 Koponen et al. Apr 2015 B2
9094464 Scharber et al. Jul 2015 B1
9104497 Mortazavi Aug 2015 B2
9148367 Kandaswamy et al. Sep 2015 B2
9172603 Padmanabhan et al. Oct 2015 B2
9178709 Higashida et al. Nov 2015 B2
9191293 Iovene et al. Nov 2015 B2
9195491 Zhang et al. Nov 2015 B2
9203748 Jiang et al. Dec 2015 B2
9225638 Jain et al. Dec 2015 B2
9225659 McCanne et al. Dec 2015 B2
9232342 Seed et al. Jan 2016 B2
9256467 Singh Feb 2016 B1
9258742 Pianigiani et al. Feb 2016 B1
9264313 Manuguri et al. Feb 2016 B1
9277412 Freda et al. Mar 2016 B2
9344337 Kumar et al. May 2016 B2
9363183 Kumar et al. Jun 2016 B2
9397946 Yadav Jul 2016 B1
9407540 Kumar et al. Aug 2016 B2
9407599 Koponen et al. Aug 2016 B2
9419897 Cherian et al. Aug 2016 B2
9442752 Roth Sep 2016 B1
9467382 Kumar et al. Oct 2016 B2
9479358 Klosowski et al. Oct 2016 B2
9503530 Niedzielski Nov 2016 B1
9531590 Jain et al. Dec 2016 B2
9577845 Thakkar et al. Feb 2017 B2
9602380 Strassner Mar 2017 B2
9608896 Kumar et al. Mar 2017 B2
9660905 Dunbar et al. May 2017 B2
9686192 Sengupta et al. Jun 2017 B2
9686200 Pettit et al. Jun 2017 B2
9705702 Foo et al. Jul 2017 B2
9705775 Zhang et al. Jul 2017 B2
9749229 Previdi et al. Aug 2017 B2
9755898 Jain et al. Sep 2017 B2
9755971 Wang et al. Sep 2017 B2
9774537 Jain et al. Sep 2017 B2
9787559 Schroeder Oct 2017 B1
9787605 Zhang et al. Oct 2017 B2
9804797 Ng et al. Oct 2017 B1
9825810 Jain et al. Nov 2017 B2
9860079 Cohn et al. Jan 2018 B2
9900410 Dalal Feb 2018 B2
9935827 Jain et al. Apr 2018 B2
9979641 Jain et al. May 2018 B2
9985896 Koponen et al. May 2018 B2
9996380 Singh Jun 2018 B2
10013276 Fahs et al. Jul 2018 B2
10042722 Chigurupati et al. Aug 2018 B1
10075470 Vaidya et al. Sep 2018 B2
10079779 Zhang et al. Sep 2018 B2
10084703 Kumar et al. Sep 2018 B2
10089127 Padmanabhan et al. Oct 2018 B2
10091276 Bloomquist et al. Oct 2018 B2
10104169 Moniz et al. Oct 2018 B1
10129077 Jain et al. Nov 2018 B2
10129180 Zhang et al. Nov 2018 B2
10135636 Jiang et al. Nov 2018 B2
10135737 Jain et al. Nov 2018 B2
10158573 Lee et al. Dec 2018 B1
10187306 Nainar et al. Jan 2019 B2
10200493 Bendapudi et al. Feb 2019 B2
10212071 Kancherla et al. Feb 2019 B2
10225137 Jain et al. Mar 2019 B2
10237379 Kumar et al. Mar 2019 B2
10250501 Ni Apr 2019 B2
10257095 Jain et al. Apr 2019 B2
10284390 Kumar et al. May 2019 B2
10305822 Tao et al. May 2019 B2
10320679 Jain et al. Jun 2019 B2
10333822 Jeuk et al. Jun 2019 B1
10341233 Jain et al. Jul 2019 B2
10341427 Jalan et al. Jul 2019 B2
10375155 Cai et al. Aug 2019 B1
10390285 Zhou Aug 2019 B2
10397275 Jain et al. Aug 2019 B2
10445509 Thota et al. Oct 2019 B2
10484334 Lee et al. Nov 2019 B1
10514941 Zhang et al. Dec 2019 B2
10516568 Jain et al. Dec 2019 B2
10547508 Kanakarajan Jan 2020 B1
10547692 Salgueiro et al. Jan 2020 B2
10554484 Chanda et al. Feb 2020 B2
10594743 Hong et al. Mar 2020 B2
10609091 Hong et al. Mar 2020 B2
10609122 Argenti Mar 2020 B1
10623309 Gampel Apr 2020 B1
10637750 Bollineni et al. Apr 2020 B1
10645060 Ao et al. May 2020 B2
10645201 Mishra et al. May 2020 B2
10659252 Boutros et al. May 2020 B2
10693782 Jain et al. Jun 2020 B2
10700891 Hao et al. Jun 2020 B2
10708229 Sevinc et al. Jul 2020 B2
10728174 Boutros et al. Jul 2020 B2
10735311 Li Aug 2020 B2
10742544 Roeland et al. Aug 2020 B2
10757077 Rajahalme et al. Aug 2020 B2
10797910 Boutros et al. Oct 2020 B2
10797966 Boutros et al. Oct 2020 B2
10802858 Gunda Oct 2020 B2
10805181 Boutros et al. Oct 2020 B2
10805192 Boutros et al. Oct 2020 B2
10812378 Nainar et al. Oct 2020 B2
10826835 Ruckstuhl et al. Nov 2020 B2
10834004 Yigit et al. Nov 2020 B2
10853111 Gupta et al. Dec 2020 B1
10929171 Gokhale et al. Feb 2021 B2
10931793 Kumar et al. Feb 2021 B2
10938668 Zulak Mar 2021 B1
10938716 Chin et al. Mar 2021 B1
10944673 Naveen et al. Mar 2021 B2
10949244 Naveen et al. Mar 2021 B2
10997177 Howes et al. May 2021 B1
11003482 Rolando et al. May 2021 B2
11012420 Sevinc et al. May 2021 B2
11036538 Lecuyer et al. Jun 2021 B2
11038782 Boutros et al. Jun 2021 B2
11042397 Mishra et al. Jun 2021 B2
11055273 Meduri Jul 2021 B1
11074097 Naveen et al. Jul 2021 B2
11075839 Zhuang et al. Jul 2021 B2
11075842 Jain et al. Jul 2021 B2
11086654 Rolando et al. Aug 2021 B2
11119804 Gokhale et al. Sep 2021 B2
11140218 Tidemann et al. Oct 2021 B2
11153190 Mahajan et al. Oct 2021 B1
11153406 Sawant et al. Oct 2021 B2
11157304 Watt, Jr. Oct 2021 B2
11184397 Annadata Nov 2021 B2
11194610 Mundaragi et al. Dec 2021 B2
11212356 Rolando et al. Dec 2021 B2
11223494 Mishra et al. Jan 2022 B2
11249784 Chalvadi et al. Feb 2022 B2
11265187 Boutros et al. Mar 2022 B2
11277331 Rolando et al. Mar 2022 B2
11283717 Tidemann et al. Mar 2022 B2
11288088 Rolando et al. Mar 2022 B2
11294703 Rolando et al. Apr 2022 B2
11296930 Jain et al. Apr 2022 B2
11301281 Rolando et al. Apr 2022 B2
11316900 Schottland et al. Apr 2022 B1
11321113 Feng et al. May 2022 B2
11398983 Wijnands et al. Jul 2022 B2
20020010783 Primak et al. Jan 2002 A1
20020078370 Tahan Jun 2002 A1
20020097724 Halme et al. Jul 2002 A1
20020194350 Lu et al. Dec 2002 A1
20030065711 Acharya et al. Apr 2003 A1
20030093481 Mitchell et al. May 2003 A1
20030097429 Wu et al. May 2003 A1
20030105812 Flowers et al. Jun 2003 A1
20030188026 Denton et al. Oct 2003 A1
20030236813 Abjanic Dec 2003 A1
20040066769 Ahmavaara et al. Apr 2004 A1
20040210670 Anerousis et al. Oct 2004 A1
20040215703 Song et al. Oct 2004 A1
20050021713 Dugan et al. Jan 2005 A1
20050089327 Ovadia et al. Apr 2005 A1
20050091396 Nilakantan et al. Apr 2005 A1
20050114429 Caccavale May 2005 A1
20050114648 Akundi et al. May 2005 A1
20050132030 Hopen et al. Jun 2005 A1
20050198200 Subramanian et al. Sep 2005 A1
20050249199 Albert et al. Nov 2005 A1
20060069776 Shim et al. Mar 2006 A1
20060112297 Davidson May 2006 A1
20060130133 Andreev et al. Jun 2006 A1
20060155862 Kathi et al. Jul 2006 A1
20060195896 Fulp et al. Aug 2006 A1
20060233155 Srivastava Oct 2006 A1
20070061492 Riel Mar 2007 A1
20070121615 Weill et al. May 2007 A1
20070153782 Fletcher et al. Jul 2007 A1
20070214282 Sen Sep 2007 A1
20070248091 Khalid et al. Oct 2007 A1
20070260750 Feied et al. Nov 2007 A1
20070288615 Keohane et al. Dec 2007 A1
20070291773 Khan et al. Dec 2007 A1
20080005293 Bhargava et al. Jan 2008 A1
20080031263 Ervin et al. Feb 2008 A1
20080046400 Shi et al. Feb 2008 A1
20080049614 Briscoe et al. Feb 2008 A1
20080049619 Twiss Feb 2008 A1
20080049786 Ram et al. Feb 2008 A1
20080072305 Casado et al. Mar 2008 A1
20080084819 Parizhsky et al. Apr 2008 A1
20080095153 Fukunaga et al. Apr 2008 A1
20080104608 Hyser et al. May 2008 A1
20080195755 Lu et al. Aug 2008 A1
20080225714 Denis Sep 2008 A1
20080239991 Applegate et al. Oct 2008 A1
20080247396 Hazard Oct 2008 A1
20080276085 Davidson et al. Nov 2008 A1
20080279196 Friskney et al. Nov 2008 A1
20090003349 Havemann et al. Jan 2009 A1
20090003364 Fendick et al. Jan 2009 A1
20090003375 Havemann et al. Jan 2009 A1
20090019135 Eswaran et al. Jan 2009 A1
20090037713 Khalid et al. Feb 2009 A1
20090063706 Goldman et al. Mar 2009 A1
20090129271 Ramankutty et al. May 2009 A1
20090172666 Yahalom et al. Jul 2009 A1
20090199268 Ahmavaara et al. Aug 2009 A1
20090235325 Dimitrakos et al. Sep 2009 A1
20090238084 Nadeau et al. Sep 2009 A1
20090249472 Litvin et al. Oct 2009 A1
20090265467 Peles et al. Oct 2009 A1
20090271586 Shaath Oct 2009 A1
20090299791 Blake et al. Dec 2009 A1
20090300210 Ferris Dec 2009 A1
20090303880 Maltz et al. Dec 2009 A1
20090307334 Maltz et al. Dec 2009 A1
20090327464 Archer et al. Dec 2009 A1
20100031360 Seshadri et al. Feb 2010 A1
20100036903 Ahmad et al. Feb 2010 A1
20100100616 Bryson et al. Apr 2010 A1
20100131638 Kondamuru May 2010 A1
20100165985 Sharma et al. Jul 2010 A1
20100223364 Wei Sep 2010 A1
20100223621 Joshi et al. Sep 2010 A1
20100235915 Memon et al. Sep 2010 A1
20100254385 Sharma et al. Oct 2010 A1
20100257278 Gunturu Oct 2010 A1
20100265824 Chao et al. Oct 2010 A1
20100281482 Pike et al. Nov 2010 A1
20100332595 Fullagar et al. Dec 2010 A1
20110010578 Dominguez et al. Jan 2011 A1
20110016348 Pace et al. Jan 2011 A1
20110022695 Dalal et al. Jan 2011 A1
20110022812 Van Der Linden et al. Jan 2011 A1
20110035494 Pandey et al. Feb 2011 A1
20110040893 Karaoguz et al. Feb 2011 A1
20110055845 Nandagopal et al. Mar 2011 A1
20110058563 Saraph et al. Mar 2011 A1
20110090912 Shippy Apr 2011 A1
20110164504 Bothos et al. Jul 2011 A1
20110194563 Shen et al. Aug 2011 A1
20110211463 Matityahu et al. Sep 2011 A1
20110225293 Rathod Sep 2011 A1
20110235508 Goel et al. Sep 2011 A1
20110261811 Battestilli et al. Oct 2011 A1
20110268118 Schlansker et al. Nov 2011 A1
20110271007 Wang et al. Nov 2011 A1
20110276695 Maldaner Nov 2011 A1
20110283013 Grosser et al. Nov 2011 A1
20110295991 Aida Dec 2011 A1
20110317708 Clark Dec 2011 A1
20120005265 Ushioda et al. Jan 2012 A1
20120011281 Hamada et al. Jan 2012 A1
20120014386 Xiong et al. Jan 2012 A1
20120023231 Ueno Jan 2012 A1
20120054266 Kazerani et al. Mar 2012 A1
20120089664 Igelka Apr 2012 A1
20120137004 Smith May 2012 A1
20120140719 Hui et al. Jun 2012 A1
20120144014 Natham et al. Jun 2012 A1
20120147894 Mulligan et al. Jun 2012 A1
20120155266 Patel et al. Jun 2012 A1
20120176932 Wu et al. Jul 2012 A1
20120185588 Error Jul 2012 A1
20120195196 Ghai et al. Aug 2012 A1
20120207174 Shieh Aug 2012 A1
20120213074 Goldfarb et al. Aug 2012 A1
20120230187 Tremblay et al. Sep 2012 A1
20120239804 Liu et al. Sep 2012 A1
20120246637 Kreeger et al. Sep 2012 A1
20120266252 Spiers et al. Oct 2012 A1
20120281540 Khan et al. Nov 2012 A1
20120287789 Aybay et al. Nov 2012 A1
20120303784 Zisapel et al. Nov 2012 A1
20120303809 Patel et al. Nov 2012 A1
20120311568 Jansen Dec 2012 A1
20120317260 Husain et al. Dec 2012 A1
20120317570 Dalcher et al. Dec 2012 A1
20120331188 Riordan et al. Dec 2012 A1
20130003735 Chao et al. Jan 2013 A1
20130021942 Bacthu et al. Jan 2013 A1
20130031544 Sridharan et al. Jan 2013 A1
20130039218 Narasimhan et al. Feb 2013 A1
20130044636 Koponen et al. Feb 2013 A1
20130058346 Sridharan et al. Mar 2013 A1
20130073743 Ramasamy et al. Mar 2013 A1
20130100851 Bacthu et al. Apr 2013 A1
20130125120 Zhang et al. May 2013 A1
20130136126 Wang et al. May 2013 A1
20130142048 Gross, IV et al. Jun 2013 A1
20130148505 Koponen et al. Jun 2013 A1
20130151661 Koponen et al. Jun 2013 A1
20130159487 Patel et al. Jun 2013 A1
20130160024 Shtilman et al. Jun 2013 A1
20130163594 Sharma et al. Jun 2013 A1
20130166703 Hammer et al. Jun 2013 A1
20130170501 Egi et al. Jul 2013 A1
20130201989 Hu et al. Aug 2013 A1
20130227097 Yasuda et al. Aug 2013 A1
20130227550 Weinstein et al. Aug 2013 A1
20130287026 Davie Oct 2013 A1
20130287036 Banavalikar et al. Oct 2013 A1
20130291088 Shieh et al. Oct 2013 A1
20130297798 Arisoylu et al. Nov 2013 A1
20130301472 Mian Nov 2013 A1
20130311637 Kamath et al. Nov 2013 A1
20130318219 Kancherla Nov 2013 A1
20130332983 Koorevaar et al. Dec 2013 A1
20130336319 Liu et al. Dec 2013 A1
20130343174 Guichard et al. Dec 2013 A1
20130343378 Veteikis et al. Dec 2013 A1
20140003232 Guichard et al. Jan 2014 A1
20140003422 Mogul et al. Jan 2014 A1
20140010085 Kavunder et al. Jan 2014 A1
20140029447 Schrum, Jr. Jan 2014 A1
20140046997 Dain et al. Feb 2014 A1
20140046998 Dain et al. Feb 2014 A1
20140050223 Foo et al. Feb 2014 A1
20140052844 Nayak et al. Feb 2014 A1
20140059204 Nguyen et al. Feb 2014 A1
20140059544 Koganty et al. Feb 2014 A1
20140068602 Gember et al. Mar 2014 A1
20140092738 Grandhi et al. Apr 2014 A1
20140092906 Kandaswamy et al. Apr 2014 A1
20140092914 Kondapalli Apr 2014 A1
20140096183 Jain et al. Apr 2014 A1
20140101226 Khandekar et al. Apr 2014 A1
20140101656 Zhu et al. Apr 2014 A1
20140108665 Arora et al. Apr 2014 A1
20140115578 Cooper et al. Apr 2014 A1
20140129715 Mortazavi May 2014 A1
20140149696 Frenkel et al. May 2014 A1
20140164477 Springer et al. Jun 2014 A1
20140169168 Jalan et al. Jun 2014 A1
20140169375 Khan et al. Jun 2014 A1
20140195666 Dumitriu et al. Jul 2014 A1
20140207968 Kumar et al. Jul 2014 A1
20140254374 Janakiraman et al. Sep 2014 A1
20140254591 Mahadevan et al. Sep 2014 A1
20140269487 Kalkunte Sep 2014 A1
20140269717 Thubert et al. Sep 2014 A1
20140269724 Mehler et al. Sep 2014 A1
20140280896 Papakostas et al. Sep 2014 A1
20140281029 Danforth Sep 2014 A1
20140282526 Basavaiah et al. Sep 2014 A1
20140301388 Jagadish et al. Oct 2014 A1
20140304231 Kamath et al. Oct 2014 A1
20140307744 Dunbar et al. Oct 2014 A1
20140310391 Sorenson et al. Oct 2014 A1
20140310418 Sorenson et al. Oct 2014 A1
20140317677 Vaidya et al. Oct 2014 A1
20140321459 Kumar et al. Oct 2014 A1
20140330983 Zisapel et al. Nov 2014 A1
20140334485 Jain et al. Nov 2014 A1
20140334488 Guichard et al. Nov 2014 A1
20140341029 Allan et al. Nov 2014 A1
20140351452 Bosch et al. Nov 2014 A1
20140362682 Guichard et al. Dec 2014 A1
20140362705 Pan Dec 2014 A1
20140369204 Anand et al. Dec 2014 A1
20140372567 Ganesh et al. Dec 2014 A1
20140372616 Arisoylu et al. Dec 2014 A1
20140372702 Subramanyam et al. Dec 2014 A1
20150003453 Sengupta et al. Jan 2015 A1
20150003455 Haddad et al. Jan 2015 A1
20150009995 Gross, IV et al. Jan 2015 A1
20150016279 Zhang et al. Jan 2015 A1
20150023354 Li et al. Jan 2015 A1
20150026345 Ravinoothala et al. Jan 2015 A1
20150026362 Guichard et al. Jan 2015 A1
20150030024 Venkataswami et al. Jan 2015 A1
20150052262 Chanda et al. Feb 2015 A1
20150052522 Chanda et al. Feb 2015 A1
20150063102 Mestery et al. Mar 2015 A1
20150063364 Thakkar et al. Mar 2015 A1
20150071285 Kumar et al. Mar 2015 A1
20150071301 Dalal Mar 2015 A1
20150073967 Katsuyama et al. Mar 2015 A1
20150078384 Jackson et al. Mar 2015 A1
20150092551 Moisand et al. Apr 2015 A1
20150092564 Aldrin Apr 2015 A1
20150103645 Shen et al. Apr 2015 A1
20150103679 Tessmer et al. Apr 2015 A1
20150103827 Quinn et al. Apr 2015 A1
20150109901 Tan et al. Apr 2015 A1
20150124608 Agarwal et al. May 2015 A1
20150124622 Kovvali et al. May 2015 A1
20150124840 Bergeron May 2015 A1
20150138973 Kumar et al. May 2015 A1
20150139041 Bosch et al. May 2015 A1
20150146539 Mehta et al. May 2015 A1
20150156035 Foo et al. Jun 2015 A1
20150188770 Naiksatam et al. Jul 2015 A1
20150195197 Yong et al. Jul 2015 A1
20150213087 Sikri Jul 2015 A1
20150215819 Bosch et al. Jul 2015 A1
20150222640 Kumar et al. Aug 2015 A1
20150236948 Dunbar et al. Aug 2015 A1
20150237013 Bansal et al. Aug 2015 A1
20150242197 Alfonso et al. Aug 2015 A1
20150244617 Nakil et al. Aug 2015 A1
20150263901 Kumar et al. Sep 2015 A1
20150263946 Tubaltsev et al. Sep 2015 A1
20150271102 Antich Sep 2015 A1
20150280959 Vincent Oct 2015 A1
20150281089 Marchetti Oct 2015 A1
20150281098 Pettit et al. Oct 2015 A1
20150281125 Koponen et al. Oct 2015 A1
20150281179 Raman Oct 2015 A1
20150281180 Raman et al. Oct 2015 A1
20150288671 Chan et al. Oct 2015 A1
20150288679 Ben-Nun et al. Oct 2015 A1
20150295831 Kumar et al. Oct 2015 A1
20150319078 Lee et al. Nov 2015 A1
20150319096 Yip et al. Nov 2015 A1
20150358235 Zhang et al. Dec 2015 A1
20150358294 Kancharla et al. Dec 2015 A1
20150365322 Shatzkamer et al. Dec 2015 A1
20150370586 Cooper et al. Dec 2015 A1
20150370596 Fahs et al. Dec 2015 A1
20150372840 Benny et al. Dec 2015 A1
20150372911 Yabusaki et al. Dec 2015 A1
20150379277 Thota et al. Dec 2015 A1
20150381493 Bansal et al. Dec 2015 A1
20150381494 Cherian et al. Dec 2015 A1
20150381495 Cherian et al. Dec 2015 A1
20160006654 Fernando et al. Jan 2016 A1
20160028640 Zhang et al. Jan 2016 A1
20160043901 Sankar et al. Feb 2016 A1
20160043952 Zhang et al. Feb 2016 A1
20160057050 Ostrom et al. Feb 2016 A1
20160057687 Horn et al. Feb 2016 A1
20160065503 Yohe et al. Mar 2016 A1
20160080253 Wang et al. Mar 2016 A1
20160087888 Jain et al. Mar 2016 A1
20160094384 Jain et al. Mar 2016 A1
20160094389 Jain et al. Mar 2016 A1
20160094451 Jain et al. Mar 2016 A1
20160094452 Jain et al. Mar 2016 A1
20160094453 Jain et al. Mar 2016 A1
20160094454 Jain et al. Mar 2016 A1
20160094455 Jain et al. Mar 2016 A1
20160094456 Jain et al. Mar 2016 A1
20160094457 Jain et al. Mar 2016 A1
20160094631 Jain et al. Mar 2016 A1
20160094632 Jain et al. Mar 2016 A1
20160094633 Jain et al. Mar 2016 A1
20160094642 Jain et al. Mar 2016 A1
20160094643 Jain et al. Mar 2016 A1
20160094661 Jain et al. Mar 2016 A1
20160099948 Ott et al. Apr 2016 A1
20160105333 Lenglet et al. Apr 2016 A1
20160119226 Guichard et al. Apr 2016 A1
20160127306 Wang et al. May 2016 A1
20160127564 Sharma et al. May 2016 A1
20160134528 Lin et al. May 2016 A1
20160149784 Zhang et al. May 2016 A1
20160149816 Roach et al. May 2016 A1
20160149828 Vijayan et al. May 2016 A1
20160162320 Singh Jun 2016 A1
20160164776 Biancaniello Jun 2016 A1
20160164787 Roach et al. Jun 2016 A1
20160164826 Riedel et al. Jun 2016 A1
20160173373 Guichard et al. Jun 2016 A1
20160182684 Connor et al. Jun 2016 A1
20160197831 Foy et al. Jul 2016 A1
20160197839 Li et al. Jul 2016 A1
20160205015 Halligan et al. Jul 2016 A1
20160212048 Kaempfer et al. Jul 2016 A1
20160212237 Nishijima Jul 2016 A1
20160218918 Chu et al. Jul 2016 A1
20160226700 Zhang et al. Aug 2016 A1
20160226754 Zhang et al. Aug 2016 A1
20160226762 Zhang et al. Aug 2016 A1
20160248685 Pignataro et al. Aug 2016 A1
20160277210 Lin et al. Sep 2016 A1
20160277294 Akiyoshi Sep 2016 A1
20160294612 Ravinoothala et al. Oct 2016 A1
20160294933 Hong et al. Oct 2016 A1
20160294935 Hong et al. Oct 2016 A1
20160308758 Li et al. Oct 2016 A1
20160308961 Rao Oct 2016 A1
20160337189 Liebhart et al. Nov 2016 A1
20160337249 Zhang et al. Nov 2016 A1
20160337317 Hwang et al. Nov 2016 A1
20160344565 Batz et al. Nov 2016 A1
20160344621 Roeland et al. Nov 2016 A1
20160344803 Batz et al. Nov 2016 A1
20160352866 Gupta et al. Dec 2016 A1
20160366046 Anantharam et al. Dec 2016 A1
20160373364 Yokota Dec 2016 A1
20160378537 Zou Dec 2016 A1
20160380812 Chanda et al. Dec 2016 A1
20170005882 Tao et al. Jan 2017 A1
20170005920 Previdi et al. Jan 2017 A1
20170005923 Babakian Jan 2017 A1
20170005988 Bansal et al. Jan 2017 A1
20170019303 Swamy et al. Jan 2017 A1
20170019329 Kozat et al. Jan 2017 A1
20170019331 Yong Jan 2017 A1
20170019341 Huang et al. Jan 2017 A1
20170026417 Ermagan et al. Jan 2017 A1
20170033939 Bragg et al. Feb 2017 A1
20170063683 Li et al. Mar 2017 A1
20170063928 Jain et al. Mar 2017 A1
20170064048 Pettit et al. Mar 2017 A1
20170064749 Jain et al. Mar 2017 A1
20170078176 Lakshmikantha et al. Mar 2017 A1
20170078961 Rabii et al. Mar 2017 A1
20170093698 Farmanbar Mar 2017 A1
20170093758 Chanda Mar 2017 A1
20170099194 Wei Apr 2017 A1
20170126497 Dubey et al. May 2017 A1
20170126522 McCann et al. May 2017 A1
20170126726 Han May 2017 A1
20170134538 Mahkonen et al. May 2017 A1
20170142012 Thakkar et al. May 2017 A1
20170147399 Cropper et al. May 2017 A1
20170149582 Cohn et al. May 2017 A1
20170149675 Yang May 2017 A1
20170149680 Liu et al. May 2017 A1
20170163531 Kumar et al. Jun 2017 A1
20170163724 Puri et al. Jun 2017 A1
20170171159 Kumar et al. Jun 2017 A1
20170180240 Kern et al. Jun 2017 A1
20170195255 Pham et al. Jul 2017 A1
20170208000 Bosch et al. Jul 2017 A1
20170208011 Bosch et al. Jul 2017 A1
20170208532 Zhou Jul 2017 A1
20170214627 Zhang et al. Jul 2017 A1
20170220306 Price et al. Aug 2017 A1
20170230333 Glazemakers et al. Aug 2017 A1
20170230467 Salgueiro et al. Aug 2017 A1
20170237656 Gage Aug 2017 A1
20170250869 Voellmy Aug 2017 A1
20170250902 Rasanen et al. Aug 2017 A1
20170250917 Ruckstuhl et al. Aug 2017 A1
20170251065 Furr et al. Aug 2017 A1
20170257432 Fu et al. Sep 2017 A1
20170264677 Li Sep 2017 A1
20170273099 Zhang et al. Sep 2017 A1
20170279938 You et al. Sep 2017 A1
20170295021 Gutiérrez et al. Oct 2017 A1
20170295033 Cherian et al. Oct 2017 A1
20170295100 Hira et al. Oct 2017 A1
20170310588 Zuo Oct 2017 A1
20170310611 Kumar et al. Oct 2017 A1
20170317887 Dwaraki et al. Nov 2017 A1
20170317926 Penno et al. Nov 2017 A1
20170317936 Swaminathan et al. Nov 2017 A1
20170317954 Masurekar et al. Nov 2017 A1
20170318081 Hopen et al. Nov 2017 A1
20170318097 Drew et al. Nov 2017 A1
20170324651 Penno et al. Nov 2017 A1
20170324654 Previdi et al. Nov 2017 A1
20170331672 Fedyk et al. Nov 2017 A1
20170339110 Ni Nov 2017 A1
20170339600 Roeland et al. Nov 2017 A1
20170346764 Tan et al. Nov 2017 A1
20170353387 Kwak et al. Dec 2017 A1
20170359252 Kumar et al. Dec 2017 A1
20170364794 Mahkonen et al. Dec 2017 A1
20170366605 Chang et al. Dec 2017 A1
20170373990 Jeuk et al. Dec 2017 A1
20180004954 Liguori et al. Jan 2018 A1
20180006935 Mutnuru et al. Jan 2018 A1
20180026911 Anholt et al. Jan 2018 A1
20180027101 Kumar et al. Jan 2018 A1
20180041425 Zhang Feb 2018 A1
20180041470 Schultz et al. Feb 2018 A1
20180041524 Reddy et al. Feb 2018 A1
20180063018 Bosch et al. Mar 2018 A1
20180063087 Hira et al. Mar 2018 A1
20180091420 Drake et al. Mar 2018 A1
20180102919 Hao et al. Apr 2018 A1
20180102965 Hari et al. Apr 2018 A1
20180115471 Curcio et al. Apr 2018 A1
20180123950 Garg et al. May 2018 A1
20180124061 Raman May 2018 A1
20180139098 Sunavala et al. May 2018 A1
20180145899 Rao May 2018 A1
20180159733 Poon et al. Jun 2018 A1
20180159801 Rajan et al. Jun 2018 A1
20180159943 Poon et al. Jun 2018 A1
20180176177 Bichot et al. Jun 2018 A1
20180176294 Vacaro et al. Jun 2018 A1
20180183764 Gunda Jun 2018 A1
20180184281 Tamagawa et al. Jun 2018 A1
20180191600 Hecker et al. Jul 2018 A1
20180198692 Ansari et al. Jul 2018 A1
20180198705 Wang et al. Jul 2018 A1
20180198791 Desai et al. Jul 2018 A1
20180203736 Vyas Jul 2018 A1
20180205637 Li Jul 2018 A1
20180213040 Pak et al. Jul 2018 A1
20180219762 Wang et al. Aug 2018 A1
20180227216 Hughes Aug 2018 A1
20180234360 Narayana et al. Aug 2018 A1
20180247082 Durham et al. Aug 2018 A1
20180248713 Zanier et al. Aug 2018 A1
20180248755 Hecker et al. Aug 2018 A1
20180248790 Tan et al. Aug 2018 A1
20180248986 Dalal Aug 2018 A1
20180262427 Jain et al. Sep 2018 A1
20180262434 Koponen et al. Sep 2018 A1
20180278530 Connor et al. Sep 2018 A1
20180288129 Joshi Oct 2018 A1
20180295036 Krishnamurthy Oct 2018 A1
20180295053 Leung et al. Oct 2018 A1
20180302242 Hao et al. Oct 2018 A1
20180309632 Kompella et al. Oct 2018 A1
20180337849 Sharma et al. Nov 2018 A1
20180349212 Liu et al. Dec 2018 A1
20180351874 Abhigyan et al. Dec 2018 A1
20190007382 Nirwal et al. Jan 2019 A1
20190020580 Boutros et al. Jan 2019 A1
20190020600 Zhang et al. Jan 2019 A1
20190020684 Qian et al. Jan 2019 A1
20190028347 Johnston et al. Jan 2019 A1
20190028384 Penno et al. Jan 2019 A1
20190028577 D?Souza et al. Jan 2019 A1
20190036819 Kancherla et al. Jan 2019 A1
20190068500 Hira Feb 2019 A1
20190089679 Kahalon et al. Mar 2019 A1
20190097838 Sahoo et al. Mar 2019 A1
20190102280 Caldato Apr 2019 A1
20190108049 Singh Apr 2019 A1
20190116063 Bottorff et al. Apr 2019 A1
20190121961 Coleman Apr 2019 A1
20190124096 Ahuja et al. Apr 2019 A1
20190132220 Boutros et al. May 2019 A1
20190132221 Boutros et al. May 2019 A1
20190140863 Nainar et al. May 2019 A1
20190140947 Zhuang et al. May 2019 A1
20190140950 Zhuang et al. May 2019 A1
20190149512 Sevinc et al. May 2019 A1
20190149516 Rajahalme et al. May 2019 A1
20190149518 Sevinc et al. May 2019 A1
20190166045 Peng et al. May 2019 A1
20190173778 Faseela et al. Jun 2019 A1
20190173850 Jain et al. Jun 2019 A1
20190173851 Jain et al. Jun 2019 A1
20190222538 Yang et al. Jul 2019 A1
20190229937 Nagarajan et al. Jul 2019 A1
20190230126 Kumar et al. Jul 2019 A1
20190238363 Boutros et al. Aug 2019 A1
20190238364 Boutros et al. Aug 2019 A1
20190268384 Hu et al. Aug 2019 A1
20190286475 Mani Sep 2019 A1
20190288915 Denyer et al. Sep 2019 A1
20190288947 Jain et al. Sep 2019 A1
20190306036 Boutros et al. Oct 2019 A1
20190306086 Boutros et al. Oct 2019 A1
20190342175 Wan et al. Nov 2019 A1
20190377604 Cybulski Dec 2019 A1
20190379578 Mishra Dec 2019 A1
20190379579 Mishra Dec 2019 A1
20200007388 Johnston et al. Jan 2020 A1
20200036629 Roeland et al. Jan 2020 A1
20200059761 Li et al. Feb 2020 A1
20200067828 Liu et al. Feb 2020 A1
20200073739 Rungta Mar 2020 A1
20200076684 Naveen et al. Mar 2020 A1
20200076734 Naveen et al. Mar 2020 A1
20200084141 Bengough et al. Mar 2020 A1
20200136960 Jeuk et al. Apr 2020 A1
20200145331 Bhandari et al. May 2020 A1
20200162318 Patil et al. May 2020 A1
20200162352 Jorgenson et al. May 2020 A1
20200183724 Shevade et al. Jun 2020 A1
20200195711 Abhigyan et al. Jun 2020 A1
20200204492 Sarva et al. Jun 2020 A1
20200213366 Hong et al. Jul 2020 A1
20200220805 Dhanabalan Jul 2020 A1
20200272493 Lecuyer et al. Aug 2020 A1
20200272494 Gokhale et al. Aug 2020 A1
20200272495 Rolando et al. Aug 2020 A1
20200272496 Mundaragi et al. Aug 2020 A1
20200272497 Kavathia et al. Aug 2020 A1
20200272498 Mishra et al. Aug 2020 A1
20200272499 Feng et al. Aug 2020 A1
20200272500 Feng et al. Aug 2020 A1
20200272501 Chalvadi et al. Aug 2020 A1
20200274757 Rolando et al. Aug 2020 A1
20200274769 Naveen et al. Aug 2020 A1
20200274778 Lecuyer et al. Aug 2020 A1
20200274779 Rolando et al. Aug 2020 A1
20200274795 Rolando et al. Aug 2020 A1
20200274801 Feng et al. Aug 2020 A1
20200274808 Mundaragi et al. Aug 2020 A1
20200274809 Rolando et al. Aug 2020 A1
20200274810 Gokhale et al. Aug 2020 A1
20200274826 Mishra et al. Aug 2020 A1
20200274944 Naveen et al. Aug 2020 A1
20200274945 Rolando et al. Aug 2020 A1
20200287962 Mishra et al. Sep 2020 A1
20200322271 Jain et al. Oct 2020 A1
20200344088 Selvaraj et al. Oct 2020 A1
20200358696 Hu et al. Nov 2020 A1
20200364074 Gunda Nov 2020 A1
20200366526 Boutros et al. Nov 2020 A1
20200366584 Boutros et al. Nov 2020 A1
20200382412 Chandrappa et al. Dec 2020 A1
20200382420 Suryanarayana et al. Dec 2020 A1
20200389401 Enguehard et al. Dec 2020 A1
20210004245 Kamath et al. Jan 2021 A1
20210011812 Mitkar Jan 2021 A1
20210011816 Mitkar Jan 2021 A1
20210029088 Mayya et al. Jan 2021 A1
20210044502 Boutros et al. Feb 2021 A1
20210073736 Alawi Mar 2021 A1
20210117217 Croteau et al. Apr 2021 A1
20210120080 Mishra et al. Apr 2021 A1
20210135992 Tidemann et al. May 2021 A1
20210136140 Tidemann et al. May 2021 A1
20210136141 Tidemann et al. May 2021 A1
20210136147 Giassa May 2021 A1
20210218587 Mishra et al. Jul 2021 A1
20210227041 Sawant et al. Jul 2021 A1
20210227042 Sawant et al. Jul 2021 A1
20210240734 Shah Aug 2021 A1
20210266295 Stroz Aug 2021 A1
20210271565 Bhavanarushi Sep 2021 A1
20210306240 Boutros et al. Sep 2021 A1
20210311758 Cao Oct 2021 A1
20210311772 Mishra et al. Oct 2021 A1
20210314248 Rolando et al. Oct 2021 A1
20210314252 Rolando et al. Oct 2021 A1
20210314253 Rolando et al. Oct 2021 A1
20210314268 Rolando et al. Oct 2021 A1
20210314277 Rolando et al. Oct 2021 A1
20210314310 Cao Oct 2021 A1
20210314415 Rolando et al. Oct 2021 A1
20210314423 Rolando et al. Oct 2021 A1
20210328913 Nainar et al. Oct 2021 A1
20210349767 Asayag Nov 2021 A1
20210359945 Jain et al. Nov 2021 A1
20210377160 Faseela Dec 2021 A1
20220019698 Durham et al. Jan 2022 A1
20220030058 Tidemann et al. Jan 2022 A1
20220038310 Boutros Feb 2022 A1
20220060467 Montgomery et al. Feb 2022 A1
20220078037 Mishra et al. Mar 2022 A1
Foreign Referenced Citations (38)
Number Date Country
3034809 Mar 2018 CA
1689369 Oct 2005 CN
101594358 Dec 2009 CN
101729412 Jun 2010 CN
103516807 Jan 2014 CN
103795805 May 2014 CN
104471899 Mar 2015 CN
104521195 Apr 2015 CN
107078950 Aug 2017 CN
107204941 Sep 2017 CN
109213573 Jan 2019 CN
110521169 Nov 2019 CN
107105061 Sep 2020 CN
112181632 Jan 2021 CN
2426956 Mar 2012 EP
2466985 Jun 2012 EP
3210345 Aug 2017 EP
3300319 Mar 2018 EP
2005311863 Nov 2005 JP
2015519822 Jul 2015 JP
9918534 Apr 1999 WO
2008095010 Aug 2008 WO
WO-2008140715 Nov 2008 WO
2014069978 May 2014 WO
2014182529 Nov 2014 WO
2016053373 Apr 2016 WO
2016054272 Apr 2016 WO
2019084066 May 2019 WO
2019147316 Aug 2019 WO
WO-2019157955 Aug 2019 WO
WO-2019168532 Sep 2019 WO
2019226327 Nov 2019 WO
2020046686 Mar 2020 WO
2020171937 Aug 2020 WO
WO-2021041440 Mar 2021 WO
2021086462 May 2021 WO
WO-2021086462 May 2021 WO
2021206789 Oct 2021 WO
Non-Patent Literature Citations (43)
Entry
Author Unknown, “Datagram,” Jun. 22, 2012, 2 pages, retrieved from https://web.archive.org/web/20120622031055/https://en.wikipedia.org/wiki/datagram.
Author Unknown, “AppLogic Features,” Jul. 2007, 2 pages. 3TERA, Inc.
Author Unknown, “Enabling Service Chaining on Cisco Nexus 1000V Series,” Month Unknown, 2012, 25 pages, Cisco.
Casado, Martin, et al., “Virtualizing the Network Forwarding Plane,” Dec. 2010, 6 pages.
Dixon, Colin, et al., “An End to the Middle,” Proceedings of the 12th Conference on Hot Topics in Operating Systems, May 2009, 5 pages, USENIX Association, Berkeley, CA, USA.
Dumitriu, Dan Mihai, et al., (U.S. Appl. No. 61/514,990), filed Aug. 4, 2011, 31 pages.
Greenberg, Albert, et al., “VL2: A Scalable and Flexible Data Center Network,” SIGCOMM '09, Aug. 17-21, 2009, 12 pages, ACM, Barcelona, Spain.
Guichard, J., et al., “Network Service Chaining Problem Statement,” Network Working Group, Jun. 13, 2013, 14 pages, Cisco Systems, Inc.
Halpern, J., et al., “Service Function Chaining (SFC) Architecture,” draft-ietf-sfc-architecture-02, Sep. 20, 2014, 26 pages, IETF.
Joseph, Dilip Anthony, et al., “A Policy-aware Switching Layer for Data Centers,” Jun. 24, 2008, 26 pages, Electrical Engineering and Computer Sciences, University of California, Berkeley, CA, USA.
Karakus, Murat, et al., “Quality of Service (QoS) in Software Defined Networking (SDN): A Survey,” Journal of Network and Computer Applications, Dec. 9, 2016, 19 pages, vol. 80, Elsevier, Ltd.
Kumar, S., et al., “Service Function Chaining Use Cases in Data Centers,” draft-ietf-sfc-dc-use-cases-01, Jul. 21, 2014, 23 pages, IETF.
Liu, W., et al., “Service Function Chaining (SFC) Use Cases,” draft-liu-sfc-use-cases-02, Feb. 13, 2014, 17 pages, IETF.
Non-Published Commonly Owned U.S. Appl. No. 16/668,477, filed Oct. 30, 2019, 31 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/668,485, filed Oct. 30, 2019, 55 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/668,505, filed Oct. 30, 2019, 39 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/741,544, filed Jan. 13, 2020, 31 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/785,674, filed Feb. 10, 2020, 29 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/843,913, filed Apr. 9, 2020, 119 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/843,919, filed Apr. 9, 2020, 123 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,377, filed Jun. 17, 2020, 120 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,390, filed Jun. 17, 2020, 121 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,399, filed Jun. 17, 2020, 121 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,430, filed Jun. 17, 2020, 120 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,437, filed Jun. 17, 2020, 121 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,442, filed Jun. 17, 2020, 121 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 16/904,446, filed Jun. 17, 2020, 121 pages, VMware, Inc.
Non-Published Commonly Owned Related U.S. Appl. No. 17/122,192 with similar specification, filed Dec. 15, 2020, 33 pages, VMware, Inc.
Salsano, Stefano, et al., “Generalized Virtual Networking: An Enabler for Service Centric Networking and Networt Function Virtualization,” 2014 16th International Telecommunications Network Strategy and Planning Symposium, Sep. 17-19, 2014, 7 pages, IEEE, Funchal, Portugal.
Sekar, Vyas, et al., “Design and Implementation of a Consolidated Middlebox Architecture,” 9th USENIX Symposium on Networked Systems Design and Implementation, Apr. 25-27, 2012, 14 pages, USENIX, San Jose, CA, USA.
Sherry, Justine, et al., “Making Middleboxes Someone Else's Problem: Network Processing as a Cloud Service,” In Proc. of SIGCOMM '12, Aug. 13-17, 2012, 12 pages, Helsinki, Finland.
Siasi, N., et al., “Container-Based Service Function Chain Mapping,” 2019 SoutheastCon, Apr. 11-14, 2019, 6 pages, IEEE, Huntsville, AL, USA.
Lin, Po-Ching, et al., “Balanced Service Chaining in Software-Defined Networks with Network Function Virtualization,” Computer: Research Feature, Nov. 2016, 9 pages, vol. 49, No. 11, IEEE.
Non-Published Commonly Owned U.S. Appl. No. 17/346,255, filed Jun. 13, 2021, 49 pages, Nicira, Inc.
Non-Published Commonly Owned U.S. Appl. No. 17/352,298, filed Jun. 19, 2021, 132 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 17/385,809, filed Jul. 26, 2021, 74 pages, Nicira, Inc.
Halpern, J., et al., “Service Function Chaining (SFC) Architecture,” RFC 7665, Oct. 2015, 32 pages, IETF Trust.
Non-Published Commonly Owned U.S. Appl. No. 17/492,626, filed Oct. 3, 2021, 63 pages, VMware, Inc.
Non-Published Commonly Owned U.S. Appl. No. 17/528,094, filed Nov. 16, 2021, 38 pages, VMware, Inc.
Xiong, Gang, et al., “A Mechanism for Configurable Network Service Chaining and Its Implementation,” KSII Transactions on Internet and Information Systems, Aug. 2016, 27 pages, vol. 10, No. 8, KSII.
Author Unknown, “MPLS,” Mar. 3, 2008, 47 pages.
Cianfrani, Antonio, et al., “Translating Traffic Engineering Outcome into Segment Routing Paths: the Encoding Problem,” 2016 IEEE Conference on Computer Communications Workshops (Infocom Wkshps): GI 2016: 9th IEEE Global Internet Symposium, Apr. 10-14, 2016, 6 pages, IEEE, San Francisco, CA, USA.
PCT International Search Report and Written Opinion of Commonly Owned International Patent Application PCT/US2021/056574, dated Feb. 8, 2022, 13 pages, International Searching Authority (EPO).
Related Publications (1)
Number Date Country
20220191304 A1 Jun 2022 US