Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/bouyer-socketcan]: src/tests/net/can Factor out reading from a can socke...
details: https://anonhg.NetBSD.org/src/rev/d6d3dfd21081
branches: bouyer-socketcan
changeset: 820820:d6d3dfd21081
user: bouyer <bouyer%NetBSD.org@localhost>
date: Sat Feb 04 22:26:16 2017 +0000
description:
Factor out reading from a can socket, and move to a helper file.
diffstat:
tests/net/can/Makefile | 3 +-
tests/net/can/h_canutils.c | 161 +++++++++++++++++++++++++++++++++++++++++++
tests/net/can/h_canutils.h | 36 +++++++++
tests/net/can/t_can.c | 165 +++++++-------------------------------------
4 files changed, 226 insertions(+), 139 deletions(-)
diffs (truncated from 518 to 300 lines):
diff -r 4b0758b4a31e -r d6d3dfd21081 tests/net/can/Makefile
--- a/tests/net/can/Makefile Mon Jan 30 15:56:45 2017 +0000
+++ b/tests/net/can/Makefile Sat Feb 04 22:26:16 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.1.2.1 2017/01/15 20:29:01 bouyer Exp $
+# $NetBSD: Makefile,v 1.1.2.2 2017/02/04 22:26:16 bouyer Exp $
#
.include <bsd.own.mk>
@@ -6,6 +6,7 @@
TESTSDIR= ${TESTSBASE}/net/can
TESTS_C= t_can
+SRCS.t_can= t_can.c h_canutils.c
# XXX we don't use INET here, but we need rumpnet_netinet anyway:
# common code in if.c is compiled with -DINET and will dereference ip_pktq,
diff -r 4b0758b4a31e -r d6d3dfd21081 tests/net/can/h_canutils.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/net/can/h_canutils.c Sat Feb 04 22:26:16 2017 +0000
@@ -0,0 +1,161 @@
+/* $NetBSD: h_canutils.c,v 1.1.2.1 2017/02/04 22:26:16 bouyer Exp $ */
+
+/*-
+ * Copyright (c) 2017 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Manuel Bouyer
+ *
+ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$NetBSD: h_canutils.c,v 1.1.2.1 2017/02/04 22:26:16 bouyer Exp $");
+#endif /* not lint */
+
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+#include <sys/sockio.h>
+#include <sys/param.h>
+
+#include <atf-c.h>
+#include <assert.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <net/if.h>
+#include <netcan/can.h>
+
+#include <rump/rump.h>
+#include <rump/rump_syscalls.h>
+
+#include "h_macros.h"
+#include "h_canutils.h"
+
+void
+cancfg_rump_createif(const char *ifname)
+{
+ int s, rv;
+ struct ifreq ifr;
+
+ s = -1;
+ if ((s = rump_sys_socket(AF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
+ atf_tc_fail_errno("if config socket");
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+
+ if ((rv = rump_sys_ioctl(s, SIOCIFCREATE, &ifr)) < 0) {
+ atf_tc_fail_errno("if config create");
+ }
+
+ memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+
+ if ((rv = rump_sys_ioctl(s, SIOCGIFFLAGS, &ifr)) < 0) {
+ atf_tc_fail_errno("if config get flags");
+ }
+
+ ifr.ifr_flags |= IFF_UP;
+ if ((rv = rump_sys_ioctl(s, SIOCSIFFLAGS, &ifr)) < 0) {
+ atf_tc_fail_errno("if config set flags");
+ }
+}
+
+int
+can_recvfrom(int s, struct can_frame *cf, int *len, struct sockaddr_can *sa)
+{
+ int salen;
+ fd_set rfds;
+ struct timeval tmout;
+ int rv;
+
+ memset(cf, 0, sizeof(struct can_frame));
+ FD_ZERO(&rfds);
+ FD_SET(s, &rfds);
+ /* we should receive no message; wait for 2 seconds */
+ tmout.tv_sec = 2;
+ tmout.tv_usec = 0;
+ rv = rump_sys_select(s + 1, &rfds, NULL, NULL, &tmout);
+ switch(rv) {
+ case -1:
+ atf_tc_fail_errno("select");
+ /* NOTREACHED */
+ case 0:
+ /* timeout */
+ errno = EWOULDBLOCK;
+ return -1;
+ default: break;
+ }
+ ATF_CHECK_MSG(FD_ISSET(s, &rfds), "select returns but s not in set");
+ salen = sizeof(struct sockaddr_can);
+ if (( *len = rump_sys_recvfrom(s, cf, sizeof(struct can_frame),
+ 0, (struct sockaddr *)sa, &salen)) < 0) {
+ atf_tc_fail_errno("recvfrom");
+ }
+ ATF_CHECK_MSG(rv > 0, "short read on socket");
+ ATF_CHECK_MSG(sa->can_family == AF_CAN,
+ "recvfrom provided wrong %d family", sa->can_family);
+ ATF_CHECK_MSG(salen == sizeof(struct sockaddr_can),
+ "recvfrom provided wrong size %d (!= %d)", salen, sizeof(sa));
+ return 0;
+}
+
+int
+can_read(int s, struct can_frame *cf, int *len)
+{
+ fd_set rfds;
+ struct timeval tmout;
+ int rv;
+
+ memset(cf, 0, sizeof(struct can_frame));
+ FD_ZERO(&rfds);
+ FD_SET(s, &rfds);
+ /* we should receive no message; wait for 2 seconds */
+ tmout.tv_sec = 2;
+ tmout.tv_usec = 0;
+ rv = rump_sys_select(s + 1, &rfds, NULL, NULL, &tmout);
+ switch(rv) {
+ case -1:
+ atf_tc_fail_errno("select");
+ /* NOTREACHED */
+ case 0:
+ /* timeout */
+ errno = EWOULDBLOCK;
+ return -1;
+ default: break;
+ }
+ ATF_CHECK_MSG(FD_ISSET(s, &rfds), "select returns but s not in set");
+ if (( *len = rump_sys_read(s, cf, sizeof(struct can_frame))) < 0) {
+ atf_tc_fail_errno("read");
+ }
+ ATF_CHECK_MSG(rv > 0, "short read on socket");
+ return 0;
+}
diff -r 4b0758b4a31e -r d6d3dfd21081 tests/net/can/h_canutils.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/net/can/h_canutils.h Sat Feb 04 22:26:16 2017 +0000
@@ -0,0 +1,36 @@
+/* $NetBSD: h_canutils.h,v 1.1.2.1 2017/02/04 22:26:16 bouyer Exp $ */
+
+/*-
+ * Copyright (c) 2017 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Manuel Bouyer
+ *
+ * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ */
+
+void cancfg_rump_createif(const char *);
+int can_recvfrom(int, struct can_frame *, int *, struct sockaddr_can *);
+int can_read(int, struct can_frame *, int *);
+
diff -r 4b0758b4a31e -r d6d3dfd21081 tests/net/can/t_can.c
--- a/tests/net/can/t_can.c Mon Jan 30 15:56:45 2017 +0000
+++ b/tests/net/can/t_can.c Sat Feb 04 22:26:16 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: t_can.c,v 1.1.2.2 2017/01/16 18:04:27 bouyer Exp $ */
+/* $NetBSD: t_can.c,v 1.1.2.3 2017/02/04 22:26:16 bouyer Exp $ */
/*-
* Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -32,12 +32,11 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: t_can.c,v 1.1.2.2 2017/01/16 18:04:27 bouyer Exp $");
+__RCSID("$NetBSD: t_can.c,v 1.1.2.3 2017/02/04 22:26:16 bouyer Exp $");
#endif /* not lint */
#include <sys/types.h>
#include <sys/resource.h>
-#include <sys/sysctl.h>
#include <sys/wait.h>
#include <sys/sockio.h>
#include <sys/param.h>
@@ -49,7 +48,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <signal.h>
#include <net/if.h>
#include <netcan/can.h>
@@ -58,37 +56,7 @@
#include <rump/rump_syscalls.h>
#include "h_macros.h"
-
-static void
-cancfg_rump_createif(const char *ifname)
-{
- int s, rv;
- struct ifreq ifr;
-
- s = -1;
- if ((s = rump_sys_socket(AF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
- atf_tc_fail_errno("if config socket");
- }
-
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
-
- if ((rv = rump_sys_ioctl(s, SIOCIFCREATE, &ifr)) < 0) {
- atf_tc_fail_errno("if config create");
- }
-
- memset(&ifr, 0, sizeof(ifr));
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
-
- if ((rv = rump_sys_ioctl(s, SIOCGIFFLAGS, &ifr)) < 0) {
- atf_tc_fail_errno("if config get flags");
- }
-
- ifr.ifr_flags |= IFF_UP;
- if ((rv = rump_sys_ioctl(s, SIOCSIFFLAGS, &ifr)) < 0) {
- atf_tc_fail_errno("if config set flags");
- }
-}
+#include "h_canutils.h"
ATF_TC(canlocreate);
ATF_TC_HEAD(canlocreate, tc)
@@ -197,38 +165,12 @@
}
/* now try to read */
-
- memset(&cf_receive, 0, sizeof(cf_receive));
- FD_ZERO(&rfds);
- FD_SET(s, &rfds);
Home |
Main Index |
Thread Index |
Old Index