Internet Engineering Task Force E. Haleplidis Internet-Draft University of Patras Intended status: Informational O. Cherkaoui Expires: November 26, 2012 University of Quebec in Montreal S. Hares Huawei W. Wang Zhejiang Gongshang University May 25, 2012 Forwarding and Control Element Separation (ForCES) OpenFlow Model Library draft-haleplidis-forces-openflow-lib-00 Abstract This document describes the OpenFlow switch in Logical Function Blocks (LFBs) used in the Forwarding and Control Element Separation (ForCES). The LFB classes are defined according to the ForCES Forwading Element (FE) model and ForCES protocol specifications. The library includes the descriptions of the OpenFlow LFBs and the XML definitions. Status of this Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on November 26, 2012. Copyright Notice Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents Haleplidis, et al. Expires November 26, 2012 [Page 1] Internet-Draft ForCES OpenFlow library May 2012 (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1. ForCES . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2. OpenFlow . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Terminology and Conventions . . . . . . . . . . . . . . . . . 7 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 7 2.2. Definitions . . . . . . . . . . . . . . . . . . . . . . . 7 3. OpenFlow ForCES library . . . . . . . . . . . . . . . . . . . 10 3.1. OpenFlow Specification . . . . . . . . . . . . . . . . . . 10 3.2. ForCES-based OpenFlow Specification . . . . . . . . . . . 12 4. OpenFlow Base Types . . . . . . . . . . . . . . . . . . . . . 17 4.1. Data Types . . . . . . . . . . . . . . . . . . . . . . . . 17 4.1.1. Atomic . . . . . . . . . . . . . . . . . . . . . . . . 17 4.1.2. Compound Struct . . . . . . . . . . . . . . . . . . . 17 4.1.3. Compound Array . . . . . . . . . . . . . . . . . . . . 19 4.2. Frame Types . . . . . . . . . . . . . . . . . . . . . . . 19 4.3. MetaData Types . . . . . . . . . . . . . . . . . . . . . . 19 5. OpenFlow LFBs . . . . . . . . . . . . . . . . . . . . . . . . 21 5.1. OpenFlowSwitchLFB . . . . . . . . . . . . . . . . . . . . 21 5.1.1. Data Handling . . . . . . . . . . . . . . . . . . . . 21 5.1.2. Components . . . . . . . . . . . . . . . . . . . . . . 21 5.1.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 22 5.1.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 22 5.2. OFFlowTableLFB . . . . . . . . . . . . . . . . . . . . . . 22 5.2.1. Data Handling . . . . . . . . . . . . . . . . . . . . 22 5.2.2. Components . . . . . . . . . . . . . . . . . . . . . . 24 5.2.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 25 5.2.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 25 5.3. OFGroupTableLFB . . . . . . . . . . . . . . . . . . . . . 25 5.3.1. Data Handling . . . . . . . . . . . . . . . . . . . . 25 5.3.2. Components . . . . . . . . . . . . . . . . . . . . . . 25 5.3.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 26 5.3.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 26 5.4. OFPortLFB . . . . . . . . . . . . . . . . . . . . . . . . 26 5.4.1. Data Handling . . . . . . . . . . . . . . . . . . . . 26 5.4.2. Components . . . . . . . . . . . . . . . . . . . . . . 26 5.4.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 27 5.4.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 27 Haleplidis, et al. Expires November 26, 2012 [Page 2] Internet-Draft ForCES OpenFlow library May 2012 5.5. OFQueueLFB . . . . . . . . . . . . . . . . . . . . . . . . 27 5.5.1. Data Handling . . . . . . . . . . . . . . . . . . . . 27 5.5.2. Components . . . . . . . . . . . . . . . . . . . . . . 27 5.5.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 28 5.5.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 28 5.6. OFActionSetLFB . . . . . . . . . . . . . . . . . . . . . . 28 5.6.1. Data Handling . . . . . . . . . . . . . . . . . . . . 28 5.6.2. Components . . . . . . . . . . . . . . . . . . . . . . 28 5.6.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 28 5.6.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 29 5.7. OFActionLFB . . . . . . . . . . . . . . . . . . . . . . . 29 5.7.1. Data Handling . . . . . . . . . . . . . . . . . . . . 29 5.7.2. Components . . . . . . . . . . . . . . . . . . . . . . 29 5.7.3. Capabilities . . . . . . . . . . . . . . . . . . . . . 29 5.7.4. Events . . . . . . . . . . . . . . . . . . . . . . . . 29 5.8. OFActionLFBs . . . . . . . . . . . . . . . . . . . . . . . 29 5.8.1. OFOutputOFActionLFB . . . . . . . . . . . . . . . . . 29 5.8.2. OFSetVLANVIDOFActionLFB . . . . . . . . . . . . . . . 30 5.8.3. OFSetVLANPriorityOFActionLFB . . . . . . . . . . . . . 30 5.8.4. OFSetMACSourceOFActionLFB . . . . . . . . . . . . . . 31 5.8.5. OFSetMACDestinationOFActionLFB . . . . . . . . . . . . 31 5.8.6. OFSetIPSourceOFActionLFB . . . . . . . . . . . . . . . 31 5.8.7. OFSetIPDestinationOFActionLFB . . . . . . . . . . . . 31 5.8.8. OFSetIPTOSOFActionLFB . . . . . . . . . . . . . . . . 32 5.8.9. OFSetIPECNOFActionLFB . . . . . . . . . . . . . . . . 32 5.8.10. OFSetTCPSourceOFActionLFB . . . . . . . . . . . . . . 32 5.8.11. OFSetTCPDestinationOFActionLFB . . . . . . . . . . . . 32 5.8.12. OFCopyTTLOutOFActionLFB . . . . . . . . . . . . . . . 33 5.8.13. OFCopyTTLInOFActionLFB . . . . . . . . . . . . . . . . 33 5.8.14. OFSetMPLSLabelOFActionLFB . . . . . . . . . . . . . . 33 5.8.15. OFSetMPLSTCOFActionLFB . . . . . . . . . . . . . . . . 33 5.8.16. OFSetMPLSTTLOFActionLFB . . . . . . . . . . . . . . . 34 5.8.17. OFDecrementMPLSTTLOFActionLFB . . . . . . . . . . . . 34 5.8.18. OFPushVLanOFActionLFB . . . . . . . . . . . . . . . . 34 5.8.19. OFPopVLANOFActionLFB . . . . . . . . . . . . . . . . . 35 5.8.20. OFPushMPLSOFActionLFB . . . . . . . . . . . . . . . . 35 5.8.21. OFPopMPLSOFActionLFB . . . . . . . . . . . . . . . . . 35 5.8.22. OFSetQueueOFActionLFB . . . . . . . . . . . . . . . . 35 5.8.23. OFSetIPTTLOFActionLFB . . . . . . . . . . . . . . . . 36 5.8.24. OFDecrementIPTTLOFActionLFB . . . . . . . . . . . . . 36 5.8.25. OFExperimenterOFActionLFB . . . . . . . . . . . . . . 36 6. XML for OpenFlow library . . . . . . . . . . . . . . . . . . . 37 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 87 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 88 9. Security Considerations . . . . . . . . . . . . . . . . . . . 89 10. References . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10.1. Normative References . . . . . . . . . . . . . . . . . . . 90 10.2. Informative References . . . . . . . . . . . . . . . . . . 91 Haleplidis, et al. Expires November 26, 2012 [Page 3] Internet-Draft ForCES OpenFlow library May 2012 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 92 Haleplidis, et al. Expires November 26, 2012 [Page 4] Internet-Draft ForCES OpenFlow library May 2012 1. Introduction The purpose of this document is to create a library of Logical Functional Blocks that are necessary to describe an OpenFlow switch using the ForCES model. This includes DataTypes, MetaData and of course the LFBs. Readers of this document can get a better understanding of what are the internal parts of an OpenFlow switch in a more formal approach. Additionally having a ForCES-defined OpenFlow switch developers can build a middleware so that a ForCES-implemented OpenFlow switch may be controlled by an OpenFlow controller, or a ForCES Control Element (CE) may control an OpenFlow switch. 1.1. ForCES ForCES [RFC3746], focuses on the communication and model necessary to separate control-plane functionality such as routing protocols, signaling protocols, and admission control, from data-forwarding- plane per-packet activities, such as packet forwarding, queuing, and header editing. The modeling of FEs is based on an abstraction using distinct Logical Functional Blocks (LFBs), which are interconnected in a directed graph, and receive, process, modify, and transmit packets along with metadata. An LFB is a block of encapsulated fine-grained operation of the forwarding plane. The ForCES model [RFC5812] additionally includes both a capability and a state model. One of the advantages of the ForCES Model is that it is independent of the actual implementation of the FE; it only provides a view of its capabilities and state that can be acted upon using the ForCES protocol. It is left to the forwarding plane developers to define how the FE functionality is represented using the model. The ForCES protocol [RFC5810] was developed to allow the CEs to determine the capabilities of each FE expressed by the FE model, to add and remove entries, parameters, query for statistics, and register for and receive events in a scalable fashion over secure and reliable means. The strength of the ForCES protocol stems from the fact that it is agnostic of the model, as a CE can control any Forwarding Element described with the ForCES model. 1.2. OpenFlow OpenFlow [OpenFlowSpec1.1] is conceptually similar to ForCES on separating the control and forwarding plane. It provides a protocol that mediates between the controller and the switch. Unlike ForCES, the OpenFlow switch is statically defined to deal with flows and the Haleplidis, et al. Expires November 26, 2012 [Page 5] Internet-Draft ForCES OpenFlow library May 2012 protocol is aware of the flow components. An OpenFlow Switch consists of one or more flow tables, a group table that performs packet lookups and forwarding, and an OpenFlow channel to an external controller. A flow table is consisted of flow entries, each containing a set of match fields to match against packets, counters and instructions. The controller manages the switch via the OpenFlow protocol. Using this protocol, the controller can add, update, and delete flow entries. Haleplidis, et al. Expires November 26, 2012 [Page 6] Internet-Draft ForCES OpenFlow library May 2012 2. Terminology and Conventions 2.1. Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. 2.2. Definitions This document follows the terminology defined by ForCES related documents of RFC3654, RFC3746, RFC5810,RFC5811,RFC5812,RFC5812. The definitions are repeated below for clarity. Also additional definitions from the OpenFlow specification 1.1 [OpenFlowSpec1.1] are also included. Control Element (CE) - A logical entity that implements the ForCES protocol and uses it to instruct one or more FEs on how to process packets. CEs handle functionality such as the execution of control and signaling protocols. Forwarding Element (FE) - A logical entity that implements the ForCES protocol. FEs use the underlying hardware to provide per- packet processing and handling as directed/controlled by one or more CEs via the ForCES protocol. LFB (Logical Functional Block) - The basic building block that is operated on by the ForCES protocol. The LFB is a well defined, logically separable functional block that resides in an FE and is controlled by the CE via the ForCES protocol. The LFB may reside at the FE's datapath and process packets or may be purely an FE control or configuration entity that is operated on by the CE. Note that the LFB is a functionally accurate abstraction of the FE's processing capabilities, but not a hardware-accurate representation of the FE implementation. LFB Class and LFB Instance - LFBs are categorized by LFB Classes. An LFB Instance represents an LFB Class (or Type) existence. There may be multiple instances of the same LFB Class (or Type) in an FE. An LFB Class is represented by an LFB Class ID, and an LFB Instance is represented by an LFB Instance ID. As a result, an LFB Class ID associated with an LFB Instance ID uniquely specifies an LFB existence. LFB Metadata - Metadata is used to communicate per-packet state from one LFB to another, but is not sent across the network. The FE model defines how such metadata is identified, produced, and consumed by the LFBs. It defines the functionality but not how Haleplidis, et al. Expires November 26, 2012 [Page 7] Internet-Draft ForCES OpenFlow library May 2012 metadata is encoded within an implementation. LFB Components - Operational parameters of the LFBs that must be visible to the CEs are conceptualized in the FE model as the LFB components. The LFB components include, for example, flags, single-parameter arguments, complex arguments, and tables that the CE can read and/or write via the ForCES protocol (see below). ForCES Protocol - While there may be multiple protocols used within the overall ForCES architecture, the term "ForCES protocol" and "protocol" refer to the "Fp" reference points in the ForCES framework in [RFC3746]. This protocol does not apply to CE-to-CE communication, FE-to-FE communication, or to communication between FE and CE managers. Basically, the ForCES protocol works in a master-slave mode in which FEs are slaves and CEs are masters. ForCES Protocol Transport Mapping Layer (ForCES TML) - A layer in ForCES protocol architecture that uses the capabilities of existing transport protocols to specifically address protocol message transportation issues, such as how the protocol messages are mapped to different transport media (like TCP, IP, ATM, Ethernet, etc.), and how to achieve and implement reliability, multicast, ordering, etc. The ForCES TML specifications are detailed in separate ForCES documents, one for each TML. OpenFlow pipeline - the set of linked flow tables that provide matching, forwarding, and packet modifications in an OpenFlow switch. Match Field - a field against which a packet is matched, including packet headers, the ingress port, and the metadata value. Instruction - an operation that either contains a set of actions to add to the action set, contains a list of actions to apply immediately to the packet, or modifies pipeline processing. Action - an operation that forwards the packet to a port or modifies the packet, such as decrementing the TTL field. Actions may be specified as part of the instruction set associated with a flow entry or in an action bucket associated with a group entry. Action Set - a set of actions associated with the packet that are accumulated while the packet is processed by each table and that are executed when the instruction set instructs the packet to exit the processing pipeline. Haleplidis, et al. Expires November 26, 2012 [Page 8] Internet-Draft ForCES OpenFlow library May 2012 Action Bucket - a set of actions and associated parameters, defined for groups. Group - a list of action buckets and some means of choosing one or more of those buckets to apply on a per-packet basis. Haleplidis, et al. Expires November 26, 2012 [Page 9] Internet-Draft ForCES OpenFlow library May 2012 3. OpenFlow ForCES library 3.1. OpenFlow Specification An OpenFlow switch as described in the OpenFlow Specification document [OpenFlowSpec1.1] appears in Figure 1 +---------+ +---------+ +---------+ | | | | | | | Port | | Group | | Port | | | | Table | | | +---------+ +---------+ +---------+ | M1: Ingress Port /\ | M2: Action Set{} | \/ | +---------+ +---------+ +---------+ +---------+ | | M1 | | M1 | | M2 | Execute | | Flow | ---> | Flow | -->...---> | Flow | ---> | Action | | Table 0 | M2 | Table 1 | M2 | Table N | | Set | +---------+ M3 +---------+ M3 +---------+ +---------+ Figure 1: OpenFlow switch datapath A frame enters the switch through a Port and is passed on the first Flow Table along with the Ingress Port as a Metadata (M1). Additionally each frame carries around a list of actions, called Action Set (M2), which have initially no actions in it. The Action Set will be executed at the end of the DataPath. After the first Flow Table another metadata called Metadata (M3) also accompanies the frame. This data inside the metadata is written by the Flow Tables using the Write Metadata action. Each Flow Table performs a match based on certain fields (e.g IP Source Address or Source MAC Address) and then perform a specific instruction if there is a match. If no match occurs, the frame is processed based on the Flow Table's configuration. The choices are either: a. Forward to the OpenFlow controllers b. Send to the next flow table c. Drop the frame The list of actions a Flow Table may perform upon a match are: Haleplidis, et al. Expires November 26, 2012 [Page 10] Internet-Draft ForCES OpenFlow library May 2012 o Apply a List of actions o Clear the Action Set o Write a List of actions on the action set o Write Metadata o Go to Flow Table The Goto Flow table allows a FlowTable X to send the packet and metadata to any FlowTable Y, provided that X>Y The list of actions the Flow Table can perform or write in the Action Set is: o Setting of a field o Push or Pop tags o Copy TTL inwards or outwards o Decrease TTLs o Output the packet o Apply QoS to a packet o Apply the packet to a group o Additionally a Flow Table may drop the packet as an action. The drop action is implicit based on the Flow Table's configuration. An Action Set contains a maximum of one action of each of the following types which MUST be executed in the order specified below regardless of the order they were added to the Action Set. The output action in the action set is executed last. If both an output action and a group action are specified in an action set, the output action is ignored and the group action takes precedence. If no output action and no group action were specified in an action set, the packet is dropped. 1. Copy TTL outwards 2. Pop a tag 3. Push a tags Haleplidis, et al. Expires November 26, 2012 [Page 11] Internet-Draft ForCES OpenFlow library May 2012 4. Copy TTL outwards 5. Decrease TTL 6. Setting of a field 7. Apply QoS to a packet 8. Apply the packet to a group 9. Output the packet The Group Table contains a set of actions, called action buckets which can be applied to a group of packets that don't have the same set of matching fields. This alleviates the problem of having to set up the same set of actions in flow tables for different set of matching fields by having these set of actions in one place only. 3.2. ForCES-based OpenFlow Specification ForCES models FEs using LFBs, fine-grained operations of the forwarding plane. It is logical to have at least the following LFB classes: 1. OFPortLFB 2. OFFlowTableLFB 3. OFGroupTableLFB 4. OFActionSetLFB However, since the OFFlowTableLFB contains multiple operations like matching and all the probable actions, it seems reasonable to separate each action as a separate LFB that performs that specific action. For each packet, the OFFlowTable will check for a match, and then upon that, decide the appropriate order of action LFB(s) the packet will be sent to. Once the packet has been processed from an Action LFB, it MUST be returned to the OFFlowTableLFB instance that made that call. Each OFFlowTable could have its own set of instances of Action LFBs, or there could be only one or some instances of Action LFBs. Figure 2 depicts how an OFFlowTable with its own set of ActionLFBs look like. Figure 3 depicts how multiple OFFlowTables work with a shared set of ActionLFBs look like. Figure 4 depicts how a OFGroupTableLFB works with a shared set of ActionLFBs. Haleplidis, et al. Expires November 26, 2012 [Page 12] Internet-Draft ForCES OpenFlow library May 2012 FlowTableIndex FlowTableIndex +------+ ActionIndex ActionIndex +---------+ | Push | Packet(2) Packet(1) | Set | | Vlan |<---------+ +----------->| IP | |Header| | | | Address | +------+ | | +---------+ | | | | | Packet(3) +--------+ Packet(2) | +------------>| |<------------+ | | ---------------------->| OFFlow |----------------------> Packet+M1,M2,M3 | Table | Packet(3)+M1,M2,M3 | | FlowTableIndex | | +---------+ <------- | | |Decrement| Packet | | | IP TTL | +--------+ | | Packet(1) ^ +---------+ -------------+ Figure 2: ForCES FlowTable with each own set of ActionLFBs M4: FlowTableIndex M5: ActionIndex P: Packet +------+ M5: ActionIndex, P(2) +---------------------------->| Push |<--------------------------+ | +-----------------------<| Vlan | | | | +---------->|Header|----------------------+ | | | | +-------<| | Packet(3) | | | | P(1) M4 | | +------+ | | | | M5 | |P(2) | | | \/ P(1)| \/ \/ | +---------+ P(1) +---------+ P(2) +---------+ P(2) +---------+ | | M1 | | M1 | | M2 | Execute | | Flow | ---> | Flow | -->...---> | Flow | ---> | Action | | Table 0 | M2 | Table 1 | M2 | Table N | | Set | +---------+ M3 +---------+ M3 +---------+ +---------+ Figure 3: Multiple ForCES FlowTables with a common ActionLFB Haleplidis, et al. Expires November 26, 2012 [Page 13] Internet-Draft ForCES OpenFlow library May 2012 +---------+ P(2), M5 | Set IP |<-----------------+ | Address | | | |--------------+ | +---------+ P(3) | | | | M4: FlowTableIndex | | M5: ActionIndex \/ | P: Packet +------+ P(1), M5 +---------+ +---------------->| Push | <--------- | Group | | +-----------<| Vlan | | Table | | | |Header| ---------> | | | | P(1) +------+ P(2) +---------+ | | P(1) /\ | P(3) | | M6: GroupIndex | | | \/ M4 | \/ +---------+ P(1) +---------+ P(1) +---------+ P(3) +---------+ | | M1 | | M1 | | M2 | Execute | | Flow | ---> | Flow | -->...---> | Flow | ---> | Action | | Table 0 | M2 | Table 1 | M2 | Table N | | Set | +---------+ M3 +---------+ M3 +---------+ +---------+ Figure 4: ForCES FlowTables and GroupTable with a common ActionLFB Current specified Action LFBs are: Output Actions o OFOutputOFActionLFB Set Queue Actions o OFSetQueueOFActionLFB Push/Pop Tag Actions o OFPushVLanOFActionLFB o OFPopVLANOFActionLFB o OFPushMPLSOFActionLFB o OFPopMPLSOFActionLFB Set Actions Haleplidis, et al. Expires November 26, 2012 [Page 14] Internet-Draft ForCES OpenFlow library May 2012 o OFSetMACSourceOFActionLFB o OFSetMACDestinationOFActionLFB o OFSetVLANVIDOFActionLFB o OFSetVLANPriorityOFActionLFB o OFSetMPLSLabelOFActionLFB o OFSetMPLSTCOFActionLFB o OFSetMPLSTTLOFActionLFB o OFDecrementMPLSTTLOFActionLFB o OFSetIPSourceOFActionLFB o OFSetIPDestinationOFActionLFB o OFSetIPTOSOFActionLFB o OFSetIPECNOFActionLFB o OFSetIPTTLOFActionLFB o OFDecrementIPTTLOFActionLFB o OFSetTCPSourceOFActionLFB o OFSetTCPDestinationOFActionLFB o OFCopyTTLOutOFActionLFB o OFCopyTTLInOFActionLFB Experimenter Actions o OFExperimenterOFActionLFB Most Action LFBs have data associated with the action stored in a table. The sender of a packet needs to send additionally an index pointing to the action that needs to be done. Each Action LFB has one group input port that accepts a packet, the instance of the LFB that sent the packet, so that it can be returned after the action has been performed, and optionally the Action Index. Additionally each Action LFB has one group output port that returns the altered packet to the sender. Since the action LFBs have these ports in common and Haleplidis, et al. Expires November 26, 2012 [Page 15] Internet-Draft ForCES OpenFlow library May 2012 the ForCES model can support augmentation of LFB classes, similar to inheritance in object oriented programming, an OFActionLFB has been specified from which all Action LFBs are derived from. The Action LFBs can be used by the OFGroupTableLFB as well as the OFActionSetLFB using the same input and output port. Additionally each OFFlowTable can output a packet to a specific port. This creates a topology of almost full mesh connections for the LFBs. Figure 5 shows an example of a topology and how the various LFBs are interconnected. The topology information can be obtained by the FEObject's LFBTopology. +--------+ +--------+ +--------+ +--------+ | | | | | | | | | OFPort | | OFPort | | OFPort | | OFPort | | | | | | | | | +--------+ +--------+ +--------+ +--------+ | | | | | | | | +--------------+--------------------+----------------+--------+ | | | | | | | | | | +--------+ +--------+ +--------+ +--------+ | | | --> | | | | | | | | OFFlow | | OFFlow |--+---+--> | OFFlow |-+--+->|OFAction| | | Table 0|--+ | Table 1| | /\ | Table N| /\ /\ | Set | | +--------+ | +--------+ | | +--------+ | | +--------+ | | | | | | | | | | | | | | +-------------------+ | | | | | | | | | | | | +------------------+------------------+ | | | | | | | +---------------+--------------+----+--------+--------+---+ | | | | | | | +--------+ +--------+ +--------+ +--------+ +-------+ | | | | | | | | | | |OFAction| |OFAction| |OFAction| |OFAction| |OFGroup| | | | | | | | | |Table | +--------+ +--------+ +--------+ +--------+ +-------+ Figure 5: ForCES OpenFlow Switch example LFB connectivity Haleplidis, et al. Expires November 26, 2012 [Page 16] Internet-Draft ForCES OpenFlow library May 2012 4. OpenFlow Base Types 4.1. Data Types Data types defined in the OpenFlow library are categorized by types of atomic, compound struct, and compound array. 4.1.1. Atomic The following data types are defined as atomic data types in the OpenFlow library: +-------------------------+-----------------------------------------+ | Data Type Name | Brief Description | +-------------------------+-----------------------------------------+ | MPLSLabelValue | An MPLS label | | | | | MPLSTrafficClassValues | The MPLS Traffic Class | | | | | IPv4ToSbits | TOSBits | | | | | ActionType | The possible actions | | | | | InstructionTypes | Instructions supported | | | | | FlowTableMissConfigType | Types to configure the default behavior | | | of unmatched packets | | | | | BufferReasonTypes | Buffer Reason Types | | | | | GroupTypeType | To determine group semantics | | | | | PortNumberType | Port Number values | | | | | QueuePropertyType | Property type for a queue | | | | | ActionSetType | The actionset type. 9 possible values. | +-------------------------+-----------------------------------------+ OpenFlow Atomic Types 4.1.2. Compound Struct The following data types are defined as struct data types in the OpenFlow library: Haleplidis, et al. Expires November 26, 2012 [Page 17] Internet-Draft ForCES OpenFlow library May 2012 +--------------------------+----------------------------------------+ | Data Type Name | Brief Description | +--------------------------+----------------------------------------+ | SwitchDescriptionType | Fields of the switch description | | | | | WildcardsType | Wildcards for fields | | | | | MatchFieldType | A Match Field Type | | | | | FlowEntry | A Flow entry | | | | | ActionRowType | An Action Row for the action table | | | | | TableCounterType | Counter per table | | | | | FlowCounterType | Counter per flow | | | | | WriteMetadataTableType | Metadata and mask for the write | | | metadata instruction per row | | | | | GroupCounterType | Counters per group | | | | | BucketCounterType | Counters per bucket | | | | | GroupTableEntry | A Row of the Group Table | | | | | ActionBucket | An Action Bucket | | | | | PortConfigurationType | Types of configuration for the | | | OpenFlow port | | | | | PortStateType | Current State of the port | | | | | PortFeaturesType | Port Features | | | | | PortCounterType | Counter per port | | | | | QueueArrayPropertiesType | Type Definition for property | | | | | QueueCounterType | Counters per queue | | | | | ActionSetRowType | The ActionSet Row Type | +--------------------------+----------------------------------------+ OpenFlow Struct Types Haleplidis, et al. Expires November 26, 2012 [Page 18] Internet-Draft ForCES OpenFlow library May 2012 4.1.3. Compound Array The following data types are defined as an array data type in the OpenFlow library +-----------------+-------------------------------------------------+ | Data Type Name | Brief Description | +-----------------+-------------------------------------------------+ | Actions | Actions to perform. An Array of ActionRowTypes | | | | | ActionSetPacket | The Action Set per packet | +-----------------+-------------------------------------------------+ OpenFlow Array Types 4.2. Frame Types No frames are specified in the LFB library as the required have already been defined in the Base LFB Library [I-D.ietf-forces-lfb-lib]. 4.3. MetaData Types The following metadata are defined in the OpenFlow type library: +-----------------------+----------+--------------------------------+ | MetaData Name | MetaData | Brief Description | | | ID | | +-----------------------+----------+--------------------------------+ | IngressPort | 1024 | The Ingress port the packet | | | | has arrived from. | | | | | | ActionSet | 1025 | The action set that is passed | | | | along flow tables. This is an | | | | index that points to a row in | | | | the ActionSetTable array in | | | | the ActionSetLFB | | | | | | Arbitrary | 1026 | Arbitrary metadata of uint64 | | | | | | FlowTableInstanceID | 1027 | uint32 | | | | | | ActionSetIndex | 1028 | uint32 | | | | | | GroupIndex | 1029 | uint32 | | | | | | LFBClassIDMetadata | 1030 | uint32 | | | | | Haleplidis, et al. Expires November 26, 2012 [Page 19] Internet-Draft ForCES OpenFlow library May 2012 | LFBInstanceIDMetadata | 1031 | uint32 | +-----------------------+----------+--------------------------------+ OpenFlow Metadata Types Haleplidis, et al. Expires November 26, 2012 [Page 20] Internet-Draft ForCES OpenFlow library May 2012 5. OpenFlow LFBs 5.1. OpenFlowSwitchLFB Similar to the concept of the FEProtocol LFB and the FEObject LFB, the OpenFlowSwitchLFB contains information and configuration parameters regarding the functionality of the switch but play no role in the datapath processing. Therefore there are no input or output ports. 5.1.1. Data Handling This LFB does not handle data. 5.1.2. Components The DatapathID component, a unsigned integer of 64 bits, uniquely identifies a datapath. The lower 48 bits are intended for the switch MAC address, while the top 16 bits are up to the implementer. The MissSendLen component, an unsigned integer of 16 bits, defines the maximum number of bytes of new flow that datapath should send to the controller. The HandleFragments component, a Boolean, defines what the switch does with fragments. If true the switch will drop fragments. If false there is no special handling. The ReassembleFragments component, a Boolean, defines if the switch will reassemble fragments. The InvalidTTLtoController component, a Boolean, defines whether the switch will send packets with invalid TTL to the controller. The SwitchDescription component, a structure, contains the following information about the switch: o Manufacturer description o Hardware description o Software description o Serial Number o Human readable description of datapath Lastly the Ports component is an array which contains in its rows, Haleplidis, et al. Expires November 26, 2012 [Page 21] Internet-Draft ForCES OpenFlow library May 2012 all the port numbers. 5.1.3. Capabilities The following capabilities have been defined for the OpenFlowSwitch LFB An assortment of Boolean type capabilities to define: o FlowStatistics. If the switch keeps flow statistics o TableStatistics. If the switch keep table statistics o PortStatistics. If the switch keep port statistics o GroupStatistics. If the switch keep group statistics o IPReassembly. If the switch can reassemble IP fragments o QueueStats. If the switch keeps queue statistics o ARPMatchIP. If the switch matches IP addresses in APR packets The MaxBufferedPackets capability, an unsigned integer of 32 bits, defines the maximum packets the switch can buffer when sending packets to the controller. The TablesSupported capability, an unsigned integer of 8 bits, defines the number of tables supported by the switch, each of which can have a different set of supported wildcard bits and number of entries. Additionally the another capability, the ActionSupported, defines the supported actions for the switch. 5.1.4. Events Three events have been specified regarding the ports. The first event will be triggered when a new port is added to the switch, the second when a port has been removed from the switch and the third when a port has been modified 5.2. OFFlowTableLFB 5.2.1. Data Handling The OFFlowTableLFB describes the process of selecting packets and classify them into specific flows based on specific match fields Haleplidis, et al. Expires November 26, 2012 [Page 22] Internet-Draft ForCES OpenFlow library May 2012 assigned by the controller. The LFB is expected to receive all types of Ethernet packets through a group input named Input Port, either from a OFPortLFB or a OFFlowTableLFB, along with metadata. The metadata will contain only the Ingress Port if the OFFlowTableLFB is receiving packets from the OFPortLFB, or the IngressPort, the ActionSetIndex metadata and an arbitrary Metadata of an unsigned integer of 64 bits if receives packets from another OFFlowTableLFB. The OFFlowTableLFB compares the packet with the MatchFields inside the FlowEntries Table. If there is no match, depending upon the MissBehaviour component, the LFB may either send the packet to the controller, send it to the next table in the pipeline, or even drop it. If there is a match the LFB will decide based on the InstructionType of the struct Instructions inside the matched FlowEntry. If the instruction is Apply Actions, the LFB will use the InstructionIndex to find the Actions inside the ApplyActionTable. Each row of the ApplyActionTable is an array containing rows of ActionRowTypes. For every ActionRowType, the LFB will send the packet to the corresponding Action LFB through the group output ActionPort port alongside with the LFBClassIDMetadata and LFBInstanceIDMetadata of the LFB and the ActionIndex, if the specific action has any parameters, like the Set MAC Address action. The ActionIndex is used as an index for the table inside the Action LFB. The packet is then returned from the Action LFB through the group input port PacketReturn to continue further processing if exists. One exception to the Action LFBs is the Group action. Instead there is the OFGroupLFB which handle groups. The OFFlowTableLFB using the ActionIndex locates the Group Identifier in the OFFlowTableLFB's GroupTable component. Then it sends the packet to the GroupTableLFB using the group output ActionPort and expects the packet to return through the PacketReturn group input port. If the instruction is Clear Actions, the LFB will use the ActionSetIndex to locate the entry in the ActionSet and remove all the rows of Actions. The ActionSet is an alias with the actual data located in the ActionSetLFB. If the instruction is Write Actions, the LFB will use the ActionSetIndex to locate the entry in the ActionSet and add all the rows of Actions with the Actions located in the ApplyActionTable in the row with the Index InstructionIndex. If the instruction is Write Metadata, the LFB will write the Metadata Haleplidis, et al. Expires November 26, 2012 [Page 23] Internet-Draft ForCES OpenFlow library May 2012 using the InstructionIndex to find the value in the WriteMetadataValue Table. If the instruction is Goto Table, the LFB will use the InstructionIndex to find the value OFFlowTableLFB InstanceID in the GoToFlowTable table and send the packet using the group OutputPort to send the packet to the corresponding OFFlowTableLFB along with IngressPort, the ActionSetIndex and the Metadata. 5.2.2. Components A FlowTableID component holds the flow table sequence number. The FlowEntries component defines the MatchField, the Counters and the instructions of the OpenFlow switch. It is an array and each row of the array is a struct containing the cookie, the MatchFields, the Counters, the Instructions, the Timeouts, the Timers and the priority of the specific flow entry. The FlowTableCounter is a component for counters of the whole FlowTable. The ApplyActionTable is a component to maintain the actions required per flow. It is an array of Actions, which is an array of a struct of ActionType and ActionTableIndex. The WriteActions is a component to maintain the actions to be writen for a write actions instruction. It is an array of Actions, which is an array of a struct of ActionType and ActionTableIndex. The WriteMetadataTable is a component to hold the metadata values required for the write metadata value. It is an array of WriteMetadataTableType, which is a struct of the Metadata value and the MetadataMask. The GotoFlowTable component contains the FlowTable IDs flows should go to for the goto table action. It is an array of uint32. The value is selected using the InstructionIndex. The GroupTable component contains group identifiers. It is an array of group identifiers indexed by the ActionTableIndex. The ActionSet component contains the Action set that is build for the packet along its way through the datapath. It is an alias pointing to the value residing in the OFActionSetLFB. The MissBehaviour component specifies what the OFFlowTableLFB shall do with the packet if there is no match with the match fields. Haleplidis, et al. Expires November 26, 2012 [Page 24] Internet-Draft ForCES OpenFlow library May 2012 The buffer component contains information for packets waiting in the buffer of the OFFlowTable. It is an array of a struct component containing the BufferID, an ID assigned by the datapath and the reason the packet is buffered. 5.2.3. Capabilities This LFB has no capabilities specified. 5.2.4. Events One event have been defined regarding the Flow Table. The event will be triggered when a flow is deleted from the Flow Table whether due to the idle timeout, or to the hard timeout or a flow was deleted by the controller. 5.3. OFGroupTableLFB The Group LFB contains Action Buckets that can be applied to a packet during its path in the Flow Tables pipeline. 5.3.1. Data Handling This LFB does not take part in the actual handling of the data. It rather contains the action per group which are required by all Flow Tables in the pipeline. Packets initially enter the LFB from an OFActionSet LFB or a OFFlowTableLFB via the group input port PacketIn and using the GroupIndex metadata the LFB finds the group requested for this packet. Then the LFB depending on the requested actions sends the packet to the required OFActionLFBs via the group output ActionPort and expects results via the group input PacketReturn. Once all actions have been completed, the LFB returns the packet to the initial caller LFB, the OFActionSet LFB or the OFFlowTable LFB, based on the metadata LFBClassID and LFBInstance ID. 5.3.2. Components The LFB has only one component which is the Group Table. This is an array of GroupTableEntry types. Each GroupTableEntry contains a Group Identifier, the type of Group, the required counters and an array of action buckets. An action bucket is a struct which contains the Group weight required for select groups, the watch port and watch group required for fast failover groups, the bucket counters and the actions for this bucket. The structure of actions in a bucket are identical to the actions in the flow table LFB containing the type of action and an action table Haleplidis, et al. Expires November 26, 2012 [Page 25] Internet-Draft ForCES OpenFlow library May 2012 index. With the action type and action index the Group LFB can identify the component and index of the action details. 5.3.3. Capabilities This LFB has no capabilities specified. 5.3.4. Events This LFB has no events specified. 5.4. OFPortLFB 5.4.1. Data Handling This LFB is the interface to the Ethernet physical media. The LFB handles Ethernet frames coming in or going out to/of the OpenFlow switch. Ethernet frames are received from the physical media port and passed to an OFFlowTableLFB through the singleton output port PacketIn, along with the IngressPortID metadata. When a packet is ready to be send on the wire, it is sent to an OFPortLFB instance through the group input port PacketOut. 5.4.2. Components The PortNumber component uniquely identifies the port within a switch. The IEEEMAC component contains the MAC Address of the port. The Name component is a human readable name of the port. The Configuration component specifies port behaviour. It's a struct component with the following boolean fields. PortDown, NoReceiving, NoForwarding and NoPacket_In. The State component defines the current state of the OpenFlow Switch. It is a struct component that defines whether the link is down, the port is blocked or the port can be used for live fast failover. The Current Features component describes the current features of the port. It is a struct component and specifies the Speed Types, the Connected Medium, the Auto Negotiation and the Pause Types The Advertised Features component describes the advertised features of the port. The component is of the same structure as the current features. Haleplidis, et al. Expires November 26, 2012 [Page 26] Internet-Draft ForCES OpenFlow library May 2012 The CurrentSpeed component defines the current port bitrate in kbps. The MaximumSpeed component defines the maximum port bitrate in kbps. The PortCounter component contains the necessary counters for the port. It is a struct component comprised of counters for Packets Received, Packets Transmitted, Bytes Received, Bytes Transmitted, Drops Received, Transmit Drops, Errors in reception, Errors in transmittion, Frame Alignment Errors received, Received Overrun Errors, CRC Errors in received packets, Collisions. 5.4.3. Capabilities Two capabilities has been defined for the Port LFB. Supported Features and Peer Features. These include: o Types of Speed supported o Medium Connected to the port o Auto-negotiation o Pause Types supported of the port 5.4.4. Events This LFB has no events specified. 5.5. OFQueueLFB 5.5.1. Data Handling This LFB manages the queue algorithm for handling packets prior to be forwarded to a port. Multiple OFQueueLFBs can be attached to the OFPortLFBs to handle queues. If a packet has been set a QueueID with a Set Queue action, before it is sent to OFPortLFB to be sent on the wire, it enters this LFB via the group input port PacketIn where it will be handled according to the LFBs configuration and then be sent via the singleton output port PacketOut to the OFPortLFB. 5.5.2. Components The QueueID component, a uint32, defines the ID for the specific queue. The Length component, a uint16, defines the length in bytes of this queue. Haleplidis, et al. Expires November 26, 2012 [Page 27] Internet-Draft ForCES OpenFlow library May 2012 The Properties component, is an array of Property Types an the length of the property, defines the current queue mode. Current specified modes are none and minimum rate. The QueueCounter component, a struct of TransmitPackets, TransmitBytes, TransimtOverrunErrors holds the necessary counter for the LFB. 5.5.3. Capabilities This LFB has no capabilities specified. 5.5.4. Events This LFB has no events specified. 5.6. OFActionSetLFB 5.6.1. Data Handling A packet arrives in the OFActionSetLFB via the group input InputPort from an OFFlowTableLFB along with the ActionSetIndex metadata, required to uniquely identify the index of the row in the ActionSetTable. The LFB locates the action set in the specified row of the ActionSetTable which is itself a table of maximum 9 actions. The LFB then performs each action in ascending order sorted by the ActionSetType by sending the packet to the specified Action LFBs or the Group LFB via the group output ActionPort and getting the result from the group input port PacketReturn, until all actions are finished. Last action is either the group or the output action where the packet is not expected to return to the LFB and the ActionSet is removed from the ActionSetTable. 5.6.2. Components This LFB has only one component, the ActionSetTable which is an Array per packet. Each row is an array of maximum size 9 rows and is a struct of the major type of action, e.g. pop, push, set, the LFBClassID this action is directed, the LFBInstanceID this action is stored and the ActionTableIndex of the table inside the action LFB. If the LFBClassID is a group LFB then the ActionTableIndex is the Group Table Index. 5.6.3. Capabilities This LFB has no capabilities specified. Haleplidis, et al. Expires November 26, 2012 [Page 28] Internet-Draft ForCES OpenFlow library May 2012 5.6.4. Events This LFB has no events specified. 5.7. OFActionLFB This LFB is a template used for create OFActionLFBs. All OFActionLFBs have the input and output port in common but have different components. This LFB defines how input and output port of all OFActionLFBs. Inside OFActionLFBs there is a table with the required attributes where applicable as some OFActionLFBs don't require attributes. 5.7.1. Data Handling A packet arrives in an OFActionLFB via the group input PacketIn from an OFFlowTableLFB, an OFGroupTableLFB or the OFActionSet LFB, along with the LFBClassID and LFBInstanceID metadata, required to uniquely identify the sender, and optionally the ActionIndex metadata if the action requires a specific attributes. Once the packet has been processed it is return to the sender LFB via the group output PacketOut. 5.7.2. Components This LFB has no components specified. 5.7.3. Capabilities This LFB has no capabilities specified. 5.7.4. Events This LFB has no events specified. 5.8. OFActionLFBs As none of the OFActionLFBs have no capabilities or events, these sections are ommited from the draft. 5.8.1. OFOutputOFActionLFB 5.8.1.1. Data Handling The OFOutputOFActionLFB does not modify the packet in any way, rather forwards a packet to a specified OFPortLFB. Additionally there are several virtual ports that the OFOutputOFActionLFB may send the packet to: Haleplidis, et al. Expires November 26, 2012 [Page 29] Internet-Draft ForCES OpenFlow library May 2012 All - Sends the packet out all standard ports, but not to the ingress port or ports configured not to forward Controller - Sends the packet to the controller Table - Submit the packet to the first flow table so that the packet can be processed through the regular OpenFlow pipeline. Only valid in the aciton set of a packet-out message InPort - Sends the packet out the ingress port. Local - Sends the packet to the switch's local networking stack Normal - Processes the packet using the traditional non-OpenFlow pipeline of the switch. Flood - Floods the packet using the normal pipeline of the switch. 5.8.1.2. Components This LFB has only one component, the OutputActionTable, which is an array of a struct of the port number and optionally the maximum length in bytes, if the receiving end is the controller. 5.8.2. OFSetVLANVIDOFActionLFB 5.8.2.1. Data Handling The OFSetVLANVIDOFActionLFB replaces the existing VLAN ID. Only applies to packets with an existing VLAN tag. 5.8.2.2. Components This LFB has only one component, the SetVLANVIDActionTable, which is an array of uint16 VLAN tag values. 5.8.3. OFSetVLANPriorityOFActionLFB 5.8.3.1. Data Handling The OFSetVLANPriorityOFActionLFB replaces the existing VLAN priority. Only applies to packets with an existing VLAN tag. 5.8.3.2. Components This LFB has only one component, the SetVLANPriorityActionTable, which is an array of uchar VLAN priority values. Haleplidis, et al. Expires November 26, 2012 [Page 30] Internet-Draft ForCES OpenFlow library May 2012 5.8.4. OFSetMACSourceOFActionLFB 5.8.4.1. Data Handling The OFSetMACSourceOFActionLFB replaces the existing Ethernet source MAC address. 5.8.4.2. Components This LFB has only one component, the SetMACSourceActionTable, which is an array of IEEEMAC addresses. 5.8.5. OFSetMACDestinationOFActionLFB 5.8.5.1. Data Handling The OFSetMACDestinationOFActionLFB replaces the existing Ethernet source MAC address. 5.8.5.2. Components This LFB has only one component, the SetMACSourceActionTable, which is an array of IEEEMAC addresses. 5.8.6. OFSetIPSourceOFActionLFB 5.8.6.1. Data Handling The OFSetIPSourceOFActionLFB replaces the existing IP source address with new value and update the IP checksum (and TCP/UDP/SCTP checksum if applicable). This action is only applicable to IPv4 packets. 5.8.6.2. Components This LFB has only one component, the SetIPSourceActionTable, which is an array of IPv4 addresses. 5.8.7. OFSetIPDestinationOFActionLFB 5.8.7.1. Data Handling The OFSetIPDestinationOFActionLFB replaces the existing IP destination address with new value and update the IP checksum (and TCP/UDP/SCTP checksum if applicable). This action is only applicable to IPv4 packets. Haleplidis, et al. Expires November 26, 2012 [Page 31] Internet-Draft ForCES OpenFlow library May 2012 5.8.7.2. Components This LFB has only one component, the SetIPDestinationActionTable, which is an array of IPv4 addresses. 5.8.8. OFSetIPTOSOFActionLFB 5.8.8.1. Data Handling The OFSetIPTOSOFActionLFB replaces the existing IP TOS value and update the IP checksum. Only applies to IPv4 packets. 5.8.8.2. Components This LFB has only one component, the SetIPTOSActionTable, which is an array of IPv4 uchar TOS values. 5.8.9. OFSetIPECNOFActionLFB 5.8.9.1. Data Handling The OFSetIPECNOFActionLFB replaces the existing IP ECN value and update the IP checksum. Only applies to IPv4 packets. 5.8.9.2. Components This LFB has only one component, the SetIPECNActionTable, which is an array of IPv4 uchar ECN values. 5.8.10. OFSetTCPSourceOFActionLFB 5.8.10.1. Data Handling The OFSetTCPSourceOFActionLFB replaces the existing TCP/UDP/SCTP source port with new value and update the TCP/UDP/SCTP checksum. This action is only applicable to TCP, UDP and SCTP packets. 5.8.10.2. Components This LFB has only one component, the SetTCPSourceActionTable, which is an array of uint16 values. 5.8.11. OFSetTCPDestinationOFActionLFB 5.8.11.1. Data Handling The OFSetTCPDestinationOFActionLFB replaces the existing TCP/UDP/SCTP destination port with new value and update the TCP/UDP/SCTP checksum. Haleplidis, et al. Expires November 26, 2012 [Page 32] Internet-Draft ForCES OpenFlow library May 2012 This action is only applicable to TCP, UDP and SCTP packets. 5.8.11.2. Components This LFB has only one component, the SetTCPDestinationActionTable, which is an array of uint16 values. 5.8.12. OFCopyTTLOutOFActionLFB 5.8.12.1. Data Handling The OFCopyTTLOutOFActionLFB copies the TTL from next-to-outermost to outermost header with TTL. Copy can be IP-to-IP, MPLS-to-MPLS, or IP-to-MPLS. 5.8.12.2. Components This LFB has no components specified. 5.8.13. OFCopyTTLInOFActionLFB 5.8.13.1. Data Handling The OFCopyTTLOutOFActionLFB copies the TTL from outermost to next-to- outermost header with TTL. Copy can be IP-to-IP, MPLS-to-MPLS, or IP-to-MPLS. 5.8.13.2. Components This LFB has no components specified. 5.8.14. OFSetMPLSLabelOFActionLFB 5.8.14.1. Data Handling The OFSetMPLSLabelOFActionLFB replaces the existing MPLS label. Only applies to packets with an existing MPLS shim header. 5.8.14.2. Components This LFB has only one component, the SetMPLSLabelActionTable, which is an array of uint32 MPLS label values. 5.8.15. OFSetMPLSTCOFActionLFB Haleplidis, et al. Expires November 26, 2012 [Page 33] Internet-Draft ForCES OpenFlow library May 2012 5.8.15.1. Data Handling The OFSetMPLSTCOFActionLFB replaces the existing MPLS traffic class. Only applies to packets with an existing MPLS shim header. 5.8.15.2. Components This LFB has only one component, the SetMPLSTCActionTable, which is an array of uchar MPLS label values. 5.8.16. OFSetMPLSTTLOFActionLFB 5.8.16.1. Data Handling The OFSetMPLSTTLOFActionLFB replaces the existing MPLS TTL. Only applies to packets with an existing MPLS shim header. 5.8.16.2. Components This LFB has only one component, the SetMPLSTTLTable, which is an array of uchar MPLS TTL values. 5.8.17. OFDecrementMPLSTTLOFActionLFB 5.8.17.1. Data Handling The OFDecrementMPLSTTLOFActionLFB decrements the MPLS TTL. Only applies to packets with an existing MPLS shim header. 5.8.17.2. Components This LFB has no components specified. 5.8.18. OFPushVLanOFActionLFB 5.8.18.1. Data Handling The OFPushVLanOFActionLFB pushes a new VLAN header onto the packet. The Ethertype is used as the Ethertype for the tag. Only Ethertype 0x8100 and 0x88a8 should be used. 5.8.18.2. Components This LFB has only one component, the PushVLANTable, which is an array of uint16 VLAN header values. Haleplidis, et al. Expires November 26, 2012 [Page 34] Internet-Draft ForCES OpenFlow library May 2012 5.8.19. OFPopVLANOFActionLFB 5.8.19.1. Data Handling The OFPopVLANOFActionLFB pops the outer-most VLAN header from the packet. 5.8.19.2. Components This LFB has no components specified. 5.8.20. OFPushMPLSOFActionLFB 5.8.20.1. Data Handling The OFPushMPLSOFActionLFB pushes a new MPLS shim header onto the packet. The Ethertype is used as the Ethertype for the tag. Only Ethertype 0x8847 and 0x8848 should be used. 5.8.20.2. Components This LFB has only one component, the PushMPLSTable, which is an array of uint16 MPLS header values. 5.8.21. OFPopMPLSOFActionLFB 5.8.21.1. Data Handling The OFPopMPLSOFActionLFB pops the outer-most MPLS tag or shim header from the packet. The Ethertype is used as the Ethertype for the resulting packet (Ethertype for the MPLS payload). 5.8.21.2. Components This LFB has only one component, the PopMPLSTable, which is an array of uint16 ethertype values. 5.8.22. OFSetQueueOFActionLFB 5.8.22.1. Data Handling The OFSetQueueOFActionLFB sets the queue ID for the packet. 5.8.22.2. Components This LFB has only one component, the SetQueueTable, which is an array of uint32 queue identifiers. Haleplidis, et al. Expires November 26, 2012 [Page 35] Internet-Draft ForCES OpenFlow library May 2012 5.8.23. OFSetIPTTLOFActionLFB 5.8.23.1. Data Handling The OFSetIPTTLOFActionLFB replaces the existing IP TTL and update the IP checksum. Only applies to IPv4 packets. 5.8.23.2. Components This LFB has only one component, the SetIPTTLTable, which is an array of uchar TTL values. 5.8.24. OFDecrementIPTTLOFActionLFB 5.8.24.1. Data Handling The OFDecrementIPTTLOFActionLFB decrements the existing IP TTL and update the IP checksum. Only applies to IPv4 packets. 5.8.24.2. Components This LFB has no components specified. 5.8.25. OFExperimenterOFActionLFB 5.8.25.1. Data Handling The OFExperimenterOFActionLFB handles experimenter actions. 5.8.25.2. Components This LFB has only one component, the SetIPTTLTable, which is an array of uint32 Experimenter ID values. Haleplidis, et al. Expires November 26, 2012 [Page 36] Internet-Draft ForCES OpenFlow library May 2012 6. XML for OpenFlow library SwitchDescriptionType The type of the switch description MFR Manufacturer description string[256] HW Hardware description string[256] SF Software description string[256] SerialNum Serial Number string[32] DP Human readable description of datapath string[256] MPLSLabelValue An MPLS label. Haleplidis, et al. Expires November 26, 2012 [Page 37] Internet-Draft ForCES OpenFlow library May 2012 uint32 MPLSTrafficClassValues The MPLS Traffic Class uchar IPv4ToSbits TOSBits uchar WildcardsType Wildcards for fields InPort Input Port Wildcard boolean VLANID Vlan ID Wildcard boolean VLANPCP Vlan priority Wildcard boolean DLType Ethernet frame typ Wildcard Haleplidis, et al. Expires November 26, 2012 [Page 38] Internet-Draft ForCES OpenFlow library May 2012 boolean IPToS IP ToS Wildcard boolean IPProtocol IP Protocol Wildcard boolean TPSource TCP/UDP/SCTP source port Wildcard boolean TPDestination TCP/UDP/SCTP destination port Wildcard boolean MPLSLabel MPLS label Wildcard boolean MPLSTC MPLS TC Wildcard boolean MatchFieldType A Match Field Type IngressPort Numerical representation of incoming port, starting at 1. This may be a physical or switch-defined virtual port. uint32 Wildcards Wildcards for match fields Haleplidis, et al. Expires November 26, 2012 [Page 39] Internet-Draft ForCES OpenFlow library May 2012 WildcardsType EthernetSourceAddress Ethernet source address IEEEMAC EthernetSourceAddressMask Ethernet source address mask IEEEMAC EthernetDestinationAddress Ethernet destination address IEEEMAC EthernetDestinationAddressMask Ethernet destination address mask IEEEMAC VlanID VLAN identifier of outermost VLAN tag. VlanIDType VlanPriority VLAN PCP Field of outermost VLAN tag. VlanPriorityType EtherType Ethernet type of the OpenFlow packet payload, after VLAN tags. 802.3 frames have special handling. uint16 IPv4TOS Specify as 8-bit value and place ToS in upper 6 bits for match IPv4ToSbits ArpOpcode Only the lower 8 bits of the ARP opcode are used for the match Haleplidis, et al. Expires November 26, 2012 [Page 40] Internet-Draft ForCES OpenFlow library May 2012 uchar8 IPv4SourceAddress IPv4 Source Address to match IPv4Addr IPv4SourceAddressMask IPv4 Source Address mask IPv4Addr IPv4DestinationAddress IPv4 Destination Address to match IPv4Addr IPv4DestinationAddressMask IPv4 Destination Address mask IPv4Addr TCPSourcePort Source Port for TCP and ICMP to match uint16 TCPDestinationPort Destination Port for TCP and ICMP to match uint16 MPLSlabel Match on outermost MPLS tag. MPLSLabelValue MPLSTrafficClass Match on outermost MPLS tag for traffic class. MPLSTrafficClassValues Metadata MetaData uint64 Haleplidis, et al. Expires November 26, 2012 [Page 41] Internet-Draft ForCES OpenFlow library May 2012 MetadataMask MetaData Mask uint64 FlowEntry A Flow entry Cookie Opaque data chosen by controller uint64 MatchFields Match Fields: to match against packets. These consist of the ingress port and packet headers, and optionally metadata specified by a previous table MatchFieldType Counters Counters: to update for matching packets FlowCounterType Instructions Instruction: what to do with the packet of the flow InstructionType The instruction type InstructionTypes InstructionIndex The instruction index. uint32 Haleplidis, et al. Expires November 26, 2012 [Page 42] Internet-Draft ForCES OpenFlow library May 2012 Timeouts Timeouts for the flow entry IdleTimeout Timeout to expire if no flows are matched for this flow entry uint16 HardTimeout Timeout to expire for this flow entry regardless of idle timeout uint16 Timers Timers per flow Duration_Sec Time flow has been alive in seconds uint32 Duration_nSec Time flow has been alive in nanoseconds beyond Duration_Sec uint32 Priority Priority within the specified flow table uint16 ActionRowType An Action Row for the action table Action The type of action Haleplidis, et al. Expires November 26, 2012 [Page 43] Internet-Draft ForCES OpenFlow library May 2012 ActionType ActionTableIndex Index of the Table this action applies to uint32 ActionType The type of action uint16 OUTPUT Output to switch port SetVLANVID Set the 802.1q VLAN id SetVLANPCP Set the 802.1q priority SetDLSrc Set Ethernet source address SetDLDst Set Ethernet destination address SetIPSrc Set IP source address SetIPDst Set IP Destination address SetIPTOS Set ToS field Haleplidis, et al. Expires November 26, 2012 [Page 44] Internet-Draft ForCES OpenFlow library May 2012 SetIPECN Set ECN field SetTPSource TCP/UDP/SCTP source port SetTPDestination TCP/UDP/SCTP destination port CopyTTLOut Copy TTL "outwards" -- from next-to-outermost to outermost CopyTTLIn Copy TTL "inwards" -- from outermost to next-to- outermost SetMPLSLabel Set MPLS label SetMPLSTC Set MPLS TC SetMPLSTTL Set MPLS TTL PushVLANTag Push a new VLAN tag PopVLANTag Pop the outer VLAN tag PushMPLSTag Push a new MPLS tag PopMPLSTag Pop the outer MPLS tag Haleplidis, et al. Expires November 26, 2012 [Page 45] Internet-Draft ForCES OpenFlow library May 2012 SetQueue Set queue ID when outputting to a port Group Apply group SetIPTTL Set IP TTL DecIPTTL Decrement IP TTL Experimenter Experimental field TableCounterType Counter per table ReferenceCount Active Entries uint32 PacketLookups Packet Lookups uint64 PacketMatches Packet Matches uint64 Actions Actions to perform. An Array of Haleplidis, et al. Expires November 26, 2012 [Page 46] Internet-Draft ForCES OpenFlow library May 2012 ActionRowTypes ActionRowType FlowCounterType Counter per flow ReceivedPackets Packets Received uint64 ReceivedBytes Bytes Received uint64 DurationS Duration in seconds uint32 DurationNS Duration in nanoseconds uint32 InstructionTypes Instructions supported short GotoTable Indicates the next table in the processing pipeline. The table-id must be greater than the current table-id. The flows of last table of the pipeline can not include this instruction WriteMetadata Writes the masked metadata value into the metadata field. The mask specifies which bits of the Haleplidis, et al. Expires November 26, 2012 [Page 47] Internet-Draft ForCES OpenFlow library May 2012 metadata register should be modified (i.e. new metadata=old metadata and ~mask | value and mask) WriteAction Merges the specifieed action(s) into the current action set. If an action of the given type exists in the current set, overwrite it, otherwise add it. ApplyActions Applies the specific action(s) immediately, without any change to the Action Set. This instruction may be used to modify the packet between two tables or to execute multiple actions of the same type. The actions are specified as an action list ClearActions Clears all the actions in the action set immediately. ExperimenterInstruction Experimental instruction WriteMetadataTableType Metadata and mask for the write metadata instruction per row Metadata The metadata uint64 MetadataMask The metadata mask uint64 FlowTableMissConfigType Haleplidis, et al. Expires November 26, 2012 [Page 48] Internet-Draft ForCES OpenFlow library May 2012 Types to configure the default behavior of unmatched packets uint32 Controller Send to the controller Continue Continue to the next table in the pipeline or send to the controller if the FlowTable is the last. Drop Drop the packet BufferReasonTypes Buffer Reason Types uchar NoMatch No Matching flow Action Explicit action to send to controller GroupCounterType Counters per group ReferenceCount Flow Entries uint32 Haleplidis, et al. Expires November 26, 2012 [Page 49] Internet-Draft ForCES OpenFlow library May 2012 PacketCount Packet Count uint64 ByteCount Byte Count uint64 GroupTypeType To determine group semantics uchar all Execute all buckets in the group. This group is used for multicast or broadcast forwarding. The packet is effectively cloned for each bucket; one packet is processed for each bucket of the group. If a bucket directs a packet explicitly out the ingress port, this packet clone is dropped. If the controller writer wants to forward out the ingress port, the group should include an extra bucket which includes an output action to the OFPP_IN_PORT virtual port. select Execute one bucket in the group. Packets are sent to a single bucket in the group, based on a switch-computed selection algorithm (e.g. hash on some user-configured tuple or simple round robin). All configuration and state for the selection algorithm is external to OpenFlow. When a port speciffied in a bucket in a select group goes down, the switch may restrict bucket selection to the remaining set (those with forwarding actions to live ports) instead of dropping packets destined to that port. This behavior may reduce the disruption of a downed link or switch. indirect Execute the one defined bucket in this group. Haleplidis, et al. Expires November 26, 2012 [Page 50] Internet-Draft ForCES OpenFlow library May 2012 Allows multiple ows or groups to point to a common group identifier, supporting faster, more efficient convergence (e.g. next hops for IP forwarding). This group type is effectively identical to an all group with one bucket. fastfailover Execute the first live bucket. Each action bucket is associated with a speciffic port and/or group that controls its liveness. Enables the switch to change forwarding without requiring a round trip to the controller. If no buckets are live, packets are dropped. This group type must implement a liveness mechanism BucketCounterType Counters per bucket PacketCount Packet Count uint64 ByteCount Byte Count uint64 GroupTableEntry A Row of the Group Table GroupID Group Identifier uniquely identifying the group uint32 GroupType The group type to determine group semantics Haleplidis, et al. Expires November 26, 2012 [Page 51] Internet-Draft ForCES OpenFlow library May 2012 GroupTypeType GroupCounters Counters per group GroupCounterType ActionBuckets An ordered list of action buckets. Each action bucket is a set of actions similar to a flow table ActionBucket ActionBucket An Action Bucket Weight Relative weight of bucket. Only defined for select groups. uint16 WatchPort Port whose state affects whether this bucket is live.Required for fast failover group uint32 WatchGroup Group whose state affects whether this group is live. Only required for fast failover groups uint32 Actions Actions for this bucket Actions BucketCounter A counter for this bucket BucketCounterType Haleplidis, et al. Expires November 26, 2012 [Page 52] Internet-Draft ForCES OpenFlow library May 2012 PortNumberType Port Number values uint32 InPort Sent the packet out the input port. This virtual port must be explicitly used in order to send back out of the input port Table Submit the packet to the first flow table. NBL This destination port can only be used in packet-out messages Normal Process with normal L2/L3 switching Flood Send the packet to all physical ports in VLNA, except input port and those blocked or link down All Send the packet to all physical ports, except input port. Controller Send the packet to the controller. Local Local openflow "port". Any Wildcard port used only for flow mod (delete) and flow stats requests. Selects all flows regardless of output Haleplidis, et al. Expires November 26, 2012 [Page 53] Internet-Draft ForCES OpenFlow library May 2012 port (including flows with no output port). PortConfigurationType Types of configuration for the OpenFlow port PortDown Port is administatively down boolean NoReceiving Drop all packets received by this port boolean NoForwarding Drop packets forwarded to the port boolean NoPacket_In Do not send packet-in messages for port boolean PortStateType Current State of the port LinkDown No physical link present boolean PortBlocked Port is blocked boolean PortLive Live for Fast Failover Group Haleplidis, et al. Expires November 26, 2012 [Page 54] Internet-Draft ForCES OpenFlow library May 2012 boolean PortFeaturesType Port Features SpeedTypes Types of Speed supported 10MB_HD 10 Mb half-duplex rate support. boolean 10MB_FD 10 Mb full-duplex rate support. boolean 100MB_HD 100 Mb half-duplex rate support. boolean 100MB_FD 100 Mb full-duplex rate support. boolean 1GB_HD 1 Gb half-duplex rate support. boolean 1GB_FD 1 Gb full-duplex rate support. boolean 10GB_FD 10 Gb full-duplex rate support. boolean Haleplidis, et al. Expires November 26, 2012 [Page 55] Internet-Draft ForCES OpenFlow library May 2012 40GB_FD 40 Gb full-duplex rate support. boolean 100GB_FD 100 Gb full-duplex rate support. boolean 1TB_FD 1 Tb full-duplex rate support. boolean Other Other rate, not listed. boolean MediumConnected Medium Connected to the port Copper Copper Medium boolean Fiber Fiber Medium boolean Auto Auto-negotiation boolean PauseTypes Pause Types supported of the port Pause Haleplidis, et al. Expires November 26, 2012 [Page 56] Internet-Draft ForCES OpenFlow library May 2012 Pause boolean AsymmetricPause Asymmetric pause boolean PortCounterType Counter per port ReceivedPackets Packets Received uint64 TransmittedPackets Packets Transmitted uint64 ReceivedBytes Bytes Received uint64 TransmittedBytes Bytes Transmitted uint64 ReceivedDrops Drops Received uint64 TransmitDrops Transmit Drops uint64 RecieveErrors Haleplidis, et al. Expires November 26, 2012 [Page 57] Internet-Draft ForCES OpenFlow library May 2012 Errors in reception uint64 TransmitErrors Errors in transmittion uint64 ReceivedFrameAlignmentErrors Frame Alignment Errors received uint64 ReceiveOverrunErrors Received Overrun Errors uint64 ReceivedCRCErrors CRC Errors in received packets uint64 Collisions Collisions uint64 QueuePropertyType Property type for a queue uint16 None No property defined MinimumRate Minimum datarate guaranteed Haleplidis, et al. Expires November 26, 2012 [Page 58] Internet-Draft ForCES OpenFlow library May 2012 QueueArrayPropertiesType Type Definition for property Property One of Queue Priority Types QueuePropertyType Length Length of property uint32 QueueCounterType Counters per queue TransmitPackets Packets Transmitted uint64 TransmitBytes Bytes Transmitted uint64 TransimtOverrunErrors Overrun Errors uint64 ActionSetType The action set type. 9 possible values. uchar CopyTTLoutwards Copy TTL Outwards Haleplidis, et al. Expires November 26, 2012 [Page 59] Internet-Draft ForCES OpenFlow library May 2012 Pop Pop action Push Push action CopyTTLinwards Copy TTL inwards DecrementTTL Decrement TTL Set SetAction Qos Qos action, such as set queue Group Group action Output Output Action ActionSetRowType The ActionSet Row Type ActionType The type of action for the action set. ActionSetType LFBClassID The LFBClassID this action is supposed to go Haleplidis, et al. Expires November 26, 2012 [Page 60] Internet-Draft ForCES OpenFlow library May 2012 uint32 LFBInstanceID The LFBInstanceID this action is supposed to go uint32 ActionTableIndex The index of the action in the LFBClass.LFBInstance If the LFB class is a group, then the index is the group index. uint32 ActionSetPacket The Action Set per packet. ActionSetRowType ActionType IngressPort The Ingress port the packet has arrived from 1024 uint32 ActionSetIndex The action set that is passed along flow tables. This is an index that points to the array in the ActionSetLFB 1025 uint32 Arbitrary Arbitrary metadata of uint64 1026 uint64 Haleplidis, et al. Expires November 26, 2012 [Page 61] Internet-Draft ForCES OpenFlow library May 2012 FlowTableInstanceID The FlowTableInstanceID metadata is used to reference the Flow Table from which a packet has been sent from. 1027 uint32 ActionIndex The Action Index metadata is used to point the row in the array in an Action LFB 1028 uint32 GroupIndex The Group index metadata is used to point to the row of the array in an Group LFB 1029 uint32 LFBClassIDMetadata The LFBClassID 1030 uint32 LFBInstanceIDMetadata The LFBInstanceID 1031 uint32 OFSwitchLFB Similar to the FEProtocol and FEObject LFB, the OpenFlowSwitch LFB contains information required for the openflow protocol. 1.1 DatapathID Datapath unique ID. The lower 48-bits are for a MAC address, while the upper 16-bits are Haleplidis, et al. Expires November 26, 2012 [Page 62] Internet-Draft ForCES OpenFlow library May 2012 implementer-defined. uint64 MissSendLen Max bytes of new flow that datapath should send to the controller. uint16 HandleFragments if true drop fragments. If false no special handling. boolean ReassembleFragments If true, reassemble fragments boolean InvalidTTLtoController Send packets with invalid TTL ie. 0 or 1 to controller boolean SwitchDescription Information about the switch SwitchDescriptionType Ports The Ports that this switch has. It is an array of the Port Numbers uint32 FlowStatistics Whether the switch keep flow statistics boolean TableStatistics Haleplidis, et al. Expires November 26, 2012 [Page 63] Internet-Draft ForCES OpenFlow library May 2012 Whether the switch keep table statistics boolean PortStatistics Whether the switch keep port statistics boolean GroupStatistics Whether the switch keep group statistics boolean IPReassembly Whether the switch can reassemble IP fragments boolean QueueStats Whether the switch keeps queue statistics boolean ARPMatchIP Whether the switch matches IP addresses in APR packets boolean ActionsSupported What actions are supported ActionType ActionType MaxBufferedPackets Haleplidis, et al. Expires November 26, 2012 [Page 64] Internet-Draft ForCES OpenFlow library May 2012 Maximum packets buffered at once. uint32 TablesSupported Number of tables supported by the datapath uchar PortAdded This event is sent when a port is added Ports PortDeleted This event is sent when a port is deleted Ports PortModified This event is sent when a port is modified Ports OFFlowTableLFB An OpenFlow Flow Table 1.1 InputPort An Input port that expects packets from a port or Haleplidis, et al. Expires November 26, 2012 [Page 65] Internet-Draft ForCES OpenFlow library May 2012 another Flow Table Arbitrary IngressPort ActionSetIndex Arbitrary IngressPort PacketReturn A port that expects the packet to be returned from an OFActionLFB Arbitrary OutputPort An Output port that produces packets after having been checked against the flow table along with metadata. A packet may leave this flow table to go to the next flow table, any flow table if a goto-table instruction is invoked, or into the GroupTable. Arbitrary IngressPort ActionSet Arbitrary Haleplidis, et al. Expires November 26, 2012 [Page 66] Internet-Draft ForCES OpenFlow library May 2012 ActionPort A port that sends the packet to an OFActionLFB Arbitrary LFBClassIDMetadata LFBInstanceIDMetadata LFBClassIDMetadata LFBInstanceIDMetadata ActionIndex Drop A port for dropping packets Arbitrary FlowTableID The flow table sequence number uint32 FlowEntries Flow entries inside the FlowTable LFB FlowEntry FlowTableCounter A counter for the whole Flow Table Haleplidis, et al. Expires November 26, 2012 [Page 67] Internet-Draft ForCES OpenFlow library May 2012 TableCounterType ApplyActionTable Table of actions for each flow Actions WriteActions Table of Actions to write to the ActionSet Actions WriteMetadataTable The write MetaDataTable WriteMetadataTableType GotoFlowTable Containing the FlowTable IDs this flow should go to. uchar GroupTable Table of group indeces to point a packet to uint32 ActionSet The action set that may be changed. This table resides in the ActionSetLFB ActionSetTable MissBehaviour Haleplidis, et al. Expires November 26, 2012 [Page 68] Internet-Draft ForCES OpenFlow library May 2012 What should the FlowTable do if a miss occurs FlowTableMissConfigType Buffer Buffer of packets waiting for a packet-out message BufferID ID assigned by datapath uint32 Reason Reason pacekt is being sent BufferReasonTypes FlowRemoved If a CE subscribes to this event, it will send an event when a flow is removed. FlowEntries FlowEntry FlowTableID FlowEntries FlowEntry Cookie FlowEntries FlowEntry MatchFields Haleplidis, et al. Expires November 26, 2012 [Page 69] Internet-Draft ForCES OpenFlow library May 2012 FlowEntries FlowEntry Timeouts IdleTimeout FlowEntries FlowEntry Priority OFGroupTableLFB An OpenFlow Group Table 1.1 PacketIn A port to expect packets, the GroupIndex metadata and optionally a FlowTable Index. If only GroupIndex is received, then the packet has arrived from the ActionSet LFB. Arbitrary LFBClassIDMetadata LFBInstanceIDMetadata GroupIndex PacketReturn A port that expects the packet to be returned from an OFActionLFB Arbitrary Haleplidis, et al. Expires November 26, 2012 [Page 70] Internet-Draft ForCES OpenFlow library May 2012 PacketOut The port to return the packet to caller Arbitrary ActionPort A port that sends the packet to an OFActionLFB Arbitrary LFBClassIDMetadata LFBInstanceIDMetadata LFBClassIDMetadata LFBInstanceIDMetadata ActionIndex GroupTable The group table GroupTableEntry OFPortLFB Haleplidis, et al. Expires November 26, 2012 [Page 71] Internet-Draft ForCES OpenFlow library May 2012 Input or Output port of an OpenFlow switch 1.1 PacketOut The input port of the Port LFB from other LFBs to put packets on the wire. Arbitrary PacketIn The input port of the port from the wire. It expects any kind of frame and passes it to the first FlowTable. Arbitrary IngressPort PortNumber The port number uniquely identifies a port within a switch. PortNumberType IEEEMAC MAC Address of the port IEEEMAC Name Human readable name of the port string[16] Haleplidis, et al. Expires November 26, 2012 [Page 72] Internet-Draft ForCES OpenFlow library May 2012 Configuration Configuration of the port PortConfigurationType State State of the OpenFlow Switch PortState CurrentFeatures Current features of the port PortFeaturesType Advertised Features advertised by the port PortFeaturesType CurrentSpeed Current port bitrate in kbps uint32 MaximumSpeed Maximum port bitrate in kbps uint32 PortCounter Counters for the port PortCounterType Supported Features Supported by the port PortFeaturesType Peer Features advertised by the peer PortFeaturesType Haleplidis, et al. Expires November 26, 2012 [Page 73] Internet-Draft ForCES OpenFlow library May 2012 OFQueueLFB A queue LFB that can be attached to a port and be used to map flows on it. Flows mapped to a queue will be treated according to that queue's configuration 1.1 PacketIn An input port that expects any kind of frame. Arbitrary PacketOut The output port that produces any kind of frame and passes it along to the OFPortLFB to be sent on the wire Arbitrary QueueID ID for the specific queue uint32 Length Length in bytes of this queue uint16 Properties List of queue properties QueueArrayPropertiesType Haleplidis, et al. Expires November 26, 2012 [Page 74] Internet-Draft ForCES OpenFlow library May 2012 QueueCounter Counters for the queue QueueCounterType OFActionSetLFB An LFB that contains all action sets for each packet 1.1 InputPort An Input port that expects packets from Flow Tables Arbitrary IngressPort ActionSetIndex Arbitrary PacketReturn A port that expects the packet to be returned from an OFActionLFB Arbitrary ActionPort A port that sends the packet to an Haleplidis, et al. Expires November 26, 2012 [Page 75] Internet-Draft ForCES OpenFlow library May 2012 OFActionLFB Arbitrary LFBClassIDMetadata LFBInstanceIDMetadata LFBClassIDMetadata LFBInstanceIDMetadata ActionIndex ActionSetTable Table of actions for each flow ActionSetPacket OFActionLFB An LFB that performs one specific action on a packet in the OpenFlow switch. The OFActionLFB expects any kind of packet and as metadata the FlowTableInstanceID to know from which Flow Table the packet has arrived from and the Action Index to specify the row in the Action Table, if there is an Action table. 1.1 PacketIn An input port that gets the packet to perform the action on. Expects the ClassID and InstanceID of the LFB that calls it to know to which LFB to return it to. Can accept calls from OFActionLFBs or OFGroupLFB or Haleplidis, et al. Expires November 26, 2012 [Page 76] Internet-Draft ForCES OpenFlow library May 2012 OFActionSetLFB Arbitrary LFBClassIDMetadata LFBInstanceIDMetadata LFBClassIDMetadata LFBInstanceIDMetadata ActionIndex PacketOut The output port from which the packet will be send back to the Flow Table from which it came from. Arbitrary OFOutputOFActionLFB An LFB that performs the Output Action 1.1 OFActionLFB PortOutput Send a copy of the packet to the specified port Arbitrary Haleplidis, et al. Expires November 26, 2012 [Page 77] Internet-Draft ForCES OpenFlow library May 2012 All Send the packet out all standard ports, but not to the ingress port or ports configured not to forward Arbitrary Controller Send the packet to the controller Arbitrary Table Submit the packet to the first flow table so that the packet can be processed through the regular OpenFlow pipeline. Only valid in the aciton set of a packet-out message Arbitrary InPort Send the packet out the ingress port. Arbitrary Local Send the packet to the switch's local networking stack Haleplidis, et al. Expires November 26, 2012 [Page 78] Internet-Draft ForCES OpenFlow library May 2012 Arbitrary Normal Process the packet using the traditional non-OpenFlow pipeline of the switch. Arbitrary Flood Flood the packet using the normal pipeline of the switch. Arbitrary OutputActionTable Output to switch port Port The port to send the packet out PortNumberType MaxLength If the port is the controller sets the maximum number of bytes to send. uint16 Haleplidis, et al. Expires November 26, 2012 [Page 79] Internet-Draft ForCES OpenFlow library May 2012 OFSetVLANVIDOFActionLFB An LFB that performs the Set VLANID Action 1.1 OFActionLFB SetVLANVIDActionTable Set the 802.1q VLAN ID uint16 OFSetVLANPriorityOFActionLFB An LFB that performs the Set VLAN Priority Action 1.1 OFActionLFB SetVLANPriorityActionTable Set the 802.1q VLAN Priority uchar OFSetMACSourceOFActionLFB An LFB that performs the Set MAC Source Action 1.1 OFActionLFB SetMACSourceActionTable Set MAC source address IEEEMAC Haleplidis, et al. Expires November 26, 2012 [Page 80] Internet-Draft ForCES OpenFlow library May 2012 OFSetMACDestinationOFActionLFB An LFB that performs the Set MAC Destionation Action 1.1 OFActionLFB SetMACDestinationActionTable Set MAC destination address IEEEMAC OFSetIPSourceOFActionLFB An LFB that performs the Set IP Source Action 1.1 OFActionLFB SetIPSourceActionTable Set the IP source address IPv4Addr OFSetIPDestinationOFActionLFB An LFB that performs the Set IP Destination Action 1.1 OFActionLFB SetIPDestinationActionTable Set the IP destination address IPv4Addr Haleplidis, et al. Expires November 26, 2012 [Page 81] Internet-Draft ForCES OpenFlow library May 2012 OFSetIPTOSOFActionLFB An LFB that performs the Set VLANID Action 1.1 OFActionLFB SetIPTOSActionTable Set IP ToS field uchar OFSetIPECNOFActionLFB An LFB that performs the Set IP ECN Action 1.1 OFActionLFB SetIPECNActionTable Set IP ECN field uchar OFSetTCPSourceOFActionLFB An LFB that performs the Set TCP/UDP/SCTP Source port Action 1.1 OFActionLFB SetTCPSourceActionTable Sets TCP/UDP/SCTP source port uint16 OFSetTCPDestinationOFActionLFB An LFB that performs the Set TCP/UDP/SCTP Destination Haleplidis, et al. Expires November 26, 2012 [Page 82] Internet-Draft ForCES OpenFlow library May 2012 port Action 1.1 OFActionLFB SetTCPDestinationActionTable Sets TCP/UDP/SCTP destination port uint16 OFCopyTTLOutOFActionLFB An LFB that performs the copy TTL outwards Action 1.1 OFActionLFB OFCopyTTLInOFActionLFB An LFB that performs the copy TTL inwards Action 1.1 OFActionLFB OFSetMPLSLabelOFActionLFB An LFB that performs the Set MPLS Label Action 1.1 OFActionLFB SetMPLSLabelActionTable Sets MPLS Label Table uint32 OFSetMPLSTCOFActionLFB An LFB that performs the Set MPLS Traffic Class Action 1.1 Haleplidis, et al. Expires November 26, 2012 [Page 83] Internet-Draft ForCES OpenFlow library May 2012 OFActionLFB SetMPLSTCActionTable Sets MPLS Traffic Class Table uchar OFSetMPLSTTLLFB An LFB that performs the Set MPLS TTL Action 1.1 OFActionLFB SetMPLSTTLTable Sets MPLS TTL Table uchar OFDecrementMPLSTTLOFActionLFB An LFB that performs the decrementation of the MPLS TTL Action 1.1 OFActionLFB OFPushVLanLFB An LFB that performs the Push VLAN Action 1.1 OFActionLFB PushVLANTable Push VLAN Table uint16 Haleplidis, et al. Expires November 26, 2012 [Page 84] Internet-Draft ForCES OpenFlow library May 2012 OFPopVLANLFB An LFB that performs the Pop VLAN Action 1.1 OFActionLFB OFPushMPLSLFB An LFB that performs the Push MPLS Action 1.1 OFActionLFB PushMPLSTable Push MPLS Table uint16 OFPopMPLSLFB An LFB that performs the Pop MPLS Action 1.1 OFActionLFB PopMPLSTable Pop MPLS Table uint16 OFSetQueue An LFB that performs the Set Queue Action 1.1 OFActionLFB SetQueueTable Sets Queue Table uint32 Haleplidis, et al. Expires November 26, 2012 [Page 85] Internet-Draft ForCES OpenFlow library May 2012 OFSetIPTTLLFB An LFB that performs the Set IP TTL Action 1.1 OFActionLFB SetIPTTLTable Sets IP TTL Table uchar OFDecrementIPTTLOFActionLFB An LFB that performs the decrementation of the IP TTL Action 1.1 OFActionLFB OFExperimenter An LFB that performs the Experimenter Action 1.1 OFActionLFB ExperimenterTable Experimenter Table uint32 OpenFlow XML Library Haleplidis, et al. Expires November 26, 2012 [Page 86] Internet-Draft ForCES OpenFlow library May 2012 7. Acknowledgements The authors would like to thank Ahmad N. Quttoum and especially Jamal Hadi Salim, for discussions which helped shape this document. Haleplidis, et al. Expires November 26, 2012 [Page 87] Internet-Draft ForCES OpenFlow library May 2012 8. IANA Considerations (TBD) Haleplidis, et al. Expires November 26, 2012 [Page 88] Internet-Draft ForCES OpenFlow library May 2012 9. Security Considerations TBD Haleplidis, et al. Expires November 26, 2012 [Page 89] Internet-Draft ForCES OpenFlow library May 2012 10. References 10.1. Normative References [I-D.ietf-forces-lfb-lib] Wang, W., Haleplidis, E., Ogawa, K., Li, C., and J. Halpern, "ForCES Logical Function Block (LFB) Library", draft-ietf-forces-lfb-lib-08 (work in progress), February 2012. [McKeown] "McKeown, N., Anderson, T., Balakrishnan, H., et al, "OpenFlow: enabling innovation in campus networks", ACM SIGCOMM Computer Communication Review. 2008, 38(2): 69-74.", . [OpenFlowSpec1.1] http://www.OpenFlow.org/, "The OpenFlow 1.1 Specification.", . [RFC3654] Khosravi, H. and T. Anderson, "Requirements for Separation of IP Control and Forwarding", RFC 3654, November 2003. [RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, "Forwarding and Control Element Separation (ForCES) Framework", RFC 3746, April 2004. [RFC5810] Doria, A., Hadi Salim, J., Haas, R., Khosravi, H., Wang, W., Dong, L., Gopal, R., and J. Halpern, "Forwarding and Control Element Separation (ForCES) Protocol Specification", RFC 5810, March 2010. [RFC5811] Hadi Salim, J. and K. Ogawa, "SCTP-Based Transport Mapping Layer (TML) for the Forwarding and Control Element Separation (ForCES) Protocol", RFC 5811, March 2010. [RFC5812] Halpern, J. and J. Hadi Salim, "Forwarding and Control Element Separation (ForCES) Forwarding Element Model", RFC 5812, March 2010. [RFC5813] Haas, R., "Forwarding and Control Element Separation (ForCES) MIB", RFC 5813, March 2010. [RFC6053] Haleplidis, E., Ogawa, K., Wang, W., and J. Hadi Salim, "Implementation Report for Forwarding and Control Element Separation (ForCES)", RFC 6053, November 2010. Haleplidis, et al. Expires November 26, 2012 [Page 90] Internet-Draft ForCES OpenFlow library May 2012 10.2. Informative References [RFC2629] Rose, M., "Writing I-Ds and RFCs using XML", RFC 2629, June 1999. Haleplidis, et al. Expires November 26, 2012 [Page 91] Internet-Draft ForCES OpenFlow library May 2012 Authors' Addresses Evangelos Haleplidis University of Patras Department of Electrical & Computer Engineering Patras, 26500 Greece Email: ehalep@ece.upatras.gr Omar Cherkaoui University of Quebec in Montreal Montreal, Canada Email: cherkaoui.omar@uqam.ca Susan Hares Huawei USA Email: shares@ndzh.com Weiming Wang Zhejiang Gongshang University 18 Xuezheng Str., Xiasha University Town Hangzhou, 310018 P.R.China Phone: +86-571-28877721 Email: wmwang@zjgsu.edu.cn Haleplidis, et al. Expires November 26, 2012 [Page 92]