# US 10,313,495 B1 · Compiler and hardware interactions to remove action dependencies in the data plane of a network forwarding element

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,313,495 B1
- Document ID: US10313495B1
- Status: Granted
- Kind: B1
- Application number: 15/682,365
- Filed: 2017-08-21
- Granted: 2019-06-04
- Earliest claimed: 2017-07-09
- Assignees: Barefoot Networks, Inc.
- Applicants: Barefoot Networks, Inc.
- Inventors: Patrick Bosshart; Michael Gregory Ferrara; Michael E. Attig; Jay Evan Scott Peterson
- Web page: https://patentgrep.com/patent/US10313495B1

## CPC

- H04L 69/22: Parsing or analysis of headers
- G06F 9/3001: {Arithmetic instructions}
- G06F 9/30029: {Logical and Boolean instructions, e.g. XOR, NOT}
- G06F 15/17312: {Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion (routing on a LAN H04L45/00)}
- H04L 41/0803: Configuration setting
- H04L 45/38: {Flow based routing}
- H04L 45/74: Address processing for routing
- H04L 49/3063: {Pipelined operation}
- G06F 7/57: Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations {(G06F7/49, G06F7/491 take precedence)}
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method of configuring a forwarding element that includes several data plane message processing stages. The method stores a set of action codes in an instruction memory in the data plane of the forwarding element. Each action code identifies an operation to perform on a field of a message received at the data plane. The method determines action codes required to process each field of the message in each message processing stage. The method configures a data-plane processing unit of the forwarding element to concurrently perform a group of the action codes in the same data plane processing stage when (i) the action codes are the same and (ii) operate on the same field of the message.

## Claims

### Claim 1

A method of configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the method comprising:
storing a set of action codes in an instruction memory in the data plane of the physical forwarding element, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage; and
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage and during a same clock cycle by utilizing a same data-plane processing unit to perform the plurality of the action codes.

### Claim 2 (depends on 1)

The method of claim 1, wherein the data plane of the physical forwarding element comprises circuitry to perform a logical OR operation on the action codes required to perform an operation on a same field of the message in a same message processing stage.

### Claim 3 (depends on 1)

The method of claim 1, the physical forwarding element comprising a plurality of data plane processing units, the method further comprising configuring each data plane processing unit to operate on a different field of a message at each message stage processing stage.

### Claim 4 (depends on 3)

The method of claim 3, wherein each data-plane processing unit is an arithmetic logic unit (ALU).

### Claim 5 (depends on 1)

The method of claim 1, wherein the physical forwarding element is one of a network router and a network switch.

### Claim 6

A method of configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the method comprising:
storing a set of action codes in an instruction memory in the data plane of the physical forwarding element, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage;
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage; and
when the action codes are not the same, configuring the data-plane processing unit of the forwarding element to perform each of a plurality of action codes that operate on a same field of the message in a different processing stage.

### Claim 7

A method of configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the method comprising:
receiving a set of instructions from a control plane of the physical forwarding element to identify a set of actions to perform on the fields of messages received at the data plane of the physical forwarding element;
storing a set of action codes in the instruction memory in the data plane of the physical forwarding element, the set of action codes comprising the actions identified in the set of instructions, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage; and
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage.

### Claim 8 (depends on 7)

The method of claim 7, wherein the set of instructions further comprises a set of lookup keys, each lookup key corresponding to an action code, the method further comprising storing the set of lookup keys in a plurality of match tables in the data plane of the physical forwarding element,
wherein determining the action codes required to process each field of the message in each message processing stage comprises comparing each field of the message with a lookup key to determine whether the action corresponding with the lookup key is to be performed on the field.

### Claim 9 (depends on 7)

The method of claim 7, wherein the set of instructions is specified in a data-plane programming language.

### Claim 10

A non-transitory computer readable medium storing a program for configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the program executable by a processing unit, the program comprising sets of instructions for:
storing a set of action codes in an instruction memory in the data plane of the forwarding element, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage; and
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage and during a same clock cycle by utilizing a same data-plane processing unit to perform the plurality of action codes.

### Claim 11 (depends on 10)

The non-transitory computer readable medium of claim 10, wherein the data plane of the physical forwarding element comprises circuitry to perform a logical OR operation on the action codes required to perform an operation on a same field of the message in a same message processing stage.

### Claim 12 (depends on 10)

The non-transitory computer readable medium of claim 10, the physical forwarding element comprising a plurality of data plane processing units, the program further comprising a set of instructions for configuring each data plane processing unit to operate on a different field of a message at each message processing stage.

### Claim 13 (depends on 12)

The non-transitory computer readable medium of claim 12, wherein each data-plane processing unit is an arithmetic logic unit (ALU).

### Claim 14 (depends on 10)

The non-transitory computer readable medium of claim 10, wherein the physical forwarding element is one of a network router and a network switch.

### Claim 15

A non-transitory computer readable medium storing a program for configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the program executable by a processing unit, the program comprising sets of instructions for:
storing a set of action codes in an instruction memory in the data plane of the forwarding element, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage;
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage; and
when the action codes are not the same, configuring the data-plane processing unit of the forwarding element to perform each of a plurality of action codes that operate on a same field of the message in a different processing stage.

### Claim 16

A non-transitory computer readable medium storing a program for configuring a physical forwarding element comprising (i) a data plane comprising a data plane message processing pipeline and (ii) a parser for extracting fields of messages received at the data plane of the physical forwarding element, the data plane message processing pipeline comprising a plurality of data plane message processing stages, the program executable by a processing unit, the program comprising sets of instructions for:
receiving a set of instructions from a control plane of the physical forwarding element to identify a set of actions to perform on the fields of messages received at the data plane of the physical forwarding element;
storing a set of action codes in the instruction memory in the data plane of the physical forwarding element, the set of action codes comprising the actions identified in the set of instructions received from the control plane, each action code identifying an operation to perform on a field of a message received at the data plane;
determining action codes required to process each field of the message in each message processing stage;
when a plurality of the action codes (i) are the same and (ii) operate on a same field of the message, configuring a data-plane processing unit of the physical forwarding element to concurrently perform the plurality of the action codes in a same data plane processing stage.

### Claim 17 (depends on 16)

The non-transitory computer readable medium of claim 16, wherein the set of instructions received from the control plane further comprises a set of lookup keys, each lookup key corresponding to an action code, the program further comprising a set of instructions for storing the set of lookup keys in a plurality of match tables in the data plane of the physical forwarding element,
wherein the set of instructions for determining the action codes required to process each field of the message in each message processing stage comprises a set of instructions for comparing each field of the message with a lookup key to determine whether the action corresponding with the lookup key is to be performed on the field.

### Claim 18 (depends on 16)

The non-transitory computer readable medium of claim 16, wherein the set of instructions received from the control plane is specified in a data-plane programming language.
