[spp] [PATCH 2/3] spp: add validation for patch command
ogawa.yasufumi at lab.ntt.co.jp
ogawa.yasufumi at lab.ntt.co.jp
Mon Jan 29 13:46:50 CET 2018
From: ogawa.yasufumi at lab.ntt.co.jp
From: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
To support patch command with port ID and resource ID, add validation
for format of ID. 'is_patched_ids_valid' method is for checking given
IDs are valid or not.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
src/spp.py | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/spp.py b/src/spp.py
index dda1452..e7ad43b 100755
--- a/src/spp.py
+++ b/src/spp.py
@@ -358,6 +358,8 @@ class Shell(cmd.Cmd):
CMD_NOTREADY = "NOTREADY"
CMD_ERROR = "ERROR"
+ PORT_TYPES = ['phy', 'ring', 'vhost']
+
PRI_CMDS = ['status', 'exit', 'clear']
SEC_CMDS = ['status', 'exit', 'forward', 'stop', 'add', 'patch', 'del']
SEC_SUBCMDS = ['vhost', 'ring']
@@ -427,6 +429,25 @@ class Shell(cmd.Cmd):
print(message)
return self.CMD_NOTREADY, message
+ def is_patched_ids_valid(self, id1, id2, delim=':'):
+ """Check if port IDs are valid
+
+ Supported format is port ID of integer or resource ID such as
+ 'phy:0' or 'ring:1'. Default delimiter ':' can be overwritten
+ by giving 'delim' option.
+ """
+
+ if str.isdigit(id1) and str.isdigit(id2):
+ return True
+ else:
+ ptn = r"\w+\%s\d+" % delim # Match "phy:0" or "ring:1" or so
+ if re.match(ptn, id1) and re.match(ptn, id2):
+ pt1 = id1.split(delim)[0]
+ pt2 = id2.split(delim)[0]
+ if (pt1 in self.PORT_TYPES) and (pt2 in self.PORT_TYPES):
+ return True
+ return False
+
def check_sec_cmds(self, cmds):
"""Validate secondary commands before sending"""
@@ -452,7 +473,7 @@ class Shell(cmd.Cmd):
if str.isdigit(cmdlist[2]):
valid = 1
elif cmdlist[0] == 'patch':
- if str.isdigit(cmdlist[1]) and str.isdigit(cmdlist[2]):
+ if self.is_patched_ids_valid(cmdlist[1], cmdlist[2]):
valid = 1
return valid
--
2.7.4
More information about the spp
mailing list