netdev: Improve comments on netdev_rxq_recv().
[cascardo/ovs.git] / lib / netdev-provider.h
index 2aa1b5d..1952a02 100644 (file)
@@ -713,23 +713,29 @@ struct netdev_class {
     void (*rxq_destruct)(struct netdev_rxq *);
     void (*rxq_dealloc)(struct netdev_rxq *);
 
-    /* Attempts to receive batch of packets from 'rx' and place array of
-     * pointers into '*pkts'. netdev is responsible for allocating buffers.
-     * '*cnt' points to packet count for given batch. Once packets are returned
-     * to caller, netdev should give up ownership of ofpbuf data.
-     *
-     * Implementations should allocate buffer with DP_NETDEV_HEADROOM headroom
-     * and add a VLAN header which is obtained out-of-band to the packet.
-     *
-     * Caller is expected to pass array of size MAX_RX_BATCH.
-     * This function may be set to null if it would always return EOPNOTSUPP
-     * anyhow. */
+    /* Attempts to receive a batch of packets from 'rx'.  The caller supplies
+     * 'pkts' as the pointer to the beginning of an array of MAX_RX_BATCH
+     * pointers to dp_packet.  If successful, the implementation stores
+     * pointers to up to MAX_RX_BATCH dp_packets into the array, transferring
+     * ownership of the packets to the caller, stores the number of received
+     * packets into '*cnt', and returns 0.
+     *
+     * The implementation does not necessarily initialize any non-data members
+     * of 'pkts'.  That is, the caller must initialize layer pointers and
+     * metadata itself, if desired, e.g. with pkt_metadata_init() and
+     * miniflow_extract().
+     *
+     * Implementations should allocate buffers with DP_NETDEV_HEADROOM bytes of
+     * headroom.
+     *
+     * Returns EAGAIN immediately if no packet is ready to be received or
+     * another positive errno value if an error was encountered. */
     int (*rxq_recv)(struct netdev_rxq *rx, struct dp_packet **pkts,
                     int *cnt);
 
     /* Registers with the poll loop to wake up from the next call to
-     * poll_block() when a packet is ready to be received with netdev_rxq_recv()
-     * on 'rx'. */
+     * poll_block() when a packet is ready to be received with
+     * netdev_rxq_recv() on 'rx'. */
     void (*rxq_wait)(struct netdev_rxq *rx);
 
     /* Discards all packets waiting to be received from 'rx'. */