aboutsummaryrefslogtreecommitdiff
path: root/tests/sys/net/bpf/bpf.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sys/net/bpf/bpf.sh')
-rw-r--r--tests/sys/net/bpf/bpf.sh61
1 files changed, 59 insertions, 2 deletions
diff --git a/tests/sys/net/bpf/bpf.sh b/tests/sys/net/bpf/bpf.sh
index 2830c4862de9..f2d647b61de0 100644
--- a/tests/sys/net/bpf/bpf.sh
+++ b/tests/sys/net/bpf/bpf.sh
@@ -32,7 +32,6 @@ multi_read_head()
atf_set descr 'Test multiple readers on /dev/bpf'
atf_set require.user root
}
-
multi_read_body()
{
vnet_init
@@ -55,13 +54,71 @@ multi_read_body()
# Now let this run for 10 seconds
sleep 10
}
-
multi_read_cleanup()
{
vnet_cleanup
}
+atf_test_case "inject" "cleanup"
+inject_head()
+{
+ atf_set descr 'Catch packets, re-inject and check'
+ atf_set require.user root
+}
+inject_body()
+{
+ vnet_init
+
+ epair=$(vnet_mkepair)
+ ifconfig ${epair}a inet 192.0.2.1/24 up
+ vnet_mkjail alcatraz ${epair}b
+ jexec alcatraz ifconfig ${epair}b inet 192.0.2.2/24 up
+
+ in=$(pwd)/$(mktemp in.pcap.XXXXXXXXXX)
+ in2=$(pwd)/$(mktemp in2.pcap.XXXXXXXXXX)
+ out=$(pwd)/$(mktemp out.pcap.XXXXXXXXXX)
+
+ # write dump on jail side, with "in" direction
+ jexec alcatraz $(atf_get_srcdir)/pcap-test \
+ capture epair0b $in 3 in > out & pid=$!
+ while ! jexec alcatraz netstat -B | grep -q epair0b.*pcap-test; do
+ sleep 0.01;
+ done
+ atf_check -s exit:0 -o ignore ping -c 3 -i 0.1 192.0.2.2
+ atf_check -s exit:0 sh -c "wait $pid; exit $?"
+ atf_check -s exit:0 -o empty cat out
+
+ # inject dump on host side, recording on both sides
+ jexec alcatraz $(atf_get_srcdir)/pcap-test \
+ capture epair0b $in2 3 in > jout & jpid=$!
+ while ! jexec alcatraz netstat -B | grep -q epair0b.*pcap-test; do
+ sleep 0.01;
+ done
+ $(atf_get_srcdir)/pcap-test \
+ capture epair0a $out 3 out > hout & hpid=$!
+ while ! netstat -B | grep -q epair0a.*pcap-test; do
+ sleep 0.01;
+ done
+ atf_check -s exit:0 -o empty -e empty $(atf_get_srcdir)/pcap-test \
+ inject epair0a $in 3
+ atf_check -s exit:0 sh -c "wait $jpid; exit $?"
+ atf_check -s exit:0 -o empty cat jout
+ atf_check -s exit:0 sh -c "wait $hpid; exit $?"
+ atf_check -s exit:0 -o empty cat hout
+
+ # all 3 dumps should be equal
+ atf_check -s exit:0 -o empty -e empty $(atf_get_srcdir)/pcap-test \
+ compare $in $out
+ atf_check -s exit:0 -o empty -e empty $(atf_get_srcdir)/pcap-test \
+ compare $in $in2
+}
+inject_cleanup()
+{
+ vnet_cleanup
+}
+
atf_init_test_cases()
{
atf_add_test_case "multi_read"
+ atf_add_test_case "inject"
}