peer.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0-only
  3. source ../../../net/net_helper.sh
  4. NSIM_DEV_1_ID=$((256 + RANDOM % 256))
  5. NSIM_DEV_1_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_DEV_1_ID
  6. NSIM_DEV_2_ID=$((512 + RANDOM % 256))
  7. NSIM_DEV_2_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_DEV_2_ID
  8. NSIM_DEV_SYS_NEW=/sys/bus/netdevsim/new_device
  9. NSIM_DEV_SYS_DEL=/sys/bus/netdevsim/del_device
  10. NSIM_DEV_SYS_LINK=/sys/bus/netdevsim/link_device
  11. NSIM_DEV_SYS_UNLINK=/sys/bus/netdevsim/unlink_device
  12. socat_check()
  13. {
  14. if [ ! -x "$(command -v socat)" ]; then
  15. echo "socat command not found. Skipping test"
  16. return 1
  17. fi
  18. return 0
  19. }
  20. setup_ns()
  21. {
  22. set -e
  23. ip netns add nssv
  24. ip netns add nscl
  25. NSIM_DEV_1_NAME=$(find $NSIM_DEV_1_SYS/net -maxdepth 1 -type d ! \
  26. -path $NSIM_DEV_1_SYS/net -exec basename {} \;)
  27. NSIM_DEV_2_NAME=$(find $NSIM_DEV_2_SYS/net -maxdepth 1 -type d ! \
  28. -path $NSIM_DEV_2_SYS/net -exec basename {} \;)
  29. ip link set $NSIM_DEV_1_NAME netns nssv
  30. ip link set $NSIM_DEV_2_NAME netns nscl
  31. ip netns exec nssv ip addr add '192.168.1.1/24' dev $NSIM_DEV_1_NAME
  32. ip netns exec nscl ip addr add '192.168.1.2/24' dev $NSIM_DEV_2_NAME
  33. ip netns exec nssv ip link set dev $NSIM_DEV_1_NAME up
  34. ip netns exec nscl ip link set dev $NSIM_DEV_2_NAME up
  35. set +e
  36. }
  37. cleanup_ns()
  38. {
  39. ip netns del nscl
  40. ip netns del nssv
  41. }
  42. ###
  43. ### Code start
  44. ###
  45. socat_check || exit 4
  46. modprobe netdevsim
  47. # linking
  48. echo $NSIM_DEV_1_ID > $NSIM_DEV_SYS_NEW
  49. echo $NSIM_DEV_2_ID > $NSIM_DEV_SYS_NEW
  50. udevadm settle
  51. setup_ns
  52. NSIM_DEV_1_FD=$((256 + RANDOM % 256))
  53. exec {NSIM_DEV_1_FD}</var/run/netns/nssv
  54. NSIM_DEV_1_IFIDX=$(ip netns exec nssv cat /sys/class/net/$NSIM_DEV_1_NAME/ifindex)
  55. NSIM_DEV_2_FD=$((256 + RANDOM % 256))
  56. exec {NSIM_DEV_2_FD}</var/run/netns/nscl
  57. NSIM_DEV_2_IFIDX=$(ip netns exec nscl cat /sys/class/net/$NSIM_DEV_2_NAME/ifindex)
  58. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:2000" > $NSIM_DEV_SYS_LINK 2>/dev/null
  59. if [ $? -eq 0 ]; then
  60. echo "linking with non-existent netdevsim should fail"
  61. cleanup_ns
  62. exit 1
  63. fi
  64. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX 2000:$NSIM_DEV_2_IFIDX" > $NSIM_DEV_SYS_LINK 2>/dev/null
  65. if [ $? -eq 0 ]; then
  66. echo "linking with non-existent netnsid should fail"
  67. cleanup_ns
  68. exit 1
  69. fi
  70. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX" > $NSIM_DEV_SYS_LINK 2>/dev/null
  71. if [ $? -eq 0 ]; then
  72. echo "linking with self should fail"
  73. cleanup_ns
  74. exit 1
  75. fi
  76. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:$NSIM_DEV_2_IFIDX" > $NSIM_DEV_SYS_LINK
  77. if [ $? -ne 0 ]; then
  78. echo "linking netdevsim1 with netdevsim2 should succeed"
  79. cleanup_ns
  80. exit 1
  81. fi
  82. # argument error checking
  83. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX $NSIM_DEV_2_FD:a" > $NSIM_DEV_SYS_LINK 2>/dev/null
  84. if [ $? -eq 0 ]; then
  85. echo "invalid arg should fail"
  86. cleanup_ns
  87. exit 1
  88. fi
  89. # send/recv packets
  90. tmp_file=$(mktemp)
  91. ip netns exec nssv socat TCP-LISTEN:1234,fork $tmp_file &
  92. pid=$!
  93. res=0
  94. wait_local_port_listen nssv 1234 tcp
  95. echo "HI" | ip netns exec nscl socat STDIN TCP:192.168.1.1:1234
  96. count=$(cat $tmp_file | wc -c)
  97. if [[ $count -ne 3 ]]; then
  98. echo "expected 3 bytes, got $count"
  99. res=1
  100. fi
  101. echo "$NSIM_DEV_1_FD:$NSIM_DEV_1_IFIDX" > $NSIM_DEV_SYS_UNLINK
  102. echo $NSIM_DEV_2_ID > $NSIM_DEV_SYS_DEL
  103. kill $pid
  104. echo $NSIM_DEV_1_ID > $NSIM_DEV_SYS_DEL
  105. cleanup_ns
  106. modprobe -r netdevsim
  107. exit $res