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 91E4A454AC; Thu, 20 Jun 2024 19:37:23 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8065942E6D; Thu, 20 Jun 2024 19:37:23 +0200 (CEST) Received: from mail-pg1-f228.google.com (mail-pg1-f228.google.com [209.85.215.228]) by mails.dpdk.org (Postfix) with ESMTP id 406D142E4B for ; Thu, 20 Jun 2024 19:37:10 +0200 (CEST) Received: by mail-pg1-f228.google.com with SMTP id 41be03b00d2f7-6e5fd488d9fso822656a12.3 for ; Thu, 20 Jun 2024 10:37:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iol.unh.edu; s=unh-iol; t=1718905029; x=1719509829; 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=8ZEh229GgjQ6ERkXgNJI96+OBD4IfkZtQ5+dA8bljvw=; b=RmBAnCg0SsX+TO8QvALG8xsL6OzQEbegA9O1Ny2wTXEUf+G9eROK6ZOQos0VIAjtn+ wHPJnsHIDYHwqm5OiAmf5HYTA+YkriCBEzSSZaa+/o1NSo3OriFJFykeNUjf3Vu4wbcu cFCR9OgRVkSZ0zeR2b6M5ieGOoxgZRGwpGl8E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718905029; x=1719509829; 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=8ZEh229GgjQ6ERkXgNJI96+OBD4IfkZtQ5+dA8bljvw=; b=IhKZKFdiSj9Mt+2n1KjpcTonHKayrYQBOq8hi2hYE0Bv7WC1VDz6Yf+urN3xqzgjK1 hOIHC9YlkahTEmZ6a2ytHU+4EHaG66Y6WFrAUbLFchQ8Kb+csfKyXigz5iHEX/vSW9L9 B88DjUyxypwe6Rn3aH1+c4xqKO3uZbBuJYYIuzbgl5cf+8HpniV+gzjzf10ehGaNpyhY Ek0EHWUtdIbZy8/a5qEbSfG4lTEX4eIQNdwT7DpgBkwWMCqtxjKc64wyEnnMs5f/lu+W cubwAn+1qHA4YhkIZqQ8VcMmMKVBm6OprImZVVHbeADOtMtwwal8jD1teGJz3g4QScYm csVw== X-Gm-Message-State: AOJu0Yy5DRz26FOEw5L8NVpkpHBQut/1fx497X36EFSH/BCh6r+7uzA1 cKP5aj4dJcJ+uFljI2/zqb2nzLxHTUUiLr3Fjfcz5KO+5ZY8rXqBJUK6W9l02GL0YiQ3foUF8eE gMlRGH1nY+OGjI1rwNqnyW4BybTBvM5U6 X-Google-Smtp-Source: AGHT+IFZaDkyN4NKShVrb++tvIIj6aZ889mDFGZIdQN71GElKpf5+BRcGDNVvgdCGlM+JJMQb4vnkTYNKYQT X-Received: by 2002:a05:6a20:751a:b0:1b5:b214:efb8 with SMTP id adf61e73a8af0-1bcbb59287dmr6125705637.34.1718905029354; Thu, 20 Jun 2024 10:37:09 -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-6fee39a7aa5sm632731a12.30.2024.06.20.10.37.09 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 20 Jun 2024 10:37:09 -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 1410B605C376; Thu, 20 Jun 2024 13:37:08 -0400 (EDT) From: jspewock@iol.unh.edu To: yoan.picchi@foss.arm.com, juraj.linkes@pantheon.tech, thomas@monjalon.net, Luca.Vizzarro@arm.com, wathsala.vithanage@arm.com, Honnappa.Nagarahalli@arm.com, paul.szczepanek@arm.com, npratte@iol.unh.edu, probb@iol.unh.edu Cc: dev@dpdk.org, Jeremy Spewock Subject: [PATCH v4 2/3] dts: Add missing docstring from XML-RPC server Date: Thu, 20 Jun 2024 13:36:08 -0400 Message-ID: <20240620173609.15375-3-jspewock@iol.unh.edu> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240620173609.15375-1-jspewock@iol.unh.edu> References: <20240501161623.26672-1-jspewock@iol.unh.edu> <20240620173609.15375-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 bf58ad1c5e..c3648134fc 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 + # this is done by starting a Python shell on the remote node + from framework.remote_session import PythonShell + # the example assumes you're already connected to a tg_node + 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.2