svn commit: r346953 - user/pho/stress2/misc

Peter Holm pho at FreeBSD.org
Tue Apr 30 08:09:34 UTC 2019


Author: pho
Date: Tue Apr 30 08:09:32 2019
New Revision: 346953
URL: https://svnweb.freebsd.org/changeset/base/346953

Log:
  Added two multicast test cases.
  
  Sponsored by:	Dell EMC Isilon

Added:
  user/pho/stress2/misc/multicast.sh   (contents, props changed)
  user/pho/stress2/misc/multicast2.sh   (contents, props changed)

Added: user/pho/stress2/misc/multicast.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/multicast.sh	Tue Apr 30 08:09:32 2019	(r346953)
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+# Multicast test example by Mark Claypool, claypool at cs.wpi.edu
+# https://web.cs.wpi.edu/~claypool/courses/4514-B99/samples/multicast.c
+
+# Kernel page fault seen with WiP branch:
+# https://people.freebsd.org/~pho/stress/log/kip036.txt
+
+# $FreeBSD$
+
+. ../default.cfg
+
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/multicast.c
+mycc -o multicast -Wall -Wextra -O0 -g multicast.c || exit 1
+rm -f multicast.c
+cd $odir
+
+cd $dir
+(
+	timeout -k 1s 20s ./multicast &
+	sleep 1
+	timeout -k 1s 25s ./multicast 1
+) > /dev/null
+wait
+
+rm -f $dir/multicast
+exit $s
+EOF
+/*
+multicast.c
+
+The following program sends or receives multicast packets. If invoked
+with one argument, it sends a packet containing the current time to an
+arbitrarily chosen multicast group and UDP port. If invoked with no
+arguments, it receives and prints these packets. Start it as a sender on
+just one host and as a receiver on all the other hosts
+
+*/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <string.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define EXAMPLE_PORT 6000
+#define EXAMPLE_GROUP "239.0.0.1"
+
+int
+main(int argc, char *argv[] __unused)
+{
+	struct ip_mreq mreq;
+	struct sockaddr_in addr;
+	socklen_t addrlen;
+	int cnt, sock;
+	char message[50];
+
+	/* set up socket */
+	sock = socket(AF_INET, SOCK_DGRAM, 0);
+	if (sock < 0) {
+		perror("socket");
+		exit(1);
+	}
+	bzero((char *)&addr, sizeof(addr));
+	addr.sin_family = AF_INET;
+	addr.sin_addr.s_addr = htonl(INADDR_ANY);
+	addr.sin_port = htons(EXAMPLE_PORT);
+	addrlen = sizeof(addr);
+
+	if (argc > 1) {
+		/* send */
+		addr.sin_addr.s_addr = inet_addr(EXAMPLE_GROUP);
+		while (1) {
+			time_t t = time(0);
+			sprintf(message, "time is %-24.24s", ctime(&t));
+			printf("sending: %s\n", message);
+			cnt = sendto(sock, message, sizeof(message), 0,
+					(struct sockaddr *) &addr, addrlen);
+			if (cnt < 0) {
+				perror("sendto");
+				exit(1);
+			}
+			sleep(5);
+		}
+	} else {
+
+		/* receive */
+		if (bind(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
+			perror("bind");
+			exit(1);
+		}
+		mreq.imr_multiaddr.s_addr = inet_addr(EXAMPLE_GROUP);
+		mreq.imr_interface.s_addr = htonl(INADDR_ANY);
+		if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
+					&mreq, sizeof(mreq)) < 0) {
+			perror("setsockopt mreq");
+			exit(1);
+		}
+		while (1) {
+			cnt = recvfrom(sock, message, sizeof(message), 0,
+					(struct sockaddr *) &addr, &addrlen);
+			if (cnt < 0) {
+				perror("recvfrom");
+				exit(1);
+			} else if (cnt == 0) {
+				break;
+			}
+			printf("%s: message = \"%s\"\n", inet_ntoa(addr.sin_addr), message);
+		}
+	}
+}

Added: user/pho/stress2/misc/multicast2.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/pho/stress2/misc/multicast2.sh	Tue Apr 30 08:09:32 2019	(r346953)
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# D19886 Fix numerous refcount bugs in multicast
+
+# Page fault in in6_pcbpurgeif0+0xc8 seen.
+# https://people.freebsd.org/~pho/stress/log/mmacy035.txt
+# Test scenario by mmacy
+
+# $FreeBSD$
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+[ -x /usr/local/bin/mDNSResponderPosix ] ||
+    { echo "mDNSResponder not installed"; exit 0; }
+
+(cd ../testcases/swap; ./swap -t 2m -i 50 -v -h -l 100) &
+sleep 2
+
+service mdnsd onestart
+ifconfig vtnet0 delete 2>/dev/null
+ifconfig epair create
+ifconfig epair0a 0/24 up
+ifconfig epair0a destroy
+service mdnsd onestop
+
+while pkill swap; do :; done
+wait


More information about the svn-src-user mailing list