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