From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CD645A0471 for ; Tue, 16 Jul 2019 09:31:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C71DF37B0; Tue, 16 Jul 2019 09:31:07 +0200 (CEST) Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by dpdk.org (Postfix) with ESMTP id 71A6337B0 for ; Tue, 16 Jul 2019 09:31:06 +0200 (CEST) Received: by mail-pl1-f182.google.com with SMTP id ay6so9642067plb.9 for ; Tue, 16 Jul 2019 00:31:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=zfeUZeJ3pnQeEo9M/I2Enf/OCDWQvQmiE5ks8sPtMJw=; b=mrTb3M82Ti5ojRCSee5gpAnGCTp98lereaaPZB9ebNAd+Ps4Z8Wy2p3BomUuCUwUEJ dZ7JTNlVvWSui3ixyQZn+ZdUNSPec2jA1tnUUyqkgXEdW8b8cXdcLn5mKJyfGvob7jwH 4Z670+m2z82VrQ74TyPLMxCpMFs1Qz24kkrAs7jUTxrdoHW6wr1cNmh4gaexrDo7BM3n UmupV8rxxQb6Pi0gYRDi7Pe8I4NZUlbvWMMoO2DB6svluivhZN9eIyY6tn2ZxajYmnj0 MKktwMoX9b5eLQhjTBs/ww/R1I6S37bPbuRq0EATMqAYzDPYZ30CannuJoWhoJgDHrhK kx4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=zfeUZeJ3pnQeEo9M/I2Enf/OCDWQvQmiE5ks8sPtMJw=; b=fTc4LA7c7yBFiXxTaHFr52SPybMcVHMs6XXycS6/aLFPtUcYQN4X7cPi5elIcaxATz fBmMl+luAroqSkdmVD9PtaQR1cilg3A26CdCy6mshJmyL+lu/FyU30YtDhOeMBZirZGq fOFbrBNocNhjV2VUrXVSghQNKgYO+fAhxESPDdBrFUDf+ZWymdnPuqarG+MIbWglZInO ZpxwpkUr7zUMpxE0sTRJ3kpBH1sXov1Fo6Px8rO2auNKtifQA7zufjWuw5IYQyKZnrgs H5LzA/vy1z/X4GCYic6azYMXM3+F1Ep01ToNlyZ/DvXaNWc0a8/2TeIQAygYp25ARyUY sUrg== X-Gm-Message-State: APjAAAVysrqCnXPjXE/yIQX8woCacKwdJdOGxDCn9pXdcRh9NLoyH3kE D3yuSpSBy08JM8Xm4cHAFXWvbHsu X-Google-Smtp-Source: APXvYqweumTVsmTxxlDASFjYMWGPS/ZEb4iJK5ZUjswc9UexKwvgtKv0NfEtY6h5QdKE+GK5AdjC6g== X-Received: by 2002:a17:902:830c:: with SMTP id bd12mr34145609plb.237.1563262265604; Tue, 16 Jul 2019 00:31:05 -0700 (PDT) Received: from localhost.localdomain ([192.47.164.146]) by smtp.gmail.com with ESMTPSA id 185sm20086849pfd.125.2019.07.16.00.31.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 16 Jul 2019 00:31:05 -0700 (PDT) From: yasufum.o@gmail.com To: spp@dpdk.org, ferruh.yigit@intel.com, yasufum.o@gmail.com Date: Tue, 16 Jul 2019 16:30:57 +0900 Message-Id: <20190716073057.18821-3-yasufum.o@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190716073057.18821-1-yasufum.o@gmail.com> References: <20190716073057.18821-1-yasufum.o@gmail.com> Subject: [spp] [PATCH 2/2] spp-ctl: add port add and del APIs for spp_primary 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: , Errors-To: spp-bounces@dpdk.org Sender: "spp" From: Yasufumi Ogawa This update is to add REST APIs for adding ro deleting to spp_primary. Here is an example for adding `vhost:1`. $ curl -X PUT -H 'application/json' -d \ '{"action": "add", "port": "vhost:1"}' \ http://127.0.0.1:7777/v1/primary/ports Signed-off-by: Yasufumi Ogawa --- src/spp-ctl/spp_proc.py | 8 ++++++++ src/spp-ctl/spp_webapi.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/spp-ctl/spp_proc.py b/src/spp-ctl/spp_proc.py index fe7ecea..2bc14e6 100644 --- a/src/spp-ctl/spp_proc.py +++ b/src/spp-ctl/spp_proc.py @@ -292,6 +292,14 @@ class PrimaryProc(SppProc): def clear(self): return "clear" + @exec_command + def port_add(self, port): + return "add {port}".format(**locals()) + + @exec_command + def port_del(self, port): + return "del {port}".format(**locals()) + @exec_command def do_launch_sec_proc(self, args): proc_name = args['proc_name'] diff --git a/src/spp-ctl/spp_webapi.py b/src/spp-ctl/spp_webapi.py index 7f2baad..89b188a 100644 --- a/src/spp-ctl/spp_webapi.py +++ b/src/spp-ctl/spp_webapi.py @@ -452,6 +452,8 @@ class V1PrimaryHandler(BaseHandler): def set_route(self): self.route('/status', 'GET', callback=self.get_status) self.route('/status', 'DELETE', callback=self.clear_status) + self.route('/ports', 'PUT', + callback=self.primary_port) self.route('/launch', 'PUT', callback=self.launch_sec_proc) self.route('/', 'DELETE', callback=self.pri_exit) @@ -478,6 +480,24 @@ class V1PrimaryHandler(BaseHandler): proc = self._get_proc() proc.clear() + # TODO(yasufum) change name and make it to shared method + def _validate_nfv_port(self, body): + for key in ['action', 'port']: + if key not in body: + raise KeyRequired(key) + if body['action'] not in ["add", "del"]: + raise KeyInvalid('action', body['action']) + self._validate_port(body['port']) + + def primary_port(self, body): + self._validate_nfv_port(body) + proc = self._get_proc() + + if body['action'] == "add": + proc.port_add(body['port']) + else: + proc.port_del(body['port']) + def launch_sec_proc(self, body): # the arg should be "body" for key in ['client_id', 'proc_name', 'eal', 'app']: if key not in body: -- 2.17.1