xref: /linux/tools/testing/selftests/rdma/rxe_ipv6.sh (revision 4b0b946019e7376752456380b67e54eea2f10a7c)
1*e01027caSZhu Yanjun#!/bin/bash
2*e01027caSZhu Yanjun
3*e01027caSZhu Yanjun# Configuration
4*e01027caSZhu YanjunNS_NAME="net6"
5*e01027caSZhu YanjunVETH_HOST="veth0"
6*e01027caSZhu YanjunVETH_NS="veth1"
7*e01027caSZhu YanjunRXE_NAME="rxe6"
8*e01027caSZhu YanjunPORT=4791
9*e01027caSZhu YanjunIP6_ADDR="2001:db8::1/64"
10*e01027caSZhu Yanjun
11*e01027caSZhu Yanjunexec > /dev/null
12*e01027caSZhu Yanjun
13*e01027caSZhu Yanjun# Cleanup function to run on exit (even on failure)
14*e01027caSZhu Yanjuncleanup() {
15*e01027caSZhu Yanjun    ip netns del "$NS_NAME" 2>/dev/null
16*e01027caSZhu Yanjun    modprobe -r rdma_rxe 2>/dev/null
17*e01027caSZhu Yanjun    echo "Done."
18*e01027caSZhu Yanjun}
19*e01027caSZhu Yanjuntrap cleanup EXIT
20*e01027caSZhu Yanjun
21*e01027caSZhu Yanjun# 1. Prerequisites check
22*e01027caSZhu Yanjunfor mod in tun veth rdma_rxe; do
23*e01027caSZhu Yanjun    if ! modinfo "$mod" >/dev/null 2>&1; then
24*e01027caSZhu Yanjun        echo "Error: Kernel module '$mod' not found."
25*e01027caSZhu Yanjun        exit 1
26*e01027caSZhu Yanjun    fi
27*e01027caSZhu Yanjundone
28*e01027caSZhu Yanjun
29*e01027caSZhu Yanjunmodprobe rdma_rxe
30*e01027caSZhu Yanjun
31*e01027caSZhu Yanjun# 2. Setup Namespace and Networking
32*e01027caSZhu Yanjunecho "Setting up IPv6 network namespace..."
33*e01027caSZhu Yanjunip netns add "$NS_NAME"
34*e01027caSZhu Yanjunip link add "$VETH_HOST" type veth peer name "$VETH_NS"
35*e01027caSZhu Yanjunip link set "$VETH_NS" netns "$NS_NAME"
36*e01027caSZhu Yanjunip netns exec "$NS_NAME" ip addr add "$IP6_ADDR" dev "$VETH_NS"
37*e01027caSZhu Yanjunip netns exec "$NS_NAME" ip link set "$VETH_NS" up
38*e01027caSZhu Yanjunip link set "$VETH_HOST" up
39*e01027caSZhu Yanjun
40*e01027caSZhu Yanjun# 3. Add RDMA Link
41*e01027caSZhu Yanjunecho "Adding RDMA RXE link..."
42*e01027caSZhu Yanjunif ! ip netns exec "$NS_NAME" rdma link add "$RXE_NAME" type rxe netdev "$VETH_NS"; then
43*e01027caSZhu Yanjun    echo "Error: Failed to create RXE link."
44*e01027caSZhu Yanjun    exit 1
45*e01027caSZhu Yanjunfi
46*e01027caSZhu Yanjun
47*e01027caSZhu Yanjun# 4. Verification: Port should be listening
48*e01027caSZhu Yanjun# Using -H to skip headers and -q for quiet exit codes
49*e01027caSZhu Yanjunif ! ip netns exec "$NS_NAME" ss -Hul6n sport = :$PORT | grep -q ":$PORT"; then
50*e01027caSZhu Yanjun    echo "Error: UDP port $PORT is NOT listening after link creation."
51*e01027caSZhu Yanjun    exit 1
52*e01027caSZhu Yanjunfi
53*e01027caSZhu Yanjunecho "Verified: Port $PORT is active."
54*e01027caSZhu Yanjun
55*e01027caSZhu Yanjun# 5. Removal and Verification
56*e01027caSZhu Yanjunecho "Deleting RDMA link..."
57*e01027caSZhu Yanjunip netns exec "$NS_NAME" rdma link del "$RXE_NAME"
58*e01027caSZhu Yanjun
59*e01027caSZhu Yanjunif ip netns exec "$NS_NAME" ss -Hul6n sport = :$PORT | grep -q ":$PORT"; then
60*e01027caSZhu Yanjun    echo "Error: UDP port $PORT still active after link deletion."
61*e01027caSZhu Yanjun    exit 1
62*e01027caSZhu Yanjunfi
63*e01027caSZhu Yanjunecho "Verified: Port $PORT closed successfully."
64