@@ -8,15 +8,18 @@ class Xprt:
self.type = str(path).rsplit("-", 2)[2]
self.dstaddr = open(path / "dstaddr", 'r').readline().strip()
self.srcaddr = open(path / "srcaddr", 'r').readline().strip()
+ self.exists = True
- with open(path / "xprt_state") as f:
- self.state = ','.join(f.readline().split()[1:])
+ self.read_state()
self.__dict__.update(sysfs.read_info_file(path / "xprt_info"))
def __lt__(self, rhs):
return self.id < rhs.id
def __str__(self):
+ if not self.exists:
+ return "xprt %s: has been removed" % self.id
+
state = self.state
if self.main_xprt:
state = "MAIN," + self.state
@@ -31,6 +34,13 @@ class Xprt:
(self.binding_q_len, self.sending_q_len, self.pending_q_len, self.backlog_q_len, self.tasks_queuelen)
return line
+ def read_state(self):
+ if not self.path.exists():
+ self.exists = False
+ return
+ with open(self.path / "xprt_state") as f:
+ self.state = ','.join(f.readline().split()[1:])
+
def small_str(self):
return "xprt %s: %s, %s%s" % (self.id, self.type, self.dstaddr,
f" [main]" if self.main_xprt else "" )
@@ -41,6 +51,11 @@ class Xprt:
f.write(resolved)
self.dstaddr = open(self.path / "dstaddr", 'r').readline().strip()
+ def set_state(self, state):
+ with open(self.path / "xprt_state", 'w') as f:
+ f.write(state)
+ self.read_state()
+
def list_xprts(args):
xprts = [ Xprt(f) for f in (sysfs.SUNRPC / "xprt-switches").glob("**/xprt-*") ]
@@ -60,6 +75,13 @@ def set_xprt_property(args):
try:
if args.dstaddr != None:
xprt.set_dstaddr(args.dstaddr[0])
+ if args.offline:
+ xprt.set_state("offline")
+ elif args.online:
+ xprt.set_state("online")
+ elif args.remove:
+ xprt.set_state("offline")
+ xprt.set_state("remove")
print(xprt)
except Exception as e:
print(e)
@@ -73,4 +95,7 @@ def add_command(subparser):
parser = subparser.add_parser("set", help="Set an xprt property")
parser.add_argument("--id", metavar="ID", nargs=1, type=int, required=True, help="Id of a specific xprt to modify")
parser.add_argument("--dstaddr", metavar="dstaddr", nargs=1, type=str, help="New dstaddr to set")
+ parser.add_argument("--offline", action="store_true", help="Set an xprt offline")
+ parser.add_argument("--online", action="store_true", help="Set an offline xprt back online")
+ parser.add_argument("--remove", action="store_true", help="Remove an xprt")
parser.set_defaults(func=set_xprt_property)