Commit 64aef77d authored by Magnus Karlsson's avatar Magnus Karlsson Committed by Alexei Starovoitov

selftests/xsk: remove namespaces

Remove the namespaces used as they fill no function. This will
simplify the code for speeding up the tests in the following commits.
Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
Acked-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://lore.kernel.org/r/20230111093526.11682-9-magnus.karlsson@gmail.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent efe620e5
...@@ -24,8 +24,6 @@ ...@@ -24,8 +24,6 @@
# ----------- | ---------- # ----------- | ----------
# | vethX | --------- | vethY | # | vethX | --------- | vethY |
# ----------- peer ---------- # ----------- peer ----------
# | | |
# namespaceX | namespaceY
# #
# AF_XDP is an address family optimized for high performance packet processing, # AF_XDP is an address family optimized for high performance packet processing,
# it is XDP’s user-space interface. # it is XDP’s user-space interface.
...@@ -39,10 +37,9 @@ ...@@ -39,10 +37,9 @@
# Prerequisites setup by script: # Prerequisites setup by script:
# #
# Set up veth interfaces as per the topology shown ^^: # Set up veth interfaces as per the topology shown ^^:
# * setup two veth interfaces and one namespace # * setup two veth interfaces
# ** veth<xxxx> in root namespace # ** veth<xxxx>
# ** veth<yyyy> in af_xdp<xxxx> namespace # ** veth<yyyy>
# ** namespace af_xdp<xxxx>
# *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid # *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid
# conflict with any existing interface # conflict with any existing interface
# * tests the veth and xsk layers of the topology # * tests the veth and xsk layers of the topology
...@@ -103,28 +100,25 @@ VETH0_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head - ...@@ -103,28 +100,25 @@ VETH0_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head -
VETH0=ve${VETH0_POSTFIX} VETH0=ve${VETH0_POSTFIX}
VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4) VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
VETH1=ve${VETH1_POSTFIX} VETH1=ve${VETH1_POSTFIX}
NS0=root
NS1=af_xdp${VETH1_POSTFIX}
MTU=1500 MTU=1500
trap ctrl_c INT trap ctrl_c INT
function ctrl_c() { function ctrl_c() {
cleanup_exit ${VETH0} ${VETH1} ${NS1} cleanup_exit ${VETH0} ${VETH1}
exit 1 exit 1
} }
setup_vethPairs() { setup_vethPairs() {
if [[ $verbose -eq 1 ]]; then if [[ $verbose -eq 1 ]]; then
echo "setting up ${VETH0}: namespace: ${NS0}" echo "setting up ${VETH0}"
fi fi
ip netns add ${NS1}
ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4 ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4
if [ -f /proc/net/if_inet6 ]; then if [ -f /proc/net/if_inet6 ]; then
echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6 echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
fi fi
if [[ $verbose -eq 1 ]]; then if [[ $verbose -eq 1 ]]; then
echo "setting up ${VETH1}: namespace: ${NS1}" echo "setting up ${VETH1}"
fi fi
if [[ $busy_poll -eq 1 ]]; then if [[ $busy_poll -eq 1 ]]; then
...@@ -134,18 +128,15 @@ setup_vethPairs() { ...@@ -134,18 +128,15 @@ setup_vethPairs() {
echo 200000 > /sys/class/net/${VETH1}/gro_flush_timeout echo 200000 > /sys/class/net/${VETH1}/gro_flush_timeout
fi fi
ip link set ${VETH1} netns ${NS1} ip link set ${VETH1} mtu ${MTU}
ip netns exec ${NS1} ip link set ${VETH1} mtu ${MTU}
ip link set ${VETH0} mtu ${MTU} ip link set ${VETH0} mtu ${MTU}
ip netns exec ${NS1} ip link set ${VETH1} up ip link set ${VETH1} up
ip netns exec ${NS1} ip link set dev lo up
ip link set ${VETH0} up ip link set ${VETH0} up
} }
if [ ! -z $ETH ]; then if [ ! -z $ETH ]; then
VETH0=${ETH} VETH0=${ETH}
VETH1=${ETH} VETH1=${ETH}
NS1=""
else else
validate_root_exec validate_root_exec
validate_veth_support ${VETH0} validate_veth_support ${VETH0}
...@@ -155,7 +146,7 @@ else ...@@ -155,7 +146,7 @@ else
retval=$? retval=$?
if [ $retval -ne 0 ]; then if [ $retval -ne 0 ]; then
test_status $retval "${TEST_NAME}" test_status $retval "${TEST_NAME}"
cleanup_exit ${VETH0} ${VETH1} ${NS1} cleanup_exit ${VETH0} ${VETH1}
exit $retval exit $retval
fi fi
fi fi
...@@ -179,14 +170,14 @@ statusList=() ...@@ -179,14 +170,14 @@ statusList=()
TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ" TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ"
if [[ $debug -eq 1 ]]; then if [[ $debug -eq 1 ]]; then
echo "-i" ${VETH0} "-i" ${VETH1},${NS1} echo "-i" ${VETH0} "-i" ${VETH1}
exit exit
fi fi
exec_xskxceiver exec_xskxceiver
if [ -z $ETH ]; then if [ -z $ETH ]; then
cleanup_exit ${VETH0} ${VETH1} ${NS1} cleanup_exit ${VETH0} ${VETH1}
fi fi
TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL" TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
busy_poll=1 busy_poll=1
...@@ -199,7 +190,7 @@ exec_xskxceiver ...@@ -199,7 +190,7 @@ exec_xskxceiver
## END TESTS ## END TESTS
if [ -z $ETH ]; then if [ -z $ETH ]; then
cleanup_exit ${VETH0} ${VETH1} ${NS1} cleanup_exit ${VETH0} ${VETH1}
fi fi
failures=0 failures=0
......
...@@ -55,21 +55,13 @@ test_exit() ...@@ -55,21 +55,13 @@ test_exit()
clear_configs() clear_configs()
{ {
if [ $(ip netns show | grep $3 &>/dev/null; echo $?;) == 0 ]; then
[ $(ip netns exec $3 ip link show $2 &>/dev/null; echo $?;) == 0 ] &&
{ ip netns exec $3 ip link del $2; }
ip netns del $3
fi
#Once we delete a veth pair node, the entire veth pair is removed,
#this is just to be cautious just incase the NS does not exist then
#veth node inside NS won't get removed so we explicitly remove it
[ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] && [ $(ip link show $1 &>/dev/null; echo $?;) == 0 ] &&
{ ip link del $1; } { ip link del $1; }
} }
cleanup_exit() cleanup_exit()
{ {
clear_configs $1 $2 $3 clear_configs $1 $2
} }
validate_ip_utility() validate_ip_utility()
...@@ -83,7 +75,7 @@ exec_xskxceiver() ...@@ -83,7 +75,7 @@ exec_xskxceiver()
ARGS+="-b " ARGS+="-b "
fi fi
./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${ARGS} ./${XSKOBJ} -i ${VETH0} -i ${VETH1} ${ARGS}
retval=$? retval=$?
test_status $retval "${TEST_NAME}" test_status $retval "${TEST_NAME}"
......
...@@ -55,12 +55,11 @@ ...@@ -55,12 +55,11 @@
* Flow: * Flow:
* ----- * -----
* - Single process spawns two threads: Tx and Rx * - Single process spawns two threads: Tx and Rx
* - Each of these two threads attach to a veth interface within their assigned * - Each of these two threads attach to a veth interface
* namespaces * - Each thread creates one AF_XDP socket connected to a unique umem for each
* - Each thread Creates one AF_XDP socket connected to a unique umem for each
* veth interface * veth interface
* - Tx thread Transmits 10k packets from veth<xxxx> to veth<yyyy> * - Tx thread Transmits a number of packets from veth<xxxx> to veth<yyyy>
* - Rx thread verifies if all 10k packets were received and delivered in-order, * - Rx thread verifies if all packets were received and delivered in-order,
* and have the right content * and have the right content
* *
* Enable/disable packet dump mode: * Enable/disable packet dump mode:
...@@ -399,28 +398,6 @@ static void usage(const char *prog) ...@@ -399,28 +398,6 @@ static void usage(const char *prog)
ksft_print_msg(str, prog); ksft_print_msg(str, prog);
} }
static int switch_namespace(const char *nsname)
{
char fqns[26] = "/var/run/netns/";
int nsfd;
if (!nsname || strlen(nsname) == 0)
return -1;
strncat(fqns, nsname, sizeof(fqns) - strlen(fqns) - 1);
nsfd = open(fqns, O_RDONLY);
if (nsfd == -1)
exit_with_error(errno);
if (setns(nsfd, 0) == -1)
exit_with_error(errno);
print_verbose("NS switched: %s\n", nsname);
return nsfd;
}
static bool validate_interface(struct ifobject *ifobj) static bool validate_interface(struct ifobject *ifobj)
{ {
if (!strcmp(ifobj->ifname, "")) if (!strcmp(ifobj->ifname, ""))
...@@ -438,8 +415,6 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj ...@@ -438,8 +415,6 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
opterr = 0; opterr = 0;
for (;;) { for (;;) {
char *sptr, *token;
c = getopt_long(argc, argv, "i:Dvb", long_options, &option_index); c = getopt_long(argc, argv, "i:Dvb", long_options, &option_index);
if (c == -1) if (c == -1)
break; break;
...@@ -453,11 +428,8 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj ...@@ -453,11 +428,8 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
else else
break; break;
sptr = strndupa(optarg, strlen(optarg)); memcpy(ifobj->ifname, optarg,
memcpy(ifobj->ifname, strsep(&sptr, ","), MAX_INTERFACE_NAME_CHARS); min_t(size_t, MAX_INTERFACE_NAME_CHARS, strlen(optarg)));
token = strsep(&sptr, ",");
if (token)
memcpy(ifobj->nsname, token, MAX_INTERFACES_NAMESPACE_CHARS);
interface_nb++; interface_nb++;
break; break;
case 'D': case 'D':
...@@ -1283,8 +1255,6 @@ static void thread_common_ops(struct test_spec *test, struct ifobject *ifobject) ...@@ -1283,8 +1255,6 @@ static void thread_common_ops(struct test_spec *test, struct ifobject *ifobject)
int ret, ifindex; int ret, ifindex;
void *bufs; void *bufs;
ifobject->ns_fd = switch_namespace(ifobject->nsname);
if (ifobject->umem->unaligned_mode) if (ifobject->umem->unaligned_mode)
mmap_flags |= MAP_HUGETLB; mmap_flags |= MAP_HUGETLB;
...@@ -1843,8 +1813,6 @@ static struct ifobject *ifobject_create(void) ...@@ -1843,8 +1813,6 @@ static struct ifobject *ifobject_create(void)
if (!ifobj->umem) if (!ifobj->umem)
goto out_umem; goto out_umem;
ifobj->ns_fd = -1;
return ifobj; return ifobj;
out_umem: out_umem:
...@@ -1856,8 +1824,6 @@ static struct ifobject *ifobject_create(void) ...@@ -1856,8 +1824,6 @@ static struct ifobject *ifobject_create(void)
static void ifobject_delete(struct ifobject *ifobj) static void ifobject_delete(struct ifobject *ifobj)
{ {
if (ifobj->ns_fd != -1)
close(ifobj->ns_fd);
free(ifobj->umem); free(ifobj->umem);
free(ifobj->xsk_arr); free(ifobj->xsk_arr);
free(ifobj); free(ifobj);
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define TEST_CONTINUE 1 #define TEST_CONTINUE 1
#define MAX_INTERFACES 2 #define MAX_INTERFACES 2
#define MAX_INTERFACE_NAME_CHARS 16 #define MAX_INTERFACE_NAME_CHARS 16
#define MAX_INTERFACES_NAMESPACE_CHARS 16
#define MAX_SOCKETS 2 #define MAX_SOCKETS 2
#define MAX_TEST_NAME_SIZE 32 #define MAX_TEST_NAME_SIZE 32
#define MAX_TEARDOWN_ITER 10 #define MAX_TEARDOWN_ITER 10
...@@ -133,14 +132,12 @@ typedef void *(*thread_func_t)(void *arg); ...@@ -133,14 +132,12 @@ typedef void *(*thread_func_t)(void *arg);
struct ifobject { struct ifobject {
char ifname[MAX_INTERFACE_NAME_CHARS]; char ifname[MAX_INTERFACE_NAME_CHARS];
char nsname[MAX_INTERFACES_NAMESPACE_CHARS];
struct xsk_socket_info *xsk; struct xsk_socket_info *xsk;
struct xsk_socket_info *xsk_arr; struct xsk_socket_info *xsk_arr;
struct xsk_umem_info *umem; struct xsk_umem_info *umem;
thread_func_t func_ptr; thread_func_t func_ptr;
validation_func_t validation_func; validation_func_t validation_func;
struct pkt_stream *pkt_stream; struct pkt_stream *pkt_stream;
int ns_fd;
int xsk_map_fd; int xsk_map_fd;
u32 dst_ip; u32 dst_ip;
u32 src_ip; u32 src_ip;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment