@@ -1,3 +1,4 @@
+import socket
import sysfs
class Xprt:
@@ -34,6 +35,12 @@ class Xprt:
return "xprt %s: %s, %s%s" % (self.id, self.type, self.dstaddr,
f" [main]" if self.main_xprt else "" )
+ def set_dstaddr(self, newaddr):
+ resolved = socket.gethostbyname(newaddr)
+ with open(self.path / "dstaddr", 'w') as f:
+ f.write(resolved)
+ self.dstaddr = open(self.path / "dstaddr", 'r').readline().strip()
+
def list_xprts(args):
xprts = [ Xprt(f) for f in (sysfs.SUNRPC / "xprt-switches").glob("**/xprt-*") ]
@@ -42,7 +49,28 @@ def list_xprts(args):
if args.id == None or xprt.id == args.id[0]:
print(xprt)
+def get_xprt(id):
+ xprts = [ Xprt(f) for f in (sysfs.SUNRPC / "xprt-switches").glob("**/xprt-*") ]
+ for xprt in xprts:
+ if xprt.id == id:
+ return xprt
+
+def set_xprt_property(args):
+ xprt = get_xprt(args.id[0])
+ try:
+ if args.dstaddr != None:
+ xprt.set_dstaddr(args.dstaddr[0])
+ print(xprt)
+ except Exception as e:
+ print(e)
+
def add_command(subparser):
parser = subparser.add_parser("xprt", help="Commands for individual xprts")
parser.add_argument("--id", metavar="ID", nargs=1, type=int, help="Id of a specific xprt to show")
parser.set_defaults(func=list_xprts)
+
+ subparser = parser.add_subparsers()
+ 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.set_defaults(func=set_xprt_property)