Changes between Initial Version and Version 1 of HowTo/WriteOFv3Rspecs/Spec


Ignore:
Timestamp:
09/30/11 09:16:22 (13 years ago)
Author:
nriga@bbn.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/WriteOFv3Rspecs/Spec

    v1 v1  
     1[[PageOutline]]
     2= OFv3 rspecs =
     3
     4An Openflow rspec is describing the flowspace for an experiment and thus it has ways of
     5describing datapaths, ports and rules to filter packets based on packet headers.
     6
     7FOAM, that is an Openflow Aggregate Manager, is using GENI compliant rspecs, with an Openflow extention(v2).
     8You can find an example rspec [https://openflow.stanford.edu/display/FOAM/rspec here].
     9
     10Here a list of supported tag is provided. The shorthand notations used in the description is:
     11|| ![1]|| An element is mandatory and it can only appear once ||
     12|| [?] || An element is optional, but it can appear at most once ||
     13|| [*] || An element is optional but it can appear multiple times in the rspec   ||
     14|| [+] || An element is mandatory , but it can appear multiple times in the rspec ||
     15
     16=== <openflow:sliver> ===
     17![1] This element contains all the information about the requested sliver.
     18                            ''Attributes''::
     19    * '''description''' : [?] a short description of your experiment
     20    * '''ref''' : [?] A URL pointing to a page describing your project
     21    * '''email''' : [?] user's email address that is used by FOAM to send notifications about the sliver.
     22                           ''Children tags''::
     23    * <openflow:controller> [+]
     24    * <openflow:group> [+]
     25    * <openflow:match> [+]
     26                           '' Parent tags'':: <rspec>
     27
     28=== <openflow:controller> ===
     29[+] This element provides information about the controller for the sliver.
     30It is MANDATORY to have one and only one primary controller.
     31              ''Attributes''::
     32   * '''url''' : ![1] the information about where your openflow controller is running in the form of tcp:<hostname/ip address>:<tcp port>. Examples : tcp:10.0.0.1:6633 , tcp:myctrl.example.net:6637
     33   * '''type''' : ![1] this defines what type of controller this is. There can be only three types of controllers:
     34      * '''primary''' : this is the controller that handles the network traffic and makes decisions about how packets should be forwarded. [MANDATORY to have one and only one primary controller].
     35      * '''monitor''' : a monitor controller can not make decisions about how packets are forwarded, but it has the capability of creating and sending packets in the network, e.g. LLDP packets for performing topology discovery. [An rspec can have more than one monitor controllers]
     36      * backup : a backup controller is used if the primary controller goes down, multiple backup controllers can be defined and they are used in the order they appear in the request rspec. Right now defining backup monitors will have no effect. [An rspec can have more than one backup controllers]
     37               ''Children tags'':: None
     38               '' Parent tags'':: <openflow:sliver>
     39
     40=== <openflow:group> ===
     41[+] This tag is used to group multiple datapath resources together, so they can be used as a bundle in defining matches.
     42So if this sliver is interested in packets that go through some ports on datapaths A, B and C then the group should contain three <openflow:datapath> elements on for each of A, B and C. 
     43                          ''Attributes''::
     44  * '''name''' : ![1] this is the name of the group. 
     45                     ''Children tags'':: <openflow:datapath>[*], a group element with no children implies ALL datapaths.
     46                     '' Parent tags'':: <openflow:sliver>
     47
     48=== <openflow:datapath> ===
     49[*] This tag provides information about a single datapath resource.
     50                             ''Attributes''::
     51   * component_id : ![1] the urn of the component, the best way to get this is from the advertisement rspec
     52   * component_manager_id : ![1] is urn of the Openflow Aggregate Manager that manages this resource as listed in the advertisement rspec
     53                             '' Children tags'':: <openflow:port>[*], a datapath element with no children implies ALL ports
     54                             '' Parent tags'':: <openflow:group>, <openflow:match>
     55
     56=== <openflow:port> ===
     57[*] This provides information about a port on a datapath.
     58                        ''Attributes''::
     59   * num : ![1] the number of the port, the best way to get this is from the advertisement rspec
     60   * name : [?] the name of the port as defined in the advertisement rspec
     61                        '' Children tags'':: None
     62                        '' Parent tags'':: <openflow:datapath>
     63
     64=== <openflow:match> ===
     65[+] This is the tag for describing requested matches. Conceptually this tag has two parts, one for describing the datapaths in which we would like to control the forwarding of packets and another part that defines filters on which packets to control.
     66The first part is mandatory and uses the <openflow:use-group> and <openflow:datapath> tags. The second part is optional and uses the <openflow:packet> tag. If no filters are defined, ALL packets in the specified datapaths are requested.
     67                        ''Attributes'':: None
     68                        '' Children tags''::
     69   [AT LEAST ONE OF THE <openflow:use-group> or <openflow:datapath> MUST BE PRESENT]
     70   * <openflow:use-group> [*]
     71   * <openflow:datapath> [*]
     72   * <openflow:packet> [?]
     73                        '' Parent tags'':: <openflow:sliver>
     74
     75=== <openflow:use-group> ===
     76[*] This tag specifies which group of datapaths should be used for this match.
     77                        ''Attributes''::
     78   * '''name''' : ![1] the name of the group as it is defined in the corresponding <openflow:group> tag, if the group has not been defined the rspec will be rejected.
     79                        '' Children tags'':: None
     80                        '' Parent tags'':: <openflow:match>
     81
     82
     83=== <openflow:packet> ===
     84[?] This tag describes the packet filters for defining this match. 
     85                        ''Attributes'':: None
     86                        '' Children tags'':: [AT LEAST ONE OF THOSE SHOULD BE PRESENT]
     87   * <openflow:dl_src> [*]
     88   * <openflow:dl_dst> [*]
     89   * <openflow:dl_type> [*]
     90   * <openflow:dl_vlan> [*]
     91   * <openflow:nw_src> [*]
     92   * <openflow:nw_dst> [*]
     93   * <openflow:dl_proto> [*]
     94   * <openflow:tp_src> [*]
     95   * <openflow:tp_dst> [*]
     96                        '' Parent tags'':: <openflow:match>
     97   
     98=== Filter elements ===
     99
     100In order to filter the traffic that will be delegated to this sliver packets can be filtered based on the following packet header fields. Each field corresponds to an element. In all of them you can specify a list of values by using a comma separated list (e.g. a,b,c) , or if ranges are supported to use the dash (e.g a-c), or a mixture of the two (e.g. a-c, f-j). Each element can appear multiple times within a packet element. If an element appears more than once, then the union of all the requested values is requested. All of the match elements have the same structure so we will describe it here :
     101
     102
     103                        ''Attributes''::
     104   * '''value''' : ![1] A list or a range of values, the value format id different for each element
     105                        '' Children tags'':: None
     106                        '' Parent tags'':: <openflow:match>
     107
     108
     109 
     110==== <openflow:dl_src> ====
     111[*] Matches on the source ethernet address of  the packet. Format xx:xx:xx:xx:xx:xx, does NOT support ranges. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]
     112
     113==== <openflow:dl_dst> ====
     114[*] Matches on the destination ethernet address of  the packet. Format xx:xx:xx:xx:xx:xx, does NOT support ranges. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]
     115
     116==== <openflow:dl_type> ====
     117[*] Matches on the ethernet type of the packet. Format is numbers, does NOT support ranges. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]
     118
     119==== <openflow:dl_vlan> ====
     120[*] Matches on the vlan id of the packet. Format is numbers, supports ranges.  For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]                       
     121
     122==== <openflow:nw_src> ==== 
     123[*]Matches on the IP source address of the packet. IP addresses or subnets in CIDR format (e.g. 10.43.123.0/24), does not support ranges. If this is used then <openflow:dl_type> should be matching IP (0x0806) and/or ARP (0x806) packets. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]
     124
     125==== <openflow:nw_dst> ====
     126[*]Matches on the IP destination address of the packet. IP addresses or subnets in CIDR format (e.g. 10.43.123.0/24), does NOT support ranges. If this is used then <openflow:dl_type> should be matching IP (0x0800) and/or ARP (0x806) packets. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]
     127
     128==== <openflow:nw_proto> ==== 
     129[*]Matches on the IP protocol. Protocol numbers (e.g. 17 for UDP), supports ranges. If this is used then <openflow:dl_type> should be matching IP (0x0800) and/or ARP (0x806) packets. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here] 
     130
     131==== <openflow:tp_src> ====
     132[*]Matches on the source port of TCP or UDP headers. Format is numbers, supports ranges. If this is used then <openflow:nw_proto> should be matching TCP (6) and/or UDP (17) packets.For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here.]
     133   
     134==== <openflow:tp_dst> ====
     135[*]Matches on the destination port of TCP or UDP headers. Format is numbers, supports ranges. If this is used then <openflow:nw_proto> should be matching TCP (6) and/or UDP (17) packets. For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here.]