| #!/bin/sh |
| # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. |
| # Copyright (c) International Business Machines Corp., 2000 |
| # |
| # This program is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU General Public License as |
| # published by the Free Software Foundation; either version 2 of |
| # the License, or (at your option) any later version. |
| # |
| # This program is distributed in the hope that it would be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write the Free Software Foundation, |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| # |
| # TEST DESCRIPTION: |
| # To verify that IP Multicast can be used to send UDP datagrams |
| # between two or more nodes on the same subnetwork using |
| # a specific IP Multicast group and a specific port address. |
| # |
| # Authors: |
| # Robbie Williamson (robbiew@us.ibm.com) |
| # Michael Reed mreedltp@vnet.ibm.com |
| |
| TTL=10 |
| OUTFILE=mc_commo_out |
| |
| TCID=mc_commo |
| TST_TOTAL=2 |
| |
| TST_USE_LEGACY_API=1 |
| . tst_net.sh |
| |
| do_setup() |
| { |
| tst_test_cmds netstat pgrep |
| |
| OCTET=$(ps -ewf | grep [m]c_commo | wc -l | awk '{print $1}') |
| GROUP_ADDR=224.0.0.$OCTET |
| PORT=$(tst_get_unused_port ipv4 dgram) |
| tst_tmpdir |
| } |
| |
| do_test() |
| { |
| # Run setsockopt/getsockopt test |
| # Start up the recv on local host |
| tst_resm TINFO "Start mc_recv $GROUP_ADDR $(tst_ipaddr) $PORT" |
| mc_recv $GROUP_ADDR $(tst_ipaddr) $PORT >> $OUTFILE & |
| SERVER_PID=$! |
| sleep 5 |
| pgrep -x mc_recv > /dev/null || \ |
| tst_brkm TFAIL "Could NOT start mc_recv on $(tst_ipaddr)" |
| |
| grep -q "cannot join group" $OUTFILE && \ |
| tst_brkm TFAIL "Membership NOT set" |
| |
| netstat -ng | grep -q $GROUP_ADDR || \ |
| tst_brkm TFAIL "membership not set for $GROUP_ADDR" |
| |
| tst_resm TINFO "Start on $RHOST mc_send $GROUP_ADDR" \ |
| "$(tst_ipaddr rhost) $PORT $TTL" |
| |
| tst_rhost_run -b -c "mc_send $GROUP_ADDR $(tst_ipaddr rhost) $PORT $TTL" |
| sleep 10 |
| tst_rhost_run -s -c "pgrep -x mc_send > /dev/null" |
| |
| tst_resm TINFO "Waiting for 100 sec.! Do not interrupt." |
| sleep 100 #wait until datagrams are received in $STATUS |
| |
| #test if datagrams has been sent |
| grep -q "$(tst_ipaddr rhost) [0-9] [0-9]" $OUTFILE || \ |
| tst_brkm TFAIL "NO Datagrams received from $RHOST" |
| |
| tst_resm TPASS "Test Successful" |
| } |
| |
| do_cleanup() |
| { |
| ps -p $SERVER_PID > /dev/null 2>&1 |
| if [ $? -eq 0 ]; then |
| kill -9 $SERVER_PID |
| fi |
| |
| tst_rmdir |
| } |
| |
| do_setup |
| TST_CLEANUP=do_cleanup |
| |
| for i in $(seq 1 $TST_TOTAL); do |
| do_test |
| done |
| |
| tst_exit |