From a1fc5816d7fbb1093464ee38e505e308effa7f1b Mon Sep 17 00:00:00 2001 From: Mohammad Abdul Awal Date: Tue, 6 Sep 2016 14:42:17 +0100 Subject: 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 --- examples/udpfwd/gen_fe_cfg.py | 199 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100755 examples/udpfwd/gen_fe_cfg.py (limited to 'examples') 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) -- cgit 1.2.3-korg