From patchwork Fri Nov 5 08:26:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Dong X-Patchwork-Id: 103851 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 26198A0C60; Fri, 5 Nov 2021 09:26:46 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F0AD840689; Fri, 5 Nov 2021 09:26:45 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id C3DDA40151 for ; Fri, 5 Nov 2021 09:26:44 +0100 (CET) X-IronPort-AV: E=McAfee;i="6200,9189,10158"; a="230587239" X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="230587239" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Nov 2021 01:26:43 -0700 X-IronPort-AV: E=Sophos;i="5.87,210,1631602800"; d="scan'208";a="501864571" Received: from unknown (HELO dpdk-zhaohy-t.sh.intel.com) ([10.240.183.68]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Nov 2021 01:26:41 -0700 From: "Dong, JunX" To: dts@dpdk.org Cc: PingX.Yu@intel.com, weix.ling@intel.com, junx.dong@intel.com Date: Fri, 5 Nov 2021 16:26:20 +0800 Message-Id: <1636100780-182491-1-git-send-email-junx.dong@intel.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dts] [PATCH V2] framework/*: add dependent module Dot1BR of scapy X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Sender: "dts" Signed-off-by: Dong, JunX --- framework/packet.py | 11 ++++++----- framework/tester.py | 26 ++++++++++++++------------ framework/utils.py | 7 +++++++ 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/framework/packet.py b/framework/packet.py index 633dd36..adfa985 100644 --- a/framework/packet.py +++ b/framework/packet.py @@ -32,11 +32,12 @@ Generic packet create, transmit and analyze module Base on scapy(python program for packet manipulation) """ +import shutil from importlib import import_module from socket import AF_INET6 from scapy.all import * -from .utils import convert_int2ip, convert_ip2int +from .utils import convert_int2ip, convert_ip2int, get_module_path # load extension layers exec_file = os.path.realpath(__file__) @@ -47,12 +48,13 @@ TMP_PATH = DTS_PATH[:-1] + '/output/tmp/pcap/' if exec_file.endswith('.pyc') els if not os.path.exists(TMP_PATH): os.system('mkdir -p %s' % TMP_PATH) -# add /tmp/dep to sys.path -sys.path.append('/tmp/dep') +# copy dep/Dot1BR to scapy +_contrib_module_path = get_module_path('scapy.contrib') +shutil.copy(DTS_PATH + '/dep/scapy_modules/Dot1BR.py', _contrib_module_path) scapy_modules_required = {'scapy.contrib.gtp': ['GTP_U_Header', 'GTPPDUSessionContainer'], 'scapy.contrib.lldp': ['LLDPDU', 'LLDPDUManagementAddress'], - 'Dot1BR': ['Dot1BR'], + 'scapy.contrib.Dot1BR': ['Dot1BR'], 'scapy.contrib.pfcp': ['PFCP'], 'scapy.contrib.nsh': ['NSH'], 'scapy.contrib.igmp': ['IGMP'], @@ -73,7 +75,6 @@ def get_scapy_module_impcmd(): cmd_li.append(f'from {m} import {",".join(scapy_modules_required[m])}') return ';'.join(cmd_li) -SCAPY_IMP_CMD = get_scapy_module_impcmd() # packet generator type should be configured later PACKETGEN = "scapy" diff --git a/framework/tester.py b/framework/tester.py index 9dba4e4..9b764e8 100644 --- a/framework/tester.py +++ b/framework/tester.py @@ -46,9 +46,9 @@ from .config import PktgenConf from .crb import Crb from .exception import ParameterInvalidException from .packet import ( - SCAPY_IMP_CMD, - Packet, compare_pktload, + get_scapy_module_impcmd, + Packet, start_tcpdump, stop_and_load_tcpdump_packets, strip_pktload, @@ -92,7 +92,6 @@ class Tester(Crb): self.bgItf = '' self.re_run_time = 0 self.pktgen = None - self.tmp_scapy_module_dir = '/tmp/dep' # prepare for scapy env self.scapy_sessions_li = list() self.scapy_session = self.prepare_scapy_env() @@ -109,17 +108,20 @@ class Tester(Crb): session.send_expect('scapy', '>>> ') file_dir = os.path.dirname(__file__).split(os.path.sep) lib_path = os.path.sep.join(file_dir[:-1]) + '/dep/scapy_modules/' - exists_flag = self.alt_session.session.send_expect(f'ls {self.tmp_scapy_module_dir}', '# ', verify=True) - if exists_flag == 2: - self.alt_session.session.send_expect(f'mkdir -p {self.tmp_scapy_module_dir}', '# ', verify=True) - scapy_modules_path = [lib_path+i for i in os.listdir(lib_path) if i.endswith('.py')] - path = ' '.join(scapy_modules_path) - session.copy_file_to(src=path, dst=self.tmp_scapy_module_dir) - session.session.send_expect(f"sys.path.append('{self.tmp_scapy_module_dir}')", ">>> ") - - out = session.session.send_expect(SCAPY_IMP_CMD, '>>> ') + + # get contrib module path on tester + scapy_module_path = session.session.send_expect("os.path.dirname(sys.modules['scapy'].__file__)", '>>>') + contrib_module_path = scapy_module_path.replace("'", "") + '/contrib' + + # copy scapy module to tester + scapy_dep_module_path = lib_path + 'Dot1BR.py' + session.copy_file_to(src=scapy_dep_module_path, dst=contrib_module_path) + + # import scapy moudle to scapy APP + out = session.session.send_expect(get_scapy_module_impcmd(), '>>> ') if 'ImportError' in out: session.logger.warning(f'entering import error: {out}') + return session def check_scapy_version(self): diff --git a/framework/utils.py b/framework/utils.py index 7075919..269bfbb 100644 --- a/framework/utils.py +++ b/framework/utils.py @@ -308,3 +308,10 @@ def check_dts_python_version(): "it is deprecated for use in DTS, " "and will not work in future releases.")), file=sys.stderr) print(RED("Please use Python >= 3.6.9 instead"), file=sys.stderr) + +def get_module_path(module_name): + from importlib import import_module + _module = import_module(module_name) + _module_file_path = _module.__file__ + del _module + return os.path.dirname(_module_file_path)