1.  Field
This application relates to network elements and, more particularly, to a method for abstracting datapath hardware elements. 
2.  Description of the Related Art
Data communication networks may include various switches, nodes, routers, and other devices coupled to and configured to pass data to one another.  These devices will be referred to herein as “network elements”.  Data is communicated through the data communication network by passing protocol data units, such as frames, packets, cells, or segments, between the network elements by utilizing one or more communication links.  A particular protocol data unit may be handled by multiple network elements and cross multiple communication links as it travels between its source and its destination over the network. 
Network elements are designed to handle packets of data efficiently, to minimize the amount of delay associated with transmission of the data on the network.  Conventionally, this is implemented by using hardware in a data plane of the network element to forward packets of data, while using software in a control plane of the network element to configure the network element to cooperate with other network elements on the network. 
The applications running in the control plane make decisions about how particular types of traffic should be handled by the network element to allow packets of data to be properly forwarded on the network.  For example, a network element may include a routing process, which runs in the control plane, that enables the network element to have a synchronized view of the network topology.  Forwarding state, computed using this network topology is then programmed into the data plane to enable the network element to forward packets of data across the network.  Multiple processes may be running in the control plane to enable the network element to interact with other network elements on the network and forward data packets on the network. 
As the control applications make decisions, the control plane programs the hardware in the dataplane to enable the dataplane to be adjusted to properly handle traffic.  The data plane includes ASICs, FPGAs, and other hardware elements designed to receive packets of data, perform lookup operations on specified fields of packet headers, and make forwarding decisions as to how the packet should be transmitted on the network.  Lookup operations are typically implemented using tables and registers containing entries populated by the control plane. 
Drivers are used to abstract the data plane hardware elements from the control plane applications and provide a set of functions which the applications may use to program the hardware implementing the dataplane.  Example driver calls may include “add route”, “delete route”, and hundreds of other instructions which enable the applications to instruct the driver to adjust the hardware to cause the network element to exhibit desired behavior on the network. 
The driver takes the instructions received from the control plane and implements the instructions by setting values in data registers and physical tables that are used by the hardware to control operation of the hardware.  Since the driver code is specifically created to translate instructions from the applications to updates to the hardware, any changes to the hardware requires that the driver code be updated.  Further, changes to the hardware may also require changes to the application code.  For example, adding functionality to the hardware may require the application to be adjusted to allow the application to output instructions to the driver layer to take advantage of the new functionality.  Likewise, the driver may need to be adjusted to implement the new instructions from the application to enable the new functionality to be accessed.  Implementing changes to the driver code and/or to the application code increases development cost, since any time this code is changed it needs to be debugged to check for problems.  This not only costs money, but also increases the amount of time required to bring the newly configured product to market.