Пример #1
0
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);
Пример #2
0
 def set_desc(self, nodeString):
     """Set the description from a *nodeString* type value."""
     self.desc = IBA_describe.description(nodeString)
Пример #3
0
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)
Пример #4
0
def do_nd(umad,kind,path,attr):
    nd = umad.SubnGet(kind,path,attr);
    print "Node Description: %r"%(IBA_describe.description(nd.nodeString));
Пример #5
0
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()
Пример #6
0
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();
Пример #7
0
 def set_desc(self,nodeString):
     """Set the description from a *nodeString* type value."""
     self.desc = IBA_describe.description(nodeString);
Пример #8
0
def do_nd(umad, kind, path, attr):
    nd = umad.SubnGet(kind, path, attr)
    print "Node Description: %r" % (IBA_describe.description(nd.nodeString))