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