OpenFlow Functions¶
emulation openflow config¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- Purpose:
Spirent Extension (for Spirent HLTAPI only).
Creates or modifies OpenFlow protocol emulation with Spirent HLTAPI. The OpenFlow protocol is based on the softwaredefined 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 the argument is `Mandatory`.
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
``emulation openflow control`` 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 sublists.
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 sublists, 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> PBBISID
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 InPort
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> Goto Table
meter:<integer> Meter
mod_tp_dst:<integer> TCP/UDP Destination
mod_tp_src:<integer> TCP/UDP Source
output:<integer> Output
set_field_experimenter:<fieldinteger/ID-string/Value-string>
Set Field Experimenter
set_field_experimenter_dec:<fieldinteger/ID-string/Decimal
Valueinteger> Set Field Experimenter IP
set_field_experimenter_ip:<fieldinteger/ID-string/IP Addressinteger>
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 Goto 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 InPort
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> Goto 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 flowspecific 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 ``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 meterspecific 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
cookie
Specifies the cookie value relating to the flow block to match.
The default value is 0.
cookie_mask
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 packetin mask for controller role of master or
equal, in HEX format. The default value is 3.
packet_in_mask_slave
Specifies the packetin 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 switchcomputed 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 nonOpenflow pipeline
flood Flood using a nonOpenFlow 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 SetAction 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 SetAction field. You must set
group_action_type to qos. The default value is 1.
set_ipv4_fields
Specifies the IPv4 SetAction 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 SetAction 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 linklayer for ND
ipv6_nd_tll Set target linklayer 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 linklayer 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 linklayer 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 SetAction 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 Bottomof-Stack (BoS) bit
pbb_isid Set PBB ISID
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 (ISID).
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 BBNRCC-MON
11 NVPII
12 PUP
13 ARGUS
14 EMCON
15 XNET
16 CHAOS
17 UDP
18 MUX
19 DCNMEAS
20 HMP
21 PRM
22 XNSIDP
23 TRUNK-1
24 TRUNK-2
25 LEAF-1
26 LEAF-2
27 RDP
28 IRTP
29 ISOTP4
30 NETBLT
31 MFENSP
32 MERITINP
33 SEP
34 3PC
35 IDPR
36 XTP
37 DDP
38 IDPRCMTP
39 TP++
40 IL
41 IPv6
42 SDRP
43 IPv6Route
44 IPv6Frag
45 IDRP
46 RSVP
47 GRE
48 MHRP
49 BNA
50 ESP
51 AH
52 INLSP
53 SWIPE
54 NARP
55 MOBILE
56 TLSP
57 SKIP
58 IPv6ICMP
59 IPv6NoNxt
60 IPv6Opts
62 CFTP
64 SATEXPAK
65 KRYPTOLAN
66 RVD
67 IPPC
69 SATMON
70 VISA
71 IPCV
72 CPNX
73 CPHB
74 WSN
75 PVP
76 BRSAT-MON
77 SUNND
78 WBMON
79 WBEXPAK
80 ISOIP
81 VMTP
82 SECUREVMTP
83 VINES
84 TTP
85 NSFNETIGP
86 DGP
87 TCF
88 EIGRP
89 OSPFIGP
90 SpriteRPC
91 LARP
92 MTP
93 AX.25
94 IPIP
95 MICP
96 SCCSP
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 CompaqPeer
111 IPXin-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 RSVPE2E-IGNORE
135 Mobility Header
136 UDPLite
137 MPLSin-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 InPort
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
``emulation openflow control`` action=
start_discovery.
Arguments Unsupported by Save as HLTAPI:
The 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
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 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 [::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 [::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= "port1dpid0/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 [::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 [::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 [::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 [::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 [::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 [::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 [::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 [::emulation openflow config mode= delete handle= $flowHnd ]
Sample Output:
{status 1}
emulation openflow control¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- 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 the argument is `Mandatory`.
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 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 packetin 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 Packetin 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
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 [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 [::emulation openflow control port_handle= $port1 action= start_discovery ]
Sample Output:
{status 1}
To update the switch configuration:
set ctrl_ret2 [::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 [::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 [::emulation openflow control handle= $dev_handle switch_handles= $switch_handle action= view_port_stats file_path= "C:/Tcl/lib/hltapi/run_scripts/" ]
emulation openflow stats¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- Purpose:
Spirent Extension (for Spirent HLTAPI only).
Retrieves statistics for the OpenFlow devices configured on the specified test port
Synopsis:
Note: M indicates the argument is `Mandatory`.
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
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 [::emulation openflow stats handle= $dev_handle mode= controller ]
Sample Output:
{status 1} {host1 {{controller_result {{parent= openflowcontrollerprotocolconfig1} {resultchildSources= {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 [::emulation openflow stats handle= $dev_handle mode= switch_result ]
Sample Output:
{status 1} {host1 {{switch_result {{openflowswitchconfig3 {{parent= openflowcontrollerprotocolconfig1} {resultchildSources= {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} {resultchildSources= {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} {resultchildSources= {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
emulation openflow switch config¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- 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 the argument is `Mandatory`.
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 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 nonhost 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 Packetin traffic
arp ARP traffic
The default value is packet_in.
customize_packet_in
When enabled, custom packetin 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 (packetin frames) to be
generated. Possible values range from 64 to 9014. The
default value is 1518.
frame_per_second
Specifies the number of packetin 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
packetin 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 packetin message is sent to
the controller.
Possible values are::
ofpr_no_match No matching flow (tablemiss 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
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 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 [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
emulation openflow switch control¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- 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 the argument is `Mandatory`.
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 commaseparated 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
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 [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 [emulation openflow switch control handle= "$osehnd1 $osehnd2" action= stop_ose ]
Sample Output:
{status 1}
To retrieve saved OSE flows:
set ose_control_ret3 [emulation openflow switch control port_handle= $port1 action= get_ose_flows file_path= "d:/work" ]
{status 1}
End of Procedure Header
emulation openflow switch stats¶
Execute Tester Command ${rt_handle} command=test_control <additional key=value arguments>
- Purpose:
Spirent Extension (for Spirent HLTAPI only).
Retrieves statistics for the OSE test
Synopsis:
Note: M indicates the argument is Mandatory.
- 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 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 packetin messages PacketOutCount Number of packetout 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 packetin messages per second PacketOutRate Number of packetout 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
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 [emulation openflow switch stats handle= $osehnd1 mode= controller_aggregate ]
Sample Output:
{status 1} {controller_aggregate {{Controller1 {{parent port2} {resultchildSources= {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} {resultchildSources= {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