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¶
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