aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammad Abdul Awal <mohammad.abdul.awal@intel.com>2016-09-06 14:42:17 +0100
committerMohammad Abdul Awal <mohammad.abdul.awal@intel.com>2016-09-09 16:31:41 +0100
commita1fc5816d7fbb1093464ee38e505e308effa7f1b (patch)
tree47c2c9084040e64828f8b2fe6e5b3212c5986c1b
parent8ae38dfb285ab9843312964b3081b2c52ba857dc (diff)
added Python script to generate streams for fe.cfg file
This script allows to generate streams for frontend config file with different parameters, including, number of streams, ipv4/ipv6 port in decimal or hex, FE/BE on same lcore or separate lcore etc. Change-Id: I8a7e0137ef62363b272756ed4b8811804d4f9ec4 Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com>
-rwxr-xr-xexamples/udpfwd/gen_fe_cfg.py199
1 files changed, 199 insertions, 0 deletions
diff --git a/examples/udpfwd/gen_fe_cfg.py b/examples/udpfwd/gen_fe_cfg.py
new file mode 100755
index 0000000..dbb500b
--- /dev/null
+++ b/examples/udpfwd/gen_fe_cfg.py
@@ -0,0 +1,199 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2016 Intel Corporation.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+# generate FE config script
+#
+
+import sys, optparse, math
+
+def print_usage ():
+ print "Usage: " + sys.argv[0] + " [-f fe_lcore_list] [-b be_lcore_list]"
+ print " [-p start_port] [-n number_of_streams]"
+ print " [-m mode] [-q local_address] [-r remote_address]"
+ print " [-s fwd_local_address] [-t fwd_remote_address]"
+ print " [-l txlen] [-4/-6] [-H]"
+ print
+ print "Options"
+ print " -f, --fe_lcore_list: list of lcores used for FE. Multiple " \
+ "lcores are comma-separated, within double quote"
+ print " -b, --be_lcore_list: list of lcores used for BE. Multiple " \
+ "lcores are comma-separated, within double quote"
+ print " -p, --start_port: starting UDP port number"
+ print " -n, --number_of_streams: number of streams to be generated"
+ print " -m, --mode: mode of the application. [echo, rx, tx, fwd]"
+ print " -q, --local_address: local address of the stream"
+ print " -r, --remote_address: remote address of the stream"
+ print " -s, --fwd_local_address: forwarding local address of the stream"
+ print " -t, --fwd_remote_address: forwarding remote address of the " \
+ "stream"
+ print " -l, --txlen: transmission length for rx/tx mode"
+ print " -H: if port number to printed in hex format"
+ print " -4/-6: if default ip addresses to be printed in ipv4/ipv6 format"
+
+def align_power_of_2(x):
+ return 2**(x-1).bit_length()
+
+def print_stream(mode, la, ra, fwd_la, fwd_ra, lcore, belcore, lport,
+ fwrport, txlen):
+ if support_hex != 0:
+ lport_str = str(format(lport, '#x'))
+ fwrport_str = str(format(fwrport, '#x'))
+ else:
+ lport_str = str(lport)
+ fwrport_str = str(fwrport)
+
+ stream = "lcore=" + str(lcore) + ",belcore=" + str(belcore) + ",op=" + mode
+ stream += ",laddr=" + la + ",lport=" + lport_str
+ stream += ",raddr=" + ra + ",rport=0"
+
+ if mode == 'fwd':
+ stream += ",fwladdr=" + fwd_la + ",fwlport=0,fwraddr=" + fwd_ra
+ stream += ",fwrport=" + fwrport_str
+
+ if mode == 'rx' or mode == 'tx':
+ stream += ",txlen=" + str(txlen)
+
+ print stream
+
+parser = optparse.OptionParser()
+parser.add_option("-b", "--be_lcore_list", dest = "be_lcore_list",
+ help = "BE lcore lists.")
+parser.add_option("-f", "--fe_lcore_list", dest = "fe_lcore_list",
+ help = "FE lcore lists.")
+parser.add_option("-p", "--start_port", dest = "start_port",
+ help = "start port.")
+parser.add_option("-n", "--number_of_streams", dest = "number_of_streams",
+ help = "number of streams.")
+parser.add_option("-m", "--mode", dest = "mode",
+ help = "mode (op, rx, tx, fwd).")
+parser.add_option("-q", "--local_address", dest = "local_address",
+ help = "local_address.")
+parser.add_option("-r", "--remote_address", dest = "remote_address",
+ help = "remote_address.")
+parser.add_option("-s", "--fwd_local_address", dest = "fwd_local_address",
+ help = "fwd_local_address.")
+parser.add_option("-t", "--fwd_remote_address", dest = "fwd_remote_address",
+ help = "fwd_remote_address.")
+parser.add_option("-l", "--txlen", dest = "txlen", help = "txlen.")
+parser.add_option("-4", action = "store_false", dest = "ipv6",
+ help = "IPv4/IPv6")
+parser.add_option("-6", action = "store_true", dest = "ipv6",
+ help = "IPv4/IPv6")
+parser.add_option("-H", action = "store_true", dest = "support_hex",
+ help = "print ports in hexa format")
+
+(options, args) = parser.parse_args()
+
+if len(sys.argv) == 1:
+ print
+ print_usage()
+ print
+ sys.exit()
+
+supported_modes = ['echo', 'rx', 'tx', 'fwd']
+support_hex = 0
+txlen = 72
+
+if options.ipv6 == True:
+ la = '::'
+ ra = '::'
+ fwd_la = '::'
+ fwd_ra = '::'
+else:
+ la = '0.0.0.0'
+ ra = '0.0.0.0'
+ fwd_la = '0.0.0.0'
+ fwd_ra = '0.0.0.0'
+
+if options.support_hex == True:
+ support_hex = 1
+
+if options.txlen != None:
+ txlen = options.txlen
+
+if options.fe_lcore_list != None:
+ felcore_list = list(map(int, options.fe_lcore_list.split(",")))
+ felcore_list.sort()
+else:
+ felcore_list = []
+
+if options.be_lcore_list != None:
+ belcore_list = list(map(int, options.be_lcore_list.split(",")))
+ belcore_list.sort()
+else:
+ print "default BE lcore list = [ 1 ]"
+ belcore_list = [1]
+
+if options.mode != None:
+ mode = options.mode
+ if mode not in supported_modes:
+ print "Supported modes: " + str(supported_modes)
+ print "Provided mode \"" + mode + "\" is not supported. Terminating..."
+ sys.exit()
+else:
+ print "default mode = echo"
+ mode = "echo"
+
+if options.start_port != None:
+ start_port = int(options.start_port)
+else:
+ print "default start_port = 32768"
+ start_port = 32768
+
+if options.number_of_streams != None:
+ number_of_streams = int(options.number_of_streams)
+else:
+ print "default number_of_streams = 1"
+ number_of_streams = 1
+
+fwd_start_port = 53248
+
+if options.local_address != None:
+ la = options.local_address
+
+if options.remote_address != None:
+ ra = options.remote_address
+
+if options.fwd_local_address != None:
+ fwd_la = options.fwd_local_address
+
+if options.fwd_remote_address != None:
+ fwd_ra = options.fwd_remote_address
+
+belcore_count = len(belcore_list)
+align_belcore_count = align_power_of_2(belcore_count)
+nb_bits = int(math.log(align_belcore_count, 2))
+
+felcore_count = len(felcore_list)
+if felcore_count != 0:
+ if number_of_streams % felcore_count == 0:
+ nb_stream_per_flc = number_of_streams / felcore_count
+ else:
+ nb_stream_per_flc = (number_of_streams / felcore_count) + 1
+
+for i in range(start_port, start_port + number_of_streams):
+ k = i - start_port
+ align_belcore_count = align_power_of_2(belcore_count)
+ blc_indx = (i % align_belcore_count) % belcore_count
+ belcore = belcore_list[blc_indx]
+ if felcore_count != 0:
+ flc_indx = k / nb_stream_per_flc
+ felcore = felcore_list[flc_indx]
+ else:
+ felcore = belcore
+
+ print_stream(mode, la, ra, fwd_la, fwd_ra, felcore, belcore, i,
+ fwd_start_port + k, txlen)