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 Worker# 31*4a64e381SAndroid Build Coastguard Worker# This script includes common utils for testing mdns 32*4a64e381SAndroid Build Coastguard Worker# 33*4a64e381SAndroid Build Coastguard Worker 34*4a64e381SAndroid Build Coastguard Workerset -euxo pipefail 35*4a64e381SAndroid Build Coastguard Worker 36*4a64e381SAndroid Build Coastguard WorkerDNS_SD_RESULT=result 37*4a64e381SAndroid Build Coastguard Workerreadonly DNS_SD_RESULT 38*4a64e381SAndroid Build Coastguard Worker 39*4a64e381SAndroid Build Coastguard Workercase "${OTBR_MDNS}" in 40*4a64e381SAndroid Build Coastguard Worker mDNSResponder) 41*4a64e381SAndroid Build Coastguard Worker sudo service avahi-daemon stop || true 42*4a64e381SAndroid Build Coastguard Worker sudo killall mdnsd || true 43*4a64e381SAndroid Build Coastguard Worker sudo mdnsd 44*4a64e381SAndroid Build Coastguard Worker sleep 1 45*4a64e381SAndroid Build Coastguard Worker ;; 46*4a64e381SAndroid Build Coastguard Worker 47*4a64e381SAndroid Build Coastguard Worker avahi) 48*4a64e381SAndroid Build Coastguard Worker sudo killall mdnsd || true 49*4a64e381SAndroid Build Coastguard Worker sudo service avahi-daemon restart 50*4a64e381SAndroid Build Coastguard Worker sleep 1 51*4a64e381SAndroid Build Coastguard Worker ;; 52*4a64e381SAndroid Build Coastguard Worker 53*4a64e381SAndroid Build Coastguard Worker *) 54*4a64e381SAndroid Build Coastguard Worker echo >&2 "Not supported" 55*4a64e381SAndroid Build Coastguard Worker exit 128 56*4a64e381SAndroid Build Coastguard Worker ;; 57*4a64e381SAndroid Build Coastguard Workeresac 58*4a64e381SAndroid Build Coastguard Worker 59*4a64e381SAndroid Build Coastguard Workeron_exit() 60*4a64e381SAndroid Build Coastguard Worker{ 61*4a64e381SAndroid Build Coastguard Worker EXIT_CODE=$? 62*4a64e381SAndroid Build Coastguard Worker readonly EXIT_CODE 63*4a64e381SAndroid Build Coastguard Worker 64*4a64e381SAndroid Build Coastguard Worker kill "$PID" 65*4a64e381SAndroid Build Coastguard Worker [[ ! -e ${DNS_SD_RESULT} ]] || rm "${DNS_SD_RESULT}" || true 66*4a64e381SAndroid Build Coastguard Worker 67*4a64e381SAndroid Build Coastguard Worker exit $EXIT_CODE 68*4a64e381SAndroid Build Coastguard Worker} 69*4a64e381SAndroid Build Coastguard Worker 70*4a64e381SAndroid Build Coastguard Workerstart_publisher() 71*4a64e381SAndroid Build Coastguard Worker{ 72*4a64e381SAndroid Build Coastguard Worker "${OTBR_TEST_MDNS}" "$1" & 73*4a64e381SAndroid Build Coastguard Worker PID=$! 74*4a64e381SAndroid Build Coastguard Worker trap on_exit EXIT 75*4a64e381SAndroid Build Coastguard Worker sleep 2 76*4a64e381SAndroid Build Coastguard Worker} 77*4a64e381SAndroid Build Coastguard Worker 78*4a64e381SAndroid Build Coastguard Worker####################################### 79*4a64e381SAndroid Build Coastguard Worker# Check if a service is regisered 80*4a64e381SAndroid Build Coastguard Worker# 81*4a64e381SAndroid Build Coastguard Worker# Arguments: 82*4a64e381SAndroid Build Coastguard Worker# $1 Name 83*4a64e381SAndroid Build Coastguard Worker# $2 Type 84*4a64e381SAndroid Build Coastguard Worker# $3 Text record 85*4a64e381SAndroid Build Coastguard Worker# 86*4a64e381SAndroid Build Coastguard Worker# Returns: 87*4a64e381SAndroid Build Coastguard Worker# 0 Registered 88*4a64e381SAndroid Build Coastguard Worker# otherwise Not registered 89*4a64e381SAndroid Build Coastguard Worker####################################### 90*4a64e381SAndroid Build Coastguard Workerdns_sd_check() 91*4a64e381SAndroid Build Coastguard Worker{ 92*4a64e381SAndroid Build Coastguard Worker # dns-sd will not exit 93*4a64e381SAndroid Build Coastguard Worker dns-sd -L "$1" "$2" local >"${DNS_SD_RESULT}" 2>&1 & 94*4a64e381SAndroid Build Coastguard Worker DNS_SD_PID=$! 95*4a64e381SAndroid Build Coastguard Worker sleep 1 96*4a64e381SAndroid Build Coastguard Worker kill "${DNS_SD_PID}" 97*4a64e381SAndroid Build Coastguard Worker 98*4a64e381SAndroid Build Coastguard Worker cat "${DNS_SD_RESULT}" 99*4a64e381SAndroid Build Coastguard Worker grep "$3" "${DNS_SD_RESULT}" 100*4a64e381SAndroid Build Coastguard Worker} 101*4a64e381SAndroid Build Coastguard Worker 102*4a64e381SAndroid Build Coastguard Worker####################################### 103*4a64e381SAndroid Build Coastguard Worker# Check if a service is registered with 104*4a64e381SAndroid Build Coastguard Worker# a given type. 105*4a64e381SAndroid Build Coastguard Worker# 106*4a64e381SAndroid Build Coastguard Worker# Arguments: 107*4a64e381SAndroid Build Coastguard Worker# $1 Name 108*4a64e381SAndroid Build Coastguard Worker# $2 Type 109*4a64e381SAndroid Build Coastguard Worker# 110*4a64e381SAndroid Build Coastguard Worker# Returns: 111*4a64e381SAndroid Build Coastguard Worker# 0 Registered 112*4a64e381SAndroid Build Coastguard Worker# otherwise Not registered 113*4a64e381SAndroid Build Coastguard Worker####################################### 114*4a64e381SAndroid Build Coastguard Workerdns_sd_check_type() 115*4a64e381SAndroid Build Coastguard Worker{ 116*4a64e381SAndroid Build Coastguard Worker # dns-sd will not exit 117*4a64e381SAndroid Build Coastguard Worker dns-sd -B "$2" local >"${DNS_SD_RESULT}" 2>&1 & 118*4a64e381SAndroid Build Coastguard Worker DNS_SD_PID=$! 119*4a64e381SAndroid Build Coastguard Worker sleep 1 120*4a64e381SAndroid Build Coastguard Worker kill "${DNS_SD_PID}" 121*4a64e381SAndroid Build Coastguard Worker 122*4a64e381SAndroid Build Coastguard Worker cat "${DNS_SD_RESULT}" 123*4a64e381SAndroid Build Coastguard Worker grep "$1" "${DNS_SD_RESULT}" 124*4a64e381SAndroid Build Coastguard Worker} 125*4a64e381SAndroid Build Coastguard Worker 126*4a64e381SAndroid Build Coastguard Worker####################################### 127*4a64e381SAndroid Build Coastguard Worker# Check if a host is regisered 128*4a64e381SAndroid Build Coastguard Worker# 129*4a64e381SAndroid Build Coastguard Worker# Arguments: 130*4a64e381SAndroid Build Coastguard Worker# $1 hostname 131*4a64e381SAndroid Build Coastguard Worker# $2 address 132*4a64e381SAndroid Build Coastguard Worker# 133*4a64e381SAndroid Build Coastguard Worker# Returns: 134*4a64e381SAndroid Build Coastguard Worker# 0 Registered 135*4a64e381SAndroid Build Coastguard Worker# otherwise Not registered 136*4a64e381SAndroid Build Coastguard Worker####################################### 137*4a64e381SAndroid Build Coastguard Workerdns_sd_check_host() 138*4a64e381SAndroid Build Coastguard Worker{ 139*4a64e381SAndroid Build Coastguard Worker # dns-sd will not exit 140*4a64e381SAndroid Build Coastguard Worker dns-sd -G v6 "$1" >"${DNS_SD_RESULT}" 2>&1 & 141*4a64e381SAndroid Build Coastguard Worker DNS_SD_PID=$! 142*4a64e381SAndroid Build Coastguard Worker sleep 1 143*4a64e381SAndroid Build Coastguard Worker kill "${DNS_SD_PID}" 144*4a64e381SAndroid Build Coastguard Worker 145*4a64e381SAndroid Build Coastguard Worker cat "${DNS_SD_RESULT}" 146*4a64e381SAndroid Build Coastguard Worker grep "$2" "${DNS_SD_RESULT}" 147*4a64e381SAndroid Build Coastguard Worker} 148*4a64e381SAndroid Build Coastguard Worker 149*4a64e381SAndroid Build Coastguard Worker####################################### 150*4a64e381SAndroid Build Coastguard Worker# Check if a service is registered 151*4a64e381SAndroid Build Coastguard Worker# 152*4a64e381SAndroid Build Coastguard Worker# Arguments: 153*4a64e381SAndroid Build Coastguard Worker# $1 Expected avahi query result string 154*4a64e381SAndroid Build Coastguard Worker# $2 Service type. If omitted, all 155*4a64e381SAndroid Build Coastguard Worker# services will be examined. 156*4a64e381SAndroid Build Coastguard Worker# 157*4a64e381SAndroid Build Coastguard Worker# Returns: 158*4a64e381SAndroid Build Coastguard Worker# 0 Registered 159*4a64e381SAndroid Build Coastguard Worker# otherwise Not registered 160*4a64e381SAndroid Build Coastguard Worker####################################### 161*4a64e381SAndroid Build Coastguard Workeravahi_check() 162*4a64e381SAndroid Build Coastguard Worker{ 163*4a64e381SAndroid Build Coastguard Worker local service_type 164*4a64e381SAndroid Build Coastguard Worker (($# == 2)) && service_type="$2" || service_type="-a" 165*4a64e381SAndroid Build Coastguard Worker 166*4a64e381SAndroid Build Coastguard Worker avahi-browse -prt "$service_type" | tee | grep "$1" 167*4a64e381SAndroid Build Coastguard Worker} 168