#
# Run (full output without color-coding):
# sudo ./test_xsk.sh
+#
+# Run with verbose output:
+# sudo ./test_xsk.sh -v
. xsk_prereqs.sh
-while getopts c flag
+while getopts "cv" flag
do
case "${flag}" in
c) colorconsole=1;;
+ v) verbose=1;;
esac
done
MTU=1500
setup_vethPairs() {
- echo "setting up ${VETH0}: namespace: ${NS0}"
+ if [[ $verbose -eq 1 ]]; then
+ echo "setting up ${VETH0}: namespace: ${NS0}"
+ fi
ip netns add ${NS1}
ip link add ${VETH0} type veth peer name ${VETH1}
if [ -f /proc/net/if_inet6 ]; then
echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
fi
- echo "setting up ${VETH1}: namespace: ${NS1}"
+ if [[ $verbose -eq 1 ]]; then
+ echo "setting up ${VETH1}: namespace: ${NS1}"
+ fi
ip link set ${VETH1} netns ${NS1}
ip netns exec ${NS1} ip link set ${VETH1} mtu ${MTU}
ip link set ${VETH0} mtu ${MTU}
validate_veth_spec_file
-echo "Spec file created: ${SPECFILE}"
+if [[ $verbose -eq 1 ]]; then
+ echo "Spec file created: ${SPECFILE}"
+ VERBOSE_ARG="-v"
+fi
test_status $retval "${TEST_NAME}"
### TEST 1
TEST_NAME="XSK KSELFTEST FRAMEWORK"
-echo "Switching interfaces [${VETH0}, ${VETH1}] to XDP Generic mode"
+if [[ $verbose -eq 1 ]]; then
+ echo "Switching interfaces [${VETH0}, ${VETH1}] to XDP Generic mode"
+fi
vethXDPgeneric ${VETH0} ${VETH1} ${NS1}
retval=$?
if [ $retval -eq 0 ]; then
- echo "Switching interfaces [${VETH0}, ${VETH1}] to XDP Native mode"
+ if [[ $verbose -eq 1 ]]; then
+ echo "Switching interfaces [${VETH0}, ${VETH1}] to XDP Native mode"
+ fi
vethXDPnative ${VETH0} ${VETH1} ${NS1}
fi
{"tear-down", no_argument, 0, 'T'},
{"bidi", optional_argument, 0, 'B'},
{"debug", optional_argument, 0, 'D'},
+ {"verbose", no_argument, 0, 'v'},
{"tx-pkt-count", optional_argument, 0, 'C'},
{0, 0, 0, 0}
};
" -T, --tear-down Tear down sockets by repeatedly recreating them\n"
" -B, --bidi Bi-directional sockets test\n"
" -D, --debug Debug mode - dump packets L2 - L5\n"
+ " -v, --verbose Verbose output\n"
" -C, --tx-pkt-count=n Number of packets to send\n";
ksft_print_msg(str, prog);
}
ksft_test_result_fail("ERROR: [%s] interface \"%s\" does not exist\n",
__func__, ifdict[targs->idx]->ifname);
} else {
- ksft_print_msg("Interface found: %s\n", ifdict[targs->idx]->ifname);
+ print_verbose("Interface found: %s\n", ifdict[targs->idx]->ifname);
targs->retptr = true;
}
}
pthread_join(ns_thread, NULL);
if (targs->retptr)
- ksft_print_msg("NS switched: %s\n", ifdict[i]->nsname);
+ print_verbose("NS switched: %s\n", ifdict[i]->nsname);
free(targs);
} else {
("ERROR: interface \"%s\" does not exist\n", ifdict[i]->ifname);
ret = false;
} else {
- ksft_print_msg("Interface found: %s\n", ifdict[i]->ifname);
+ print_verbose("Interface found: %s\n", ifdict[i]->ifname);
}
}
}
opterr = 0;
for (;;) {
- c = getopt_long(argc, argv, "i:q:pSNcTBDC:", long_options, &option_index);
+ c = getopt_long(argc, argv, "i:q:pSNcTBDC:v", long_options, &option_index);
if (c == -1)
break;
case 'C':
opt_pkt_count = atoi(optarg);
break;
+ case 'v':
+ opt_verbose = 1;
+ break;
default:
usage(basename(argv[0]));
ksft_exit_xfail();
int payload = *((uint32_t *)(pkt_buf[iter]->payload + PKT_HDR_SIZE));
if (payload == EOT) {
- ksft_print_msg("End-of-transmission frame received\n");
+ print_verbose("End-of-transmission frame received\n");
fprintf(stdout, "---------------------------------------\n");
break;
}
}
if (payloadseqnum == EOT) {
- ksft_print_msg("End-of-transmission frame received: PASS\n");
+ print_verbose("End-of-transmission frame received: PASS\n");
sigvar = 1;
break;
}
usleep(USLEEP_MAX);
}
- ksft_print_msg("Interface [%s] vector [Tx]\n", ifobject->ifname);
+ print_verbose("Interface [%s] vector [Tx]\n", ifobject->ifname);
for (int i = 0; i < num_frames; i++) {
/*send EOT frame */
if (i == (num_frames - 1))
gen_eth_frame(ifobject->umem, i * XSK_UMEM__DEFAULT_FRAME_SIZE);
}
- ksft_print_msg("Sending %d packets on interface %s\n",
+ print_verbose("Sending %d packets on interface %s\n",
(opt_pkt_count - 1), ifobject->ifname);
tx_only_all(ifobject);
} else if (ifobject->fv.vector == rx) {
if (!bidi_pass)
thread_common_ops(ifobject, bufs, &sync_mutex_tx, &spinning_rx);
- ksft_print_msg("Interface [%s] vector [Rx]\n", ifobject->ifname);
+ print_verbose("Interface [%s] vector [Rx]\n", ifobject->ifname);
xsk_populate_fill_ring(ifobject->umem);
TAILQ_INIT(&head);
break;
}
- ksft_print_msg("Received %d packets on interface %s\n",
+ print_verbose("Received %d packets on interface %s\n",
pkt_counter, ifobject->ifname);
if (opt_teardown)
- ksft_print_msg("Destroying socket\n");
+ print_verbose("Destroying socket\n");
}
if (!opt_bidi || bidi_pass) {
if (opt_bidi && bidi_pass) {
pthread_init_mutex();
if (!switching_notify) {
- ksft_print_msg("Switching Tx/Rx vectors\n");
+ print_verbose("Switching Tx/Rx vectors\n");
switching_notify++;
}
}
pkt_counter = 0;
prev_pkt = -1;
sigvar = 0;
- ksft_print_msg("Creating socket\n");
+ print_verbose("Creating socket\n");
testapp_validate();
opt_bidi ? bidi_pass++ : bidi_pass;
}