From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 177A2440E3; Wed, 29 May 2024 21:49:42 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 479B0406B4; Wed, 29 May 2024 21:49:35 +0200 (CEST) Received: from mail-il1-f226.google.com (mail-il1-f226.google.com [209.85.166.226]) by mails.dpdk.org (Postfix) with ESMTP id 0B9E440273 for ; Wed, 29 May 2024 21:49:32 +0200 (CEST) Received: by mail-il1-f226.google.com with SMTP id e9e14a558f8ab-3738e997f0bso336445ab.1 for ; Wed, 29 May 2024 12:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1717012171; x=1717616971; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=usOJ8+7c02S9wufau6zyRL5lBAy2ZOG+AzV41Ky0epQ=; b=gTA3cst24o4X9fpWGsuLTM9hWntgBC+Bqlzn8Dy5XIvIrEhnFDuvlKIU//FrCZn+Oc V7341wup+idHkWrfUJLFweUxJa/wpgo1/sjo42pcpfTOaG8N4coNDkL7mJn1zzskEYW7 jsvWzmTH4auCy1MavLHoTm1kg7VsdD0DLuHuI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717012171; x=1717616971; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=usOJ8+7c02S9wufau6zyRL5lBAy2ZOG+AzV41Ky0epQ=; b=XrH0lPfHpljWII/DRTXLyGJ4VoqtDaGftDSfg/n2HihQ/bKfgTp+7CLwBqT4EWPflX MMIyERG6yJJ6tUA4Sw29N+WGMyxm8hBGBBbrOQektDOs/qTdbp2BhaFWo5/Vnf7Gr7CT W/5gw1kego/qCuJ8vjleA7HfVXh8Cpl8nASLFxmANVR0mVHV/KIdDGhid7+Iq9C/KKQV CDoAz8CdVm510VOS26NUYDZ9MNwRwD71mzVrL8UBm6zcOeOiQoVmazlIzlbwDKF11h6L sxvSWcGIVJhxJc3CwRX3wu0ZadvX6A/lkAaJeO6HnqHpRTqx1iYJap9/vqxIUnOA0nJE tn7Q== X-Gm-Message-State: AOJu0YzsZoeUPKvRrFZOUg5trahLQnINOnlQ78SosaZyw/3jdTiuLOH+ ZJ3gmdgdi2LGad+5+od5m6A4sWrsDjKIhTuGO4JcAEfi9lv+46zPfJXB76Ng7FtfecD8HfGMuoE jgz/r0YPyli4GvbciGyhxQgbGXpbojgZM X-Google-Smtp-Source: AGHT+IFiC3axYmlRAyTGl4vKlrcbw4Fq0HzJ5r9kJbCYIbz1GmkBVTrmV5O/uj6W5x82djMCToxjM9XGBMKI X-Received: by 2002:a05:6e02:12e4:b0:374:4edd:1fd2 with SMTP id e9e14a558f8ab-3744edd20c1mr127136265ab.28.1717012171365; Wed, 29 May 2024 12:49:31 -0700 (PDT) Received: from postal.iol.unh.edu (postal.iol.unh.edu. [132.177.123.84]) by smtp-relay.gmail.com with ESMTPS id 41be03b00d2f7-682274bb94asm1231894a12.33.2024.05.29.12.49.31 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 May 2024 12:49:31 -0700 (PDT) X-Relaying-Domain: iol.unh.edu Received: from iol.unh.edu (unknown [IPv6:2606:4100:3880:1257::1083]) by postal.iol.unh.edu (Postfix) with ESMTP id 346D7605C373; Wed, 29 May 2024 15:49:30 -0400 (EDT) From: jspewock@iol.unh.edu To: paul.szczepanek@arm.com, wathsala.vithanage@arm.com, probb@iol.unh.edu, npratte@iol.unh.edu, Luca.Vizzarro@arm.com, thomas@monjalon.net, juraj.linkes@pantheon.tech, Honnappa.Nagarahalli@arm.com, yoan.picchi@foss.arm.com Cc: dev@dpdk.org, Jeremy Spewock Subject: [PATCH v3 2/3] dts: Add missing docstring from XML-RPC server Date: Wed, 29 May 2024 15:49:09 -0400 Message-ID: <20240529194910.26803-3-jspewock@iol.unh.edu> X-Mailer: git-send-email 2.45.1 In-Reply-To: <20240529194910.26803-1-jspewock@iol.unh.edu> References: <20240501161623.26672-1-jspewock@iol.unh.edu> <20240529194910.26803-1-jspewock@iol.unh.edu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Jeremy Spewock When this XML-RPC server implementation was added, the docstring had to be shortened in order to reduce the chances of this race condition being encountered. Now that this race condition issue is resolved, the full docstring can be restored. Signed-off-by: Jeremy Spewock --- .../testbed_model/traffic_generator/scapy.py | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/dts/framework/testbed_model/traffic_generator/scapy.py b/dts/framework/testbed_model/traffic_generator/scapy.py index df3069d516..d0e0a7c64e 100644 --- a/dts/framework/testbed_model/traffic_generator/scapy.py +++ b/dts/framework/testbed_model/traffic_generator/scapy.py @@ -128,9 +128,53 @@ def scapy_send_packets(xmlrpc_packets: list[xmlrpc.client.Binary], send_iface: s class QuittableXMLRPCServer(SimpleXMLRPCServer): - """Basic XML-RPC server. + r"""Basic XML-RPC server. The server may be augmented by functions serializable by the :mod:`marshal` module. + + Example: + :: + + def hello_world(): + # to be sent to the XML-RPC server + print("Hello World!") + + # start the XML-RPC server on the remote node + # the example assumes you're already connect to a tg_node + # this is done by starting a Python shell on the remote node + from framework.remote_session import PythonShell + session = tg_node.create_interactive_shell(PythonShell, timeout=5, privileged=True) + + # then importing the modules needed to run the server + # and the modules for any functions later added to the server + session.send_command("import xmlrpc") + session.send_command("from xmlrpc.server import SimpleXMLRPCServer") + + # sending the source code of this class to the Python shell + from xmlrpc.server import SimpleXMLRPCServer + src = inspect.getsource(QuittableXMLRPCServer) + src = "\n".join([l for l in src.splitlines() if not l.isspace() and l != ""]) + spacing = "\n" * 4 + session.send_command(spacing + src + spacing) + + # then starting the server with: + command = "s = QuittableXMLRPCServer(('0.0.0.0', {listen_port}));s.serve_forever()" + session.send_command(command, "XMLRPC OK") + + # now the server is running on the remote node and we can add functions to it + # first connect to the server from the execution node + import xmlrpc.client + server_url = f"http://{tg_node.config.hostname}:8000" + rpc_server_proxy = xmlrpc.client.ServerProxy(server_url) + + # get the function bytes to send + import marshal + function_bytes = marshal.dumps(hello_world.__code__) + rpc_server_proxy.add_rpc_function(hello_world.__name__, function_bytes) + + # now we can execute the function on the server + xmlrpc_binary_recv: xmlrpc.client.Binary = rpc_server_proxy.hello_world() + print(str(xmlrpc_binary_recv)) """ def __init__(self, *args, **kwargs): -- 2.45.1