From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mogw1133.ocn.ad.jp (mogw1133.ocn.ad.jp [153.149.229.34]) by dpdk.org (Postfix) with ESMTP id AA0C54C93 for ; Mon, 12 Mar 2018 06:35:42 +0100 (CET) Received: from mf-smf-ucb027c2 (mf-smf-ucb027c2.ocn.ad.jp [153.153.66.170]) by mogw1133.ocn.ad.jp (Postfix) with ESMTP id 2A55EE80269; Mon, 12 Mar 2018 14:35:41 +0900 (JST) Received: from ntt.pod01.mv-mta-ucb027 ([153.149.142.101]) by mf-smf-ucb027c2 with ESMTP id vG7TeJjmDfxiGvG7ZeMSm6; Mon, 12 Mar 2018 14:35:41 +0900 Received: from smtp.ocn.ne.jp ([153.149.227.165]) by ntt.pod01.mv-mta-ucb027 with id Ltbg1x00G3akymp01tbg6c; Mon, 12 Mar 2018 05:35:41 +0000 Received: from linaloe.flets-east.jp (sp1-66-103-93.msc.spmode.ne.jp [1.66.103.93]) by smtp.ocn.ne.jp (Postfix) with ESMTPA; Mon, 12 Mar 2018 14:35:40 +0900 (JST) From: ogawa.yasufumi@lab.ntt.co.jp To: spp@dpdk.org, ferruh.yigit@intel.com Cc: Yasufumi Ogawa Date: Mon, 12 Mar 2018 14:35:23 +0900 Message-Id: <1520832924-28387-9-git-send-email-ogawa.yasufumi@lab.ntt.co.jp> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520832924-28387-1-git-send-email-ogawa.yasufumi@lab.ntt.co.jp> References: <8b08be87-6b64-8a4a-53e0-29269011d81c@lab.ntt.co.jp> <1520832924-28387-1-git-send-email-ogawa.yasufumi@lab.ntt.co.jp> Subject: [spp] [PATCH 8/9] controller: update topo command 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: Mon, 12 Mar 2018 05:35:43 -0000 From: Yasufumi Ogawa Update topo and topo_subgraph commands for parsing port status which is changed for 18.02. Signed-off-by: Yasufumi Ogawa --- src/controller/shell.py | 50 +++++++++++++++++++++++++++++++++++++------------ src/controller/topo.py | 9 +++++++++ 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/controller/shell.py b/src/controller/shell.py index c379c2a..ea5e8a9 100644 --- a/src/controller/shell.py +++ b/src/controller/shell.py @@ -89,20 +89,46 @@ class Shell(cmd.Cmd, object): print ("Connected secondary id: %d" % i) def print_sec_status(self, msg): - msg = msg.replace("\x00", "") # remove null chars in msg from sec - status, ports = msg.split("\n") - res = "%s\nports:\n" % status + """Parse and print message from SPP secondary + + The format of sent message is expected as YAML like format as + + status: idling\nports: 'phy:0-phy:1,phy:1-null'\x00\x00.. + + 'ports' is a set of combinations of patches. The value is + encapsulated with "'" and ended series of null character "\x00". + If the destination is not defined, null is assigned. + """ + + msg = msg.replace("\x00", "").replace("'", "") # clean sec's msg + sec_attr = msg.split("\n") + + # Do nothing if returned msg is not valid format. + if len(sec_attr) < 2: + return None + + status = sec_attr[0] + ports = sec_attr[1] + + # Printed result to which port info is appended. + res = status + port_list = ports.split(' ')[1].split(',') + if port_list[0] == '': # port_list is [''] if there are no ports + res = '%s\nports: "no ports"' % res + else: + res = "%s\nports:\n" % res + tmp_list = [] + for port_ent in port_list: + if '-' in port_ent: + p1, p2 = port_ent.split('-') + if p2 == 'null': + tmp_list.append(" - '%s'" % p1) + else: + tmp_list.append(" - '%s -> %s'" % (p1, p2)) + tmp_list.sort() + res += "\n".join(tmp_list) - tmp = [] - for p in port_list: - p1, p2 = p.split('-') - if p2 == 'null': - tmp.append(" - '%s'" % p1) - else: - tmp.append(" - '%s -> %s'" % (p1, p2)) - tmp.sort() - res += "\n".join(tmp) print(res) def command_primary(self, command): diff --git a/src/controller/topo.py b/src/controller/topo.py index 0fc529b..76dd54f 100644 --- a/src/controller/topo.py +++ b/src/controller/topo.py @@ -96,6 +96,8 @@ class Topo(object): # parse status message from sec. for sec in sec_list: + if sec is None: + continue for port in sec["ports"]: if port["iface"]["type"] == "phy": phys.append(port) @@ -313,6 +315,10 @@ class Topo(object): } """ + # Clean sec stat message + stat = stat.replace("\x00", "") + stat = stat.replace("'", "") + stat_obj = yaml.load(stat) res = {} res['sec_id'] = sec_id @@ -320,6 +326,9 @@ class Topo(object): port_list = [] try: + if stat_obj['ports'] is None: + return None + ports = stat_obj['ports'].split(',') for port_info in ports: rid, outport = port_info.split('-') -- 2.7.4