idnits 2.17.1 draft-haleplidis-forces-openflow-lib-03.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 39 instances of too long lines in the document, the longest one being 1 character in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year -- The document date (April 25, 2013) is 4011 days in the past. Is this intentional? Checking references for intended status: Informational ---------------------------------------------------------------------------- == Missing Reference: 'RFC2119' is mentioned on line 229, but not defined == Unused Reference: 'McKeown' is defined on line 4474, but no explicit reference was found in the text == Unused Reference: 'RFC3654' is defined on line 4485, but no explicit reference was found in the text == Unused Reference: 'RFC5811' is defined on line 4497, but no explicit reference was found in the text == Unused Reference: 'RFC5813' is defined on line 4505, but no explicit reference was found in the text == Unused Reference: 'RFC6053' is defined on line 4508, but no explicit reference was found in the text == Unused Reference: 'RFC2629' is defined on line 4514, but no explicit reference was found in the text == Outdated reference: A later version (-04) exists of draft-haleplidis-forces-model-extension-01 == Outdated reference: A later version (-12) exists of draft-ietf-forces-lfb-lib-08 -- Obsolete informational reference (is this intentional?): RFC 2629 (Obsoleted by RFC 7749) Summary: 1 error (**), 0 flaws (~~), 10 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Internet Engineering Task Force E.H. Haleplidis 3 Internet-Draft University of Patras 4 Intended status: Informational O.C. Cherkaoui 5 Expires: October 27, 2013 University of Quebec in Montreal 6 S.H. Hares 7 Huawei 8 W.M.W. Wang 9 Zhejiang Gongshang University 10 April 25, 2013 12 Forwarding and Control Element Separation (ForCES) OpenFlow Model 13 Library 14 draft-haleplidis-forces-openflow-lib-03 16 Abstract 18 This document describes the OpenFlow switch in Logical Function 19 Blocks (LFBs) used in the Forwarding and Control Element Separation 20 (ForCES). The LFB classes are defined according to the ForCES 21 Forwading Element (FE) model and ForCES protocol specifications. The 22 library includes the descriptions of the OpenFlow LFBs and the XML 23 definitions. 25 Status of This Memo 27 This Internet-Draft is submitted in full conformance with the 28 provisions of BCP 78 and BCP 79. 30 Internet-Drafts are working documents of the Internet Engineering 31 Task Force (IETF). Note that other groups may also distribute 32 working documents as Internet-Drafts. The list of current Internet- 33 Drafts is at http://datatracker.ietf.org/drafts/current/. 35 Internet-Drafts are draft documents valid for a maximum of six months 36 and may be updated, replaced, or obsoleted by other documents at any 37 time. It is inappropriate to use Internet-Drafts as reference 38 material or to cite them other than as "work in progress." 40 This Internet-Draft will expire on October 27, 2013. 42 Copyright Notice 44 Copyright (c) 2013 IETF Trust and the persons identified as the 45 document authors. All rights reserved. 47 This document is subject to BCP 78 and the IETF Trust's Legal 48 Provisions Relating to IETF Documents 49 (http://trustee.ietf.org/license-info) in effect on the date of 50 publication of this document. Please review these documents 51 carefully, as they describe your rights and restrictions with respect 52 to this document. Code Components extracted from this document must 53 include Simplified BSD License text as described in Section 4.e of 54 the Trust Legal Provisions and are provided without warranty as 55 described in the Simplified BSD License. 57 Table of Contents 59 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 60 1.1. ForCES . . . . . . . . . . . . . . . . . . . . . . . . . 4 61 1.2. OpenFlow . . . . . . . . . . . . . . . . . . . . . . . . 5 62 2. Terminology and Conventions . . . . . . . . . . . . . . . . . 5 63 2.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 64 2.2. Definitions . . . . . . . . . . . . . . . . . . . . . . . 5 65 3. OpenFlow ForCES library . . . . . . . . . . . . . . . . . . . 8 66 3.1. OpenFlow Specification . . . . . . . . . . . . . . . . . 8 67 3.2. ForCES-based OpenFlow Specification . . . . . . . . . . . 10 68 4. OpenFlow Base Types . . . . . . . . . . . . . . . . . . . . . 18 69 4.1. Data Types . . . . . . . . . . . . . . . . . . . . . . . 18 70 4.1.1. Atomic . . . . . . . . . . . . . . . . . . . . . . . 18 71 4.1.2. Compound Struct . . . . . . . . . . . . . . . . . . . 19 72 4.1.3. Compound Array . . . . . . . . . . . . . . . . . . . 21 73 4.2. Frame Types . . . . . . . . . . . . . . . . . . . . . . . 21 74 4.3. MetaData Types . . . . . . . . . . . . . . . . . . . . . 21 75 5. OpenFlow LFBs . . . . . . . . . . . . . . . . . . . . . . . . 23 76 5.1. OpenFlowSwitch . . . . . . . . . . . . . . . . . . . . . 23 77 5.1.1. Data Handling . . . . . . . . . . . . . . . . . . . . 23 78 5.1.2. Components . . . . . . . . . . . . . . . . . . . . . 23 79 5.1.3. Capabilities . . . . . . . . . . . . . . . . . . . . 24 80 5.1.4. Events . . . . . . . . . . . . . . . . . . . . . . . 24 81 5.2. OFFlowTables . . . . . . . . . . . . . . . . . . . . . . 25 82 5.2.1. Data Handling . . . . . . . . . . . . . . . . . . . . 25 83 5.2.2. Components . . . . . . . . . . . . . . . . . . . . . 26 84 5.2.3. Capabilities . . . . . . . . . . . . . . . . . . . . 27 85 5.2.4. Events . . . . . . . . . . . . . . . . . . . . . . . 27 86 5.3. OFGroupTable . . . . . . . . . . . . . . . . . . . . . . 27 87 5.3.1. Data Handling . . . . . . . . . . . . . . . . . . . . 27 88 5.3.2. Components . . . . . . . . . . . . . . . . . . . . . 28 89 5.3.3. Capabilities . . . . . . . . . . . . . . . . . . . . 28 90 5.3.4. Events . . . . . . . . . . . . . . . . . . . . . . . 28 91 5.4. OFPort . . . . . . . . . . . . . . . . . . . . . . . . . 28 92 5.4.1. Data Handling . . . . . . . . . . . . . . . . . . . . 28 93 5.4.2. Components . . . . . . . . . . . . . . . . . . . . . 28 94 5.4.3. Capabilities . . . . . . . . . . . . . . . . . . . . 29 95 5.4.4. Events . . . . . . . . . . . . . . . . . . . . . . . 29 96 5.5. OFQueue . . . . . . . . . . . . . . . . . . . . . . . . . 29 97 5.5.1. Data Handling . . . . . . . . . . . . . . . . . . . . 30 98 5.5.2. Components . . . . . . . . . . . . . . . . . . . . . 30 99 5.5.3. Capabilities . . . . . . . . . . . . . . . . . . . . 30 100 5.5.4. Events . . . . . . . . . . . . . . . . . . . . . . . 30 101 5.6. OFRedirectIn . . . . . . . . . . . . . . . . . . . . . . 30 102 5.6.1. Data Handling . . . . . . . . . . . . . . . . . . . . 30 103 5.6.2. Components . . . . . . . . . . . . . . . . . . . . . 31 104 5.6.3. Capabilities . . . . . . . . . . . . . . . . . . . . 31 105 5.6.4. Events . . . . . . . . . . . . . . . . . . . . . . . 31 106 5.7. OFRedirectOut . . . . . . . . . . . . . . . . . . . . . . 31 107 5.7.1. Data Handling . . . . . . . . . . . . . . . . . . . . 31 108 5.7.2. Components . . . . . . . . . . . . . . . . . . . . . 31 109 5.7.3. Capabilities . . . . . . . . . . . . . . . . . . . . 31 110 5.7.4. Events . . . . . . . . . . . . . . . . . . . . . . . 31 111 5.8. OFActionSet . . . . . . . . . . . . . . . . . . . . . . . 31 112 5.8.1. Data Handling . . . . . . . . . . . . . . . . . . . . 32 113 5.8.2. Components . . . . . . . . . . . . . . . . . . . . . 32 114 5.8.3. Capabilities . . . . . . . . . . . . . . . . . . . . 32 115 5.8.4. Events . . . . . . . . . . . . . . . . . . . . . . . 32 116 5.9. OFBuffer . . . . . . . . . . . . . . . . . . . . . . . . 32 117 5.9.1. Data Handling . . . . . . . . . . . . . . . . . . . . 32 118 5.9.2. Components . . . . . . . . . . . . . . . . . . . . . 33 119 5.9.3. Capabilities . . . . . . . . . . . . . . . . . . . . 33 120 5.9.4. Events . . . . . . . . . . . . . . . . . . . . . . . 33 121 5.10. OFAction . . . . . . . . . . . . . . . . . . . . . . . . 33 122 5.10.1. Data Handling . . . . . . . . . . . . . . . . . . . 33 123 5.10.2. Components . . . . . . . . . . . . . . . . . . . . . 34 124 5.10.3. Capabilities . . . . . . . . . . . . . . . . . . . . 34 125 5.10.4. Events . . . . . . . . . . . . . . . . . . . . . . . 34 126 5.11. OFActionLFBs . . . . . . . . . . . . . . . . . . . . . . 34 127 5.11.1. OFActionOutput . . . . . . . . . . . . . . . . . . . 34 128 5.11.2. OFActionSetVLANVID . . . . . . . . . . . . . . . . . 35 129 5.11.3. OFActionSetVLANPriority . . . . . . . . . . . . . . 35 130 5.11.4. OFActionSetMACSource . . . . . . . . . . . . . . . . 35 131 5.11.5. OFActionSetMACDestination . . . . . . . . . . . . . 35 132 5.11.6. OFActionSetIPSource . . . . . . . . . . . . . . . . 36 133 5.11.7. OFActionSetIPDestination . . . . . . . . . . . . . . 36 134 5.11.8. OFActionSetIPTOS . . . . . . . . . . . . . . . . . . 36 135 5.11.9. OFActionSetIPECN . . . . . . . . . . . . . . . . . . 36 136 5.11.10. OFActionSetTCPSource . . . . . . . . . . . . . . . . 37 137 5.11.11. OFActionSetTCPDestination . . . . . . . . . . . . . 37 138 5.11.12. OFActionCopyTTLOut . . . . . . . . . . . . . . . . . 37 139 5.11.13. OFActionCopyTTLIn . . . . . . . . . . . . . . . . . 37 140 5.11.14. OFActionSetMPLSLabel . . . . . . . . . . . . . . . . 38 141 5.11.15. OFActionSetMPLSTC . . . . . . . . . . . . . . . . . 38 142 5.11.16. OFActionSetMPLSTTL . . . . . . . . . . . . . . . . . 38 143 5.11.17. OFActionDecrementMPLSTTL . . . . . . . . . . . . . . 38 144 5.11.18. OFActionPushVLan . . . . . . . . . . . . . . . . . . 39 145 5.11.19. OFActionPopVLAN . . . . . . . . . . . . . . . . . . 39 146 5.11.20. OFPushMPLSOFAction . . . . . . . . . . . . . . . . . 39 147 5.11.21. OFPopMPLSOFAction . . . . . . . . . . . . . . . . . 39 148 5.11.22. OFSetQueueOFAction . . . . . . . . . . . . . . . . . 40 149 5.11.23. OFSetIPTTLOFAction . . . . . . . . . . . . . . . . . 40 150 5.11.24. OFDecrementIPTTLOFAction . . . . . . . . . . . . . . 40 151 5.11.25. OFExperimenterOFAction . . . . . . . . . . . . . . . 40 152 6. XML for OpenFlow library . . . . . . . . . . . . . . . . . . 41 153 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 94 154 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 94 155 9. Security Considerations . . . . . . . . . . . . . . . . . . . 94 156 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 94 157 10.1. Normative References . . . . . . . . . . . . . . . . . . 94 158 10.2. Informative References . . . . . . . . . . . . . . . . . 95 159 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 96 161 1. Introduction 163 The purpose of this document is to create a library of Logical 164 Functional Blocks that are necessary to describe an OpenFlow switch 165 using the ForCES model. This includes DataTypes, MetaData and of 166 course the LFBs. 168 Readers of this document can get a better understanding of what are 169 the internal parts of an OpenFlow switch in a more formal approach. 170 Additionally having a ForCES-defined OpenFlow switch allows 171 developers to build a ForCES FE that is based on the OF switch model 172 or even a middleware so that ForCES-implemented OpenFlow switches may 173 be controlled by an OpenFlow controller, or a ForCES Control Element 174 (CE) may control OpenFlow switches 176 1.1. ForCES 178 ForCES [RFC3746], focuses on the communication and model necessary to 179 separate control-plane functionality such as routing protocols, 180 signaling protocols, and admission control, from data-forwarding- 181 plane per-packet activities, such as packet forwarding, queuing, and 182 header editing. 184 The modeling of FEs is based on an abstraction using distinct Logical 185 Functional Blocks (LFBs), which are interconnected in a directed 186 graph, and receive, process, modify, and transmit packets along with 187 metadata. An LFB is a block of encapsulated fine-grained operation 188 of the forwarding plane. The ForCES model [RFC5812] additionally 189 includes both a capability and a state model. One of the advantages 190 of the ForCES Model is that it is independent of the actual 191 implementation of the FE; it only provides a view of its capabilities 192 and state that can be acted upon using the ForCES protocol. It is 193 left to the forwarding plane developers to define how the FE 194 functionality is represented using the model. 196 As the OpenFlow library document requires complex metadata, the 197 [I-D.haleplidis-forces-model-extension] is used. 199 The ForCES protocol [RFC5810] was developed to allow the CEs to 200 determine the capabilities of each FE expressed by the FE model, to 201 add and remove entries, parameters, query for statistics, and 202 register for and receive events in a scalable fashion over secure and 203 reliable means. The strength of the ForCES protocol stems from the 204 fact that it is agnostic of the model, as a CE can control any 205 Forwarding Element described with the ForCES model. 207 1.2. OpenFlow 209 OpenFlow [OpenFlowSpec1.1] is conceptually similar to ForCES on 210 separating the control and forwarding plane. It provides a protocol 211 that mediates between the controller and the switch. Unlike ForCES, 212 the OpenFlow switch is statically defined to deal with flows and the 213 protocol is aware of the flow components. An OpenFlow Switch 214 consists of one or more flow tables, a group table that performs 215 packet lookups and forwarding, and an OpenFlow channel to an external 216 controller. A flow table is consisted of flow entries, each 217 containing a set of match fields to match against packets, counters 218 and instructions. The controller manages the switch via the OpenFlow 219 protocol. Using this protocol, the controller can add, update, and 220 delete flow and group entries. 222 2. Terminology and Conventions 224 2.1. Requirements Language 226 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 227 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 228 document are to be interpreted as described in [RFC2119]. 230 2.2. Definitions 232 This document follows the terminology defined by ForCES related 233 documents of RFC3654, RFC3746, RFC5810,RFC5811,RFC5812,RFC5812. The 234 definitions are repeated below for clarity. Also additional 235 definitions from the OpenFlow specification 1.1 [OpenFlowSpec1.1] are 236 also included. 238 Control Element (CE) - A logical entity that implements the ForCES 239 protocol and uses it to instruct one or more FEs on how to process 240 packets. CEs handle functionality such as the execution of 241 control and signaling protocols. 243 Forwarding Element (FE) - A logical entity that implements the 244 ForCES protocol. FEs use the underlying hardware to provide per- 245 packet processing and handling as directed/controlled by one or 246 more CEs via the ForCES protocol. 248 LFB (Logical Functional Block) - The basic building block that is 249 operated on by the ForCES protocol. The LFB is a well defined, 250 logically separable functional block that resides in an FE and is 251 controlled by the CE via the ForCES protocol. The LFB may reside 252 at the FE's datapath and process packets or may be purely an FE 253 control or configuration entity that is operated on by the CE. 254 Note that the LFB is a functionally accurate abstraction of the 255 FE's processing capabilities, but not a hardware-accurate 256 representation of the FE implementation. 258 LFB Class and LFB Instance - LFBs are categorized by LFB Classes. 259 An LFB Instance represents an LFB Class (or Type) existence. 260 There may be multiple instances of the same LFB Class (or Type) in 261 an FE. An LFB Class is represented by an LFB Class ID, and an LFB 262 Instance is represented by an LFB Instance ID. As a result, an 263 LFB Class ID associated with an LFB Instance ID uniquely specifies 264 an LFB existence. 266 LFB Metadata - Metadata is used to communicate per-packet state 267 from one LFB to another, but is not sent across the network. The 268 FE model defines how such metadata is identified, produced, and 269 consumed by the LFBs. It defines the functionality but not how 270 metadata is encoded within an implementation. 272 LFB Components - Operational parameters of the LFBs that must be 273 visible to the CEs are conceptualized in the FE model as the LFB 274 components. The LFB components include, for example, flags, 275 single-parameter arguments, complex arguments, and tables that the 276 CE can read and/or write via the ForCES protocol (see below). 278 ForCES Protocol - While there may be multiple protocols used 279 within the overall ForCES architecture, the term "ForCES protocol" 280 and "protocol" refer to the "Fp" reference points in the ForCES 281 framework in [RFC3746]. This protocol does not apply to CE-to-CE 282 communication, FE-to-FE communication, or to communication between 283 FE and CE managers. Basically, the ForCES protocol works in a 284 master-slave mode in which FEs are slaves and CEs are masters. 286 ForCES Protocol Transport Mapping Layer (ForCES TML) - A layer in 287 ForCES protocol architecture that uses the capabilities of 288 existing transport protocols to specifically address protocol 289 message transportation issues, such as how the protocol messages 290 are mapped to different transport media (like TCP, IP, ATM, 291 Ethernet, etc.), and how to achieve and implement reliability, 292 multicast, ordering, etc. The ForCES TML specifications are 293 detailed in separate ForCES documents, one for each TML. 295 Match Field - a field against which a packet is matched, including 296 packet headers, the ingress port, and the metadata value. 298 Action - an operation that forwards the packet to a port or 299 modifies the packet, such as decrementing the TTL field. Actions 300 may be specified as part of the instruction set associated with a 301 flow entry or in an action bucket associated with a group entry. 303 Flow entry - an element in a flow table used to match and process 304 packets. It contains a set of match fields for matching packets, 305 a set of counters to track packets, and a set of instructions to 306 apply. 308 Instruction - an operation that either contains a set of actions 309 to add to the action set, contains a list of actions to apply 310 immediately to the packet, or modifies pipeline processing. 312 Flow Table - A stage of the pipeline, contains flow entries. 314 OpenFlow pipeline - the set of linked flow tables that provide 315 matching, forwarding, and packet modifications in an OpenFlow 316 switch. 318 Groups - a list of action buckets and some means of choosing one 319 or more of those buckets to apply on a per-packet basis. 321 Group Entry - an element in a group table. It contains a group 322 identifier to distinguish groups, a group type to define the type 323 of the group, a set of counters to track packets, and a set of 324 action buckets. 326 Action Bucket - a set of actions and associated parameters, 327 defined for groups. 329 Action Set - a set of actions associated with the packet that are 330 accumulated while the packet is processed by each table and that 331 are executed when the instruction set instructs the packet to exit 332 the processing pipeline. 334 Ports - where packets enter and exit the OpenFlow pipeline. May 335 be a physical port, a logical port defined by the switch, or a 336 reserved port defined by the specification. 338 3. OpenFlow ForCES library 340 3.1. OpenFlow Specification 342 An OpenFlow switch as described in the OpenFlow Specification 343 document [OpenFlowSpec1.1] appears in Figure 1 345 +---------+ +---------+ +---------+ 346 | | | | | | 347 | Port | | Group | | Port | 348 | | | Table | | | 349 +---------+ +---------+ +---------+ 350 | M1 /\ 351 | M2 | 352 \/ | 353 +---------+ +---------+ +---------+ +---------+ 354 | | M1 | | M1 | | M2 | Execute | 355 | Flow | ---> | Flow | -->...---> | Flow | ---> | Action | 356 | Table 0 | M2 | Table 1 | M2 | Table N | | Set | 357 +---------+ M3 +---------+ M3 +---------+ +---------+ 359 Legend 360 M1: Ingress Port 361 M2: Action Set{} 362 M3: Metadata 364 Figure 1: OpenFlow switch datapath 366 A packet enters the switch through a Port and is passed on the first 367 Flow Table along with the Ingress Port as a Metadata (M1). 368 Additionally each frame carries around a list of actions, called 369 Action Set (M2), which have initially no actions in it. The Action 370 Set will be executed at the end of the DataPath in the Execute Action 371 Set block. After the first Flow Table another metadata called 372 Metadata (M3) also accompanies the packet. This data inside the 373 metadata maybe written by the Flow Tables when the Write Metadata 374 instruction is applied. 376 Each Flow Table performs a match based on certain fields (e.g IP 377 Source Address or Source MAC Address) and then perform a specific 378 instruction if there is a match. If no match occurs, the frame is 379 processed based on the Flow Table's configuration. The choices are 380 either: 382 a. Forward to the OpenFlow controller 384 b. Send to the next flow table 386 c. Drop the frame 388 The list of instructions a Flow Table may perform upon a match are: 390 o Apply a List of actions 392 o Clear the Action Set 394 o Write actions on the action set 396 o Write Metadata 398 o Go to Flow Table (allows a FlowTable X to send the packet and 399 metadata to any FlowTable Y, provided that X>Y) 401 In OpenFlow there are two types of action executions which are 402 independent of each other. The first one refered to as action list 403 and is programmed into the flow table to be executed immediately 404 within the packet pipeline upon a match on a flow table. The second 405 one gets executed at the end of the pipeline in the execute action 406 set. The second type of actions is collected in a metadata refered 407 to as Action Set during the datapath processing with hte Write 408 Actions instruction. 410 The type of actions the Flow Table can perform or write in the Action 411 Set is: 413 o Setting of a field (e.g. IP address, MAC address) 415 o Push or Pop tags (VLAN, MPLS) 417 o Copy TTL inwards or outwards 419 o Decrease TTLs 421 o Output the packet to ports (a copy of the original packet will be 422 sent to the port) 424 o Apply QoS to a packet 426 o Apply the packet to a group (a copy of the original packet will be 427 sent to the group) 429 Additionally a Flow Table may drop the packet. The drop is implicit 430 based on the Flow Table's configuration (e.g. when there are no more 431 instructions). 433 An Action Set MUST contains a maximum of one action of each of the 434 following class of types which MUST be executed in the order 435 specified below regardless of the order they were added to the Action 436 Set. The output action in the action set is executed last. If both 437 an output action and a group action are specified in an action set, 438 the output action is ignored and the group action takes precedence. 439 If no output action and no group action were specified in an action 440 set, the packet is dropped. 442 1. Copy TTL inwards 444 2. Pop a tag (maximum one of VLAN tag, MPLS tag) 446 3. Push a tags (maximum one of VLAN tag, MPLS tag) 448 4. Copy TTL outwards 450 5. Decrease TTL 452 6. Setting of a field (maximum one of set IP address, set VLAN ID, 453 etc...) 455 7. Apply QoS to a packet 457 8. Apply the packet to a group 459 9. Output the packet 461 The Group Table contains a set of Group Entries, each of which 462 contains a set of Action Buckets, each of which contains a set of 463 actions which can be applied to a group of packets that don't have 464 the same set of matching fields. This alleviates the problem of 465 having to set up the same set of actions in flow tables for different 466 set of matching fields by having these set of actions in one place 467 only. 469 3.2. ForCES-based OpenFlow Specification 471 ForCES models FEs using LFBs, fine-grained operations of the 472 forwarding plane. It is logical to have at least the following LFB 473 classes: 475 1. OFPort 476 2. OFFlowTables 478 3. OFGroupTable 480 4. OFActionSet 482 5. OFActions 484 6. OFQueue 486 Additionally packets may be sent to the controller or the controller 487 may send packets to the switch to be put on the datapath. RedirectIn 488 and RedirectOut are two LFBs defined in the Base LFB Library 489 [I-D.ietf-forces-lfb-lib]. However as some more metadata are 490 required for the OpenFlow switch, the OFRedirectIn and OFRedirectOut 491 will be defined by extending the initial LFBs. The controller may 492 request the switch, if the switch is capable, instead of redirecting 493 packets to the controller instead to buffer them and send a specific 494 amount of the packet to the controller. For this task we introduce 495 the OFBuffer LFB. 497 While it may seem that having multiple OFFlowTables instances to 498 represent each Flow Table in the OpenFlow, the authors decided to 499 model the OFFlowTables to contain all the Flow Tables in one instance 500 of the OFFlowTables. On of the OFFlowTables's components is an array 501 of Flow Tables entries and each entry contains its own Flow Entries, 502 Flow Table Counter and Miss Behaviour. The index of the Flow Tables 503 entry represents the Flow Table ID. The rationale behind such a 504 decision is the simplification of the model. With multiple 505 ActionLFBs and multiple FlowTables, the resulting connection graph 506 between Flow Tables and FlowTables and ActionLFBs would be very 507 complex. Addionally this simplifies also the metadata Metadata which 508 is invisible to the model as it only passed between Flow 509 Tables.Figure 2 shows an example of how the OFFlowTables is 510 internally. 512 | From /\To OFOutput /\To Group /\To Redirect 513 | OFPorts | Action | Table | Out 514 +----|---------------|--------------------|--------------|----------+ 515 | | | | | | 516 | | +-----------+--------------------+--------------+ | 517 | \/ | | | | | 518 | +--------+ +--------+ +--------+ +--------+ | 519 | | | --> | | | | | | | 520 | | Flow | | Flow |--+---+--> | Flow |-+--+->| Flow | | 521 | | Table 0|--+ | Table 1| | /\ | Table 2| /\ /\ | Table N| | 522 | +--------+ | +--------+ | | +--------+ | | +--------+ | 523 | /\ /\ | /\ | | | /\ | | | /\ | 524 | | | | | | +----------|---|----+ | | | 525 | | | | | | | | | | | | 526 | | | +----|---+---------+------|---+-------+ | | 527 | | | | | | | 528 | | +----------+-------------+------+-------------------+ | 529 | | | | 530 +---|----------------------------|----------------------------------+ 531 |From | To/From 532 |Redirect In \/OFActions 534 Figure 2: FlowTable Internal 536 Figure 3 depicts what an OFFlowTables with its own set of ActionLFBs 537 would look like. Figure 4 depicts how the OFFlowTables work with a 538 shared set of ActionLFBs with the OFGroupTable LFB look like. 540 +------+ M1,M2,M3 M1,M2,M3 +---------+ 541 | Push | P(2) P(1) | Set | 542 | Vlan |<----------+ +----------->| IP | 543 |Header| | | | Address | 544 +------+ | | +---------+ 545 | | | | 546 | P(3),M1 +--------+ P(2),M1 | 547 +------------>| |<------------+ 548 | | 549 ---------------------->| OFFlow |----------------------> 550 P | Tables | P(3) 551 | | 552 +---------+ P,M1,M2 | | 553 | | <------- | | Legend: 554 |Decrement| | | P: Packet 555 | IP TTL | +--------+ M1: PacketID 556 | | P(1),M1 /\ M2: LFBClassID 557 +---------+ -------------+ M3: ActionIndex 559 Figure 3: ForCES FlowTable with each own set of ActionLFBs 561 A packet P enters the OFFlowTables from an OFPortLFB. If a match 562 occurs for the packet within the OFFlowTables and if the instruction 563 for that match is an "Apply Action List" then the actions must be 564 performed immediately and in the order specified in the action list. 565 Alongside the packet, some metadata are passed as well. M1, the 566 PacketID required by the OFFlowTables to identify the packet and 567 continue exectution from where it stopped when it returns, M2 the 568 LFBClassID so that the ActionLFB knows the ClassID of the LFB to 569 return the packet and M3 the ActionIndex required in some ActionLFBs 570 to determine parameters for the action. For example in Figure 3 571 let's assume that the action list includes the following four 572 actions: 574 1. Decrement IP TTL 576 2. Set IP Address 578 3. Push VLAN header 580 4. Final Action 582 The packet P will be first sent to the Decrement IP TTL Action LFB. 583 Upon completion it will be returned as P1 to the OFFlowTables and 584 then will be sent to the Set IP Address LFB. Upon return as P2 it 585 will be sent to the Push VLAN Header and returned finally as P3 to 586 the Flow Table LFB. Then depending upon the final action the packet 587 may: 589 o A copy of P3 will be sent to a Port LFB if it is an output action 590 and the action set will be executed. 592 o A copy of P3 will be sent to the Group LFB if it is an group 593 action and the action set will be executed. 595 o Remain in the OFFlowTables and checked for a match in the Flow 596 Table specified by a Goto action if it is a goto action. 598 +---------+ P(1),M1,M2,M3 599 | Set IP |<-----------------+ 600 | Address | | 601 | |--------------+ | 602 +---------+ P(2),M1 | | 603 | | 604 | | 605 P(2),M1 \/ | 606 +------+ M2,M3 +---------+ 607 | Push |<-----------| Group | P3 608 | Vlan | | Table |-------> 609 |Header|----------->| | 610 +------+ P(3),M1 +---------+ 611 P /\ | P(1) /\ 612 M1 | | | 613 M2 | |P(1),M1 | 614 M3 | \/ | 615 +--------+ | Legend: 616 P | |----------------+ P: Packet 617 ----->| OFFlow | M1: PacketID 618 | Tables |----------------> M2: LFBClassID 619 +--------+ P(1) M3: ActionIndex 621 Figure 4: ForCES FlowTables and GroupTable with a common ActionLFB 623 A packet enters the OFFlowTables from an OFPortLFB. If a match 624 occurs for the packet within the OFFlowTables and if the instruction 625 for that match is an "Apply Action List" then the actions must be 626 performed immediately and in the order specified in the action list. 627 For example in Figure 4 let's assume that the action list includes 628 the following three actions: 630 1. Push VLAN Header 632 2. Group 634 3. Output 636 The packet P will be first sent to the Push VLAN header Action LFB 637 and upon completion will be returned as P1 to the OFFlowTables. Then 638 a copy of P1 will be sent to the Group Table LFB and then finally a 639 copy of P1 will be sent to the Port LFB for output and the action set 640 will be executed. 642 Let's assume that the following actions will be executed for P1 in 643 the action bucket in the Group Table. 645 1. Set IP Address 647 2. Push Vlan Header 649 3. Output 651 The packet P1 will be sent to the Set IP Address Action LFB and upon 652 completion will be returned as P2 to the Group Table. Then the 653 packet P2 will be sent to the Push Vlan Header Action LFB and be 654 returned as P3 to the Group Table and be sent to the Port LFB for 655 output. 657 Regarding the OFActions, when a match occurs in the OFFlowTables or 658 an action bucket must be executed in the OFGroupTable it may contain 659 multiple actions, it seems reasonable to separate each action as an 660 individual LFB that performs that specific action. For every action 661 needed to be executed, the OFFlowTables or the OFGroupTable will send 662 the frame to the appropriate action LFB(s) in the order defined 663 either by the Action Bucket or the instructions in the OFFlowTables's 664 match entry. Once the packet has been processed from an Action LFB, 665 it MUST be returned to the LFB instance that made that call. 666 OFFlowTables and OFGroupTable LFB may either have shared ActionLFBs 667 or separate. 669 Current specified Action LFBs are: 671 Output Actions 673 o OFActionOutput 675 Set Queue Actions 677 o OFActionSetQueue 679 Push/Pop Tag Actions 681 o OFActionPushVLan 683 o OFActionPopVLAN 685 o OFActionPushMPLS 687 o OFActionPopMPLS 689 Set Actions 691 o OFActionSetMACSource 693 o OFActionSetMACDestination 695 o OFActionSetVLANVID 697 o OFActionSetVLANPriority 699 o OFActionSetMPLSLabel 701 o OFActionSetMPLSTC 703 o OFActionSetMPLSTTL 704 o OFActionDecrementMPLSTTL 706 o OFActionSetIPSource 708 o OFActionSetIPDestination 710 o OFActionSetIPTOS 712 o OFActionSetIPECN 714 o OFActionSetIPTTL 716 o OFActionDecrementIPTTL 718 o OFActionSetTCPSource 720 o OFActionSetTCPDestination 722 o OFActionCopyTTLOut 724 o OFActionCopyTTLIn 726 Experimenter Actions 728 o OFActionExperimenter 730 Most Action LFBs have data associated with the action, e.g. an IP 731 Address for the SetIPSource or SetIPDestination actions, stored in an 732 array in the LFB. The FlowTable sending the packet needs to send 733 additionally as a metadata an index pointing to the action parameter 734 needed for the execution. Each Action LFB has one group input port 735 that accepts a packet, the LFBClassID of the LFB that sent the 736 packet, so that it can be returned after the action has been 737 performed, and optionally the Action Index. Furthermore, one more 738 metadata is required, the PacketID with which the Flow Table LFB or 739 the Group Table LFB can keep track of a packet's progress. 740 Additionally each Action LFB has one group output port that returns 741 the altered packet to the sender. Since the action LFBs have these 742 ports in common and the ForCES model can support augmentation of LFB 743 classes, similar to inheritance in object oriented programming, an 744 OFActionLFB has been specified from which all Action LFBs are derived 745 from. 747 The Action LFBs can be used also by the OFGroupTable and the 748 OFActionSet using the same input and output port. 750 Additionally each OFFlowTables can output a packet to a specific port 751 through the OFOutputAction LFB. Figure 5 shows an example of a 752 topology and how the various LFBs are interconnected. The controller 753 can obtain the topology information by querying the FEObject's 754 LFBTopology. 756 /\ /\ /\ /\ /\ 757 | Out | Out | Out | Out | Out 758 | | | | | 759 +-------+ +-------+ +-------+ +-------+ +-------+ 760 | | | | | | | | | | 761 |OFQueue| |OFQueue| |OFQueue| ... |OFQueue| |OFQueue| 762 | | | | | | | | | | 763 +-------+ +-------+ +-------+ +-------+ +-------+ 764 /\ /\ /\ /\ /\ 765 | | | | | 766 | +--+---------+ | | 767 | | | | 768 +--------+ +--------+ +--------+ +--------+ 769 In | | | |<-- In -->| | | | In 770 -->| OFPort | | OFPort | | OFPort | | OFPort |<-- 771 | | | | ... | | | | 772 +--------+ +--------+ +--------+ +--------+ 773 | /\ | /\ | /\ | /\ 774 | | | | | | | | 775 +--+---|----------+---|-----------------+---|------------+ | 776 | | | | | | 777 | +---------+----+---------------------+---------------+ 778 | | 779 | +----------+ +------------+ 780 | | |------------------> | |To 781 | +---->| OFOutput | | OFRedirect |--> 782 | | | Action | +----------+ | Out |Controller 783 | | | |--->| |--->| | 784 | | +----------+ | OFBuffer | +------------+ 785 | | /\ /\ +--| |<-+ 786 | | | | | +----------+ | +------------+ 787 | | +----------------+ +-| |From 788 | | | | | | OFRedirect |<-- 789 | | | +--------------------------------| In |Controller 790 | | | | | | +------------+ 791 | | | | | | +---------+ 792 \/ | \/ \/ | +-----------| | 793 +--------+ | | OFGroup | 794 | |------------------->| Table | 795 | OFFlow | | | | 796 | Tables | +-------------+ +---------+ 797 | |-->| | /\ /\ 798 +--------+ | OFActionSet | | | 799 /\ | |---+ | 800 | +-------------+ | 801 | | | 802 | +------+-------+-------|------+--------------+ 803 | | | | | | 804 | +--------------+----------+---+--------------+ | 805 | | | | | | | | | 806 +--|----------+---|-----------+--|-----------+ | | 807 | | | | | | | | | | | | 808 \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ 809 +--------+ +--------+ +--------+ +--------+ 810 | | | | | | | | 811 |OFAction| |OFAction| |OFAction| |OFAction| 812 | | | | | | | | 813 +--------+ +--------+ +--------+ +--------+ 815 Figure 5: ForCES OpenFlow Switch example LFB connectivity 817 When a packet has finished processing of the Flow Table pipelines, it 818 will be sent along with the ActionSet Metadata to the OFActionSet LFB 819 for processing of the ActionSet. The ActionSet LFB is responsible 820 for performing all actions specified in the ActionSet Metadata in the 821 order specified by the ActionSet requirements in Section 3.1. 823 Buffering packets for OpenFlow PacketIn messages is handled by the 824 OFBuffer LFB. The execution of OpenFlow's PacketOut message which 825 contains a list of actions to be performed on a buffered or a 826 redirected packet in the switch is to be performed internally in the 827 OFFlowTables after receiving the list and the packet from the 828 OFBuffer LFB. 830 OpenFlow 1.1 provides, with the use of the experimenter concept new 831 instruction or action types. In this model, new instruction types 832 can be modeled by expanding the InstructionTypes datatype definition 833 and new action types can be modeled by creating new ActionLFBs. 835 4. OpenFlow Base Types 837 Some datatypes in this LFB library are imported from Base LFB Library 838 [I-D.ietf-forces-lfb-lib] as they have already been defined there. 840 4.1. Data Types 842 Data types defined in the OpenFlow library are categorized by types 843 of atomic, compound struct, and compound array. 845 4.1.1. Atomic 846 The following data types are defined as atomic data types in the 847 OpenFlow library: 849 +-----------------------------+---------------------------+---------+ 850 | Data Type Name | Brief Description | Base | 851 | | | Type | 852 +-----------------------------+---------------------------+---------+ 853 | MPLSLabelValue | An MPLS label | uint32 | 854 | | | | 855 | MPLSTrafficClassValues | The MPLS Traffic Class | uchar | 856 | | | | 857 | IPv4ToSbits | TOSBits | uchar | 858 | | | | 859 | ActionType | The possible actions | uint16 | 860 | | | | 861 | InstructionTypes | Instructions supported | uchar | 862 | | | | 863 | FlowTableMissConfigType | Types to configure the | uint32 | 864 | | default behavior of | | 865 | | unmatched packets in a | | 866 | | Flow Table | | 867 | | | | 868 | PacketInTypes | Packet In Types | uchar | 869 | | | | 870 | GroupBucketExecuteType | To determine which Action | uchar | 871 | | Bucket(s) should be | | 872 | | executed (all, select, | | 873 | | indirect, fast failover) | | 874 | | | | 875 | PortNumberType | Port Number values | uint32 | 876 | | | | 877 | QueuePropertyType | Property type for a queue | uint16 | 878 +-----------------------------+---------------------------+---------+ 880 OpenFlow Atomic Types 882 4.1.2. Compound Struct 884 The following data types are defined as struct data types in the 885 OpenFlow library: 887 +------------------------------+------------------------------------+ 888 | Data Type Name | Brief Description | 889 +------------------------------+------------------------------------+ 890 | SwitchDescriptionType | Fields of the switch description | 891 | | | 892 | WildcardsType | Wildcards for fields | 893 | | | 894 | MatchFieldType | A Match Field Type (contains all | 895 | | possible match fields) | 896 | | | 897 | FlowEntry | A Flow entry type | 898 | | | 899 | ActionRowType | An Action Row for the action table | 900 | | | 901 | TableCounterType | Counter per table | 902 | | | 903 | FlowCounterType | Counter per flow | 904 | | | 905 | WriteMetadataTableType | Metadata and mask for the write | 906 | | metadata instruction per row | 907 | | | 908 | GroupCounterType | Counters per group | 909 | | | 910 | BucketCounterType | Counters per bucket | 911 | | | 912 | GroupTableEntry | A Row of the Group Table | 913 | | | 914 | ActionBucket | An Action Bucket | 915 | | | 916 | PortConfigurationType | Types of configuration for the | 917 | | OpenFlow port | 918 | | | 919 | PortStateType | Current State of the port | 920 | | | 921 | PortFeaturesType | Port Features | 922 | | | 923 | PortCounterType | Counter per port | 924 | | | 925 | QueueArrayPropertiesType | Type Definition for property | 926 | | | 927 | QueueCounterType | Counters per queue | 928 | | | 929 | ActionRowType | Row type for the ActionSet and | 930 | | Action List. Contains type of | 931 | | action, LFB Class and Instance ID | 932 | | and ActionTableIndex. | 933 +------------------------------+------------------------------------+ 935 OpenFlow Struct Types 937 4.1.3. Compound Array 939 The following data types are defined as an array data type in the 940 OpenFlow library 942 +----------------+------------------------------------------------+ 943 | Data Type Name | Brief Description | 944 +----------------+------------------------------------------------+ 945 | Actions | Actions to perform. An Array of ActionRowTypes | 946 +----------------+------------------------------------------------+ 948 OpenFlow Array Types 950 4.2. Frame Types 952 No additional frame types are defined in this library 954 4.3. MetaData Types 956 The following metadata are defined in the OpenFlow type library: 958 +-----------------------+----------------+----------+---------------+ 959 | MetaData Name | Brief | MetaData | Metadata Type | 960 | | Description | ID | | 961 +-----------------------+----------------+----------+---------------+ 962 | IngressPort | The Ingress | 1024 | uint32 | 963 | | port the | | | 964 | | packet has | | | 965 | | arrived from. | | | 966 | | | | | 967 | InPhyPort | The Port Index | 1025 | uint32 | 968 | | of the | | | 969 | | Physical | | | 970 | | interface the | | | 971 | | frame entered | | | 972 | | the switch | | | 973 | | | | | 974 | PacketID | The PacketID | 1026 | uint32 | 975 | | metadata is | | | 976 | | used to | | | 977 | | uniquelly | | | 978 | | identify a | | | 979 | | packet within | | | 980 | | the Flow Table | | | 981 | | or the Group | | | 982 | | Table to | | | 983 | | continue | | | 984 | | processing it | | | 985 | | after it has | | | 986 | | been returned | | | 987 | | from an | | | 988 | | OFActionLFB. | | | 989 | | | | | 990 | ActionIndex | The Action | 1027 | uint32 | 991 | | Index metadata | | | 992 | | is used to | | | 993 | | point the row | | | 994 | | in the array | | | 995 | | in an Action | | | 996 | | LFB | | | 997 | | | | | 998 | GroupIndex | The Group | 1028 | uint32 | 999 | | index metadata | | | 1000 | | is used to | | | 1001 | | point to the | | | 1002 | | row of the | | | 1003 | | array in an | | | 1004 | | Group LFB | | | 1005 | | | | | 1006 | LFBClassIDMetadata | The LFBClassID | 1029 | uint32 | 1007 | | | | | 1008 | LFBInstanceIDMetadata | The LFB | 1030 | uint32 | 1009 | | Instance ID | | | 1010 | | | | | 1011 | QueueID | The Queue ID | 1031 | uint32 | 1012 | | the packet | | | 1013 | | should be sent | | | 1014 | | to | | | 1015 | | | | | 1016 | BufferID | The Buffer ID | 1032 | uint32 | 1017 | | of a stored | | | 1018 | | packet in the | | | 1019 | | switch | | | 1020 | | requried for | | | 1021 | | the PacketOut | | | 1022 | | message | | | 1023 | | | | | 1024 | RedirectReason | The reason the | 1033 | uchar | 1025 | | packet was | | | 1026 | | redirected to | | | 1027 | | the controller | | | 1028 | | | | | 1029 | FlowTableID | The FlowTable | 1034 | uchar | 1030 | | ID the packet | | | 1031 | | was sent to | | | 1032 | | the controller | | | 1033 | | from | | | 1034 | | | | | 1035 | ActionList | The Action | 1035 | Array of | 1036 | | List that may | | ActionRowType | 1037 | | come along | | | 1038 | | with the | | | 1039 | | packet in a | | | 1040 | | PacketOut | | | 1041 | | message | | | 1042 | | | | | 1043 | ActionSet | The Action Set | 1036 | Array of | 1044 | | to be executed | | ActionRowType | 1045 | | at the end of | | | 1046 | | the pipeline | | | 1047 +-----------------------+----------------+----------+---------------+ 1049 OpenFlow Metadata Types 1051 5. OpenFlow LFBs 1053 5.1. OpenFlowSwitch 1055 Similar to the concept of the FEProtocol LFB and the FEObject LFB, 1056 the OpenFlowSwitchLFB contains information and configuration 1057 parameters regarding the functionality of the switch but play no role 1058 in the datapath processing. Therefore there are no input or output 1059 ports. 1061 5.1.1. Data Handling 1063 This LFB does not handle any data. 1065 5.1.2. Components 1067 The DatapathID component, a unsigned integer of 64 bits, uniquely 1068 identifies a datapath. The lower 48 bits are intended for the switch 1069 MAC address, while the top 16 bits are up to the implementer. 1071 The HandleFragments component, a Boolean, defines what the switch 1072 does with fragments. If true the switch will drop fragments. If 1073 false there is no special handling. 1075 The ReassembleFragments component, a Boolean, defines if the switch 1076 will reassemble fragments. 1078 The InvalidTTLtoController component, a Boolean, defines whether the 1079 switch will send packets with invalid TTL to the controller. 1081 The SwitchDescription component, a structure, contains the following 1082 information about the switch: 1084 o Manufacturer description 1086 o Hardware description 1088 o Software description 1090 o Serial Number 1092 o Human readable description of datapath 1094 Lastly the Ports component is an array which contains in its rows, 1095 all the port numbers. 1097 5.1.3. Capabilities 1099 The following capabilities have been defined for the OpenFlowSwitch 1100 LFB 1102 An assortment of Boolean type capabilities to define: 1104 o FlowStatistics. If the switch keeps flow statistics 1106 o TableStatistics. If the switch keep table statistics 1108 o PortStatistics. If the switch keep port statistics 1110 o GroupStatistics. If the switch keep group statistics 1112 o IPReassembly. If the switch can reassemble IP fragments 1114 o QueueStats. If the switch keeps queue statistics 1116 o ARPMatchIP. If the switch matches IP addresses in ARP packets 1118 The TablesSupported capability, an unsigned integer of 8 bits, 1119 defines the number of tables supported by the switch, each of which 1120 can have a different set of supported wildcard bits and number of 1121 entries. 1123 Additionally the another capability, the ActionSupported, defines the 1124 supported actions for the switch. 1126 5.1.4. Events 1127 Three events have been specified regarding the ports. The first 1128 event will be triggered when a new port is added to the switch, the 1129 second when a port has been removed from the switch and the third 1130 when a port has been modified 1132 5.2. OFFlowTables 1134 An LFB that houses all OpenFlow Flow Tables residing in the switch. 1136 5.2.1. Data Handling 1138 The OFFlowTables describes the process of selecting packets and 1139 classify them into specific flows based on specific match fields 1140 assigned by the controller. 1142 The LFB is expected to receive all types of Ethernet packets through 1143 a group input named InputPort from an OFPort along with the 1144 IngressPort and the InPhyPort as metadata. 1146 All Flow Tables reside in an array within the LFB, the index of the 1147 array being the Flow Table ID. 1149 Each Flow Table compares the packet with the MatchFields inside the 1150 FlowEntries Table. If there is no match, depending upon the 1151 MissBehaviour component, one of the following actions will occur: 1153 1. The packet or part of it will be sent to the controller via the 1154 singleton output port RedirectPacketOut along with the 1155 IngressPort, InPhyPort, RedirectReason and FlowTableID as 1156 metadata and optionally the BufferID if the packet is buffered in 1157 the switch. How the packet is buffered in the switch is 1158 implementation specific. 1160 2. The packet will be sent it to the next table in the pipeline (the 1161 next flow table row entry in the array). 1163 3. The packet will be dropped. 1165 If there is a match the LFB will decide based on the InstructionType 1166 of the component Instructions inside the matched FlowEntry. 1168 If the instruction is Apply Actions, the LFB will use the 1169 InstructionIndex to find the Actions inside the ApplyActionList. 1170 Each row of the ApplyActionList is an array containing rows of 1171 ActionRowTypes. For every ActionRowType, the LFB will send the 1172 packet to the corresponding Action LFB through the group output 1173 ActionPort port alongside with the LFBClassIDMetadata of the LFB, the 1174 PacketID and the ActionIndex, if the specific action has any 1175 parameters, like the Set MAC Address action. The ActionIndex is used 1176 as an index for the table inside the Action LFB. The packet is then 1177 returned from the Action LFB through the group input port 1178 PacketReturn to continue further processing if exists. The PacketID 1179 is an identifier issued by the OFFlowTables LFB that will uniquely 1180 identify the packet so that when it returns it will continue 1181 processing from whence it stopped. 1183 One exception to the rule when applying the action list is in regards 1184 to the Group action. The OFGroup LFB handles groups. The 1185 OFFlowTables using the ActionIndex locates the Group Identifier in 1186 the OFFlowTables's GroupTable component. Then it sends a copy of the 1187 packet to the GroupTableLFB using the group output ActionPort and the 1188 original packet will continue in the Flow Table. 1190 The ActionSet metadata is being populated as a packet traverses this 1191 LFB by both instructions Clear Actions and Write Actions. Write 1192 Metadata instruction is implementation specific as it is interally to 1193 the LFB. 1195 If the instruction is Goto Table, the LFB will use the 1196 InstructionIndex to find the value OFFlowTables InstanceID in the 1197 GoToFlowTable table and send the packet to the FLowTables row entry 1198 with the index of the FlowTable ID. 1200 At the end of the flow table pipeline, the packet along with the 1201 ActionSet metadata will be sent to the OFActionSet via the singleton 1202 output port ActionSetPort 1204 Additionally the OFFlowTables handle packets incoming from the 1205 controller expecting a whole packet either through the 1206 RedirectPacketIn group input port from the OFRedirectIn LFB or the 1207 OFBuffer LFB along with the ActionList and the IngressPort as 1208 metadata. The OFFlowTables MUST perform the ActionList on the packet 1209 prior to be sent in the flow tables. 1211 5.2.2. Components 1213 The FlowTables, an array holding all Flow Tables of the switch. Each 1214 row of the array is a struct of the FlowEntries, the FlowTableCounter 1215 and the MissBehaviour for each flow. The FlowEntries component of 1216 the struct is an array and each row of the array is a struct 1217 containing the cookie, the MatchFields, the Counters, the 1218 Instructions, the Timeouts, the Timers and the priority of the 1219 specific flow entry. The FlowTableCounter are the counters of the 1220 specific FlowTable and the MissBehaviour component of the struct 1221 specifies what the specific Flow Table shall do with the packet if 1222 there is no match. 1224 The ApplyActionList is a component to maintain the actions required 1225 per flow. It is an array of Actions, which is an array of a struct 1226 of ActionType and ActionTableIndex. 1228 The WriteActions is a component to maintain the actions to be writen 1229 for a write actions instruction. It is an array of Actions, which is 1230 an array of a struct of ActionType and ActionTableIndex. 1232 The WriteMetadataTable is a component to hold the metadata values 1233 required for the write metadata value. It is an array of 1234 WriteMetadataTableType, which is a struct of the Metadata value and 1235 the MetadataMask. 1237 The GotoFlowTable component contains the FlowTable IDs flows should 1238 go to for the goto table action. It is an array of uint32. The 1239 value is selected using the InstructionIndex. 1241 The GroupTable component contains group identifiers. It is an array 1242 of group identifiers indexed by the ActionTableIndex. 1244 5.2.3. Capabilities 1246 This LFB has no capabilities specified. 1248 5.2.4. Events 1250 One event has been defined regarding the Flow Table. The event will 1251 be triggered when a flow is deleted from the Flow Table whether due 1252 to the idle timeout, or to the hard timeout or a flow was deleted by 1253 the controller. 1255 5.3. OFGroupTable 1257 The Group LFB contains Action Buckets that can be applied to a packet 1258 during its path in the Flow Tables pipeline. 1260 5.3.1. Data Handling 1262 The OFGroupTable does not take part in the actual handling of the 1263 data. Rather, it contains the action per group which are required by 1264 all Flow Tables in the pipeline. Packets initially enter this LFB 1265 from an OFActionSet LFB or a OFFlowTables via the group input port 1266 PacketIn and using the GroupIndex metadata the LFB finds the group 1267 requested for this packet. Then the LFB depending on the requested 1268 actions sends the packet to the required OFActionLFBs via the group 1269 output ActionPort and expects results via the group input 1270 PacketReturn. 1272 5.3.2. Components 1274 The LFB has only one component which is the Group Table. This is an 1275 array of GroupTableEntry types. Each GroupTableEntry contains a 1276 Group Identifier, the type of Group, the required counters and an 1277 array of action buckets. 1279 An action bucket is a struct which contains the Group weight required 1280 for select groups, the watch port and watch group required for fast 1281 failover groups, the bucket counters and the actions for this bucket. 1283 The structure of actions in a bucket are identical to the actions in 1284 the flow table LFB containing the type of action and an action table 1285 index. With the action type and action index the Group LFB can 1286 identify the component and index of the action details. 1288 5.3.3. Capabilities 1290 This LFB has no capabilities specified. 1292 5.3.4. Events 1294 This LFB has no events specified. 1296 5.4. OFPort 1298 5.4.1. Data Handling 1300 This LFB abstract the point where packets enter and exit the OpenFlow 1301 switch pipeline. May be a physical port, a virtual port defined by 1302 the switch. The LFB handles Ethernet frames coming in or going out 1303 to/of the OpenFlow switch. Ethernet frames are received and passed 1304 to an OFFlowTables through the singleton output port PacketIn, along 1305 with the IngressPortID and InPhyPort metadata. 1307 When a packet is ready to be send on the wire, it is sent to an 1308 OFPort instance through the group input port PacketOut and then 1309 depending of whether the packet has been assigned a queue with the 1310 QueueID as metadata and then is sent to the OFQueue LFB via the group 1311 output port QueueOut. 1313 5.4.2. Components 1315 The PortNumber component uniquely identifies the port within a 1316 switch. 1318 The IEEEMAC component contains the MAC Address of the port. 1320 The Name component is a human readable name of the port. 1322 The Configuration component specifies port behaviour. It's a struct 1323 component with the following boolean fields. PortDown, NoReceiving, 1324 NoForwarding and NoPacket_In. 1326 The State component defines the current state of the OpenFlow Switch. 1327 It is a struct component that defines whether the link is down, the 1328 port is blocked or the port can be used for live fast failover. 1330 The Current Features component describes the current features of the 1331 port. It is a struct component and specifies the Speed Types, the 1332 Connected Medium, the Auto Negotiation and the Pause Types 1334 The Advertised Features component describes the advertised features 1335 of the port. The component is of the same structure as the current 1336 features. 1338 The CurrentSpeed component defines the current port bitrate in kbps. 1340 The MaximumSpeed component defines the maximum port bitrate in kbps. 1342 The PortCounter component contains the necessary counters for the 1343 port. It is a struct component comprised of counters for Packets 1344 Received, Packets Transmitted, Bytes Received, Bytes Transmitted, 1345 Drops Received, Transmit Drops, Errors in reception, Errors in 1346 transmittion, Frame Alignment Errors received, Received Overrun 1347 Errors, CRC Errors in received packets, Collisions. 1349 5.4.3. Capabilities 1351 Two capabilities has been defined for the Port LFB. Supported 1352 Features and Peer Features. These include: 1354 o Types of Speed supported 1356 o Medium Connected to the port 1358 o Auto-negotiation 1360 o Pause Types supported of the port 1362 5.4.4. Events 1364 This LFB has no events specified. 1366 5.5. OFQueue 1367 5.5.1. Data Handling 1369 This LFB manages the queuing algorithm for handling packets prior to 1370 be output from the switch. Multiple OFQueue LFBs can be attached to 1371 an OFPort LFB to handle queues. If a packet has been set a QueueID 1372 with a Set Queue action, it is sent to the OFQueue LFB after the 1373 OFPort LFB and it enters this LFB via the group input port PacketIn 1374 where it will be handled according to the LFBs configuration and then 1375 be output from the switch. 1377 5.5.2. Components 1379 The QueueID component, a uint32, defines the ID for the specific 1380 queue. 1382 The Properties component, is an array of Property Types an the length 1383 of the property, defines the current queue mode. Current specified 1384 modes are none and minimum rate. 1386 The QueueCounter component, a struct of TransmitPackets, 1387 TransmitBytes, TransimtOverrunErrors holds the necessary counter for 1388 the LFB. 1390 5.5.3. Capabilities 1392 This LFB has no capabilities specified. 1394 5.5.4. Events 1396 This LFB has no events specified. 1398 5.6. OFRedirectIn 1400 The OFRedirectIn LFB abstracts the process for the controller to 1401 inject data packets into the switch to input data packets into the 1402 data path. The LFB is derived from the RedirectIn LFB defined in the 1403 Base LFB Library [I-D.ietf-forces-lfb-lib]. 1405 5.6.1. Data Handling 1407 A packet or a bufferID arrives from the controller depending on 1408 whether the packet was buffered or not in the switch. If the packet 1409 was not buffered or the controller wishes to inject a packet into the 1410 switch, the packet will be output from the singleton output port 1411 PacketIn along with an ActionList and an IngressPort metadata to be 1412 sent to the OFFlowTables for processing. If the packet was buffered 1413 in the switch, the no packet is sent from the singleton output port 1414 BufferIn but only the BufferID, the ActionList and the IngressPort 1415 metadatas which is sent out the BufferIn singleton port to the 1416 OFBuffer LFB. 1418 5.6.2. Components 1420 This LFB has no components specified. 1422 5.6.3. Capabilities 1424 This LFB has no capabilities specified. 1426 5.6.4. Events 1428 This LFB has no events specified. 1430 5.7. OFRedirectOut 1432 The OFRedirectOut LFB abstracts the process for the switch to deliver 1433 data packets to the controller. The LFB is derived from the 1434 RedirectIn LFB defined in the Base LFB Library 1435 [I-D.ietf-forces-lfb-lib]. 1437 5.7.1. Data Handling 1439 A packet arrives from the group input port Outgoing from the 1440 OFActionOutput LFBs or part of a packet along with the BufferID 1441 metadata arrives from the OFBufferLFB via the Outgoing group port. 1442 Besides the optional BufferID metadata, the IngressPort, the 1443 InPhyPort and the RedirectReason and the optional FlowTableID are 1444 sent to the Outgoing input port required to be sent to the Controller 1445 as metadata. 1447 5.7.2. Components 1449 This LFB has no components specified. 1451 5.7.3. Capabilities 1453 This LFB has no capabilities specified. 1455 5.7.4. Events 1457 This LFB has no events specified. 1459 5.8. OFActionSet 1460 The OFActionSet LFB abstracts the process for the switch to process 1461 the Action Set metadata and perform the Actions therein on the 1462 received packet. 1464 5.8.1. Data Handling 1466 A packet arrives from the singleton input port PacketIn from the 1467 OFFlowTables LFB along with the ActionSet metadata. The ActionSet 1468 LFB then performs the ActionSet on the packet by sending it to the 1469 necessary Action LFBs via the group output port ActionPort and 1470 receiving it back via the PacketReturn group input port, or even 1471 sending it to the OFGroupTable via the GroupPort singleton output 1472 port. If the packet must be sent on an output port, the packet is 1473 sent via the OutputPort singelton output port. 1475 As all necessary parameters are inside the ActionSEt metadata, this 1476 LFB has no configurable or queriable parameters. 1478 5.8.2. Components 1480 This LFB has no components specified. 1482 5.8.3. Capabilities 1484 This LFB has no capabilities specified. 1486 5.8.4. Events 1488 This LFB has no events specified. 1490 5.9. OFBuffer 1492 The OFBuffer LFB abstracts the process for the switch to buffer 1493 packets and send only part of it to the RedirectOut to be sent to the 1494 controller, or receive a BufferID and send buffered packets to the 1495 OFFlowTables. 1497 5.9.1. Data Handling 1498 A packet arrives from the singleton input port FlowTableIn from the 1499 OFFlowTables LFB to be Buffered. If there is enough room, based on 1500 the in the switch the packet is buffered and the MissSendLen 1501 specifies the amount of the packet is sent to the OFRedirectOut LFB 1502 to be sent to the controller via the ToRedirectOut singleton output 1503 port along with the Buffer ID metadata. Upon receiving the BufferID 1504 from the ControllerIn singleton input port from the OFRedirectIn LFB 1505 optionally along with the ActionList metadata, the OFBuffer LFB 1506 retrieves the buffered packet and sends it along with the ActionList 1507 to the OFFlowTables LFB. 1509 5.9.2. Components 1511 This LFB has one component specified. 1513 The MissSendLen component, an unsigned integer of 16 bits, defines 1514 the maximum number of bytes of each packet sent to the controller as 1515 a result of both flow table misses and flow table hits with the 1516 controller as the destination. 1518 5.9.3. Capabilities 1520 This LFB has one capability specified. 1522 The MaxBufferedPackets, an unsigned integer of 32 bits, defines the 1523 maximum packets the switch can buffer when sending packets to the 1524 controller. 1526 5.9.4. Events 1528 This LFB has no events specified. 1530 5.10. OFAction 1532 This LFB is a template used for create OFActionLFBs. All 1533 OFActionLFBs have the input and output port in common but have 1534 different components. This LFB defines how input and output port of 1535 all OFActionLFBs. Inside OFActionLFBs there is a table with the 1536 required attributes where applicable as some OFActionLFBs don't 1537 require attributes. 1539 5.10.1. Data Handling 1541 A packet arrives in an OFActionLFB via the group input PacketIn from 1542 an OFFlowTables or an OFGroupTable, along with the LFBClassID 1543 metadata, required to uniquely identify the sender, the PacketID and 1544 optionally the ActionIndex metadata if the action requires a specific 1545 attributes, the IngressPort, the InPhyPort and the QueueID required 1546 by the OFActionOutput. Once the packet has been processed it is 1547 return to the sender LFB via the group output PacketOut along with 1548 the PacketID. 1550 5.10.2. Components 1552 This LFB has no components specified. 1554 5.10.3. Capabilities 1556 This LFB has no capabilities specified. 1558 5.10.4. Events 1560 This LFB has no events specified. 1562 5.11. OFActionLFBs 1564 As none of the OFActionLFBs have any capabilities or events, these 1565 sections are ommited from the draft. 1567 5.11.1. OFActionOutput 1569 5.11.1.1. Data Handling 1571 The OFActionOutputLFB does not modify the packet in any way, rather 1572 forwards a packet to a specified OFPort. Additionally there are 1573 several virtual ports that the OFActionOutputLFB may send the packet 1574 to: 1576 All - Group output, sends the packet out all standard ports, but 1577 not to the ingress port or ports configured not to forward 1579 Controller - Sends the packet to the controller 1581 Table - Submit the packet to the first flow table so that the 1582 packet can be processed through the regular OpenFlow pipeline. 1583 Only valid in the action list of a packet-out message 1585 InPort - Sends the packet out the ingress port. 1587 Local - Sends the packet to the switch's local networking stack 1589 Normal - Processes the packet using the traditional non-OpenFlow 1590 pipeline of the switch. 1592 Flood - Floods the packet using the normal pipeline of the switch. 1594 5.11.1.2. Components 1596 This LFB has only one component, the OutputActionTable, which is an 1597 array of a struct of the port number and optionally the maximum 1598 length in bytes, if the receiving end is the controller. 1600 5.11.2. OFActionSetVLANVID 1602 5.11.2.1. Data Handling 1604 The OFActionSetVLANVIDLFB replaces the existing VLAN ID. Only 1605 applies to packets with an existing VLAN tag. 1607 5.11.2.2. Components 1609 This LFB has only one component, the SetVLANVIDActionTable, which is 1610 an array of uint16 VLAN tag values. 1612 5.11.3. OFActionSetVLANPriority 1614 5.11.3.1. Data Handling 1616 The OFActionSetVLANPriorityLFB replaces the existing VLAN priority. 1617 Only applies to packets with an existing VLAN tag. 1619 5.11.3.2. Components 1621 This LFB has only one component, the SetVLANPriorityActionTable, 1622 which is an array of uchar VLAN priority values. 1624 5.11.4. OFActionSetMACSource 1626 5.11.4.1. Data Handling 1628 The OFActionSetMACSourceLFB replaces the existing Ethernet source MAC 1629 address. 1631 5.11.4.2. Components 1633 This LFB has only one component, the SetMACSourceActionTable, which 1634 is an array of IEEEMAC addresses. 1636 5.11.5. OFActionSetMACDestination 1638 5.11.5.1. Data Handling 1640 The OFActionSetMACDestinationLFB replaces the existing Ethernet 1641 source MAC address. 1643 5.11.5.2. Components 1645 This LFB has only one component, the SetMACSourceActionTable, which 1646 is an array of IEEEMAC addresses. 1648 5.11.6. OFActionSetIPSource 1650 5.11.6.1. Data Handling 1652 The OFActionSetIPSourceLFB replaces the existing IP source address 1653 with new value and update the IP checksum (and TCP/UDP/SCTP checksum 1654 if applicable). This action is only applicable to IPv4 packets. 1656 5.11.6.2. Components 1658 This LFB has only one component, the SetIPSourceActionTable, which is 1659 an array of IPv4 addresses. 1661 5.11.7. OFActionSetIPDestination 1663 5.11.7.1. Data Handling 1665 The OFActionSetIPDestinationLFB replaces the existing IP destination 1666 address with new value and update the IP checksum (and TCP/UDP/SCTP 1667 checksum if applicable). This action is only applicable to IPv4 1668 packets. 1670 5.11.7.2. Components 1672 This LFB has only one component, the SetIPDestinationActionTable, 1673 which is an array of IPv4 addresses. 1675 5.11.8. OFActionSetIPTOS 1677 5.11.8.1. Data Handling 1679 The OFActionSetIPTOSLFB replaces the existing IP TOS value and update 1680 the IP checksum. Only applies to IPv4 packets. 1682 5.11.8.2. Components 1684 This LFB has only one component, the SetIPTOSActionTable, which is an 1685 array of IPv4 uchar TOS values. 1687 5.11.9. OFActionSetIPECN 1689 5.11.9.1. Data Handling 1690 The OFActionSetIPECNLFB replaces the existing IP ECN value and update 1691 the IP checksum. Only applies to IPv4 packets. 1693 5.11.9.2. Components 1695 This LFB has only one component, the SetIPECNActionTable, which is an 1696 array of IPv4 uchar ECN values. 1698 5.11.10. OFActionSetTCPSource 1700 5.11.10.1. Data Handling 1702 The OFActionSetTCPSourceLFB replaces the existing TCP/UDP/SCTP source 1703 port with new value and update the TCP/UDP/SCTP checksum. This 1704 action is only applicable to TCP, UDP and SCTP packets. 1706 5.11.10.2. Components 1708 This LFB has only one component, the SetTCPSourceActionTable, which 1709 is an array of uint16 values. 1711 5.11.11. OFActionSetTCPDestination 1713 5.11.11.1. Data Handling 1715 The OFActionSetTCPDestinationLFB replaces the existing TCP/UDP/SCTP 1716 destination port with new value and update the TCP/UDP/SCTP checksum. 1717 This action is only applicable to TCP, UDP and SCTP packets. 1719 5.11.11.2. Components 1721 This LFB has only one component, the SetTCPDestinationActionTable, 1722 which is an array of uint16 values. 1724 5.11.12. OFActionCopyTTLOut 1726 5.11.12.1. Data Handling 1728 The OFActionCopyTTLOutLFB copies the TTL from next-to-outermost to 1729 outermost header with TTL. Copy can be IP-to-IP, MPLS-to-MPLS, or 1730 IP-to-MPLS. 1732 5.11.12.2. Components 1734 This LFB has no components specified. 1736 5.11.13. OFActionCopyTTLIn 1737 5.11.13.1. Data Handling 1739 The OFActionCopyTTLOutLFB copies the TTL from outermost to next-to- 1740 outermost header with TTL. Copy can be IP-to-IP, MPLS-to-MPLS, or 1741 IP-to-MPLS. 1743 5.11.13.2. Components 1745 This LFB has no components specified. 1747 5.11.14. OFActionSetMPLSLabel 1749 5.11.14.1. Data Handling 1751 The OFActionSetMPLSLabelLFB replaces the existing MPLS label. Only 1752 applies to packets with an existing MPLS shim header. 1754 5.11.14.2. Components 1756 This LFB has only one component, the SetMPLSLabelActionTable, which 1757 is an array of uint32 MPLS label values. 1759 5.11.15. OFActionSetMPLSTC 1761 5.11.15.1. Data Handling 1763 The OFActionSetMPLSTCLFB replaces the existing MPLS traffic class. 1764 Only applies to packets with an existing MPLS shim header. 1766 5.11.15.2. Components 1768 This LFB has only one component, the SetMPLSTCActionTable, which is 1769 an array of uchar MPLS label values. 1771 5.11.16. OFActionSetMPLSTTL 1773 5.11.16.1. Data Handling 1775 The OFActionSetMPLSTTLLFB replaces the existing MPLS TTL. Only 1776 applies to packets with an existing MPLS shim header. 1778 5.11.16.2. Components 1780 This LFB has only one component, the SetMPLSTTLTable, which is an 1781 array of uchar MPLS TTL values. 1783 5.11.17. OFActionDecrementMPLSTTL 1784 5.11.17.1. Data Handling 1786 The OFActionDecrementMPLSTTLLFB decrements the MPLS TTL. Only 1787 applies to packets with an existing MPLS shim header. 1789 5.11.17.2. Components 1791 This LFB has no components specified. 1793 5.11.18. OFActionPushVLan 1795 5.11.18.1. Data Handling 1797 The OFActionPushVLanLFB pushes a new VLAN header onto the packet. 1798 The Ethertype is used as the Ethertype for the tag. Only Ethertype 1799 0x8100 and 0x88a8 should be used. 1801 5.11.18.2. Components 1803 This LFB has only one component, the PushVLANTable, which is an array 1804 of uint16 ethertypes. 1806 5.11.19. OFActionPopVLAN 1808 5.11.19.1. Data Handling 1810 The OFActionPopVLANLFB pops the outer-most VLAN header from the 1811 packet. 1813 5.11.19.2. Components 1815 This LFB has no components specified. 1817 5.11.20. OFPushMPLSOFAction 1819 5.11.20.1. Data Handling 1821 The OFPushMPLSOFActionLFB pushes a new MPLS shim header onto the 1822 packet. The Ethertype is used as the Ethertype for the tag. Only 1823 Ethertype 0x8847 and 0x8848 should be used. 1825 5.11.20.2. Components 1827 This LFB has only one component, the PushMPLSTable, which is an array 1828 of uint16 MPLS header values. 1830 5.11.21. OFPopMPLSOFAction 1831 5.11.21.1. Data Handling 1833 The OFPopMPLSOFActionLFB pops the outer-most MPLS tag or shim header 1834 from the packet. The Ethertype is used as the Ethertype for the 1835 resulting packet (Ethertype for the MPLS payload). 1837 5.11.21.2. Components 1839 This LFB has only one component, the PopMPLSTable, which is an array 1840 of uint16 ethertype values. 1842 5.11.22. OFSetQueueOFAction 1844 5.11.22.1. Data Handling 1846 The OFSetQueueOFActionLFB sets the queue ID for the packet. This LFB 1847 will return the packet along with the QueueID as a metadata. 1849 5.11.22.2. Components 1851 This LFB has only one component, the SetQueueTable, which is an array 1852 of uint32 queue identifiers. 1854 5.11.23. OFSetIPTTLOFAction 1856 5.11.23.1. Data Handling 1858 The OFSetIPTTLOFActionLFB replaces the existing IP TTL and update the 1859 IP checksum. Only applies to IPv4 packets. 1861 5.11.23.2. Components 1863 This LFB has only one component, the SetIPTTLTable, which is an array 1864 of uchar TTL values. 1866 5.11.24. OFDecrementIPTTLOFAction 1868 5.11.24.1. Data Handling 1870 The OFDecrementIPTTLOFActionLFB decrements the existing IP TTL and 1871 update the IP checksum. Only applies to IPv4 packets. 1873 5.11.24.2. Components 1875 This LFB has no components specified. 1877 5.11.25. OFExperimenterOFAction 1878 5.11.25.1. Data Handling 1880 The OFExperimenterOFActionLFB handles experimenter actions. 1882 5.11.25.2. Components 1884 This LFB has only one component, the SetIPTTLTable, which is an array 1885 of uint32 Experimenter ID values. 1887 6. XML for OpenFlow library 1889 1890 1895 1896 1897 1898 1899 Arbitrary 1900 Any kind of Frame 1901 1902 1903 1904 1905 IEEEMAC 1906 An IEEE MAC Address 1907 byte[6] 1908 1909 1910 SwitchDescriptionType 1911 The type of the switch description 1912 1913 1914 MFR 1915 Manufacturer description 1916 string[256] 1917 1918 1919 HW 1920 Hardware description 1921 string[256] 1922 1923 1924 SF 1925 Software description 1926 string[256] 1927 1928 1929 SerialNum 1930 Serial Number 1931 string[32] 1932 1933 1934 DP 1935 Human Readable description of datapath 1936 1937 string[256] 1938 1939 1940 1941 1942 MPLSLabelValue 1943 An MPLS label. 1944 1945 uint32 1946 1947 1948 1949 1950 1951 1952 MPLSTrafficClassValues 1953 The MPLS Traffic Class 1954 1955 uchar 1956 1957 1958 1959 1960 1961 1962 IPv4ToSbits 1963 TOSBits 1964 1965 uchar 1966 1967 1968 1969 1970 1971 1972 WildcardsType 1973 Wildcards for fields 1974 1975 1976 InPort 1977 Input Port Wildcard 1978 boolean 1979 1980 1981 VLANID 1982 VLan ID Wildcard 1983 boolean 1984 1985 1986 VLANPCP 1987 Vlan priority Wildcard 1988 boolean 1989 1990 1991 DLType 1992 Ethernet frame typ Wildcard 1993 boolean 1994 1995 1996 IPToS 1997 IP ToS Wildcard 1998 boolean 1999 2000 2001 IPProtocol 2002 IP Protocol Wildcard 2003 boolean 2004 2005 2006 TPSource 2007 TCP/UDP/SCTP source port Wildcard 2008 boolean 2009 2010 2011 TPDestination 2012 TCP/UDP/SCTP destination port Wildcard 2013 2014 boolean 2015 2016 2017 MPLSLabel 2018 MPLS label Wildcard 2019 boolean 2020 2021 2022 MPLSTC 2023 MPLS TC Wildcard 2024 boolean 2025 2026 2027 2028 2029 MatchFieldType 2030 A Match Field Type 2031 2032 2033 IngressPort 2034 Numerical representation of incoming port, 2035 starting at 1. This may be a physical or 2036 switch-defined virtual port. 2037 uint32 2038 2039 2040 Wildcards 2041 Wildcards for match fields 2042 WildcardsType 2043 2044 2045 EthernetSourceAddress 2046 Ethernet source address 2047 IEEEMAC 2048 2049 2050 EthernetSourceAddressMask 2051 Ethernet source address mask 2052 IEEEMAC 2053 2054 2055 EthernetDestinationAddress 2056 Ethernet destination address 2057 IEEEMAC 2058 2059 2060 EthernetDestinationAddressMask 2061 Ethernet destination address mask 2062 IEEEMAC 2063 2064 2065 VlanID 2066 VLAN identifier of outermost VLAN tag. 2067 2068 VlanIDType 2069 2070 2071 VlanPriority 2072 VLAN PCP Field of outermost VLAN tag. 2073 2074 VlanPriorityType 2075 2076 2077 EtherType 2078 Ethernet type of the OpenFlow packet payload 2079 after VLAN tags. 802.3 frames have special handling 2080 2081 uint16 2082 2083 2084 IPv4TOS 2085 Specify as 8-bit value and place ToS in 2086 upper 6 bits for match 2087 IPv4ToSbits 2088 2089 2090 IPProto 2091 IP protocol or lower 8 bits of ARP opcode. 2092 Only the lower 8 bits of the ARP opcode are used 2093 for the match 2094 uchar 2095 2096 2097 IPv4SourceAddress 2098 IPv4 Source Address to match 2099 IPv4Addr 2100 2101 2102 IPv4SourceAddressMask 2103 IPv4 Source Address mask 2104 IPv4Addr 2105 2106 2107 IPv4DestinationAddress 2108 IPv4 Destination Address to match 2109 IPv4Addr 2110 2111 2112 IPv4DestinationAddressMask 2113 IPv4 Destination Address mask 2114 IPv4Addr 2115 2116 2117 TCPSourcePort 2118 Source Port for TCP and ICMP to match 2119 2120 uint16 2121 2122 2123 TCPDestinationPort 2124 Destination Port for TCP and ICMP to match 2125 2126 uint16 2127 2128 2129 MPLSlabel 2130 Match on outermost MPLS tag. 2131 MPLSLabelValue 2132 2133 2134 MPLSTrafficClass 2135 Match on outermost MPLS tag for traffic 2136 class. 2137 MPLSTrafficClassValues 2138 2139 2140 Metadata 2141 MetaData 2142 uint64 2143 2144 2145 MetadataMask 2146 MetaData Mask 2147 uint64 2148 2149 2150 2151 2152 FlowEntry 2153 A Flow entry 2154 2155 2156 Cookie 2157 Opaque data chosen by controller 2158 uint64 2159 2160 2161 MatchFields 2162 Match Fields: to match against packets. These 2163 consist of the ingress port and packet headers, and 2164 optionally metadata specified by a previous table 2165 2166 MatchFieldType 2167 2168 2169 Counters 2170 Counters: to update for matching packets 2171 2172 FlowCounterType 2173 2174 2175 Instructions 2176 Instruction: what to do with the packet of 2177 the flow 2178 2179 2180 2181 InstructionType 2182 The instruction type 2183 InstructionTypes 2184 2185 2186 InstructionIndex 2187 The instruction index. 2188 uint32 2189 2190 2191 2192 InstructionType 2193 2194 2195 2196 2197 2198 Timeouts 2199 Timeouts for the flow entry 2200 2201 2202 IdleTimeout 2203 Timeout to expire if no flows are 2204 matched for this flow entry 2205 uint16 2206 2207 2208 HardTimeout 2209 Timeout to expire for this flow entry 2210 regardless of idle timeout 2211 uint16 2212 2213 2214 Timers 2215 Timers per flow 2216 2217 2218 Duration_Sec 2219 Time flow has been alive in 2220 seconds 2221 uint32 2222 2223 2224 Duration_nSec 2225 Time flow has been alive in 2226 nanoseconds beyond Duration_Sec 2227 2228 uint32 2229 2230 2231 2232 2233 Priority 2234 Priority within the specified flow 2235 table 2236 uint16 2237 2238 2239 2240 2241 2242 2243 ActionRowType 2244 An Action Row for the action table 2245 2246 2247 Action 2248 The type of action 2249 ActionType 2250 2251 2252 ActionTableIndex 2253 Index of the Table this action applies to 2254 2255 uint32 2256 2257 2258 2259 2260 ActionType 2261 The type of action 2262 2263 uint16 2264 2265 2266 OUTPUT 2267 Output to switch port 2268 2269 2270 SetVLANVID 2271 Set the 802.1q VLAN id 2272 2273 2274 SetVLANPCP 2275 Set the 802.1q priority 2276 2277 2278 SetDLSrc 2279 Set Ethernet source address 2280 2281 2282 SetDLDst 2283 Set Ethernet destination address 2284 2285 2286 2287 SetIPSrc 2288 Set IP source address 2289 2290 2291 SetIPDst 2292 Set IP Destination address 2293 2294 2295 SetIPTOS 2296 Set ToS field 2297 2298 2299 SetIPECN 2300 Set ECN field 2301 2302 2303 SetTPSource 2304 TCP/UDP/SCTP source port 2305 2306 2307 SetTPDestination 2308 TCP/UDP/SCTP destination port 2309 2310 2311 CopyTTLOut 2312 Copy TTL "outwards" -- from 2313 next-to-outermost to outermost 2314 2315 2316 CopyTTLIn 2317 Copy TTL "inwards" -- from outermost to 2318 next-to-outermost 2319 2320 2321 SetMPLSLabel 2322 Set MPLS label 2323 2324 2325 SetMPLSTC 2326 Set MPLS TC 2327 2328 2329 SetMPLSTTL 2330 Set MPLS TTL 2331 2332 2333 PushVLANTag 2334 Push a new VLAN tag 2335 2336 2337 PopVLANTag 2338 Pop the outer VLAN tag 2339 2340 2341 PushMPLSTag 2342 Push a new MPLS tag 2343 2344 2345 PopMPLSTag 2346 Pop the outer MPLS tag 2347 2348 2349 SetQueue 2350 Set queue ID when outputting to a port 2351 2352 2353 2354 Group 2355 Apply group 2356 2357 2358 SetIPTTL 2359 Set IP TTL 2360 2361 2362 DecIPTTL 2363 Decrement IP TTL 2364 2365 2366 2367 2368 2369 TableCounterType 2370 Counter per table 2371 2372 2373 ReferenceCount 2374 Active Entries 2375 uint32 2376 2377 2378 PacketLookups 2379 Packet Lookups 2380 uint64 2381 2382 2383 PacketMatches 2384 Packet Matches 2385 uint64 2386 2387 2388 2389 2390 Actions 2391 Actions to perform. An Array of ActionRowTypes 2392 2393 2394 ActionRowType 2395 2396 2397 2398 FlowCounterType 2399 Counter per flow 2400 2401 2402 ReceivedPackets 2403 Packets Received 2404 uint64 2405 2406 2407 ReceivedBytes 2408 Bytes Received 2409 uint64 2410 2411 2412 DurationS 2413 Duration in seconds 2414 uint32 2415 2416 2417 DurationNS 2418 Duration in nanoseconds 2419 uint32 2420 2421 2422 2423 2424 InstructionTypes 2425 Instructions supported 2426 2427 uchar 2428 2429 2430 GotoTable 2431 Indicates the next table in the processing 2432 pipeline. The table-id must be greater than the 2433 current table-id. The flows of last table of the 2434 pipeline can not include this instruction 2435 2436 2437 2438 WriteMetadata 2439 Writes the masked metadata value into the 2440 metadata field. The mask specifies which bits of 2441 the metadata register should be modified (i.e. 2442 new metadata = old metadata and ~mask | value and 2443 mask) 2444 2445 2446 WriteAction 2447 Merges the specifieed action(s) into the 2448 current action set. If an action of the given 2449 type exists in the current set, overwrite it, 2450 otherwise add it. 2451 2452 2453 ApplyActions 2454 Applies the specific action(s) 2455 immediately, without any change to the Action 2456 Set. This instruction may be used to modify the 2457 packet between two tables or to execute multiple 2458 actions of the same type. The actions are 2459 specified as an action list 2460 2461 2462 ClearActions 2463 Clears all the actions in the action set 2464 immediately. 2465 2466 2467 2468 2469 2470 WriteMetadataTableType 2471 Metadata and mask for the write metadata 2472 instruction per row 2473 2474 2475 Metadata 2476 The metadata 2477 uint64 2478 2479 2480 MetadataMask 2481 The metadata mask 2482 uint64 2483 2484 2485 2486 2487 FlowTableMissConfigType 2488 Types to configure the default behavior of 2489 unmatched packets in a Flow Table 2490 2491 uint32 2492 2493 2494 Controller 2495 Send to the controller 2496 2497 2498 Continue 2499 Continue to the next table in the pipeline 2500 or send to the controller if the FlowTable is the 2501 last. 2503 2504 2505 Drop 2506 Drop the packet 2507 2508 2509 2510 2511 2512 PacketInTypes 2513 Packet-in Types 2514 2515 uchar 2516 2517 2518 NoMatch 2519 No Matching flow 2520 2521 2522 Action 2523 Explicit action to send to controller 2524 2525 2526 2527 2528 2529 2530 GroupCounterType 2531 Counters per group 2532 2533 2534 ReferenceCount 2535 Flow Entries 2536 uint32 2537 2538 2539 PacketCount 2540 Packet Count 2541 uint64 2542 2543 2544 ByteCount 2545 Byte Count 2546 uint64 2547 2548 2549 2550 2551 GroupBucketExecuteType 2552 To determine which Action Bucket(s) should be 2553 executed 2554 2555 uchar 2556 2557 2558 all 2559 Execute all buckets in the group. This 2560 group is used for multicast or broadcast 2561 forwarding. The packet is effectively cloned for 2562 each bucket; one packet is processed for each 2563 bucket of the group. If a bucket directs a packet 2564 explicitly out the ingress port, this packet 2565 clone is dropped. If the controller writer wants 2566 to forward out the ingress port, the group should 2567 include an extra bucket which includes an output 2568 action to the OFPP_IN_PORT virtual port. 2569 2570 2571 2572 select 2573 Execute one bucket in the group. Packets 2574 are sent to a single bucket in the group, based 2575 on a switch-computed selection algorithm (e.g. 2576 hash on some user-configured tuple or simple 2577 round robin). All configuration and state for the 2578 selection algorithm is external to OpenFlow. When 2579 a port speciffied in a bucket in a select group 2580 goes down, the switch may restrict bucket 2581 selection to the remaining set (those with 2582 forwarding actions to live ports) instead of 2583 dropping packets destined to that port. This 2584 behavior may reduce the disruption of a downed 2585 link or switch. 2586 2587 2588 indirect 2589 Execute the one defined bucket in this 2590 group. Allows multiple flows or groups to point 2591 to a common group identifier, supporting faster, 2592 more efficient convergence (e.g. next hops for IP 2593 forwarding). This group type is effectively 2594 identical to an all group with one bucket. 2595 2596 2597 2598 fastfailover 2599 Execute the first live bucket. Each action 2600 bucket is associated with a specific port and/or 2601 group that controls its liveness. Enables the 2602 switch to change forwarding without requiring a 2603 round trip to the controller. If no buckets are 2604 live, packets are dropped. This group type must 2605 implement a liveness mechanism 2606 2607 2608 2609 2610 2611 BucketCounterType 2612 Counters per bucket 2613 2614 2615 PacketCount 2616 Packet Count 2617 uint64 2618 2619 2620 ByteCount 2621 Byte Count 2622 uint64 2623 2624 2625 2626 2627 GroupTableEntry 2628 A Row of the Group Table 2629 2630 2631 GroupID 2632 Group Identifier uniquely identifying the 2633 group 2634 uint32 2635 2636 2637 GroupType 2638 The group type to determine which action 2639 bucket will be executed. 2640 GroupBucketExecuteType 2641 2642 2643 GroupCounters 2644 Counters per group 2645 GroupCounterType 2646 2647 2648 ActionBuckets 2649 An ordered list of action buckets. Each 2650 action bucket is a set of actions similar to a flow 2651 table. 2652 2653 ActionBucket 2654 2655 2656 2657 2658 2659 ActionBucket 2660 An Action Bucket 2661 2662 2663 Weight 2664 Relative weight of bucket. Only defined for 2665 select groups. 2666 uint16 2667 2668 2669 WatchPort 2670 Port whose state affects whether this bucket 2671 is live. Required for fast failover group 2672 uint32 2673 2674 2675 WatchGroup 2676 Group whose state affects whether this group 2677 is live. Only required for fast failover groups 2678 2679 uint32 2680 2681 2682 Actions 2683 Actions for this bucket 2684 Actions 2685 2686 2687 BucketCounter 2688 A counter for this bucket 2689 BucketCounterType 2690 2691 2692 2693 2694 PortNumberType 2695 Port Number values 2696 2697 uint32 2698 2699 2700 InPort 2701 Sent the packet out the input port. This 2702 virtual port must be explicitly used in order to 2703 send back out of the input port 2704 2705 2706 Table 2707 Submit the packet to the first flow table. 2708 NBL This destination port can only be used in 2709 packet-out messages 2710 2711 2712 Normal 2713 Process with normal L2/L3 switching 2714 2715 2716 2717 Flood 2718 Send the packet to all physical ports in 2719 VLAN, except input port and those blocked or link 2720 down. 2721 2722 2723 All 2724 Send the packet to all physical ports, 2725 except input port. 2726 2727 2728 Controller 2729 Send the packet to the controller. 2730 2731 2732 2733 Local 2734 Local openflow "port". 2735 2736 2737 Any 2738 Wildcard port used only for flow mod 2739 (delete) and flow stats requests. Selects all 2740 flows regardless of output port (including flows 2741 with no output port). 2742 2744 2745 2746 2747 2748 PortConfigurationType 2749 Types of configuration for the OpenFlow port 2750 2751 2752 2753 PortDown 2754 Port is administatively down 2755 boolean 2756 2757 2758 NoReceiving 2759 Drop all packets received by this port 2760 2761 boolean 2762 2763 2764 NoForwarding 2765 Drop packets forwarded to the port 2766 boolean 2767 2768 2769 NoPacket_In 2770 Do not send packet-in messages for port 2771 2772 boolean 2773 2774 2775 2776 2777 PortStateType 2778 Current State of the port 2779 2780 2781 LinkDown 2782 No physical link present 2783 boolean 2784 2785 2786 PortBlocked 2787 Port is blocked 2788 boolean 2789 2790 2791 PortLive 2792 Live for Fast Failover Group 2793 boolean 2794 2795 2796 2797 2798 PortFeaturesType 2799 Port Features 2800 2801 2802 SpeedTypes 2803 Types of Speed supported 2804 2805 2806 10MB_HD 2807 10 Mb half-duplex rate support. 2808 2809 boolean 2810 2811 2812 10MB_FD 2813 10 Mb full-duplex rate support. 2814 2815 boolean 2816 2817 2818 100MB_HD 2819 100 Mb half-duplex rate support. 2820 2821 boolean 2822 2823 2824 100MB_FD 2825 100 Mb full-duplex rate support. 2826 2827 boolean 2828 2829 2830 1GB_HD 2831 1 Gb half-duplex rate support. 2832 2833 boolean 2834 2835 2836 1GB_FD 2837 1 Gb full-duplex rate support. 2838 2839 boolean 2841 2842 2843 10GB_FD 2844 10 Gb full-duplex rate support. 2845 2846 boolean 2847 2848 2849 40GB_FD 2850 40 Gb full-duplex rate support. 2851 2852 boolean 2853 2854 2855 100GB_FD 2856 100 Gb full-duplex rate support. 2857 2858 boolean 2859 2860 2861 1TB_FD 2862 1 Tb full-duplex rate support. 2863 2864 boolean 2865 2866 2867 Other 2868 Other rate, not listed. 2869 boolean 2870 2871 2872 2873 2874 MediumConnected 2875 Medium Connected to the port 2876 2877 2878 Copper 2879 Copper Medium 2880 boolean 2881 2882 2883 Fiber 2884 Fiber Medium 2885 boolean 2886 2887 2888 2889 2890 Auto 2891 Auto-negotiation 2892 boolean 2893 2894 2895 PauseTypes 2896 Pause Types supported of the port 2897 2898 2899 Pause 2900 Pause 2901 boolean 2902 2903 2904 AsymmetricPause 2905 Asymmetric pause 2906 boolean 2907 2908 2909 2910 2911 2912 2913 PortCounterType 2914 Counter per port 2915 2916 2917 ReceivedPackets 2918 Packets Received 2919 uint64 2920 2921 2922 TransmittedPackets 2923 Packets Transmitted 2924 uint64 2925 2926 2927 ReceivedBytes 2928 Bytes Received 2929 uint64 2930 2931 2932 TransmittedBytes 2933 Bytes Transmitted 2934 uint64 2935 2936 2937 ReceivedDrops 2938 Drops Received 2939 uint64 2940 2941 2942 TransmitDrops 2943 Transmit Drops 2944 uint64 2945 2946 2947 RecieveErrors 2948 Errors in reception 2949 uint64 2950 2951 2952 TransmitErrors 2953 Errors in transmittion 2954 uint64 2955 2956 2957 ReceivedFrameAlignmentErrors 2958 Frame Alignment Errors received 2959 uint64 2960 2961 2962 ReceiveOverrunErrors 2963 Received Overrun Errors 2964 uint64 2965 2966 2967 ReceivedCRCErrors 2968 CRC Errors in received packets 2969 uint64 2970 2971 2972 Collisions 2973 Collisions 2974 uint64 2975 2976 2977 2978 2979 QueuePropertyType 2980 Property type for a queue 2981 2982 uint16 2983 2984 2985 None 2986 No property defined 2987 2988 2989 MinimumRate 2990 Minimum datarate guaranteed 2991 2992 2993 2994 2995 2996 QueueArrayPropertiesType 2997 Type Definition for property 2998 2999 3000 Property 3001 One of Queue Priority Types 3002 QueuePropertyType 3003 3004 3005 Length 3006 Length of property 3007 uint32 3008 3009 3010 3011 3012 QueueCounterType 3013 Counters per queue 3014 3015 3016 TransmitPackets 3017 Packets Transmitted 3018 uint64 3019 3020 3021 TransmitBytes 3022 Bytes Transmitted 3023 uint64 3024 3025 3026 TransimtOverrunErrors 3027 Overrun Errors 3028 uint64 3029 3030 3031 3032 3033 ActionRowType 3034 The ActionSet Row Type 3035 3036 3037 ActionTypes 3038 The type of action for the action set 3039 3040 ActionType 3041 3042 3043 LFBClassID 3044 The LFBClassID this action is supposed to go 3045 3046 uint32 3047 3048 3049 LFBInstanceID 3050 The LFBInstanceID this action is supposed to 3051 go 3052 uint32 3053 3054 3055 ActionTableIndex 3056 The index of the action in the 3057 LFBClass.LFBInstance. If the LFB class is a group, 3058 then the index is the group index. 3059 3060 uint32 3061 3062 3063 3064 3065 3066 3067 IngressPort 3068 The Ingress port the packet has arrived from. 3069 3070 1024 3071 uint32 3072 3073 3074 InPhyPort 3075 The Port Index of the Physical interface the frame 3076 entered the switch 3077 1025 3078 uint32 3079 3080 3081 PacketID 3082 The PacketID metadata is used to uniquely identify 3083 a packet within the Flow Table or the Group Table to 3084 continue processing it after it has been returned from an 3085 OFActionLFB. 3086 1026 3087 uint32 3088 3089 3090 ActionIndex 3091 The Action Index metadata is used to point the row 3092 in the array in an Action LFB 3093 1027 3094 uint32 3095 3096 3097 GroupIndex 3098 The Group index metadata is used to point to the 3099 row of the array in an Group LFB 3100 1028 3101 uint32 3102 3103 3104 LFBClassIDMetadata 3105 The LFBClassID 3106 1029 3107 uint32 3108 3109 3110 LFBInstanceIDMetadata 3111 The LFB Instance ID 3112 1030 3113 uint32 3114 3115 3116 QueueID 3117 The Queue ID 3118 1031 3119 uint32 3120 3121 3122 BufferID 3123 The Buffer ID of a stored packet in the switch 3124 requried for the PacketOut message 3125 1032 3126 uint32 3127 3128 3129 RedirectReason 3130 The reason the packet was redirected to the 3131 controller 3132 1033 3133 3134 uchar 3135 3136 3137 NoMatch 3138 No match on the Flow Table (table miss) 3139 3140 3141 3142 Action 3143 Specific Output to controller action. 3144 3145 3146 3147 3148 3149 3150 FlowTableID 3151 The FlowTable ID the packet was sent to the 3152 controller from 3153 1034 3154 uchar 3155 3156 3157 ActionList 3158 The Action List that may come along with the packet 3159 in a PacketOut message 3160 1035 3161 3162 ActionRowType 3163 3164 3165 3166 ActionSet 3167 The Action Set per packet. 3168 1036 3169 3170 ActionRowType 3171 3172 ActionTypes 3173 3174 3175 3176 3177 3178 3179 OFSwitch 3180 Similar to the FEProtocol and FEObject LFB, the 3181 OpenFlowSwitch LFB contains information required for the 3182 openflow protocol. 3183 1.1 3184 3185 3186 DatapathID 3187 Datapath unique ID. The lower 48-bits are for 3188 a MAC address, while the upper 16-bits are 3189 implementer-defined. 3190 uint64 3191 3192 3193 HandleFragments 3194 if true drop fragments. If false no special 3195 handling. 3196 boolean 3197 3198 3199 ReassembleFragments 3200 If true, reassemble fragments 3201 boolean 3202 3203 3204 InvalidTTLtoController 3205 Send packets with invalid TTL ie. 0 or 1 to 3206 controller 3207 boolean 3208 3209 3210 SwitchDescription 3211 Information about the switch 3212 SwitchDescriptionType 3213 3214 3215 Ports 3216 The Ports that this switch has. It is an 3217 array of the Port Numbers 3218 3219 uint32 3220 3221 3222 3223 3224 3225 FlowStatistics 3226 Whether the switch keep flow statistics 3227 3228 boolean 3229 3230 3231 TableStatistics 3232 Whether the switch keep table statistics 3233 3234 boolean 3235 3236 3237 PortStatistics 3238 Whether the switch keep port statistics 3239 3240 boolean 3241 3242 3243 GroupStatistics 3244 Whether the switch keep group statistics 3245 3246 boolean 3247 3248 3249 IPReassembly 3250 Whether the switch can reassemble IP 3251 fragments 3252 boolean 3253 3254 3255 QueueStats 3256 Whether the switch keeps queue statistics 3257 3258 boolean 3259 3260 3261 ARPMatchIP 3262 Whether the switch matches IP addresses in 3263 APR packets 3264 boolean 3265 3266 3267 ActionsSupported 3268 What actions are supported 3269 3270 3271 ActionType 3272 3273 3274 3275 3276 3277 ActionType 3278 3279 3280 3281 3282 TablesSupported 3283 Number of tables supported by the datapath 3284 3285 uchar 3286 3287 3288 3289 3290 PortAdded 3291 This event is sent when a port is added 3292 3293 3294 Ports 3295 3296 3297 3298 3299 PortDeleted 3300 This event is sent when a port is deleted 3301 3302 3303 Ports 3304 3305 3306 3307 3308 PortModified 3309 This event is sent when a port is modified 3310 3311 3312 Ports 3313 3314 3315 3316 3317 3318 3319 OFFlowTables 3320 An LFB that houses all OpenFlow Flow Tables 3321 residing in the switch 3322 1.1 3323 3324 3325 InputPort 3326 An Input port that expects packets from an 3327 OFPort LFB 3328 3329 3330 Arbitrary 3331 3332 3333 IngressPort 3334 InPhyPort 3335 3336 3337 3338 3339 PacketReturn 3340 A port that expects the packet to be returned 3341 from an OFActionLFB. If the OFActionLFB is the 3342 OFQueueLFB then the QueueID metadata is expected as 3343 well. 3344 3345 3346 Arbitrary 3347 3348 3349 PacketID 3350 QueueID 3351 3352 3353 3354 3355 RedirectPacketIn 3356 A port that expects a packet from the 3357 controller 3358 3359 3360 Arbitrary 3361 3362 3363 ActionList 3364 IngressPort 3365 3366 3367 3368 3369 3370 3371 OutputPort 3372 A port that produces packets leaving the flow 3373 table to go to the OFOutputAction (to be sent to an 3374 output port) 3375 3376 3377 Arbitrary 3378 3379 3380 IngressPort 3381 InPhyPort 3382 QueueID 3383 3384 3385 3386 3387 GroupPort 3388 A port that produces packets leaving the flow 3389 table to go to the OFGroupTable. 3390 3391 3392 Arbitrary 3393 3394 3395 IngressPort 3396 InPhyPort 3397 GroupIndex 3398 QueueID 3399 3400 3401 3402 3403 ActionPort 3404 A port that sends the packet to an OFAction 3405 LFB 3406 3407 3408 Arbitrary 3409 3410 3411 LFBClassIDMetadata 3412 PacketID 3413 ActionIndex 3414 3415 3416 3417 3418 ActionSetPort 3419 A port that sends the packet to the ActionSet 3420 LFB 3421 3422 3423 Arbitrary 3424 3425 3426 IngressPort 3427 InPhyPort 3428 ActionSet 3429 QueueID 3430 3431 3432 3433 3434 RedirectPacketOut 3435 A port that sends a packet or part of it to 3436 the controller 3437 3438 3439 Arbitrary 3440 3441 3442 IngressPort 3443 InPhyPort 3444 RedirectReason 3445 FlowTableID 3446 3447 3448 3449 3450 3451 3452 FlowTables 3453 Flow entries inside the FlowTable LFB 3454 3455 3456 3457 3458 FlowEntries 3459 An array of Flow Entries 3460 3461 FlowEntry 3462 3463 3464 3465 FlowTableCounter 3466 A counter for each Flow Table 3467 3468 TableCounterType 3469 3470 3471 MissBehaviour 3472 What should the FlowTable do if a 3473 miss occurs 3474 FlowTableMissConfigType 3475 3476 3477 3478 3479 3480 ApplyActionList 3481 Table of actions for each flow 3482 3483 Actions 3484 3485 3486 3487 WriteActions 3488 Table of Actions to write to the ActionSet 3489 3490 3491 Actions 3492 3493 3494 3495 WriteMetadataTable 3496 The write MetaDataTable 3497 3498 WriteMetadataTableType 3499 3500 3501 3502 GotoFlowTable 3503 Containing the FlowTable IDs this flow should 3504 go to. 3505 3506 uint32 3507 3508 3509 3510 GroupTable 3511 Table of group indeces to point a packet to 3512 3513 3514 uint32 3515 3516 3517 3518 3519 3520 FlowRemoved 3521 If a CE subscribes to this event, it will 3522 send an event when a flow is removed. 3523 3524 FlowEntries 3525 FlowEntry 3526 3527 3528 3529 3530 FlowTableID 3531 3532 3533 FlowEntries 3534 FlowEntry 3535 Cookie 3536 3537 3538 FlowEntries 3539 FlowEntry 3540 MatchFields 3541 3542 3543 FlowEntries 3544 FlowEntry 3545 Timeouts 3546 IdleTimeout 3547 3548 3549 FlowEntries 3550 FlowEntry 3551 Priority 3552 3553 3554 3555 3556 3557 3558 OFGroupTable 3559 The OpenFlow Group Tables 3560 1.1 3561 3562 3563 PacketIn 3564 A port to expect packets, the GroupIndex 3565 metadata, the IngressPort and InPhyPort and 3566 optionally the QueueID if the packet has already 3567 been through the OFActionSetQueue LFB. 3568 3569 3570 Arbitrary 3571 3572 3573 GroupIndex 3574 IngressPort 3575 InPhyPort 3576 QueueID 3577 3578 3579 3580 3581 PacketReturn 3582 A port that expects the packet to be returned 3583 from an OFActionLFB. If the OFActionLFB is the 3584 OFQueueLFB then the QueueID metadata is expected as 3585 well. 3586 3587 3588 Arbitrary 3589 3590 3591 PacketID 3592 QueueID 3593 3594 3595 3596 3597 3598 3599 PacketOut 3600 The port to return the packet to caller 3601 3602 3603 3604 Arbitrary 3605 3606 3607 3608 3609 ActionPort 3610 A port that sends the packet to an 3611 OFActionLFB 3612 3613 3614 Arbitrary 3615 3616 3617 LFBClassIDMetadata 3618 LFBInstanceIDMetadata 3619 ActionIndex 3620 3621 3622 3623 3624 3625 3626 GroupTable 3627 The group table 3628 3629 GroupTableEntry 3630 3631 3632 3633 3634 3635 OFPort 3636 Input or Output port of an OpenFlow switch 3637 3638 1.1 3639 3640 3641 PacketOut 3642 The input port of the Port LFB from the 3643 OFActionOutput LFB to output packets. 3644 3645 3646 Arbitrary 3647 3648 3649 QueueID 3650 3651 3652 3653 3654 3655 3656 PacketIn 3657 Sends a packet to the OFFlowTables that is 3658 received by the OFPort LFB. 3659 3660 3661 Arbitrary 3662 3663 3664 IngressPort 3665 InPhyPort 3666 3667 3668 3669 3670 QueueOut 3671 Sends a packet to the OFQueue LFB to be 3672 processed and output from the switch 3673 3674 3675 Arbitrary 3676 3677 3678 3679 3680 3681 3682 PortNumber 3683 The port number uniquely identifies a port 3684 within a switch. 3685 PortNumberType 3686 3687 3688 IEEEMAC 3689 MAC Address of the port 3690 IEEEMAC 3691 3692 3693 Name 3694 Human readable name of the port 3695 string[16] 3696 3697 3698 Configuration 3699 Configuration of the port 3700 PortConfigurationType 3701 3702 3703 State 3704 State of the OpenFlow Switch 3705 PortStateType 3706 3707 3708 CurrentFeatures 3709 Current features of the port 3710 PortFeaturesType 3711 3712 3713 Advertised 3714 Features advertised by the port 3715 PortFeaturesType 3716 3717 3718 CurrentSpeed 3719 Current port bitrate in kbps 3720 uint32 3721 3722 3723 MaximumSpeed 3724 Maximum port bitrate in kbps 3725 uint32 3726 3727 3728 PortCounter 3729 Counters for the port 3730 PortCounterType 3731 3732 3733 3734 3735 Supported 3736 Features Supported by the port 3737 PortFeaturesType 3738 3739 3740 Peer 3741 Features advertised by the peer 3742 PortFeaturesType 3743 3744 3745 3746 3747 OFQueue 3748 A queue LFB that can be attached to a port and be 3749 used to map flows on it. Flows mapped to a queue will be 3750 treated according to that queue's configuration 3751 1.1 3752 3753 3754 PacketIn 3755 An input port that expects any kind of frame. 3756 3757 3758 3759 Arbitrary 3760 3761 3762 3763 3764 3765 3766 QueueID 3767 ID for the specific queue 3768 uint32 3769 3770 3771 Properties 3772 List of queue properties 3773 3774 QueueArrayPropertiesType 3775 3776 3777 3778 QueueCounter 3779 Counters for the queue 3780 QueueCounterType 3781 3782 3783 3784 3785 OFRedirectIn 3786 The OFRedirectIn LFB abstracts the process for the 3787 controller to inject data packets into the switch to input 3788 data packets into the data path. 3789 1.1 3790 RedirectIn 3791 3792 3793 PacketIn 3794 An output port that sends a packet in the 3795 data path 3796 3797 3798 Arbitrary 3799 3800 3801 ActionList 3802 IngressPort 3803 3804 3805 3806 3807 BufferIn 3808 An output port that sends only the buffer id 3809 to locate a buffered packet 3810 3811 3812 BufferID 3813 ActionList 3814 IngressPort 3815 3816 3817 3818 3819 3820 3821 OFRedirectOut 3822 The OFRedirectOut LFB abstracts the process for the 3823 switch to deliver data packets to the controller 3824 3825 1.1 3826 RedirectOut 3827 3828 3829 Outgoing 3830 The input port expects either the whole 3831 packet to be sent to the controller or part of it 3832 along with the buffer ID 3833 3834 3835 Arbitrary 3836 3837 3838 IngressPort 3839 InPhyPort 3840 RedirectReason 3841 FlowTableID 3842 BufferID 3843 3844 3845 3846 3847 3848 3849 OFActionSet 3850 The ActionSet LFB 3851 1.1 3852 3853 3854 PacketIn 3855 A port that expects a packet along with 3856 metadata 3857 3858 3859 IngressPort 3860 InPhyPort 3861 ActionSet 3862 QueueID 3863 3864 3865 3866 3867 PacketReturn 3868 A port that expects the packet to be returned 3869 from an OFActionLFB. If the OFActionLFB is the 3870 OFQueueLFB then the QueueID metadata is expected as 3871 well. 3872 3873 3874 Arbitrary 3875 3876 3877 PacketID 3878 QueueID 3879 3880 3881 3882 3883 3884 3885 OutputPort 3886 A port that produces packets leaving the flow 3887 table to go to the OFOutputAction (to be sent to an 3888 output port) 3889 3890 3891 Arbitrary 3892 3893 3894 IngressPort 3895 InPhyPort 3896 QueueID 3898 3899 3900 3901 3902 GroupPort 3903 A port that produces packets leaving the flow 3904 table to go to the OFGroupTable. 3905 3906 3907 Arbitrary 3908 3909 3910 IngressPort 3911 InPhyPort 3912 GroupIndex 3913 QueueID 3914 3915 3916 3917 3918 ActionPort 3919 A port that sends the packet to an OFAction 3920 LFB 3921 3922 3923 Arbitrary 3924 3925 3926 LFBClassIDMetadata 3927 PacketID 3928 ActionIndex 3929 3930 3931 3932 3933 3934 3935 OFBuffer 3936 An LFB that buffers packets and send them to the 3937 controller 3938 1.1 3939 3940 3941 FlowTableIn 3942 A packet received by a Flow Table to be 3943 buffered and sent to the controller 3944 3945 3946 Arbitrary 3947 3948 3949 IngressPort 3950 InPhyPort 3951 3952 3953 3954 3955 ControllerIn 3956 A Buffer ID received as metadata along with 3957 optional Action list from the controller 3958 3959 3960 BufferID 3961 ActionList 3962 3963 3964 3965 3966 3967 3968 ToFlowTable 3969 When a buffer ID has been received optionally 3970 along with the Action List metadata it is sent to 3971 the Flow Tables for process 3972 3973 3974 Arbitrary 3975 3976 3977 ActionList 3978 3979 3980 3981 3982 ToRedirectOut 3983 When a packet has been received it will be 3984 buffered and the buffer id will be sent to the 3985 redirect out. 3986 3987 3988 BufferID 3989 3990 3991 3992 3993 3994 3995 MissSendLen 3996 Max bytes of new flow that datapath should 3997 send to the controller. 3998 uint16 3999 4000 4001 4002 4003 MaxBufferedPackets 4004 Maximum packets buffered at once. 4005 uint32 4006 4007 4008 4009 4010 OFAction 4011 An LFB that performs one specific action on a 4012 packet in the OpenFlow switch. The OFActionLFB expects any 4013 kind of packet and as metadata the FlowTableInstanceID to 4014 know from which Flow Table the packet has arrived from and 4015 the Action Index to specify the row in the Action Table, 4016 if there is an Action table. 4017 1.1 4018 4019 4020 PacketIn 4021 An input port that gets the packet to perform 4022 the action on. Expects the ClassID of the LFB that 4023 calls it to know to which LFB to return it to. Can 4024 accept calls from the OFFlowTables or the 4025 OFGroupLFB. 4026 4027 4028 Arbitrary 4029 4030 4031 PacketID 4032 LFBClassIDMetadata 4033 ActionIndex 4034 IngressPort 4035 InPhyPort 4036 QueueID 4037 4038 4039 4040 4041 4042 4043 PacketOut 4044 The output port from which the packet will 4045 be send back to the LFB (OFFlowTables or 4046 OFGroupTable) from which it came from. 4047 4048 4049 Arbitrary 4050 4051 4052 PacketID 4053 4054 4055 4056 4057 4058 4059 OFActionOutput 4060 An LFB that performs the Output Action 4061 1.1 4062 OFAction 4063 4064 4065 PortOutput 4066 Send a copy of the packet to the specified 4067 port(s) 4068 4069 4070 Arbitrary 4071 4072 4073 4074 4075 4076 4077 OutputActionTable 4078 Output to switch port 4079 4080 4081 4082 Port 4083 The port to send the packet out 4084 4085 PortNumberType 4086 4087 4088 MaxLength 4089 If the port is the controller sets 4090 the maximum number of bytes to send. 4091 4092 uint16 4093 4094 4095 4096 4097 4098 4099 4100 OFActionSetVLANVID 4101 An LFB that performs the Set VLANID Action 4102 4103 1.1 4104 OFAction 4105 4106 4107 SetVLANVIDActionTable 4108 Set the 802.1q VLAN ID 4109 4110 uint16 4111 4112 4113 4114 4115 4116 SetVLANPriorityActionTable 4117 An LFB that performs the Set VLAN Priority Action 4118 4119 1.1 4120 OFAction 4121 4122 4123 SetVLANPriorityActionTable 4124 Set the 802.1q VLAN Priority 4125 4126 uchar 4127 4128 4129 4130 4131 4132 OFActionSetMACSource 4133 An LFB that performs the Set MAC Source Action 4134 4135 1.1 4136 OFAction 4137 4138 4139 SetMACSourceActionTable 4140 Set MAC source address 4141 4142 IEEEMAC 4143 4144 4145 4146 4147 4148 OFActionSetMACDestination 4149 An LFB that performs the Set MAC Destination 4150 Action 4151 1.1 4152 OFAction 4153 4154 4155 SetMACDestinationActionTable 4156 Set MAC destination address 4157 4158 IEEEMAC 4159 4160 4161 4162 4163 4164 OFActionSetIPSource 4165 An LFB that performs the Set IP Source Action 4166 4167 1.1 4168 OFAction 4169 4170 4171 SetIPSourceActionTable 4172 Set the IP source address 4173 4174 IPv4Addr 4175 4176 4177 4178 4179 4180 OFActionSetIPDestination 4181 An LFB that performs the Set IP Destination Action 4182 4183 1.1 4184 OFAction 4185 4186 4187 SetIPDestinationActionTable 4188 Set the IP destination address 4189 4190 IPv4Addr 4191 4192 4193 4194 4195 4196 OFActionSetIPTOS 4197 An LFB that performs the Set VLANID Action 4198 4199 1.1 4200 OFAction 4201 4202 4203 SetIPTOSActionTable 4204 Set IP ToS field 4205 4206 uchar 4207 4208 4209 4210 4211 4212 OFActionSetIPECN 4213 An LFB that performs the Set IP ECN Action 4214 4215 1.1 4216 OFAction 4217 4218 4219 SetIPECNActionTable 4220 Set IP ECN field 4221 4222 uchar 4223 4224 4225 4226 4227 4228 OFActionSetTCPSource 4229 An LFB that performs the Set TCP/UDP/SCTP Source 4230 port Action 4231 1.1 4232 OFAction 4233 4234 4235 SetTCPSourceActionTable 4236 Sets TCP/UDP/SCTP source port 4237 4238 uint16 4239 4240 4241 4242 4243 4244 OFActionSetTCPDestination 4245 An LFB that performs the Set TCP/UDP/SCTP 4246 Destination port Action 4247 1.1 4248 OFAction 4249 4250 4251 SetTCPDestinationActionTable 4252 Sets TCP/UDP/SCTP destination port 4253 4254 4255 uint16 4256 4257 4258 4259 4260 4261 OFActionCopyTTLOut 4262 An LFB that performs the copy TTL outwards Action 4263 4264 1.1 4265 OFAction 4266 4267 4268 OFActionCopyTTLIn 4269 An LFB that performs the copy TTL inwards Action 4270 4271 1.1 4272 OFAction 4273 4274 4275 OFActionSetMPLSLabel 4276 An LFB that performs the Set MPLS Label Action 4277 4278 1.1 4279 OFAction 4280 4281 4282 SetMPLSLabelActionTable 4283 Sets MPLS Label Table 4284 4285 uint32 4286 4287 4288 4289 4290 4291 OFActionSetMPLSTC 4292 An LFB that performs the Set MPLS Traffic Class 4293 Action 4294 1.1 4295 OFAction 4296 4297 4298 SetMPLSTCActionTable 4299 Sets MPLS Label Table 4300 4301 uchar 4302 4303 4304 4305 4306 4307 OFActionSetMPLSTTL 4308 An LFB that performs the Set MPLS TTL Action 4309 4310 1.1 4311 OFAction 4312 4313 4314 OFActionSetMPLSTTL 4315 Sets MPLS TTL Table 4316 4317 uchar 4318 4319 4320 4321 4322 4323 OFActionDecrementMPLSTTL 4324 An LFB that performs the decrementation of the 4325 MPLS TTL Action 4326 1.1 4327 OFAction 4328 4329 4330 OFActionPushVLan 4331 An LFB that performs the Push VLAN Action 4332 4333 1.1 4334 OFAction 4335 4336 4337 PushVLANTable 4338 Push VLAN Table 4339 4340 uint16 4341 4342 4343 4344 4345 4346 OFActionPopVLAN 4347 An LFB that performs the Pop VLAN Action 4348 4349 1.1 4350 OFAction 4351 4352 4353 OFActionPushMPLS 4354 An LFB that performs the Push MPLS Action 4355 4356 1.1 4357 OFAction 4358 4359 4360 PushMPLSTable 4361 Push MPLS Table 4362 4363 uint16 4364 4365 4366 4367 4368 4369 OFActionPopMPLS 4370 An LFB that performs the Pop MPLS Action 4371 4372 1.1 4373 OFAction 4374 4375 4376 PopMPLSTable 4377 Pop MPLS Table 4378 4379 uint16 4380 4381 4382 4383 4384 4385 OFActionSetQueue 4386 An LFB that performs the Set Queue Action 4387 4388 1.1 4389 OFAction 4390 4391 4392 QueuePacketOut 4393 The output port from which the packet will be 4394 send back to the Flow Table/GroupTable from which it 4395 came from. 4396 4397 4398 Arbitrary 4399 4400 4401 PacketID 4402 QueueID 4403 4404 4405 4406 4407 4408 4409 SetQueueTable 4410 Sets Queue Table 4411 4412 uint32 4413 4414 4415 4416 4417 4418 OFActionSetIPTTL 4419 An LFB that performs the Set IP TTL Action 4420 4421 1.1 4422 OFAction 4423 4424 4425 SetIPTTLActionTable 4426 Sets IP TTL Table 4427 4428 uchar 4429 4430 4431 4432 4433 4434 OFActionDecrementIPTTL 4435 An LFB that performs the decrementation of the IP 4436 TTL Action 4437 1.1 4438 OFAction 4439 4440 4441 4443 OpenFlow XML Library 4445 7. Acknowledgements 4447 The authors would like to thank Ahmad N. Quttoum, Zoltan Lajos Kis, 4448 Joel Halpern and especially Jamal Hadi Salim, for discussions which 4449 helped shape this document. 4451 8. IANA Considerations 4453 (TBD) 4455 9. Security Considerations 4457 TBD 4459 10. References 4461 10.1. Normative References 4463 [I-D.haleplidis-forces-model-extension] 4464 Haleplidis, E., "ForCES Model Extension", draft- 4465 haleplidis-forces-model-extension-01 (work in progress), 4466 October 2012. 4468 [I-D.ietf-forces-lfb-lib] 4469 Wang, W., Haleplidis, E., Ogawa, K., Li, C., and J. 4470 Halpern, "ForCES Logical Function Block (LFB) Library", 4471 draft-ietf-forces-lfb-lib-08 (work in progress), February 4472 2012. 4474 [McKeown] , "McKeown, N., Anderson, T., Balakrishnan, H., et al, 4475 "OpenFlow: enabling innovation in campus networks", ACM 4476 SIGCOMM Computer Communication Review. 2008, 4477 38(2):69-74.", , . 4480 [OpenFlowSpec1.1] 4481 http://www.OpenFlow.org/, "The OpenFlow 1.1 4482 Specification.", , . 4485 [RFC3654] Khosravi, H. and T. Anderson, "Requirements for Separation 4486 of IP Control and Forwarding", RFC 3654, November 2003. 4488 [RFC3746] Yang, L., Dantu, R., Anderson, T., and R. Gopal, 4489 "Forwarding and Control Element Separation (ForCES) 4490 Framework", RFC 3746, April 2004. 4492 [RFC5810] Doria, A., Hadi Salim, J., Haas, R., Khosravi, H., Wang, 4493 W., Dong, L., Gopal, R., and J. Halpern, "Forwarding and 4494 Control Element Separation (ForCES) Protocol 4495 Specification", RFC 5810, March 2010. 4497 [RFC5811] Hadi Salim, J. and K. Ogawa, "SCTP-Based Transport Mapping 4498 Layer (TML) for the Forwarding and Control Element 4499 Separation (ForCES) Protocol", RFC 5811, March 2010. 4501 [RFC5812] Halpern, J. and J. Hadi Salim, "Forwarding and Control 4502 Element Separation (ForCES) Forwarding Element Model", RFC 4503 5812, March 2010. 4505 [RFC5813] Haas, R., "Forwarding and Control Element Separation 4506 (ForCES) MIB", RFC 5813, March 2010. 4508 [RFC6053] Haleplidis, E., Ogawa, K., Wang, W., and J. Hadi Salim, 4509 "Implementation Report for Forwarding and Control Element 4510 Separation (ForCES)", RFC 6053, November 2010. 4512 10.2. Informative References 4514 [RFC2629] Rose, M.T., "Writing I-Ds and RFCs using XML", RFC 2629, 4515 June 1999. 4517 Authors' Addresses 4519 Evangelos Haleplidis 4520 University of Patras 4521 Department of Electrical & Computer Engineering 4522 Patras 26500 4523 Greece 4525 Email: ehalep@ece.upatras.gr 4527 Omar Cherkaoui 4528 University of Quebec in Montreal 4529 Montreal 4530 Canada 4532 Email: cherkaoui.omar@uqam.ca 4534 Susan Hares 4535 Huawei 4536 USA 4538 Email: shares@ndzh.com 4540 Weiming Wang 4541 Zhejiang Gongshang University 4542 18 Xuezheng Str., Xiasha University Town 4543 Hangzhou 310018 4544 P.R.China 4546 Phone: +86-571-28877721 4547 Email: wmwang@zjgsu.edu.cn