| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- #!/bin/bash
 
- DEFPORT=1001
 
- DEFTTY=/dev/ttyUSB0
 
- DEFBAUD=115200
 
- TRANSPORT=${1}
 
- FILESIZE=${2}
 
- IP=${3}
 
- PORT=${4:-$DEFPORT}
 
- TTY=${5:-$DEFTTY}
 
- BAUD=${6:-$DEFBAUD}
 
- SRCFILE=/dev/shm/data.dump
 
- DSTFILE=/tmp/data.dump
 
- #Max size of supported UDP datagram size.
 
- #Higher size packets will be partially lost by application.
 
- MAXDGRAMMSIZE=512
 
- [[ -z $TRANSPORT ]] && { echo "No transport: [tcp|udp]"; exit 1; }
 
- [[ -z $IP ]] && { echo "No IP!"; exit 1; }
 
- [[ -z $FILESIZE ]] && { echo "No file size!"; exit 1; }
 
- trap abort INT
 
- function cleanup {
 
-     rm -rf $SRCFILE
 
-     rm -rf $DSTFILE
 
-     [[ -z $bg_proc ]] && exit 1
 
-     kill $bg_proc
 
-     wait $bg_proc 2>/dev/null
 
-     #kill $(jobs -pr)
 
- }
 
- function abort {
 
-     echo "Aborted!"
 
-     cleanup
 
-     exit 2
 
- }
 
- function setup {
 
-     echo "Transfer size: $FILESIZE"
 
-     #Check if port is available
 
-     [[ $TRANSPORT == "udp" ]] && NC_ARGS="-u"
 
-     nc -vz $NC_ARGS $IP $PORT    
 
-     [[ $? != 0 ]] && { echo "Port $PORT is not available"; cleanup; exit 1; }
 
-     #Wait UDP port ping
 
-     [[ $TRANSPORT == "udp" ]] && sleep 1
 
-     stty -F $TTY $BAUD # -icanon
 
-     dd if=/dev/urandom of=$SRCFILE bs=$FILESIZE count=1 2>&1 &>/dev/null
 
-     md5_sent=$(md5sum $SRCFILE | cut -d$' ' -f1)
 
-     echo "Out MD5: $md5_sent"
 
- }
 
- function check_transfer {
 
-     md5_rcvd=$(md5sum $DSTFILE | cut -d$' ' -f1)
 
-     echo -e " In MD5: $md5_rcvd"
 
-     echo "$(stat -c%s $DSTFILE)/$(stat -c%s $SRCFILE) bytes received"
 
-     echo "--------------------------------------------"
 
-     [[ $md5_sent != $md5_rcvd ]] && { echo -e "Test failed, transferred file MD5 missmatch!\r\n"; cleanup; exit 1; }
 
-     echo -e "Test OK\r\n"
 
- }
 
- function test_serial2tcp {
 
-     setup
 
-     socat -u tcp:$IP:$PORT $DSTFILE &
 
-     bg_proc=$!
 
-     [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
 
-     socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" $TTY,raw
 
-     #Wait data to be transferred
 
-     sleep 1
 
-     check_transfer
 
-     cleanup
 
- }
 
- function test_serial2udp {
 
-     setup
 
-     #Send initial request
 
-     echo "." | nc -u $IP $PORT > $DSTFILE &
 
-     bg_proc=$!
 
-     [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
 
-     #Wait initial request transferred
 
-     sleep 1
 
-     socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" $TTY,raw
 
-     #Wait data to be transferred
 
-     sleep 1
 
-     check_transfer
 
-     cleanup
 
- }
 
- function test_tcp2serial {
 
-     setup
 
-     socat -u $TTY,raw $DSTFILE &
 
-     bg_proc=$!
 
-     [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
 
-     #socat -u "SYSTEM:dd if=$SRCFILE bs=$FILESIZE count=1" tcp:$IP:$PORT
 
-     dd if=$SRCFILE | nc $IP $PORT
 
-     #Wait data to be transferred
 
-     sleep 1
 
-     check_transfer
 
-     cleanup
 
- }
 
- function test_udp2serial {
 
-     setup
 
-     socat -u $TTY,raw $DSTFILE &
 
-     bg_proc=$!
 
-     [[ -z $bg_proc ]] && { echo "Socat not started!"; cleanup; exit 1; }
 
-     #Split data to the $MAXDGRAMMSIZE size blocks
 
-     socat -u -b$MAXDGRAMMSIZE "SYSTEM:dd if=$SRCFILE" udp:$IP:$PORT
 
-     #Wait data to be transferred
 
-     sleep 1
 
-     check_transfer
 
-     cleanup
 
- }
 
- if [[ $TRANSPORT == "tcp" ]]
 
- then
 
-     # Serial -> TCP
 
-     echo -e "\r\nSerial->TCP"
 
-     echo "============================================"
 
-     test_serial2tcp
 
-     # TCP -> Serial
 
-     echo -e "\r\nTCP->Serial"
 
-     echo "============================================"
 
-     test_tcp2serial
 
- fi
 
- if [[ $TRANSPORT == "udp" ]]
 
- then
 
-     # Serial -> UDP
 
-     echo -e "\r\nSerial->UDP"
 
-     echo "============================================"
 
-     test_serial2udp
 
-     # UDP -> Serial
 
-     echo -e "\r\nUDP->Serial"
 
-     echo "============================================"
 
-     test_udp2serial
 
- fi
 
- exit 0
 
 
  |