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