Changes between Version 2 and Version 3 of HowTo/WriteOFv3Rspecs


Ignore:
Timestamp:
09/30/11 09:17:42 (8 years ago)
Author:
nriga@bbn.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/WriteOFv3Rspecs

    v2 v3  
    22
    33This page describes how to write [http://www.protogeni.net/trac/protogeni/wiki/RSpecSchema2 GENI compliant] Openflow rspecs. These new rspecs are supported by FOAM, the new Openflow AM. This page also provides instructions and how to convert Expedient rspecs to the new form of rspecs.
     4For a detailed explanation of the tags and attributes look at [wiki:HowTo/WriteOFv3/Spec this specification page].
    45
    56= Openflow Slivers =
     
    2122    ''"All packets coming in port 5 on datapath 15, and have a source IP address in subnet 10.10.10.0/24."'''
    2223
    23 = FOAM rspecs =
    24 
    25 An Openflow rspec is describing the flowspace for an experiment and thus it has ways of
    26 describing datapaths, ports and rules to filter packets based on packet headers.
    27 
    28 FOAM, that is an Openflow Aggregate Manager, is using GENI compliant rspecs, with an Openflow extention(v2).
    29 You can find an example rspec [https://openflow.stanford.edu/display/FOAM/rspec here].
    30 
    31 Here a list of supported tag is provided. The shorthand notations used in the description is:
    32 || ![1]|| An element is mandatory and it can only appear once ||
    33 || [?] || An element is optional, but it can appear at most once ||
    34 || [*] || An element is optional but it can appear multiple times in the rspec   ||
    35 || [+] || An element is mandatory , but it can appear multiple times in the rspec ||
    36 
    37 === <openflow:sliver> ===
    38 ![1] This element contains all the information about the requested sliver.
    39                             ''Attributes''::
    40     * '''description''' : [?] a short description of your experiment
    41     * '''ref''' : [?] A URL pointing to a page describing your project
    42     * '''email''' : [?] user's email address that is used by FOAM to send notifications about the sliver.
    43                            ''Children tags''::
    44     * <openflow:controller> [+]
    45     * <openflow:group> [+]
    46     * <openflow:match> [+]
    47                            '' Parent tags'':: <rspec>
    48 
    49 === <openflow:controller> ===
    50 [+] This element provides information about the controller for the sliver.
    51 It is MANDATORY to have one and only one primary controller.
    52               ''Attributes''::
    53    * '''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
    54    * '''type''' : ![1] this defines what type of controller this is. There can be only three types of controllers:
    55       * '''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].
    56       * '''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]
    57       * 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]
    58                ''Children tags'':: None
    59                '' Parent tags'':: <openflow:sliver>
    60 
    61 === <openflow:group> ===
    62 [+] This tag is used to group multiple datapath resources together, so they can be used as a bundle in defining matches.
    63 So 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. 
    64                           ''Attributes''::
    65   * '''name''' : ![1] this is the name of the group. 
    66                      ''Children tags'':: <openflow:datapath>[*], a group element with no children implies ALL datapaths.
    67                      '' Parent tags'':: <openflow:sliver>
    68 
    69 === <openflow:datapath> ===
    70 [*] This tag provides information about a single datapath resource.
    71                              ''Attributes''::
    72    * component_id : ![1] the urn of the component, the best way to get this is from the advertisement rspec
    73    * component_manager_id : ![1] is urn of the Openflow Aggregate Manager that manages this resource as listed in the advertisement rspec
    74                              '' Children tags'':: <openflow:port>[*], a datapath element with no children implies ALL ports
    75                              '' Parent tags'':: <openflow:group>, <openflow:match>
    76 
    77 === <openflow:port> ===
    78 [*] This provides information about a port on a datapath.
    79                         ''Attributes''::
    80    * num : ![1] the number of the port, the best way to get this is from the advertisement rspec
    81    * name : [?] the name of the port as defined in the advertisement rspec
    82                         '' Children tags'':: None
    83                         '' Parent tags'':: <openflow:datapath>
    84 
    85 === <openflow:match> ===
    86 [+] 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.
    87 The 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.
    88                         ''Attributes'':: None
    89                         '' Children tags''::
    90    [AT LEAST ONE OF THE <openflow:use-group> or <openflow:datapath> MUST BE PRESENT]
    91    * <openflow:use-group> [*]
    92    * <openflow:datapath> [*]
    93    * <openflow:packet> [?]
    94                         '' Parent tags'':: <openflow:sliver>
    95 
    96 === <openflow:use-group> ===
    97 [*] This tag specifies which group of datapaths should be used for this match.
    98                         ''Attributes''::
    99    * '''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.
    100                         '' Children tags'':: None
    101                         '' Parent tags'':: <openflow:match>
    102 
    103 
    104 === <openflow:packet> ===
    105 [?] This tag describes the packet filters for defining this match. 
    106                         ''Attributes'':: None
    107                         '' Children tags'':: [AT LEAST ONE OF THOSE SHOULD BE PRESENT]
    108    * <openflow:dl_src> [*]
    109    * <openflow:dl_dst> [*]
    110    * <openflow:dl_type> [*]
    111    * <openflow:dl_vlan> [*]
    112    * <openflow:nw_src> [*]
    113    * <openflow:nw_dst> [*]
    114    * <openflow:dl_proto> [*]
    115    * <openflow:tp_src> [*]
    116    * <openflow:tp_dst> [*]
    117                         '' Parent tags'':: <openflow:match>
    118    
    119 === Filter elements ===
    120 
    121 In 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 :
    122 
    123 
    124                         ''Attributes''::
    125    * '''value''' : ![1] A list or a range of values, the value format id different for each element
    126                         '' Children tags'':: None
    127                         '' Parent tags'':: <openflow:match>
    128 
    129 
    130  
    131 ==== <openflow:dl_src> ====
    132 [*] 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]
    133 
    134 ==== <openflow:dl_dst> ====
    135 [*] 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]
    136 
    137 ==== <openflow:dl_type> ====
    138 [*] 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]
    139 
    140 ==== <openflow:dl_vlan> ====
    141 [*] Matches on the vlan id of the packet. Format is numbers, supports ranges.  For details on the structure look [wiki:HowTo/ConvertExpedientToFoamRspecs#Matchelements here]                       
    142 
    143 ==== <openflow:nw_src> ==== 
    144 [*]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]
    145 
    146 ==== <openflow:nw_dst> ====
    147 [*]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]
    148 
    149 ==== <openflow:nw_proto> ==== 
    150 [*]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] 
    151 
    152 ==== <openflow:tp_src> ====
    153 [*]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.]
    154    
    155 ==== <openflow:tp_dst> ====
    156 [*]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.]
    15724
    15825= Writing FOAM request rspecs =