1IB(3)                               ib 1.2                               IB(3)
2
3
4

NAME

6       packet.transport.ib - InfiniBand module
7

DESCRIPTION

9       Decode   InfiniBand  layer.   Reference:  IB  Specification  Vol  1-Re‐
10       lease-1.3-2015-03-03.pdf
11

CLASSES

13   class AETH(baseobj.BaseObj)
14       ACK EXTENDED TRANSPORT HEADER (AETH) - 4 BYTES
15
16       ACK Extended Transport Header contains the additional transport fields
17       for ACK packets. The AETH is only in Acknowledge, RDMA READ Response
18       First, RDMA READ Response Last, and RDMA READ Response Only packets
19       as indicated by the Base Transport Header OpCode field.
20
21       AETH(
22           syndrome = int, # Syndrome indicates if this is an ACK or NAK
23                           # packet plus additional information about the
24                           # ACK or NAK
25           msn      = int, # Message Sequence Number indicates the sequence
26                           # number of the last message completed at the
27                           # responder
28       )
29
30
31       Methods defined here:
32       ---------------------
33
34       __init__(self, unpack)
35       Constructor
36
37       Initialize object's private data according to the arguments given.
38       Arguments can be given as positional, named arguments or a
39       combination of both.
40
41   class AtomicAckETH(baseobj.BaseObj)
42       ATOMIC ACKNOWLEDGE EXTENDED TRANSPORT HEADER (ATOMICACKETH) - 8 BYTES
43
44       Atomic ACK Extended Transport Header contains the additional transport
45       fields for AtomicACK packets. The AtomicAckETH is only in Atomic
46       Acknowledge packets as indicated by the Base Transport Header OpCode
47       field.
48
49       AtomicAckETH(
50           orig_rem_dt = int, # Original Remote Data is the return operand
51                              # in atomic operations and contains the data
52                              # in the remote memory location before the
53                              # atomic operation
54       )
55
56
57       Methods defined here:
58       ---------------------
59
60       __init__(self, unpack)
61       Constructor
62
63       Initialize object's private data according to the arguments given.
64       Arguments can be given as positional, named arguments or a
65       combination of both.
66
67   class AtomicETH(baseobj.BaseObj)
68       ATOMIC EXTENDED TRANSPORT HEADER (ATOMICETH) - 28 BYTES
69
70       Atomic Extended Transport Header contains the additional transport
71       fields for Atomic packets. The AtomicETH is only in Atomic packets
72       as indicated by the Base Transport Header OpCode field.
73
74       AtomicETH(
75           va      = int, # Virtual Address: the remote virtual address
76           r_key   = int, # Remote Key that authorizes access to the remote
77                          # virtual address
78           swap_dt = int, # Swap/Add Data is an operand in atomic operations
79           cmp_dt  = int, # Compare Data is an operand in CmpSwap atomic
80                          # operation
81       )
82
83
84       Methods defined here:
85       ---------------------
86
87       __init__(self, unpack)
88       Constructor
89
90       Initialize object's private data according to the arguments given.
91       Arguments can be given as positional, named arguments or a
92       combination of both.
93
94   class BTH(baseobj.BaseObj)
95       BASE TRANSPORT HEADER (BTH) - 12 BYTES
96
97       Base Transport Header contains the fields for IBA transports.
98       The presence of BTH is indicated by the Next Header field of
99       the last previous header (i.e., either LRH:lnh or GRH:nxthdr
100       depending on which was the last previous header).
101
102       BTH(
103           opcode = int, # OpCode indicates the IBA packet type. It also
104                         # specifies which extension headers follow the BTH
105           se     = int, # Solicited Event, this bit indicates that an event
106                         # should be generated by the responder
107           migreq = int, # This bit is used to communicate migration state
108           padcnt = int, # Pad Count indicates how many extra bytes are added
109                         # to the payload to align to a 4 byte boundary
110           tver   = int, # Transport Header Version indicates the version of
111                         # the IBA Transport Headers
112           pkey   = int, # Partition Key indicates which logical Partition is
113                         # associated with this packet
114           destqp = int, # Destination QP indicates the Work Queue Pair Number
115                         # (QP) at the destination
116           ackreq = int, # Acknowledge Request, this bit is used to indicate
117                         # that an acknowledge (for this packet) should be
118                         # scheduled by the responder
119           psn    = int, # Packet Sequence Number is used to detect a missing
120                         # or duplicate Packet
121       )
122
123
124       Methods defined here:
125       ---------------------
126
127       __init__(self, unpack)
128       Constructor
129
130       Initialize object's private data according to the arguments given.
131       Arguments can be given as positional, named arguments or a
132       combination of both.
133
134   class DETH(baseobj.BaseObj)
135       DATAGRAM EXTENDED TRANSPORT HEADER (DETH) - 8 BYTES
136
137       Datagram Extended Transport Header contains the additional transport
138       fields for datagram service. The DETH is only in datagram packets if
139       indicated by the Base Transport Header OpCode field.
140
141       DETH(
142           q_key  = int, # Queue Key is required to authorize access to the
143                         # receive queue
144           src_qp = int, # Source QP indicates the Work Queue Pair Number (QP)
145                         # at the source.
146       )
147
148
149       Methods defined here:
150       ---------------------
151
152       __init__(self, unpack)
153       Constructor
154
155       Initialize object's private data according to the arguments given.
156       Arguments can be given as positional, named arguments or a
157       combination of both.
158
159   class GRH(baseobj.BaseObj)
160       GLOBAL ROUTE HEADER (GRH) - 40 BYTES
161
162       Global Route Header contains fields for routing the packet between
163       subnets. The presence of the GRH is indicated by the Link Next
164       Header (LNH) field in the LRH. The layout of the GRH is the same as
165       the IPv6 Header defined in RFC 2460. Note, however, that IBA does not
166       define a relationship between a device GID and IPv6 address
167       (i.e., there is no defined mapping between GID and IPv6 address for
168       any IB device or port).
169
170       GRH(
171           ipver  = int,      # IP Version indicates version of the GRH
172           tclass = int,      # Traffic Class is used by IBA to communicate
173                              # global service level
174           flabel = int,      # Flow Label identifies sequences of packets
175                              # requiring special handling
176           paylen = int,      # Payload length specifies the number of bytes
177                              # starting from the first byte after the GRH,
178                              # up to and including the last byte of the ICRC
179           nxthdr = int,      # Next Header identifies the header following the
180                              # GRH. This field is included for compatibility with
181                              # IPV6 headers. It should indicate IBA transport
182           hoplmt = int,      # Hop Limit sets a strict bound on the number of
183                              # hops between subnets a packet can make before
184                              # being discarded. This is enforced only by routers
185           sgid   = IPv6Addr, # Source GID identifies the Global Identifier
186                              # (GID) for the port which injected the packet
187                              # into the network
188           dgid   = IPv6Addr, # Destination GID identifies the GID for the port
189                              # which will consume the packet from the network
190       )
191
192
193       Methods defined here:
194       ---------------------
195
196       __init__(self, unpack)
197       Constructor
198
199       Initialize object's private data according to the arguments given.
200       Arguments can be given as positional, named arguments or a
201       combination of both.
202
203   class IB(baseobj.BaseObj)
204       InfiniBand (IB) object
205
206       Usage:
207           from packet.transport.ib import IB
208
209           x = IB(pktt)
210
211       Object definition:
212
213       IB(
214           lrh          = LRH,          # Local Route Header
215           grh          = GRH,          # Global Route Header
216           bth          = BTH,          # Base Transport Header
217           rdeth        = RDETH,        # Reliable Datagram Extended Transport Header
218           deth         = DETH,         # Datagram Extended Transport Header
219           xrceth       = XRCETH,       # XRC Extended Transport Header
220           reth         = RETH,         # RDMA Extended Transport Header
221           atomiceth    = AtomicETH,    # Atomic Extended Transport Header
222           aeth         = AETH,         # ACK Extended Transport Header
223           atomicacketh = AtomicAckETH, # Atomic Acknowledge Extended Transport Header
224           immdt        = ImmDt,        # Immediate Extended Transport Header
225           ieth         = IETH,         # Invalidate Extended Transport Header
226           psize        = int,          # Payload data size
227           icrc         = int,          # Invariant CRC
228           vcrc         = int,          # Variant CRC
229       )
230
231
232       Methods defined here:
233       ---------------------
234
235       __bool__(self)
236       Truth value testing for the built-in operation bool()
237
238       __init__(self, pktt)
239       Constructor
240
241       Initialize object's private data.
242
243
244              pktt:  Packet trace object (packet.pktt.Pktt) so this layer has
245                     access to the parent layers.
246
247   class IETH(baseobj.BaseObj)
248       INVALIDATE EXTENDED TRANSPORT HEADER (IETH) - 4 BYTES
249
250       The Invalidate Extended Transport Header contains an R_Key field which
251       is used by the responder to invalidate a memory region or memory window
252       once it receives and executes the SEND with Invalidate request.
253
254       IETH(
255           r_key = int, # The SEND with Invalidate operation carries with it
256                        # an R_Key field. This R_Key is used by the responder
257                        # to invalidate a memory region or memory window once
258                        # it receives and executes the SEND with Invalidate
259                        # request
260       )
261
262
263       Methods defined here:
264       ---------------------
265
266       __init__(self, unpack)
267       Constructor
268
269       Initialize object's private data according to the arguments given.
270       Arguments can be given as positional, named arguments or a
271       combination of both.
272
273   class ImmDt(baseobj.BaseObj)
274       IMMEDIATE DATA EXTENDED TRANSPORT HEADER (IMMDT) - 4 BYTES
275
276       Immediate DataExtended Transport Header contains the additional data
277       that is placed in the receive Completion Queue Element (CQE).
278       The ImmDt is only in Send or RDMA-Write packets with Immediate Data
279       if indicated by the Base Transport Header OpCode.
280
281       Note, the terms Immediate Data Extended Transport Header and Immediate
282       Data Header are used synonymously in the specification.
283
284       ImmDt(
285           imm_dt = int, # Immediate Data contains data that is placed in the
286                         # receive Completion Queue Element (CQE). The ImmDt is
287                         # only allowed in SEND or RDMA WRITE packets with
288                         # Immediate Data
289       )
290
291
292       Methods defined here:
293       ---------------------
294
295       __init__(self, unpack)
296       Constructor
297
298       Initialize object's private data according to the arguments given.
299       Arguments can be given as positional, named arguments or a
300       combination of both.
301
302   class LRH(baseobj.BaseObj)
303       LOCAL ROUTE HEADER (LRH) - 8 BYTES
304
305       The Local Routing Header contains fields used for local routing
306       by switches within a IBA subnet.
307
308       LRH(
309           vl   = int, # Virtual Lane that the packet is using
310           lver = int, # Link Version of LRH
311           sl   = int, # Service Level the packet is requesting within the subnet
312           lnh  = int, # Link Next Header identifies the headers following the LRH
313           dlid = int, # Destination Local ID identifies the destination port
314                       # and path (data sink) on the local subnet
315           plen = int, # Packet Length identifies the size of the packet in
316                       # four-byte words. This field includes the first byte of
317                       # LRH to the last byte before the variant CRC
318           slid = int, # Source Local ID identifies the source port
319                       # (injection point) on the local subnet
320       )
321
322
323       Methods defined here:
324       ---------------------
325
326       __init__(self, unpack)
327       Constructor
328
329       Initialize object's private data according to the arguments given.
330       Arguments can be given as positional, named arguments or a
331       combination of both.
332
333   class OpCode(builtins.int)
334       OpCode object, this is an integer in which its informal
335       string representation is given as the OpCode name
336
337
338       Methods defined here:
339       ---------------------
340
341       __str__(self)
342       Return str(self).
343
344   class RDETH(baseobj.BaseObj)
345       RELIABLE DATAGRAM EXTENDED TRANSPORT HEADER (RDETH) - 4 BYTES
346
347       Reliable Datagram Extended Transport Header contains the additional
348       transport fields for reliable datagram service. The RDETH is only
349       in Reliable Datagram packets as indicated by the Base Transport Header
350       OpCode field.
351
352       RDETH(
353           ee_context = int, # EE-Context indicates which End-to-End Context
354                             # should be used for this Reliable Datagram packet
355       )
356
357
358       Methods defined here:
359       ---------------------
360
361       __init__(self, unpack)
362       Constructor
363
364       Initialize object's private data according to the arguments given.
365       Arguments can be given as positional, named arguments or a
366       combination of both.
367
368   class RETH(baseobj.BaseObj)
369       RDMA EXTENDED TRANSPORT HEADER (RETH) - 16 BYTES
370
371       RDMA Extended Transport Header contains the additional transport fields
372       for RDMA operations. The RETH is present in only the first (or only)
373       packet of an RDMA Request as indicated by the Base Transport Header
374       OpCode field.
375
376       RETH(
377           va      = int, # Virtual Address of the RDMA operation
378           r_key   = int, # Remote Key that authorizes access for the RDMA
379                          # operation
380           dma_len = int, # DMA Length indicates the length (in Bytes) of
381                          # the DMA operation.
382       )
383
384
385       Methods defined here:
386       ---------------------
387
388       __init__(self, unpack)
389       Constructor
390
391       Initialize object's private data according to the arguments given.
392       Arguments can be given as positional, named arguments or a
393       combination of both.
394
395   class XRCETH(baseobj.BaseObj)
396       XRC EXTENDED TRANSPORT HEADER (XRCETH)
397
398       XRC Extended Transport Header contains the Destination XRC SRQ
399       identifier.
400       XRCETH(
401           xrcsrq = int, # XRC Shared Receive Queue indicates the XRC Shared
402                         # Receive Queue number to be used by the responder
403                         # for this packet
404       )
405
406
407       Methods defined here:
408       ---------------------
409
410       __init__(self, unpack)
411       Constructor
412
413       Initialize object's private data according to the arguments given.
414       Arguments can be given as positional, named arguments or a
415       combination of both.
416

SEE ALSO

418       baseobj(3), packet.application.rpc(3),  packet.application.rpcordma(3),
419       packet.application.rpcordma_const(3),      packet.internet.ipv6addr(3),
420       packet.unpack(3), packet.utils(3)
421
422

BUGS

424       No known bugs.
425

AUTHOR

427       Jorge Mora (mora@netapp.com)
428
429
430
431NFStest 3.2                      21 March 2023                           IB(3)
Impressum