Beispiel #1
0
def cmd_set_nodedesc(argv,o):
    """Set or display the node description for CAs.
       Usage: %prog [-v] [NAME]

       By default all CAs are altered, use -C or -P to select a single CA."""
    o.add_option("-v",dest="view_all",action="store_true",
                 help="Increase the verbosity level of diagnostic messages, each -v increases by 1.")
    o.add_option("-C","--Ca",dest="CA",
                 help="RDMA device to use. Specify a device name or node GUID");
    o.add_option("-P","--Port",dest="port",
                 help="RDMA end port to use. Specify a GID, port GUID, DEVICE/PORT or port number.");
    (args,values) = o.parse_args(argv);

    dev = None
    if args.CA is not None:
        dev = rdma.get_device(args.CA);
    if dev is None and args.port is not None:
        dev = rdma.get_end_port(args.port).parent;

    if args.view_all or len(values) <= 0:
        for I in rdma.get_devices():
            if dev is not None and I != dev:
                continue;
            print "%s: %s"%(I.name,IBA_describe.dstr(I.node_desc))
    else:
        name = values[0].decode();
        name = name.encode("utf-8");
        for I in rdma.get_devices():
            if dev is not None and I != dev:
                continue;
            with open(os.path.join(I._dir,"node_desc"),"w") as F:
                F.write(name);
    return True;
Beispiel #2
0
def cmd_set_nodedesc(argv,o):
    """Set or display the node description for CAs.
       Usage: %prog [-v] [NAME]

       By default all CAs are altered, use -C or -P to select a single CA."""
    o.add_option("-v",dest="view_all",action="store_true",
                 help="Increase the verbosity level of diagnostic messages, each -v increases by 1.")
    o.add_option("-C","--Ca",dest="CA",
                 help="RDMA device to use. Specify a device name or node GUID");
    o.add_option("-P","--Port",dest="port",
                 help="RDMA end port to use. Specify a GID, port GUID, DEVICE/PORT or port number.");
    (args,values) = o.parse_args(argv);

    dev = None
    if args.CA is not None:
        dev = rdma.get_device(args.CA);
    if dev is None and args.port is not None:
        dev = rdma.get_end_port(args.port).parent;

    if args.view_all or len(values) <= 0:
        for I in rdma.get_devices():
            if dev is not None and I != dev:
                continue;
            print "%s: %s"%(I.name,IBA_describe.dstr(I.node_desc))
    else:
        name = values[0].decode();
        name = name.encode("utf-8");
        for I in rdma.get_devices():
            if dev is not None and I != dev:
                continue;
            with open(os.path.join(I._dir,"node_desc"),"w") as F:
                F.write(name);
    return True;
Beispiel #3
0
 def test_get(self):
     for I in rdma.get_devices():
         with rdma.get_verbs(I) as X:
             print X
         for Q in I.end_ports:
             with rdma.get_verbs(Q) as X:
                 print X
Beispiel #4
0
 def test_fail(self):
     """Test valid get_end_port calls that fail."""
     devices = rdma.get_devices()
     dev = devices.first()
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, IBA.GID("::"))
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, IBA.GUID("0000:0000:0000:0000"))
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, "xxx")
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, "%s/99" % (dev.name))
Beispiel #5
0
def cmd_ibv_devices(argv, o):
    """Display the RDMA devices in the system.
       Usage: %prog"""
    (args, values) = o.parse_args(argv, expected_values=0)

    print "    %-16s\t    node GUID" % ("device")
    print "    %-16s\t-------------------" % ("------")
    for I in rdma.get_devices():
        print "    %-16s\t%s" % (I.name, I.node_guid)
    return True
Beispiel #6
0
 def test_fail(self):
     """Test valid get_end_port calls that fail."""
     devices = rdma.get_devices()
     dev = devices.first()
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, IBA.GID("::"))
     self.assertRaises(rdma.RDMAError, rdma.get_end_port,
                       IBA.GUID("0000:0000:0000:0000"))
     self.assertRaises(rdma.RDMAError, rdma.get_end_port, "xxx")
     self.assertRaises(rdma.RDMAError, rdma.get_end_port,
                       "%s/99" % (dev.name))
Beispiel #7
0
def cmd_ibv_devices(argv,o):
    """Display the RDMA devices in the system.
       Usage: %prog"""
    (args,values) = o.parse_args(argv,expected_values = 0);

    print "    %-16s\t    node GUID"%("device");
    print "    %-16s\t-------------------"%("------");
    for I in rdma.get_devices():
        print "    %-16s\t%s"%(I.name,I.node_guid);
    return True;
 def test_list(self):
     devs = rdma.get_devices()
     print devs;
     for I in devs:
         print "RDMA Device '%s'"%(I.name);
         for J in ['node_type', 'fw_ver','node_guid','node_desc','sys_image_guid','board_id','hw_ver']:
             print "    %s: %s"%(J,repr(getattr(I,J)))
         for Q in I.end_ports:
             print "    port: %u"%(Q.port_id);
             for J in ['lid','lmc','phys_state','state','sm_lid','sm_sl','gids','pkeys']:
                 print "        %s: %s"%(J,repr(getattr(Q,J)))
Beispiel #9
0
 def test_good(self):
     """Test get_end_port calls that succeed."""
     devices = rdma.get_devices()
     dev = devices.first()
     ep = dev.end_ports.first()
     self.assertEquals(rdma.get_end_port(), ep)
     self.assertEquals(rdma.get_end_port(dev.name), ep)
     self.assertEquals(rdma.get_end_port("%s/%s" % (dev.name, ep.port_id)), ep)
     self.assertEquals(rdma.get_end_port(ep.port_guid), ep)
     self.assertEquals(rdma.get_end_port("%s" % (ep.port_guid)), ep)
     self.assertEquals(rdma.get_end_port(ep.default_gid), ep)
     self.assertEquals(rdma.get_end_port("%s" % (ep.default_gid)), ep)
Beispiel #10
0
 def test_good(self):
     """Test get_end_port calls that succeed."""
     devices = rdma.get_devices()
     dev = devices.first()
     ep = dev.end_ports.first()
     self.assertEquals(rdma.get_end_port(), ep)
     self.assertEquals(rdma.get_end_port(dev.name), ep)
     self.assertEquals(rdma.get_end_port("%s/%s" % (dev.name, ep.port_id)),
                       ep)
     self.assertEquals(rdma.get_end_port(ep.port_guid), ep)
     self.assertEquals(rdma.get_end_port("%s" % (ep.port_guid)), ep)
     self.assertEquals(rdma.get_end_port(ep.default_gid), ep)
     self.assertEquals(rdma.get_end_port("%s" % (ep.default_gid)), ep)
Beispiel #11
0
 def test_list(self):
     devs = rdma.get_devices()
     print devs
     for I in devs:
         print "RDMA Device '%s'" % (I.name)
         for J in [
                 'node_type', 'fw_ver', 'node_guid', 'node_desc',
                 'sys_image_guid', 'board_id', 'hw_ver'
         ]:
             print "    %s: %s" % (J, repr(getattr(I, J)))
         for Q in I.end_ports:
             print "    port: %u" % (Q.port_id)
             for J in [
                     'lid', 'lmc', 'phys_state', 'state', 'sm_lid', 'sm_sl',
                     'gids', 'pkeys'
             ]:
                 print "        %s: %s" % (J, repr(getattr(Q, J)))
Beispiel #12
0
    def test_str_good(self):
        """Check good input to :func:`rdma.path.from_string`."""
        self.check_path(None,DGID=IBA.GID("fe80::1"));
        self.check_path(None,DGID=IBA.GID("fe80::1"),SL=10,pkey=0xff);
        self.check_path(None,DGID=IBA.GID("fe80::1"),SLID=0x12,DLID=15);

        self.check_path_str(None,"fe80::1",DGID=IBA.GID("fe80::1"));
        self.check_path_str(None,"0:0:0:1",DGID=IBA.GID("fe80::1"));
        self.check_path_str(None,"1",DLID=1);
        self.check_path_str(None,"0xff",DLID=0xff);
        self.check_path_str(None,"0,1",cls=rdma.path.IBDRPath,drPath="\0\1");
        self.check_path_str(None,"0,",cls=rdma.path.IBDRPath,drPath="\0");

        for I in rdma.get_devices():
            for J in I.end_ports:
                self.check_path_str(J,"fe80::1%%%s"%(J),DGID=IBA.GID("fe80::1"))
                for G in J.gids:
                    if int(G) >> 64 != IBA.GID_DEFAULT_PREFIX:
                        self.check_path_str(J,"%s"%(G),DGID=G);
def com_rdma_get_devices():
    """
    # get list of RDMA devices
    """
    rdma_device_list = rdma.get_devices()
    common_global.es_inst.com_elastic_index('info', {"RDMA devices": rdma_device_list})
    for rdma_device in rdma_device_list:
        common_global.es_inst.com_elastic_index('info', {"RDMA Device": rdma_device.name})
        for rdma_node in ['node_type', 'fw_ver', 'node_guid', 'node_desc', 'sys_image_guid',
                          'board_id', 'hw_ver']:
            common_global.es_inst.com_elastic_index('info', {'node': rdma_node, 'rep': repr(
                getattr(rdma_device, rdma_node))})
        for rdma_device_end_port in rdma_device.end_ports:
            common_global.es_inst.com_elastic_index('info', {"port": rdma_device_end_port.port_id})
            for rdma_attr in ['lid', 'lmc', 'phys_state', 'state', 'sm_lid', 'sm_sl', 'gids',
                              'pkeys']:
                common_global.es_inst.com_elastic_index('info', {'attr': rdma_attr, 'rep':
                    repr(getattr(rdma_device_end_port, rdma_attr))})
    return rdma_device_list
Beispiel #14
0
 def get_end_port(self):
     """Process the options for specifying the device similar to libib, this
     version is much richer though."""
     if self.args.CA is None and self.args.port is None:
         for dev in rdma.get_devices():
             for ep in dev.end_ports:
                 if ep.state >= IBA.PORT_STATE_INIT:
                     return ep
         return rdma.get_end_port();
     if self.args.CA is None:
         try:
             return rdma.get_end_port(self.args.port);
         except rdma.RDMAError:
             pass;
         dev = rdma.get_device()
     else:
         dev = rdma.get_device(self.args.CA);
     if self.args.port is None:
         return dev.end_ports.first();
     return rdma.get_end_port("%s/%s"%(dev.name,self.args.port));
Beispiel #15
0
 def get_end_port(self):
     """Process the options for specifying the device similar to libib, this
     version is much richer though."""
     if self.args.CA is None and self.args.port is None:
         for dev in rdma.get_devices():
             for ep in dev.end_ports:
                 if ep.state >= IBA.PORT_STATE_INIT:
                     return ep
         return rdma.get_end_port()
     if self.args.CA is None:
         try:
             return rdma.get_end_port(self.args.port)
         except rdma.RDMAError:
             pass
         dev = rdma.get_device()
     else:
         dev = rdma.get_device(self.args.CA)
     if self.args.port is None:
         return dev.end_ports.first()
     return rdma.get_end_port("%s/%s" % (dev.name, self.args.port))
Beispiel #16
0
    def test_str_good(self):
        """Check good input to :func:`rdma.path.from_string`."""
        self.check_path(None, DGID=IBA.GID("fe80::1"))
        self.check_path(None, DGID=IBA.GID("fe80::1"), SL=10, pkey=0xff)
        self.check_path(None, DGID=IBA.GID("fe80::1"), SLID=0x12, DLID=15)

        self.check_path_str(None, "fe80::1", DGID=IBA.GID("fe80::1"))
        self.check_path_str(None, "0:0:0:1", DGID=IBA.GID("fe80::1"))
        self.check_path_str(None, "1", DLID=1)
        self.check_path_str(None, "0xff", DLID=0xff)
        self.check_path_str(None, "0,1", cls=rdma.path.IBDRPath, drPath="\0\1")
        self.check_path_str(None, "0,", cls=rdma.path.IBDRPath, drPath="\0")

        for I in rdma.get_devices():
            for J in I.end_ports:
                self.check_path_str(J,
                                    "fe80::1%%%s" % (J),
                                    DGID=IBA.GID("fe80::1"))
                for G in J.gids:
                    if int(G) >> 64 != IBA.GID_DEFAULT_PREFIX:
                        self.check_path_str(J, "%s" % (G), DGID=G)
Beispiel #17
0
def cmd_ibstatus(argv,o):
    """Display the RDMA end ports in the system.
       Usage: %prog [DEVICE[/PORT]]"""
    (args,values) = o.parse_args(argv);

    if len(values) == 0:
        end_ports = (I for J in rdma.get_devices() for I in J.end_ports);
    elif len(values) == 1:
        end_ports = (rdma.get_end_port(values[0]),);
    else:
        raise CmdError("Too many arguments");

    for I in end_ports:
        print """Infiniband device %r port %u status:
\tdefault gid:\t %s
\tbase lid:\t %u
\tsm lid:\t\t %u
\tstate:\t\t %u: %s
\tphys state:\t %u: %s
\trate:\t\t %s\n"""%(I.parent.name,I.port_id,I.default_gid,I.lid,I.sm_lid,
             I.state,IBA_describe.link_state(I.state).upper(),
             I.phys_state,IBA_describe.phys_link_state(I.phys_state),I.rate);
    return True;
Beispiel #18
0
def cmd_ibstatus(argv,o):
    """Display the RDMA end ports in the system.
       Usage: %prog [DEVICE[/PORT]]"""
    (args,values) = o.parse_args(argv);

    if len(values) == 0:
        end_ports = (I for J in rdma.get_devices() for I in J.end_ports);
    elif len(values) == 1:
        end_ports = (rdma.get_end_port(values[0]),);
    else:
        raise CmdError("Too many arguments");

    for I in end_ports:
        print """Infiniband device %r port %u status:
\tdefault gid:\t %s
\tbase lid:\t %u
\tsm lid:\t\t %u
\tstate:\t\t %u: %s
\tphys state:\t %u: %s
\trate:\t\t %s\n"""%(I.parent.name,I.port_id,I.default_gid,I.lid,I.sm_lid,
             I.state,IBA_describe.link_state(I.state).upper(),
             I.phys_state,IBA_describe.phys_link_state(I.phys_state),I.rate);
    return True;
Beispiel #19
0
        return IBDRPath(default_end_port,drPath=drPath);

    a = s.split('%');
    if len(a) == 2:
        DGID = IBA.GID(a[0])
        try:
            end_port = rdma.get_end_port(a[1]);
            _check_ep(end_port,require_dev,require_ep);
        except rdma.RDMAError, e:
            raise ValueError("Could not find %r: %s"%(a[1],e));
        return IBPath(end_port,DGID=DGID);

    res = rdma.IBA.conv_ep_addr(s);
    if isinstance(res,IBA.GID):
        # Search all the GIDs for one that matches the prefix, someday we
        # should have a host routing table for this lookup...
        prefix = int(res) >> 64;
        if prefix != IBA.GID_DEFAULT_PREFIX and require_ep is None:
            for I in rdma.get_devices():
                if I != require_dev and require_dev is not None:
                    continue;
                for J in I.end_ports:
                    for G in J.gids:
                        if int(G) >> 64 == prefix:
                            _check_ep(J,require_dev,require_ep);
                            return IBPath(J,DGID=res);
        return IBPath(default_end_port,DGID=res);
    if isinstance(res,int) or isinstance(res,long):
        return IBPath(default_end_port,DLID=res);
    raise ValueError("Invalid destination %r"%(s,))
Beispiel #20
0
 def test_get(self):
     for I in rdma.get_devices():
         for Q in I.end_ports:
             with rdma.get_umad(Q) as X:
                 print X;
Beispiel #21
0
 def test_get(self):
     for I in rdma.get_devices():
         for Q in I.end_ports:
             with rdma.get_umad(Q) as X:
                 print X
Beispiel #22
0
def cmd_ibstat(argv,o):
    """Display the RDMA end ports in the system.
       Usage: %prog [-lsp] [DEVICE [PORT]]"""
    o.add_option("-l","--list_of_cas",action="store_true",dest="list_cas",
                 help="List all IB devices names");
    o.add_option("-s","--short",action="store_true",dest="short",
                 help="Do not show port information");
    o.add_option("-p","--port_list",action="store_true",dest="ports",
                 help="Show only port GUIDs");
    (args,values) = o.parse_args(argv);

    if args.list_cas:
        if len(values) != 0: raise CmdError("Too many arguments");
        for I in rdma.get_devices():
            print I.name;
        return True;

    if len(values) == 0:
        end_ports = (I for J in rdma.get_devices() for I in J.end_ports);
    elif len(values) == 1:
        end_ports = (I for I in rdma.get_device(values[0]).end_ports);
    elif len(values) == 2:
        end_ports = (rdma.get_end_port("%s/%s"%(values[0],values[1])),);
    else:
        raise CmdError("Too many arguments");

    if args.ports:
        for I in end_ports:
            print I.port_guid;
        return True;

    def show_ca(dev):
        print "CA %r"%(dev.name);
        print "\tCA type: %s"%(dev.hca_type);
        print "\tNumber of ports: %s"%(len(dev.end_ports));
        print "\tFirmware version: %s"%(IBA_describe.dstr(dev.fw_ver));
        print "\tHardware version: %s"%(IBA_describe.dstr(dev.hw_ver));
        print "\tNode GUID: %s"%(dev.node_guid);
        print "\tSystem image GUID: %s"%(dev.sys_image_guid);
    def show_port(port,offset="\t\t"):
        print "%sState: %s"%(offset,IBA_describe.link_state(port.state));
        print "%sPhysical state: %s"%(offset,IBA_describe.phys_link_state(port.phys_state));
        print "%sRate: %r"%(offset,port.rate);
        print "%sBase lid: %r"%(offset,port.lid);
        print "%sLMC: %r"%(offset,port.lmc);
        print "%sSM lid: %r"%(offset,port.sm_lid);
        print "%sCapability mask: 0x%08x"%(offset,port.cap_mask);
        print "%sPort GUID: %s"%(offset,port.port_guid);

    last_ca = None;
    if args.short:
        for I in end_ports:
            if last_ca != I.parent:
                show_ca(I.parent);
                last_ca = I.parent;
        return True;

    if isinstance(end_ports,tuple):
        I = end_ports[0];
        print "CA: %r"%(I.parent.name);
        print "Port %u:"%(I.port_id);
        show_port(I,offset="");
        return True;

    for I in end_ports:
        if last_ca != I.parent:
            show_ca(I.parent);
            last_ca = I.parent;
        print "\tPort %u:"%(I.port_id);
        show_port(I);
    return True;
Beispiel #23
0
def cmd_ibstat(argv, o):
    """Display the RDMA end ports in the system.
       Usage: %prog [-lsp] [DEVICE [PORT]]"""
    o.add_option("-l",
                 "--list_of_cas",
                 action="store_true",
                 dest="list_cas",
                 help="List all IB devices names")
    o.add_option("-s",
                 "--short",
                 action="store_true",
                 dest="short",
                 help="Do not show port information")
    o.add_option("-p",
                 "--port_list",
                 action="store_true",
                 dest="ports",
                 help="Show only port GUIDs")
    (args, values) = o.parse_args(argv)

    if args.list_cas:
        if len(values) != 0: raise CmdError("Too many arguments")
        for I in rdma.get_devices():
            print I.name
        return True

    if len(values) == 0:
        end_ports = (I for J in rdma.get_devices() for I in J.end_ports)
    elif len(values) == 1:
        end_ports = (I for I in rdma.get_device(values[0]).end_ports)
    elif len(values) == 2:
        end_ports = (rdma.get_end_port("%s/%s" % (values[0], values[1])), )
    else:
        raise CmdError("Too many arguments")

    if args.ports:
        for I in end_ports:
            print I.port_guid
        return True

    def show_ca(dev):
        print "CA %r" % (dev.name)
        print "\tCA type: %s" % (dev.hca_type)
        print "\tNumber of ports: %s" % (len(dev.end_ports))
        print "\tFirmware version: %s" % (IBA_describe.dstr(dev.fw_ver))
        print "\tHardware version: %s" % (IBA_describe.dstr(dev.hw_ver))
        print "\tNode GUID: %s" % (dev.node_guid)
        print "\tSystem image GUID: %s" % (dev.sys_image_guid)

    def show_port(port, offset="\t\t"):
        print "%sState: %s" % (offset, IBA_describe.link_state(port.state))
        print "%sPhysical state: %s" % (
            offset, IBA_describe.phys_link_state(port.phys_state))
        print "%sRate: %r" % (offset, port.rate)
        print "%sBase lid: %r" % (offset, port.lid)
        print "%sLMC: %r" % (offset, port.lmc)
        print "%sSM lid: %r" % (offset, port.sm_lid)
        print "%sCapability mask: 0x%08x" % (offset, port.cap_mask)
        print "%sPort GUID: %s" % (offset, port.port_guid)

    last_ca = None
    if args.short:
        for I in end_ports:
            if last_ca != I.parent:
                show_ca(I.parent)
                last_ca = I.parent
        return True

    if isinstance(end_ports, tuple):
        I = end_ports[0]
        print "CA: %r" % (I.parent.name)
        print "Port %u:" % (I.port_id)
        show_port(I, offset="")
        return True

    for I in end_ports:
        if last_ca != I.parent:
            show_ca(I.parent)
            last_ca = I.parent
        print "\tPort %u:" % (I.port_id)
        show_port(I)
    return True