#!/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 -e set -x die() { echo " *** ERROR: " "$*" exit 1 } at_exit() { EXIT_CODE=$? sudo killall expect || true killall ot-ctl || true killall ot-daemon || true killall socat || true exit $EXIT_CODE } build() { make -f examples/Makefile-simulation make -f src/posix/Makefile-posix PLATFORM_NETIF=1 PLATFORM_UDP=1 UDP_FORWARD=0 MAX_POWER_TABLE=1 } check() { trap at_exit INT TERM EXIT SOCAT_OUTPUT=/tmp/ot-socat OT_OUTPUT=/tmp/ot-output socat -d -d pty,raw,echo=0 pty,raw,echo=0 >/dev/null 2>$SOCAT_OUTPUT & while true; do if test "$(head -n2 $SOCAT_OUTPUT | wc -l)" = 2; then RADIO_PTY=$(head -n1 $SOCAT_OUTPUT | grep -o '/dev/.\+') CORE_PTY=$(head -n2 $SOCAT_OUTPUT | tail -n1 | grep -o '/dev/.\+') break fi echo 'Waiting for socat ready...' sleep 1 done echo 'RADIO_PTY' "$RADIO_PTY" echo 'CORE_PTY' "$CORE_PTY" RADIO_NCP_PATH="$(pwd)/$(ls output/*linux*/bin/ot-rcp)" # shellcheck disable=SC2094 $RADIO_NCP_PATH 1 >"$RADIO_PTY" <"$RADIO_PTY" & # Cover setting a valid network interface name. readonly VALID_NETIF_NAME="wan$(date +%H%M%S)" RADIO_URL="spinel+hdlc+uart://${CORE_PTY}?max-power-table=11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26" if [[ ${DAEMON} == 1 ]]; then sudo "$(pwd)/$(ls output/posix/*linux*/bin/ot-daemon)" -I "${VALID_NETIF_NAME}" "${RADIO_URL}" & sleep 1 OT_CLI_CMD="$(pwd)/$(ls output/posix/*linux*/bin/ot-ctl)" sudo "${OT_CLI_CMD}" panid 0xface | grep 'Done' || die 'failed to set panid with ot-ctl' # verify this reset and factoryreset end immediately sudo "${OT_CLI_CMD}" reset # sleep a while for daemon ready sleep 2 sudo "${OT_CLI_CMD}" factoryreset else OT_CLI="$(pwd)/$(ls output/posix/*linux*/bin/ot-cli)" sudo "${OT_CLI}" -I "${VALID_NETIF_NAME}" -n "${RADIO_URL}" # Cover setting a too long(max is 15 characters) network interface name. # Expect exit code to be 2(OT_EXIT_INVALID_ARGUMENTS). readonly INVALID_NETIF_NAME="wan0123456789123" sudo "${OT_CLI}" -I "${INVALID_NETIF_NAME}" -n "${RADIO_URL}" || test $? = 2 OT_CLI_CMD="$(pwd)/$(ls output/posix/*linux*/bin/ot-cli) ${RADIO_URL}" fi sudo expect <