NFVBENCH-158 Allow multiple UDP ports in traffic generation
[nfvbench.git] / nfvbench / cfg.default.yaml
index 551b1c4..d154318 100755 (executable)
@@ -163,6 +163,12 @@ traffic_generator:
     # `ip_addrs_step`: step for generating IP sequence. Use "random" for random patterns, default is 0.0.0.1.
     ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
     ip_addrs_step: 0.0.0.1
+
+    #'ip_src_static': an attribute to precise the state of source IP during the generation of traffic, It indicates whether
+    #                the IP source variate or remain constant. Use True for constant IP and  False for varying IPs.
+    #                default value is  True
+    ip_src_static: True
+
     # `tg_gateway_ip_addrs` base IP for traffic generator ports in the left and right networks to the VNFs
     #                       chain count consecutive IP addresses spaced by tg_gateway_ip_addrs_step will be used
     # `tg_gateway_ip_addrs__step`: step for generating traffic generator gateway sequences. default is 0.0.0.1
@@ -177,21 +183,41 @@ traffic_generator:
     # `gateway_ip_addrs_step`: step for generating router gateway sequences. default is 0.0.0.1
     gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
     gateway_ip_addrs_step: 0.0.0.1
+
+    # UDP DEFINED VARIABLES
+    # TRex pick default UDP port (53) but the range of UDP source and destination ports are also
+    # defined from configuration file by using the following attributes:
+    #
     # `udp_src_port`: the source port for sending UDP traffic, default is picked by TRex (53)
     # `udp_dst_port`: the destination port for sending UDP traffic, default is picked by TRex (53)
+    # `udp_src_port` and `udp_dst_port` can be defined by a single port or a range. Example:
+    #   udp_src_port: 80
+    #   udp_dst_port: ['1024','65000']
+    # `udp_port_step`: the step between two generated ports, default is equal to '1'
+    #
+    # NOTICE:
+    # Following TRex functionalities, incrementation and decrementation of source port and destination
+    # port values occur simultaneously.
+    # So, in order to reach the highest possible number of packets, it's recommended that the range of source ports
+    # minus the range of destination ports should be different of 1
+    # i.e:  |range[source_port] - range[destination_port]| = 1
     udp_src_port:
     udp_dst_port:
+    udp_port_step: '1'
 
     # VxLAN only: optionally specify what VLAN tag to use for the VxLAN overlay
     # This is used if the vxlan tunnels are running on a specific VLAN.
     # Leave empty if there is no VLAN tagging required, or specify the VLAN id to use
     # for all VxLAN tunneled traffic
     vtep_vlan:
-    # VxLAN only: local/source vteps IP addresses for port 0 and 1 ['10.1.1.230', '10.1.1.231']
+    # VxLAN and MPLS only: local/source vteps IP addresses for port 0 and 1 ['10.1.1.230', '10.1.1.231']
     src_vteps:
     # VxLAN only: remote IP address of the remote VTEPs that terminate all tunnels originating from local VTEPs
     dst_vtep:
-
+    # The encapsulated L3/MPLS packet needs to traverse L3 or MPLS fabric to reach to its final dst_vtep.
+    # This parameter is required to resolve first next-hop MAC address if it next-hop is not its final dst_vtep.
+    # This parameter is mandatory for MPLS only
+    vtep_gateway_ips:
     # L2 ADDRESSING OF UDP PACKETS
     # Lists of dest MAC addresses to use on each traffic generator port (one dest MAC per chain)
     # Leave empty for PVP, PVVP, EXT with ARP
@@ -310,7 +336,7 @@ cores:
 # https://trex-tgn.cisco.com/trex/doc/trex_stateless.html#_tutorial_field_engine_significantly_improve_performance
 # If cache_size = 0 (or empty): no cache will be used by TRex (default)
 # If cache_size < 0: cache_size will be set to flow count value
-cache_size:
+cache_size: 0
 # The cache size is actually limited by the number of 64B mbufs configured in the trex platform configuration (see Trex manual 6.2.2. Memory section configuration)
 # Trex will use 1 x 64B mbuf per pre-built cached packet, assuming 1 pre-built cached packet per flow, it means for very large number of flows, the number of configured mbuf_64 will need to be set accordingly.
 mbuf_64:
@@ -369,7 +395,7 @@ loop_vm_name: 'nfvbench-loop-vm'
 #        segmentation_id: 2001
 #        physical_network: phys_sriov1
 #
-# For multi-chaining and non shared network mode (VLAN, SRIOV, VxLAN):
+# For multi-chaining and non shared network mode (VLAN, SRIOV, VxLAN, MPLS):
 # - the segmentation_id field if provided must be a list of values (as many as chains)
 # - segmentation_id auto-indexing:
 #   the segmentation_id field can also be a single value that represents the base value from which
@@ -379,23 +405,42 @@ loop_vm_name: 'nfvbench-loop-vm'
 # - the physical_network can be a single name (all VFs to be allocated on same physnet)
 #   of a list of physnet names to use different PFs
 #
-# Example of 2-chain configuration:
-# internal_networks:
-#    left:
-#        segmentation_id: [2000, 2001]
-#        physical_network: phys_sriov0
-#    right:
-#        segmentation_id: [2010, 2011]
-#        physical_network: phys_sriov1
+#   Example of 2-chain VLAN configuration:
+#   internal_networks:
+#      left:
+#          segmentation_id: [2000, 2001]
+#          physical_network: phys_sriov0
+#      right:
+#          segmentation_id: [2010, 2011]
+#          physical_network: phys_sriov1
+#   Equivalent to (using auto-indexing):
+#   internal_networks:
+#      left:
+#          segmentation_id: 2000
+#          physical_network: phys_sriov0
+#      right:
+#          segmentation_id: 2010
+#          physical_network: phys_sriov1
 #
-# Equivalent to (using auto-indexing):
-# internal_networks:
-#    left:
-#        segmentation_id: 2000
-#        physical_network: phys_sriov0
-#    right:
-#        segmentation_id: 2010
-#        physical_network: phys_sriov1
+# - mpls_transport_labels is used only when MPLS encapsulation is enabled (mpls: true)
+#   this parameter doesn't support auto-indexing because this is not a typical scenario
+#   expected the list of values in a range 256-1048575, one value per chain is expected
+#
+#   In the bellow configuration example 'segmentation_id; contains the inner MPLS label for each chain
+#   and 'mpls_transport_labels' contains the outer transport MPLS label for each chain
+#   Example of 2-chain MPLS configuration:
+#   internal_networks:
+#      left:
+#          network_type: mpls
+#          segmentation_id: [2000, 2001]
+#          mpls_transport_labels: [10000, 10000]
+#          physical_network: phys_sriov0
+#      right:
+#          network_type: mpls
+#          segmentation_id: [2010, 2011]
+#          mpls_transport_labels: [11000, 11000]
+#          physical_network: phys_sriov1
+
 
 internal_networks:
     left:
@@ -405,6 +450,7 @@ internal_networks:
         network_type: 'vlan'
         segmentation_id:
         physical_network:
+        mpls_transport_labels:
     right:
         name: 'nfvbench-rnet'
         subnet: 'nfvbench-rsubnet'
@@ -412,6 +458,7 @@ internal_networks:
         network_type: 'vlan'
         segmentation_id:
         physical_network:
+        mpls_transport_labels:
     middle:
         name: 'nfvbench-mnet'
         subnet: 'nfvbench-msubnet'
@@ -419,6 +466,7 @@ internal_networks:
         network_type: 'vlan'
         segmentation_id:
         physical_network:
+        mpls_transport_labels:
 
 # IDLE INTERFACES: PVP, PVVP and non shared net only.
 # By default each test VM will have 2 virtual interfaces for looping traffic.
@@ -436,7 +484,7 @@ idle_networks:
     # Prefix for all idle networks, the final name will append the chain ID and idle index
     # e.g. "nfvbench-idle-net.0.4" chain 0 idle index 4
     name: 'nfvbench-idle-net'
-    # Subnet name to use for all idle subnetworks 
+    # Subnet name to use for all idle subnetworks
     subnet: 'nfvbench-idle-subnet'
     # CIDR to use for all idle networks (value should not matter)
     cidr: '192.169.1.0/24'
@@ -537,7 +585,7 @@ use_sriov_middle_net: false
 # external_networks:
 #   left:  ['ext-lnet', 'ext-lnet2']
 #   right: ['ext-rnet', 'ext-rnet2']
-# 
+#
 external_networks:
     left:
     right:
@@ -578,14 +626,23 @@ edge_networks:
 
 # Use 'true' to enable VXLAN encapsulation support and sent by the traffic generator
 # When this option enabled internal networks 'network type' parameter value should be 'vxlan'
+# VxLAN and MPLS encapsulations are mutual exclusive if 'vxlan' is true then 'mpls' should be false
+# and vise versa
 vxlan: false
-
+# Use 'true' to enable MPLS encapsulation support and sent by the traffic generator
+# When this option enabled internal networks 'network type' parameter value should be 'mpls'
+# MPLS and VxLAN encapsulations are mutual exclusive if 'mpls' is 'true' then 'vxlan' should be set to 'false'
+# and vise versa. no_flow_stats, no_latency_stats, no_latency_streams should be set to 'true' because these
+# features are not supported at the moment. In future when these features will be supported they will require
+# special NIC hardware. Only 2 label stack supported at the moment where one label is transport and another
+# is VPN for more details please refer to 'mpls_transport_labels' and 'segmentation_id' in networks configuration
+mpls: false
 # Use 'true' to enable VLAN tagging of packets generated and sent by the traffic generator
 # Leave empty or set to false if you do not want the traffic generator to insert the VLAN tag (this is
 # needed for example if VLAN tagging is enabled on switch (access mode) or if you want to hook
 # directly to a NIC).
 # By default is set to true (which is the nominal use case with TOR and trunk mode to Trex ports)
-# If VxLAN is enabled, this option should be set to false (vlan tagging for encapsulated packets
+# If VxLAN or MPLS are enabled, this option should be set to false (vlan tagging for encapsulated packets
 # is not supported). Use the vtep_vlan option to enable vlan tagging for the VxLAN overlay network.
 vlan_tagging: true
 
@@ -610,6 +667,11 @@ vlans: []
 #       (see mac_addrs_left and mac_addrs_right)
 no_arp: false
 
+# Loop VM (VPP forwarder) can use ARP to discover next hop mac address
+# False (default): do not send ARP but use static config devices macs instead (TRex gratuitous ARP are not interpreted by VPP)
+# True: ARP requests are sent to find out next hop MAC addresses (for instance SDN-GW)
+loop_vm_arp: false
+
 # Traffic Profiles
 # You can add here more profiles as needed
 # `l2frame_size` can be specified in any none zero integer value to represent the size in bytes