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;
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
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))
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 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)))
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)
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)))
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
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));
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))
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 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;
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,))
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;
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
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;
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