samples/bpf: Use recvfrom() in xdpsock/rxdrop
authorBjörn Töpel <bjorn.topel@intel.com>
Mon, 30 Nov 2020 18:52:02 +0000 (19:52 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 30 Nov 2020 23:09:25 +0000 (00:09 +0100)
Start using recvfrom() the rxdrop scenario.

Signed-off-by: Björn Töpel <bjorn.topel@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
Link: https://lore.kernel.org/bpf/20201130185205.196029-8-bjorn.topel@gmail.com
samples/bpf/xdpsock_user.c

index 2567f0db5acab55589fae1d6987522ef49aaebf5..f90111b95b2ef78ca9c29c83bcd94fbf121e3edb 100644 (file)
@@ -1170,7 +1170,7 @@ static inline void complete_tx_only(struct xsk_socket_info *xsk,
        }
 }
 
-static void rx_drop(struct xsk_socket_info *xsk, struct pollfd *fds)
+static void rx_drop(struct xsk_socket_info *xsk)
 {
        unsigned int rcvd, i;
        u32 idx_rx = 0, idx_fq = 0;
@@ -1180,7 +1180,7 @@ static void rx_drop(struct xsk_socket_info *xsk, struct pollfd *fds)
        if (!rcvd) {
                if (xsk_ring_prod__needs_wakeup(&xsk->umem->fq)) {
                        xsk->app_stats.rx_empty_polls++;
-                       ret = poll(fds, num_socks, opt_timeout);
+                       recvfrom(xsk_socket__fd(xsk->xsk), NULL, 0, MSG_DONTWAIT, NULL, NULL);
                }
                return;
        }
@@ -1191,7 +1191,7 @@ static void rx_drop(struct xsk_socket_info *xsk, struct pollfd *fds)
                        exit_with_error(-ret);
                if (xsk_ring_prod__needs_wakeup(&xsk->umem->fq)) {
                        xsk->app_stats.fill_fail_polls++;
-                       ret = poll(fds, num_socks, opt_timeout);
+                       recvfrom(xsk_socket__fd(xsk->xsk), NULL, 0, MSG_DONTWAIT, NULL, NULL);
                }
                ret = xsk_ring_prod__reserve(&xsk->umem->fq, rcvd, &idx_fq);
        }
@@ -1233,7 +1233,7 @@ static void rx_drop_all(void)
                }
 
                for (i = 0; i < num_socks; i++)
-                       rx_drop(xsks[i], fds);
+                       rx_drop(xsks[i]);
 
                if (benchmark_done)
                        break;