1# SPDX-License-Identifier: GPL-2.0-or-later 2#!/bin/sh 3# Copyright (c) 2014 Oracle and/or its affiliates. All Rights Reserved. 4# Copyright (c) 2017-2020 Petr Vorel <[email protected]> 5 6SERVER= 7CLIENT= 8CLIENT_EXTRA_OPTS= 9CLEANER= 10# Program number to register the services to rpcbind 11PROGNUMNOSVC=536875000 12 13TST_TESTFUNC=do_test 14TST_USAGE=usage 15TST_OPTS="c:e:s:" 16TST_SETUP=setup 17TST_CLEANUP=cleanup 18TST_PARSE_ARGS=rpc_parse_args 19TST_NEEDS_CMDS="pkill rpcinfo" 20 21usage() 22{ 23 cat << EOF 24USAGE: $0 [-s sprog] -c clprog [ -e extra ] 25 26Connect to the remote host and start sprog. 27Then execute clprog and passing it the remote host value. 28 29-c clprog client program binary 30-s sprog server program binary 31-e extra extra client options 32EOF 33} 34 35rpc_parse_args() 36{ 37 case "$1" in 38 c) CLIENT="$OPTARG" ;; 39 e) tst_check_cmds sed 40 CLIENT_EXTRA_OPTS="$(echo $OPTARG | sed 's/,/ /')" ;; 41 s) SERVER="$OPTARG" ;; 42 esac 43} 44 45setup() 46{ 47 check_rpc 48 49 if [ -n "$SERVER" ]; then 50 CLEANER="rpc_cleaner" 51 if echo "$SERVER" | grep -q '^tirpc'; then 52 CLEANER="tirpc_cleaner" 53 fi 54 fi 55 56 [ -n "$CLIENT" ] || tst_brk TBROK "client program not set" 57 tst_check_cmds $CLIENT $SERVER || tst_brk TCONF "LTP compiled without TI-RPC support?" 58 59 tst_cmd_available ldd which || return 60 if ldd $(which $CLIENT) |grep -q /libtirpc\.so; then 61 tst_res TINFO "using libtirpc: yes" 62 else 63 tst_res TINFO "using libtirpc: no (probably using glibc)" 64 fi 65} 66 67cleanup() 68{ 69 if [ "$SERVER_STARTED" ]; then 70 pkill -13 -x $SERVER 71 $CLEANER $PROGNUMNOSVC 72 fi 73} 74 75do_test() 76{ 77 local i 78 79 if [ -n "$SERVER" ]; then 80 $SERVER $PROGNUMNOSVC & 81 SERVER_STARTED=1 82 83 for i in $(seq 1 10); do 84 rpcinfo -p localhost | grep -q $PROGNUMNOSVC && break 85 [ "$i" -eq 10 ] && tst_brk TBROK "server not registered" 86 tst_sleep 100ms 87 done 88 fi 89 90 EXPECT_RHOST_PASS $CLIENT $(tst_ipaddr) $PROGNUMNOSVC $CLIENT_EXTRA_OPTS 91} 92 93. rpc_lib.sh 94tst_run 95