Many current enterprises have large and sophisticated networks comprising switches, hubs, routers, servers, workstations and other networked devices, which support a variety of connections, applications and systems.  The increased sophistication of computer networking, including virtual machine migration, dynamic workloads, multi-tenancy, and customer specific quality of service and security configurations require a better paradigm for network control.  Networks have traditionally been managed through low-level configuration of individual components.  Network configurations often depend on the underlying network: for example, blocking a user's access with an access control list (“ACL”) entry requires knowing the user's current IP address.  More complicated tasks require more extensive network knowledge: forcing guest users' port 80 traffic to traverse an HTTP proxy requires knowing the current network topology and the location of each guest.  This process is of increased difficulty where the network switching elements are shared across multiple users. 
In response, there is a growing movement, driven by both industry and academia, towards a new network control paradigm called Software-Defined Networking (SDN).  In the SDN paradigm, a network controller, running on one or more servers in a network, controls, maintains, and implements control logic that governs the forwarding behavior of shared network switching elements on a per user basis.  Making network management decisions often requires knowledge of the network state.  To facilitate management decision-making, the network controller creates and maintains a view of the network state and provides an application programming interface upon which management applications may access a view of the network state. 
Three of the many challenges of large networks (including datacenters and the enterprise) are scalability, mobility, and multi-tenancy and often the approaches taken to address one hamper the other.  Currently, instead of a hardware switch, an extender or a L2 gateway is used to bridge the physical network to the virtual network.  For instance, the L2 gateway may be used to connect two managed environments, or connect a managed environment and an unmanaged environment.  The extender is an x86 box.  As such, its throughput is less than dedicated hardware.  The extender also introduces one extra hop that can hinder performance and latency.