def do_print(out,s): """Special printing for some things to look like libib.""" if isinstance(s,IBA.SANodeRecord): ninf = s.nodeInfo; desc = s.nodeDescription; s.nodeInfo = None; s.nodeDescription = None; if _format_args.get("name_map") is not None: args = copy.copy(_format_args); args["column"] = 24; else: args = _format_args; s.printer(out,**args); ninf.printer(out,**args); print >> out,"NodeDescription%s%s"%( "."*(args.get("column",33) - 15), IBA_describe.dstr(IBA_describe.description(desc.nodeString))); elif isinstance(s,IBA.SAPortInfoRecord): pinf = s.portInfo; s.portInfo = None; print "\tRID:" s.printer(out,**_format_args); print "\tPortInfo dump:" if _format_args.get("name_map") is not None: args = copy.copy(_format_args); args["name_map"] = libib_name_map_smpquery; args["colon"] = True; args["column"] = 33; else: args = _format_args; pinf.printer(out,**args); elif isinstance(s,IBA.SASwitchInfoRecord): sinf = s.switchInfo; s.switchInfo = None; print "\tRID:" s.printer(out,**_format_args); print "\tSwitchInfo dump:" if _format_args.get("name_map") is not None: args = copy.copy(_format_args); args["name_map"] = libib_name_map_smpquery; args["colon"] = True; args["column"] = 33; else: args = _format_args; sinf.printer(out,**args); elif isinstance(s,IBA.SAMulticastForwardingTableRecord): ft = s.multicastForwardingTable.portMaskBlock; s.multicastForwardingTable = None; s.printer(out,**_format_args); print >> out,"MFT:" print >> out,"MLID\tPort Mask" for I,v in enumerate(ft): print >> out,"0x%x\t0x%x"%(IBA.LID_MULTICAST + I + s.blockNum*32,v); elif isinstance(s,IBA.SALinearForwardingTableRecord): ft = s.linearForwardingTable.portBlock; s.linearForwardingTable = None; s.printer(out,**_format_args); print >> out,"LFT:" print >> out,"LID\tPort Number" for I,v in enumerate(ft): print >> out,"%u\t%u"%(I + s.blockNum*64,v); elif isinstance(s,IBA.SAPKeyTableRecord): pk = s.PKeyTable.PKeyBlock; s.PKeyTable = None; s.printer(out,**_format_args); print >> out,"PKey Table:" for num,I in enumerate(pk): if num % 8 == 0: if num != 0: print >> out; print >> out,"0x%04x"%(I), print >> out; elif isinstance(s,IBA.SAVLArbitrationTableRecord): vl = s.VLArbitrationTable.VLWeightBlock; s.VLArbitrationTable = None; s.printer(out,**_format_args); print >> out, "VL :" + "|".join(("%2u"%((I >> 8) & 0xF)) for I in vl[:16]) + "|"; print >> out, "Weight:" + "|".join(("%2u"%(I & 0xFF)) for I in vl[:16]) + "|"; print >> out, "VL :" + "|".join(("%2u"%((I >> 8) & 0xF)) for I in vl[16:]) + "|"; print >> out, "Weight:" + "|".join(("%2u"%(I & 0xFF)) for I in vl[16:]) + "|"; else: s.printer(out,**_format_args);
def set_desc(self, nodeString): """Set the description from a *nodeString* type value.""" self.desc = IBA_describe.description(nodeString)
def do_print(out, s): """Special printing for some things to look like libib.""" if isinstance(s, IBA.SANodeRecord): ninf = s.nodeInfo desc = s.nodeDescription s.nodeInfo = None s.nodeDescription = None if _format_args.get("name_map") is not None: args = copy.copy(_format_args) args["column"] = 24 else: args = _format_args s.printer(out, **args) ninf.printer(out, **args) print >> out, "NodeDescription%s%s" % ( "." * (args.get("column", 33) - 15), IBA_describe.dstr(IBA_describe.description(desc.nodeString))) elif isinstance(s, IBA.SAPortInfoRecord): pinf = s.portInfo s.portInfo = None print "\tRID:" s.printer(out, **_format_args) print "\tPortInfo dump:" if _format_args.get("name_map") is not None: args = copy.copy(_format_args) args["name_map"] = libib_name_map_smpquery args["colon"] = True args["column"] = 33 else: args = _format_args pinf.printer(out, **args) elif isinstance(s, IBA.SASwitchInfoRecord): sinf = s.switchInfo s.switchInfo = None print "\tRID:" s.printer(out, **_format_args) print "\tSwitchInfo dump:" if _format_args.get("name_map") is not None: args = copy.copy(_format_args) args["name_map"] = libib_name_map_smpquery args["colon"] = True args["column"] = 33 else: args = _format_args sinf.printer(out, **args) elif isinstance(s, IBA.SAMulticastForwardingTableRecord): ft = s.multicastForwardingTable.portMaskBlock s.multicastForwardingTable = None s.printer(out, **_format_args) print >> out, "MFT:" print >> out, "MLID\tPort Mask" for I, v in enumerate(ft): print >> out, "0x%x\t0x%x" % (IBA.LID_MULTICAST + I + s.blockNum * 32, v) elif isinstance(s, IBA.SALinearForwardingTableRecord): ft = s.linearForwardingTable.portBlock s.linearForwardingTable = None s.printer(out, **_format_args) print >> out, "LFT:" print >> out, "LID\tPort Number" for I, v in enumerate(ft): print >> out, "%u\t%u" % (I + s.blockNum * 64, v) elif isinstance(s, IBA.SAPKeyTableRecord): pk = s.PKeyTable.PKeyBlock s.PKeyTable = None s.printer(out, **_format_args) print >> out, "PKey Table:" for num, I in enumerate(pk): if num % 8 == 0: if num != 0: print >> out print >> out, "0x%04x" % (I), print >> out elif isinstance(s, IBA.SAVLArbitrationTableRecord): vl = s.VLArbitrationTable.VLWeightBlock s.VLArbitrationTable = None s.printer(out, **_format_args) print >> out, "VL :" + "|".join( ("%2u" % ((I >> 8) & 0xF)) for I in vl[:16]) + "|" print >> out, "Weight:" + "|".join( ("%2u" % (I & 0xFF)) for I in vl[:16]) + "|" print >> out, "VL :" + "|".join( ("%2u" % ((I >> 8) & 0xF)) for I in vl[16:]) + "|" print >> out, "Weight:" + "|".join( ("%2u" % (I & 0xFF)) for I in vl[16:]) + "|" else: s.printer(out, **_format_args)
def do_nd(umad,kind,path,attr): nd = umad.SubnGet(kind,path,attr); print "Node Description: %r"%(IBA_describe.description(nd.nodeString));
def perform_single_check(argv, o, funcs): o.add_option("-N", "--nocolor", action="store_false", dest="colour", default=True, help="Do not colorize the output") if not isinstance(funcs, list): funcs = [funcs] funcs.sort(key=lambda x: x.kind) kinds = reduce(lambda x, y: x | y, (I.kind for I in funcs)) if kinds & KIND_PERF: o.add_option("-s", "--show_thresholds", action="store_true", dest="show_thresh", default=False, help="Only show the thresholds in use.") o.add_option("-T", action="store", dest="load_thresh", metavar="FILE", help="Load threshold values from this file.") LibIBOpts.setup(o) global lib if kinds & KIND_PERF: (args, values) = o.parse_args(argv) lib = LibIBOpts(o, args, values, 2, (tmpl_target, tmpl_int)) global thresh thresh = load_thresholds(args.load_thresh) if args.show_thresh: for I in sorted(thresh.iteritems()): print "%s=%u" % I return True if len(values) < 1: raise CmdError("Got %u arguments but expected at least 1" % (len(values))) if len(values) < 2: values.append(0xFF) elif kinds & KIND_PORT: (args, values) = o.parse_args(argv, expected_values=2) lib = LibIBOpts(o, args, values, 2, (tmpl_target, tmpl_int)) else: (args, values) = o.parse_args(argv, expected_values=1) lib = LibIBOpts(o, args, values, 1, (tmpl_target, )) with lib.get_umad_for_target(values[0]) as umad: sched = lib.get_sched(umad) path = lib.path kwargs = {} kwargs["sbn"] = None kwargs["port"] = None kwargs["ninf"] = ninf = umad.SubnGet(IBA.SMPNodeInfo, path) if kinds & (KIND_PERF | KIND_PORT): kwargs["portIdx"] = portIdx = values[1] else: portIdx = ninf.localPortNum if kinds & KIND_PORT: kwargs["pinf"] = pinf = umad.SubnGet(IBA.SMPPortInfo, path, values[1]) if ninf.nodeType == IBA.NODE_SWITCH: ep_pinf = umad.SubnGet(IBA.SMPPortInfo, path, 0) else: ep_pinf = pinf kwargs["desc"] = "lid %u port %u" % (ep_pinf.LID, values[1]) else: kwargs["pinf"] = ep_pinf = pinf = umad.SubnGet( IBA.SMPPortInfo, path) kwargs["portGUID"] = portGUID = kwargs["ninf"].portGUID nodeDesc = None if kinds & KIND_PERF: nodeDesc = IBA_describe.description( umad.SubnGet(IBA.SMPNodeDescription, path).nodeString) def done_checks(kind, failed=False): if kind & KIND_PERF and warnings: failed = True if lib.args.verbosity >= 1: print( red("FAILED") if failed else blue("WARNING") if warnings else green("OK")) for I in warnings: print blue("#warn: %s" % (I)) else: print_header(ninf, ep_pinf, nodeDesc, portIdx, failed, kind) try: printed = 0 last_kind = 0 for func in funcs: if lib.args.verbosity >= 1 and not (printed & func.kind): print_header(ninf, ep_pinf, nodeDesc, portIdx, None, func.kind) if printed != 0 and last_kind != func.kind: done_checks(last_kind) printed = printed | func.kind last_kind = func.kind if func.kind & (KIND_PERF | KIND_CLEAR) and "gpath" not in kwargs: kwargs["gpath"] = gpath = getattr(path, "_cached_gmp_path", None) if gpath is None: gpath = rdma.path.get_mad_path( umad, portGUID, dqpn=1, qkey=IBA.IB_DEFAULT_QP1_QKEY) path._cached_gmp_path = gpath kwargs["gpath"] = gpath del warnings[:] sched.run(queue=func(sched, path, **kwargs)) except (CmdError, rdma.RDMAError): done_checks(last_kind, True) raise done_checks(last_kind) return lib.done()
def perform_single_check(argv,o,funcs): o.add_option("-N","--nocolor",action="store_false",dest="colour", default=True, help="Do not colorize the output"); if not isinstance(funcs,list): funcs = [funcs]; funcs.sort(key=lambda x:x.kind); kinds = reduce(lambda x,y:x | y,(I.kind for I in funcs)); if kinds & KIND_PERF: o.add_option("-s","--show_thresholds",action="store_true",dest="show_thresh", default=False, help="Only show the thresholds in use."); o.add_option("-T",action="store",dest="load_thresh",metavar="FILE", help="Load threshold values from this file."); LibIBOpts.setup(o); global lib if kinds & KIND_PERF: (args,values) = o.parse_args(argv); lib = LibIBOpts(o,args,values,2,(tmpl_target,tmpl_int)); global thresh thresh = load_thresholds(args.load_thresh); if args.show_thresh: for I in sorted(thresh.iteritems()): print "%s=%u"%I return True; if len(values) < 1: raise CmdError("Got %u arguments but expected at least 1"%(len(values))); if len(values) < 2: values.append(0xFF); elif kinds & KIND_PORT: (args,values) = o.parse_args(argv,expected_values=2); lib = LibIBOpts(o,args,values,2,(tmpl_target,tmpl_int)); else: (args,values) = o.parse_args(argv,expected_values=1); lib = LibIBOpts(o,args,values,1,(tmpl_target,)); with lib.get_umad_for_target(values[0]) as umad: sched = lib.get_sched(umad); path = lib.path kwargs = {}; kwargs["sbn"] = None; kwargs["port"] = None; kwargs["ninf"] = ninf = umad.SubnGet(IBA.SMPNodeInfo,path); if kinds & (KIND_PERF | KIND_PORT): kwargs["portIdx"] = portIdx = values[1]; else: portIdx = ninf.localPortNum; if kinds & KIND_PORT: kwargs["pinf"] = pinf = umad.SubnGet(IBA.SMPPortInfo,path,values[1]); if ninf.nodeType == IBA.NODE_SWITCH: ep_pinf = umad.SubnGet(IBA.SMPPortInfo,path,0); else: ep_pinf = pinf; kwargs["desc"] = "lid %u port %u"%(ep_pinf.LID,values[1]); else: kwargs["pinf"] = ep_pinf = pinf = umad.SubnGet(IBA.SMPPortInfo,path); kwargs["portGUID"] = portGUID = kwargs["ninf"].portGUID; nodeDesc = None; if kinds & KIND_PERF: nodeDesc = IBA_describe.description(umad.SubnGet(IBA.SMPNodeDescription,path).nodeString); def done_checks(kind,failed=False): if kind & KIND_PERF and warnings: failed = True; if lib.args.verbosity >= 1: print (red("FAILED") if failed else blue("WARNING") if warnings else green("OK")); for I in warnings: print blue("#warn: %s"%(I)); else: print_header(ninf,ep_pinf,nodeDesc,portIdx,failed, kind); try: printed = 0; last_kind = 0; for func in funcs: if lib.args.verbosity >= 1 and not (printed & func.kind): print_header(ninf,ep_pinf,nodeDesc,portIdx,None, func.kind); if printed != 0 and last_kind != func.kind: done_checks(last_kind); printed = printed | func.kind; last_kind = func.kind; if func.kind & (KIND_PERF|KIND_CLEAR) and "gpath" not in kwargs: kwargs["gpath"] = gpath = getattr(path,"_cached_gmp_path",None); if gpath is None: gpath = rdma.path.get_mad_path(umad,portGUID, dqpn=1, qkey=IBA.IB_DEFAULT_QP1_QKEY); path._cached_gmp_path = gpath; kwargs["gpath"] = gpath; del warnings[:]; sched.run(queue=func(sched,path,**kwargs)); except (CmdError,rdma.RDMAError): done_checks(last_kind,True); raise done_checks(last_kind); return lib.done();
def set_desc(self,nodeString): """Set the description from a *nodeString* type value.""" self.desc = IBA_describe.description(nodeString);
def do_nd(umad, kind, path, attr): nd = umad.SubnGet(kind, path, attr) print "Node Description: %r" % (IBA_describe.description(nd.nodeString))