test_server.sh

来自「eCos操作系统源码」· Shell 代码 · 共 407 行

SH
407
字号
#! /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 variablesppp_prev=ppp_optarg=ppp_dev=ppp_myip=ppp_hisip=ppp_debug=ppp_redboot=ppp_redboot_baud=38400ppp_baud=$ppp_redboot_baudppp_flow=crtsctsppp_ping_interval=1# --------------------------------------------------------------------# Parse the options:for ppp_optiondo  # 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	  ;;  esacdone# --------------------------------------------------------------------# debug echo function. This only generates output if the --debug# flag was given.dbecho(){    if [ $ppp_debug ] ; then        echo $*    fi}# --------------------------------------------------------------------# Usage messageusage(){    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 ; fiif [ -z "$ppp_myip" ] ; then usage ; fiif [ -z "$ppp_hisip" ] ; then usage ; fidbecho "Device : " $ppp_devdbecho "My IP  : " $ppp_myipdbecho "His IP : " $ppp_hisipdbecho "Baud   : " $ppp_bauddbecho "Flow   : " $ppp_flowif [ "$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 timeoutchat_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 authenticationauth_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    donedone# --------------------------------------------------------------------# end of test_server.sh

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?