1*dfb429eaSDavid Wei#!/bin/bash 2*dfb429eaSDavid Wei# SPDX-License-Identifier: GPL-2.0-only 3*dfb429eaSDavid Wei 4*dfb429eaSDavid Weisource ../../../net/net_helper.sh 5*dfb429eaSDavid Wei 6*dfb429eaSDavid WeiNSIM_DEV_1_ID=$((256 + RANDOM % 256)) 7*dfb429eaSDavid WeiNSIM_DEV_1_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_DEV_1_ID 8*dfb429eaSDavid WeiNSIM_DEV_2_ID=$((512 + RANDOM % 256)) 9*dfb429eaSDavid WeiNSIM_DEV_2_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_DEV_2_ID 10*dfb429eaSDavid Wei 11*dfb429eaSDavid WeiNSIM_DEV_SYS_NEW=/sys/bus/netdevsim/new_device 12*dfb429eaSDavid WeiNSIM_DEV_SYS_DEL=/sys/bus/netdevsim/del_device 13*dfb429eaSDavid WeiNSIM_DEV_SYS_LINK=/sys/bus/netdevsim/link_device 14*dfb429eaSDavid WeiNSIM_DEV_SYS_UNLINK=/sys/bus/netdevsim/unlink_device 15*dfb429eaSDavid Wei 16*dfb429eaSDavid Weisocat_check() 17*dfb429eaSDavid Wei{ 18*dfb429eaSDavid Wei if [ ! -x "$(command -v socat)" ]; then 19*dfb429eaSDavid Wei echo "socat command not found. Skipping test" 20*dfb429eaSDavid Wei return 1 21*dfb429eaSDavid Wei fi 22*dfb429eaSDavid Wei 23*dfb429eaSDavid Wei return 0 24*dfb429eaSDavid Wei} 25*dfb429eaSDavid Wei 26*dfb429eaSDavid Weisetup_ns() 27*dfb429eaSDavid Wei{ 28*dfb429eaSDavid Wei set -e 29*dfb429eaSDavid Wei ip netns add nssv 30*dfb429eaSDavid Wei ip netns add nscl 31*dfb429eaSDavid Wei 32*dfb429eaSDavid Wei NSIM_DEV_1_NAME=$(find $NSIM_DEV_1_SYS/net -maxdepth 1 -type d ! \ 33*dfb429eaSDavid Wei -path $NSIM_DEV_1_SYS/net -exec basename {} \;) 34*dfb429eaSDavid Wei NSIM_DEV_2_NAME=$(find $NSIM_DEV_2_SYS/net -maxdepth 1 -type d ! \ 35*dfb429eaSDavid Wei -path $NSIM_DEV_2_SYS/net -exec basename {} \;) 36*dfb429eaSDavid Wei 37*dfb429eaSDavid Wei ip link set $NSIM_DEV_1_NAME netns nssv 38*dfb429eaSDavid Wei ip link set $NSIM_DEV_2_NAME netns nscl 39*dfb429eaSDavid Wei 40*dfb429eaSDavid Wei ip netns exec nssv ip addr add '192.168.1.1/24' dev $NSIM_DEV_1_NAME 41*dfb429eaSDavid Wei ip netns exec nscl ip addr add '192.168.1.2/24' dev $NSIM_DEV_2_NAME 42*dfb429eaSDavid Wei 43*dfb429eaSDavid Wei ip netns exec nssv ip link set dev $NSIM_DEV_1_NAME up 44*dfb429eaSDavid Wei ip netns exec nscl ip link set dev $NSIM_DEV_2_NAME up 45*dfb429eaSDavid Wei set +e 46*dfb429eaSDavid Wei} 47*dfb429eaSDavid Wei 48*dfb429eaSDavid Weicleanup_ns() 49*dfb429eaSDavid Wei{ 50*dfb429eaSDavid Wei ip netns del nscl 51*dfb429eaSDavid Wei ip netns del nssv 52*dfb429eaSDavid Wei} 53*dfb429eaSDavid Wei 54*dfb429eaSDavid Wei### 55*dfb429eaSDavid Wei### Code start 56*dfb429eaSDavid Wei### 57*dfb429eaSDavid Wei 58*dfb429eaSDavid Weisocat_check || exit 4 59*dfb429eaSDavid Wei 60*dfb429eaSDavid Weimodprobe netdevsim 61*dfb429eaSDavid Wei 62*dfb429eaSDavid Wei# linking 63*dfb429eaSDavid Wei 64*dfb429eaSDavid Weiecho $NSIM_DEV_1_ID > $NSIM_DEV_SYS_NEW 65*dfb429eaSDavid Weiecho $NSIM_DEV_2_ID > $NSIM_DEV_SYS_NEW 66*dfb429eaSDavid Weiudevadm settle 67*dfb429eaSDavid Wei 68*dfb429eaSDavid Weisetup_ns 69*dfb429eaSDavid Wei 70*dfb429eaSDavid WeiNSIM_DEV_1_FD=$((256 + RANDOM % 256)) 71*dfb429eaSDavid Weiexec {NSIM_DEV_1_FD}</var/run/netns/nssv 72*dfb429eaSDavid WeiNSIM_DEV_1_IFIDX=$(ip netns exec nssv cat /sys/class/net/$NSIM_DEV_1_NAME/ifindex) 73*dfb429eaSDavid Wei 74*dfb429eaSDavid WeiNSIM_DEV_2_FD=$((256 + RANDOM % 256)) 75*dfb429eaSDavid Weiexec {NSIM_DEV_2_FD}</var/run/netns/nscl 76*dfb429eaSDavid WeiNSIM_DEV_2_IFIDX=$(ip netns exec nscl cat /sys/class/net/$NSIM_DEV_2_NAME/ifindex) 77*dfb429eaSDavid Wei 78*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:2000" > $NSIM_DEV_SYS_LINK 2>/dev/null 79*dfb429eaSDavid Weiif [ $? -eq 0 ]; then 80*dfb429eaSDavid Wei echo "linking with non-existent netdevsim should fail" 81*dfb429eaSDavid Wei cleanup_ns 82*dfb429eaSDavid Wei exit 1 83*dfb429eaSDavid Weifi 84*dfb429eaSDavid Wei 85*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX 2000:$NSIM_DEV_2_IFIDX" > $NSIM_DEV_SYS_LINK 2>/dev/null 86*dfb429eaSDavid Weiif [ $? -eq 0 ]; then 87*dfb429eaSDavid Wei echo "linking with non-existent netnsid should fail" 88*dfb429eaSDavid Wei cleanup_ns 89*dfb429eaSDavid Wei exit 1 90*dfb429eaSDavid Weifi 91*dfb429eaSDavid Wei 92*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX" > $NSIM_DEV_SYS_LINK 2>/dev/null 93*dfb429eaSDavid Weiif [ $? -eq 0 ]; then 94*dfb429eaSDavid Wei echo "linking with self should fail" 95*dfb429eaSDavid Wei cleanup_ns 96*dfb429eaSDavid Wei exit 1 97*dfb429eaSDavid Weifi 98*dfb429eaSDavid Wei 99*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:$NSIM_DEV_2_IFIDX" > $NSIM_DEV_SYS_LINK 100*dfb429eaSDavid Weiif [ $? -ne 0 ]; then 101*dfb429eaSDavid Wei echo "linking netdevsim1 with netdevsim2 should succeed" 102*dfb429eaSDavid Wei cleanup_ns 103*dfb429eaSDavid Wei exit 1 104*dfb429eaSDavid Weifi 105*dfb429eaSDavid Wei 106*dfb429eaSDavid Wei# argument error checking 107*dfb429eaSDavid Wei 108*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:a" > $NSIM_DEV_SYS_LINK 2>/dev/null 109*dfb429eaSDavid Weiif [ $? -eq 0 ]; then 110*dfb429eaSDavid Wei echo "invalid arg should fail" 111*dfb429eaSDavid Wei cleanup_ns 112*dfb429eaSDavid Wei exit 1 113*dfb429eaSDavid Weifi 114*dfb429eaSDavid Wei 115*dfb429eaSDavid Wei# send/recv packets 116*dfb429eaSDavid Wei 117*dfb429eaSDavid Weitmp_file=$(mktemp) 118*dfb429eaSDavid Weiip netns exec nssv socat TCP-LISTEN:1234,fork $tmp_file & 119*dfb429eaSDavid Weipid=$! 120*dfb429eaSDavid Weires=0 121*dfb429eaSDavid Wei 122*dfb429eaSDavid Weiwait_local_port_listen nssv 1234 tcp 123*dfb429eaSDavid Wei 124*dfb429eaSDavid Weiecho "HI" | ip netns exec nscl socat STDIN TCP:192.168.1.1:1234 125*dfb429eaSDavid Wei 126*dfb429eaSDavid Weicount=$(cat $tmp_file | wc -c) 127*dfb429eaSDavid Weiif [[ $count -ne 3 ]]; then 128*dfb429eaSDavid Wei echo "expected 3 bytes, got $count" 129*dfb429eaSDavid Wei res=1 130*dfb429eaSDavid Weifi 131*dfb429eaSDavid Wei 132*dfb429eaSDavid Weiecho "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX" > $NSIM_DEV_SYS_UNLINK 133*dfb429eaSDavid Wei 134*dfb429eaSDavid Weiecho $NSIM_DEV_2_ID > $NSIM_DEV_SYS_DEL 135*dfb429eaSDavid Wei 136*dfb429eaSDavid Weikill $pid 137*dfb429eaSDavid Weiecho $NSIM_DEV_1_ID > $NSIM_DEV_SYS_DEL 138*dfb429eaSDavid Wei 139*dfb429eaSDavid Weicleanup_ns 140*dfb429eaSDavid Wei 141*dfb429eaSDavid Weimodprobe -r netdevsim 142*dfb429eaSDavid Wei 143*dfb429eaSDavid Weiexit $res 144