From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mogw0403.ocn.ad.jp (mogw0403.ocn.ad.jp [118.23.109.31]) by dpdk.org (Postfix) with ESMTP id D150B1D8F9 for ; Fri, 15 Jun 2018 10:38:05 +0200 (CEST) Received: from mf-smf-ucb025c1 (mf-smf-ucb025c1.ocn.ad.jp [153.153.66.163]) by mogw0403.ocn.ad.jp (Postfix) with ESMTP id 7EF241CC2C7; Fri, 15 Jun 2018 17:38:04 +0900 (JST) Received: from ntt.pod01.mv-mta-ucb023 ([153.149.142.86]) by mf-smf-ucb025c1 with ESMTP id TkF9fS6Xo2qCXTkFAfaMUl; Fri, 15 Jun 2018 17:38:04 +0900 Received: from smtp.ocn.ne.jp ([153.149.227.166]) by ntt.pod01.mv-mta-ucb023 with id ywe41x00F3c2f7501we4fZ; Fri, 15 Jun 2018 08:38:04 +0000 Received: from localhost.localdomain (p5164-ipngn8501marunouchi.tokyo.ocn.ne.jp [153.214.228.164]) by smtp.ocn.ne.jp (Postfix) with ESMTPA; Fri, 15 Jun 2018 17:38:04 +0900 (JST) From: ogawa.yasufumi@lab.ntt.co.jp To: ferruh.yigit@intel.com, spp@dpdk.org Cc: Yasufumi Ogawa Date: Fri, 15 Jun 2018 17:37:47 +0900 Message-Id: <20180615083754.20220-9-ogawa.yasufumi@lab.ntt.co.jp> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180615083754.20220-1-ogawa.yasufumi@lab.ntt.co.jp> References: <20180615083754.20220-1-ogawa.yasufumi@lab.ntt.co.jp> Subject: [spp] [PATCH 08/15] tools/sppc: add l2fwd app continer X-BeenThere: spp@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Soft Patch Panel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Jun 2018 08:38:06 -0000 From: Yasufumi Ogawa Signed-off-by: Yasufumi Ogawa --- tools/sppc/app/l2fwd.py | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 tools/sppc/app/l2fwd.py diff --git a/tools/sppc/app/l2fwd.py b/tools/sppc/app/l2fwd.py new file mode 100755 index 0000000..3b7789c --- /dev/null +++ b/tools/sppc/app/l2fwd.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2018 Nippon Telegraph and Telephone Corporation + +import argparse +import os +import subprocess +import sys + +work_dir = os.path.dirname(__file__) +sys.path.append(work_dir + '/..') +from conf import env +from lib import app_helper +from lib import common + +target_name = 'dpdk' + + +def parse_args(): + parser = argparse.ArgumentParser( + description="Launcher for l2fwd application container") + + parser = app_helper.add_eal_args(parser) + parser = app_helper.add_appc_args(parser) + + # Application specific args + parser.add_argument( + '-p', '--port-mask', + type=str, + help="Port mask") + + parser = app_helper.add_sppc_args(parser) + return parser.parse_args() + + +def main(): + args = parse_args() + + # Check for other mandatory opitons. + if args.port_mask is None: + common.error_exit('--port-mask') + if args.dev_ids is None: + common.error_exit('--dev-ids') + + # Setup for vhost devices with given device IDs. + dev_ids_list = app_helper.dev_ids_to_list(args.dev_ids) + sock_files = app_helper.sock_files(dev_ids_list) + + # Setup docker command. + docker_cmd = ['sudo', 'docker', 'run', '\\'] + docker_opts = app_helper.setup_docker_opts( + args, target_name, sock_files) + + # Check if the number of ports is even for l2fwd. + nof_ports = app_helper.count_ports(args.port_mask) + if (nof_ports % 2) != 0: + print("Error: Number of ports must be an even number!") + exit() + + # Setup l2fwd command run on container. + cmd_path = '%s/examples/l2fwd/%s/l2fwd' % ( + env.RTE_SDK, env.RTE_TARGET) + + l2fwd_cmd = [cmd_path, '\\'] + + file_prefix = 'spp-l2fwd-container%d' % dev_ids_list[0] + eal_opts = app_helper.setup_eal_opts(args, file_prefix) + + l2fwd_opts = ['-p', args.port_mask, '\\'] + + # Parse vhost device IDs and Check the number of devices is + # sufficient for port mask. + if app_helper.is_sufficient_dev_ids( + args.dev_ids, args.port_mask) is not True: + print("Error: Cannot reserve ports '%s (= 0b%s)' on '%s'." % ( + args.port_mask, + format(int(args.port_mask, 16), 'b'), + args.dev_ids)) + exit() + + cmds = docker_cmd + docker_opts + l2fwd_cmd + eal_opts + l2fwd_opts + if cmds[-1] == '\\': + cmds.pop() + common.print_pretty_commands(cmds) + + if args.dry_run is True: + exit() + + # Remove delimiters for print_pretty_commands(). + while '\\' in cmds: + cmds.remove('\\') + subprocess.call(cmds) + + +if __name__ == '__main__': + main() -- 2.17.1