IBIS(1)
IBIS(1) β IB MANAGEMENT IN-BAND SERVICES PACKAGE π
okay bestie, pull up a chair, we're reading the ibis manpage together and honestly? it's a whole journey. this is the IB Management In-band Services package, aka your girl for talking MADs (management datagrams) at your InfiniBand fabric. let's go π¦
β¨ NAME β¨
ibis β IB management Inband Services β an extended TCL shell π
β¨ SYNOPSYS β¨
ibis [-port_num <port number to attach to>]
β¨ DESCRIPTION β¨
so ibis is a TCL shell that got a glow-up: it's been extended with an interface for sending and receiving IB management datagrams (MADS). to actually use it you write TCL code that exercises the regular TCL commands plus the special API this extension hands you. β¨
interactive use? also totally possible, and it gets greatly enhanced if the tclreadline package happens to be available on your machine. lowkey a game changer, fr fr.
the sub sections below give you the detailed definition for the API and the global objects the extension defines. the different MADs APIs are grouped by management class. periodt.
β¨ IBIS Constants β¨
these constants are provided by IBIS, no cap:
Log Verbosity Flags π
[ Constant : int ] $IBIS_LOG_NONE = 0x00[ Constant : int ] $IBIS_LOG_ERROR = 0x01[ Constant : int ] $IBIS_LOG_INFO = 0x02[ Constant : int ] $IBIS_LOG_VERBOSE = 0x04[ Constant : int ] $IBIS_LOG_DEBUG = 0x08[ Constant : int ] $IBIS_LOG_FUNCS = 0x10[ Constant : int ] $IBIS_LOG_FRAMES = 0x20
β¨ IBIS Functions β¨
this section spills all the tea about the functions IBIS exposes. they all return 0 on succes π
[return list] ibis_get_local_ports_infoβ hands you back the list of available IB ports, withGUID,LID, state and port number. the whole squad's info, basically π[ returns int ] ibis_initβ initialize the ibis object. your opening move π¬[ returns int ] ibis_set_verbosity levelβ change the log verbosity. turn the volume up or down on the drama πΈ[ returns int ] ibis_set_port guidβ set the port IBIS is attached to and initialize all sub packages. must be called once during ibis operation β like, non-negotiable, bestie π¨[ returns new_uint64_t ] ibis_get_portβ provide theGUIDof the port IBIS is attached to. it's giving "who am i attached to" π«[ returns int ] ibis_set_transaction_timeout timeout_msβ set the transaction time out, in[msec]β±οΈ[ returns int ] ibis_exitβ exit IBIS. say bye bestie π[ returns int ] ibis_puts verbosity msgβ appends a message to the OpenSM log π
β¨ IBIS Options Object β¨
the IBIS options live in a predefined object called ibis_opts. you poke at it with the standard Tcl methods: cget and configure. examples, because we love a demonstration:
ibis_opts cget -force_log_flush
ibis_opts configure -force_log_flush TRUE
here's every option you can configure, no gatekeeping:
[ Member data: returns boolean_t * ] -single_threadβ run single threaded π§΅[ Member data: returns boolean_t * ] -force_log_flushβ ifTRUEβ forces flash after each log message (TRUE). yes it says flash, we report the facts as they are π[ Member data: returns uint8_t * ] -log_flagsβ the log levels to be used π¦[ Member data: returns char * ] -log_fileβ the name of the log file to be used. must be configured beforeibis_initis used to make an affect β οΈ (yes, "affect" β character for character, bestie)[ Member data: returns uint64_t * ] -sm_keyβ theSM_Keyto be used when sending SubnetMgt and SubnetAdmin MADs π[ Member data: returns uint64_t * ] -m_keyβ theM_Keyto be used when sending SubnetMgt π[ Member data: returns uint64_t * ] -v_keyβ theVendor Keyto be used when sending Vendor Specific MADs. π·οΈ
β¨ IBPM β¨
IBPM stands for IB Performance Monitoring MADs. IB provides standard facilities for tracking statistics on every port. it's the fitbit of your fabric, honestly ββ¨
this section details the functions IBPM exposes. they all return 0 on succes.
[ returns int ] pmMultiMaxGetβ obtain the maximal number of parallel queries that can be sent π[ returns int ] pmGetPortCounters lid port_selectβ send a"PortCounters"query to the givenLIDand port π―[ returns int ] pmGetPortCountersMulti num lid_list port_select_listβ send a batch of"PortCounters"queries to the given list of LIDs and ports.numβ defines the number of elements in each list π¦[ returns int ] pmGetExtPortCountersMulti num lid_list port_select_listβ send a batch of"ExtendedPortCounters"queries to the given list of LIDs and ports.numβ defines the number of elements in each list π¦β¨[ returns int ] pmClrAllCounters lid port_selectβ sends a command to"clear all counters"on the givenLIDand port π§Ή[ returns int ] pmClrAllCountersMulti num lid_list port_select_listβ send a batch of"clear all counters"commands to the given list of LIDs and ports.numβ defines the number of elements in each list π§Ήπ§Ήπ§Ή
β¨ IBSAC β¨
IBSAC stands for IB Subnet Administrator (SA) Client. it provides means to query the SA for information about the various objects it manages. think of it as sliding into the SA's DMs for gossip ππ¬
the following sections describe the concepts behind the SAC interface and then provide detailed description of each attribute that can be queried.
β¨ IBSAC Objects β¨
IBSAC uses predefined global objects to facilitate SA Queries. these objects are named sac<Attribute>Query. each such object exposes a standard set of methods:
dumpβ dump out all fields and values for the obejct π€cget -<field>:β obtain the value of the given field πconfigure -<field> <value>:β set the field value ποΈget <comp mask>:β query the SA for one record using the component mask and field values as set on the query object π―getTable <comp mask>:β query the SA for all records matching component mask and field values as set on the query object π
some SA maintained objects support the "set" and "delete" methods. in that case the following methods are made available on the corresponding query object:
set <comp mask>:β send a set method to the SA with the component mask and field values as set on the query object βοΈdelete <comp mask>:β send a delete method to the SA with the component mask and field values as set on the query object ποΈ
β¨ Returned Objects β¨
this section describes the values returned from the get/getTable/set/delete methods of the query objects:
each query returns a list (or one) identifiers (pointers) for objects. these identifiers are formatted according to the type of object they point to, using the following prefixes:
Queries embedding Subnet Management Attributes: π§¬
ni:<idx>= node infonr:<idx>= node info record (SA RID + node info)pi:<idx>= port infopir:<idx>= port info record (SA RID + port info)smi:<idx>= SM infosmir:<idx>= SM info record (SA RID + SM info)swi:<idx>= switch infoswir:<idx>= switch info record (SA RID + switch info)slvt:<idx>= SL to VL tableslvr:<idx>= SL to VL table Record (SA RID + SL to VL table)pkt:<idx>= PKey tablepkr:<idx>= PKey table record (SA RID + PKey table)
Queries of non embedded attributes: πͺ
link:<idx>= link recordpath:<idx>= path recordlft:<idx>= Linear forwarding tablemcm:<idx>= Multicast Member Recordcpi:<idx>= SA Class Port Infoinfo:<idx>= Inform info (registration of event forwarding)svc:<idx>= Service Recordvlarb:<idx>= VL Arbitration table record
β¨ NODE INFO RECORD β¨
Component mask bits: π
[ Constant : int ] $IB_NR_COMPMASK_LID = 0x1[ Constant : int ] $IB_NR_COMPMASK_RESERVED1 = 0x2[ Constant : int ] $IB_NR_COMPMASK_BASEVERSION = 0x4[ Constant : int ] $IB_NR_COMPMASK_CLASSVERSION = 0x8[ Constant : int ] $IB_NR_COMPMASK_NODETYPE = 0x10[ Constant : int ] $IB_NR_COMPMASK_NUMPORTS = 0x20[ Constant : int ] $IB_NR_COMPMASK_SYSIMAGEGUID = 0x40[ Constant : int ] $IB_NR_COMPMASK_NODEGUID = 0x80[ Constant : int ] $IB_NR_COMPMASK_PORTGUID = 0x100[ Constant : int ] $IB_NR_COMPMASK_PARTCAP = 0x200[ Constant : int ] $IB_NR_COMPMASK_DEVID = 0x400[ Constant : int ] $IB_NR_COMPMASK_REV = 0x800[ Constant : int ] $IB_NR_COMPMASK_PORTNUM = 0x1000[ Constant : int ] $IB_NR_COMPMASK_VENDID = 0x2000[ Constant : int ] $IB_NR_COMPMASK_NODEDESC = 0x4000
class sacNodeInfo
Fields: πΈ
[ Member data: returns uint8_t * ] -base_version[ Member data: returns uint8_t * ] -class_version[ Member data: returns uint8_t * ] -node_type[ Member data: returns uint8_t * ] -num_ports[ Member data: returns ib_net64_t * ] -sys_guid[ Member data: returns ib_net64_t * ] -node_guid[ Member data: returns ib_net64_t * ] -port_guid[ Member data: returns ib_net16_t * ] -partition_cap[ Member data: returns ib_net16_t * ] -device_id[ Member data: returns ib_net32_t * ] -revision[ Member data: returns ib_net32_t * ] -port_num_vendor_id[ Member : returns void ] delete
class sacNodeRec
RID Fields: π
[ Member data: returns ib_net16_t * ] -lid[ Member data: returns sacNodeInfo * ] -node_info[ Member data: returns ib_node_desc_t * ] -node_desc
Methods: π οΈ
[ Member : returns char * ] get comp_mask[ Member : returns char * ] getTable comp_mask[ Member : returns void ] delete
β¨ PORT INFO RECORD β¨
Component mask bits: π
(and bestieβ¦ this is exactly where the page keeps going. stay tuned, more parts incoming π)
$IB_PIR_COMPMASK_LID=0x1β constant, typechar *β¨$IB_PIR_COMPMASK_PORTNUM=0x2β constant, typechar *$IB_PIR_COMPMASK_RESV1=0x4β constant, typechar *$IB_PIR_COMPMASK_MKEY=0x8β constant, typechar *$IB_PIR_COMPMASK_GIDPRE=0x10β constant, typeint$IB_PIR_COMPMASK_BASELID=0x20β constant, typeint$IB_PIR_COMPMASK_SMLID=0x40β constant, typeint$IB_PIR_COMPMASK_CAPMASK=0x80β constant, typeint$IB_PIR_COMPMASK_DIAGCODE=0x100β constant, typeint$IB_PIR_COMPMASK_MKEYLEASEPRD=0x200β constant, typeint$IB_PIR_COMPMASK_LOCALPORTNUM=0x400β constant, typeint$IB_PIR_COMPMASK_LNKWIDTHSUPPORT=0x800β constant, typeint$IB_PIR_COMPMASK_LNKWIDTHACTIVE=0x1000β constant, typeint$IB_PIR_COMPMASK_LINKWIDTHENABLED=0x2000β constant, typeint$IB_PIR_COMPMASK_LNKSPEEDSUPPORT=0x4000β constant, typeint$IB_PIR_COMPMASK_PORTSTATE=0x10000β constant, typeint$IB_PIR_COMPMASK_PORTPHYSTATE=0x20000β constant, typeint$IB_PIR_COMPMASK_LINKDWNDFLTSTATE=0x40000β constant, typeint$IB_PIR_COMPMASK_MKEYPROTBITS=0x80000β constant, typeint$IB_PIR_COMPMASK_LMC=0x100000β constant, typeint$IB_PIR_COMPMASK_LINKSPEEDACTIVE=0x200000β constant, typeint$IB_PIR_COMPMASK_LINKSPEEDENABLE=0x400000β constant, typeint$IB_PIR_COMPMASK_NEIGHBORMTU=0x800000β constant, typeint$IB_PIR_COMPMASK_MASTERSMSL=0x1000000β constant, typeint$IB_PIR_COMPMASK_VLCAP=0x2000000β constant, typeint$IB_PIR_COMPMASK_INITTYPE=0x4000000β constant, typeint$IB_PIR_COMPMASK_VLHIGHLIMIT=0x8000000β constant, typeint$IB_PIR_COMPMASK_VLARBHIGHCAP=0x10000000β constant, typeint$IB_PIR_COMPMASK_VLARBLOWCAP=0x20000000β constant, typeint$IB_PIR_COMPMASK_INITTYPEREPLY=0x40000000β constant, typeint$IB_PIR_COMPMASK_MTUCAP=0x80000000β constant, typeint$IB_PIR_COMPMASK_VLSTALLCNT=0x100000000β constant, typechar *$IB_PIR_COMPMASK_HOQLIFE=0x200000000β constant, typechar *$IB_PIR_COMPMASK_OPVLS=0x400000000β constant, typechar *$IB_PIR_COMPMASK_PARENFIN=0x800000000β constant, typechar *$IB_PIR_COMPMASK_PARENFOUT=0x1000000000β constant, typechar *$IB_PIR_COMPMASK_FILTERRAWIN=0x2000000000β constant, typechar *$IB_PIR_COMPMASK_FILTERRAWOUT=0x4000000000β constant, typechar *$IB_PIR_COMPMASK_MKEYVIO=0x8000000000β constant, typechar *$IB_PIR_COMPMASK_PKEYVIO=0x10000000000β constant, typechar *$IB_PIR_COMPMASK_QKEYVIO=0x20000000000β constant, typechar *$IB_PIR_COMPMASK_GUIDCAP=0x40000000000β constant, typechar *$IB_PIR_COMPMASK_RESV2=0x80000000000β constant, typechar *$IB_PIR_COMPMASK_SUBNTO=0x100000000000β constant, typechar *$IB_PIR_COMPMASK_RESV3=0x200000000000β constant, typechar *$IB_PIR_COMPMASK_RESPTIME=0x400000000000β constant, typechar *$IB_PIR_COMPMASK_LOCALPHYERR=0x800000000000β constant, typechar *$IB_PIR_COMPMASK_OVERRUNERR=0x1000000000000β constant, typechar *
okay that's the whole mask buffet, bestie, and yes the last sixteen are char * and the middle chunk is int, don't ask me why, the manpage said so π
π¦ class sacPortInfo π¦
Fields: (aka the whole personality of a port)
-m_keyβ member data, hands you back anib_net64_t *-subnet_prefixβ member data, hands you back anib_net64_t *-base_lidβ member data, hands you back anib_net16_t *-master_sm_base_lidβ member data, hands you back anib_net16_t *-capability_maskβ member data, hands you back anib_net32_t *-diag_codeβ member data, hands you back anib_net16_t *-m_key_lease_periodβ member data, hands you back anib_net16_t *-local_port_numβ member data, hands you back auint8_t *-link_width_enabledβ member data, hands you back auint8_t *-link_width_supportedβ member data, hands you back auint8_t *-link_width_activeβ member data, hands you back auint8_t *-state_info1β member data, hands you back auint8_t *β and it's holding LinkSpeedSupported and PortState in there together, two-for-one deal-state_info2β member data, hands you back auint8_t *β this one carries PortPhysState and LinkDownDefaultState-mkey_lmcβ member data, hands you back auint8_t *-link_speedβ member data, hands you back auint8_t *β LinkSpeedEnabled and LinkSpeedActive, sharing one lil byte-mtu_smslβ member data, hands you back auint8_t *-vl_capβ member data, hands you back auint8_t *β VlCap and InitType live in here-vl_high_limitβ member data, hands you back auint8_t *-vl_arb_high_capβ member data, hands you back auint8_t *-vl_arb_low_capβ member data, hands you back auint8_t *-mtu_capβ member data, hands you back auint8_t *-vl_stall_lifeβ member data, hands you back auint8_t *-vl_enforceβ member data, hands you back auint8_t *-m_key_violationsβ member data, hands you back anib_net16_t *-p_key_violationsβ member data, hands you back anib_net16_t *-q_key_violationsβ member data, hands you back anib_net16_t *-guid_capβ member data, hands you back auint8_t *-subnet_timeoutβ member data, hands you back auint8_t *-resp_time_valueβ member data, hands you back auint8_t *-error_thresholdβ member data, hands you back auint8_t *deleteβ a member that returnsvoidπ«Ά (say bye to it properly)
πΈ class sacPortRec πΈ
RID Fields:
-lidβ member data, hands you back anib_net16_t *-port_numβ member data, hands you back auint8_t *-port_infoβ member data, hands you back asacPortInfo *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
π SM INFO RECORD π
Component mask bits: (yes bestie, more of them, hydrate first)
$IB_SMR_COMPMASK_LID=0x1β constant, typechar *$IB_SMR_COMPMASK_GUID=0x2β constant, typechar *$IB_SMR_COMPMASK_SM_KEY=0x4β constant, typechar *$IB_SMR_COMPMASK_ACT_COUNT=0x8β constant, typechar *$IB_SMR_COMPMASK_STATE=0x10β constant, typeint$IB_SMR_COMPMASK_PRI=0x20β constant, typeint
β¨ class sacSmInfo β¨
Fields:
-guidβ member data, hands you back anib_net64_t *-sm_keyβ member data, hands you back anib_net64_t *-act_countβ member data, hands you back anib_net32_t *-pri_stateβ member data, hands you back auint8_t *deleteβ member, returnsvoid
β¨ class sacSmRec β¨
RID Fields:
-lidβ member data, hands you back anib_net16_t *-sm_infoβ member data, hands you back asacSmInfo *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
π SWITCH INFO RECORD π
Component mask bits:
$IB_SWR_COMPMASK_LID=0x1β constant, typechar *$IB_SWR_COMPMASK_LIN_CAP=0x2β constant, typechar *$IB_SWR_COMPMASK_RAND_CAP=0x4β constant, typechar *$IB_SWR_COMPMASK_MCAST_CAP=0x8β constant, typechar *$IB_SWR_COMPMASK_LIN_TOP=0x10β constant, typechar *$IB_SWR_COMPMASK_DEF_PORT=0x20β constant, typechar *$IB_SWR_COMPMASK_DEF_MCAST_PRI=0x40β constant, typechar *$IB_SWR_COMPMASK_DEF_MCAST_NOT=0x80β constant, typechar *$IB_SWR_COMPMASK_STATE=0x100β constant, typechar *$IB_SWR_COMPMASK_LIFE=0x200β constant, typechar *$IB_SWR_COMPMASK_LMC=0x400β constant, typechar *$IB_SWR_COMPMASK_ENFORCE_CAP=0x800β constant, typechar *$IB_SWR_COMPMASK_FLAGS=0x1000β constant, typechar *
π¦ class sacSwInfo π¦
Fields:
-lin_capβ member data, hands you back anib_net16_t *-rand_capβ member data, hands you back anib_net16_t *-mcast_capβ member data, hands you back anib_net16_t *-lin_topβ member data, hands you back anib_net16_t *-def_portβ member data, hands you back auint8_t *-def_mcast_pri_portβ member data, hands you back auint8_t *-def_mcast_not_portβ member data, hands you back auint8_t *-life_stateβ member data, hands you back auint8_t *-lids_per_portβ member data, hands you back anib_net16_t *-enforce_capβ member data, hands you back anib_net16_t *-flagsβ member data, hands you back auint8_t *deleteβ member, returnsvoid
π¦ class sacSwRec π¦
RID Fields:
-lidβ member data, hands you back anib_net16_t *-switch_infoβ member data, hands you back asacSwInfo *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
π« LINK RECORD π«
Component mask bits:
$IB_LR_COMPMASK_FROM_LID=0x1β constant, typeint$IB_LR_COMPMASK_FROM_PORT=0x2β constant, typeint$IB_LR_COMPMASK_TO_PORT=0x4β constant, typeint$IB_LR_COMPMASK_TO_LID=0x8β constant, typeint
β¨ class sacLinkRec β¨
Fields:
-from_lidβ member data, hands you back anib_net16_t *-from_port_numβ member data, hands you back auint8_t *-to_port_numβ member data, hands you back auint8_t *-to_lidβ member data, hands you back anib_net16_t *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
β PATH RECORD β
Component mask bits:
$IB_PR_COMPMASK_DGID=0x4β constant, typeint$IB_PR_COMPMASK_SGID=0x8β constant, typeint$IB_PR_COMPMASK_DLID=0x10β constant, typeint$IB_PR_COMPMASK_SLID=0x20β constant, typeint$IB_PR_COMPMASK_RAWTRAFIC=0x40β constant, typeint$IB_PR_COMPMASK_RESV0=0x80β constant, typeint$IB_PR_COMPMASK_FLOWLABEL=0x100β constant, typeint$IB_PR_COMPMASK_HOPLIMIT=0x200β constant, typeint$IB_PR_COMPMASK_TCLASS=0x400β constant, typeint$IB_PR_COMPMASK_REVERSIBLE=0x800β constant, typeint$IB_PR_COMPMASK_NUMBPATH=0x1000β constant, typeint$IB_PR_COMPMASK_PKEY=0x2000β constant, typeint$IB_PR_COMPMASK_RESV1=0x4000β constant, typeint$IB_PR_COMPMASK_SL=0x8000β constant, typeint$IB_PR_COMPMASK_MTUSELEC=0x10000β constant, typeint$IB_PR_COMPMASK_MTU=0x20000β constant, typeint$IB_PR_COMPMASK_RATESELEC=0x40000β constant, typeint$IB_PR_COMPMASK_RATE=0x80000β constant, typeint$IB_PR_COMPMASK_PKTLIFETIMESELEC=0x100000β constant, typeint$IB_PR_COMPMASK_PFTLIFETIME=0x200000β constant, typeint
π¦ class sacPathRec π¦
Fields:
-dgidβ member data, hands you back anib_gid_t *-sgidβ member data, hands you back anib_gid_t *-dlidβ member data, hands you back anib_net16_t *-slidβ member data, hands you back anib_net16_t *-hop_flow_rawβ member data, hands you back anib_net32_t *-tclassβ member data, hands you back auint8_t *-num_pathβ member data, hands you back auint8_t *-pkeyβ member data, hands you back anib_net16_t *-slβ member data, hands you back anib_net16_t *-mtuβ member data, hands you back auint8_t *-rateβ member data, hands you back auint8_t *-pkt_lifeβ member data, hands you back auint8_t *-preferenceβ member data, hands you back auint8_t *
Methds: β okay not me typing that, the manpage literally spells it Methds and I'm keeping it because we respect the source π
(it's the methods list)
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
π§ LINEAR FORWARDING TABLE π§
Component mask bits:
$IB_LFT_COMPMASK_LID=0x1β constant, typechar *$IB_LFT_COMPMASK_BLOCK=0x2β constant, typechar *
β¨ class sacLFTRec β¨
Fields:
-lidβ member data, hands you back anib_net16_t *-block_numβ member data, hands you back anib_net16_t *-lftβ member data, hands you back anib_lft_t *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
πΈ MULTICAST MEMBER RECORD πΈ
Component mask bits:
$IB_MCR_COMPMASK_GID=0x1$IB_MCR_COMPMASK_MGID=0x1$IB_MCR_COMPMASK_PORT_GID=0x2$IB_MCR_COMPMASK_QKEY=0x4$IB_MCR_COMPMASK_MLID=0x8$IB_MCR_COMPMASK_MTU_SEL=0x10$IB_MCR_COMPMASK_MTU=0x20$IB_MCR_COMPMASK_TCLASS=0x40$IB_MCR_COMPMASK_PKEY=0x80$IB_MCR_COMPMASK_RATE_SEL=0x100$IB_MCR_COMPMASK_RATE=0x200$IB_MCR_COMPMASK_LIFE_SEL=0x400$IB_MCR_COMPMASK_LIFE=0x800$IB_MCR_COMPMASK_SL=0x1000$IB_MCR_COMPMASK_FLOW=0x2000$IB_MCR_COMPMASK_HOP=0x4000$IB_MCR_COMPMASK_SCOPE=0x8000$IB_MCR_COMPMASK_JOIN_STATE=0x10000$IB_MCR_COMPMASK_PROXY=0x20000
class sacMCMRec π«Ά
Fields:
-mgidβ member data, returnsib_gid_t *-port_gidβ member data, returnsib_gid_t *-qkeyβ member data, returnsib_net32_t *-mlidβ member data, returnsib_net16_t *-mtuβ member data, returnsuint8_t *-tclassβ member data, returnsuint8_t *-pkeyβ member data, returnsib_net16_t *-rateβ member data, returnsuint8_t *-pkt_lifeβ member data, returnsuint8_t *-sl_flow_hopβ member data, returnsib_net32_t *-scope_stateβ member data, returnsuint8_t *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *set comp_maskβ returnschar *del comp_maskβ returnschar *proxy_join_getβ returnsint. bestie it's doing the most β instead of simple fieldcgetπproxy_join_set proxy_joinβ returnsvoid. instead of simple fieldconfigureobj_deleteβ returnsvoid. Delete the object, no notes, it's gone π«‘
SA CLASS PORT INFO π¦
class sacClassPortInfo
Fields:
-base_verβ member data, returnsuint8_t *-class_verβ member data, returnsuint8_t *-cap_maskβ member data, returnsib_net16_t *-resp_time_valβ member data, returnsib_net32_t *-redir_gidβ member data, returnsib_gid_t *-redir_tc_sl_flβ member data, returnsib_net32_t *-redir_lidβ member data, returnsib_net16_t *-redir_pkeyβ member data, returnsib_net16_t *-redir_qpβ member data, returnsib_net32_t *-redir_qkeyβ member data, returnsib_net32_t *-trap_gidβ member data, returnsib_gid_t *-trap_tc_sl_flβ member data, returnsib_net32_t *-trap_lidβ member data, returnsib_net16_t *-trap_pkeyβ member data, returnsib_net16_t *-trap_hop_qpβ member data, returnsib_net32_t *-trap_qkeyβ member data, returnsib_net32_t *
Methods:
getβ returnschar *deleteβ returnsvoid
INFORM INFO RECORD π
so the inform Info is built with a whole hierarchy of objects, like a little nesting doll situation πͺ. So several classes are defined. periodt.
class sacInformInfo
Fields:
-gidβ member data, returnsib_gid_t *-lid_range_beginβ member data, returnsib_net16_t *-lid_range_endβ member data, returnsib_net16_t *-reserved1β member data, returnsib_net16_t *-is_genericβ member data, returnsuint8_t *-subscribeβ member data, returnsuint8_t *-trap_typeβ member data, returnsib_net16_t *-g_or_vβ member data, returnssacInformInfo_g_or_v *
Methods:
setβ returnschar *deleteβ returnsvoid
class sacInformInfo_g_or_v
Fields:
-genericβ member data, returnssacInformInfo_g_or_v_generic *-vendβ member data, returnssacInformInfo_g_or_v_vend *
class sacInformInfo_g_or_v_generic
Fields:
-trap_numβ member data, returnsib_net16_t *-qpn_resp_time_valβ member data, returnsib_net32_t *-reserved2β member data, returnsuint8_t *-node_type_msbβ member data, returnsuint8_t *-node_type_lsbβ member data, returnsib_net16_t *
class sacInformInfo_g_or_v_vend
Fields:
-dev_idβ member data, returnsib_net16_t *-qpn_resp_time_valβ member data, returnsib_net32_t *-reserved2β member data, returnsuint8_t *-vendor_id_msbβ member data, returnsuint8_t *-vendor_id_lsbβ member data, returnsib_net16_t *
SERVICE RECORD π
Component mask bits:
$IB_SR_COMPMASK_SID=0x1$IB_SR_COMPMASK_SGID=0x1$IB_SR_COMPMASK_SPKEY=0x2$IB_SR_COMPMASK_RES1=0x4$IB_SR_COMPMASK_SLEASE=0x8$IB_SR_COMPMASK_SKEY=0x10$IB_SR_COMPMASK_SNAME=0x20$IB_SR_COMPMASK_SDATA8_0=0x40$IB_SR_COMPMASK_SDATA8_1=0x80$IB_SR_COMPMASK_SDATA8_2=0x100$IB_SR_COMPMASK_SDATA8_3=0x200$IB_SR_COMPMASK_SDATA8_4=0x400$IB_SR_COMPMASK_SDATA8_5=0x800$IB_SR_COMPMASK_SDATA8_6=0x1000$IB_SR_COMPMASK_SDATA8_7=0x2000$IB_SR_COMPMASK_SDATA8_8=0x4000$IB_SR_COMPMASK_SDATA8_9=0x8000$IB_SR_COMPMASK_SDATA8_10=0x10000$IB_SR_COMPMASK_SDATA8_11=0x20000$IB_SR_COMPMASK_SDATA8_12=0x40000$IB_SR_COMPMASK_SDATA8_13=0x80000$IB_SR_COMPMASK_SDATA8_14=0x100000$IB_SR_COMPMASK_SDATA8_15=0x200000$IB_SR_COMPMASK_SDATA16_0=0x400000$IB_SR_COMPMASK_SDATA16_1=0x800000$IB_SR_COMPMASK_SDATA16_2=0x1000000$IB_SR_COMPMASK_SDATA16_3=0x2000000$IB_SR_COMPMASK_SDATA16_4=0x4000000$IB_SR_COMPMASK_SDATA16_5=0x8000000$IB_SR_COMPMASK_SDATA16_6=0x10000000$IB_SR_COMPMASK_SDATA16_7=0x20000000$IB_SR_COMPMASK_SDATA32_0=0x40000000$IB_SR_COMPMASK_SDATA32_1=0x80000000$IB_SR_COMPMASK_SDATA32_2=0x100000000$IB_SR_COMPMASK_SDATA32_3=0x200000000$IB_SR_COMPMASK_SDATA64_0=0x400000000$IB_SR_COMPMASK_SDATA64_1=0x800000000
class sacServiceRec
Fields:
-service_idβ member data, returnsib_net64_t *-service_gidβ member data, returnsib_gid_t *-service_pkeyβ member data, returnsib_net16_t *-resvβ member data, returnsib_net16_t *-service_leaseβ member data, returnsib_net32_t *-service_keyβ member data, returnsuint8_array_t *-service_nameβ member data, returnsib_svc_name_t *-service_data8β member data, returnsuint8_array_t *-service_data16β member data, returnsib_net16_array_t *-service_data32β member data, returnsib_net32_array_t *-service_data64β member data, returnsib_net64_array_t *
Methods:
get comp_maskβ returnschar *set comp_maskβ returnschar *getTable comp_maskβ returnschar *delete comp_maskβ returnschar *obj_deleteβ returnsvoid
SL to VL TABLE RECORD β¨
Component mask bits:
$IB_SLVL_COMPMASK_LID=0x1$IB_SLVL_COMPMASK_IN_PORT=0x2$IB_SLVL_COMPMASK_OUT_PORT=0x4
class sacSlVlTbl
-raw_vl_by_slβ member data, returnsuint8_array_t *
class sacSlVlRec
RID Fields:
-lidβ member data, returnsib_net16_t *. for CA: lid of port, for switch lid of port0π«-in_port_numβ member data, returnsuint8_t *. reserved for CA's-out_port_numβ member data, returnsuint8_t *. reserved for CA's-resvβ member data, returnsuint32_t *-slvl_tblβ member data, returnssacSlVlTbl *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
VL ARBITRATION TABLE RECORD πΈ
Component mask bits:
$IB_VLA_COMPMASK_LID=0x1$IB_VLA_COMPMASK_OUT_PORT=0x2$IB_VLA_COMPMASK_BLOCK=0x4
class sacVlArbRec
Fields:
-lidβ member data, returnsib_net16_t *. for CA: lid of port, for switch lid of port0π-port_numβ member data, returnsuint8_t *-block_numβ member data, returnsuint8_t *-reservedβ member data, returnsuint32_t *-vl_arb_tblβ member data, returnssac_vl_arb_tbl_t *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
PKEY TABLE RECORD π
Component mask bits:
$IB_PKEY_COMPMASK_LID=0x1$IB_PKEY_COMPMASK_BLOCK=0x2$IB_PKEY_COMPMASK_PORT=0x4
class sacPKeyTbl
Fields:
-pkey_entryβ member data, returnsib_net16_array_t *
class sacPKeyRec
RID Fields:
-lidβ member data, returnsib_net16_t *. for CA: lid of port, for switch lid of port0π-block_numβ member data, returnsuint16_t *-port_numβ member data, returnsuint8_t *. for switch: port number, for CA: reserved π«Ά-reserved1β member data, returnsuint8_t *-reserved2β member data, returnsuint16_t *-pkey_tblβ member data, returnssacPKeyTbl *
Methods:
get comp_maskβ returnschar *getTable comp_maskβ returnschar *deleteβ returnsvoid
π°οΈ Subnet Management MADs (SMPs) π°οΈ
okay so bestie, the SM interface is literally the plug for yeeting Subnet Management Packets out into the fabric devices π. Which specific attributes you can actually touch? That's all spelled out super detailed in each sub section down below, one by one, no skipping π
There's a whole set of object types defined for you. Here's the vibe: you can allocate a brand new attribute object β¨. Then, once it exists, you can set that object using configure or by using the direct manipulation methods. And because that wasn't enough, every single object gets some extra methods too, because why not, we're generous π
:
setByDr <dr> <attrMod>β sets the attribute on the object you can reach via the given directed route. And a directed route is literally just a list of port numbers to go out from, that's it, that's the whole thing πͺgetByDr <dr> <attrMod>β grabs the attribute value by traversing a directed route π§setByLid <lid> <attrMod>β sets the attribute on the object you can reach via the given LID πgetByLid <lid> <attrMod>β gets the attribute on the object you can reach via the given LID π
πΈ class smNodeInfo πΈ
Fields, aka the member data, and yes every single one of them, presented with love π«Ά:
-base_versionβ [ Member data: returnsuint8_t *]-class_versionβ [ Member data: returnsuint8_t *]-node_typeβ [ Member data: returnsuint8_t *]-num_portsβ [ Member data: returnsuint8_t *]-sys_guidβ [ Member data: returnsib_net64_t *]-node_guidβ [ Member data: returnsib_net64_t *]-port_guidβ [ Member data: returnsib_net64_t *]-partition_capβ [ Member data: returnsib_net16_t *]-device_idβ [ Member data: returnsib_net16_t *]-revisionβ [ Member data: returnsib_net32_t *]-port_num_vendor_idβ [ Member data: returnsib_net32_t *]
Methods, the little icons of this class, all of them returning an int because of course they do π:
getByDr drβ [ Member : returnsint]setByDr drβ [ Member : returnsint]getByLid lidβ [ Member : returnsint]setByLid lidβ [ Member : returnsint]
class smPortInfo πΈ
okay so this one is the port info glow-up β everything the SM knows about a single port lives here π
Fields:
-m_keyβib_net64_t *-subnet_prefixβib_net64_t *-base_lidβib_net16_t *-master_sm_base_lidβib_net16_t *-capability_maskβib_net32_t *-diag_codeβib_net16_t *-m_key_lease_periodβib_net16_t *-local_port_numβuint8_t *-link_width_enabledβuint8_t *-link_width_supportedβuint8_t *-link_width_activeβuint8_t *-state_info1βuint8_t *β it's givingLinkSpeedSupportedandPortStateβ¨-state_info2βuint8_t *β this one'sPortPhysStateandLinkDownDefaultState-mkey_lmcβuint8_t *-link_speedβuint8_t *βLinkSpeedEnabledandLinkSpeedActive, no cap-mtu_smslβuint8_t *-vl_capβuint8_t *βVlCapandInitType-vl_high_limitβuint8_t *-vl_arb_high_capβuint8_t *-vl_arb_low_capβuint8_t *-mtu_capβuint8_t *-vl_stall_lifeβuint8_t *-vl_enforceβuint8_t *-m_key_violationsβib_net16_t *-p_key_violationsβib_net16_t *-q_key_violationsβib_net16_t *-guid_capβuint8_t *-subnet_timeoutβuint8_t *-resp_time_valueβuint8_t *-error_thresholdβuint8_t *
Methods:
getByDrdr portNum β returnsintsetByDrdr portNum β returnsintgetByLidlid portNum β returnsintsetByLidlid portNum β returnsint
class smSwInfo π¦
switch-level tea, served fresh
-lin_capβib_net16_t *-rand_capβib_net16_t *-mcast_capβib_net16_t *-lin_topβib_net16_t *-def_portβuint8_t *-def_mcast_pri_portβuint8_t *-def_mcast_not_portβuint8_t *-life_stateβuint8_t *-lids_per_portβib_net16_t *-enforce_capβib_net16_t *-flagsβuint8_t *getByDrdr β returnsintsetByDrdr β returnsintgetByLidlid β returnsintsetByLidlid β returnsint
class smLftBlock π
linear forwarding table, but make it a block
-lftβuint8_array_t *getByDrdr blockNum β returnsintsetByDrdr blockNum β returnsintgetByLidlid blockNum β returnsintsetByLidlid blockNum β returnsint
class smMftBlock π
multicast forwarding table block, periodt
-mftβib_net16_array_t *getByDrdr startLid startPort β returnsintsetByDrdr startLid startPort β returnsintgetByLidlid startLid startPort β returnsintsetByLidlid startLid startPort β returnsint
class smGuidInfo π
-guidβib_net64_array_t *getByDrdr blockNum β returnsintsetByDrdr blockNum β returnsintgetByLidlid blockNum β returnsintsetByLidlid blockNum β returnsint
class smPkeyTable π
partition keys, bestie. the whole table.
-pkey_entryβib_net16_array_t *getByDrdr portNum blockNum β returnsintsetByDrdr portNum blockNum β returnsintgetByLidlid portNum blockNum β returnsintsetByLidlid portNum blockNum β returnsint
class smSlVlTable π§
service level β virtual lane, mapped by raw vibe
-raw_vl_by_slβuint8_array_t *getByDrdr inPortNum outPortNum β returnsintsetByDrdr inPortNum outPortNum β returnsintgetByLidlid inPortNum outPortNum β returnsintsetByLidlid inPortNum outPortNum β returnsint
class smVlArbTable β
-vl_entryβib_vl_arb_element_t *getByDrdr portNum block β returnsintsetByDrdr portNum block β returnsintgetByLidlid portNum block β returnsintsetByLidlid portNum block β returnsint
class smNodeDesc π
the node description, aka the name tag
-descriptionβibsm_node_desc_str_t *getByDrdr β returnsintsetByDrdr β returnsintgetByLidlid β returnsintsetByLidlid β returnsint
class smSMInfo π
subnet manager info β who's running the show
-guidβib_net64_t *-sm_keyβib_net64_t *-act_countβib_net32_t *-pri_stateβuint8_t *getByDrdr β returnsintsetByDrdr β returnsintgetByLidlid β returnsintsetByLidlid β returnsint
class smNotice π¨
the NOTICE attribute is built out of several sub objects β so yes, this is a whole little family, not just one thing
-generic_typeβuint8_t *-issuer_lidβib_net16_t *-toggle_countβib_net16_t *-issuer_gidβib_gid_t *-g_or_vβsmNotice_g_or_v *-data_detailsβsmNotice_data_details *trapByDrdr β returnsinttrapByLidlid β returnsint
class smNotice_g_or_v β generic or vendor, pick your fighter
-genericβsmNotice_g_or_v_generic *-vendβsmNotice_g_or_v_vend *
class smNotice_data_details β the payload corner, all the variants
-raw_dataβsmNotice_data_details_raw_data *-ntc_64_67βsmNotice_data_details_ntc_64_67 *-ntc_128βsmNotice_data_details_ntc_128 *-ntc_129_131βsmNotice_data_details_ntc_129_131 *-ntc_144βsmNotice_data_details_ntc_144 *-ntc_145βsmNotice_data_details_ntc_145 *-ntc_256βsmNotice_data_details_ntc_256 *-ntc_257_258βsmNotice_data_details_ntc_257_258 *-ntc_259βsmNotice_data_details_ntc_259 *
class smNotice_g_or_v_generic
-prod_type_msbβuint8_t *-prod_type_lsbβib_net16_t *-trap_numβib_net16_t *
class smNotice_g_or_v_vend
-vend_id_msbβuint8_t *-vend_id_lsbβib_net16_t *-dev_idβib_net16_t *
class smNotice_data_details_raw_data
-detailsβuint8_array_t *
class smNotice_data_details_ntc_64_67
-resβuint8_array_t *-gidβib_gid_t *β the Node or Multicast Group that came in/out, iykyk
class smNotice_data_details_ntc_128
-sw_lidβib_net16_t *β the sw lid of which link state changed
class smNotice_data_details_ntc_129_131
-padβib_net16_t *-lidβib_net16_t *β lid and port number of the violation-port_numβuint8_t *
class smNotice_data_details_ntc_144
-pad1βib_net16_t *-lidβib_net16_t *β lid where capability mask changed-pad2βib_net16_t *-new_cap_maskβib_net32_t *β new capability mask
class smNotice_data_details_ntc_145
-pad1βib_net16_t *-lidβib_net16_t *β lid where sys guid changed-pad2βib_net16_t *-new_sys_guidβib_net64_t *β new system image guid
class smNotice_data_details_ntc_256
-pad1βib_net16_t *-lidβib_net16_t *-pad2βib_net16_t *-methodβuint8_t *-pad3βuint8_t *-attr_idβib_net16_t *-attr_modβib_net32_t *-mkeyβib_net64_t *-dr_slidβuint8_t *-dr_trunc_hopβuint8_t *-dr_rtn_pathβuint8_array_t *
class smNotice_data_details_ntc_257_258
-pad1βib_net16_t *-lid1βib_net16_t *-lid2βib_net16_t *-keyβib_net32_t *-slβuint8_t *-qp1βib_net32_t *-qp2βib_net32_t *-gid1βib_gid_t *-gid2βib_gid_t *
class smNotice_data_details_ntc_259
-data_validβib_net16_t *-lid1βib_net16_t *-lid2βib_net16_t *-keyβib_net32_t *-slβuint8_t *-qp1βib_net32_t *-qp2_msbβuint8_t *-qp2_lsbβib_net16_t *-gid1βib_gid_t *-gid2βib_gid_t *-sw_lidβib_net16_t *-port_noβuint8_t *
β¨ IBCR Functions β¨
bestie this is the vendor-specific backstage pass ποΈ β it gives you access to the device's internal configuration space.
This section spills the details about the functions IBCR exposes. And here's the lil fact you need: they all return 0 on success. π«Ά
crMultiMaxGetβ returnsintcrReadlid address β returnsintcrWritelid data address β returnsintcrReadMultinum lid_list address β returnsintcrWriteMultinum lid_list data address β returnsint
π¦ IB Vendor Specific Functions
Okay bestie, gather round, because IBVS stands for Vendor Specific MADs β that's the whole vibe of this section, no cap. π
This section provides the details about the functions IBVS exposes. And the best part? They all return 0 on success. Every single one. It's giving consistent. It's giving reliable. It's giving we love a predictable return value. β¨
[ returns int ] vsMultiMaxGetβ no args, just vibes and anintcoming back at you. The little "how many can we do at once" baddie. π[ returns int ] vsCpuRead lid size cpu_traget_size addressβ takeslid,size,cpu_traget_sizeandaddress, hands you back anint. (Yes,cpu_traget_sizeis spelled exactly like that. We do not correct the source code's spelling, that's not our business. π)[ returns int ] vsCpuWrite lid size cpu_traget_size data addressβ same crew as the read, but now withdatain the mix. Writes things. Returnsint. Slay. π[ returns int ] vsI2cRead lid port_num device_id size addressβ the I2C read, withlid,port_num,device_id,size,address. Returnsint, obviously. πΈ[ returns int ] vsI2cWrite lid port_num device_id size address dataβ I2C write energy. Args:lid,port_num,device_id,size,address,data. Return:int. π[ returns int ] vsI2cReadMulti num lid_list port_num device_id size addressβ the multi version, because one LID is never enough. Takesnum,lid_list,port_num,device_id,size,address, returnsint. π₯[ returns int ] vsI2cWriteMulti num lid_list port_num device_id size address dataβ multi write, same squad plusdata. Returnsint. Periodt.[ returns int ] vsGpioRead lidβ justlid. That's it. That's the whole function. Minimalist icon behavior. π§[ returns int ] vsGpioWrite lid gpio_mask gpio_dataβlid,gpio_mask,gpio_data, and yes, aninton the way out. π[ returns int ] vsSWReset num lid_listβ software reset acrossnumLIDs inlid_list. Returnsint. Dramatic? Maybe. Necessary? Absolutely. π«Ά[ returns int ] vsFlashStartMulti num lid_list last size address dataβ flash start, multi-style. Args arenum,lid_list,last,size,address,data. Returnsint. β[ returns int ] vsFlashStopMulti num lid_list forceβ flash stop, with aforceflag, because sometimes you gotta be firm. Returnsint. π€[ returns int ] vsFlashSetBankMulti num lid_list addressβ setting the bank fornumLIDs inlid_listataddress. Returnsint. π¦[ returns int ] vsFlashEraseSectorMulti num lid_list addressβ erasing that sector. Args:num,lid_list,address. Returnsint. π[ returns int ] vsFlashReadSectorMulti num lid_list size addressβ read the sector:num,lid_list,size,address, thenint. π[ returns int ] vsFlashWriteSectorMulti num lid_list size address dataβ write the sector:num,lid_list,size,address,data, thenint. Main character energy, honestly. β¨[ returns int ] vsMirrorRead lidβ onelid, oneint. Simple, clean, iconic. π[ returns int ] vsMirrorWrite lid rx_mirror tx_mirrorβlid,rx_mirror,tx_mirror, and anintback. Mirror mirror on the wall, who's the most well-configured port of them all. π
π IBBBM Functions
This section provides the details about the functions IBBBM exposes. And guess what, bestie? They all return 0 on success too. The consistency is honestly so soothing. π
[ returns int ] bbmVpdRead lid vpd_device_selector bytes_num offsetβ takeslid,vpd_device_selector,bytes_num,offset. Returnsint. π[ returns int ] bbmVpdWrite lid vpd_device_selector bytes_num offset p_dataβ same args plusp_data, because writing needs actual data, obviously. Returnsint. π[ returns int ] bbmVSDRead lidβ justlid. Returnsint. Small, mighty, focused. π§[ returns int ] bbmBSNRead lidβlidin,intout. π¦[ returns int ] bbmModRead lidβlidin,intout. The trilogy continues. πΈ[ returns int ] bbmChaRead lidβlidin,intout. Obsessed with the pattern tbh. π[ returns int ] bbmFWVerRead lidβlidin,intout. Firmware version reading, and you know it's returning anint. π₯
fr fr, every single one of these returns 0 on success β that's the contract, that's the promise, that's the whole deal. π«Ά
π AUTHOR
Eitan Zahavi, Mellanox Technologies LTD, eitan@mellanox.co.il
And that's the whole page, bestie β we made it to the end and nobody can take that from us. π
This was IBIS version 1.0, dated 2024-04-22, living in section 1 of the manual. Go forth and vendor-specify, you absolute legend. Slay, stay safe, and always check the return value. π
β¨
π¦ where this page comes from
- ubuntu noble: ibutils 1.5.7+0.2.gbd7e502-3build1
- ubuntu questing: ibutils 1.5.7+0.2.gbd7e502-3build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms