From edf6b853467c03ebf2be32cda9d022bc8d1562d7 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Tue, 23 Sep 2008 15:34:49 -0700 Subject: [PATCH 1/1] Initial checkin of OpenFlow specification LaTeX source. This version of the specification does not reflect the current checked in version of OpenFlow. Checkins that follow should bring them in-line. The TeX version of the spec was produced by Brandon Heller. --- doc/of-spec/.gitignore | 8 + doc/of-spec/Makefile | 40 +++ doc/of-spec/README | 3 + doc/of-spec/appendix.tex | 224 ++++++++++++ doc/of-spec/figure_flow_match_flowchart.png | Bin 0 -> 55121 bytes doc/of-spec/figure_flow_table_secchan.png | Bin 0 -> 67886 bytes doc/of-spec/figure_packet_flow_flowchart.png | Bin 0 -> 30264 bytes doc/of-spec/make_latex_input.pl | 107 ++++++ doc/of-spec/openflow-spec-v0.9-draft3.tex | 338 +++++++++++++++++++ 9 files changed, 720 insertions(+) create mode 100644 doc/of-spec/.gitignore create mode 100644 doc/of-spec/Makefile create mode 100644 doc/of-spec/README create mode 100755 doc/of-spec/appendix.tex create mode 100755 doc/of-spec/figure_flow_match_flowchart.png create mode 100755 doc/of-spec/figure_flow_table_secchan.png create mode 100755 doc/of-spec/figure_packet_flow_flowchart.png create mode 100755 doc/of-spec/make_latex_input.pl create mode 100755 doc/of-spec/openflow-spec-v0.9-draft3.tex diff --git a/doc/of-spec/.gitignore b/doc/of-spec/.gitignore new file mode 100644 index 00000000..7723a762 --- /dev/null +++ b/doc/of-spec/.gitignore @@ -0,0 +1,8 @@ +/*.aux +/*.log +/*.out +/*.pdf +/*.ps +/define +/enum +/struct diff --git a/doc/of-spec/Makefile b/doc/of-spec/Makefile new file mode 100644 index 00000000..a1fe3e66 --- /dev/null +++ b/doc/of-spec/Makefile @@ -0,0 +1,40 @@ +TARGET=openflow-spec-v0.9-draft3 + +BIBTEX := bibtex +TGIF := tgif +XFIG := xfig +GNUPLOT:= gnuplot + +SOURCES=openflow-spec-v0.9-draft3.tex\ + appendix.tex + +all: $(TARGET).ps +pdf: all + +$(TARGET).pdf: Makefile $(SOURCES) + ./make_latex_input.pl + texi2pdf $(TARGET).tex + +color: $(TARGET).pdf + pdflatex $(TARGET).tex + pdftops $(TARGET).pdf + +$(TARGET).ps: $(TARGET).pdf + pdftops $(TARGET).pdf + +%.pdf : %.fig #Makefile + fig2dev -L pdf -b 1 $< $@ + +%.eps : %.dia #Makefile + dia --nosplash -e $@ $< + +%.eps : %.obj + TMPDIR=/tmp $(TGIF) -print -eps $< + + +%.pdf : %.eps #Makefile + epstopdf $< + +clean: + rm -f *.aux *.log *.out *.bbl *.blg *~ *.bak $(TARGET).ps $(TARGET).pdf + rm -rf define enum struct diff --git a/doc/of-spec/README b/doc/of-spec/README new file mode 100644 index 00000000..a010f5dd --- /dev/null +++ b/doc/of-spec/README @@ -0,0 +1,3 @@ +To build the latest OpenFlow specification, you should just be able to +type "make". For this to work, you'll need to have the texinfo and +"listings.sty" packages installed. diff --git a/doc/of-spec/appendix.tex b/doc/of-spec/appendix.tex new file mode 100755 index 00000000..a8300cbd --- /dev/null +++ b/doc/of-spec/appendix.tex @@ -0,0 +1,224 @@ +%\appendix +\section{Appendix A: The OpenFlow Protocol} +All structs defined here are packed with padding and 8-byte aligned, as checked by the assertion statements. + +\subsection{OpenFlow Header} +All OpenFlow messages are sent in big-endian format. Each OpenFlow message begins with the OpenFlow header: + +\input{struct/ofp_header} +The version specifies the OpenFlow protocol version being used. During this evolution of the OpenFlow protocol, the most significant bit will be set to indicate an experimental version and the lower-bits will indicate a revision number. The current version is \input{define/OFP_VERSION}. The final version for a Type 0 switch will be 0x00. The length field indicates the total length of the message, so no additional framing is used to distinguish one frame from the next. The type can have the following values: + +\input{enum/ofp_type} + +\subsection{Common Structures} +A number of structures are used by many of the OpenFlow messages. Physical ports are described with the following structure: + +\input{struct/ofp_phy_port} +The name field is a null-terminated string containing a human-readable +name for the interface. The value of \verb|OFP_MAX_PORT_NAME_LEN| is +16. The \verb|port_no| field is a value the datapath associates with a +physical port. The \verb|mode| field represents the current operating +mode of the PHY. The \verb|config| field contains a bitmask of items +that are configurable by the controller: + +\input{enum/ofp_port_config} +The \verb|state| field contains a bitmask of items describing +characteristics of the port: + +\input{enum/ofp_port_state} +The port numbers use the following conventions: + +\input{enum/ofp_port} +The \verb|features| field describes the characteristics of this port. Multiple of these flags may be set simultaneously: + +\input{enum/ofp_port_features} +The value -1 in a \verb|set_config| command indicates that no changes should be applied to the port speed. +\\\\ +When describing a flow entry, the following structure is used: + +\input{struct/ofp_match} +The \verb|wildcards| field has a number of flags that may be set: + +\input{enum/ofp_flow_wildcards} +If no wildcards are set, then the \verb|ofp_match| exactly describes a flow. On the other extreme, if all the wildcard flags are set, then every flow will match. +\\\\ +A number of actions may be associated with flows or packets. The currently defined action types are: + +\input{enum/ofp_action_type} +An action definition contains the action type and any associated data: + +\input{struct/ofp_action} +The \verb|vlan_id| field is 16 bits long, when an actual VLAN id is only 12 bits. The value \verb|0xffff| is used to indicate that no VLAN id was set, or if used as an action, that the VLAN header should be stripped. +\\\\ +An \verb|action_output| has the following fields: + +\input{struct/ofp_action_output} +The \verb|port| specifies the physical port from which packet packets should be sent. The \verb|max_len| indicates the maximum amount of data from a packet that should be sent when the port is \verb|OFPP_CONTROLLER|. If \verb|max_len| is zero, then the entire packet should be sent. + +\subsection{Controller-to-Switch Messages} + +\subsubsection{Handshake} +\label{cts:handshake} +Upon SSL session establishment, the controller sends an \verb|OFPT_FEATURES_REQUEST| message. This message does not contain a body beyond the OpenFlow header. The switch responds with an \verb|OFPT_FEATURES_REPLY| message: + +\input{struct/ofp_switch_features} +The \verb|actions| field is a bitmap of supported actions on the hardware. It uses the values from \verb|ofp_action_type| as the number of bits to shift left for an associated action. For example, \verb|OFPAT_SET_DL_VLAN| would use the flag \verb|0x00000002|. +\\\\ +The \verb|capabilities| field uses the following flags to indicate supported capabilities of the datapath: + +\input{enum/ofp_capabilities} +Interleaving refers to the switchÕs ability to do combinations of actions, beyond the OpenFlow requirement that modification actions precede output actions. For example, an application may need for a single entry: +\begin{itemize} +\item Send out port 5 +\item Add VLAN tag 99 and send out port 7 +\item Add VLAN tag 200 and send out port 9 +\end{itemize} +This behavior may not be possible on some hardware platforms, because they must "squish" the actions flat and thus lose the ordering. However, some switches may be able to handle this specific combination because a VLAN tag can be associated with a physical port outside of the actions. If the switch supports this, it must set the \verb|OFPC_VO_INTERLEAVE| bit in the capabilities field. If the controller attempts to send a flow mod message with an action that requires VLAN-output interleaving, and the switch does not support it, the switch must respond with an \verb|OFPEFM_VOI_UNSUPPORTED| error message. +\\\\ +A switch may also support arbitrarily interleaved actions like this: +\begin{itemize} +\item Send out port 5 +\item Change source IP address to 172.16.99.244 and send out port 7 +\item Change VLAN tag to 200 and send out port 9 +\end{itemize} +If the switch supports arbitrary interleaving, it must set the \verb|OFPC_ARB_INTERLEAVE| bit in the capabilities field. If the controller attempts to send a flow mod message with an action that requires arbitrary interleaving, and the switch does not support it, the switch must respond with an \verb|OFPEFM_AI_UNSUPPORTED| error message. +\\\\ +The \verb|ports| field is an array of \verb|ofp_phy_port| structures that describe all the physical ports in the system that support OpenFlow. The number of port elements is inferred from the length field in the OpenFlow header. + +\subsubsection{Switch Configuration} +The controller is able to set and query configuration parameters in the switch with the \verb|OFPT_SET_CONFIG| and \verb|OFPT_GET_CONFIG_REQUEST| messages, respectively. The switch responds to a configuration request with an \verb|OFPT_GET_CONFIG_REPLY| message; it does not reply to a request to set the configuration. +\\\\ +There is no body for \verb|OFPT_GET_CONFIG_REQUEST| beyond the OpenFlow header. The \verb|OFPT_SET_CONFIG| and \verb|OFPT_GET_CONFIG_REPLY| use the following: + +\input{struct/ofp_switch_config} +The only configuration flag currently defined is \verb|OFPC_SEND_FLOW_EXP|, which has the value \verb|0x0001|. When this flag is set, the switch sends flow expiration messages. The default flags value is zero, indicating that the switch should not send flow expirations. + +\subsubsection{Modify State Messages} +\paragraph{Modify Flow Entry Message} +Modifications to the flow table from the controller are done with the \verb|OFPT_FLOW_MOD| message: + +\input{struct/ofp_flow_mod} +The \verb|flags| field has two defined flags. Errors are generated for failed \verb|flow_mod|s when \verb|OFPFMF_REPORT_ERROR| is set, and the switch will force an insert or modify when \verb|OFPFMF_FORCE| is set. + +\input{enum/ofp_flow_mod_command} +The interpretation of the \verb|priority| field depends on the type of entry to be inserted. If the match field indicates that this is a wildcard entry, then the priority field indicates table priority, where higher numbers are higher priorities; the switch must keep the highest-priority wildcard entries in the lowest-numbered (fastest) wildcard table, to ensure correctness. It is the responsibility of each switch implementer to ensure that exact entries always match before wildcards entries, regardless of the table configuration. +\\\\ +If the match field indicates that this is an exact entry, then the priority field must only have the value 0 or 1. If an exact match with priority other than 0 or 1 is seen, the switch should reply with an \verb|OFPEFM_EXACT_PRIORITY| error message. Exact priority of 1 indicates to the switch an important (or ÒpinnedÓ) entry; it must attempt to insert this entry in the lowest-numbered (fastest) exact table, even if a priority-0 exact entry must be evicted. In the case that the switch cannot insert this entry in the lowest-numbered table because other priority-1 entries have filled up the available spots, the switch must insert this entry anyway, and respond with an \verb|OFPEFM_PIN_FAILED| message. +\\\\ +The \verb|buffer_id| refers to a buffered packet sent by the \verb|OFPT_PACKET_IN| message. +\\\\\ +If a flow is added with an \verb|idle_timeout| value of 0x0000 and a \verb|hard_timeout| value of \verb|0x0000|, then the entry will never time out. If a flow entry is added with a nonzero \verb|idle_timeout| value and a \verb|hard_timeout| value of \verb|0x0000|, then the flow will only timeout if the flow is idle for longer than \verb|idle_timeout| seconds. If a flow entry is added with an \verb|idle_timeout| value of \verb|0x0000| and a nonzero \verb|hard_timeout|, then it will expire after exactly \verb|hard_timeout| seconds. If both \verb|idle_timeout| and \verb|hard_timeout| are nonzero, the flow will timeout after \verb|idle_timeout| seconds of idleness, or \verb|hard_timeout| seconds, whichever comes first, +\\\\ +The values of \verb|command| can be: + +\input{enum/ofp_flow_mod_command} +The differences between \verb|OFPFC_MODIFY| and \verb|OFPFC_MODIFY_STRICT| are explained in Section \ref{flow_table:sec_chan:flow_mod} and differences between \verb|OFPFC_DELETE| and \verb|OFPFC_DELETE_STRICT| are explained more fully in Section \ref{flow_table:sec_chan:flow_removal}. + +\paragraph{Port Modification Message} +The controller uses the \verb|OFPT_PORT_MOD| message to modify the behavior of the physical port: + +\input{struct/ofp_port_mod} +When the controller sends this message, the switch should attempt to replace as much of the current port struct as possible with the message. For example, it may ignore part of the features bitmap if it doesnÕt support a particular speed. If the attempt fails, the switch must send an \verb|OFPET_PORT_MOD| message. + +\subsubsection{Read State Messages} +While the system is running, the datapath may be queried about its current state using the \verb|OFPT_STATS_REQUEST| message: + +\input{struct/ofp_stats_request} +The switch responds with one or more \verb|OFPT_STATS_REPLY| messages: + +\input{struct/ofp_stats_reply} + The only value defined for \verb|flags| in a reply is whether more replies will follow this oneÑthis has the value \verb|0x0001|. To ease implementation, the switch is allowed to send replies with no additional entries. However, it must always send another reply following a message with the ÒmoreÓ flag set. The transaction ids (xid) of replies must always match the request that prompted them. +\\\\ +In both the request and response, the \verb|type| field specifies the kind of information being passed and determines how the \verb|body| field is interpreted: + +\input{enum/ofp_stats_types} + +\paragraph{Individual Flow Statistics} +Information about individual flows is requested with the \verb|OFPST_FLOW| stats request type: + +\input{struct/ofp_flow_stats_request} +The \verb|match| field contains a description of the flows that should be matched and may contain wildcards. +\\\\ +The \verb|body| of the reply consists of an array of the following: + +\input{struct/ofp_flow_stats} + +\paragraph{Aggregate Flow Statistics} +Aggregate information about multiple flows is requested with the \verb|OFPST_AGGREGATE| stats request type: + +\input{struct/ofp_aggregate_stats_request} +The \verb|match| field contains a description of the flows that should be matched and may contain wildcards. +\\\\ +The \verb|body| of the reply consists of the following: + +\input{struct/ofp_aggregate_stats_reply} + +\paragraph{Table Statistics} +Information about tables is requested with the \verb|OFPST_TABLE| stats request type. The request does not contain any data in the body. +\\\\ +The body of the reply consists of an array of the following: + +\input{struct/ofp_table_stats} +\verb|OFP_MAX_TABLE_NAME_LEN| is 32. + +\paragraph{Port Statistics} +Information about physical ports is requested with the \verb|OFPST_PORT| stats request type. The request does not contain any data in the \verb|body|. +\\\\ +The body of the reply consists of an array of the following: + +\input{struct/ofp_port_stats} +The switch should return a value of -1 for unavailable counters. + +\subsubsection{Send Packet Message} +When the controller wishes to send a packet out through the datapath, it uses the \verb|OFPT_PACKET_OUT| message: + +\input{struct/ofp_packet_out} +The \verb|buffer_id| is the same given in the \verb|ofp_packet_in| message. If the \verb|buffer_id| is -1, then the data is included in the data array. If \verb|OFPP_TABLE| is specified as the output port of an action, the \verb|in_port| in the \verb|packet_out| message is used in the flow table lookup. + +\subsection{Asynchronous Messages} +\subsubsection{Packet-In Message} +When packets are received by the datapath and sent to the controller, they use the \verb|OFPT_PACKET_IN| message: + +\input{struct/ofp_packet_in} +The \verb|buffer_id| is an opaque value used by the datapath to identify a buffered packet. When a packet is buffered, some number of bytes from the message will be included in the data portion of the message. If the packet is sent because of a Òsend to controllerÓ action, then \verb|max_len| bytes from the flow setup request are sent. If the packet is sent because of a flow table miss, then at least \verb|miss_send_len| from the \verb|OFPT_SET_CONFIG| message are sent. If the value was never sent, the default is 128 bytes. If packet is not buffered, the entire packet is included in the data portion, and the \verb|buffer_id| is -1. The reason field can be any of these values: + +\input{enum/ofp_packet_in_reason} + +\subsubsection{Flow Expiration Message} +If the controller has requested to be notified when flows time out, the datapath does this with the \verb|OFPT_FLOW_EXPIRED| message: + +\input{struct/ofp_flow_expired} +The \verb|match| and \verb|priority| fields is the same as was used in the flow setup request. The duration field indicates the number of seconds the flow received traffic. The \verb|packet_count| and \verb|byte_count| indicate the number of packets and bytes that were associated with this flow, respectively. + +\subsubsection{Port Status Message} +As physical ports are added, modified, and removed from the datapath, the controller needs to be informed with the \verb|OFPT_PORT_STATUS| message: + +\input{struct/ofp_port_status} +The \verb|status| can be one of the following values: + +\input{enum/ofp_port_reason} + +\subsubsection{Error Message} +There are times that the switch needs to notify the controller of a problem. This is done with the \verb|OFPT_ERROR_MSG| message: + +\input{struct/ofp_error_msg} +The \verb|type| value indicates the high-level type of error. The \verb|code| value is interpreted based on the type. The \verb|data| is variable length and interpreted based on the \verb|type| and \verb|code|; in most cases this is the message that caused the problem. + +\input{enum/ofp_error_type} +If the controller sends a message with an unsupported version, it must respond with an \verb|OFPET_UNSUPPORTED_VER| error. The data field must include the full message that failed. +\\\\ +If the controller attempts a \verb|flow_mod| and fails, and the \verb|flow_mod| entry had the \verb|REPORT_ERROR| flag set, then the switch responds with one of the following. The data field must include the full message that failed. + +xxx These flow errors are not supported in v0.9.0. --JDP +%\input{enum/ofp_error_flow_mod} +%If the controller attempts a \verb|port_mod| and fails, it should report an error. The \verb|data| field must include the full message that failed. + +\subsection{Symmetric Messages} +\subsubsection{Echo Request} +An echo request message consists of an OpenFlow header plus an arbitrary-length data field. The data field might be a message timestamp to check latency, various lengths to measure bandwidth, or zero-size to verify liveness between the switch and controller. + +\subsubsection{Echo Reply} +An echo reply message consists of an OpenFlow header plus the unmodified data field of an echo request message. +\\\\ +In an OpenFlow protocol implementation divided into multiple layers, the echo request/reply logic should be implemented in the "deepest" practical layer. For example, in the OpenFlow reference implementation that includes a userspace process that relays to a kernel module, echo request/reply is implemented in the kernel module. Receiving a correctly formatted echo reply then shows a greater likelihood of correct end-to-end functionality than if the echo request/reply were implemented in the userspace process, as well as providing more accurate end-to-end latency timing. + diff --git a/doc/of-spec/figure_flow_match_flowchart.png b/doc/of-spec/figure_flow_match_flowchart.png new file mode 100755 index 0000000000000000000000000000000000000000..451a7c4dfb98201f5f13dc52131ac3b032346056 GIT binary patch literal 55121 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 P0dU4OOQc1exqIU8I!4gT literal 0 HcmV?d00001 diff --git a/doc/of-spec/figure_flow_table_secchan.png b/doc/of-spec/figure_flow_table_secchan.png new file mode 100755 index 0000000000000000000000000000000000000000..a21dde001128e353fb0a172fd4b6551931467604 GIT binary patch literal 67886 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 3~M{>^b~jIm2Vp1dl%!TTqD_` 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 + chomp $next_line; + $comment .= $next_line."\n"; + } until ($next_line =~ m/\*\//); + + return $comment; +} + +sub handle_define { + my ($var, $val) = @_; + open(OUTFILE, ">define/$var"); + print OUTFILE $val; + close(OUTFILE); +} + +sub handle_multiline { + my ( $dir, $filename, $line_orig, $last_comment) = @_; + + open(OUTFILE, ">$dir/$filename"); + #print OUTFILE "\\scriptsize\n"; + print OUTFILE "\\begin{footnotesize}\n"; + print OUTFILE "\\begin{verbatim}\n"; + #print OUTFILE "\\begin{lstlisting}[frame=htb]{$filename}\n"; + print OUTFILE $last_comment; + print OUTFILE $line_orig; + my $next_line; + do { + + $next_line = ; + chomp $next_line; + + print OUTFILE $next_line."\n"; + + } until ($next_line eq '};'); + + # add assertion line for structs + if ($dir eq 'struct') { + $next_line = ; + print OUTFILE $next_line; + } + print OUTFILE "\\end{verbatim}\n"; + #print OUTFILE "\\end{lstlisting}\n"; + print OUTFILE "\\end{footnotesize}\n"; + close(OUTFILE); +} + +#---------------------------------------- +use File::Path; + +foreach my $type ('enum', 'struct', 'define') { + if (-d $type) { + rmtree ($type); + } + mkdir $type; +} + +open(INFILE, "<../../include/openflow.h"); + +my $last_comment; +while() +{ + # Good practice to store $_ value because + # subsequent operations may change it. + my($line) = $_; + my $line_orig = $line; + my @line_split = split ' ',$line; + + if (not defined($line_split[0])) { + $last_comment = ''; + } + # Handle single-line comment + elsif ($line =~ m/^\/\*.*\*\//) { + $last_comment = $line; + #print $last_comment; + } + # Handle multi-line comment + elsif ($line =~ m/^\/\*/) { + $last_comment = handle_comment($line_orig); + #print $last_comment; + } + # Handle define + elsif ($line_split[0] eq '#define') { + handle_define($line_split[1],$line_split[2]); + $last_comment = ''; + } + # Handle enum + elsif ($line_split[0] eq 'enum') { + handle_multiline('enum', $line_split[1], $line_orig, $last_comment); + $last_comment = ''; + } + # Handle struct + elsif ($line_split[0] eq 'struct') { + handle_multiline('struct', $line_split[1], $line_orig, $last_comment); + $last_comment = ''; + } + +} +print "completed\n"; diff --git a/doc/of-spec/openflow-spec-v0.9-draft3.tex b/doc/of-spec/openflow-spec-v0.9-draft3.tex new file mode 100755 index 00000000..81248b03 --- /dev/null +++ b/doc/of-spec/openflow-spec-v0.9-draft3.tex @@ -0,0 +1,338 @@ +\documentclass[10pt]{article} +\usepackage{listings} +\usepackage{hyperref} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{tabularx} + +\begin{document} + +%\lstset{language=C} + +\pagestyle{fancy} +\fancyhead{} +\chead{DO NOT BUILD A SWITCH FROM THIS SPECIFICATION!} +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} + +\fontfamily{cmr} % what about cmss? +\selectfont + +\title{OpenFlow Switch Specification} +\author{Version 0.9 Draft 3 ( Wire Protocol \input{define/OFP_VERSION})} +\date{\today} +\maketitle + +\begin{center} +Current Maintainer: Brandon Heller +\end{center} + +\section{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 available on the OpenFlow Consortium website (\url{http://OpenFlowSwitch.org}). 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. +\\\\ +OpenFlow Switches will be of ``Type 0'' or ``Type 1'', depending on their capabilities. Type 0 represents the minimum requirements for any conforming OpenFlow Switch. Type 1 requirements will be a superset of Type 0, and remain to be defined. It is expected that commercial OpenFlow Switches will initially be of Type 0, evolving to Type 1; and that vendors will support additional features over time. However, all switches are expected to use the same OpenFlow Protocol for communication between switch and controller. For the remainder of this version of the document, unless otherwise specified, all references to an OpenFlow Switch refer to Type 0. +\\\\ +Version 1.0 of this document will be the first to specify a Type 0 switch suitable for implementation. Versions before Version 1.0 will be marked ``Draft", and will include the header: ``Do not build a switch from this specification!" We hope to generate feedback from versions prior to Version 1.0 from switch designers and network researchers. + +\begin{figure}[htbp] +\centering +\includegraphics[height=2.5in]{figure_flow_table_secchan.png} +\caption{An OpenFlow switch communicates with a controller over a secure connection using the OpenFlow protocol.} +\label{fig:flow table and controller} +\end{figure} + +\section{Switch Components} +An OpenFlow Switch consists of a \emph{flow table}, which performs packet lookup and forwarding, and a \emph{secure channel} to an external controller (Figure \ref{fig:flow table and controller}). The controller manages the switch over the secure channel using the OpenFlow protocol. +\\\\ +The flow table contains a set of flow entries (header values to match packets against), activity counters, and a set of zero or more actions to apply to matching packets. All packets processed by the switch are compared against the flow table. If a matching entry is found, any actions for that entry are performed on the packet (e.g., the action might be to forward a packet out a specified port). If no match is found, the packet is forwarded to the controller over the secure channel. The controller is responsible for determining how to handle packets without valid flow entries, and it manages the switch flow table by adding and removing flow entries. + +\section{Flow Table} +The OpenFlow flow table is a set of flow entries, each containing: +\begin{itemize} +\item \textbf{header fields} to match against packets +\item \textbf{counters} to update for matching packet +\item \textbf{actions} to apply to matching packets (Table \ref{table:flow entry}) +\end{itemize} + +\subsection{Flow Entry} + +\begin{table}[hbp] +\centering +\begin{tabular}{|c|c|c|} +\hline +Header Fields & Counters & Actions\\ +\hline +\end{tabular} +\caption{A flow entry consists of header fields, counters, and actions.} +\label{table:flow entry} +\end{table} + +\subsubsection{Header Fields} +Table 2 shows the header fields an incoming packet is compared against. Each entry contains a specific value, or an ANY, which matches any value. If the switch supports subnet masks on the IP source and/or destination fields, these can more precisely specify matches. The fields in the OpenFlow 10-tuple are listed in Table \ref{table:header fields} and details on the properties of each field are described in Table \ref{table:header field details}. + +\begin{table}[hbp] +\centering +\footnotesize +\begin{tabularx}{\textwidth}{ |X|X|X|X|X|X|X|X|X|X| } +\hline +Ingress Port & +Ether source & +Ether dst & +Ether type & +VLAN id & +IP src & +IP dst & +IP proto & +TCP/ UDP src port & +TCP/ UDP dst port +\\ +\hline +\end{tabularx} +\caption{Fields from packets used to match against flow entries.} +\label{table:header fields} +\end{table} + +\begin{table}[hbp] +\centering +\footnotesize +\begin{tabularx}{\textwidth}{ |X|X|X|X| } +\hline Field & Bits & When applicable & Notes \\ \hline Ingress Port & (Implementation dependent) & All packets & Numerical representation of incoming port. \\ \hline Ethernet source address & 48 & All packets on enabled ports & \\ \hline Ethernet destination address & 48 & All packets on enabled ports & \\ \hline Ethernet type & 16 & All packets on enabled ports & A Type 0 switch is required to match the type in both standard Ethernet and 802.2 with a SNAP header and OUI of 0x000000. \\ \hline The special value of 0x05FF is used to match all 802.3 packets without SNAP headers. VLAN id & 12 & All packets of Ethernet type 0x8100 & \\ \hline IP source address & 32 & All IP packets & Can be subnet masked \\ \hline IP destination address & 32 & All IP packets & Can be subnet masked \\ \hline IP protocol & 8 & All IP packets & \\ \hline Transport source port & 16 & All TCP and UDP packets & \\ \hline Transport destination port & 16 & All TCP and UDP packets & \\ +\hline +\end{tabularx} +\caption{Field lengths and the way they should be applied to flow entries.} +\label{table:header field details} +\end{table} + +The field types contained in this document are derived from the OpenFlow protocol and used to describe the valid ranges. Switch designers are free to implement the internals in any way convenient provided that correct functionality is preserved. For example, while a flow may have multiple forward actions, each specifying a different port, a switch designer may choose to implement this as a single bitmask within the hardware forwarding table. + +\subsubsection{Counters} + +Counters are maintained per-table, per-flow, and per-port. OpenFlow-compliant counters may be implemented in software and maintained by polling hardware counters with more limited ranges. +\\\\ +Table \ref{table:counters} contains the required set of counters for Type 0 switches. + +\begin{table}[!hbp] +\centering +\footnotesize +\begin{tabularx}{\textwidth}{ |X|X|X| } +\hline Counter & Bits & Description \\ +\hline \multicolumn{3}{|c|}{Per Table} \\ +\hline Packet Match & 64 & Number of matching packets \\ +\hline \multicolumn{3}{|c|}{Per Flow} \\ +\hline Packet & 64 & Number of packets received \\ \hline Byte & 64 & Number of bytes received \\ \hline Duration & 32 & Number of seconds flow has been active \\ \hline \multicolumn{3}{|c|}{Per Port} \\ \hline Received (RX) & 64 & Number of packets received \\ \hline Transmitted (TX) & 64 & Number of packets sent \\ \hline Dropped & 64 & Number of packets dropped \\ \hline Queued & 64 & Number of packets queued \\ \hline Dropped (TX) & 64 & Number of packets dropped by TX \\ \hline Overrun (TX) & 64 & Number of packets with TX overrun \\ \hline Dropped (RX) & 64 & Number of packets dropped by RX \\ \hline Overrun (RX) & 64 & Number of packets with RX overrun \\ \hline CRC Errors & 64 & Number of CRC errors \\ \hline CRC Collisions & 64 & Number of collisions \\ +\hline +\end{tabularx} +\caption{Required list of counters for use in statistics messages for tables, flows and ports.} +\label{table:counters} +\end{table} + +\subsubsection{Actions} +Each flow entry is associated with zero or more actions that dictate how the switch handles matching packets. Actions need not be executed in the order in which they are specified in the flow entry. If no actions are present, the packet is dropped. +\\\\ +A switch is not required to support all action types --- just those marked ``Required Actions'' below. When connecting to the controller, a switch indicates which of the ``Optional Actions'' it supports. +\\\\ +OpenFlow-compliant switches come in two types: \emph{OpenFlow-only}, and \emph{OpenFlow-enabled}. OpenFlow-only switches serve no other function and cannot handle non-OpenFlow traffic. They must implement the following actions: +\begin{itemize} +\item Forward to external port(s) +\item Drop +\item Encapsulate and forward to controller over Secure Channel +\end{itemize} +OpenFlow-enabled switches, routers, and access points are devices for which OpenFlow has been +added as an optional feature. These devices may implement a fourth action: + +\begin{itemize} +\item Forward to the normal forwarding path of this switch (e.g. for normal L2/L3 processing). +\end{itemize} +This specification defines these actions in a uniform way, by combining them into two required actions: \textit{Forward} and \textit{Drop}. +\\\\ +\textbf{Required Action:} \textit{Forward.} +Any Type 0 switch is required to support forwarding the packet to physical ports and the following virtual ones: +\begin{itemize} +\item \textbf{ALL:} Send the packet out all interfaces, not including the incoming interface. +\item \textbf{CONTROLLER:} Encapsulate and send the packet to the controller. +\item \textbf{LOCAL:} Send the packet to the switchÕs local networking stack. +\item \textbf{TABLE:} Perform actions in flow table. Only for packet-out messages. +\item \textbf{ALL\_PLUS\_IN:} Send the packet out all interface, including the incoming interface. +\end{itemize} +The switch may optionally support the following virtual ports: + +\begin{itemize} +\item \textbf{NORMAL:} Process the packet using the traditional forwarding path supported by the switch (i.e., traditional L2, VLAN, and L3 processing.) At a minimum, the normal processing path must support L2 learning and forwarding. A Type 0 switch may check the VLAN field to determine whether or not to forward the packet along the normal processing route. +\item \textbf{FLOOD:} Flood the packet along the minimum spanning tree, not including the incoming interface. +\end{itemize} +Ideally, a switch will support flow-entries that can forward packets to any combination of the physical and virtual ports. For example, this could be expressed internally in the switch with a bitmap that includes all the physical and virtual ports. However, some switches will not be able to support any combination. Therefore, the requirement is that the switch support sending to any combination of physical ports and the ÒControllerÓ virtual port simultaneously. All other combinations are desired, but optional. +\\\\ +The controller will only ask the switch to send to multiple physical ports simultaneously if the switch indicates it supports this behavior in the initial handshake (see section \ref{cts:handshake}). +\\\\ +\textbf{Required Action:} \emph{Drop}. A flow-entry with no specified action indicates that all matching packets should be dropped. +\\\\ +\textbf{Optional Actions:} While not strictly required, the following actions greatly increase the usefulness of an OpenFlow implementation. To aid integration with existing networks, we suggest that the VLAN modification action be supported. + +\begin{table}[hbp] +\centering +\footnotesize +\begin{tabularx}{\linewidth}{ |X|X|X| } +\hline +Action & Associated Data & Description \\ +\hline +Add/Modify/Remove VLAN tag & +16 bits & +If no VLAN is present on the packet, a new header is added with the specified VLAN ID (lower 12 bits). + +If a VLAN header already exists, the VLAN ID is replaced with the specified value. + +If all 16 bits of the action value are set (0xffff) then remove VLAN tag. \\ +\hline +Modify IPv4 source address & +32 bits: Value with which to replace existing IPv4 source address & +Replace the existing IP source address with new value and update the IP checksum (and TCP/UDP +checksum if applicable). + +This action is only applicable to IPv4 packets. \\ +\hline +Modify IPv4 destination address & +32 bits: Value with which to replace existing IPv4 destination address & +Replace the existing IP destination address with new value and update the IP checksum (and TCP/UDP checksum if applicable). + +This action is only applied to IPv4 packets. \\ +\hline +Modify transport source port & +16 bits: Value with which to replace existing TCP or UDP source port & +Replace the existing TCP/UDP source port with new value and update the TCP/UDP checksum. + +This action is only applicable to TCP and UDP packets.\\ +\hline +Modify transport destination port & +16 bits: Value with which to replace existing TCP or UDP destination port & +Replace the existing TCP/UDP destination port with new value and update the TCP/UDP checksum + +This action is only applied to TCP and UDP packets.\\ +\hline +Modify Ethernet source MAC address & +48 bits: Value with which to replace existing source MAC address & +48 bits: Value with which to replace existing source MAC address Replace the existing Ethernet source MAC address with the new value \\ +\hline +Modify Ethernet destination MAC address & +48 bits: Value with which to replace existing destination MAC address & +Replace the existing Ethernet destination MAC address with the new value \\ +\hline +\end{tabularx} +\caption{Fields from packets used to match against flow entries.} +\end{table} + +\subsection{Dataflow} +On receipt of a packet, an OpenFlow Switch performs the functions shown in Figure \ref{fig:packet_flow}. +\\\\ +The flow table is checked for a matching flow entry. The header fields used for the table lookup depend on the packet type as described below (and shown in Figure \ref{fig:flow_match}). + +\begin{itemize} +\item Rules specifying an ingress port are matched against the physical port that received the packet. +\item The Ethernet headers as specified in Table \ref{table:header fields} are used for all packets. +\item If the packet is a VLAN (Ethernet type 0x8100), the VLAN ID is used in the lookup. +\item For IP packets (Ethernet type equal to 0x0800), the lookup fields also include those in the IP header. +\item For IP packets that are TCP or UDP (IP protocol is equal to 6 or 17), the lookup includes the transport ports. +\end{itemize} +A packet matches a flow table entry if the values in the header fields used for the lookup (as defined above) match those defined in the flow table. If a flow table field has a value of ANY, it matches all possible values in the header. +\\\\ +To handle the various Ethernet framing types, matching the Ethernet type is handled in a slightly different manner. If the packet is an Ethernet II frame, the Ethernet type is handled in the expected way. If the packet is an 802.3 frame with a SNAP header and Organizationally Unique Identifier (OUI) of 0x000000, the SNAPÕs protocol id is matched against the flowÕs Ethernet type. A flow entry that specifies an Ethernet type of 0x05FF, matches all Ethernet 802.2 frames without a SNAP header and those with SNAP headers that do not have an OUI of 0x000000. +\\\\ +Packets are matched against flow entries based on prioritization. An entry that specifies an exact match (i.e., it has no wildcards) is always the highest priority. All wildcard entries have a priority associated with them. Higher priority entries must match before lower priority ones. If multiple entries have the same priority, the switch is free to choose any ordering. Higher numbers have higher priorities. +\\\\ +For each packet that matches a flow entry, the associated counters for that entry are updated. If no matching entry can be found for a packet, the packet is sent to the controller over the secure channel. +\begin{figure}[!hbp] +\centering +\includegraphics[width=4.8in]{figure_packet_flow_flowchart.png} +\caption{The functions performed on a packet as it moves through an OpenFlow switch. As discussed in Section \ref{flow_table:stp_support}, support for 802.1d is optional in Type 0 switches.} +\label{fig:packet_flow} +\end{figure} + + +\begin{figure}[!hbp] +\centering +\includegraphics[height=3in]{figure_flow_match_flowchart} +\caption{A flow table showing how a packet is matched against a flow entry.} +\label{fig:flow_match} +\end{figure} + +\subsection{STP Support} +\label{flow_table:stp_support} +Type 0 switches may optionally support the 802.1d spanning tree protocols. Those switches that do support it are expected to process all 802.1d packets locally before performing flow lookup. Port status, as specified by the spanning tree protocol, is then used to limit packets forwarded to the \verb|OFP_FLOOD| port to only those ports along the spanning tree. Port changes as a result of the spanning tree are sent to the controller via port-update messages. Note that forward actions that specify the outgoing port or \verb|OFP_ALL| ignore the port status set by the spanning tree protocol. +\\\\ +Switches that do not support 802.1d spanning tree must allow the controller to specify the port status for packet flooding through the port-mod messages. + +\subsection{Interface with Secure Channel} +The interface between the datapath and the secure channel is implementation-specific. However, the controller must support the following flow table functions based on the OpenFlow messages: + +\begin{itemize} +\item Add flow table entry +\item Modify flow table entry +\item Delete flow table entry +\item Forward packet out of port +\item Send packet to the controller +\item Report counter values for flow entries, flow tables and switch ports +\end{itemize} +The switch software must report some invalid flow mod attempts. For example, if the controller sends a \verb|flow_mod| message with the \verb|OFPP_TABLE| virtual port as part of the action, the switch must respond with an \verb|OFPEFM_TABLE_PORT| message. If the controller specifies a \verb|FLOOD| action but the switch doesnÕt support it, the switch must reply with an \verb|OFPEFM_FLOOD_UNSUPPORTED| error message. If the controller specifies a \verb|NORMAL| action but the switch doesnÕt support it, the switch must reply with an \verb|OFPEFM_NORMAL_UNSUPPORTED| message. +\\\\ +Note that for all other \verb|flow_mod| messages, an error should only be reported if the \verb|REPORT_ERROR| flag is set in the messageÕs flags field. + +\subsubsection{Flow Insertion} +For ADD commands with wildcard fields, the switch must first check for any already-inserted entries that conflict with the incoming entry (i.e., same priority and there exists an entry that could match both). If a conflict is found, the switch should refuse the addition and may respond with an \verb|OFPEFM_ADD_OVERLAP| error message. The switch must then check its flow table for any entries that match the incoming message. If an identical flow entry is found and the \verb|OFPFMF_FORCE| flag is not set, the switch must not change the flow table, and may respond with an \verb|OFPEFM_ADD_EXIST| error message. If the \verb|OFPFMF_FORCE| flag is set, the existing entry is overwritten and no error is reported. + +\subsubsection{Flow Modification} +\label{flow_table:sec_chan:flow_mod} +Each flow entry can be modified. A modify operation must not change the current flowÕs counters and idle time. If the \verb|MODIFY| command is used, the wildcards are ÒactiveÓ and all flows that match the description are modified. If the \verb|MODIFY_STRICT| command is used, all fields, including the wildcards and priority, are strictly matched against the entry, and only an identical flow is modified in the table. For example, if a message to modify entries is sent that has all the wildcard flags set, the \verb|MODIFY| command would modify all flows from all tables, while the \verb|MODIFY_STRICT| command would only modify a rule that applies to all packets at the specified priority. If a \verb|MODIFY| or \verb|MODIFY_STRICT| command arrives which matches no entries, and the \verb|OFPFMF_FORCE| flag is not set, the switch may respond with an \verb|OFPEFM_MODIFY_MISSING| error message. If the \verb|OFPFMF_FORCE| flag is set, the switch will modify or add the flow entry, regardless of whether an entry was already there, and no error is reported. + +\subsubsection{Flow Removal} +\label{flow_table:sec_chan:flow_removal} +Each flow entry has an \verb|idle_timeout| and a \verb|hard_timeout| associated with it. If no packet has matched the rule in the last \verb|idle_timeout| seconds, or it has been \verb|hard_timeout| seconds since the flow was inserted, the switch removes the entry and sends a flow expiration message. In addition, the controller is able to actively remove entries by sending a flow message with the \verb|DELETE| or \verb|DELETE_STRICT| command. Like the message used to add the entry, a removal message contains a description, which may include wild cards. +\\\\ +If the \verb|DELETE| command is used, the wildcards are ÒactiveÓ and all flows that match the description are removed. If the \verb|DELETE_STRICT| command is used, all fields, including the wildcards and priority, are strictly matched against the entry, and only an identical flow is removed from the table. For example, if a message to remove entries is sent that has all the wildcard flags set, the \verb|DELETE| command would delete all flows from all tables, while the \verb|DELETE_STRICT| command would only delete a rule that applies to all packets at the specified priority. If a \verb|DELETE| or \verb|DELETE_STRICT| command arrives which matches no entries, the switch may respond with an \verb|OFPEFM_DELETE_MISSING| error message. + +\section{Secure Channel} + +\subsection{Switch/Controller Connection} +The switch and controller communicate through an SSL connection. The switch must be able to establish the communication at a user-configurable (but otherwise fixed) IP address, using a user-specified port. Traffic to and from the secure channel is not checked against the flow table. Therefore, the switch must identify incoming traffic as local before checking it against the flow table. Future versions of the protocol specification will describe a dynamic controller discovery protocol in which the IP address and port for communicating with the controller is determined at runtime. +\\\\ +The SSL connection is initiated by the switch on startup to the controllerÕs server, which is located by default on TCP port 976. The switch and controller mutually authenticate by exchanging certificates signed by a site-specific private key. Each switch must be user-configurable with one certificate for authenticating the controller (controller certificate) and the other for authenticating to the controller (switch certificate). + +\subsection{OpenFlow Protocol Overview} +The controller configures and manages the switch, and receives events from the switch, via the OpenFlow protocol, on the secure channel. +\\\\ +The OpenFlow protocol supports three message types, \emph{controller-to-switch}, \emph{asynchronous}, and \emph{symmetric}, each with multiple sub-types. Controller-to-switch messages are initiated by the controller and used to directly manage or inspect the state of the switch. Asynchronous messages are initiated by the switch and used to update the controller of network events and changes to the switch state. Symmetric messages are initiated by either the switch or the controller and used to verify the liveness of the other side. The message types used by OpenFlow are described below. + +\subsubsection{Controller-to-Switch} +Controller/switch messages are initiated by the controller and may or may not require a response from the switch. +\\\\ +\textbf{Features:} Upon SSL session establishment, the controller sends a features request message to the switch. The switch must reply with a features reply that specifies the capabilities supported by the switch. +\\\\ +\textbf{Configuration:} The controller is able to set and query configuration parameters in the switch. The switch only responds to a query from the controller. +\\\\ +\textbf{Modify-State:} Modify-State messages are sent by the controller to manage state on the switches. Their primary purpose is to add/delete and modify flows in the flow tables and to set switch port properties. +\\\\ +\textbf{Read-State:} Read-State messages are used by the controller to collect statistics from the switchÕs flow-tables, ports and the individual flow entries. +\\\\\ +\textbf{Send-Packet}: These are used by the controller to send packets out of a specified port on the switch. + +\subsubsection{Asynchronous} +Asynchronous messages are sent without solicitation from the switch to the controller and denote a change in switch or network state. The four main asynchronous message types are described below. +\\\\ +\textbf{Packet-in:} For all packets that do not have a matching flow entry, a packet-in event is sent to the controller (or if a packet matches an entry with a ``send to controller" action). If the switch has sufficient memory to buffer packets that are sent to the controller, the packet-in events contain some fraction of the packet header (by default 128 bytes) and a buffer ID to be used by the controller when it is ready for the switch to forward the packet. Switches that do not support internal buffering (or have run out of internal buffering) must send the full packet to the controller as part of the event. +\\\\ +\textbf{Flow Expiration:} When a flow entry is added to the switch, an idle timeout value is included that indicates when the entry should be removed due to a lack of activity, as well as a hard timeout value that indicates when the entry should be removed, regardless of activity. In the configuration message, the controller can indicate that it wishes to be informed when a flow expires. If this flag is set, the switch sends a flow expiration event that includes the duration of the flow and the number of packets and bytes sent. Flow expirations are only set when explicitly enabled by the controller, through the configuration message. +\\\\ +\textbf{Port-status:} The switch is expected to send port-status messages to the controller as port configuration state changes. These events include change in port status (for example, if it was brought down directly by a user) or a change in ports status as specified by 802.1d (see Section \ref{flow_table:stp_support} for a description of 802.1d support requirements). +\\\\ +\textbf{Error:} The switch is able to notify the controller of problems using error messages. + +\subsubsection{Symmetric} +Symmetric messages are sent without solicitation, in either direction. +\\\\ +\textbf{Echo:} Echo request/reply messages can be sent from either the switch or the controller, and must return an echo reply. They can be used to indicate the latency, bandwidth, and/or liveness of a controller-switch connection. + +\input{appendix} + + + + + +\end{document} \ No newline at end of file -- 2.30.2