A method performed by a network device acting as a forwarding element within a software-defined network, comprising the steps of: receiving, over a network connection with a controller device within the software-defined network, a representation of: configurable flow table definitions including key compositions based on a first plurality of relevant header fields of protocol headers, wherein the key composition for each of the flow table definitions identifies a set of one or more of the relevant header fields selected for that flow table definition, and configurable logic for selecting, based on a second plurality of relevant header fields of protocol headers, between flow tables defined by the configurable flow table definitions; creating a flow table based on each of the configurable flow table definitions, wherein each of the flow tables includes a configurable key column for each of the relevant header fields identified by the key composition included in the flow table definition on which that flow table is based, wherein each of the flow tables also includes a set of one or more action columns to store forwarding decisions; installing the configurable logic for selecting between flow tables; receiving data to populate the configurable key columns and action columns of the flow tables; populating the flow tables according to the received data; and selecting from the forwarding decisions for packets, received over network interfaces of the network device using one or more protocols, according to the configurable logic for selecting between flow tables, the flow tables, and each packet's values in the relevant header fields required by the configurable logic to select one of the flow tables for that packet and to select an entry from the selected flow table for that packet. receiving, over a network connection with a controller device within the software-defined network, a representation of: configurable flow table definitions including key compositions based on a first plurality of relevant header fields of protocol headers, wherein the key composition for each of the flow table definitions identifies a set of one or more of the relevant header fields selected for that flow table definition, and configurable logic for selecting, based on a second plurality of relevant header fields of protocol headers, between flow tables defined by the configurable flow table definitions; configurable flow table definitions including key compositions based on a first plurality of relevant header fields of protocol headers, wherein the key composition for each of the flow table definitions identifies a set of one or more of the relevant header fields selected for that flow table definition, and configurable logic for selecting, based on a second plurality of relevant header fields of protocol headers, between flow tables defined by the configurable flow table definitions; creating a flow table based on each of the configurable flow table definitions, wherein each of the flow tables includes a configurable key column for each of the relevant header fields identified by the key composition included in the flow table definition on which that flow table is based, wherein each of the flow tables also includes a set of one or more action columns to store forwarding decisions; installing the configurable logic for selecting between flow tables; receiving data to populate the configurable key columns and action columns of the flow tables; populating the flow tables according to the received data; and selecting from the forwarding decisions for packets, received over network interfaces of the network device using one or more protocols, according to the configurable logic for selecting between flow tables, the flow tables, and each packet's values in the relevant header fields required by the configurable logic to select one of the flow tables for that packet and to select an entry from the selected flow table for that packet.