OpenFlow Functions

sth::emulation_openflow_config

Purpose

Spirent Extension (for Spirent HLTAPI only).

Creates or modifies OpenFlow protocol emulation with Spirent HLTAPI. The OpenFlow protocol is based on the software-defined networking (SDN) concept, which fosters greater flexibility and extensibility in network switching through open interfaces and increases predictability in network control by separating the control plane from the data plane.

OpenFlow uses two primary components, a controller and a switch, which communicate via a standard open programming interface. Currently Spirent HLTAPI supports the open controller emulation.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_openflow_config
   [-mode {enable|modify|add|delete}   M]
   [-handle <handle>]
   [-count <numeric>]
   [-barrier_request_timeout <250-6000000>]
   [-connection_type {passive_tcp|passive_tcp_tls}]
   [-enable_barrier {0|1}]
   [-add_default_discovery {0|1}]
   [-add_flows_on_connect {0|1}]
   [-add_meters_on_connect {0|1}]
   [-clear_flows_on_connect {0|1}]
   [-clear_meters_on_connect {0|1}]
   [-discovery_dstmacaddr <aa:bb:cc:dd:ee:ff>]
   [-discovery_msg_interval <5-32768>]
   [-desired_role {EQUAL|MASTER|SLAVE}]
   [-desired_generation_id <0-18446744073709551615>]
   [-openflow_version {VERSION_1_0|VERSION_1_3}]
   [-send_role_connect {0|1}]
   [-max_flow_rate <0.0-65535.0>]
   [-tcp_port <1-65535>]
   [-flow_cmd_type {add|delete|modify}]
   [-flow_block_type {bound|custom|flow_table_text}]
   [-flow_switch_handle <handle>]
   [-flow_table_text <string >]
   [-stream_ids <alphanum>]
   [-match_fields  {ingress_port|eth_src_mac|eth_dst_mac|eth_type|
               vlan_id|vlan_priority|ipv4_src_addr|ipv4_dst_addr|
               ipv4_tosipv4_protocol|tcp_udp_src_port|tcp_udp_dst_port|
               ipv6_src_addr|ipv6_dst_addr|ipv6_flow_label|
               ipv6_protocol|ipv6_traffic_class}]
   [-custom_match_field
               {arp_op:<integer>}|{arp_sha:<mac_addr/mask>}|
               {arp_spa:<addr/mask>}|{arp_tha:<mac_addr/mask>}|
               {arp_tpa:<addr/mask>}|{dl_dst:<mac_addr/mask>}|{dl_src:<mac_addr/mask>}|
               {dl_type:<hex>}|{dl_vlan:<integer/hex>}|{icmpv4_type:<type>}|
               {dl_vlan_pcp:<integer>}|{exp:<int/string/string/hex>}|
               {ext_hdr:<integer/hex>}|icmpv4_code:<integer>}|
               {icmpv6_code:<integer>}|{icmpv6_type:<type>}|
               {in_phy_port:<integer>}|{in_port:<integer>}|
               {ipv6_dst:<ipv6_addr/mask>}|{ipv6_label:<integer/mask>}|
               {ipv6_src:<ipv6_addr/mask>}|{metadata:<integer/mask>}|
               {mpls_bos:<integer>}|{mpls_label:<integer>}|{mpls_tc:<integer>}|
               {nd_sll:<mac_addr>}|{nd_target:<ipv6_addr>}|{nd_tll:<mac_addr>}|
               {nw_dst:<ipv4_addr/mask>}|{nw_ecn:<integer>}|
               {nw_proto:<protocol types>}|{nw_src:<ipv4_addr/mask>}|
               {nw_tos:<integer>}|{pbb_isid:<integer/mask>}|{sctp_dst:<integer>}|
               {sctp_src:<integer>}|{tcp_dst:<integer>}|{tcp_src:<integer>}|
               {tp_dst:<integer>}|{tp_src:<integer>}|{tun_id:<integer/mask>}|
               {udp_dst:<integer>}|{udp_src:<integer>}]
   [-custom_action_field  {all}|{controller:<integer>}|{copy_ttl_in}|{copy_ttl_out}|
               {dec_mpls_ttl}|{dec_ttl}|{flood}|{local}|{group:<integer>}|
               {in_port:<integer>}|{mod_dl_dst:<mac_addr>}|
               {mod_dl_src:<mac_addr>}|{mod_icmpv6_code:<integer>}|
               {mod_icmpv6_type:<type>}|{mod_ipv6_dst:<ipv6_addr>}|
               {mod_ipv6_label:<integer>}|{mod_ipv6_src:<ipv6_addr>}|
               {mod_nd_sll:<mac_addr>}|{mod_nd_target:<ipv6_addr>}|
               {mod_nd_tll:<mac_addr>}|{mod_nw_dst:<ipv4_addr>}|
               {mod_nw_src:<ipv4_addr>}|{mod_nw_tos:<integer>}|
               {mod_sctp_dst:<integer>}|{mod_sctp_src:<integer>}|
               {mod_tcp_dst:<integer>}|{mod_udp_src:<integer>}|
               {mod_vlan_pcp:<integer>}|{mod_vlan_vid:<integer>}|{normal}|
               {pop_mpls:<ethernet_type>}|{pop_pbb}|{pop_vlan}|
               {push_mpls:<ethernet_type>}|{push_pbb:<ethernet_type>}|
               {push_vlan:<ethernet_type>}|{set_mpls_bos:<integer>}|
               {set_mpls_label:<integer>}|{set_mpls_tc:<integer>}|
               {set_mpls_ttl:<integer>}|{set_queue:<integer>}]
   [-custom_goto_table_field   {goto_table=<integer>}]
   [-custom_metadata_field    {write_metadata=<data:mask>}]
   [-custom_write_action_field {all}|{controller:<integer>}|{copy_ttl_in}|
               {copy_ttl_out}|{dec_mpls_ttl}|{dec_ttl}|{flood}|{local}|
               {group:<integer>}|{in_port:<integer>}|{mod_dl_dst:<mac_addr>}|
               {mod_dl_src:<mac_addr>}|{mod_icmpv6_code:<integer>}|
               {mod_icmpv6_type:<type>}|{mod_ipv6_dst:<ipv6_addr>}|
               {mod_ipv6_label:<integer>}|{mod_ipv6_src:<ipv6_addr>}|
               {mod_nd_sll:<mac_addr>}|{mod_nd_target:<ipv6_addr>}|
               {mod_nd_tll:<mac_addr>}|{mod_nw_dst:<ipv4_addr>}|
               {mod_nw_src:<ipv4_addr>}|{mod_nw_tos:<integer>}|
               {mod_sctp_dst:<integer>}|{mod_sctp_src:<integer>}|
               {mod_tcp_dst:<integer>}|{mod_udp_src:<integer>}|
               {mod_vlan_pcp:<integer>}|{mod_vlan_vid:<integer>}|{normal}|
               {pop_mpls:<ethernet_type>}|{pop_pbb}|{pop_vlan}|
               {push_mpls:<ethernet_type>}|{push_pbb:<ethernet_type>}|
               {push_vlan:<ethernet_type>}|{set_mpls_bos:<integer>}|
               {set_mpls_label:<integer>}|{set_mpls_tc:<integer>}|
               {set_mpls_ttl:<integer>}|{set_queue:<integer>}]
   [-custom_clear_action_field  {clear_actions}]
   [-custom_meter_field  {meter=<integer>}]
   [-custom_exp_field {exp_instruction=<data:id>]
   [-hard_timeout <0-65535>]
   [-idle_timeout <0-65535>]
   [-transport_type {<modify_vlanid|flow_forward}]
   [-first_vlan_id <0-4095>]
   [-action_type {forward_to_port|drop}]
   [-modify_dst_device {eth_mac|vlan_id|ipv4_addr|ipv6_addr}]
   [-meter_id <0-4294967295>]
   [-enable_burst_size {0|1}]
   [-rate_type {pktps|kbps}]
   [-meter_switch_handle <any>]
   [-band_type {dscp_remark|experimenter|drop}]
   [-burst_size <numeric>]
   [-rate <numeric>]
   [-experimenter <numeric>]
   [-precedence_level <0-255>]

OpenFlow Device Configurations::
  [-add_group_entries_on_connect {0|1|true|false|TRUE|FALSE}]
  [-clear_existing_group_entries_on_connect {0|1|true|false|TRUE|FALSE}]
  [-controller_certificate <string>]
  [-controller_private_key <string>]
  [-dynamic_load <1-1000000>]
  [-enable_reactive_mode {0|1|true|false|TRUE|FALSE}]
  [-endpoint_connection_pattern {pair|backbone_src_first|
                           backbone_dst_first|backbone_interleaved}]
  [-send_set_async_on_connect {0|1|true|false|TRUE|FALSE}]
  [-switch_ca_certificates <string>]

Flow Block Configurations::
 [-cookie <NUMERIC>]
 [-cookie_mask <NUMERIC>]
 [-flags <HEX>]
 [-strict_match {0|1|true|false|TRUE|FALSE}]

Async Message Configurations:
 [-flow_removed_mask_master_equal <HEX>]
 [-flow_removed_mask_slave <HEX>]
 [-packet_in_mask_master_equal <HEX>]
 [-packet_in_mask_slave <HEX>]
 [-port_status_mask_master_equal <HEX>]
 [-port_status_mask_slave <HEX>]

Group Entries/Action Configurations:
 [-group_id <NUMERIC>]
 [-group_type {all|indirect|select|fast_failover}]
 [-watch_group <HEX>]
 [-watch_port <HEX>]
 [-weight <NUMERIC>
 [-controller_max_length <NUMERIC>]
 [-decrement_ttl_type {decrement_mpls_ttl|decrement_ip_ttl}]
 [-group_action_type {copy_ttl_inwards|pop|push_mpls|
                   push_pbb|push_vlan|copy_ttl_outwards|
                   decrement_ttl|set|qos|group|output }]
 [-output_group_id <NUMERIC>]
 [-output_port_action_type {port_num|all|controller|table|
                         in_port|any|local|normal|flood}]
 [-output_port_number <NUMERIC>]
 [-pop_mpls_tag_data_ethertype <NUMERIC>]
 [-pop_tag {pop_mpls_header|pop_pbb_header|pop_vlan_header}]
 [-push_mpls_tag_data_ethertype <NUMERIC>]
 [-push_pbb_tag_data_ethertype <NUMERIC>]
 [-push_vlan_tag_data_ethertype <NUMERIC>]
 [-set_arp_dst_hw_addr  <aa:bb:cc:dd:ee:ff>]
 [-set_arp_dst_ipv4_addr <a.b.c.d>]
 [-set_arp_opcode <NUMERIC>]
 [-set_arp_src_hw_addr  <aa:bb:cc:dd:ee:ff>]
 [-set_arp_src_ipv4_addr <a.b.c.d>]
 [-set_eth_dst  <aa:bb:cc:dd:ee:ff>]
 [-set_eth_src  <aa:bb:cc:dd:ee:ff>]
 [-set_eth_type <NUMERIC>]
 [-set_icmpv4_code <NUMERIC>]
 [-set_icmpv4_type <NUMERIC>]
 [-set_icmpv6_code <NUMERIC>]
 [-set_icmpv6_type <NUMERIC>]
 [-set_ip_dscp <NUMERIC>]
 [-set_ip_ecn <NUMERIC>]
 [-set_ip_proto <NUMERIC>]
 [-set_ipv4_dst <a.b.c.d>]
 [-set_ipv4_fields {ip_dscp|ip_ecn|ip_proto|ipv4_src|
               ipv4_dst|tcp_src|tcp_dst|udp_src|udp_dst|
               sctp_src|sctp_dst|icmpv4_type|icmpv4_code}]
 [-set_ipv4_src <a.b.c.d>]
 [-set_ipv6_dst <aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh>]
 [-set_ipv6_fields {ipv6_src|ipv6_dst|ipv6_flabel|icmpv6_type|
                   icmpv6_code|ipv6_nd_target|ipv6_nd_sll|
                   ipv6_nd_tll}]
 [-set_ipv6_flabel <NUMERIC>]
 [-set_ipv6_nd_sll  <aa:bb:cc:dd:ee:ff>]
 [-set_ipv6_nd_target <aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh>]
 [-set_ipv6_nd_tll  <aa:bb:cc:dd:ee:ff>]
 [-set_ipv6_src <aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh>]
 [-set_l2_fields {eth_dst|eth_src|eth_type|vlan_vid|vlan_pcp|
               arp_op|arp_spa|arp_tpa|arp_sha|arp_tha|mpls_label|
               mpls_tc|mpls_bos|pbb_isid|tunnel_id}]
 [-set_mpls_bos_bit {0|1|true|false}]
 [-set_mpls_label <NUMERIC>]
 [-set_mpls_tc <NUMERIC>]
 [-set_pbb_isid <NUMERIC>]
 [-set_queue_id <NUMERIC>]
 [-set_sctp_dst <NUMERIC>]
 [-set_sctp_src <NUMERIC>]
 [-set_tcp_dst <NUMERIC>]
 [-set_tcp_src <NUMERIC>]
 [-set_tunnel_id <NUMERIC>]
 [-set_udp_dst <NUMERIC>]
 [-set_udp_src <NUMERIC>]
 [-set_vlan_id <NUMERIC>]
 [-set_vlan_priority <NUMERIC>]

Reactive Mode Configurations::
 [-rm_action_field {dl_dst=<mac/mask>}|{dl_src=<mac/mask>}|{dl_type=<hex>}|
               {dl_vlan=<id/mask>}{dl_vlan_pcp=<priority>}|{in_port=<port_number>}|
               {nw_dst=<ipv4/mask>}|{nw_ecn=<int>}|{nw_proto=<hex>}|
               {nw_src=<ipv4/mask>}|
               {nw_tos=<int>}]
 [-rm_match_field  {all}|{controller:<integer>}|{copy_ttl_in}|{copy_ttl_out}|
               {dec_mpls_ttl}|{dec_ttl}|{flood}|{local}|{group:<integer>}|
               {in_port:<integer>}|{mod_dl_dst:<mac_addr>}|{mod_dl_src:<mac_addr>}|
               {mod_icmpv6_code:<integer>}|{mod_icmpv6_type:<type>}|
               {mod_ipv6_dst:<ipv6_addr>}|{mod_ipv6_label:<integer>}|
               {mod_ipv6_src:<ipv6_addr>}|{mod_nd_sll:<mac_addr>}|
               {mod_nd_target:<ipv6_addr>}|{mod_nd_tll:<mac_addr>}|
               {mod_nw_dst:<ipv4_addr>}|{mod_nw_src:<ipv4_addr>}|
               {mod_nw_tos:<integer>}|{mod_sctp_dst:<integer>}|
               {mod_sctp_src:<integer>}|{mod_tcp_dst:<integer>}|
               {mod_udp_src:<integer>}|{mod_vlan_pcp:<integer>}|
               {mod_vlan_vid:<integer>}|{normal}|{pop_mpls:<ethernet_type>}|
               {pop_pbb}|{pop_vlan}|{push_mpls:<ethernet_type>}|
               {push_pbb:<ethernet_type>}|{push_vlan:<ethernet_type>}|
               {set_mpls_bos:<integer>}|{set_mpls_label:<integer>}|
               {set_mpls_tc:<integer>}|{set_mpls_ttl:<integer>}|
               {set_queue:<integer>} ]
 [-rm_switch_handle_list <switch handle list>]

Arguments

-handle

Specifies the OpenFlow device/host handle when -mode is set to enable, modify, or add; Specifies the OpenFlow flow/meter handle when -mode is set to modify

-mode

Specifies the action to perform. Possible values are enable, modify, and add. This argument is Mandatory . The modes are described below:

enable   Configures the OpenFlow devices specified by -handle

modify   Modifies the existing OpenFlow flow blocks or meters

add      Adds OpenFlow devices, flows, or meters to the current
         configuration

delete   Deletes OpenFlow devices, flows, or meters from the
         current configuration
-barrier_request_timeout

Maximum number of milliseconds to wait for a Barrier Reply after sending a Barrier Request message before timing out. Possible values range from 250 to 6000000. The default value is 10000.

-connection_type

Specifies the TCP connection type. Possible values are:

passive_tcp     Controller acts as a TCP server and listens for
                incoming switch connections

passive_tcp_tls  Passive TCP with Transport Layer Security (TLS)

The default value is passive_tcp.

-count
-enable_barrier

Determines whether the OpenFlow controller will send out a Barrier Request message after adding flows to the switch. Possible values are 0 and 1. When it is set to 1, the OpenFlow controller will send out a Barrier Request after adding flows to the switch. The default value is 0.

-add_default_discovery

Determines whether to add default flows for discovery. Possible values are 0 and 1. When it is set to 1, a default flow to forward LLDP packets to the controller will be added to every switch after discovery is started. These flows will be removed when discovery is stopped. When it is set to 0, no flows will be added when discovery is stopped or started. Discovery will still work on switches that default to forward unknown packets to the controller. The default value is 1.

-add_flows_on_connect

Determines whether the flows will be automatically added when the OpenFlow controller is started and the switches are connected. Possible values are 0 and 1. When it is set to 1, flows will be sent when the OpenFlow controller is started and switches are connected. The default value is 1.

-add_meters_on_connect

Determines whether the meters will be automatically added when the OpenFlow controller is started and the switches are connected. Possible values are 0 and 1. When it is set to 1, meters will be sent when the OpenFlow controller is started and switches are connected. The default value is 1.

-clear_flows_on_connect

Determines whether to clear all existing flows after connecting. Possible values are 0 and 1. When it is set to 1, Spirent HLTAPI will clear all existing flows after connecting. The default value is 1.

-clear_meters_on_connect

Determines whether to clear all existing meters after connecting. Possible values are 0 and 1. When it is set to 1, Spirent HLTAPI will clear all existing meters after connecting. The default value is 1.

-discovery_dstmacaddr

Specifies the destination MAC address used for LLDP discovery messages. The default value is 01:80:C2:00:00:0E.

-discovery_msg_interval

Number of seconds between consecutive LLDP discovery messages that are sent to the connected switches. This argument is only valid when LLDP discovery is running. Possible values range from 5 to 32768. The default value is 30.

-desired_role

Specified the desired role of the controller for all the switches that connect to it. You must set -send_role_connect to 1. Possible values are EQUAL, MASTER and SLAVE. The default value is EQUAL.

-desired_generation_id

Specifies the value of the Generation ID field in the Role Request message. Possible values range from 0 to 18446744073709551615. The default value is 0.

-openflow_version

Specifies the version of the OpenFlow specification to use for the test. Possible values are version_1_0 and version_1_3.

version_1_0 OpenFlow version 1.0

version_1_3 OpenFlow version 1.3

The default value is version_1_0.

-send_role_connect

Determines whether to send the desired role of the controller when a switch connects to this controller. Possible values are 0 and 1. The default value is 0.

-max_flow_rate

Specifies the maximum flow message rate limit in flows per second. The value must be a float. Possible values range from 0.0 to 65535.0. The default value is 0.0.

-tcp_port

Specifies the TCP port number used by the OpenFlow controller. Possible values range from 1 to 65535. The default value is 6633.

-flow_cmd_type

A list of commands that the flow block will support. Possible values are add, delete and modify. For each flow in the block, any combination of the three values is allowed. Use “|” to combine multiple types. For example, -flow_cmd_type “add|delete modify add|modify”.

-flow_block_type

Specifies the list of types for the flows in the block. Possible values are:

bound            Flows created from the specified bound streamblocks

flow_table_text  Flows created from flow table texts

custom           Custom flow blocks

The default value is bound.

-flow_switch_handle

Specifies a list of handles for the affiliated OpenFlow switches that are discovered after you run the sth::emulation_openflow_control function with -action start_discovery.

-flow_table_text

Specifies a list of flow table texts where each flow is defined by a line of text. This argument is only valid when -flow_block_type is set to flow_table_text. The default value is “”(empty string).

-match_fields

A list of specified fields to match against the packets for the flow. Fields can be combined to form sub-lists. Possible values are:

ingress_port         Ingress port
eth_src_mac          Ethernet source MAC
eth_dst_mac          Ethernet destination MAC
eth_type             Ethernet type
vlan_id              VLAN ID
vlan_priority        VLAN priority
ipv4_src_addr        IPv4 source address
ipv4_dst_addr        IPv4 destination address
ipv4_tos             IPv4 TOS
ipv4_protocol        IPv4 protocol
tcp_udp_src_port     TCP/UDP source port
tcp_udp_dst_port     TCP/UDP destination port
ipv6_src_addr        IPv6 source address
ipv6_dst_addr        IPv6 destination address
ipv6_flow_label      IPv6 flow label
ipv6_protocol        IPv6 next header protocol
ipv6_traffic_class   IPv6 traffic class

This example shows a configuration with a single list:

match_fields "{{ingress_port eth_type ipv4_src_addr ipv4_dst_addr}}"

When there are multiple sub-lists, the outer braces can be omitted. For example:

match_fields  "{ingress_port}{ipv4_dst_addr}
              {eth_type vlan_id vlan_priority} "

The default field is eth_dst_mac.

-custom_match_field

Specifies a list of fields to match against the packets for flow blocks of custom type. Possible values are:

  Field                          Description

arp_op:<integer>                 ARP Opcode
arp_sha:<mac_addr/mask>          ARP Source MAC
arp_spa:<addr/mask>              ARP Source
arp_tha:<mac_addr/mask>          ARP Destination MAC
arp_tpa:<addr/mask>              ARP Destination
dl_dst:<mac_addr/mask>           Ethernet Destination
dl_src:<mac_addr/mask>           Ethernet Source
dl_type:<hex>                    Ethernet Type
dl_vlan:<integer/hex>            VLAN ID
dl_vlan_pcp:<integer>            VLAN Priority
exp:<int/string/string/hex>      Experimenter
ext_hdr:<integer/hex>            IPV6 Ext Header
icmpv4_code:<integer>            ICMPv4 Code
icmpv4_type:<type>               ICMPv4 Type
icmpv6_code:<integer>            ICMPv6 Code
icmpv6_type:<type>               ICMPv6 Type
in_phy_port:<integer>            Physical port
in_port:<integer>                Ingress Port
ipv6_dst:<ipv6_addr/mask>        IPv6 Destination
ipv6_label:<integer/mask>        IPv6 Label
ipv6_src:<ipv6_addr/mask>        IPv6 Source
metadata:<integer/mask>          Metadata
mpls_bos:<integer>               MPLS BOS
mpls_label:<integer>             MPLS Label
mpls_tc:<integer>                MPLS Traffic Class
nd_sll:<mac_addr>                Nbr Solicit Source MAC
nd_target:<ipv6_addr>            Nbr Discovery Target IPV6
nd_tll:<mac_addr>                Nbr Advertisement Source Mac
nw_dst:<ipv4_addr/mask>          IPv4 Destination
nw_ecn:<integer>                 IPv4/IPv6 ECN
nw_proto:<protocol types>        IPv4/IPv6 Protocol
nw_src:<ipv4_addr/mask>          IPv4 Source
nw_tos:<integer>                 IPv4/IPv6 Tos
pbb_isid:<integer/mask>          PBB-ISID
sctp_dst:<integer>               SCTP Destination
sctp_src:<integer>               SCTP Source
tcp_dst:<integer>                TCP Destination
tcp_src:<integer>                TCP Source
tp_dst:<integer>                 TCP/UDP Destination
tp_src:<integer>                 TCP/UDP Destination
tun_id:<integer/mask>            Tunnel ID
udp_dst:<integer>                UDP Destination
udp_src:<integer>                UDP Source

The number of values in the list corresponds to the number of flow blocks to create. If the value is empty, use a dash (-) as the placeholder. For example:

-custom_match_field "{- - - {nw_src=35.35.35.2/255.255.225.222 \
                     dl_vlan_pcp=6} {arp_op=1 in_port=2}}"\"

The default field is eth_dst_mac.

-custom_action_field

Specifies a list of action fields for flow blocks of the custom type. Possible values are:

Field                           Description
{all}                           Output All
{controller:<integer>}          Controller
{copy_ttl_in}                   Copy TTL In
{copy_ttl_out}                  Copy TTL Out
{dec_mpls_ttl}                  Decrement MPLS TTL
{dec_ttl}                       Decrement IPv4/IPv6 TTL
{flood}                         Output Flood
{local}                         Output Local

{group:<integer>}               Group

                                Default:1


{in_port:<integer>}             Output In-Port

                                Default:100

{mod_dl_dst:<mac_addr>}         Modify Ethernet Destination

                                Default:00:00:01:00:00:01


{mod_dl_src:<mac_addr>}         Modify Ethernet Source

                                Default:00:00:01:00:00:01


{mod_icmpv6_code:<integer>}     Modify ICMPv6 Code

                                Default:0


{mod_icmpv6_type:<type>}        Modify ICMPv6 Type
                                Possible Values:
                                1       Destination Unreachable
                                2       Packet Too Big
                                3       Time Exceeded
                                4       Parameter Problem
                                128     Echo Request
                                129     Echo Reply
                                130     MLDv1 Query
                                131     MLDv1 Listener Report
                                132     MLDv1 Listener Done
                                133     Router Solicitation
                                134     Router Advertisement
                                135     Neighbor Solicitation
                                136     Neighbor Advertisement
                                137     Redirect
                                143     MLDv2 Listener Report

                                Default: 135


{mod_ipv6_dst:<ipv6_addr>}      Modify IPv6 Destination

                                Default: 2000::1:1


{mod_ipv6_label:<integer>}      Modify IPv6 Label

                                Default: 1


{mod_ipv6_src:<ipv6_addr>}      Modify IPv6 Source

                                Default: 2000::2:1


{mod_nd_sll:<mac_addr>}         Modify IPv6 ND Solicit Source

                                Default: 00:00:01:00:00:01


{mod_nd_target:<ipv6_addr>}     Modify IPv6 ND Target

                                Default: 2000::1:1


{mod_nd_tll:<mac_addr>}         Modify IPv6 Nbr Advertisement Source

                                Default: 00:00:01:00:00:01


{mod_nw_dst:<ipv4_addr>}        Modify IPv4 Destination

                                Default: 192.0.0.1


{mod_nw_src:<ipv4_addr>}        Modify IPv4 Source

                                Default: 192.0.0.1


{mod_nw_tos:<integer>}          Modify IPv4/IPv6 ToS/DSCP

                                Default: 0


{mod_sctp_dst:<integer>}        Modify SCTP Destination

                                Default: 100


{mod_sctp_src:<integer>}        Modify SCTP Source

                                Default: 100


{mod_tcp_dst:<integer>}         Modify TCP Destination

                                Default:100


{mod_tcp_src:<integer>}         Modify TCP Source

                                Default: 100


{mod_tun_id:<integer>}          Modify Tunnel ID

                                Default: 0


{mod_udp_dst:<integer>}         Modify UDP Destination

                                Default: 100


{mod_udp_src:<integer>}         Modify UDP Source

                                Default: 100


{mod_vlan_pcp:<integer>}        Modify VLAN Priority

                                Default: 0


{mod_vlan_vid:<integer>}        Modify VLAN ID

                                Default: 100


{normal}                        Output Normal

{pop_mpls:<ethernet_type>}      Pop MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 800


{pop_pbb}                       Pop PBB
{pop_vlan}                      Pop VLAN

{push_mpls:<ethernet_type>}     Push MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8847


{push_pbb:<ethernet_type>}      Push PBB
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 88E7


{push_vlan:<ethernet_type>}     Push VLAN
                                Value   Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8100


{set_mpls_bos:<integer>}        Set MPLS BoS

                                Default: 1


{set_mpls_label:<integer>}      Set MPLS Label

                                Default:10


{set_mpls_tc:<integer>}         Set MPLS TC

                                Default: 1


{set_mpls_ttl:<integer>}        Set MPLS TTL

                                Default: 1


{set_queue:<integer>}           Set Queue

                                Default: 1


drop                            Drop
enqueue:<integer/integer>       Enqueue
exp_action:<string/string>      Experimenter Action
goto_table:<integer>            Go-to Table
meter:<integer>                 Meter
mod_tp_dst:<integer>            TCP/UDP Destination
mod_tp_src:<integer>            TCP/UDP Source
output:<integer>                Output

set_field_experimenter:<field-integer/ID-string/Value-string>
                               Set Field Experimenter

set_field_experimenter_dec:<field-integer/ID-string/Decimal
                         Value-integer> Set Field Experimenter IP

set_field_experimenter_ip:<field-integer/ID-string/IP Address-integer>
                            Set Field Experimenter Decimal

The number of values in the list corresponds to the number of flow blocks to create. If the value is empty, use a dash (-) as the placeholder. For example:

-custom_action_field "{- - - {all} {group:2 all}}"
-custom_goto_table_field

Specifies a list of Go-to table fields to be inserted in flow blocks of the custom type. The value must be in the format of {goto_table=<integer>}.

-custom_metadata_field

Specifies a list of metadata fields to be inserted in flow blocks of the custom type. The value must be in the format of {write_metadata=<data:mask>}.

-custom_clear_action_field

Specifies a list of clear action fields to be inserted in flow blocks of the custom type. The value must be in the format of {clear_actions}.

-custom_meter_field

Specifies a list of meter fields to be inserted in flow blocks of the custom type. The value must be in the format of {meter=<integer>}.

-custom_exp_field

Specifies a list of experimenter instruction fields to be inserted in flow blocks of the custom type. The value must be in the format of {exp_instruction=<data:id>}.

-custom_write_action_field

Specifies a list of write action fields to be inserted in flow blocks of the custom type. The available fields and formats are described below:

Field/Format                     Description
{all}                           Output All
{controller:<integer>}          Controller
{copy_ttl_in}                   Copy TTL In
{copy_ttl_out}                  Copy TTL Out
{dec_mpls_ttl}                  Decrement MPLS TTL
{dec_ttl}                       Decrement IPv4/IPv6 TTL
{flood}                         Output Flood
{local}                         Output Local

{group:<integer>}               Group

                                Default:1


{in_port:<integer>}             Output In-Port

                                Default:100

{mod_dl_dst:<mac_addr>}         Modify Ethernet Destination

                                Default:00:00:01:00:00:01


{mod_dl_src:<mac_addr>}         Modify Ethernet Source

                                Default:00:00:01:00:00:01


{mod_icmpv6_code:<integer>}     Modify ICMPv6 Code

                                Default:0


{mod_icmpv6_type:<type>}        Modify ICMPv6 Type
                                Possible Values:
                                1       Destination Unreachable
                                2       Packet Too Big
                                3       Time Exceeded
                                4       Parameter Problem
                                128     Echo Request
                                129     Echo Reply
                                130     MLDv1 Query
                                131     MLDv1 Listener Report
                                132     MLDv1 Listener Done
                                133     Router Solicitation
                                134     Router Advertisement
                                135     Neighbor Solicitation
                                136     Neighbor Advertisement
                                137     Redirect
                                143     MLDv2 Listener Report

                                Default: 135


{mod_ipv6_dst:<ipv6_addr>}      Modify IPv6 Destination

                                Default: 2000::1:1


{mod_ipv6_label:<integer>}      Modify IPv6 Label

                                Default: 1


{mod_ipv6_src:<ipv6_addr>}      Modify IPv6 Source

                                Default: 2000::2:1


{mod_nd_sll:<mac_addr>}         Modify IPv6 ND Solicit Source

                                Default: 00:00:01:00:00:01


{mod_nd_target:<ipv6_addr>}     Modify IPv6 ND Target

                                Default: 2000::1:1


{mod_nd_tll:<mac_addr>}         Modify IPv6 Nbr Advertisement Source

                                Default: 00:00:01:00:00:01


{mod_nw_dst:<ipv4_addr>}        Modify IPv4 Destination

                                Default: 192.0.0.1


{mod_nw_src:<ipv4_addr>}        Modify IPv4 Source

                                Default: 192.0.0.1


{mod_nw_tos:<integer>}          Modify IPv4/IPv6 ToS/DSCP

                                Default: 0


{mod_sctp_dst:<integer>}        Modify SCTP Destination

                                Default: 100


{mod_sctp_src:<integer>}        Modify SCTP Source

                                Default: 100


{mod_tcp_dst:<integer>}         Modify TCP Destination

                                Default:100


{mod_tcp_src:<integer>}         Modify TCP Source

                                Default: 100


{mod_tun_id:<integer>}          Modify Tunnel ID

                                Default: 0


{mod_udp_dst:<integer>}         Modify UDP Destination

                                Default: 100


{mod_udp_src:<integer>}         Modify UDP Source

                                Default: 100


{mod_vlan_pcp:<integer>}        Modify VLAN Priority

                                Default: 0


{mod_vlan_vid:<integer>}        Modify VLAN ID

                                Default: 100


{normal}                        Output Normal

{pop_mpls:<ethernet_type>}      Pop MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 800


{pop_pbb}                       Pop PBB
{pop_vlan}                      Pop VLAN

{push_mpls:<ethernet_type>}     Push MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8847


{push_pbb:<ethernet_type>}      Push PBB
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 88E7


{push_vlan:<ethernet_type>}     Push VLAN
                                Value   Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8100


{set_mpls_bos:<integer>}        Set MPLS BoS

                                Default: 1


{set_mpls_label:<integer>}      Set MPLS Label

                                Default:10


{set_mpls_tc:<integer>}         Set MPLS TC

                                Default: 1


{set_mpls_ttl:<integer>}        Set MPLS TTL

                                Default: 1


{set_queue:<integer>}           Set Queue

                                Default: 1


drop                            Drop
enqueue:<integer/integer>       Enqueue
exp_action:<string/string>      Experimenter Action
goto_table:<integer>            Go-to Table
meter:<integer>                 Meter
mod_tp_dst:<integer>            TCP/UDP Destination
mod_tp_src:<integer>            TCP/UDP Source
-hard_timeout

Number of seconds after which an entry should be removed regardless of any activity. Possible values range from 0 to 65535. The default value is 0.

-idle_timeout

Number of seconds after which an entry should be removed due to a lack of activity. Possible values range from 0 to 65535. The default value is 0.

-transport_type

Specifies the transport type used for multiple switch configurations. Possible values are:

flow_forward      Forward packets unchanged

modify_vlanid     Add/remove a transport VLAN for multiple switch
                  configurations

The default value is flow_forward.

-first_vlan_id

Specifies the ID of the first VLAN used for transport flows. Possible values range from 0 to 4095. The default value is 0.

-action_type

Specifies the flow action to take. Possible values are:

forward_to_port      Forward packets that match the flow definitions

drop                 Drop packets that match the flow definitions

The default value is forward_to_port.

-modify_dst_device

A list of fields in the packets to modify to match the destination device. Possible values are:

eth_mac    Modify the MAC destination to match the destination device

vlan_id     Modify the VLAN ID to match the destination device

ipv4_addr   Modify the IPv4 destination address to match the
            destination device

ipv6_addr   Modify the IPv6 destination address to match the
            destination device

The default value is ipv4_addr.

-stream_ids

Specifies the streamblock IDs for the flow block

Note

The configuration list of the flow-specific arguments above must be of the same length. If the value is empty, use a dash (-) as the placeholder. Values are separated by spaces (” “). For example:

-switch_link_list      "$hltSrcPort-dpid0/3 dpid0/2-dpid1/6 dpid1/4-dpid0/5" \
-flow_cmd_type         "add|delete modify add|modify add|modify add|delete" \
-flow_block_type       "flow_table_text bound bound custom custom" \
-flow_table_text       "aaabbbccc - - - -" \
-flow_switch_handle    "dpid0 - - dpid0 dpid0" \
-match_fields          "{INGRESS_PORT ETH_TYPE IPV4_SRC_ADDR IPV4_DST_ADDR}\
                       {IPV4_DST_ADDR} {ETH_TYPE VLAN_ID VLAN_PRIORITY}" \
-custom_match_field     "{- - - {nw_src=35.35.35.2/255.255.225.222 dl_vlan_pcp=6}\
                       {arp_op=1 in_port=2}}"\
-custom_action_field     "{- - - {all} {group:2 all}}"\
-meter_id

Specifies the meter ID. Possible values range from 0 to 4294967295. The default value is 1.

-enable_burst_size

Enables/disables burst size. Possible values are 0 (disable) and 1 (enable). The default value is 0.

-rate_type

Type of rate for the meter block. Possible values are:

pktps      Rate value in packet/sec
kbps    Rate value in kb/sec

The default value is pktps.

-meter_switch_handle

The handle for the affiliated OpenFlow switch that is discovered after you run the sth::emulation_openflow_control function with action start_discovery.

-band_type

Defines how packets are processed for each meter. Possible values are:

dscp_remark      Increase the drop precedence of the DSCP field
                 in the IP header of the packet

experimenter     Pass through the value specified by -experimenter

drop             Drop the packet

The default value is drop.

-burst_size

Size of the burst based on the units set by -rate_type. The default value is 0.

-rate

Lowest rate at which the band applies using the unit set by -rate_type. The default value is 0.

-experimenter

Specifies the value for the experimenter field. This argument is only valid when -band_type is set to experimenter. The default value is 0.

-precedence_level

Specifies the amount by which to drop the precedence level. This argument is only valid when -band_type is set to dscp_remark. Possible values range from 0 to 255. The default value is 0.

Note

The configuration list of the meter-specific arguments above must be of the same length. If the value is empty, use a dash (-) as the placeholder. Values are separated by spaces (” “). For example:

-band_type          "{dscp_remark experimenter drop}"\
-rate               "{70 55 20}" \
-experimenter       "{- - 1}" \
-precedence_level   "{- 3 -}" \
-burst_size         "{15 20 80}"

OpenFlow Device Configuration Arguments

-add_group_entries_on_connect

Once enabled, the group entries will be automatically added when the OpenFlow controller is started and the switches are connected. Possible values are true (1) and false (0). The default value is true.

-clear_existing_group_entries_on_connect

Once enabled, the group entries will be automatically cleared when the OpenFlow controller is started and the switches are connected. Possible values are true (1) and false (0). The default value is true.

-controller_certificate

Specifies the file containing the public key certificate of the controller

-controller_private_key

Specifies the Privacy Enhanced Mail (PEM) file containing the private key file of the controller

-dynamic_load

Specifies the dynamic load value. Possible values range from 1 to 1000000. The default value is 30.

-enable_reactive_mode

Enables or disables the reactive mode. Possible values are true (1) and false (0). The default value is false.

-endpoint_connection_pattern

Specifies the endpoint connection pattern. Possible values are:

pair                       Paired connection
backbone_src_first         Backbone source connection first
backbone_dst_first            Backbone destination connection first
backbone_interleaved       Backbone interleaved connection

The default value is pair.

-send_set_async_on_connect

Determines whether to send the Set Async message on connection. Set it to true to send the Set Async message on connection. Possible values are true (1) and false (0). The default value is false.

-switch_ca_certificates

Specifies the PEM files to authenticate the switch

Flow Block Configurations

Specifies the cookie value relating to the flow block to match. The default value is 0.

Specifies the cookie mask value to match. The default value is 0.

-flags

Specifies the flag value to match. The default value is 1.

-strict_match

Determines whether to enforce strict matching for the FlowMod modify and delete messages. Possible values are true (1) and false (0). When it is set to true, Spirent HLTAPI will send the FlowMod modify and delete messages in a strict manner. The default value is true.

Async Message Configurations

-flow_removed_mask_master_equal

Specifies the flow removed mask for the controller role of master or equal, in HEX format. The default value is 0xF.

-flow_removed_mask_slave

Specifies the flow removed mask for controller role of slave, in HEX format. The default value is 0.

-packet_in_mask_master_equal

Specifies the packet-in mask for controller role of master or equal, in HEX format. The default value is 3.

-packet_in_mask_slave

Specifies the packet-in mask for controller role of slave, in HEX format. The default value is 0.

-port_status_mask_master_equal

Specifies the port mask for controller role of master or equal, in HEX format. The default value is 7.

-port_status_mask_slave

Specifies the port mask for controller role of slave, in HEX format. The default value is 7.

Group Entries/Action Configurations

-group_id

Specifies the unique identifier for the group. The default value is 1.

-group_type

Specifies the group type. Possible values are:

all          Execute all action buckets in the group. The packet
             is effectively cloned for each bucket; one packet is
             processed for each bucket of the group.

indirect     Execute the one action bucket in the group. This
             group type is effectively identical to an All group
             with one bucket.

select       Execute one bucket in the group that is selected based
             on a switch-computed selection algorithm.

fast_failover   Execute the first action bucket that is associated
                with a live port.

The default value is all.

-watch_group

Specifies the group to check to for liveness to determine whether the bucket is a candidate for forwarding. The value must be in HEX format. The default value is 0xFFFFFFFF.

-watch_port

Specifies the port to check to for liveness to determine whether the bucket is a candidate for forwarding. The value must be in HEX format. The default value is 0xFFFFFFFF.

-weight

Specifies the relative weight of the bucket. The default value is 0.

-controller_max_length

Specifies the length of the packet to be sent to the controller. You must set -group_action_type to controller. The default value is 65535.

-decrement_ttl_type

Specifies the type of the TTL to decrement. You must set -group_action_type to decrement_ttl. Possible values are:

decrement_mpls_ttl      Decrement MPLS TTL
decrement_ip_ttl        Decrement IP TTL

The default value is decrement_ip_ttl.

-group_action_type

Specifies the group action type. Each action type has its own set of available options. Possible values are:

copy_ttl_inwards        Copy TTL inwards
pop                     Pop Tag
push_mpls               Push MPLS
push_pbb                Push PBB
push_vlan               Push VLAN
copy_ttl_outwards       Copy TTL outwards
decrement_ttl           Decrement TTL
set                     Set fields
qos                     QoS
group                   Output group ID
output                  Output port

Use “|” to specify multiple actions. The default value is output.

-output_group_id

Specifies the output group ID. You must set -group_action_type to group. The default value is 1.

-output_port_action_type

Specifies the action type of the output port. You must set -group_action_type to output. Possible values are:

port_num        Output port number
all             Output to all standard ports except In ports
controller      Output to the controller
table           Output to the first table
in_port         Output on the in port
any             Output on any port
local           Output on the local OpenFlow port
normal          Forward using a non-Openflow pipeline
flood           Flood using a non-OpenFlow pipeline

The default value is port_num.

-output_port_number

Specifies the output port where the packets will be sent. You must set -group_action_type to port_num. The default value is 1.

-pop_tag

Specifies the Pop tag action type. You must set -group_action_type to pop. Possible values are:

pop_mpls_header    MPLS tag push action
pop_pbb_header     Provider Backbone Bridge (PBB) tag push action
pop_vlan_header    VLAN tag push action

The default value is pop_vlan_header.

-pop_mpls_tag_data_ethertype

Sets the Ethertype value for the Pop MPLS header action. You must set -group_action_type to pop_mpls_header. The default value is 0x8847.

-push_mpls_tag_data_ethertype

Sets the Ethertype value for the Push MPLS header action. You must set -group_action_type to push_mpls. The default value is 0x8847.

-push_pbb_tag_data_ethertype

Sets the Ethertype value for the Push PBB header action. You must set -group_action_type to push_pbb. The default value is 0x88e7.

-push_vlan_tag_data_ethertype

Sets the Ethertype value for the Push VLAN header action. You must set -group_action_type to push_vlan. The default value is 0x8100.

The following Set-Action fields are identified by their field type and modify the values of respective header fields in the packet. You must set -group_action_type to set.

-set_queue_id

Sets the queue ID for the QoS Set-Action field. You must set -group_action_type to qos. The default value is 1.

-set_ipv4_fields

Specifies the IPv4 Set-Action fields. You must specify the field to set the corresponding value. Possible values are:

ip_dscp         Set IP DSCP (6 bits in the ToS field)
ip_ecn          Set IP ECN (2 bits in the ToS field)
ip_proto        Set IP Protocol
ipv4_src        Set IPv4 source address
ipv4_dst        Set IPv4 destination address
tcp_src         Set TCP source address
tcp_dst         Set TCP destination address
udp_src         Set UDP source port
udp_dst         Set UDP destination port
sctp_src        Set SCTP source port
sctp_dst        Set SCTP destination port
icmpv4_type     Set ICMPv4 type
icmpv4_code     Set ICMPv4 code
0               None specified

Use “|” to specify multiple fields. The default value is 0.

-set_icmpv4_code

Sets the ICMPv4 code. The default value is 0.

-set_icmpv4_type

Sets the ICMPv4 type. The default value is 0.

-set_ip_dscp

Sets the IP DSCP value. The default value is 0.

-set_ip_ecn

Sets the IP ECN value. The default value is 0.

-set_ip_proto

Sets the IP protocol value. The default value is 6.

-set_ipv4_dst

Sets the IPv4 destination address. The default value is 10.0.0.2.

-set_ipv4_src

Sets the IPv4 source address. The default value is 10.0.0.1.

-set_sctp_dst

Sets the Stream Control Transmission Protocol (SCTP) destination port. The default value is 100.

-set_sctp_src

Sets the SCTP source port. The default value is 100.

-set_tcp_dst

Sets the TCP destination port. The default value is 0000.

-set_tcp_src

Sets the TCP source port. The default value is 0000.

-set_udp_dst

Sets the UDP destination port. The default value is 0000.

-set_udp_src

Sets the UDP source port. The default value is 0000.

-set_ipv6_fields

Specifies the IPv6 Set-Action fields. You must specify the field here to set the corresponding value. Possible values are:

icmpv6_type             Set ICMPv6 type
icmpv6_code             Set ICMPv6 code
ipv6_src                Set IPv6 source address
ipv6_dst                Set IPv6 destination address
ipv6_flabel             Set IPv6 flow label
ipv6_nd_target          Set target address for Neighbor Discovery (ND)
ipv6_nd_sll             Set source link-layer for ND
ipv6_nd_tll             Set target link-layer for ND
0                       None specified

Use “|” to specify multiple fields. The default value is 0.

-set_icmpv6_code

Sets the ICMPv6 code. The default value is 0.

-set_icmpv6_type

Sets the ICMPv6 Type. The default value is 0.

-set_ipv6_dst

Sets the IPv6 destination address. The default value is 2000::1.

-set_ipv6_flabel

Sets the IPv6 flow label. The default value is 0.

-set_ipv6_nd_sll

Sets the IPv6 source link-layer interface address for ND, in MAC format. The default value is 00:00:01:00:00:01.

-set_ipv6_nd_target

Sets the IPv6 target address for ND. The default value is 2000::1.

-set_ipv6_nd_tll

Sets the IPv6 target link-layer interface for ND, in MAC format. The default value is 00:00:01:00:00:01.

-set_ipv6_src

Sets the IPv6 source address. The default value is 2000::10.

-set_l2_fields

Specifies the Layer 2 Set-Action fields. You must specify the field here to set the corresponding value. Possible values are:

arp_op      Set ARP Opcode
arp_spa     Set ARP source IPv4 address
arp_tpa     Set ARP destination IPv4 address
arp_sha     Set ARP source hardware address
arp_tha     Set ARP destination hardware address
eth_dst     Set Ethernet destination
eth_src     Set Ethernet source
eth_type    Set Ethernet type
mpls_label  Set MPLS label
mpls_tc     Set MPLS TC
mpls_bos    Set MPLS Bottom-of-Stack (BoS) bit
pbb_isid    Set PBB I-SID
tunnel_id   Set Tunnel ID
vlan_vid    Set VLAN ID
vlan_pcp    Set VLAN priority
 0          None specified

Use “|” to specify multiple fields. The default value is 0.

-set_arp_dst_hw_addr

Sets the ARP destination hardware address. The default value is 00:10:01:00:00:01.

-set_arp_dst_ipv4_addr

Sets the ARP destination IPv4 address. The default value is 20.0.0.1.

-set_arp_opcode

Sets the ARP operation code (Opcode). The default value is 0.

-set_arp_src_hw_addr

Sets the ARP source hardware address, in MAC format. The default value is 00:20:01:00:00:01.

-set_arp_src_ipv4_addr

Sets the ARP source IPv4 address. The default value is 10.0.0.1.

-set_eth_dst

Sets the Ethernet destination address, in MAC format. The default value is 00:10:01:00:00:01.

-set_eth_src

Sets the Ethernet source address, in MAC format. The default value is 00:20:01:00:00:01.

-set_eth_type

Sets the Ethernet type. The default value is 0x8100.

-set_mpls_bos_bit

Sets the MPLS BoS bit. Possible values are true (1) and false (0). The default value is false.

-set_mpls_label

Sets the MPLS label. The default value is 0x8100.

-set_mpls_tc

Sets the MPLS TC value. The default value is 0.

-set_pbb_isid

Sets the PBB Instantialized Service ID (I-SID). The default value is 0.

-set_tunnel_id

Sets the tunnel ID. The default value is 0.

-set_vlan_id

Sets the VLAN ID. The default value is 100.

-set_vlan_priority

Sets the VLAN priority. The default value is 0.

Reactive Mode Configurations

-rm_match_field

Configures a list of actions to be performed on the filtered traffic. You must set -enable_reactive_mode to true. The following fields are supported:

{dl_dst=<mac/mask>}             Ethernet Destination

                                Default: 00:00:02:00:00:01

{dl_src=<mac/mask>}             Ethernet source

                                Default: 00:00:01:00:00:01

{dl_type=<hex>}                 Ethernet type
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 800

{dl_vlan=<id/mask>}             VLAN ID

                                Default: 800

{dl_vlan_pcp=<priority>}        VLAN priority

                                Default: 1

{in_port=<port_number>}         Ingress port

                                Default: 1

{nw_dst=<ipv4/mask>}            IPv4 destination

                                Default: 192.0.0.1

{nw_ecn=<int>}                  IPv4/IPv6 ECN

                                Default: 0

{nw_proto=<hex>}                IPv4/IPv6 protocol
                                Value  Description
                                0     HOPOPT
                                1     ICMP
                                2     IGMP
                                3     GGP
                                4     IP
                                5     ST
                                6     TCP
                                7     CBT
                                8     EGP
                                9     IGP
                                10    BBN-RCC-MON
                                11    NVP-II
                                12    PUP
                                13    ARGUS
                                14    EMCON
                                15    XNET
                                16    CHAOS
                                17    UDP
                                18    MUX
                                19    DCN-MEAS
                                20    HMP
                                21    PRM
                                22    XNS-IDP
                                23    TRUNK-1
                                24    TRUNK-2
                                25    LEAF-1
                                26    LEAF-2
                                27    RDP
                                28    IRTP
                                29    ISO-TP4
                                30    NETBLT
                                31    MFE-NSP
                                32    MERIT-INP
                                33    SEP
                                34    3PC
                                35    IDPR
                                36    XTP
                                37    DDP
                                38    IDPR-CMTP
                                39    TP++
                                40    IL
                                41    IPv6
                                42    SDRP
                                43    IPv6-Route
                                44    IPv6-Frag
                                45    IDRP
                                46    RSVP
                                47    GRE
                                48    MHRP
                                49    BNA
                                50    ESP
                                51    AH
                                52    I-NLSP
                                53    SWIPE
                                54    NARP
                                55    MOBILE
                                56    TLSP
                                57    SKIP
                                58    IPv6-ICMP
                                59    IPv6-NoNxt
                                60    IPv6-Opts
                                62    CFTP
                                64    SAT-EXPAK
                                65    KRYPTOLAN
                                66    RVD
                                67    IPPC
                                69    SAT-MON
                                70    VISA
                                71    IPCV
                                72    CPNX
                                73    CPHB
                                74    WSN
                                75    PVP
                                76    BR-SAT-MON
                                77    SUN-ND
                                78    WB-MON
                                79    WB-EXPAK
                                80    ISO-IP
                                81    VMTP
                                82    SECURE-VMTP
                                83    VINES
                                84    TTP
                                85    NSFNET-IGP
                                86    DGP
                                87    TCF
                                88    EIGRP
                                89    OSPFIGP
                                90    Sprite-RPC
                                91    LARP
                                92    MTP
                                93    AX.25
                                94    IPIP
                                95    MICP
                                96    SCC-SP
                                97    ETHERIP
                                98    ENCAP
                                100    GMTP
                                101    IFMP
                                102    PNNI
                                103    PIM
                                104    ARIS
                                105    SCPS
                                106    QNX
                                107    A/N
                                108    IPComp
                                109    SNP
                                110    Compaq-Peer
                                111    IPX-in-IP
                                112    VRRP
                                113    PGM
                                115    L2TP
                                116    DDX
                                117    IATP
                                118    STP
                                119    SRP
                                120    UTI
                                121    SMP
                                122    SM
                                123    PTP
                                124    ISIS over IPv4
                                125    FIRE
                                126    CRTP
                                127    CRUDP
                                128    SSCOPMCE
                                129    IPLT
                                130    SPS
                                131    PIPE
                                132    SCTP
                                133    FC
                                134    RSVP-E2E-IGNORE
                                135    Mobility Header
                                136    UDPLite
                                137    MPLS-in-IP
                                253    Experimental
                                255    Reserved

                                Default: 4

{nw_src=<ipv4/mask>}            IPv4 source

                                Default: 192.0.0.1

{nw_tos=<int>}                  IPv4/IPv6 ToS

                                Default: 0

Refer to examples for the sample usage.

-rm_action_field

Configures one or more matching fields for filtering traffic. You must set -enable_reactive_mode to true. The following fields are supported:

Field                           Description

{all}                           Output All
{controller:<integer>}          Controller
{copy_ttl_in}                   Copy TTL In
{copy_ttl_out}                  Copy TTL Out
{dec_mpls_ttl}                  Decrement MPLS TTL
{dec_ttl}                       Decrement IPv4/IPv6 TTL
{flood}                         Output Flood
{local}                         Output Local
{group:<integer>}               Group

                                Default:1

{in_port:<integer>}             Output In-Port

                                Default:100

{mod_dl_dst:<mac_addr>}         Modify Ethernet destination

                                Default:00:00:01:00:00:01

{mod_dl_src:<mac_addr>}         Modify Ethernet source

                                Default:00:00:01:00:00:01

{mod_icmpv6_code:<integer>}     Modify ICMPv6 code

                                Default:0

{mod_icmpv6_type:<type>}        Modify ICMPv6 type
                                Possible Values::
                                1       Destination Unreachable
                                2       Packet Too Big
                                3       Time Exceeded
                                4       Parameter Problem
                                128     Echo Request
                                129     Echo Reply
                                130     MLDv1 Query
                                131     MLDv1 Listener Report
                                132     MLDv1 Listener Done
                                133     Router Solicitation
                                134     Router Advertisement
                                135     Neighbor Solicitation
                                136    Neighbor Advertisement
                                137     Redirect
                                143     MLDv2 Listener Report

                                Default: 135

{mod_ipv6_dst:<ipv6_addr>}      Modify IPv6 destination

                                Default: 2000::1:1


{mod_ipv6_label:<integer>}      Modify IPv6 label

                                Default: 1


{mod_ipv6_src:<ipv6_addr>}      Modify IPv6 source

                                Default: 2000::2:1


{mod_nd_sll:<mac_addr>}         Modify IPv6 ND solicit source

                                Default: 00:00:01:00:00:01


{mod_nd_target:<ipv6_addr>}     Modify IPv6 ND target

                                Default: 2000::1:1


{mod_nd_tll:<mac_addr>}         Modify IPv6 Nbr advertisement source

                                Default: 00:00:01:00:00:01


{mod_nw_dst:<ipv4_addr>}        Modify IPv4 destination

                                Default: 192.0.0.1


{mod_nw_src:<ipv4_addr>}        Modify IPv4 source

                                Default: 192.0.0.1


{mod_nw_tos:<integer>}          Modify IPv4/IPv6 ToS/DSCP

                                Default: 0


{mod_sctp_dst:<integer>}        Modify SCTP destination

                                Default: 100


{mod_sctp_src:<integer>}        Modify SCTP source

                                Default: 100


{mod_tcp_dst:<integer>}         Modify TCP destination

                                Default:100


{mod_tcp_src:<integer>}         Modify TCP source

                                Default: 100


{mod_tun_id:<integer>}          Modify Tunnel ID

                                Default: 0


{mod_udp_dst:<integer>}         Modify UDP destination

                                Default: 100


{mod_udp_src:<integer>}         Modify UDP source

                                Default: 100


{mod_vlan_pcp:<integer>}        Modify Vlan priority

                                Default: 0


{mod_vlan_vid:<integer>}        Modify VLAN ID

                                Default: 100


{normal}                        Output Normal
{pop_mpls:<ethernet_type>}      Pop MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 800


{pop_pbb}                       Pop PBB
{pop_vlan}                      Pop VLAN
{push_mpls:<ethernet_type>}     Push MPLS
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8847

{push_pbb:<ethernet_type>}      Push PBB
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 88E7

{push_vlan:<ethernet_type>}     Push Vlan
                                Value    Description
                                0200    XEROX PUP
                                0201    PUP Addr Trans
                                0400    Nixdorf
                                0600    XEROX NS IDP
                                0660    DLOG
                                0661    DLOG2
                                0800    Internet IP
                                0801    X.75 Internet
                                0802    NBS Internet
                                0803    ECMA Internet
                                0804    Chaosnet
                                0805    X.25 Level 3
                                0806    ARP
                                0807    XNS Compatibility
                                0808    Frame Relay ARP
                                8035    RARP
                                86DD    IPv6
                                880B    PPP
                                8809    Slow Protocol
                                8847    MPLS Unicast
                                8848    MPLS Multicast
                                8863    PPPoE Discovery
                                8864    PPPoE Session
                                88E7    PBB
                                8906    FCoE
                                8914    FIP

                                Default: 8100

{set_mpls_bos:<integer>}        Set MPLS BoS

                                Default: 1

{set_mpls_label:<integer>}      Set MPLS Label

                                Default:10

{set_mpls_tc:<integer>}         Set MPLS TC

                                Default: 1

{set_mpls_ttl:<integer>}        Set MPLS TTL

                                Default: 1

{set_queue:<integer>}           Set Queue

                                Default: 1


{output:<integer>}    Output port

Refer to examples for the sample usage.

-rm_switch_handle_list

Specifies a list of handles for the affiliated OpenFlow switches, which are discovered after you run the sth::emulation_openflow_control function with -action start_discovery.

Arguments Unsupported by Save as HLTAPI

The sth:: emulation_openflow_config function is currently not supported by Save to HLTAPI. To test with this function, you must configure it manually in the generated Spirent HLTAPI scripts.

Description

The sth::emulation_openflow_config function configures emulated OpenFlow controller, and modifies or adds flows and meters. Use the -mode argument to specify the actions to perform. (See the -mode argument description for information about the actions.)

When you configure an OpenFlow controller, use the sth::emulation_device_config function to create an emulated device, on which you enable the OpenFlow controller with -mode enable of the current function.

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handle          The OpenFlow host/device/flow/meter handle
                returned from the function

group_entry_handles          Group entry handles

action_bucket_handles        Action bucket handles

rm_handle                   Reactive mode handles

status                      Success (1) or failure (0) of the operation

log                         An error message (if the operation failed)

Examples

To configure an OpenFlow controller:

set device_port4 [::sth::emulation_device_config\
     -port_handle       $port1\
     -mode              create\
     -count             1\
     -router_id         192.0.0.1\
     -mac_addr          00:10:94:00:00:01 \
     -intf_prefix_len   24 \
     -intf_ip_addr      192.85.1.3 \
     -gateway_ip_addr   192.85.1.1 \
   ]
set dev_handle [keylget device_port4 handle]

set device_ret11 [::sth::emulation_openflow_config \
     -mode                                    enable \
     -handle                                  $dev_handle\
     -openflow_version                        VERSION_1_3 \
     -discovery_dstmacaddr                   "01:80:C2:00:00:0E" \
     -barrier_request_timeout                10000\
     -connection_type                        passive_Tcp \
     -add_group_entries_on_connect           false\
     -clear_existing_group_entries_on_connect     false\
     -controller_certificate                 "cert_sample.pem"\
     -controller_private_key                 "privkey_sample.pem"\
     -dynamic_load                           35\
     -enable_reactive_mode                   true\
     -endpoint_connection_pattern            backbone_src_first\
     -send_set_async_on_connect              1\
     -switch_ca_certificates                 "cacert_sample.pem"\
     -switch_dpid                            "0x7F88E760000 0x4"\
     -switch_link_list                       "port1-dpid0/1"\
     -flow_removed_mask_master_equal         "0xF"\
     -flow_removed_mask_slave                "0x1"\
     -packet_in_mask_master_equal            "0x2"\
     -packet_in_mask_slave                   "0x3"\
     -port_status_mask_master_equal          "0x4"\
     -port_status_mask_slave                 "0xA"\
  ]

Sample Output:

{handle openflowcontrollerprotocolconfig1} {switch_handles
{openflowswitchconfig1 openflowswitchconfig2}} {status 1}

To configure bound flows:

set device_ret11 [::sth::emulation_openflow_config \
        -mode               add  \
        -handle             $dev_handle\
        -flow_cmd_type      "add|delete|modify" \
        -flow_block_type    bound \
        -stream_ids          $stream_handle2 \
        -match_fields       "{{ingress_port eth_type ipv4_src_addr ipv4_dst_addr}}" \
        -transport_type     flow_forward \
        -flow_switch_handle  $of_switch_handle\
        -action_type        forward_to_port\
     ]

Sample Output:

{flow_handles openflowflowblock1} {status 1}

To modify bound flows:

set flow_handle1 [keylget device_ret11 flow_handles]
set device_ret11 [::sth::emulation_openflow_config \
       -mode                   modify \
       -handle                 $flow_handle1\
       -flow_switch_handle     $of_switch_handle\
       -action_type            drop\
    ]

Sample Output:

{flow_handles openflowflowblock1} {status 1}

To configure a meter block:

set device_ret12 [::sth::emulation_openflow_config \
       -mode                   add \
       -handle                 $dev_handle\
       -meter_id               2 \
       -meter_switch_handle    $of_switch_handle\
       -enable_burst_size      TRUE \
       -rate_type              kbps \
       -band_type              "{drop dscp_remark experimenter}"\
       -rate                   "{100 50 10}" \
       -experimenter           "{- - 2}" \
       -precedence_level       "{- 6 -}" \
       -burst_size             "{1 10 10}"
    ]

Sample Output:

{meter_handles openflowmeterconfig1} {status 1}

To modify the specified meter block:

set meter_handle2 [keylget device_ret12 meter_handles]
set device_ret12 [::sth::emulation_openflow_config \
              -mode             modify \
              -handle           $meter_handle\
              -meter_id          3 \
              -meter_switch_handle $of_switch_handle \
              -band_type        "{dscp_remark experimenter drop}"\
              -rate             "{70 55 20}" \
              -experimenter     "{- - 1}" \
              -precedence_level "{- 3 -}" \
              -burst_size       "{15 20 80}"]

Sample Output:

{meter_handles openflowmeterconfig1} {status 1}

To configure group entries:

set device_ret11 [::sth::emulation_openflow_config \
    -mode                     add \
    -handle                $dev_handle\
    -group_id              "8 9 10"\
    -group_type            "indirect select fast_failover"\
    -group_switch_handle  $switch_handle \
 ]

Sample Output:

{group_entry_handles {openflowgroupentryconfig1 openflowgroupentryconfig2
openflowgroupentryconfig3}} {status 1}

To configure group entries action buckets:

 set device_ret12 [::sth::emulation_openflow_config \
    -mode                             add \
    -handle                          $group_entry_handle\
    -watch_group                     "0xFFFF0000"\
    -watch_port                      "0x0000FFFF"\
    -weight                          "5"\
    -controller_max_length          200\
    -decrement_ttl_type             "decrement_ip_ttl|decrement_mpls_ttl"\
    -group_action_type              "pop|push_mpls|push_pbb|push_vlan" \
    -output_group_id                2\
    -output_port_action_type        all\
    -output_port_number             67\
    -pop_mpls_tag_data_ethertype    0x8847\
    -pop_tag                        "pop_mpls_header|pop_pbb_header"\
    -push_mpls_tag_data_ethertype   0x8847\
    -push_pbb_tag_data_ethertype    0x88e7\
    -push_vlan_tag_data_ethertype   0x8100\
    -set_arp_dst_hw_addr            "00:10:01:01:01:01"\
    -set_arp_dst_ipv4_addr          "10.10.10.10"\
    -set_arp_opcode                 20\
    -set_arp_src_hw_addr            "00:10:01:01:11:11"\
    -set_arp_src_ipv4_addr          "2.2.2.2"\
    -set_eth_dst                    "10:10:01:01:01:01"\
    -set_eth_src                    "20:10:01:01:01:01"\
    -set_eth_type                   "0x8100"\
    -set_icmpv4_code                3\
    -set_icmpv4_type                4\
    -set_icmpv6_code                5\
    -set_icmpv6_type                6\
    -set_ip_dscp                    7\
    -set_ip_ecn                     8\
    -set_ip_proto                   9\
    -set_ipv4_dst                   "1.1.1.1"\
    -set_ipv4_fields                "ip_dscp|udp_src|udp_dst"\
    -set_ipv4_src                   4.4.4.4\
    -set_ipv6_dst                   "2002::1"\
    -set_ipv6_fields                "ipv6_src|ipv6_dst|"\
    -set_ipv6_flabel                34\
    -set_ipv6_nd_sll                "20:10:01:01:01:01"\
    -set_ipv6_nd_target             "2002::2"\
    -set_ipv6_nd_tll                "30:10:01:01:01:01"\
    -set_ipv6_src                   "2002::3"\
    -set_l2_fields                  "eth_dst|eth_src|eth_type"\
    -set_mpls_bos_bit               true\
    -set_mpls_label                 100\
    -set_mpls_tc                    200\
    -set_pbb_isid                   300\
    -set_queue_id                   400\
    -set_sctp_dst                   500\
    -set_sctp_src                   600\
    -set_tcp_dst                    700\
    -set_tcp_src                    800\
    -set_tunnel_id                  900\
    -set_udp_dst                    110\
    -set_udp_src                    330\
    -set_vlan_id                    111\
    -set_vlan_priority              7\
]

Sample Output:

{action_bucket_handles openflowgroupactionbucketconfig1} {status 1}

To configure the reactive mode:

set device_rm [::sth::emulation_openflow_config \
    -mode add \
    -handle $dev_handle\
    -rm_switch_handle_list $switch_handle\
    -rm_action_field {output:1163,output:1203,output:1218,\
                mod_nw_tos:11,mod_tun_id:12,copy_ttl_in,all}\
    -rm_match_field {nw_src=35.35.35.2 \
                    dl_dst=00:00:02:00:00:01/ff:ff:ff:ff:ff:ff \
                    dl_vlan_pcp=1 nw_proto=5}\
  ]

Sample Output:

{rm_handle openflowreactivemoderuleconfig1} {status 1}

To delete the configured flow:

set device_ret11 [::sth::emulation_openflow_config \
   -mode delete \
   -handle $flowHnd\
  ]

Sample Output:

{status 1}

sth::emulation_openflow_control

Purpose

Spirent Extension (for Spirent HLTAPI only).

Starts, stops the OpenFlow emulation, starts, stops sending LLDP discovery messages, or updates switch configurations, flow blocks or meter blocks.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_openflow_control
    [-port_handle <port_handle_list>]
    [-handle <handle_list>]
    [-action {start_controller|stop_controller|start_discovery|
          stop_discovery|update_switch|add_flows|remove_flows|
          add_meters|remove_meters|add_group_entries|
          verify_discovery|modify_flows|modify_group_entries|
          modify_meters|remove_group_entries|send_barrier_req|
          send_controller_req|send_feature_req|send_get_async_req|
          send_set_async_req|view_meter_features|view_table_stats|
          view_table_features|view_port_stats|view_port_description|
          view_switch_description|view_individual_flow | view_aggregate_flow |
          view_group_stats }]

    [-all_tables {true|false}]
    [-all_output_ports {true|false}]
    [-all_output_groups {true|false}]
    [-all_groups {true|false}]

    [-cookie <0-4294967295>]
    [-cookie_mask <0-4294967295>]
    [-export_stats {true|false}]
    [-file_prefix <string>]
    [-group_id <0-4294967295>]
    [-save_archive {true|false}]
    [-save_single_file {true|false}]
    [-max_entries <1-4294967295>]
    [-output_group <0-4294967295>]
    [-output_port <0-4294967295>]
    [-table_id <0-255>]
    [-timeout <1-65535>]

    [-gen_id_list  {equal|master|nochange|slave}]
    [-role {equal|master|nochange|slave}]
    [-flow_remove_mask_master_list {delete_flow_mod|group_removed|hard_timeout|idle_timeout}]
    [-flow_remove_mask_slave_list {delete_flow_mod|group_removed|hard_timeout|idle_timeout}]
    [-packet_in_mask_master_list {invalid_ttl|no_matching_flow|output_to_controller}]
    [-packet_in_mask_slave_list  {invalid_ttl|no_matching_flow|output_to_controller}]
    [-port_status_mask_master_list  {port_added|port_attribute_changed|port_removed}]
    [-port_status_mask_slave_list  {port_added|port_attribute_changed|port_removed}]
    [-tls_file_action {upload|remove}]
    [-tls_file_name_list <file_name>]
    [-tls_file_type {private_key|certificate|ca_certificate}]

Arguments

-port_handle

Specifies a list of ports on which the action will be performed. You must specify either -port_handle or -handle, but not both.

-handle

Specifies a list of OpenFlow devices/flows/meters/switches on which to perform the action. You must specify either -port_handle or -handle, but not both. When action is send_controller_req or send_set_async_req, handle must be used as switch_handle.

-action

The action to perform on the specified ports or handles. Possible values are:

add_flows               Adds flows to flow blocks

remove_flows            Removes flows from flow blocks

add_meters              Adds meters in meter blocks

remove_meters           Removes meters from meter blocks

add_group_entries       Adds group entries to switches

verify_discovery        Verifies that the switch configuration
                        matches the results

modify_flows            Modifies flows on switches

modify_group_entries    Modifies group entries on switches

modify_meters           Modifies meter mods on switches

remove_group_entries    Removes group entries from the specified
                        switches

send_barrier_req        Sends a Barrier Request to the specified
                        switches

send_controller_req     Sends a Role Request command to the
                        specified switches.

send_feature_req        Sends a Features Request command to the
                         specified switches

send_get_async_req      Sends a Get Async Message Request command
                         to the specified switches

send_set_async_req      Sends a Set Async Message Request command
                         to the specified switches


start_controller        Starts the OpenFlow protocol emulation

stop_controller         Stops the OpenFlow protocol emulation

start_discovery         Starts sending LLDP discovery messages to the
                        connected switches

stop_discovery          Stops sending LLDP discovery messages

update_switch           Updates the switch configuration and port links.
                        You must use sth::emulation_lldp_config
                        before this mode to discover traffic ports.

view_meter_features     Views OpenFlow meter features.
                        You must specify -handle and -switch_handle.

view_table_stats        Views OpenFlow table statistics.
                        You must specify -handle and -switch_handle.

view_table_features     Views OpenFlow table features.
                        You must specify -handle and -switch_handle.

view_port_stats         Views OpenFlow port statistics
                        You must specify -handle and -switch_handle.

view_port_description   Views OpenFlow port description.
                        You must specify -handle and -switch_handle.

view_switch_description  Views Openflow switch description

view_individual_flow      Views individual flow statistics

view_aggregate_flow       Views aggregate flow statistics

view_group_stats            Views group statistics

The default value is start_controller.

-all_groups

Determines whether to display statistics for all groups. Possible values are true and false. If it is set to true, statistics for all groups will be displayed. If it is set to false, you can specify a port for which you want results. The default value is true.

-group_id

Specifies the ID of the group for which you want to view statistics. The default value is 0.

-export_stats

Determines whether to export statistics to a file or not. Possible values are true and false. The default value is false.

-file_prefix

Specifies a string to prepend to the name of the file to export. The default value is “OF_”.

-save_archive

Determines whether to save the exported .csv file as a zipped archive file. Possible values are true and false. If it is set to true, the exported .csv will be saved as a zip file. The default value is false.

-save_single_file

Determines whether to save all results to one single file (true) or to individual files (false). The default value is false.

-max_entries

Specifies the maximum number of entries to export. The default value is 5000.

-all_tables

Determines whether to retrieve statistics for all tables (true) or a specified table (false). The default value is true.

-all_output_ports

Determines whether to retrieve statistics for all output ports (true) or a specified port (false). The default value is true.

-all_output_groups

Determines whether to retrieve statistics for all output groups (true) or a specified group (false). The default value is true.

-table_id

Specifies the ID of the table for which you want to retrieve aggregate flow statistics. Possible values range from 0 to 255. The default value is 0. This argument is available when -all_tables is set to false.

-output_port

Specifies the port for which you want to retrieve statistics. The default value is 0. This argument is available when -all_output_ports is set to false.

-output_group

Specifies the group for which you want to retrieve statistics. The default value is 0. This argument is available when -all_output_groups is set to false.

-cookie

Specifies the value of the cookie for which you want to retrieve statistics. The default value is 0.

-cookie_mask

Specifies the mask of the cookie for which you want to retrieve statistics. The default value is 0.

-timeout

Specifies the statistics request timeout. Possible values range from 1 to 65535. The default value is 30.

-file_path

Specifies the path to save the .csv file of the exported statistics

-gen_id_list

Specifies the value of the Generation ID field used in Role Request messages. This argument is available when -action is set to send_controller_req. The default value is 0.

-role

Specifies the role for each controller in respect to the switch. This argument is available when -action is set to send_controller_req. Possible values are:

equal                Controller is equal to the switch
master          Controller is the master
nochange            Do not change the role
slave              Controller is a slave

The default value is equal.

-flow_remove_mask_master_list

Specifies one or more flow removed masks for controllers operating as a master or equal. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

delete_flow_mod        Evicted by a delete flow mod
group_removed            The group was removed
hard_timeout          Time exceeded hard_timeout
idle_timeout            Flow idle time exceeded idle_timeout
0                     No mask specified

The default value is idle_timeout|hard_timeout|delete_flow_mod| group_removed.

-flow_remove_mask_slave_list

Specifies one or more flow removed masks for slave controllers. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

delete_flow_mod         Evicted by a delete flow mod
group_removed            The group was removed
hard_timeout             Time exceeded hard_timeout
idle_timeout             Flow idle time exceeded idle_timeout
    0                   No mask specified

The default value is 0 (no mask specified).

-packet_in_mask_master_list

Specifies one or more packet-in masks for controllers operating as a master or equal. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

invalid_ttl               The packet has an invalid time to live
no_matching_flow          No matching flow was found
output_to_controller      The packet was explicitly sent to the
                          controller
0                        No mask specified

The default value is no_matching_flow|output_to_controller.

-packet_in_mask_slave_list

Specifies one or more Packet-in masks for slave controllers. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

invalid_ttl               The packet has an invalid time to live
no_matching_flow          No matching flow was found
output_to_controller      The packet was explicitly sent to the
                          controller
0                         No mask specified

The default value is 0 (no mask specified).

-port_status_mask_master_list

Specifies one or more port status masks for controllers operating as a master or equal. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

port_added                   The port was added to the data path
port_attribute_changed       A port attribute was changed
port_removed                 The port was removed from the data path
0                            No mask specified

The default value is port_added|port_removed|port_attribute_changed.

-port_status_mask_slave_list

Specifies one or more port status masks for slave controllers. Use “|” to specify more than one mask. This argument is available when -action is set to send_set_async_req. Possible values are:

port_added                 The port was added to the data path
port_attribute_changed     A port attribute was changed
port_removed               The port was removed from the data path
0                         No mask specified

The default value is port_added|port_removed|port_attribute_changed.

-tls_file_action

Specifies the action to perform on the Transport Layer Security (TLS) files. Possible values are:

upload    Upload TLS files to the Spirent TestCenter chassis
delete    Delete TLS files from the Spirent TestCenter chassis
-tls_file_name_list

Specifies a list of TLS file names. Local files are for -tls_file_action upload. Remote files are for -tls_file_action delete.

-tls_file_type

Specifies the type of files to transfer. Possible values are:

private_key          Private key
certificate              Certificate
ca_certificate       CA certificate

The default value is certificate.

-switch_handles

Specifies the switch configuration handles

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

handles     Identifies the list of handles for the discovered switches when you
            update the switch configurations. Only valid for -action update_switch.

status      Success (1) or failure (0) of the operation

log         An error message (if the operation failed)

Description

The sth::emulation_openflow_control function controls the OpenFlow emulation on the specified devices. See the -action argument for more details about the actions.

If the action is performed successfully, Spirent HLTAPI returns status 1. For -action update_switch, a switch handle will also be returned. If the action fails, Spirent HLTAPI returns status 0 with an error message.

Examples

To discover traffic ports:

set device_ret0 [sth::emulation_lldp_config\
    -mode                           create\
    -tlv_chassis_id_subtype         intf_alias\
    -tlv_port_id_subtype            mac_addr\
    -tlv_port_id_value              00:00:00:00:00:00\
    -tlv_ttl_value                  0\
    -tlv_chassis_id_value           SPIRENT\
    -port_handle                    $port1\
    -tx_delay                       2 \
    -msg_tx_hold_mutiplier          4 \
    -msg_tx_interval                30 \
    -reinitialize_delay             2 \
    -loopback_ip_addr               192.0.0.4 \
    -local_mac_addr                 00:10:94:00:00:04 \
    -intf_ip_prefix_length          24 \
    -intf_ip_addr                   192.85.1.6 \
    -gateway_ip_addr                192.85.1.1 \
    ]

To start sending LLDP discovery messages:

set ctrl_ret2 [::sth::emulation_openflow_control \
     -port_handle    $port1 \
     -action         start_discovery\
]

Sample Output:

{status 1}

To update the switch configuration:

set ctrl_ret2 [::sth::emulation_openflow_control \
    -port_handle $port1 \
    -action update_switch\
    ]

Sample Output:

{openflowcontrollerprotocolconfig1 {{switch_handles
{openflowswitchconfig1 openflowswitchconfig2 openflowswitchconfig3}}}}
{status 1}

To get Meter feature statistics to be exported in the .csv file:

set ctrl_ret1 [::sth::emulation_openflow_control \
         -handle $dev_handle \
         -switch_handles $switch_handle\
         -action view_meter_features\
         -file_path "C:/Tcl/lib/hltapi/run_scripts/"\
]

To get Port statistics to be exported in the .csv file:

set ctrl_ret1 [::sth::emulation_openflow_control \
-handle $dev_handle \
-switch_handles $switch_handle\
-action view_port_stats\
-file_path "C:/Tcl/lib/hltapi/run_scripts/"\
]

sth::emulation_openflow_stats

Purpose

Spirent Extension (for Spirent HLTAPI only).

Retrieves statistics for the OpenFlow devices configured on the specified test port

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_openflow_stats
     [-port_handle <port_handle>]
     [-handle <device_handle>]
     [-mode { async_result | controller |reactive_mode_result| switch_result |
             switchport_result}]

Arguments

-port_handle

Specifies the port handle from which to retrieve the statistics. You must specify either -port_handle or -handle, but not both.

-handle

Specifies the OpenFlow device handle from which to retrieve the statistics. You must specify either -port_handle or -handle, but not both.

-mode

Specifies the results mode. Possible values are:

async_result          Returns OpenFlow Async results

controller            Returns controller related statistics

reactive_mode_result  Returns reactive mode results

switch_result         Returns switch related statistics

switchport_result     Returns switch port related statistics

The default is controller.

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status         Success (1) or failure (0) of the operation

log            An error message (if the operation failed)

Following are the keys returned by the result mode.

When -mode is controller:

-Name                           Name of the device

-OpenflowVersion                OpenFlow version

-ControllerState                 State of the controller

-DiscoveryState                 State of the discovery state engine

-SwitchUpdateState              State of the OpenFlow controller updating the
                                flows on the switch

-ConnectedSwitchCount           Number of switches connected currently

-TotalConnectedSwitchCount      Total number of switches connected

-DiscoveredPortCount            Number of ports discovered

-DefinedFlowCount               Number of flows defined

-ActiveFlowCount                Number of active flows

-TxPacketOutCount               Number of packet-out messages sent

-TxFlowModAddCount              Number of flows added through an add command

-TxFlowModModifyCount           Number of flows modified through a modify command

-TxFlowModDeleteCount           Number of flows deleted through a remove command

-RxPacketInCount                Number of packet-in messages received

-RxFlowRemoveCount              Number of flows removed

-RxFlowModifyErrors             Number of flow modify errors received

-TxBarrierRequestCount          Number of Barrier Requests transmitted to the switch

-RxBarrierReplyCount            Number of Barrier Replies received from the switch

-BarrierRequestTimeoutCount     Number of Barrier Requests that have timed out
                                after a Barrier Reply was not received

-BarrierRemainingCount          Number of outstanding Barrier Requests for which a
                                Barrier Reply has not been received

-BarrierResponseTime            Time in microseconds between sending the Barrier
                                Request and receiving the most recent Barrier Reply

-TxRoleRequestCount             Number of Role Requests sent

-RxRoleReplyCount               Number of Role Requests received

-DefinedMeterCount              Number of meters defined

-ActiveMeterCount               Number of active meters

-TxMeterModAddCount             Number of meters added through an add command

-TxMeterModModifyCount          Number of meters modified through a modify command

-TxMeterModDeleteCount          Number of meters deleted through a delete command

-RxMeterModErrors               Number of meter modify errors received

When -mode is switch_result:

-Name                           Name of the device

-OpenflowVersion                Version of the OpenFlow specification

-SwitchName                     Name of the switch

-DpidNum                        Data path ID

-Dpid                           Data path ID in hexadecimal

-SwitchState                    State of the switch

-SwitchIp                       IP address of the switch

-DefinedFlowCount               Number of defined flows

-ActiveFlowCount                Number of active flows

-TxPacketOutCount               Number of packet-out messages sent

-TxFlowModAddCount              Number of flows added through an add command

-TxFlowModModifyCount           Number of flows modified through a modify command

-TxFlowModDeleteCount           Number of flows deleted through a remove command

-RxPacketInCount                Number of packet-in messages received
-RxFlowModifyErrors             Number of flow modify errors message received

-RxFlowRemoveCount              Number of flows removed

-TxBarrierRequestCount          Number of Barrier Requests transmitted to the switch

-RxBarrierReplyCount            Number of Barrier Replies received from the switch

-BarrierResponseTime            Time in microseconds between sending the Barrier
                                Request and receiving the most recent Barrier Reply

-FlowUpdateAddCount             Number of flows added to the switch for the most
                                recent flow adding operation

-FlowUpdateAddTime              Time in microseconds to add the flows
                                to the switch

-FlowUpdateAddRate              Number of flows added to the switch per second for
                                the most recent flow adding operation

-FlowUpdateAddSetupTime         Time in microseconds between sending the Barrier
                                Request and receiving the most recent Barrier Reply

-FlowUpdateModifyCount          Number of flows modified for the most recent
                                flow updating operation

-ControllerRole                  Desired role of the controller

-GenerationId                    Value of the generation ID field used in
                                Role Request messages

-TxRoleRequestCount             Number of Role Requests sent

-RxRoleReplyCount               Number of Role Requests received

-DefinedMeterCount              Number of meters defined

-ActiveMeterCount               Number of active meters

-TxMeterModAddCount             Number of meters added through an add command

-TxMeterModModifyCount          Number of meters modified through a modify command

-TxMeterModDeleteCount          Number of meters deleted through a delete command

-RxMeterModErrors               Number of meter modify errors received

When -mode is switchport_result:

-Name                           Name of the device

-SwitchName                     Name of the switch

-Dpid                           DPID of the switch on which the port exists

-DiscoveredPort                 Name of discovered ports

When -mode is async_result:

-Name                            Name of the device

-Dpid                            Value of the DPID in hex.

-PacketInMaskMasterEqual        Value of the packet-in mask for controllers operating as
                                a master or equal.
                                Possible values are::
                                no_matching_flow        No Matching Flow
                                output_to_controller    The packet was explicitly
                                                        sent to the controller
                                invalid_ttl             The packet has an invalid
                                                        time to live.


-PacketInMaskSlave              Value of the packet-in mask for controllers
                                operating as a slave.
                                Possible values are::
                                no_matching_flow        No Matching Flow
                                output_to_controller    The packet was explicitly
                                                        sent to the controller
                                invalid_ttl             The packet has an invalid
                                                        time to live.

-PortStatusMaskMasterEqual      Value of the port status mask for controllers
                                operating as a master or equal.
                                Possible values are::
                                port_added                  The port was added to
                                                            the data path
                                port_attribute_changed      A port attribute was
                                                            changed
                                port_removed                The port was removed
                                                            from the data path

-PortStatusMaskSlave            Value of the port status mask for controllers
                                operating as a slave.
                                Possible values are::
                                port_added                  The port was added to
                                                            the data path
                                port_attribute_changed      A port attribute was
                                                            changed
                                port_removed                The port was removed
                                                            from the data path


-FlowRemovedMaskMasterEqual     Value of the flow removed mask for controllers
                                operating as a master or equal.
                                Possible values are::
                                delete_flow_mod     Evicted by a delete flow mod
                                group_removed       The group was removed
                                hard_timeout        Time exceeded hard_timeout
                                idle_timeout        Flow idle time exceeded
                                                    idle_timeout

-FlowRemovedMaskSlave           Value of the flow removed mask for controllers
                                operating as a slave.
                                Possible values are::
                                delete_flow_mod     Evicted by a delete flow mod
                                group_removed       The group was removed
                                hard_timeout        Time exceeded hard_timeout
                                idle_timeout        Flow idle time exceeded
                                                    idle_timeout

When -mode is reactive_mode_result:

-MatchedPacketCount             Number of matched packets
-NotMatchedPacketCount          Number of unmatched packets
-TxPacketOutCount               Number of Packet Out messages sent

Description

The sth::emulation_openflow_stats function retrieves statistics for the OpenFlow devices configured on the specified test port. Use -mode to specify the scope of results that you want to retrieve.

This function returns the requested data and a status value (1 for success). If there is an error, the function returns the status value (0) and an error message.(See Return Values for a description of each key.)

Examples

To get controller statistics:

set stats_ret [::sth::emulation_openflow_stats \
    -handle     $dev_handle \
    -mode       controller\
    ]

Sample Output:

{status 1} {host1 {{controller_result {{-parent openflowcontrollerprotocolconfig1}
{-resultchild-Sources {openflowcontrollerprotocolconfig1 resultdataset1}}
{-Name {}} {-OpenflowVersion VERSION_1_3} {-ControllerState STARTED}
{-DiscoveryState RUNNING} {-SwitchUpdateState COMPLETED} {-ConnectedSwitchCount
3} {-TotalConnectedSwitchCount 3} {-DiscoveredPortCount 7} {-DefinedFlowCount 4}
{-ActiveFlowCount 4} {-TxPacketOutCount 14} {-TxFlowModAddCount 4}
{-TxFlowModModifyCount 0} {-TxFlowModDeleteCount 0} {-RxPacketInCount 121}
{-RxFlowRemoveCount 0} {-RxFlowModifyErrors 0} {-TxBarrierRequestCount 0}
{-RxBarrierReplyCount 0} {-BarrierRequestTimeoutCount 0} {-BarrierRemainingCount
0} {- BarrierResponseTime 0} {-TxRoleRequestCount 0} {-RxRoleReplyCount 0}
{-DefinedMeterCount 1} {-ActiveMeterCount 0} {-TxMeterModAddCount 2}
{-TxMeterModModifyCount 1} {-TxMeterM odDeleteCount 0} {-RxMeterModErrors 3}
{-Active true}}}}}

To retrieve values from the keyed list:

set ctrl_state [keylget stats_ret $dev_handle.controller_result.-ControllerState]
set sw_count [keylget stats_ret $dev_handle.controller_result.-ConnectedSwitchCount]
set flow_count [keylget stats_ret $dev_handle.controller_result.-ActiveFlowCount]
set defined_count [keylget stats_ret $dev_handle.controller_result.-DefinedFlowCount]

To get switch statistics:

set stats_ret [::sth::emulation_openflow_stats \
        -handle     $dev_handle \
        -mode       switch_result\
    ]

Sample Output:

{status 1} {host1 {{switch_result {{openflowswitchconfig3 {{-parent
openflowcontrollerprotocolconfig1} {-resultchild-Sources
{openflowcontrollerprotocolconfig1 r esultdataset2}} {-Name {}}
{-OpenflowVersion VERSION_1_3} {-SwitchName SwitchDpid_C29AE3B3E}
{-DpidNum 52238891838} {-Dpid C29AE3B3E} {-SwitchState CONNECTED}
{-SwitchIp 192.8 5.1.1} {-DefinedFlowCount 2} {-ActiveFlowCount 2}
{-TxPacketOutCount 6} {-TxFlowModAddCount 2} {-TxFlowModModifyCount 0}
{-TxFlowModDeleteCount 0} {-RxPacketInCount 39} {-RxFl owModifyErrors 0}
{-RxFlowRemoveCount 0} {-TxBarrierRequestCount 0} {-RxBarrierReplyCount 0}
{-BarrierResponseTime 0} {-FlowUpdateAddCount 0} {-FlowUpdateAddTime 0}
{-FlowUpdateAddRate 0} {-FlowUpdateAddSetupTime 0} {-FlowUpdateModifyCount 0}
{-ControllerRole EQUAL} {-GenerationId 0} {-TxRoleRequestCount 0}
{-RxRoleReplyCount 0} {-DefinedMeterCount 0} {-ActiveMeterCount 0}
{-TxMeterModAddCount 0} {-TxMeterModModifyCount 0} {-TxMeterModDeleteCount 0}
{-RxMeterModErrors 0} {-Active true}}} {openflowswitchconfig2
{{-parent openflowcontrollerprotocolconfig1} {-resultchild-Sources
{openflowcontrollerprotocolconfig1 resultdataset2}} {-Name {}}
{-OpenflowVersion VERSION_1_3} {-SwitchName SwitchDpid_C2976CBE8} {-DpidNum
52235258856} {-Dpid C2976CBE8} {-SwitchState CONNECTED} {-SwitchIp 192.85.1.12}
{-DefinedFlowCount 1} {-ActiveFlowCount 1} {-TxPacketOutCount 4} {-TxFlow
ModAddCount 1} {-TxFlowModModifyCount 0} {-TxFlowModDeleteCount 0}
{-RxPacketInCount 31} {-RxFlowModifyErrors 0} {-RxFlowRemoveCount 0}
{-TxBarrierRequestCount 0} {-RxBarrierR eplyCount 0} {-BarrierResponseTime 0}
{-FlowUpdateAddCount 0} {-FlowUpdateAddTime 0} {-FlowUpdateAddRate 0}
{-FlowUpdateAddSetupTime 0} {-FlowUpdateModifyCount 0} {-Controller Role EQUAL}
{-GenerationId 0} {-TxRoleRequestCount 0} {-RxRoleReplyCount 0}
{-DefinedMeterCount 0} {-ActiveMeterCount 0} {-TxMeterModAddCount 0}
{-TxMeterModModifyCount 0} {-TxMeterModDeleteCount 0} {-RxMeterModErrors 0}
{-Active true}}} {openflowswitchconfig1 {{-parent
openflowcontrollerprotocolconfig1} {-resultchild-Sources {openflowcontrollerpro
tocolconfig1 resultdataset2}} {-Name {}} {-OpenflowVersion VERSION_1_3}
{-SwitchName SwitchDpid_C291C8FD8} {-DpidNum 52229345240} {-Dpid C291C8FD8}
{-SwitchState CONNECTED} {- SwitchIp 192.85.1.11} {-DefinedFlowCount 1}
{-ActiveFlowCount 1} {-TxPacketOutCount 4} {-TxFlowModAddCount 1}
{-TxFlowModModifyCount 0} {-TxFlowModDeleteCount 0} {-RxPacketInC ount 61}
{-RxFlowModifyErrors 0} {-RxFlowRemoveCount 0} {-TxBarrierRequestCount 0}
{-RxBarrierReplyCount 0} {-BarrierResponseTime 0} {-FlowUpdateAddCount 0}
{-FlowUpdateAddTim e 0} {-FlowUpdateAddRate 0} {-FlowUpdateAddSetupTime 0}
{-FlowUpdateModifyCount 0} {-ControllerRole EQUAL} {-GenerationId 0}
{-TxRoleRequestCount 0} {-RxRoleReplyCount 0} {-De finedMeterCount 1}
{-ActiveMeterCount 0} {-TxMeterModAddCount 2} {-TxMeterModModifyCount 1}
{-TxMeterModDeleteCount 0} {-RxMeterModErrors 3} {-Active true}}}}}}}

End of Procedure Header

sth::emulation_openflow_switch_config

Purpose

Spirent Extension (for Spirent HLTAPI only).

Configures, modifies, or disables an OpenFlow Switch Emulation (OSE) on the specified devices. Spirent HLTAPI allows you to create complex tests to validate OpenFlow implementations with OSE. Use OpenFlow switch emulation to proactively configure flows on switches to test OpenFlow controller functionality and scalability.

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_openflow_switch_config
    [-mode {enable|modify|disable}   M]
    [-handle <handle>]
    [-count <integer>]
    [-openflow_version { version_1_0|version_1_3|version_1_4}]
    [-controller_ip_addr <a.b.c.d>]
    [-tcp_port {0-65535}]
    [-connection_type {tcp|tcp_tls}]
    [-switch_private_key  <string>]
    [-switch_certificate  <string>]
    [-controller_ca_certificates  <string>]
    [-switch_port_num <1-50000>]
    [-send_port_status_on_connect {true|false}]
    [-dpid_start <integer>]
    [-dpid_step  <integer>]
    [-topo_type {linear|ring|grid|spine_leaf|full_mash|standalone}]
    [-switch_name <string>]
    [-topology_port_name <string>]
    [-grid_row_count {0-255>]
    [-edge_switches_count <0-65535>]
    [-edge_switch_name <string>]
    [-spine_switch_name <string>]
    [-spine_switches_count <1-65535>]
    [-leaf_switches_count  <1-65535>]
    [-leaf_switch_name <string>]
    [-switch_port_mac_start <aa:bb:cc:dd:ee:ff>]
    [-configure_hosts {true|false}]
    [-host_ip_start <a.b.c.d>]
    [-host_ip_step <a.b.c.d>]
    [-host_port_count <1-255>]
    [-host_port_name <string>]
    [-use_switch_port_mac {true |false}]
    [-host_mac_start  <aa:bb:cc:dd:ee:ff>]
    [-configure_additional_switch_ports {true|false}]
    [-addtional_switch_port_names <string>]
    [-traffic_enable {true|false}]
    [-defalute_table_miss_entry {drop|send_to_controller}]
    [-traffic_type {packet_in|arp}]
    [-customize_packet_in  {true|false}]
    [-dst_mac   <aa:bb:cc:dd:ee:ff>]
    [-vlan_enable {true|false}]
    [-vlan_id <0-4095>]
    [-ip_enable {true|false}]
    [-dst_ip <a.b.c.d>]
    [-frame_mode {continuous|burst}]
    [-frame_per_second  <1 -65535>]
    [-frame_count  <1-4294967295>]
    [-frame_size  <64-9014>]
    [-configure_packet_in_param {true|false}]
    [-packat_in_table_id <0-255>]
    [-packet_in_reason {ofpr_no_match|fpr_action|afpr_invalid_ttl}]
    [-end_point_map {one_to_many|many_to_many|many_to_one}]
    [-arp_rate <1-100>]
    [-disable_echo_request {true|false}]
    [-ose_flow_priority  <1-65535>]
    [-echo_request_time  <1-65000>]
    [-experimenter_support {true|false}]

Arguments

-mode

Specifies the action to perform. This argument is Mandatory . Possible values are:

enable      Configures the OpenFlow switch device specified
            by -handle (returned by sth::device_config)
modify      Modifies the existing OSE configuration
            specified by -handle
disable     Disables the existing OSE configuration
            specified by -handle
-handle

Specifies the OpenFlow switch device handle when -mode is set to enable, or the OSE configuration handle when mode is set to modify or disable.

-count

Specifies the number of OSE devices to be created

-openflow_version

Specifies the OpenFlow version to be used. Possible values are version_1_0, version_1_3, and version_1_4. The default value is version_1_3.

-controller_ip_addr

Specifies the IPv4 address of the controller. The default value is 192.85.1.1.

-tcp_port

Specifies the TCP port to be used for communication between the OpenFlow switch and the controller. Possible values range from 0 to 65535. The default value is 6633.

-connection_type

Specifies the type of connection to establish between OpenFlow switches and the controller. Possible values are:

tcp          TCP connection

tcp_tls    TLS connection

The default value is tcp.

-switch_private_key

Specifies the name of the PEM file that contains the private key file for the switch. This argument is available when -connection_type is set to tcp_tls.

-switch_certificate

Specifies the name of the PEM file that contains the public key certificate file for the switch. This argument is available when -connection_type is set to tcp_tls.

-controller_ca_certificates

Specifies the PEM files that contain the trusted Certification Authority certificate to authenticate the controller. This argument is available when -connection_type is set to tcp_tls.

-switch_port_num

Specifies the base switch port number for topology, host, and additional ports. Possible values range from 1 to 50000. The default value is 4000.

-send_port_status_on_connect

Determines whether to send a port status to the controller upon connecting. Possible values are true and false. When set to true, Spirent HLTAPI will send a port status to the controller upon connecting. The default value is false.

-dpid_start

Specifies the starting data path ID (DPID) to assign to switches. Possible values range from 1 to 65535. The default value is 1.

-dpid_step

Specifies the DPID increment between switches. Possible values range from 1 to 65535. The default value is 1.

-topo_type

Specifies the type of switch topology to create. Possible values are linear, ring, grid, spine_leaf, full_mash, and standalone. The default value is linear.

-switch_name

Specifies the name of the switch. The default value is br_@b-@s-@x.

-topology_port_name

Specifies the name of the topology port. The default value is topo_@b-@s-@x.

-grid_row_count

Specifies the number of rows in the grid topology. Possible values range from 0 to 255. The default value is 2.

-edge_switches_count

Specifies the number of edge switches in the topology. Possible values range from 1 to 65535. The default value is 2.

-edge_switch_name

Specifies the name of the edge switch. The default value is eg_@b-@s-@x.

-spine_switches_count

Specifies the number of spine switches in the topology. Possible values range from 1 to 65535. The default value is 2.

-spine_switch_name

Specifies the name of the spine switch. The default value is sp_@b-@s-@x.

-leaf_switches_count

Specifies the number of leaf switches in the topology. Possible values range from 1 to 65535. The default value is 4.

-leaf_switch_name

Specifies the name of the leaf switch. The default value is lf_@b-@s-@x.

-switch_port_mac_start

Specifies the MAC address of the first port on the switch. The default value is 00:00:00:00:00:01.

-configure_hosts

Enable this argument to configure host ports. Possible values are true (enable) and false (disable). The default value is false.

-host_port_count

Specifies the number of host ports to configure. Possible values range from 1 to 255. The default value is 1. This argument is available when -configure_hosts is set to true.

-host_port_name

Specifies the name of the host port. The default value is host_@b-@s-@x. This argument is available when -configure_hosts is set to true.

-host_ip_start

Specifies the starting IPv4 address for host ports. The default value is 0.0.0.1. This argument is available when -configure_hosts is set to true.

-host_ip_step

Specifies the IPv4 address step between host ports. The default value is 0.0.0.1. This argument is available when -configure_hosts is set to true.

-use_switch_port_mac

Determines whether to use the MAC address of the switch port as the host MAC address. Possible values are true and false. Set it to true to use the MAC address of the switch port as the host MAC address. Set it to false to configure the host MAC address. The default value is false. This argument is available when -configure_hosts is set to true.

-host_mac_start

Specifies the starting MAC address for host ports. The default value is 00:10:00:00:00:01. This argument is available when -use_switch_port_mac is set to false.

-configure_additional_switch_ports

Enable this argument to configure additional switch ports. Possible values are true (enable) and false (disable). The default value is false.

-addtional_switch_port_names

Specifies up to three additional non-host port names. You must set -configure_additional_switch_ports to true. The default value is add1_@b-@s-@x.

-traffic_enable

Enable this argument to configure traffic on the switch topology. Possible values are true (enable) and false (disable). The default value is false.

-traffic_type

Specifies the type of traffic to configure. You must set -traffic_enable to true. Possible values are:

packet_in         Packet-in traffic
arp                       ARP traffic

The default value is packet_in.

-customize_packet_in

When enabled, custom packet-in parameters are available when hosts are configured on switches. Possible values are true (enable) and false (disable). The default value is false.

-dst_mac

Specifies the MAC address of the destination host. The default value is 00:00:10:00:00:01.

-vlan_enable

When enabled, a VLAN header will be added to the generated traffic frame. Possible values are true (enable) and false (disable). The default value is false.

-vlan_id

Specifies the VLAN ID to be used when -vlan_enable is set to true. Possible values range from 0 to 4095. The default value is 200.

-ip_enable

When enabled, an IPv4 header will be added to the generated traffic frame. Possible values are true (enable) and false (disable). The default value is false.

-dst_ip

Specifies the IPv4 address of the destination host. The default value is 0.0.0.1.

-frame_mode

Specifies the traffic mode to be generated. Possible values are continuous and burst. The default value is continuous.

-frame_size

Specifies the size of the traffic (packet-in frames) to be generated. Possible values range from 64 to 9014. The default value is 1518.

-frame_per_second

Specifies the number of packet-in frames generated per switch per second. The default value is 1.

-frame_count

Specifies the number of frames to be generated as part of a burst. The default value is 1.

-configure_packet_in_param

Enable this argument to configure parameters in the packet-in message. Possible values are true (enable) and false (disable). The default value is false.

-packat_in_table_id

Specifies the table ID. The default value is 0.

-packet_in_reason

Specifies the reason why the packet-in message is sent to the controller. Possible values are:

ofpr_no_match        No matching flow (table-miss flow entry)
ofpr_action          Action explicitly output to controller
afpr_invalid_ttl     Packet has invalid TTL

The default value is ofpr_no_match.

-end_point_map

Specifies the host endpoint mapping mode for traffic. Possible values are:

one_to_many            One to many
many_to_many           Many to many
many_to_one            Many to one

The default value is one_to_many.

-arp_rate

Specifies the rate at which ARP frames are sent. Possible values range from 1 to 100. The default value is 1.

-defalute_table_miss_entry

Specifies the action to be taken when no flow match occurs. Possible values are:

drop                   Drop the packet
send_to_controller    Forward the packet to the controller

The default value is send_to_controller.

-ose_flow_priority

Specifies the default flow priority for OSE. Possible value range from 1 to 65535. The default value is 65535.

-echo_request_time

Specifies the number of seconds for an Echo Request message to time out. Possible values range from 1 to 65500. The default value is 5. This argument is available when -disable_echo_request is set to false.

-experimenter_support

Enables or disables the use of Experimenter. Possible values are true (enable) and false (disable). The default value is false.

-disable_echo_request

When enabled, Echo Request messages will be turned off. Possible values are true (enable) and false (disable). The default value is false.

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status      Success (1) or failure (0) of the operation

log         An error message (if the operation failed)

handle      The OSE configuration handle; required by -mode modify or disable

Description

The sth::emulation_openflow_switch_config function configures, modifies, or disables an OSE on the specified OpenFlow switch. Use the -mode argument to specify the actions to perform. (See the -mode argument description for information about the actions.)

When you configure an OpenFlow controller, use the sth::emulation_device_config function to create an emulated device, on which you configure the OpenFlow switch with -mode enable of the current function.

Examples

To configure OSE:

 set ose_config_ret1  [sth::emulation_openflow_switch_config \
        -mode enable \
        -handle $devicehnd1 \
        -openflow_version  "version_1_0 | version_1_3 " \
        -controller_ip_addr  {192.85.1.3 192.85.2.3} \
        -tcp_port 6000 \
        -connection_type tcp_tls \
        -switch_private_key  "privkey_sample.pem"\
        -switch_certificate  "cert_sample.pem"\
        -controller_ca_certificates  "cacert_sample.pem"\
        -switch_port_num  1001 \
        -send_port_status_on_connect true \
        -dpid_start 0xa1\
        -dpid_step  0x1 \
        -topo_type spine_leaf \
        -edge_switches_count 2 \
        -edge_switch_name "edge" \
        -spine_switch_name "spine"\
        -spine_switches_count 4 \
        -leaf_switches_count  4\
        -leaf_switch_name   "leaf"\
        -switch_port_mac_start 10:00:10:00:00:11 \
        -configure_hosts true \
        -host_count 3 \
        -host_ip_start 10.10.10.2 \
        -host_ip_step  0.0.0.2 \
        -host_name "localhost1" \
        -use_switch_port_mac false \
        -host_mac_start 10:00:10:00:10:11 \
        -configure_additional_switch_ports false \
        -traffic_enable true \
        -customize_packet_in  true \
        -dst_mac   10:12:13:14:54:22 \
        -vlan_enable true \
        -vlan_id 130 \
        -ip_enable true \
        -dst_ip 9.9.9.9 \
        -frame_mode burst \
        -frame_per_second  100 \
        -frame_count  190 \
        -frame_size  256 \
        -configure_packet_in_param  true \
        -packat_in_table_id 1 \
        -packet_in_reason  ofpr_action \
        -ose_flow_priority 14 \
        -disable_echo_request true \
        -echo_request_time 2 \
        -experimenter_support true \
        ]

 Sample Output::


{handle oseswitchconfig1} {status 1}

End of Procedure Header

sth::emulation_openflow_switch_control

Purpose

Spirent Extension (for Spirent HLTAPI only).

Starts/stops the OSE or the OSE traffic, breaks/restores an OSE switch port link, retrieves OSE flows, or manages TLS files

Synopsis

Note

M indicates that the argument is Mandatory .

sth::emulation_openflow_switch_control
  [-action { start_ose|stop_ose|start_ose_traffic|stop_ose_traffic|break_link|
            restore_link|restore_all_links|get_ose_flows|manage_tls_files}   M]
  [-port_handle <port_handle>]
  |-handle <handle>]
  [-switch_type {leaf_switch|spine_switch|edge_switch}]
  [-switch_number <1-65535>]
  [-port_type {topology_port|host_port}]
  [-port_number_list <sting>]
  [-file_path <string>]
  [-tls_file_action {upload|remove}]
  [-tls_file_name_list <file_name>]
  [-tls_file_type {private_key|certificate|ca_certificate}]

Arguments

-port_handle

The port on which the action will be performed. You must specify either -port_handle or -handle, but not both.

-handle

Specifies the OpenFlow switch handle on which to perform the action. You must specify either -port_handle or -handle, but not both.

-action

Specifies the action to perform. This argument is Mandatory . Possible values are:

start_ose           Starts the OSE test

stop_ose            Stops the OSE test

start_ose_traffic   Starts OSE traffic

stop_ose_traffic    Stops OSE traffic

break_link          Breaks an OSE switch port link.
                    Only single OpenFlow switch device block
                    is supported

restore_link        Restores an OSE switch port link.
                    Only single OpenFlow switch device block
                    is supported

restore_all_links   Restores all links

get_ose_flows       Retrieves OSE flows

manage_tls_files    Uploads TLS files to, or removes them from, the
                    Spirent TestCenter chassis
-file_path

Specifies the target path for the file where OSE flows are saved. This argument is required for -get_ose_flows.

-switch_type

Specifies the type of switch on which to break/restore the link. Possible values are leaf_switch, spine_switch, and edge_switch. The default value is leaf_switch.

-switch_number

Specifies the index of the switch on which to break/restore the link

-port_type

Specifies the type of switch port for which to break/restore the link. Possible values are topology_port and host_port. The default value is topology_port.

-port_number_list

A comma-separated list of numbers or ranges that identify the ports for which to break/restore the link

-tls_file_action

Specifies the action to perform with the Transport Layer Security (TLS) files. Possible values are:

upload    Upload TLS files to the Spirent TestCenter chassis
delete    Delete TLS files from the Spirent TestCenter chassis
-tls_file_name_list

Specifies a list of TLS file names to remove or upload. Local files are for -tls_file_action upload. Remote files are for -tls_file_action remove.

-tls_file_type

Specifies the type of files to transfer. Possible values are:

private_key          Private key
certificate          Certificate
ca_certificate       CA certificate

The default value is certificate.

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status      Success (1) or failure (0) of the operation

log         An error message (if the operation failed)

Description

The sth::emulation_openflow_switch_control function controls the OSE on the specified ports or devices. See the -action argument for more details about the actions.

If the action is performed successfully, Spirent HLTAPI returns status 1. If the action fails, Spirent HLTAPI returns status 0 with an error message.

Examples

To start the OSE configured on the specified ports:

set ose_control_ret1 [sth::emulation_openflow_switch_control \
               -port_handle "$port1 $port2"\
               -action start_ose\
    ]

Sample Output:

{status 1}

To stop the OSE configured on the specified OpenFlow switches:

set ose_control_ret2 [sth::emulation_openflow_switch_control \
               -handle "$osehnd1 $osehnd2"\
               -action stop_ose\
]

Sample Output:

{status 1}
To retrieve saved OSE flows::
set ose_control_ret3 [sth::emulation_openflow_switch_control
-port_handle $port1-action get_ose_flows-file_path “d:/work”

]

{status 1}

End of Procedure Header

sth::emulation_openflow_switch_stats

Purpose

Spirent Extension (for Spirent HLTAPI only).

Retrieves statistics for the OSE test

Synopsis

Note

M indicates the argument is Mandatory . sth::emulation_openflow_switch_stats

[-mode {controller_aggregate|switch_results} M] [-port_handle <port_handle>] [-handle <OSE_switch_handle>]

Arguments

-port_handle

Specifies the port handle from which to retrieve statistics

-handle

Specifies the OpenFlow switch handle from which to retrieve statistics

-mode

Specifies the results mode. Possible values are:

controller_aggregate    OSE controller aggregate results
switch_results          OSE switch results

Note

You can use sth::drv_stats to define other results views.

Return Values

Depending on the specific language that HLTAPI uses, the function returns a keyed list/dictionary/hash (See Introduction for more information on return value formats) using the following keys (with corresponding data):

status        $SUCCESS or $FAILURE
log           An error message if command returns {status 0}

When -mode is controller_aggregate:

parent                        Port handle
ControllerState               State of the controller
ControllerIpAddress           IP address of the controller
ConnectedSwitchCount          Number of connected switches
InitialConnectTime            Milliseconds elapsed during the connect procedure
PacketInCount                 Number of packet-in messages
PacketOutCount                Number of packet-out messages
FlowModCount                  Number of Flow Mod messages
FlowModAddCount               Number of Flow Mod Add messages
FlowModModifyCount            Number of Flow Mod Modify messages
FlowModDeleteCount            Number of Flow Mod Delete messages
FlowModErrorCount             Number of Flow Mod Error messages
GroupModCount                 Number of Group Mod messages
MeterModCount                 Number of Meter Mod messages
PortModCount                  Number of Port Mod messages
TableModCount                 Number of Table Mod messages
PacketInRate                  Number of packet-in messages per second
PacketOutRate                 Number of packet-out messages
FlowModRate                   Number of Flow Mod messages per second
NumDroppedConn                Number of dropped connections

When -mode is switch_results:

OseSwitchConfigSwitchName                  Name of the switch
OseSwitchConfigSwitchIpAddress             IP address of the switch
OseSwitchConfigState                       State of the switch
OseSwitchConfigDpid                        DPID of the switch
OseSwitchConfigOpenflowVersion             Version of OpenFlow in use
OseSwitchConfigConnectedControllerCount    Number of controllers connected to the switch
OseSwitchConfigPortCount                   Port count
OseSwitchConfigActiveFlowCount             Number of active flows on the switch

Description

The sth::emulation_openflow_switch_stats function retrieves OSE statistics for the OpenFlow switches configured on the specified test port. Use -mode to specify the scope of results that you want to retrieve.

This function returns the requested data and a status value (1 for success). If there is an error, the function returns the status value (0) and an error message. (See Return Values for a description of each key.)

Examples

To get controller statistics:

set ose_stats_ret1 [sth::emulation_openflow_switch_stats \
            -handle $osehnd1 \
            -mode controller_aggregate \
            ]

Sample Output:

{status 1} {controller_aggregate {{Controller1 {{parent port2} {resultchild-Sources
{port2 resultdataset2}} {Name {}} {ControllerIpAddress tcp:192.85.1.3:6633}
{ControllerState CONNECTED} {ConnectedSwitchCount 4} {InitialConnectTime 6}
{PacketInCount 18} {PacketOutCount 33} {FlowModCount 10} {FlowModAddCount 6}
{FlowModModifyCount 0} {FlowModDeleteCount 4} {FlowModErrorCount 0} {MeterModCount 4}
{GroupModCount 4} {PortModCount 0} {TableModCount 0} {PacketInRate 0} {PacketOutRate
0} {FlowModRate 0} {NumDroppedConn 0} {Active true}}} {Controller2 {{parent port2}
{resultchild-Sources {port2 resultdataset2}} {Name {}} {ControllerIpAddress
tcp:192.85.1.33:6633} {ControllerState CONNECTED} {ConnectedSwitchCount 8}
{InitialConnectTime 6} {PacketInCount 36} {PacketOutCount 66} {FlowModCount 16}
{FlowModAddCount 8} {FlowModModifyCount 0} {FlowModDeleteCount 8} {FlowModErrorCount
0} {MeterModCount 8} {GroupModCount 8} {PortModCount 0} {TableModCount 0}
{PacketInRate 0} {PacketOutRate 0} {FlowModRate 0} {NumDroppedConn 0} {Active
true}}}}}

End of Procedure Header