#!/bin/bash # # Copyright (c) 2018, The OpenThread Authors. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of the copyright holder nor the # names of its contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # set -eux check_otbr_agent() { sudo dbus-send --system \ --dest=org.freedesktop.DBus \ --type=method_call \ --print-reply \ /org/freedesktop/DBus \ org.freedesktop.DBus.ListNames | grep -q '"io.openthread.BorderRouter.wpan0"' } check_upstart() { echo 'Verify Upstart notification' UPSTART_JOB=otbr-agent sudo -E otbr-agent -d7 -v "spinel+hdlc+forkpty://$(command -v ot-rcp)?forkpty-arg=2" & sleep 2 UPSTART_JOB_PID=$! if [[ "$(ps --no-headers -o s "${UPSTART_JOB_PID}")" != T ]]; then echo 'otbr-agent is not in Stopped state' false fi echo 'Continue otbr-agent' sudo pkill -SIGCONT -P "${UPSTART_JOB_PID}" sudo kill -SIGCONT "${UPSTART_JOB_PID}" sleep 2 if [[ "$(ps --no-headers -o s "${UPSTART_JOB_PID}")" == T ]]; then echo 'otbr-agent did not continue' false fi sudo pkill -P "${UPSTART_JOB_PID}" wait } main() { RELEASE=1 ./script/bootstrap ./script/bootstrap INFRA_IF_NAME=eth0 BACKBONE_ROUTER=0 NAT64=1 ./script/setup # re-run to ensure the script can run successfully multiple times INFRA_IF_NAME=eth0 BACKBONE_ROUTER=0 NAT64=1 ./script/setup SOCAT_OUTPUT=/tmp/ot-socat if ! command -v ot-rcp; then third_party/openthread/repo/script/cmake-build simulation -DOT_COVERAGE=OFF PATH=$PATH:build/simulation/examples/apps/ncp fi check_upstart socat -d -d pty,raw,echo=0 pty,raw,echo=0 >/dev/null 2>$SOCAT_OUTPUT & while true; do if [[ "$(head -n2 $SOCAT_OUTPUT | wc -l)" == 2 ]]; then RCP_PTY=$(head -n1 $SOCAT_OUTPUT | grep -o '/dev/.\+') HOST_PTY=$(head -n2 $SOCAT_OUTPUT | tail -n1 | grep -o '/dev/.\+') break fi echo 'Waiting for socat ready...' sleep 1 done echo "RCP_PTY: ${RCP_PTY}" echo "HOST_PTY: ${HOST_PTY}" # shellcheck disable=SC2094 ot-rcp 1 >"${RCP_PTY}" <"${RCP_PTY}" & INFRA_IF_NAME=eth0 RADIO_URL="spinel+hdlc+uart://${HOST_PTY}" ./script/console & SERVICES_PID=$! echo 'Waiting for services to be ready...' sleep 30 check_otbr_agent netstat -an | grep 80 kill "${SERVICES_PID}" sudo killall otbr-web || true sudo killall otbr-agent || true sudo service tayga stop || true killall ot-rcp killall socat jobs echo 'Waiting for services to end...' wait } main "$@"