1RDMAINFO(3) rdmainfo 1.1 RDMAINFO(3)
2
3
4
6 packet.transport.rdmainfo - RDMA reassembly module
7
9 Provides functionality to reassemble RDMA fragments.
10
12 class RDMAinfo(packet.utils.RDMAbase)
13 RDMA info object used for reassembly
14
15 The reassembled message consists of one or multiple chunks and
16 each chunk in turn could be composed of multiple segments. Also,
17 each segment could be composed of multiple sub-segments and each
18 sub-segment could be composed of multiple fragments.
19 The protocol only defines segments but if the segment length is
20 large, it is split into multiple sub-segments in which each
21 sub-segment is specified by RDMA_WRITE_First or RDMA_READ_Request
22 packets. The handle is the same for each of these packets but with
23 a shorter DMA length.
24
25 Thus in order to reassemble all fragments for a single message,
26 a list of segments is created where each segment is identified
27 by its handle or RKey and the message is reassembled according
28 to the chuck lists specified by the RPC-over-RDMA layer.
29
30
31 Methods defined here:
32 ---------------------
33
34 __del__ = reset(self)
35
36 __init__(self)
37 Constructor
38
39 Initialize object's private data according to the arguments given.
40 Arguments can be given as positional, named arguments or a
41 combination of both.
42
43 __len__ = size(self)
44
45 add_iwarp_data(self, rdmap, unpack, isread=False)
46 Add iWarp fragment data
47
48 add_iwarp_request(self, rdmap)
49 Add iWarp read request information
50
51 add_rdma_data(self, psn, unpack, reth=None, only=False, read=False)
52 Add Infiniband fragment data
53
54 add_rdma_segment(self, rdma_seg, rpcrdma=None)
55 Add RDMA segment information and if the information already
56 exists just update the length and return the segment
57
58 del_rdma_segment(self, rsegment)
59 Delete RDMA segment information
60
61 get_rdma_segment(self, handle)
62 Return RDMA segment identified by the given handle
63
64 process_rdma_segments(self, rpcrdma)
65 Process the RPC-over-RDMA chunks
66
67 When this method is called on an RPC call, it adds the
68 information of all the segments to the list of segments.
69 When this method is called on an RPC reply, the segments
70 should already exist so just update the segment's DMA length
71 as returned by the reply.
72
73 RPCoRDMA reads attribute is a list of read segments
74 Read segment is a plain segment plus an XDR position
75 A read chunk is the collection of all read segments
76 with the same XDR position
77
78 RPCoRDMA writes attribute is a list of write chunks
79 A write chunk is a list of plain segments
80
81 RPCoRDMA reply is just a single write chunk if it exists.
82 Return the reply chunk data
83
84 reassemble_rdma_reads(self, unpack, psn=None, only=False, rdmap=None)
85 Reassemble RDMA read chunks
86 The RDMA read chunks are reassembled in the read last operation
87
88 reset(self)
89 Clear RDMA segments
90
91 size(self)
92 Return the number RDMA segments
93
94 class RDMArequest(builtins.object)
95 RDMA iWarp Request object
96
97
98 Methods defined here:
99 ---------------------
100
101 __contains__(self, offset)
102 Membership test operator.
103 Return true if offset belongs to this request
104
105 __init__(self, rdmap, rsegment)
106 Initialize self. See help(type(self)) for accurate signature.
107
108 get_offset(self, offset)
109 Return offset translated from sink to src
110
111 class RDMAseg(builtins.object)
112 RDMA sub-segment object
113
114 The sub-segment is created for each RDMA_WRITE_First, RDMA_WRITE_Only
115 or RDMA_READ_Request and each sub-segment belongs to a list in the
116 RDMAsegment object so there is no segment identifier or handle.
117
118 Reassembly for each sub-segment is done using the PSN or packet
119 sequence number in each of the data fragments. Therefore, a range
120 of PSN numbers define this object which is given by the spsn and
121 epsn attributes (first and last PSN respectively).
122
123
124 Methods defined here:
125 ---------------------
126
127 __del__(self)
128 Destructor
129
130 __init__(self, spsn, epsn, dmalen)
131 Initialize self. See help(type(self)) for accurate signature.
132
133 get_data(self, padding=True)
134 Return sub-segment data
135
136 get_size(self)
137 Return sub-segment data size
138
139 insert_data(self, psn, data)
140 Insert data at correct position given by the psn
141
142 class RDMAsegment(builtins.object)
143 RDMA segment object
144
145 Each segment is identified by its handle. The segment information
146 comes from the RPC-over-RDMA protocol layer so the length attribute
147 gives the total DMA length of the segment.
148
149
150 Methods defined here:
151 ---------------------
152
153 __del__(self)
154 Destructor
155
156 __init__(self, rdma_seg, rpcrdma)
157 Initialize self. See help(type(self)) for accurate signature.
158
159 add_data(self, psn, data)
160 Add Infiniband fragment data
161
162 add_fragment(self, offset, data)
163 Add iWarp fragment to segment
164
165 add_sub_segment(self, psn, dmalen, only=False, iosize=0)
166 Add RDMA sub-segment PSN information
167
168 get_data(self, padding=True)
169 Return segment data
170
171 get_size(self)
172 Return segment data
173
174 valid_psn(self, psn)
175 True if given psn is valid for this segment
176
178 baseobj(3), packet.utils(3)
179
180
182 No known bugs.
183
185 Jorge Mora (mora@netapp.com)
186
187
188
189NFStest 3.2 21 March 2023 RDMAINFO(3)