def cmd_ibsysstat(argv, o): """Request the system information MAD Usage: %prog [TARGET ping|host|cpu|cpi] This program must be running in server mode on the target end port.""" libibtool.vendstruct.install_vend() LibIBOpts.setup(o) o.add_option("-S", action="store_true", dest="server", help="Run as a server") (args, values) = o.parse_args(argv) lib = LibIBOpts(o, args, values, 2, (tmpl_target, tmpl_ofa_vend)) if args.server: # FIXME: This should really set the capability mask bit, I wonder how? # But Mellanox HCA already set it for their own uses. What a silly # bit. global cpi cpi = IBA.MADClassPortInfo() cpi.baseVersion = IBA.MAD_BASE_VERSION cpi.classVersion = libibtool.vendstruct.OFASysStatFormat.MAD_CLASS_VERSION cpi.respTimeValue = 16 cpi.redirectQKey = cpi.trapQKey = IBA.IB_DEFAULT_QP1_QKEY if len(values) != 0: raise CmdError("Too many arguments.") with lib.get_umad_for_target(gmp=True) as umad: agent_id = umad.register_server_fmt( libibtool.vendstruct.OFASysStatFormat) while True: buf, path = umad.recvfrom(None) if path.umad_agent_id != agent_id: continue try: handle_packet(umad, buf, path) except rdma.MADError as err: err.dump_detailed(sys.stderr, "E:", level=1) umad.send_error_exc(err) return lib.done() if len(values) != 2: raise CmdError("Expect 2 arguments.") with lib.get_umad_for_target(values[0], gmp=True) as umad: path = lib.path vinf = umad.VendGet(values[1], path) vinf.printer(sys.stdout, **lib.format_args) return lib.done()