1#!/bin/bash 2# 3# Copyright (c) 2018, The OpenThread Authors. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions are met: 8# 1. Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 3. Neither the name of the copyright holder nor the 14# names of its contributors may be used to endorse or promote products 15# derived from this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27# POSSIBILITY OF SUCH DAMAGE. 28# 29 30set -eux 31 32check_otbr_agent() 33{ 34 sudo dbus-send --system \ 35 --dest=org.freedesktop.DBus \ 36 --type=method_call \ 37 --print-reply \ 38 /org/freedesktop/DBus \ 39 org.freedesktop.DBus.ListNames | grep -q '"io.openthread.BorderRouter.wpan0"' 40} 41 42check_upstart() 43{ 44 echo 'Verify Upstart notification' 45 UPSTART_JOB=otbr-agent sudo -E otbr-agent -d7 -v "spinel+hdlc+forkpty://$(command -v ot-rcp)?forkpty-arg=2" & 46 sleep 2 47 UPSTART_JOB_PID=$! 48 49 if [[ "$(ps --no-headers -o s "${UPSTART_JOB_PID}")" != T ]]; then 50 echo 'otbr-agent is not in Stopped state' 51 false 52 fi 53 54 echo 'Continue otbr-agent' 55 sudo pkill -SIGCONT -P "${UPSTART_JOB_PID}" 56 sudo kill -SIGCONT "${UPSTART_JOB_PID}" 57 sleep 2 58 59 if [[ "$(ps --no-headers -o s "${UPSTART_JOB_PID}")" == T ]]; then 60 echo 'otbr-agent did not continue' 61 false 62 fi 63 sudo pkill -P "${UPSTART_JOB_PID}" 64 wait 65} 66 67main() 68{ 69 RELEASE=1 ./script/bootstrap 70 ./script/bootstrap 71 INFRA_IF_NAME=eth0 BACKBONE_ROUTER=0 NAT64=1 ./script/setup 72 # re-run to ensure the script can run successfully multiple times 73 INFRA_IF_NAME=eth0 BACKBONE_ROUTER=0 NAT64=1 ./script/setup 74 SOCAT_OUTPUT=/tmp/ot-socat 75 76 if ! command -v ot-rcp; then 77 third_party/openthread/repo/script/cmake-build simulation -DOT_COVERAGE=OFF 78 PATH=$PATH:build/simulation/examples/apps/ncp 79 fi 80 81 check_upstart 82 83 socat -d -d pty,raw,echo=0 pty,raw,echo=0 >/dev/null 2>$SOCAT_OUTPUT & 84 while true; do 85 if [[ "$(head -n2 $SOCAT_OUTPUT | wc -l)" == 2 ]]; then 86 RCP_PTY=$(head -n1 $SOCAT_OUTPUT | grep -o '/dev/.\+') 87 HOST_PTY=$(head -n2 $SOCAT_OUTPUT | tail -n1 | grep -o '/dev/.\+') 88 break 89 fi 90 echo 'Waiting for socat ready...' 91 sleep 1 92 done 93 echo "RCP_PTY: ${RCP_PTY}" 94 echo "HOST_PTY: ${HOST_PTY}" 95 96 # shellcheck disable=SC2094 97 ot-rcp 1 >"${RCP_PTY}" <"${RCP_PTY}" & 98 99 INFRA_IF_NAME=eth0 RADIO_URL="spinel+hdlc+uart://${HOST_PTY}" ./script/console & 100 SERVICES_PID=$! 101 echo 'Waiting for services to be ready...' 102 sleep 30 103 check_otbr_agent 104 netstat -an | grep 80 105 kill "${SERVICES_PID}" 106 sudo killall otbr-web || true 107 sudo killall otbr-agent || true 108 sudo service tayga stop || true 109 killall ot-rcp 110 killall socat 111 jobs 112 echo 'Waiting for services to end...' 113 wait 114} 115 116main "$@" 117