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, with GUID, 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 the GUID of 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 β€” if TRUE β€” 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 before ibis_init is used to make an affect ⚠️ (yes, "affect" β€” character for character, bestie)
  • [ Member data: returns uint64_t * ] -sm_key β€” the SM_Key to be used when sending SubnetMgt and SubnetAdmin MADs πŸ”‘
  • [ Member data: returns uint64_t * ] -m_key β€” the M_Key to be used when sending SubnetMgt πŸ”
  • [ Member data: returns uint64_t * ] -v_key β€” the Vendor Key to 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 given LID and 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 given LID and 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 info
  • nr:<idx> = node info record (SA RID + node info)
  • pi:<idx> = port info
  • pir:<idx> = port info record (SA RID + port info)
  • smi:<idx> = SM info
  • smir:<idx> = SM info record (SA RID + SM info)
  • swi:<idx> = switch info
  • swir:<idx> = switch info record (SA RID + switch info)
  • slvt:<idx> = SL to VL table
  • slvr:<idx> = SL to VL table Record (SA RID + SL to VL table)
  • pkt:<idx> = PKey table
  • pkr:<idx> = PKey table record (SA RID + PKey table)

Queries of non embedded attributes: πŸͺ„

  • link:<idx> = link record
  • path:<idx> = path record
  • lft:<idx> = Linear forwarding table
  • mcm:<idx> = Multicast Member Record
  • cpi:<idx> = SA Class Port Info
  • info:<idx> = Inform info (registration of event forwarding)
  • svc:<idx> = Service Record
  • vlarb:<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, type char * ✨
  • $IB_PIR_COMPMASK_PORTNUM = 0x2 β€” constant, type char *
  • $IB_PIR_COMPMASK_RESV1 = 0x4 β€” constant, type char *
  • $IB_PIR_COMPMASK_MKEY = 0x8 β€” constant, type char *
  • $IB_PIR_COMPMASK_GIDPRE = 0x10 β€” constant, type int
  • $IB_PIR_COMPMASK_BASELID = 0x20 β€” constant, type int
  • $IB_PIR_COMPMASK_SMLID = 0x40 β€” constant, type int
  • $IB_PIR_COMPMASK_CAPMASK = 0x80 β€” constant, type int
  • $IB_PIR_COMPMASK_DIAGCODE = 0x100 β€” constant, type int
  • $IB_PIR_COMPMASK_MKEYLEASEPRD = 0x200 β€” constant, type int
  • $IB_PIR_COMPMASK_LOCALPORTNUM = 0x400 β€” constant, type int
  • $IB_PIR_COMPMASK_LNKWIDTHSUPPORT = 0x800 β€” constant, type int
  • $IB_PIR_COMPMASK_LNKWIDTHACTIVE = 0x1000 β€” constant, type int
  • $IB_PIR_COMPMASK_LINKWIDTHENABLED = 0x2000 β€” constant, type int
  • $IB_PIR_COMPMASK_LNKSPEEDSUPPORT = 0x4000 β€” constant, type int
  • $IB_PIR_COMPMASK_PORTSTATE = 0x10000 β€” constant, type int
  • $IB_PIR_COMPMASK_PORTPHYSTATE = 0x20000 β€” constant, type int
  • $IB_PIR_COMPMASK_LINKDWNDFLTSTATE = 0x40000 β€” constant, type int
  • $IB_PIR_COMPMASK_MKEYPROTBITS = 0x80000 β€” constant, type int
  • $IB_PIR_COMPMASK_LMC = 0x100000 β€” constant, type int
  • $IB_PIR_COMPMASK_LINKSPEEDACTIVE = 0x200000 β€” constant, type int
  • $IB_PIR_COMPMASK_LINKSPEEDENABLE = 0x400000 β€” constant, type int
  • $IB_PIR_COMPMASK_NEIGHBORMTU = 0x800000 β€” constant, type int
  • $IB_PIR_COMPMASK_MASTERSMSL = 0x1000000 β€” constant, type int
  • $IB_PIR_COMPMASK_VLCAP = 0x2000000 β€” constant, type int
  • $IB_PIR_COMPMASK_INITTYPE = 0x4000000 β€” constant, type int
  • $IB_PIR_COMPMASK_VLHIGHLIMIT = 0x8000000 β€” constant, type int
  • $IB_PIR_COMPMASK_VLARBHIGHCAP = 0x10000000 β€” constant, type int
  • $IB_PIR_COMPMASK_VLARBLOWCAP = 0x20000000 β€” constant, type int
  • $IB_PIR_COMPMASK_INITTYPEREPLY = 0x40000000 β€” constant, type int
  • $IB_PIR_COMPMASK_MTUCAP = 0x80000000 β€” constant, type int
  • $IB_PIR_COMPMASK_VLSTALLCNT = 0x100000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_HOQLIFE = 0x200000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_OPVLS = 0x400000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_PARENFIN = 0x800000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_PARENFOUT = 0x1000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_FILTERRAWIN = 0x2000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_FILTERRAWOUT = 0x4000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_MKEYVIO = 0x8000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_PKEYVIO = 0x10000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_QKEYVIO = 0x20000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_GUIDCAP = 0x40000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_RESV2 = 0x80000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_SUBNTO = 0x100000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_RESV3 = 0x200000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_RESPTIME = 0x400000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_LOCALPHYERR = 0x800000000000 β€” constant, type char *
  • $IB_PIR_COMPMASK_OVERRUNERR = 0x1000000000000 β€” constant, type char *

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 an ib_net64_t *
  • -subnet_prefix β€” member data, hands you back an ib_net64_t *
  • -base_lid β€” member data, hands you back an ib_net16_t *
  • -master_sm_base_lid β€” member data, hands you back an ib_net16_t *
  • -capability_mask β€” member data, hands you back an ib_net32_t *
  • -diag_code β€” member data, hands you back an ib_net16_t *
  • -m_key_lease_period β€” member data, hands you back an ib_net16_t *
  • -local_port_num β€” member data, hands you back a uint8_t *
  • -link_width_enabled β€” member data, hands you back a uint8_t *
  • -link_width_supported β€” member data, hands you back a uint8_t *
  • -link_width_active β€” member data, hands you back a uint8_t *
  • -state_info1 β€” member data, hands you back a uint8_t * β€” and it's holding LinkSpeedSupported and PortState in there together, two-for-one deal
  • -state_info2 β€” member data, hands you back a uint8_t * β€” this one carries PortPhysState and LinkDownDefaultState
  • -mkey_lmc β€” member data, hands you back a uint8_t *
  • -link_speed β€” member data, hands you back a uint8_t * β€” LinkSpeedEnabled and LinkSpeedActive, sharing one lil byte
  • -mtu_smsl β€” member data, hands you back a uint8_t *
  • -vl_cap β€” member data, hands you back a uint8_t * β€” VlCap and InitType live in here
  • -vl_high_limit β€” member data, hands you back a uint8_t *
  • -vl_arb_high_cap β€” member data, hands you back a uint8_t *
  • -vl_arb_low_cap β€” member data, hands you back a uint8_t *
  • -mtu_cap β€” member data, hands you back a uint8_t *
  • -vl_stall_life β€” member data, hands you back a uint8_t *
  • -vl_enforce β€” member data, hands you back a uint8_t *
  • -m_key_violations β€” member data, hands you back an ib_net16_t *
  • -p_key_violations β€” member data, hands you back an ib_net16_t *
  • -q_key_violations β€” member data, hands you back an ib_net16_t *
  • -guid_cap β€” member data, hands you back a uint8_t *
  • -subnet_timeout β€” member data, hands you back a uint8_t *
  • -resp_time_value β€” member data, hands you back a uint8_t *
  • -error_threshold β€” member data, hands you back a uint8_t *
  • delete β€” a member that returns void 🫢 (say bye to it properly)

🌸 class sacPortRec 🌸

RID Fields:

  • -lid β€” member data, hands you back an ib_net16_t *
  • -port_num β€” member data, hands you back a uint8_t *
  • -port_info β€” member data, hands you back a sacPortInfo *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

πŸŽ€ SM INFO RECORD πŸŽ€

Component mask bits: (yes bestie, more of them, hydrate first)

  • $IB_SMR_COMPMASK_LID = 0x1 β€” constant, type char *
  • $IB_SMR_COMPMASK_GUID = 0x2 β€” constant, type char *
  • $IB_SMR_COMPMASK_SM_KEY = 0x4 β€” constant, type char *
  • $IB_SMR_COMPMASK_ACT_COUNT = 0x8 β€” constant, type char *
  • $IB_SMR_COMPMASK_STATE = 0x10 β€” constant, type int
  • $IB_SMR_COMPMASK_PRI = 0x20 β€” constant, type int

✨ class sacSmInfo ✨

Fields:

  • -guid β€” member data, hands you back an ib_net64_t *
  • -sm_key β€” member data, hands you back an ib_net64_t *
  • -act_count β€” member data, hands you back an ib_net32_t *
  • -pri_state β€” member data, hands you back a uint8_t *
  • delete β€” member, returns void

✨ class sacSmRec ✨

RID Fields:

  • -lid β€” member data, hands you back an ib_net16_t *
  • -sm_info β€” member data, hands you back a sacSmInfo *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

🌈 SWITCH INFO RECORD 🌈

Component mask bits:

  • $IB_SWR_COMPMASK_LID = 0x1 β€” constant, type char *
  • $IB_SWR_COMPMASK_LIN_CAP = 0x2 β€” constant, type char *
  • $IB_SWR_COMPMASK_RAND_CAP = 0x4 β€” constant, type char *
  • $IB_SWR_COMPMASK_MCAST_CAP = 0x8 β€” constant, type char *
  • $IB_SWR_COMPMASK_LIN_TOP = 0x10 β€” constant, type char *
  • $IB_SWR_COMPMASK_DEF_PORT = 0x20 β€” constant, type char *
  • $IB_SWR_COMPMASK_DEF_MCAST_PRI = 0x40 β€” constant, type char *
  • $IB_SWR_COMPMASK_DEF_MCAST_NOT = 0x80 β€” constant, type char *
  • $IB_SWR_COMPMASK_STATE = 0x100 β€” constant, type char *
  • $IB_SWR_COMPMASK_LIFE = 0x200 β€” constant, type char *
  • $IB_SWR_COMPMASK_LMC = 0x400 β€” constant, type char *
  • $IB_SWR_COMPMASK_ENFORCE_CAP = 0x800 β€” constant, type char *
  • $IB_SWR_COMPMASK_FLAGS = 0x1000 β€” constant, type char *

πŸ¦‹ class sacSwInfo πŸ¦‹

Fields:

  • -lin_cap β€” member data, hands you back an ib_net16_t *
  • -rand_cap β€” member data, hands you back an ib_net16_t *
  • -mcast_cap β€” member data, hands you back an ib_net16_t *
  • -lin_top β€” member data, hands you back an ib_net16_t *
  • -def_port β€” member data, hands you back a uint8_t *
  • -def_mcast_pri_port β€” member data, hands you back a uint8_t *
  • -def_mcast_not_port β€” member data, hands you back a uint8_t *
  • -life_state β€” member data, hands you back a uint8_t *
  • -lids_per_port β€” member data, hands you back an ib_net16_t *
  • -enforce_cap β€” member data, hands you back an ib_net16_t *
  • -flags β€” member data, hands you back a uint8_t *
  • delete β€” member, returns void

πŸ¦‹ class sacSwRec πŸ¦‹

RID Fields:

  • -lid β€” member data, hands you back an ib_net16_t *
  • -switch_info β€” member data, hands you back a sacSwInfo *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

Component mask bits:

  • $IB_LR_COMPMASK_FROM_LID = 0x1 β€” constant, type int
  • $IB_LR_COMPMASK_FROM_PORT = 0x2 β€” constant, type int
  • $IB_LR_COMPMASK_TO_PORT = 0x4 β€” constant, type int
  • $IB_LR_COMPMASK_TO_LID = 0x8 β€” constant, type int

✨ class sacLinkRec ✨

Fields:

  • -from_lid β€” member data, hands you back an ib_net16_t *
  • -from_port_num β€” member data, hands you back a uint8_t *
  • -to_port_num β€” member data, hands you back a uint8_t *
  • -to_lid β€” member data, hands you back an ib_net16_t *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

⭐ PATH RECORD ⭐

Component mask bits:

  • $IB_PR_COMPMASK_DGID = 0x4 β€” constant, type int
  • $IB_PR_COMPMASK_SGID = 0x8 β€” constant, type int
  • $IB_PR_COMPMASK_DLID = 0x10 β€” constant, type int
  • $IB_PR_COMPMASK_SLID = 0x20 β€” constant, type int
  • $IB_PR_COMPMASK_RAWTRAFIC = 0x40 β€” constant, type int
  • $IB_PR_COMPMASK_RESV0 = 0x80 β€” constant, type int
  • $IB_PR_COMPMASK_FLOWLABEL = 0x100 β€” constant, type int
  • $IB_PR_COMPMASK_HOPLIMIT = 0x200 β€” constant, type int
  • $IB_PR_COMPMASK_TCLASS = 0x400 β€” constant, type int
  • $IB_PR_COMPMASK_REVERSIBLE = 0x800 β€” constant, type int
  • $IB_PR_COMPMASK_NUMBPATH = 0x1000 β€” constant, type int
  • $IB_PR_COMPMASK_PKEY = 0x2000 β€” constant, type int
  • $IB_PR_COMPMASK_RESV1 = 0x4000 β€” constant, type int
  • $IB_PR_COMPMASK_SL = 0x8000 β€” constant, type int
  • $IB_PR_COMPMASK_MTUSELEC = 0x10000 β€” constant, type int
  • $IB_PR_COMPMASK_MTU = 0x20000 β€” constant, type int
  • $IB_PR_COMPMASK_RATESELEC = 0x40000 β€” constant, type int
  • $IB_PR_COMPMASK_RATE = 0x80000 β€” constant, type int
  • $IB_PR_COMPMASK_PKTLIFETIMESELEC = 0x100000 β€” constant, type int
  • $IB_PR_COMPMASK_PFTLIFETIME = 0x200000 β€” constant, type int

πŸ¦‹ class sacPathRec πŸ¦‹

Fields:

  • -dgid β€” member data, hands you back an ib_gid_t *
  • -sgid β€” member data, hands you back an ib_gid_t *
  • -dlid β€” member data, hands you back an ib_net16_t *
  • -slid β€” member data, hands you back an ib_net16_t *
  • -hop_flow_raw β€” member data, hands you back an ib_net32_t *
  • -tclass β€” member data, hands you back a uint8_t *
  • -num_path β€” member data, hands you back a uint8_t *
  • -pkey β€” member data, hands you back an ib_net16_t *
  • -sl β€” member data, hands you back an ib_net16_t *
  • -mtu β€” member data, hands you back a uint8_t *
  • -rate β€” member data, hands you back a uint8_t *
  • -pkt_life β€” member data, hands you back a uint8_t *
  • -preference β€” member data, hands you back a uint8_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 β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

🧚 LINEAR FORWARDING TABLE 🧚

Component mask bits:

  • $IB_LFT_COMPMASK_LID = 0x1 β€” constant, type char *
  • $IB_LFT_COMPMASK_BLOCK = 0x2 β€” constant, type char *

✨ class sacLFTRec ✨

Fields:

  • -lid β€” member data, hands you back an ib_net16_t *
  • -block_num β€” member data, hands you back an ib_net16_t *
  • -lft β€” member data, hands you back an ib_lft_t *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

🌸 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, returns ib_gid_t *
  • -port_gid β€” member data, returns ib_gid_t *
  • -qkey β€” member data, returns ib_net32_t *
  • -mlid β€” member data, returns ib_net16_t *
  • -mtu β€” member data, returns uint8_t *
  • -tclass β€” member data, returns uint8_t *
  • -pkey β€” member data, returns ib_net16_t *
  • -rate β€” member data, returns uint8_t *
  • -pkt_life β€” member data, returns uint8_t *
  • -sl_flow_hop β€” member data, returns ib_net32_t *
  • -scope_state β€” member data, returns uint8_t *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • set comp_mask β€” returns char *
  • del comp_mask β€” returns char *
  • proxy_join_get β€” returns int. bestie it's doing the most β€” instead of simple field cget πŸ’…
  • proxy_join_set proxy_join β€” returns void. instead of simple field configure
  • obj_delete β€” returns void. Delete the object, no notes, it's gone 🫑

SA CLASS PORT INFO πŸ¦‹


class sacClassPortInfo

Fields:

  • -base_ver β€” member data, returns uint8_t *
  • -class_ver β€” member data, returns uint8_t *
  • -cap_mask β€” member data, returns ib_net16_t *
  • -resp_time_val β€” member data, returns ib_net32_t *
  • -redir_gid β€” member data, returns ib_gid_t *
  • -redir_tc_sl_fl β€” member data, returns ib_net32_t *
  • -redir_lid β€” member data, returns ib_net16_t *
  • -redir_pkey β€” member data, returns ib_net16_t *
  • -redir_qp β€” member data, returns ib_net32_t *
  • -redir_qkey β€” member data, returns ib_net32_t *
  • -trap_gid β€” member data, returns ib_gid_t *
  • -trap_tc_sl_fl β€” member data, returns ib_net32_t *
  • -trap_lid β€” member data, returns ib_net16_t *
  • -trap_pkey β€” member data, returns ib_net16_t *
  • -trap_hop_qp β€” member data, returns ib_net32_t *
  • -trap_qkey β€” member data, returns ib_net32_t *

Methods:

  • get β€” returns char *
  • delete β€” returns void

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, returns ib_gid_t *
  • -lid_range_begin β€” member data, returns ib_net16_t *
  • -lid_range_end β€” member data, returns ib_net16_t *
  • -reserved1 β€” member data, returns ib_net16_t *
  • -is_generic β€” member data, returns uint8_t *
  • -subscribe β€” member data, returns uint8_t *
  • -trap_type β€” member data, returns ib_net16_t *
  • -g_or_v β€” member data, returns sacInformInfo_g_or_v *

Methods:

  • set β€” returns char *
  • delete β€” returns void

class sacInformInfo_g_or_v

Fields:

  • -generic β€” member data, returns sacInformInfo_g_or_v_generic *
  • -vend β€” member data, returns sacInformInfo_g_or_v_vend *

class sacInformInfo_g_or_v_generic

Fields:

  • -trap_num β€” member data, returns ib_net16_t *
  • -qpn_resp_time_val β€” member data, returns ib_net32_t *
  • -reserved2 β€” member data, returns uint8_t *
  • -node_type_msb β€” member data, returns uint8_t *
  • -node_type_lsb β€” member data, returns ib_net16_t *

class sacInformInfo_g_or_v_vend

Fields:

  • -dev_id β€” member data, returns ib_net16_t *
  • -qpn_resp_time_val β€” member data, returns ib_net32_t *
  • -reserved2 β€” member data, returns uint8_t *
  • -vendor_id_msb β€” member data, returns uint8_t *
  • -vendor_id_lsb β€” member data, returns ib_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, returns ib_net64_t *
  • -service_gid β€” member data, returns ib_gid_t *
  • -service_pkey β€” member data, returns ib_net16_t *
  • -resv β€” member data, returns ib_net16_t *
  • -service_lease β€” member data, returns ib_net32_t *
  • -service_key β€” member data, returns uint8_array_t *
  • -service_name β€” member data, returns ib_svc_name_t *
  • -service_data8 β€” member data, returns uint8_array_t *
  • -service_data16 β€” member data, returns ib_net16_array_t *
  • -service_data32 β€” member data, returns ib_net32_array_t *
  • -service_data64 β€” member data, returns ib_net64_array_t *

Methods:

  • get comp_mask β€” returns char *
  • set comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete comp_mask β€” returns char *
  • obj_delete β€” returns void

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, returns uint8_array_t *

class sacSlVlRec

RID Fields:

  • -lid β€” member data, returns ib_net16_t *. for CA: lid of port, for switch lid of port 0 πŸ’«
  • -in_port_num β€” member data, returns uint8_t *. reserved for CA's
  • -out_port_num β€” member data, returns uint8_t *. reserved for CA's
  • -resv β€” member data, returns uint32_t *
  • -slvl_tbl β€” member data, returns sacSlVlTbl *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

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, returns ib_net16_t *. for CA: lid of port, for switch lid of port 0 πŸ‘‘
  • -port_num β€” member data, returns uint8_t *
  • -block_num β€” member data, returns uint8_t *
  • -reserved β€” member data, returns uint32_t *
  • -vl_arb_tbl β€” member data, returns sac_vl_arb_tbl_t *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

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, returns ib_net16_array_t *

class sacPKeyRec

RID Fields:

  • -lid β€” member data, returns ib_net16_t *. for CA: lid of port, for switch lid of port 0 πŸ’–
  • -block_num β€” member data, returns uint16_t *
  • -port_num β€” member data, returns uint8_t *. for switch: port number, for CA: reserved 🫢
  • -reserved1 β€” member data, returns uint8_t *
  • -reserved2 β€” member data, returns uint16_t *
  • -pkey_tbl β€” member data, returns sacPKeyTbl *

Methods:

  • get comp_mask β€” returns char *
  • getTable comp_mask β€” returns char *
  • delete β€” returns void

πŸ›°οΈ 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: returns uint8_t * ]
  • -class_version β€” [ Member data: returns uint8_t * ]
  • -node_type β€” [ Member data: returns uint8_t * ]
  • -num_ports β€” [ Member data: returns uint8_t * ]
  • -sys_guid β€” [ Member data: returns ib_net64_t * ]
  • -node_guid β€” [ Member data: returns ib_net64_t * ]
  • -port_guid β€” [ Member data: returns ib_net64_t * ]
  • -partition_cap β€” [ Member data: returns ib_net16_t * ]
  • -device_id β€” [ Member data: returns ib_net16_t * ]
  • -revision β€” [ Member data: returns ib_net32_t * ]
  • -port_num_vendor_id β€” [ Member data: returns ib_net32_t * ]

Methods, the little icons of this class, all of them returning an int because of course they do 😌:

  • getByDr dr β€” [ Member : returns int ]
  • setByDr dr β€” [ Member : returns int ]
  • getByLid lid β€” [ Member : returns int ]
  • setByLid lid β€” [ Member : returns int ]

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 giving LinkSpeedSupported and PortState ✨
  • -state_info2 β€” uint8_t * β€” this one's PortPhysState and LinkDownDefaultState
  • -mkey_lmc β€” uint8_t *
  • -link_speed β€” uint8_t * β€” LinkSpeedEnabled and LinkSpeedActive, no cap
  • -mtu_smsl β€” uint8_t *
  • -vl_cap β€” uint8_t * β€” VlCap and InitType
  • -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:

  • getByDr dr portNum β€” returns int
  • setByDr dr portNum β€” returns int
  • getByLid lid portNum β€” returns int
  • setByLid lid portNum β€” returns int

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 *
  • getByDr dr β€” returns int
  • setByDr dr β€” returns int
  • getByLid lid β€” returns int
  • setByLid lid β€” returns int

class smLftBlock πŸŽ€

linear forwarding table, but make it a block

  • -lft β€” uint8_array_t *
  • getByDr dr blockNum β€” returns int
  • setByDr dr blockNum β€” returns int
  • getByLid lid blockNum β€” returns int
  • setByLid lid blockNum β€” returns int

class smMftBlock 🌈

multicast forwarding table block, periodt

  • -mft β€” ib_net16_array_t *
  • getByDr dr startLid startPort β€” returns int
  • setByDr dr startLid startPort β€” returns int
  • getByLid lid startLid startPort β€” returns int
  • setByLid lid startLid startPort β€” returns int

class smGuidInfo πŸ’œ

  • -guid β€” ib_net64_array_t *
  • getByDr dr blockNum β€” returns int
  • setByDr dr blockNum β€” returns int
  • getByLid lid blockNum β€” returns int
  • setByLid lid blockNum β€” returns int

class smPkeyTable πŸ”‘

partition keys, bestie. the whole table.

  • -pkey_entry β€” ib_net16_array_t *
  • getByDr dr portNum blockNum β€” returns int
  • setByDr dr portNum blockNum β€” returns int
  • getByLid lid portNum blockNum β€” returns int
  • setByLid lid portNum blockNum β€” returns int

class smSlVlTable 🧚

service level β†’ virtual lane, mapped by raw vibe

  • -raw_vl_by_sl β€” uint8_array_t *
  • getByDr dr inPortNum outPortNum β€” returns int
  • setByDr dr inPortNum outPortNum β€” returns int
  • getByLid lid inPortNum outPortNum β€” returns int
  • setByLid lid inPortNum outPortNum β€” returns int

class smVlArbTable ⭐

  • -vl_entry β€” ib_vl_arb_element_t *
  • getByDr dr portNum block β€” returns int
  • setByDr dr portNum block β€” returns int
  • getByLid lid portNum block β€” returns int
  • setByLid lid portNum block β€” returns int

class smNodeDesc πŸ“

the node description, aka the name tag

  • -description β€” ibsm_node_desc_str_t *
  • getByDr dr β€” returns int
  • setByDr dr β€” returns int
  • getByLid lid β€” returns int
  • setByLid lid β€” returns int

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 *
  • getByDr dr β€” returns int
  • setByDr dr β€” returns int
  • getByLid lid β€” returns int
  • setByLid lid β€” returns int

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 *
  • trapByDr dr β€” returns int
  • trapByLid lid β€” returns int

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 β€” returns int
  • crRead lid address β€” returns int
  • crWrite lid data address β€” returns int
  • crReadMulti num lid_list address β€” returns int
  • crWriteMulti num lid_list data address β€” returns int

πŸ¦‹ 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 an int coming back at you. The little "how many can we do at once" baddie. πŸ‘‘
  • [ returns int ] vsCpuRead lid size cpu_traget_size address β€” takes lid, size, cpu_traget_size and address, hands you back an int. (Yes, cpu_traget_size is 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 with data in the mix. Writes things. Returns int. Slay. πŸŽ€
  • [ returns int ] vsI2cRead lid port_num device_id size address β€” the I2C read, with lid, port_num, device_id, size, address. Returns int, 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. Takes num, lid_list, port_num, device_id, size, address, returns int. πŸ”₯
  • [ returns int ] vsI2cWriteMulti num lid_list port_num device_id size address data β€” multi write, same squad plus data. Returns int. Periodt.
  • [ returns int ] vsGpioRead lid β€” just lid. 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, an int on the way out. πŸ’œ
  • [ returns int ] vsSWReset num lid_list β€” software reset across num LIDs in lid_list. Returns int. Dramatic? Maybe. Necessary? Absolutely. 🫢
  • [ returns int ] vsFlashStartMulti num lid_list last size address data β€” flash start, multi-style. Args are num, lid_list, last, size, address, data. Returns int. ⭐
  • [ returns int ] vsFlashStopMulti num lid_list force β€” flash stop, with a force flag, because sometimes you gotta be firm. Returns int. 😀
  • [ returns int ] vsFlashSetBankMulti num lid_list address β€” setting the bank for num LIDs in lid_list at address. Returns int. πŸ¦‹
  • [ returns int ] vsFlashEraseSectorMulti num lid_list address β€” erasing that sector. Args: num, lid_list, address. Returns int. πŸ’–
  • [ returns int ] vsFlashReadSectorMulti num lid_list size address β€” read the sector: num, lid_list, size, address, then int. 🌈
  • [ returns int ] vsFlashWriteSectorMulti num lid_list size address data β€” write the sector: num, lid_list, size, address, data, then int. Main character energy, honestly. ✨
  • [ returns int ] vsMirrorRead lid β€” one lid, one int. Simple, clean, iconic. πŸŽ€
  • [ returns int ] vsMirrorWrite lid rx_mirror tx_mirror β€” lid, rx_mirror, tx_mirror, and an int back. 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 β€” takes lid, vpd_device_selector, bytes_num, offset. Returns int. πŸ“–
  • [ returns int ] bbmVpdWrite lid vpd_device_selector bytes_num offset p_data β€” same args plus p_data, because writing needs actual data, obviously. Returns int. πŸ’œ
  • [ returns int ] bbmVSDRead lid β€” just lid. Returns int. Small, mighty, focused. 🧚
  • [ returns int ] bbmBSNRead lid β€” lid in, int out. πŸ¦‹
  • [ returns int ] bbmModRead lid β€” lid in, int out. The trilogy continues. 🌸
  • [ returns int ] bbmChaRead lid β€” lid in, int out. Obsessed with the pattern tbh. πŸŽ€
  • [ returns int ] bbmFWVerRead lid β€” lid in, int out. Firmware version reading, and you know it's returning an int. πŸ”₯
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