aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorKonstantin Ananyev <konstantin.ananyev@intel.com>2016-09-12 22:50:01 +0000
committerGerrit Code Review <gerrit@fd.io>2016-09-12 22:50:01 +0000
commit32c9eda3c096e3ece19591f92b1d6fe65fc53881 (patch)
tree3234e90d3856acaa1992c83df78de1a79877dca2 /examples
parent55aba2fc5df4dbff80c3eb5c38b0b965cd826936 (diff)
parenta1fc5816d7fbb1093464ee38e505e308effa7f1b (diff)
Merge "added Python script to generate streams for fe.cfg file"
Diffstat (limited to 'examples')
-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)