selftests/xsk: remove namespaces
authorMagnus Karlsson <magnus.karlsson@intel.com>
Wed, 11 Jan 2023 09:35:19 +0000 (10:35 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 12 Jan 2023 02:16:52 +0000 (18:16 -0800)
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: Magnus Karlsson <magnus.karlsson@intel.com>
Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://lore.kernel.org/r/20230111093526.11682-9-magnus.karlsson@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/test_xsk.sh
tools/testing/selftests/bpf/xsk_prereqs.sh
tools/testing/selftests/bpf/xskxceiver.c
tools/testing/selftests/bpf/xskxceiver.h

index cb315d8..b077cf5 100755 (executable)
@@ -24,8 +24,6 @@
 #      -----------     |     ----------
 #      |  vethX  | --------- |  vethY |
 #      -----------   peer    ----------
-#           |          |          |
-#      namespaceX      |     namespaceY
 #
 # AF_XDP is an address family optimized for high performance packet processing,
 # it is XDP’s user-space interface.
 # Prerequisites setup by script:
 #
 #   Set up veth interfaces as per the topology shown ^^:
-#   * setup two veth interfaces and one namespace
-#   ** veth<xxxx> in root namespace
-#   ** veth<yyyy> in af_xdp<xxxx> namespace
-#   ** namespace af_xdp<xxxx>
+#   * setup two veth interfaces
+#   ** veth<xxxx>
+#   ** veth<yyyy>
 #   *** xxxx and yyyy are randomly generated 4 digit numbers used to avoid
 #       conflict with any existing interface
 #   * 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 -
 VETH0=ve${VETH0_POSTFIX}
 VETH1_POSTFIX=$(cat ${URANDOM} | tr -dc '0-9' | fold -w 256 | head -n 1 | head --bytes 4)
 VETH1=ve${VETH1_POSTFIX}
-NS0=root
-NS1=af_xdp${VETH1_POSTFIX}
 MTU=1500
 
 trap ctrl_c INT
 
 function ctrl_c() {
-        cleanup_exit ${VETH0} ${VETH1} ${NS1}
+        cleanup_exit ${VETH0} ${VETH1}
        exit 1
 }
 
 setup_vethPairs() {
        if [[ $verbose -eq 1 ]]; then
-               echo "setting up ${VETH0}: namespace: ${NS0}"
+               echo "setting up ${VETH0}"
        fi
-       ip netns add ${NS1}
        ip link add ${VETH0} numtxqueues 4 numrxqueues 4 type veth peer name ${VETH1} numtxqueues 4 numrxqueues 4
        if [ -f /proc/net/if_inet6 ]; then
                echo 1 > /proc/sys/net/ipv6/conf/${VETH0}/disable_ipv6
        fi
        if [[ $verbose -eq 1 ]]; then
-               echo "setting up ${VETH1}: namespace: ${NS1}"
+               echo "setting up ${VETH1}"
        fi
 
        if [[ $busy_poll -eq 1 ]]; then
@@ -134,18 +128,15 @@ setup_vethPairs() {
                echo 200000 > /sys/class/net/${VETH1}/gro_flush_timeout
        fi
 
-       ip link set ${VETH1} netns ${NS1}
-       ip netns exec ${NS1} ip link set ${VETH1} mtu ${MTU}
+       ip link set ${VETH1} mtu ${MTU}
        ip link set ${VETH0} mtu ${MTU}
-       ip netns exec ${NS1} ip link set ${VETH1} up
-       ip netns exec ${NS1} ip link set dev lo up
+       ip link set ${VETH1} up
        ip link set ${VETH0} up
 }
 
 if [ ! -z $ETH ]; then
        VETH0=${ETH}
        VETH1=${ETH}
-       NS1=""
 else
        validate_root_exec
        validate_veth_support ${VETH0}
@@ -155,7 +146,7 @@ else
        retval=$?
        if [ $retval -ne 0 ]; then
                test_status $retval "${TEST_NAME}"
-               cleanup_exit ${VETH0} ${VETH1} ${NS1}
+               cleanup_exit ${VETH0} ${VETH1}
                exit $retval
        fi
 fi
@@ -179,14 +170,14 @@ statusList=()
 TEST_NAME="XSK_SELFTESTS_${VETH0}_SOFTIRQ"
 
 if [[ $debug -eq 1 ]]; then
-    echo "-i" ${VETH0} "-i" ${VETH1},${NS1}
+    echo "-i" ${VETH0} "-i" ${VETH1}
     exit
 fi
 
 exec_xskxceiver
 
 if [ -z $ETH ]; then
-       cleanup_exit ${VETH0} ${VETH1} ${NS1}
+       cleanup_exit ${VETH0} ${VETH1}
 fi
 TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
 busy_poll=1
@@ -199,7 +190,7 @@ exec_xskxceiver
 ## END TESTS
 
 if [ -z $ETH ]; then
-       cleanup_exit ${VETH0} ${VETH1} ${NS1}
+       cleanup_exit ${VETH0} ${VETH1}
 fi
 
 failures=0
index a0b7172..ae697a1 100755 (executable)
@@ -55,21 +55,13 @@ test_exit()
 
 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 del $1; }
 }
 
 cleanup_exit()
 {
-       clear_configs $1 $2 $3
+       clear_configs $1 $2
 }
 
 validate_ip_utility()
@@ -83,7 +75,7 @@ exec_xskxceiver()
                ARGS+="-b "
        fi
 
-       ./${XSKOBJ} -i ${VETH0} -i ${VETH1},${NS1} ${ARGS}
+       ./${XSKOBJ} -i ${VETH0} -i ${VETH1} ${ARGS}
 
        retval=$?
        test_status $retval "${TEST_NAME}"
index 72578ce..4c8f32e 100644 (file)
  * Flow:
  * -----
  * - Single process spawns two threads: Tx and Rx
- * - Each of these two threads attach to a veth interface within their assigned
- *   namespaces
- * - Each thread Creates one AF_XDP socket connected to a unique umem for each
+ * - Each of these two threads attach to a veth interface
+ * - Each thread creates one AF_XDP socket connected to a unique umem for each
  *   veth interface
- * - Tx thread Transmits 10k packets from veth<xxxx> to veth<yyyy>
- * - Rx thread verifies if all 10k packets were received and delivered in-order,
+ * - Tx thread Transmits a number of packets from veth<xxxx> to veth<yyyy>
+ * - Rx thread verifies if all packets were received and delivered in-order,
  *   and have the right content
  *
  * Enable/disable packet dump mode:
@@ -399,28 +398,6 @@ static void usage(const char *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)
 {
        if (!strcmp(ifobj->ifname, ""))
@@ -438,8 +415,6 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
        opterr = 0;
 
        for (;;) {
-               char *sptr, *token;
-
                c = getopt_long(argc, argv, "i:Dvb", long_options, &option_index);
                if (c == -1)
                        break;
@@ -453,11 +428,8 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
                        else
                                break;
 
-                       sptr = strndupa(optarg, strlen(optarg));
-                       memcpy(ifobj->ifname, strsep(&sptr, ","), MAX_INTERFACE_NAME_CHARS);
-                       token = strsep(&sptr, ",");
-                       if (token)
-                               memcpy(ifobj->nsname, token, MAX_INTERFACES_NAMESPACE_CHARS);
+                       memcpy(ifobj->ifname, optarg,
+                              min_t(size_t, MAX_INTERFACE_NAME_CHARS, strlen(optarg)));
                        interface_nb++;
                        break;
                case 'D':
@@ -1283,8 +1255,6 @@ static void thread_common_ops(struct test_spec *test, struct ifobject *ifobject)
        int ret, ifindex;
        void *bufs;
 
-       ifobject->ns_fd = switch_namespace(ifobject->nsname);
-
        if (ifobject->umem->unaligned_mode)
                mmap_flags |= MAP_HUGETLB;
 
@@ -1843,8 +1813,6 @@ static struct ifobject *ifobject_create(void)
        if (!ifobj->umem)
                goto out_umem;
 
-       ifobj->ns_fd = -1;
-
        return ifobj;
 
 out_umem:
@@ -1856,8 +1824,6 @@ out_xsk_arr:
 
 static void ifobject_delete(struct ifobject *ifobj)
 {
-       if (ifobj->ns_fd != -1)
-               close(ifobj->ns_fd);
        free(ifobj->umem);
        free(ifobj->xsk_arr);
        free(ifobj);
index edb76d2..dcb908f 100644 (file)
@@ -30,7 +30,6 @@
 #define TEST_CONTINUE 1
 #define MAX_INTERFACES 2
 #define MAX_INTERFACE_NAME_CHARS 16
-#define MAX_INTERFACES_NAMESPACE_CHARS 16
 #define MAX_SOCKETS 2
 #define MAX_TEST_NAME_SIZE 32
 #define MAX_TEARDOWN_ITER 10
@@ -133,14 +132,12 @@ typedef void *(*thread_func_t)(void *arg);
 
 struct ifobject {
        char ifname[MAX_INTERFACE_NAME_CHARS];
-       char nsname[MAX_INTERFACES_NAMESPACE_CHARS];
        struct xsk_socket_info *xsk;
        struct xsk_socket_info *xsk_arr;
        struct xsk_umem_info *umem;
        thread_func_t func_ptr;
        validation_func_t validation_func;
        struct pkt_stream *pkt_stream;
-       int ns_fd;
        int xsk_map_fd;
        u32 dst_ip;
        u32 src_ip;