|
|
@@ -174,20 +174,23 @@ struct io_buffer * xfer_alloc_iob ( struct xfer_interface *xfer, size_t len ) {
|
|
174
|
174
|
}
|
|
175
|
175
|
|
|
176
|
176
|
/**
|
|
177
|
|
- * Deliver datagram
|
|
|
177
|
+ * Deliver datagram as I/O buffer with metadata
|
|
178
|
178
|
*
|
|
179
|
179
|
* @v xfer Data transfer interface
|
|
180
|
180
|
* @v iobuf Datagram I/O buffer
|
|
|
181
|
+ * @v meta Data transfer metadata, or NULL
|
|
181
|
182
|
* @ret rc Return status code
|
|
182
|
183
|
*/
|
|
183
|
|
-int xfer_deliver_iob ( struct xfer_interface *xfer, struct io_buffer *iobuf ) {
|
|
|
184
|
+int xfer_deliver_iob_meta ( struct xfer_interface *xfer,
|
|
|
185
|
+ struct io_buffer *iobuf,
|
|
|
186
|
+ struct xfer_metadata *meta ) {
|
|
184
|
187
|
struct xfer_interface *dest = xfer_get_dest ( xfer );
|
|
185
|
188
|
int rc;
|
|
186
|
189
|
|
|
187
|
190
|
DBGC ( xfer, "XFER %p->%p deliver_iob %zd\n", xfer, dest,
|
|
188
|
191
|
iob_len ( iobuf ) );
|
|
189
|
192
|
|
|
190
|
|
- rc = dest->op->deliver_iob ( dest, iobuf );
|
|
|
193
|
+ rc = dest->op->deliver_iob ( dest, iobuf, meta );
|
|
191
|
194
|
|
|
192
|
195
|
if ( rc != 0 ) {
|
|
193
|
196
|
DBGC ( xfer, "XFER %p<-%p deliver_iob: %s\n", xfer, dest,
|
|
|
@@ -197,6 +200,18 @@ int xfer_deliver_iob ( struct xfer_interface *xfer, struct io_buffer *iobuf ) {
|
|
197
|
200
|
return rc;
|
|
198
|
201
|
}
|
|
199
|
202
|
|
|
|
203
|
+/**
|
|
|
204
|
+ * Deliver datagram as I/O buffer with metadata
|
|
|
205
|
+ *
|
|
|
206
|
+ * @v xfer Data transfer interface
|
|
|
207
|
+ * @v iobuf Datagram I/O buffer
|
|
|
208
|
+ * @ret rc Return status code
|
|
|
209
|
+ */
|
|
|
210
|
+int xfer_deliver_iob ( struct xfer_interface *xfer,
|
|
|
211
|
+ struct io_buffer *iobuf ) {
|
|
|
212
|
+ return xfer_deliver_iob_meta ( xfer, iobuf, NULL );
|
|
|
213
|
+}
|
|
|
214
|
+
|
|
200
|
215
|
/**
|
|
201
|
216
|
* Deliver datagram as raw data
|
|
202
|
217
|
*
|
|
|
@@ -341,13 +356,15 @@ default_xfer_alloc_iob ( struct xfer_interface *xfer __unused, size_t len ) {
|
|
341
|
356
|
*
|
|
342
|
357
|
* @v xfer Data transfer interface
|
|
343
|
358
|
* @v iobuf Datagram I/O buffer
|
|
|
359
|
+ * @v meta Data transfer metadata
|
|
344
|
360
|
* @ret rc Return status code
|
|
345
|
361
|
*
|
|
346
|
362
|
* This function is intended to be used as the deliver() method for
|
|
347
|
363
|
* data transfer interfaces that prefer to handle raw data.
|
|
348
|
364
|
*/
|
|
349
|
365
|
int xfer_deliver_as_raw ( struct xfer_interface *xfer,
|
|
350
|
|
- struct io_buffer *iobuf ) {
|
|
|
366
|
+ struct io_buffer *iobuf,
|
|
|
367
|
+ struct xfer_metadata *meta __unused ) {
|
|
351
|
368
|
int rc;
|
|
352
|
369
|
|
|
353
|
370
|
rc = xfer->op->deliver_raw ( xfer, iobuf->data, iob_len ( iobuf ) );
|
|
|
@@ -375,7 +392,7 @@ int xfer_deliver_as_iob ( struct xfer_interface *xfer,
|
|
375
|
392
|
return -ENOMEM;
|
|
376
|
393
|
|
|
377
|
394
|
memcpy ( iob_put ( iobuf, len ), data, len );
|
|
378
|
|
- return xfer->op->deliver_iob ( xfer, iobuf );
|
|
|
395
|
+ return xfer->op->deliver_iob ( xfer, iobuf, NULL );
|
|
379
|
396
|
}
|
|
380
|
397
|
|
|
381
|
398
|
/**
|