diff packages/net/ppp/current/tests/test_server.sh @ 1586:e0d88dc6a92f

Added PPP network support.
author nickg
date Wed, 14 Apr 2004 15:08:56 +0000
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/net/ppp/current/tests/test_server.sh
@@ -0,0 +1,406 @@
+#! /bin/bash
+#==========================================================================
+#
+#      tests/test_server.sh
+#
+#      PPP test server script
+#
+#==========================================================================
+#####ECOSGPLCOPYRIGHTBEGIN####
+# -------------------------------------------
+# This file is part of eCos, the Embedded Configurable Operating System.
+# Copyright (C) 2003, 2004 eCosCentric Ltd.
+#
+# eCos is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 or (at your option) any later version.
+#
+# eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with eCos; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+#
+# As a special exception, if other files instantiate templates or use macros
+# or inline functions from this file, or you compile this file and link it
+# with other works to produce a work based on this file, this file does not
+# by itself cause the resulting work to be covered by the GNU General Public
+# License. However the source code for this file must still be made available
+# in accordance with section (3) of the GNU General Public License.
+#
+# This exception does not invalidate any other reasons why a work based on
+# this file might be covered by the GNU General Public License.
+#
+# -------------------------------------------
+#####ECOSGPLCOPYRIGHTEND####
+#==========================================================================
+######DESCRIPTIONBEGIN####
+#
+# Author(s):    nickg
+# Contributors:
+# Date:         2003-06-26
+# Purpose:      
+# Description:  
+#              
+#
+#####DESCRIPTIONEND####
+#
+#==========================================================================
+
+# --------------------------------------------------------------------
+# Global variables
+
+ppp_prev=
+ppp_optarg=
+
+ppp_dev=
+ppp_myip=
+ppp_hisip=
+ppp_debug=
+ppp_redboot=
+ppp_redboot_baud=38400
+ppp_baud=$ppp_redboot_baud
+ppp_flow=crtscts
+ppp_ping_interval=1
+
+# --------------------------------------------------------------------
+# Parse the options:
+
+for ppp_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ppp_prev"; then
+    eval "$ppp_prev=\$ppp_option"
+    ppp_prev=
+    continue
+  fi
+
+  # If this option is of the form --thing=value then store
+  # the value into $ppp_optarg.
+  case "$ppp_option" in
+  -*=*) ppp_optarg=`echo "$ppp_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ppp_optarg= ;;
+  esac
+
+  # Now parse the option
+
+  case "$ppp_option" in
+  
+  --dev) ppp_prev=ppp_dev ;;
+  --dev=*) ppp_dev=$ppp_optarg ;;
+
+  --myip) ppp_prev=ppp_myip ;;
+  --myip=*) ppp_myip=$ppp_optarg ;;
+
+  --hisip) ppp_prev=ppp_hisip ;;
+  --hisip=*) ppp_hisip=$ppp_optarg ;;
+
+  --baud) ppp_prev=ppp_baud ;;
+  --baud=*) ppp_baud=$ppp_optarg ;;
+
+  --flow) ppp_prev=ppp_flow ;;
+  --flow=*) ppp_flow=$ppp_optarg ;;
+
+  --redboot) ppp_redboot=y ;;
+
+  --redboot-baud) ppp_prev=ppp_redboot_baud ;;
+  --redboot-baud=*) ppp_redboot_baud=$ppp_optarg ;;
+
+  --debug) ppp_debug=y ;;
+
+  *)
+	  echo "test_server: Unrecognized option: \"$ppp_option\"." >&2
+	  exit 1
+	  ;;
+  esac
+done
+
+# --------------------------------------------------------------------
+# debug echo function. This only generates output if the --debug
+# flag was given.
+
+dbecho()
+{
+    if [ $ppp_debug ] ; then
+        echo $*
+    fi
+}
+
+# --------------------------------------------------------------------
+# Usage message
+
+usage()
+{
+    echo "test_server --dev=<devname>"
+    echo "            --myip=<myip_addr>"
+    echo "            --hisip=<hisip_addr>"
+    echo "            [--baud=<baud_rate>]"
+    echo "            [--flow=[crtscts|xonxoff|none]]"
+    echo "            [--redboot [--redboot-baud=<baud_rate>]]"
+    echo "            [--debug]"
+    exit 1
+}
+
+# --------------------------------------------------------------------
+# Check that all the required options are present, and report their
+# values.
+
+if [ -z "$ppp_dev" ] ; then usage ; fi
+if [ -z "$ppp_myip" ] ; then usage ; fi
+if [ -z "$ppp_hisip" ] ; then usage ; fi
+
+dbecho "Device : " $ppp_dev
+dbecho "My IP  : " $ppp_myip
+dbecho "His IP : " $ppp_hisip
+dbecho "Baud   : " $ppp_baud
+dbecho "Flow   : " $ppp_flow
+
+if [ "$ppp_flow" == "none" ] ; then ppp_flow="" ; fi
+
+# --------------------------------------------------------------------
+# Bring the PPP link up by calling pppd. The pid of the PPPD is
+# stored in pppd_pid for later use.
+
+pppup()
+{
+    dbecho pppd $ppp_dev $ppp_baud $ppp_flow local nodetach $ppp_myip:$ppp_hisip $* &
+    pppd $ppp_dev $ppp_baud $ppp_flow local nodetach $ppp_myip:$ppp_hisip $* &
+    pppd_pid=$!
+#    dbecho "PPPD Pid: " $pppd_pid
+}
+
+# --------------------------------------------------------------------
+# Simple test for bringing PPP up. Once the link is up the remote
+# end is pinged for a while and then we bring the link down by
+# signalling the PPPD.
+
+ppp_up_test()
+{
+    dbecho ppp_up_test
+    pppup
+    sleep 6
+    ping -i$ppp_ping_interval -w45 -s3000 -c20 $ppp_hisip
+    kill -SIGINT $pppd_pid
+    wait $pppd_pid
+}
+
+# --------------------------------------------------------------------
+# Up/down test. In this case the link is brought down by the remote
+# end.
+
+ppp_updown_test()
+{
+    dbecho ppp_updown_test
+    pppup
+    wait $pppd_pid
+}
+
+
+# --------------------------------------------------------------------
+# Chat tests. These use chat itself to test the chat scripts on the
+# remote end. The tests are:
+#
+# chat_test_1 - run throught the entire script
+# chat_test_2 - simulate a carrier drop
+# chat_test_3 - simulate a timeout
+
+chat_test_1()
+{
+    chat -V "Chat Test" "CONNECT\rlogin:\c"  ppp "Password:\c"  hithere ""  <$ppp_dev >$ppp_dev
+}
+
+chat_test_2()
+{
+    chat -V "Chat Test" "CONNECT\rlogin:\c"  ppp "NO CARRIER"  <$ppp_dev >$ppp_dev
+}
+
+chat_test_3()
+{
+    chat -V "Chat Test" "CONNECT\rlogin:\c"  ppp  <$ppp_dev >$ppp_dev
+}
+
+# --------------------------------------------------------------------
+# Authentication tests. These bring up the PPPD with different
+# authentication requirements against which the remote end tests
+# itself. The tests are:
+#
+# auth_test_1 - authenticate by default method (usually CHAP)
+# auth_test_2 - require PAP authentication
+# auth_test_3 - require CHAP authentication
+
+auth_test_1()
+{
+    dbecho ppp_up_test
+    pppup auth
+    sleep 6
+    ps -p $pppd_pid >/dev/null
+    if [ "$?" == "0" ] ; then
+        ping -i$ppp_ping_interval -w45 -s3000 -c5 $ppp_hisip
+        kill -SIGINT $pppd_pid
+        wait $pppd_pid
+    fi
+}
+
+auth_test_2()
+{
+    dbecho ppp_up_test
+    pppup auth require-pap
+    sleep 6
+    ps -p $pppd_pid >/dev/null
+    if [ "$?" == "0" ] ; then
+        ping -i$ppp_ping_interval -w45 -s3000 -c5 $ppp_hisip
+        kill -SIGINT $pppd_pid
+        wait $pppd_pid
+    fi
+}
+
+auth_test_3()
+{
+    dbecho ppp_up_test
+    pppup auth require-chap
+    sleep 6
+    ps -p $pppd_pid >/dev/null
+    if [ "$?" == "0" ] ; then
+        ping -i$ppp_ping_interval -w45 -s3000 -c5 $ppp_hisip
+        kill -SIGINT $pppd_pid
+        wait $pppd_pid
+    fi
+}
+
+
+# --------------------------------------------------------------------
+# TCP echo test. After bringing up the link this test runs the
+# tcp_source and tcp_sink test programs to exercise the link.  This
+# can take a long time so it is not really suitable for automated
+# testing.
+
+tcp_echo_test()
+{
+    local sink_pid
+    dbecho tcp_echo_test
+    pppup
+    sleep 10
+    tcp_sink $ppp_hisip &
+    sink_pid=$!
+    sleep 5
+    tcp_source $ppp_hisip 60
+    wait $sink_pid
+    sleep 5
+    wait $pppd_pid
+}
+
+# --------------------------------------------------------------------
+# Network characterisation test. After bringing up the link this test
+# runs the nc_test_master test program to exercise the link.  This can
+# take a long time so it is not really suitable for automated testing.
+
+nc_test_slave_test()
+{
+    dbecho nc_test_slave_test
+    pppup
+    sleep 10
+    nc_test_master $ppp_hisip
+    sleep 5
+    wait $pppd_pid
+}
+
+# --------------------------------------------------------------------
+# Change the baud rate. Depending on the value sent as part of the
+# BAUD message, change the link baudrate.
+
+new_baud()
+{
+    ppp_new_baud=`echo $ppp_test | sed 's/.*BAUD:\([0-9]*\).*/\1/'`
+    dbecho "New Baud " $ppp_new_baud
+    case $ppp_new_baud in
+        016) ppp_baud=14400; ppp_ping_interval=6 ;;
+        017) ppp_baud=19200; ppp_ping_interval=4 ;;
+        018) ppp_baud=38400; ppp_ping_interval=2 ;;
+        019) ppp_baud=57600; ppp_ping_interval=2 ;;
+        020) ppp_baud=115200; ppp_ping_interval=1 ;;
+        021) ppp_baud=230400 ;;
+
+        *) dbecho "Unknown baud rate: " $ppp_new_baud
+    esac
+    dbecho "New Baud Rate : " $ppp_baud
+}        
+        
+
+
+# --------------------------------------------------------------------
+# Look for a RedBoot> prompt.
+
+ppp_redboot_prompt()
+{
+    local done=
+    dbecho ppp_redboot_prompt
+    
+    stty -F $ppp_dev $ppp_redboot_baud
+
+    while [ ! $done ] ; do
+        chat -V "RedBoot>" "\c" <$ppp_dev >$ppp_dev
+        if [ "$?" == "0" ] ; then done=1; fi
+    done
+}
+
+# --------------------------------------------------------------------
+# Main loop.
+
+while true ; do
+
+    if [ $ppp_redboot ] ; then ppp_redboot_prompt; fi
+
+    ppp_running=y
+    
+    while [ $ppp_running ] ; do
+
+        dbecho ""
+
+        dbecho "Setting baud rate : " $ppp_baud
+        stty -F $ppp_dev $ppp_baud
+
+        dbecho "Waiting for test..."
+
+        read ppp_test ppp_junk < $ppp_dev
+
+        ppp_test=`echo $ppp_test | sed 's/\([a-zA-Z_:0-9]*\).*/\1/'`
+        
+        dbecho "PPP test: >" $ppp_test "<"
+    
+        case $ppp_test in
+        
+            PPP_UPDOWN) ppp_updown_test ;;
+        
+            PPP_UP) ppp_up_test ;;
+
+            CHAT_TEST_1) chat_test_1 ;;
+            CHAT_TEST_2) chat_test_2 ;;
+            CHAT_TEST_3) chat_test_3 ;;
+
+            PPP_AUTH_1) auth_test_1 ;;
+            PPP_AUTH_2) auth_test_2 ;;
+            PPP_AUTH_3) auth_test_3 ;;
+
+            TCP_ECHO) tcp_echo_test ;;
+
+            NC_TEST_SLAVE) nc_test_slave_test ;;
+
+            BAUD:*) new_baud ;;
+
+            FINISH) unset ppp_running ;;
+            
+            *) echo "Unknown test: " $ppp_test ;;
+        
+        esac
+
+    done
+
+done
+
+# --------------------------------------------------------------------
+# end of test_server.sh
+