]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
xdp: add a debug-print function
authorVladimír Čunát <vladimir.cunat@nic.cz>
Tue, 10 Mar 2020 13:28:08 +0000 (14:28 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Tue, 21 Apr 2020 16:43:10 +0000 (18:43 +0200)
src/libknot/xdp/af_xdp.c
src/libknot/xdp/af_xdp.h

index 00f2298ec9fed726f5069ebfb46a9d14567be9c7..5275796657f70db088097cdf3db2cdbc0649886f 100644 (file)
@@ -631,3 +631,30 @@ int knot_xsk_get_poll_fd(struct knot_xsk_socket *socket)
 {
        return xsk_socket__fd(socket->xsk);
 }
+
+_public_
+void knot_xsk_print_frames(const knot_xsk_socket_t *socket)
+{
+       // The number of busy frames
+       #define RING_BUSY(ring) \
+               ((*(ring)->producer - *(ring)->consumer) & (ring)->mask)
+
+       #define RING_PRINFO(name, ring) \
+               printf("Ring %s: size %4d, busy %4d (prod %4d, cons %4d)\n", \
+                      name, (unsigned)(ring)->size, \
+                      (unsigned)RING_BUSY((ring)), \
+                      (unsigned)*(ring)->producer, (unsigned)*(ring)->consumer)
+
+       const int rx_busyf = RING_BUSY(&socket->umem->fq) + RING_BUSY(&socket->rx);
+       printf("\nLOST RX frames: %4d", (int)(UMEM_FRAME_COUNT_RX - rx_busyf));
+
+       const int tx_busyf = RING_BUSY(&socket->umem->cq) + RING_BUSY(&socket->tx);
+       const int tx_freef = socket->umem->tx_free_count;
+       printf("\nLOST TX frames: %4d\n", (int)(UMEM_FRAME_COUNT_TX - tx_busyf - tx_freef));
+
+       RING_PRINFO("FQ", &socket->umem->fq);
+       RING_PRINFO("RX", &socket->rx);
+       RING_PRINFO("TX", &socket->tx);
+       RING_PRINFO("CQ", &socket->umem->cq);
+       printf("TX free frames: %4d\n", tx_freef);
+}
index b7eba82cbc5f94efad9970ce0771cb02ac65797e..df5bfee5410aab8e1cdcefaa70a040d980814671 100644 (file)
@@ -142,3 +142,6 @@ int knot_xsk_sendmsg_finish(struct knot_xsk_socket *socket);
 
 /*! \brief Returns a file descriptor to be polled on for incomming packets. */
 int knot_xsk_get_poll_fd(struct knot_xsk_socket *socket);
+
+/*! \brief Prints some info about the XDP socket. */
+void knot_xsk_print_frames(const struct knot_xsk_socket *socket);