Changeset View
Changeset View
Standalone View
Standalone View
tests/sys/netpfil/pf/altq.sh
| Show First 20 Lines • Show All 80 Lines • ▼ Show 20 Lines | match_body() | ||||
| atf_check -s exit:2 -o ignore ping -c 1 -s 1200 192.0.2.2 | atf_check -s exit:2 -o ignore ping -c 1 -s 1200 192.0.2.2 | ||||
| } | } | ||||
| match_cleanup() | match_cleanup() | ||||
| { | { | ||||
| altq_cleanup | altq_cleanup | ||||
| } | } | ||||
| atf_test_case "cbq_vlan" "cleanup" | |||||
| cbq_vlan_head() | |||||
| { | |||||
| atf_set descr 'CBQ over VLAN test' | |||||
| atf_set require.user root | |||||
| } | |||||
| cbq_vlan_body() | |||||
| { | |||||
| altq_init | |||||
| is_altq_supported cbq | |||||
| epair=$(vnet_mkepair) | |||||
| vnet_mkjail altq_cbq_vlan ${epair}b | |||||
| vlan=$(vnet_mkvlan) | |||||
| ifconfig ${vlan} vlan 42 vlandev ${epair}a | |||||
| ifconfig ${vlan} 192.0.2.1/24 up | |||||
| ifconfig ${epair}a up | |||||
| vlanj=$(jexec altq_cbq_vlan ifconfig vlan create) | |||||
| echo ${vlanj} >> created_interfaces.lst | |||||
| jexec altq_cbq_vlan ifconfig ${epair}b up | |||||
| jexec altq_cbq_vlan ifconfig ${vlanj} vlan 42 vlandev ${epair}b | |||||
| jexec altq_cbq_vlan ifconfig ${vlanj} 192.0.2.2/24 up | |||||
| # Sanity check | |||||
| atf_check -s exit:0 -o ignore ping -i .1 -c 3 -s 1200 192.0.2.2 | |||||
| jexec altq_cbq_vlan pfctl -e | |||||
| pft_set_rules altq_cbq_vlan \ | |||||
| "altq on ${vlanj} bandwidth 14000b cbq queue { default }" \ | |||||
| "queue default bandwidth 14000b cbq(default) { slow } " \ | |||||
| "queue slow bandwidth 6000b cbq(borrow)" \ | |||||
| "match proto icmp queue slow" \ | |||||
| "match proto tcp queue default" \ | |||||
| "pass" | |||||
| # single ping succeeds just fine | |||||
| atf_check -s exit:0 -o ignore ping -c 1 192.0.2.2 | |||||
| # "Saturate the link" | |||||
| ping -i .01 -c 50 -s 1200 192.0.2.2 | |||||
| # We should now be hitting the limits and get these packet dropped. | |||||
donner: How do you ensure, that the packets send before are still not delivered, so the queue is empty… | |||||
| rcv=$(ping -i .1 -c 5 -s 1200 192.0.2.2 | tr "," "\n" | awk '/packets received/ { print $1; }') | |||||
| echo "Received $rcv packets" | |||||
| if [ ${rcv} -gt 1 ] | |||||
| then | |||||
| atf_fail "Received ${rcv} packets in a saturated link" | |||||
| fi | |||||
| } | |||||
| cbq_vlan_cleanup() | |||||
| { | |||||
| altq_cleanup | |||||
| } | |||||
| atf_init_test_cases() | atf_init_test_cases() | ||||
| { | { | ||||
| atf_add_test_case "hfsc" | atf_add_test_case "hfsc" | ||||
| atf_add_test_case "match" | atf_add_test_case "match" | ||||
| atf_add_test_case "cbq_vlan" | |||||
| } | } | ||||
How do you ensure, that the packets send before are still not delivered, so the queue is empty now? Looks like an scheduling dependency race condition.
How about: