If no client is attached, discard outgoing frames and report them as
sent. This mimics the behavior of a physical host with its network
cable unplugged.
Suggested-by: David Gibson
Signed-off-by: Yumei Huang
---
tap.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tap.c b/tap.c
index 7ba6399..e01219d 100644
--- a/tap.c
+++ b/tap.c
@@ -507,13 +507,17 @@ static size_t tap_send_frames_passt(const struct ctx *c,
* @iov must have total length @bufs_per_frame * @nframes, with each set of
* @bufs_per_frame contiguous buffers representing a single frame.
*
- * Return: number of frames actually sent
+ * Return: number of frames actually sent, or accounted as sent
*/
size_t tap_send_frames(const struct ctx *c, const struct iovec *iov,
size_t bufs_per_frame, size_t nframes)
{
size_t m;
+ if (c->fd_tap == -1)
+ /* If no client connected, account the frames have been sent */
+ return nframes;
+
if (!nframes)
return 0;
--
2.47.0