portgw_test.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #!/bin/bash
  2. DEFPORT=1001
  3. DEFTTY=/dev/ttyUSB0
  4. DEFBAUD=115200
  5. TRANSPORT=${1}
  6. FILESIZE=${2}
  7. IP=${3}
  8. PORT=${4:-$DEFPORT}
  9. TTY=${5:-$DEFTTY}
  10. BAUD=${6:-$DEFBAUD}
  11. SRCFILE=/dev/shm/data.dump
  12. DSTFILE=/tmp/data.dump
  13. #Max size of supported UDP datagram size.
  14. #Higher size packets will be partially lost by application.
  15. MAXDGRAMMSIZE=512
  16. [[ -z $TRANSPORT ]] && { echo "No transport: [tcp|udp]"; exit 1; }
  17. [[ -z $IP ]] && { echo "No IP!"; exit 1; }
  18. [[ -z $FILESIZE ]] && { echo "No file size!"; exit 1; }
  19. trap abort INT
  20. function cleanup {
  21. rm -rf $SRCFILE
  22. rm -rf $DSTFILE
  23. [[ -z $bg_proc ]] && exit 1
  24. kill $bg_proc
  25. wait $bg_proc 2>/dev/null
  26. #kill $(jobs -pr)
  27. }
  28. function abort {
  29. echo "Aborted!"
  30. cleanup
  31. exit 2
  32. }
  33. function setup {
  34. echo "Transfer size: $FILESIZE"
  35. #Check if port is available
  36. [[ $TRANSPORT == "udp" ]] && NC_ARGS="-u"
  37. nc -vz $NC_ARGS $IP $PORT
  38. [[ $? != 0 ]] && { echo "Port $PORT is not available"; cleanup; exit 1; }
  39. #Wait UDP port ping
  40. [[ $TRANSPORT == "udp" ]] && sleep 1
  41. stty -F $TTY $BAUD # -icanon
  42. dd if=/dev/urandom of=$SRCFILE bs=$FILESIZE count=1 2>&1 &>/dev/null
  43. md5_sent=$(md5sum $SRCFILE | cut -d$' ' -f1)
  44. echo "Out MD5: $md5_sent"
  45. }
  46. function check_transfer {
  47. md5_rcvd=$(md5sum $DSTFILE | cut -d$' ' -f1)
  48. echo -e " In MD5: $md5_rcvd"
  49. echo "$(stat -c%s $DSTFILE)/$(stat -c%s $SRCFILE) bytes received"
  50. echo "--------------------------------------------"
  51. [[ $md5_sent != $md5_rcvd ]] && { echo -e "Test failed, transferred file MD5 missmatch!\r\n"; cleanup; exit 1; }
  52. echo -e "Test OK\r\n"
  53. }
  54. function test_serial2tcp {
  55. setup
  56. socat -u tcp:$IP:$PORT $DSTFILE &
  57. bg_proc=$!
  58. [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
  59. socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" $TTY,raw
  60. #Wait data to be transferred
  61. sleep 1
  62. check_transfer
  63. cleanup
  64. }
  65. function test_serial2udp {
  66. setup
  67. #Send initial request
  68. echo "." | nc -u $IP $PORT > $DSTFILE &
  69. bg_proc=$!
  70. [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
  71. #Wait initial request transferred
  72. sleep 1
  73. socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" $TTY,raw
  74. #Wait data to be transferred
  75. sleep 1
  76. check_transfer
  77. cleanup
  78. }
  79. function test_tcp2serial {
  80. setup
  81. socat -u $TTY,raw $DSTFILE &
  82. bg_proc=$!
  83. [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
  84. #socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" tcp:$IP:$PORT
  85. dd if=$SRCFILE | nc $IP $PORT
  86. #Wait data to be transferred
  87. sleep 1
  88. check_transfer
  89. cleanup
  90. }
  91. function test_udp2serial {
  92. setup
  93. socat -u $TTY,raw $DSTFILE &
  94. bg_proc=$!
  95. [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
  96. #Split data to the $MAXDGRAMMSIZE size blocks
  97. socat -u -b$MAXDGRAMMSIZE "SYSTEM:dd if=$SRCFILE" udp:$IP:$PORT
  98. #Wait data to be transferred
  99. sleep 1
  100. check_transfer
  101. cleanup
  102. }
  103. if [[ $TRANSPORT == "tcp" ]]
  104. then
  105. # Serial -> TCP
  106. echo -e "\r\nSerial->TCP"
  107. echo "============================================"
  108. test_serial2tcp
  109. # TCP -> Serial
  110. echo -e "\r\nTCP->Serial"
  111. echo "============================================"
  112. test_tcp2serial
  113. fi
  114. if [[ $TRANSPORT == "udp" ]]
  115. then
  116. # Serial -> UDP
  117. echo -e "\r\nSerial->UDP"
  118. echo "============================================"
  119. test_serial2udp
  120. # UDP -> Serial
  121. echo -e "\r\nUDP->Serial"
  122. echo "============================================"
  123. test_udp2serial
  124. fi
  125. exit 0