#!/usr/bin/env bash ################################################################################ # Test objective: check if a zero-copy monitor is correctly blocked until the # monitored ephemeral VALE port reads the frame. # Operations: # 0) restart fd_server to have a clean starting state # 1) connect two ephemeral VALE ports (v0, v1) to the same VALE switch. # 2) open a zero-copy monitor v0/z for v0. # 3) send from v1 without receiving from v0, check that v0/z doesn't receive the # rame. # 4) receive from v0, check that v0/z receives the frame. ################################################################################ source test_lib parse_send_recv_arguments "$@" verbosity="${verbosity:-}" fill="${fill:-d}" len="${len:-150}" num="${num:-1}" seq="${seq:-}" restart_fd_server # Pre-opening interface that will be needed. This is needed to avoid a race # condition between the sending and receiving ports. functional $verbosity -i "vale0:v0" check_success $? "pre-open vale0:v0" functional $verbosity -i "vale0:v0/z" check_success $? "pre-open vale0:v0/z" functional $verbosity -i "vale0:v1" check_success $? "pre-open vale0:v1" # Initially we don't receive with the monitored VALE port v0, therefore the # monitor should not receive the frame. functional $verbosity -i vale0:v0/z -r "${len}:${fill}:${num}" $seq -n & p1=$! functional $verbosity -i vale0:v1 -t "${len}:${fill}:${num}" $seq e2=$? wait $p1 e1=$? check_success $e1 "no-receive-${num} vale0:v0/z" check_success $e2 "send-${num} vale0:v0" # Now we receive with the monitored VALE port v0, therefore the monitor should # receive the frame. functional $verbosity -i "vale0:v0" -r "${len}:${fill}:${num}" $seq & p3=$! functional $verbosity -i "vale0:v0/z" -r "${len}:${fill}:${num}" $seq e4=$? wait $p3 e3=$? check_success $e3 "receive-${num} vale0:v0" check_success $e4 "receive-${num} vale0:v0/z" test_successful "$0"