`
`Version 1.4.0 (Wire Protocol 0x05)
`October 14, 2013
`
`ONF TS-012
`
`Ex. 1018
`Juniper Networks, Inc. / Page 1 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`Disclaimer
`
`THIS SPECIFICATION IS PROVIDED ”AS IS” WITH NO WARRANTIES WHATSOEVER,
`INCLUDING ANY WARRANTY OF MERCHANTABILITY, NONINFRINGEMENT, FIT-
`NESS FOR ANY PARTICULAR PURPOSE, OR ANY WARRANTY OTHERWISE ARISING
`OUT OF ANY PROPOSAL, SPECIFICATION OR SAMPLE. Without limitation, ONF dis-
`claims all liability, including liability for infringement of any proprietary rights, relating to use
`of information in this specification and to the implementation of this specification, and ONF
`disclaims all liability for cost of procurement of substitute goods or services, lost profits, loss of
`use, loss of data or any incidental, consequential, direct, indirect, or special damages, whether
`under contract, tort, warranty or otherwise, arising in any way out of use or reliance upon this
`specification or any information herein.
`
`No license, express or implied, by estoppel or otherwise, to any Open Networking Foundation or
`Open Networking Foundation member intellectual property rights is granted herein.
`
`Except that a license is hereby granted by ONF to copy and reproduce this specification for
`internal use only.
`
`Contact the Open Networking Foundation at http://www.opennetworking.org for information
`on specification licensing through membership agreements.
`
`Any marks and brands contained herein are the property of their respective owners.
`
`Contents
`
`1 Introduction
`
`2 Switch Components
`
`3 Glossary
`
`4 OpenFlow Ports
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`4.1 OpenFlow Ports
`4.2 Standard Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`4.3 Physical Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`4.4 Logical Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`4.5 Reserved Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`5 OpenFlow Tables
`5.1 Pipeline Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.2 Flow Table
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.3 Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.4 Table-miss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.5 Flow Removal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.6 Group Table
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.6.1 Group Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`9
`
`9
`
`10
`
`11
`11
`12
`12
`12
`12
`
`13
`14
`15
`16
`17
`17
`18
`18
`
`2
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 2 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`5.7 Meter Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.7.1 Meter Bands
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.8 Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.9
`Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.10 Action Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.11 Action List
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.12 Actions
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`5.12.1 Default values for fields on push . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`6 OpenFlow Channel
`6.1 OpenFlow Protocol Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.1.1 Controller-to-Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.1.2 Asynchronous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.1.3
`Symmetric
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.2 Message Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3 OpenFlow Channel Connections
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3.1 Connection Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3.2 Connection Interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3.3 Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3.4 Multiple Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.3.5 Auxiliary Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.4 Flow Table Modification Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.5 Flow Table Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.6 Group Table Modification Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.7 Meter Modification Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8 Bundle Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8.1 Bundle overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8.2 Bundle example usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8.3 Bundle error processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8.4 Bundle atomic modifications
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6.8.5 Bundle parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`7 The OpenFlow Protocol
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.1 OpenFlow Header
`7.1.1 Padding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2 Common Structures
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.1 Port Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.1.1 Port Description Structures . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.1.2 Port Description Properties . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2 Flow Match Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.1 Flow Match Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.2 Flow Match Field Structures . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.3 OXM classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.4 Flow Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.5 Flow Match Field Masking . . . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.6 Flow Match Field Prerequisite . . . . . . . . . . . . . . . . . . . . . . .
`7.2.2.7 Flow Match Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`19
`20
`20
`22
`22
`23
`24
`26
`
`26
`26
`27
`27
`28
`28
`29
`30
`31
`31
`31
`34
`35
`38
`39
`41
`42
`42
`42
`43
`43
`44
`
`44
`44
`46
`46
`46
`46
`48
`51
`51
`52
`53
`53
`54
`54
`55
`
`3
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 3 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`60
`7.2.2.8 Experimenter Flow Match Fields . . . . . . . . . . . . . . . . . . . . . .
`60
`7.2.3 Flow Instruction Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`62
`7.2.4 Action Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`68
`7.2.5 Experimenter Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`69
`7.3 Controller-to-Switch Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`69
`7.3.1 Handshake
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`70
`7.3.2
`Switch Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`71
`7.3.3 Flow Table Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`71
`7.3.4 Modify State Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`71
`7.3.4.1 Modify Flow Table Message
`. . . . . . . . . . . . . . . . . . . . . . . .
`74
`7.3.4.2 Modify Flow Entry Message
`. . . . . . . . . . . . . . . . . . . . . . . .
`77
`7.3.4.3 Modify Group Entry Message . . . . . . . . . . . . . . . . . . . . . . . .
`79
`7.3.4.4 Port Modification Message . . . . . . . . . . . . . . . . . . . . . . . . .
`81
`7.3.4.5 Meter Modification Message
`. . . . . . . . . . . . . . . . . . . . . . . .
`84
`7.3.5 Multipart Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`87
`7.3.5.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`88
`7.3.5.2
`Individual Flow Statistics . . . . . . . . . . . . . . . . . . . . . . . . . .
`89
`7.3.5.3 Aggregate Flow Statistics . . . . . . . . . . . . . . . . . . . . . . . . . .
`90
`7.3.5.4 Table Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`90
`7.3.5.5 Table Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`91
`7.3.5.6 Table Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`96
`7.3.5.7 Port Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`99
`7.3.5.8 Port Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7.3.5.9 Queue Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
`7.3.5.10 Queue Descriptions
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
`7.3.5.11 Group Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
`7.3.5.12 Group Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
`7.3.5.13 Group Features
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
`7.3.5.14 Meter Statistics
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
`7.3.5.15 Meter Configuration Statistics . . . . . . . . . . . . . . . . . . . . . . . 107
`7.3.5.16 Meter Features Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . 107
`7.3.5.17 Flow monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
`7.3.5.18 Experimenter Multipart . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
`7.3.6 Packet-Out Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
`7.3.7 Barrier Message
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
`7.3.8 Role Request Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
`7.3.9 Bundle messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
`7.3.9.1 Bundle control messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . 115
`7.3.9.2 Bundle Add message
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
`7.3.9.3 Bundle flags
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
`7.3.9.4 Bundle properties
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
`7.3.9.5 Creating and opening a bundle . . . . . . . . . . . . . . . . . . . . . . . 118
`7.3.9.6 Adding messages to a bundle . . . . . . . . . . . . . . . . . . . . . . . . 118
`7.3.9.7 Closing a bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
`7.3.9.8 Committing Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
`7.3.9.9 Discarding Bundles
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
`7.3.9.10 Other bundle error conditions
`. . . . . . . . . . . . . . . . . . . . . . . 121
`
`4
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 4 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`7.3.10 Set Asynchronous Configuration Message . . . . . . . . . . . . . . . . . . . . . . 121
`7.4 Asynchronous Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
`7.4.1 Packet-In Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
`7.4.2 Flow Removed Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
`7.4.3 Port Status Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
`7.4.4 Controller Role Status Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
`7.4.5 Table Status Message
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
`7.4.6 Request Forward Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
`7.5 Symmetric Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
`7.5.1 Hello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
`7.5.2 Echo Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
`7.5.3 Echo Reply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
`7.5.4 Error Message
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
`7.5.5 Experimenter Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
`
`A Header file openflow.h
`
`140
`
`174
`B Release Notes
`B.1 OpenFlow version 0.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
`B.2 OpenFlow version 0.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
`B.3 OpenFlow version 0.8.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
`B.4 OpenFlow version 0.8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
`B.5 OpenFlow version 0.8.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
`B.6 OpenFlow version 0.8.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
`B.6.1 IP Netmasks
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
`B.6.2 New Physical Port Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
`B.6.3 IN PORT Virtual Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
`B.6.4 Port and Link Status and Configuration . . . . . . . . . . . . . . . . . . . . . . . 177
`B.6.5 Echo Request/Reply Messages
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
`B.6.6 Vendor Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
`B.6.7 Explicit Handling of IP Fragments . . . . . . . . . . . . . . . . . . . . . . . . . . 179
`B.6.8 802.1D Spanning Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
`B.6.9 Modify Actions in Existing Flow Entries . . . . . . . . . . . . . . . . . . . . . . . 180
`B.6.10 More Flexible Description of Tables
`. . . . . . . . . . . . . . . . . . . . . . . . . 180
`B.6.11 Lookup Count in Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
`B.6.12 Modifying Flags in Port-Mod More Explicit . . . . . . . . . . . . . . . . . . . . . 181
`B.6.13 New Packet-Out Message Format . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
`B.6.14 Hard Timeout for Flow Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
`B.6.15 Reworked initial handshake to support backwards compatibility . . . . . . . . . . 182
`B.6.16 Description of Switch Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
`B.6.17 Variable Length and Vendor Actions . . . . . . . . . . . . . . . . . . . . . . . . . 183
`B.6.18 VLAN Action Changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
`B.6.19 Max Supported Ports Set to 65280 . . . . . . . . . . . . . . . . . . . . . . . . . . 185
`B.6.20 Send Error Message When Flow Not Added Due To Full Tables . . . . . . . . . . 185
`B.6.21 Behavior Defined When Controller Connection Lost
`. . . . . . . . . . . . . . . . 185
`B.6.22 ICMP Type and Code Fields Now Matchable . . . . . . . . . . . . . . . . . . . . 186
`B.6.23 Output Port Filtering for Delete*, Flow Stats and Aggregate Stats . . . . . . . . 186
`
`5
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 5 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`B.7 OpenFlow version 0.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
`B.7.1 Failover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
`B.7.2 Emergency Flow Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.3 Barrier Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.4 Match on VLAN Priority Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.5 Selective Flow Expirations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.6 Flow Mod Behavior
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.7 Flow Expiration Duration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
`B.7.8 Notification for Flow Deletes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.7.9 Rewrite DSCP in IP ToS header . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.7.10 Port Enumeration now starts at 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.7.11 Other changes to the Specification . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.8 OpenFlow version 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.8.1 Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`B.8.2 Flow cookies
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
`B.8.3 User-specifiable datapath description . . . . . . . . . . . . . . . . . . . . . . . . . 189
`B.8.4 Match on IP fields in ARP packets . . . . . . . . . . . . . . . . . . . . . . . . . . 189
`B.8.5 Match on IP ToS/DSCP bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
`B.8.6 Querying port stats for individual ports . . . . . . . . . . . . . . . . . . . . . . . 189
`B.8.7 Improved flow duration resolution in stats/expiry messages . . . . . . . . . . . . 189
`B.8.8 Other changes to the Specification . . . . . . . . . . . . . . . . . . . . . . . . . . 189
`B.9 OpenFlow version 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
`B.9.1 Multiple Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
`B.9.2 Groups
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
`B.9.3 Tags : MPLS & VLAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
`B.9.4 Virtual ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
`B.9.5 Controller connection failure
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
`B.9.6 Other changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
`B.10 OpenFlow version 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
`B.10.1 Extensible match support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
`B.10.2 Extensible ’set field’ packet rewriting support . . . . . . . . . . . . . . . . . . . . 193
`B.10.3 Extensible context expression in ’packet-in’
`. . . . . . . . . . . . . . . . . . . . . 193
`B.10.4 Extensible Error messages via experimenter error type . . . . . . . . . . . . . . . 193
`B.10.5 IPv6 support added . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
`B.10.6 Simplified behaviour of flow-mod request
`. . . . . . . . . . . . . . . . . . . . . . 194
`B.10.7 Removed packet parsing specification . . . . . . . . . . . . . . . . . . . . . . . . 194
`B.10.8 Controller role change mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . 194
`B.10.9 Other changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
`B.11 OpenFlow version 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
`B.11.1 Refactor capabilities negotiation . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
`B.11.2 More flexible table miss support
`. . . . . . . . . . . . . . . . . . . . . . . . . . . 195
`B.11.3 IPv6 Extension Header handling support
`. . . . . . . . . . . . . . . . . . . . . . 196
`B.11.4 Per flow meters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
`B.11.5 Per connection event filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
`B.11.6 Auxiliary connections
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
`B.11.7 MPLS BoS matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
`B.11.8 Provider Backbone Bridging tagging . . . . . . . . . . . . . . . . . . . . . . . . . 197
`
`6
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 6 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`B.11.9 Rework tag order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
`B.11.10Tunnel-ID metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.11.11Cookies in packet-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.11.12Duration for stats
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.11.13On demand flow counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.11.14Other changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.12 OpenFlow version 1.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`B.12.1 Improved version negotiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
`B.12.2 Other changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
`B.13 OpenFlow version 1.3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
`B.13.1 Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
`B.13.2 Clarifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
`B.14 OpenFlow version 1.4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
`B.14.1 More extensible wire protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
`B.14.2 More descriptive reasons for packet-in . . . . . . . . . . . . . . . . . . . . . . . . 201
`B.14.3 Optical port properties
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
`B.14.4 Flow-removed reason for meter delete . . . . . . . . . . . . . . . . . . . . . . . . 202
`B.14.5 Flow monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
`B.14.6 Role status events
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
`B.14.7 Eviction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
`B.14.8 Vacancy events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
`B.14.9 Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
`B.14.10Synchronised tables
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
`B.14.11Group and Meter change notifications . . . . . . . . . . . . . . . . . . . . . . . . 204
`B.14.12Error code for bad priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
`B.14.13Error code for Set-async-config . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
`B.14.14PBB UCA header field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
`B.14.15Error code for duplicate instruction . . . . . . . . . . . . . . . . . . . . . . . . . 204
`B.14.16Error code for multipart timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
`B.14.17Change default TCP port to 6653 . . . . . . . . . . . . . . . . . . . . . . . . . . 205
`
`C Credits
`
`List of Tables
`
`. . . . . . . . . . . . . . . . . . . . . .
`1 Main components of a flow entry in a flow table.
`2 Main components of a group entry in the group table.
`. . . . . . . . . . . . . . . . . . .
`3 Main components of a meter entry in the meter table.
`. . . . . . . . . . . . . . . . . . .
`4 Main components of a meter band in a meter entry.
`. . . . . . . . . . . . . . . . . . . .
`5
`List of counters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`6
`Push/pop tag actions.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`7
`Change-TTL actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`8
`Existing fields that may be copied into new fields on a push action. . . . . . . . . . . . .
`9
`OXM TLV header fields. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`10 OXM mask and value.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`11 Required match fields.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`205
`
`15
`18
`19
`20
`21
`25
`25
`26
`52
`54
`57
`
`7
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 7 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`12 Match fields details.
`13 Match combinations for VLAN tags.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`58
`59
`
`List of Figures
`
`1 Main components of an OpenFlow switch. . . . . . . . . . . . . . . . . . . . . . . . . . .
`2
`Packet flow through the processing pipeline. . . . . . . . . . . . . . . . . . . . . . . . . .
`3
`Flowchart detailing packet flow through an OpenFlow switch. . . . . . . . . . . . . . . .
`4
`OXM TLV header layout.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`9
`14
`16
`52
`
`8
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 8 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`1 Introduction
`
`This document describes the requirements of an OpenFlow Switch. We recommend that you read the
`latest version of the OpenFlow whitepaper before reading this specification. The whitepaper is avail-
`able on the Open Networking Foundation website (https://www.opennetworking.org/standards/
`intro-to-openflow). This specification covers the components and the basic functions of the switch,
`and the OpenFlow protocol to manage an OpenFlow switch from a remote controller.
`
`Figure 1: Main components of an OpenFlow switch.
`
`2 Switch Components
`
`An OpenFlow Switch consists of one or more flow tables and a group table, which perform packet
`lookups and forwarding, and an OpenFlow channel to an external controller (Figure 1). The switch
`communicates with the controller and the controller manages the switch via the OpenFlow protocol.
`
`Using the OpenFlow protocol, the controller can add, update, and delete flow entries in flow tables,
`both reactively (in response to packets) and proactively. Each flow table in the switch contains a set
`of flow entries; each flow entry consists of match fields, counters, and a set of instructions to apply to
`matching packets (see 5.2).
`
`Matching starts at the first flow table and may continue to additional flow tables (see 5.1). Flow entries
`match packets in priority order, with the first matching entry in each table being used (see 5.3). If
`a matching entry is found, the instructions associated with the specific flow entry are executed. If no
`match is found in a flow table, the outcome depends on configuration of the table-miss flow entry: for
`example, the packet may be forwarded to the controller over the OpenFlow channel, dropped, or may
`continue to the next flow table (see 5.4).
`
`Instructions associated with each flow entry either contain actions or modify pipeline processing (see
`5.9). Actions included in instructions describe packet forwarding, packet modification and group table
`
`9
`
`© 2013; The Open Networking Foundation
`
`Controller
`
`OpenFlow Protocol
`
`OpenFlow
`Channel
`
`Group
`Table
`
`Flow
`Table
`
`Flow
`Table
`
`...
`Pipeline
`OpenFlow Switch
`
`Ex. 1018
`Juniper Networks, Inc. / Page 9 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
`processing. Pipeline processing instructions allow packets to be sent to subsequent tables for further
`processing and allow information, in the form of metadata, to be communicated between tables. Table
`pipeline processing stops when the instruction set associated with a matching flow entry does not specify
`a next table; at this point the packet is usually modified and forwarded (see 5.10).
`
`Flow entries may forward to a port. This is usually a physical port, but it may also be a logical port
`defined by the switch or a reserved port defined by this specification (see 4.1). Reserved ports may
`specify generic forwarding actions such as sending to the controller, flooding, or forwarding using non-
`OpenFlow methods, such as “normal” switch processing (see 4.5), while switch-defined logical ports
`may specify link aggregation groups, tunnels or loopback interfaces (see 4.4).
`
`Actions associated with flow entries may also direct packets to a group, which specifies additional
`processing (see 5.6). Groups represent sets of actions for flooding, as well as more complex forwarding
`semantics (e.g. multipath, fast reroute, and link aggregation). As a general layer of indirection, groups
`also enable multiple flow entries to forward to a single identifier (e.g. IP forwarding to a common next
`hop). This abstraction allows common output actions across flow entries to be changed efficiently.
`
`The group table contains group entries; each group entry contains a list of action buckets with specific
`semantics dependent on group type (see 5.6.1). The actions in one or more action buckets are applied
`to packets sent to the group.
`
`Switch designers are free to implement the internals in any way convenient, provided that correct match
`and instruction semantics are preserved. For example, while a flow entry may use an all group to
`forward to multiple ports, a switch designer may choose to implement this as a single bitmask within
`the hardware forwarding table. Another example is matching; the pipeline exposed by an OpenFlow
`switch may be physically implemented with a different number of hardware tables.
`
`3 Glossary
`
`This section describes key OpenFlow specification terms:
`
` Byte: an 8-bit octet.
`
` Packet: an Ethernet frame, including header and payload.
`
` Port: where packets enter and exit the OpenFlow pipeline (see 4.1). May be a physical port, a
`logical port defined by the switch, or a reserved port defined by the OpenFlow protocol.
`
` Pipeline: the set of linked flow tables that provide matching, forwarding, and packet modification
`in an OpenFlow switch.
`
` Flow Table: a stage of the pipeline. It contains flow entries.
`
` Flow Entry: an element in a flow table used to match and process packets. It contains a set of
`match fields for matching packets, a priority for matching precedence, a set of counters to track
`packets, and a set of instructions to apply.
`
` Match Field: a field against which a packet is matched, including packet headers, the ingress
`port, and the metadata value. A match field may be wildcarded (match any value) and in some
`cases bitmasked.
`
`10
`
`© 2013; The Open Networking Foundation
`
`Ex. 1018
`Juniper Networks, Inc. / Page 10 of 206
`
`
`
`OpenFlow Switch Specification
`
`Version 1.4.0
`
` Metadata: a maskable register value that is used to carry information from one table to the next.
`
` Instruction: instructions are attached to a flow entry and describe the OpenFlow processing that
`happens when a packet matches the flow entry. An instruction either modifies pipeline processing,
`such as directing the packet to another flow table, or contains a set of actions to add to the action
`set, or contains a list of actions to apply immediately to the packet.
`
` Action: an operation that forwards the packet to a port or modifies the packet, such as decre-
`menting the TTL field. Actions may be specified as part of the instruction set associated with a
`flow entry or in an action bucket associated with a group entry. Actions may be accumulated in
`the Action Set of the packet or applied immediately to the packet.
`
` Action Set: a set of actions associated with the packet that are accumulated while the packet
`is processed by each table and that are executed when the instruction set instructs the packet to
`exit the processing pipeline.
`
` Group: a list of action buckets and some means of choosing one or more of those buckets to apply
`on a per-packet basis.
`
` Action Bucket: a set of actions and associated parameters, defined for groups.
`
` Tag: a header that can be inserted or removed from a packet via push and pop actions.
`
` Outermost Tag: the tag that appears closest to the beginning o