OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [net/] [ppp/] [current/] [tests/] [test_server.sh] - Rev 838

Go to most recent revision | Compare with Previous | Blame | View Log

#! /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 Free Software Foundation, Inc.                   
#
# 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.,     
# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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 v2.                                                
#
# 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
 
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.