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 + -
显示快捷键?