PicOS Support for OpenFlow 1.4.0


OpenFlow is a communication protocol used in software-defined networking (SDN). It enables an SDN controller to communicate instructions to the forwarding plane of network switches and routers, including virtual switches and routers. Using OpenFlow, the SDN controller can make changes to the switch and router flow tables, enabling administrators to quickly make network changes such as to optimize network performance or test new configurations. OpenFlow is intended to be an extensible protocol, enabling SDN programmers to define additional elements, such as actions or port properties that address new network technologies as they emerge. OpenFlow is maintained by the Open Network Foundation’s Open Datapath project, which is seeking to build a foundation for a rich SDN ecosystem and software development lifecycle. The Pica8 PICOS network operating system supports OpenFlow.

This document contains OpenFlow 1.4.0 features supported by the Pica8 PICOS software. For clarity, the feature names in this table are identical to the feature names found in OpenFlow Switch Specification, Version 1.4.0.

OpenFlow Messages

Each OpenFlow message begins with the OpenFlow header. The OpenFlow header has several fields, including the type field. The type field identifies the type of OpenFlow message.

The OpenFlow protocol has three message types: symmetric, controller-to-switch, and asynchronous. Each message type has multiple sub-types.

Symmetric Messages

Symmetric messages are unsolicited messages that may be initiated by either the switch or the controller. Symmetric messages are sent without explicit solicitation in either direction. The following table describes PicOS support for symmetric messages:

Table 1   PicOS Support for OpenFlow Symmetric Messages

MessageSupportComments
OFPT_HELLOSupported 
OFPT_ERRORSupported 
OFPT_ECHO_REQUESTSupported 
OFPT_ECHO_REPLYSupported 
OFPT_EXPERIMENTERNot Supported 

Controller-to-Switch Messages

As the title suggests, Controller-to-switch messages are sent from the controller to the switch. These messages are used to directly manage the state of a switch. Controller-to-switch messages may or may not require a response from the switch.

The following table describes PicOS support for controller-to-switch messages:

Table 2   PicOS Support for OpenFlow Controller-to-Switch Messages

MessageSupportComments
OFPT_FEATURES_REQUESTSupported 

OFPT_FEATURES_REPLY

See Capabilities Supported by Datapath

  
OFPT_GET_CONFIG_REQUESTSupported 
OFPT_GET_CONFIG_REPLY  
OFPT_SET_CONFIGSupported 
OFPT_PACKET_OUTSupported 
OFPT_FLOW_MODSupported 
OFPT_GROUP_MODSupported 
OFPT_PORT_MODSupported 
OFPT_TABLE_MODSupported 

OFPT_MULTIPART_REQUEST

See Multipart Messages

Supported 

OFPT_MULTIPART_REPLY

See Multipart Messages

Supported 
OFPT_BARRIER_REQUESTSupported 
OFPT_BARRIER_REPLY  
OFPT_ROLE_REQUESTSupported 
OFPT_ROLE_REPLY  
OFPT_GET_ASYNC_REQUESTSupported 
OFPT_GET_ASYNC_REPLYSupported 
OFPT_SET_ASYNCSupported 
OFPT_METER_MODSupported 

Asynchronous Messages 

Asynchronous messages are sent from the switch to the controller. These messages are used to communicate network events and switch state changes to the controller. Asychronous messages are sent without a controller explicitly requesting them from a switch.

The following table describes PicOS support for asynchronous messages:

Table 3   PicOS Support for OpenFlow Asynchronous Messages

MessageSupportComments
OFPT_PACKET_INSupported 
OFPT_FLOW_REMOVEDSupported 
OFPT_PORT_STATUSSupported 
OFPT_ROLE_STATUSSupported 
OFPT_TABLE_STATUSSupported 
OFPT_REQUESTFORWARD  

Bundle Operations 

The following table describes PicOS support for bundle operations:

Table 4   PicOS Support for OpenFlow Bundle Operations

MessageSupportComments
OFPT_BUNDLE_CONTROLSupported 
OFPT_BUNDLE_ADD_MESSAGESupported 

Multipart Messages

The following table describes PicOS support for multipart messages: a single OpenFlow message cannot be larger than 64 kilobytes. Multipart messages are used to encode requests or replies that would carry a large amount of data, and would not always fit in a single OpenFlow message. The sender encodes the request or reply as a sequence of multipart messages with a specific multipart type. The receiver re-assembles the request or reply.

Table 5   PicOS Support for OpenFlow Multipart Messages

MessageSupportComments
OFPMP_DESCSupported 
OFPMP_FLOWSupported 
OFPMP_TABLESupported 
OFPMP_TABLE_DESCSupported 
OFPMP_TABLE_FEATURESSupported 
OFPMP_PORT_STATSSupported 
OFPMP_PORT_DESCRIPTIONSupported 
OFPMP_QUEUE_STATSNot Supported 
OFPMP_QUEUE_DESCSupported 
OFPMP_GROUPSupported 
OFPMP_GROUP_DESCSupported 
OFPMP_GROUP_FEATURESSupported 
OFPMT_METERSupported 
OFPMT_METER_CONFIGSupported 
OFPMT_METER_FEATURESSupported 
OFPMP_FLOW_MONITORSupported 
OFPMP_EXPERIMENTERNot Supported 

Capabilities Supported by Datapath

The controller sends an OFPT_FEATURES_REQUEST message to the switch once a session is established. The switch responds to the OFPT_FEATURES_REQUEST message with an OFPT_FEATURES_REPLY message. The OFPT_FEATURES_REPLY message has several fields, including the capabilities field. The capabilities field identifies the capabilities supported by the switch datapath.

The capabilties field is a combination of the following bits/flags:

Table 6   PicOS Support for OpenFlow Capabilities Supported by Datapath

SpecificationSupportComments
OFPC_FLOW_STATS
Supported 
OFPC_TABLE_STATS
Supported 
OFPC_PORT_STATS
Supported 
OFPC_GROUP_STATS
Supported 
OFPC_IP_REASM
  
OFPC_QUEUE_STATS
  
OFPC_PORT_BLOCKED  

OpenFlow Ports

OpenFlow ports are abstract network interfaces used for passing traffic between the OpenFlow switch and the rest of the network. An OpenFlow switch makes a number of OpenFlow ports available. The set of OpenFlow ports does not have to be identical to the set of physical network interfaces on the switch hardware.

Port Descriptions

The OpenFlow switch receives and sends packets on OpenFlow ports. The switch may define physical and logical ports. OpenFlow specification also defines some reserved ports.

Table 7   PicOS Support for OpenFlow Ports

SpecificationSupportComments
OFPP_MAX  
OFPP_IN_PORTSupported 
OFPP_TABLESupported 
OFPP_NORMALSupported 
OFPP_FLOODSupported 
OFPP_ALLSupported 
OFPP_CONTROLLERSupported 
OFPP_LOCALSupported 
OFPP_ANYSupported 

Port Administrative Settings

The following table describes PicOS support for administrative settings of OpenFlow ports:

Table 8   PicOS Support for OpenFlow Port Administrative Settings

SpecificationSupportComments
OFPPC_PORT_DOWN
Supported 
OFPPC_NO_RECV
  
OFPPC_NO_FWD
  
OFPPC_NO_PACKET_IN
  

Port States

The following table describes PicOS support for OpenFlow port states:

Table 9   PicOS Support for OpenFlow Port States

SpecificationSupportComments
OFPPS_LINK_DOWN
Supported 
OFPPS_BLOCKED
  
OFPPS_LIVE
  

Port Features

The following table describes PicOS support for OpenFlow port features available in the datapath:

 Table 10   PicOS Support for OpenFlow Port Features

SpecificationSupportComments
OFPPF_10MB_HD
  
OFPPF_10MB_FD
Supported 
OFPPF_100MB_HD  
OFPPF_100MB_FDSupported 
OFPPF_1GB_HD
  
OFPPF_1GB_FDSupported 
OFPPF_10GB_FD
Supported 
OFPPF_40GB_FD
Supported 
OFPPF_100GB_FD
Supported 
OFPPF_1TB_FD  
OFPPF_OTHER  
OFPPF_COPPER
Supported 
OFPPF_FIBERSupported 
OFPPF_AUTONEGSupported 
OFPPF_PAUSESupported 
OFPPF_PAUSE_ASYM  

OpenFlow Instructions

Each flow entry contains a set of instructions that are executed to match a packet to an entry. The following table details OpenFlow instructions supported by PicOS:

Table 11   PicOS Support for OpenFlow Instructions

SpecificationSupportComments
OFPIT_GOTO_TABLESupportedonly next-table-id;  is executed last.
OFPIT_WRITE_METADATASupported 
OFPIT_WRITE_ACTIONSSupported 
OFPIT_APPLY_ACTIONSSupported 
OFPIT_CLEAR_ACTIONSSupported 
OFPIT_METERSupported 
OFPIT_EXPERIMENTER  

OpenFlow Action Types

The following table details OpenFlow action types supported by PicOS:

Table 12   PicOS Support for OpenFlow Action Types

SpecificationSupportComments
OFPAT_OUTPUTSupported 
OFPAT_COPY_TTL_OUTSupported 
OFPAT_COPY_TTL_INSupported 
OFPAT_SET_MPLS_TTLSupported 
OFPAT_DEC_MPLS_TTLNot Supported 
OFPAT_PUSH_VLANSupported 
OFPAT_POP_VLANSupported 
OFPAT_PUSH_MPLSSupported 
OFPAT_POP_MPLSSupported 
OFPAT_SET_QUEUESupported 
OFPAT_GROUPSupported 
OFPAT_SET_NW_TTLNot Supported 
OFPAT_DEC_NW_TTLNot Supported 
OFPAT_SET_FIELDSupported 
OFPAT_PUSH_PBBSupported 
OFPAT_POP_PBBSupported 
OFPAT_EXPERIMENTERNot Supported 

OpenFlow Match Fields

A match field may include the packet header, the ingress port, and the metadata value. A match field may use wildcards to match any value and, in some cases, bitmasks. A packet is matched against a match field.

The following table details the OXM flow match field types supported by PicOS:

Table 13   PicOS Support for OpenFlow Flow Match Fields

SpecificationSupportComments
OFPXMT_OFB_IN_PORTSupported 
OFPXMT_OFB_IN_PHY_PORTSupported 
OFPXMT_OFB_METADATA  
OFPXMT_OFB_ETH_DSTSupported 
OFPXMT_OFB_ETH_SRCSupported 
OFPXMT_OFB_ETH_TYPESupported 
OFPXMT_OFB_VLAN_VIDSupported 
OFPXMT_OFB_VLAN_PCPSupported 
OFPXMT_OFB_IP_DSCPSupported 
OFPXMT_OFB_IP_ECN  
OFPXMT_OFB_IP_PROTOSupported 
OFPXMT_OFB_IPV4_SRCSupported 
OFPXMT_OFB_IPV4_DSTSupported 
OFPXMT_OFB_TCP_SRCSupported 
OFPXMT_OFB_TCP_DSTSupported 
OFPXMT_OFB_UDP_SRCSupported 
OFPXMT_OFB_UDP_DSTSupported 

OFPXMT_OFB_SCTP_SRC

  
OFPXMT_OFB_SCTP_DST  
OFPXMT_OFB_ICMPV4_TYPESupported 
OFPXMT_OFB_ICMPV4_CODESupported 
OFPXMT_OFB_ARP_OPSupported 
OFPXMT_OFB_ARP_SPASupported 
OFPXMT_OFB_ARP_TPASupported 
OFPXMT_OFB_ARP_SHA  

OFPXMT_OFB_ARP_THA

  
OFPXMT_OFB_IPV6_SRCSupported 
OFPXMT_OFB_IPV6_DSTSupported 
OFPXMT_OFB_IPV6_FLABELSupported 
OFPXMT_OFB_ICMPV6_TYPE  
OFPXMT_OFB_ICMPV6_CODE  
OFPXMT_OFB_IPV6_ND_TARGET  
OFPXMT_OFB_IPV6_ND_SLL  
OFPXMT_OFB_IPV6_ND_TLL  
OFPXMT_OFB_MPLS_LABEL  
OFPXMT_OFB_MPLS_TC  
OFPXMT_OFP_MPLS_BOS  
OFPXMT_OFB_PBB_ISIDSupported 
OFPXMT_OFB_TUNNEL_IDSupported 
OFPXMT_OFB_IPV6_EXTHDR  
OFPXMT_OFB_PBB_UCA  

OpenFlow Group Types

The following table describes PicOS support for OpenFlow group types:

Table 14   PicOS Support for OpenFlow Group Types

SpecificationSupportComments
OFPGT_ALLSupported 
OFPGT_SELECTSupported 
OFPGT_INDIRECTSupported 
OFPGT_FFSupported 


Copyright © 2024 Pica8 Inc. All Rights Reserved.