Home | History | Annotate | Download | only in mc_commo
      1 #!/bin/sh
      2 # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved.
      3 # Copyright (c) International Business Machines  Corp., 2000
      4 #
      5 # This program is free software; you can redistribute it and/or
      6 # modify it under the terms of the GNU General Public License as
      7 # published by the Free Software Foundation; either version 2 of
      8 # the License, or (at your option) any later version.
      9 #
     10 # This program is distributed in the hope that it would be useful,
     11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 # GNU General Public License for more details.
     14 #
     15 # You should have received a copy of the GNU General Public License
     16 # along with this program; if not, write the Free Software Foundation,
     17 # Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     18 #
     19 # TEST DESCRIPTION:
     20 #     To verify that IP Multicast can be used to send UDP datagrams
     21 #     between two or more nodes on the same subnetwork using
     22 #     a specific IP Multicast group and a specific port address.
     23 #
     24 # Authors:
     25 #     Robbie Williamson (robbiew (at] us.ibm.com)
     26 #     Michael Reed mreedltp (at] vnet.ibm.com
     27 
     28 TTL=10
     29 OUTFILE=mc_commo_out
     30 
     31 TCID=mc_commo
     32 TST_TOTAL=2
     33 
     34 . test_net.sh
     35 
     36 do_setup()
     37 {
     38 	tst_check_cmds netstat pgrep
     39 
     40 	OCTET=$(ps -ewf | grep [m]c_commo | wc -l | awk '{print $1}')
     41 	GROUP_ADDR=224.0.0.$OCTET
     42 	PORT=$(tst_get_unused_port ipv4 dgram)
     43 	tst_tmpdir
     44 }
     45 
     46 do_test()
     47 {
     48 	# Run setsockopt/getsockopt test
     49 	# Start up the recv on local host
     50 	tst_resm TINFO "Start mc_recv $GROUP_ADDR $(tst_ipaddr) $PORT"
     51 	mc_recv $GROUP_ADDR $(tst_ipaddr) $PORT >> $OUTFILE &
     52 	SERVER_PID=$!
     53 	sleep 5
     54 	pgrep -x mc_recv > /dev/null || \
     55 		tst_brkm TFAIL "Could NOT start mc_recv on $(tst_ipaddr)"
     56 
     57 	grep -q "cannot join group" $OUTFILE && \
     58 		tst_brkm TFAIL "Membership NOT set"
     59 
     60 	netstat -ng | grep -q $GROUP_ADDR || \
     61 		tst_brkm TFAIL "membership not set for $GROUP_ADDR"
     62 
     63 	tst_resm TINFO "Start on $RHOST mc_send $GROUP_ADDR" \
     64 	               "$(tst_ipaddr rhost) $PORT $TTL"
     65 
     66 	tst_rhost_run -b -c "mc_send $GROUP_ADDR $(tst_ipaddr rhost) $PORT $TTL"
     67 	sleep 10
     68 	tst_rhost_run -s -c "pgrep -x mc_send > /dev/null"
     69 
     70 	tst_resm TINFO "Waiting for 100 sec.! Do not interrupt."
     71 	sleep 100  #wait until datagrams are received in $STATUS
     72 
     73 	#test if datagrams has been sent
     74 	grep -q "$(tst_ipaddr rhost) [0-9] [0-9]" $OUTFILE || \
     75 		tst_brkm TFAIL "NO Datagrams received from $RHOST"
     76 
     77 	tst_resm TPASS "Test Successful"
     78 }
     79 
     80 do_cleanup()
     81 {
     82 	ps -p $SERVER_PID > /dev/null 2>&1
     83 	if [ $? -eq 0 ]; then
     84 		kill -9 $SERVER_PID
     85 	fi
     86 
     87 	tst_rmdir
     88 }
     89 
     90 do_setup
     91 TST_CLEANUP=do_cleanup
     92 
     93 for i in $(seq 1 $TST_TOTAL); do
     94 	do_test
     95 done
     96 
     97 tst_exit
     98