svn commit: r334473 - user/pho/stress2/misc
Peter Holm
pho at FreeBSD.org
Fri Jun 1 05:48:30 UTC 2018
Author: pho
Date: Fri Jun 1 05:48:28 2018
New Revision: 334473
URL: https://svnweb.freebsd.org/changeset/base/334473
Log:
Added UNIX datagram socket tests.
Sponsored by: Dell EMC Isilon
Added:
user/pho/stress2/misc/datagram.sh (contents, props changed)
user/pho/stress2/misc/datagram2.sh (contents, props changed)
user/pho/stress2/misc/datagram3.sh (contents, props changed)
user/pho/stress2/misc/unix_socket.sh (contents, props changed)
Added: user/pho/stress2/misc/datagram.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/pho/stress2/misc/datagram.sh Fri Jun 1 05:48:28 2018 (r334473)
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2018 Dell EMC Isilon
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# UNIX datagram socket test.
+
+# "panic: mutex unp not owned at ../../../kern/uipc_usrreq.c:879" seen:
+# https://people.freebsd.org/~pho/stress/log/datagram.txt
+
+. ../default.cfg
+
+cd /tmp
+cat > datagram.c <<EOF
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+char *filename = "/tmp/datagram.socket";
+
+int
+main(void) {
+
+ struct sockaddr_un addr;
+ int bytes, sockfd;
+ char buf[1024];
+
+ unlink(filename);
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, filename, 104);
+
+ if ((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+ err(1, "socket");
+
+ if (bind(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "bind");
+
+ if (connect(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "connect");
+
+ bytes = read(sockfd, buf, sizeof(buf));
+
+ return (0);
+}
+EOF
+
+mycc -o datagram -Wall -Wextra -O2 -g datagram.c || exit 1
+rm datagram.c
+
+./datagram &
+sleep 1
+kill $!
+wait
+
+rm -f datagram /tmp/datagram.socket
+exit 0
Added: user/pho/stress2/misc/datagram2.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/pho/stress2/misc/datagram2.sh Fri Jun 1 05:48:28 2018 (r334473)
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2018 Dell EMC Isilon
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# UNIX datagram socket test.
+
+# "panic: mutex unp not owned at ../../../kern/uipc_usrreq.c:879" seen.
+
+. ../default.cfg
+
+cd /tmp
+cat > datagram2.c <<EOF
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+char *filename = "/tmp/datagram2.socket";
+
+int
+main(void) {
+
+ struct message { struct cmsghdr msg_hdr; int fd; } m;
+ struct msghdr mh;
+ struct sockaddr_un addr;
+ ssize_t len;
+ int sockfd;
+
+ unlink(filename);
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, filename, 104);
+
+ if ((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+ err(1, "socket");
+
+ if (bind(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "bind");
+
+ if (connect(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "connect");
+
+ bzero(&mh, sizeof(mh));
+ bzero(&m, sizeof(m));
+ mh.msg_control = &m;
+ mh.msg_controllen = sizeof(m);
+ m.msg_hdr.cmsg_len = sizeof(m);
+ m.msg_hdr.cmsg_level = SOL_SOCKET;
+ m.msg_hdr.cmsg_type = SCM_RIGHTS;
+ m.fd = sockfd;
+ len = sendmsg(sockfd, &mh, 0);
+ if (len < 0)
+ err(1, "sendmsg");
+
+ return (0);
+}
+EOF
+
+cc -o datagram2 -Wall -Wextra -O2 -g datagram2.c || exit 1
+rm -f datagram2.c datagram2.socket
+
+./datagram2
+
+rm datagram2 datagram2.socket
+exit 0
Added: user/pho/stress2/misc/datagram3.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/pho/stress2/misc/datagram3.sh Fri Jun 1 05:48:28 2018 (r334473)
@@ -0,0 +1,107 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2018 Dell EMC Isilon
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# UNIX datagram socket test.
+
+# "panic: mutex unp not owned at ../../../kern/uipc_usrreq.c:879" seen.
+
+. ../default.cfg
+
+cd /tmp
+cat > datagram3.c <<EOF
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+char *filename = "/tmp/datagram3.socket";
+
+int
+main(void) {
+
+ struct message { struct cmsghdr msg_hdr; int fd; } m;
+ struct msghdr mh;
+ struct sockaddr_un addr;
+ ssize_t len;
+ int i, sockfd;
+
+ unlink(filename);
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strncpy(addr.sun_path, filename, 104);
+
+ if ((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) == -1)
+ err(1, "socket");
+
+ if (bind(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "bind");
+
+ if (connect(sockfd, (struct sockaddr *) &addr,
+ sizeof(addr)) == -1)
+ err(1, "connect");
+
+ for (i = 0; i < 32; i++) {
+ bzero(&mh, sizeof(mh));
+ bzero(&m, sizeof(m));
+ mh.msg_control = &m;
+ mh.msg_controllen = sizeof(m);
+ m.msg_hdr.cmsg_len = sizeof(m);
+ m.msg_hdr.cmsg_level = SOL_SOCKET;
+ m.msg_hdr.cmsg_type = SCM_RIGHTS;
+ m.fd = sockfd;
+ len = sendmsg(sockfd, &mh, 0);
+ if (len < 0)
+ err(1, "sendmsg");
+ }
+
+ return (0);
+}
+EOF
+
+mycc -o datagram3 -Wall -Wextra -O2 -g datagram3.c || exit 1
+rm -f datagram3.c datagram3.socket
+
+./datagram3
+
+rm datagram3 datagram3.socket
+exit 0
Added: user/pho/stress2/misc/unix_socket.sh
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/pho/stress2/misc/unix_socket.sh Fri Jun 1 05:48:28 2018 (r334473)
@@ -0,0 +1,162 @@
+#!/bin/sh
+
+#
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2018 Dell EMC Isilon
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# "panic: mutex unp not owned at ../../../kern/uipc_usrreq.c:879" seen:
+# https://people.freebsd.org/~pho/stress/log/mmacy018.txt
+
+. ../default.cfg
+
+cd /tmp
+cat > unix_socket.c <<EOF
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/wait.h>
+
+#include <netinet/in.h>
+
+#include <err.h>
+#include <errno.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#define SOCK_FILE "/tmp/unix_socket.socket"
+
+static int
+client(void) {
+ struct sockaddr_un addr;
+ int fd, len;
+ char buff[8192];
+
+ if ((fd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
+ err(1, "socket");
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strcpy(addr.sun_path, SOCK_FILE);
+ unlink(SOCK_FILE);
+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
+ err(1, "bind");
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strcpy(addr.sun_path, SOCK_FILE);
+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1)
+ err(1, "connect");
+
+ strcpy (buff, "1234567890");
+ if (send(fd, buff, strlen(buff)+1, 0) == -1)
+ err(1, "send");
+ printf ("sent i1234567890\n");
+
+ if ((len = recv(fd, buff, 8192, 0)) < 0)
+ err(1, "recv");
+ printf ("receive %d %s\n", len, buff);
+
+ if (fd >= 0) {
+ close(fd);
+ }
+ unlink (SOCK_FILE);
+
+ return(0);
+}
+
+static int
+server() {
+ struct sockaddr_un addr;
+ struct sockaddr_un from;
+ socklen_t fromlen = sizeof(from);
+ int fd, len, ret;
+ char buff[8192];
+
+ unlink(SOCK_FILE);
+ if ((fd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
+ err(1, "socket");
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ strcpy(addr.sun_path, SOCK_FILE);
+ unlink(SOCK_FILE);
+ if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
+ err(1, "bind");
+
+ alarm(2);
+ while ((len = recvfrom(fd, buff, 8192, 0, (struct sockaddr *)&from,
+ &fromlen)) > 0) {
+ printf ("recvfrom: %s\n", buff);
+ strcpy (buff, "transmit good!");
+ ret = sendto(fd, buff, strlen(buff)+1, 0,
+ (struct sockaddr *)&from, fromlen);
+ if (ret < 0) {
+ perror("sendto");
+ break;
+ }
+ }
+
+ if (fd != -1)
+ close(fd);
+
+ return (0);
+}
+
+int
+main(void)
+{
+ pid_t pid;
+
+ if ((pid = fork()) == -1)
+ err(1, "fork");
+
+ if (pid == 0) {
+ server();
+ _exit(0);
+ }
+ sleep(2);
+ client();
+
+ if (waitpid(pid, NULL, 0) != pid)
+ err(1, "waitpid");
+
+ return (0);
+}
+EOF
+
+cc -o unix_socket -Wall -Wextra -O2 -g unix_socket.c || exit
+rm unix_socket.c
+
+./unix_socket > /dev/null
+
+rm unix_socket
+exit 0
More information about the svn-src-user
mailing list