diff options
author | Marco S Hyman <marc@cvs.openbsd.org> | 2001-11-10 02:44:49 +0000 |
---|---|---|
committer | Marco S Hyman <marc@cvs.openbsd.org> | 2001-11-10 02:44:49 +0000 |
commit | 0f10c36e345e60892acd4f82d1d384d1e6a91266 (patch) | |
tree | 05c48196da4849060c901889fbc29e921681d2ef | |
parent | e291e509450080b4cfcd6955de99e744b20f2461 (diff) |
Add a pcap/pthread test as it was reported that using
libpcap blocked all threads. That no longer seems to be a problem
as this test passes using the latest threads lib.
-rw-r--r-- | regress/lib/libc_r/Makefile | 4 | ||||
-rw-r--r-- | regress/lib/libc_r/pcap/Makefile | 8 | ||||
-rw-r--r-- | regress/lib/libc_r/pcap/pcap.c | 70 | ||||
-rw-r--r-- | regress/lib/libpthread/Makefile | 4 | ||||
-rw-r--r-- | regress/lib/libpthread/pcap/Makefile | 8 | ||||
-rw-r--r-- | regress/lib/libpthread/pcap/pcap.c | 70 |
6 files changed, 160 insertions, 4 deletions
diff --git a/regress/lib/libc_r/Makefile b/regress/lib/libc_r/Makefile index a6925e33452..67b36876805 100644 --- a/regress/lib/libc_r/Makefile +++ b/regress/lib/libc_r/Makefile @@ -1,6 +1,6 @@ -# $OpenBSD: Makefile,v 1.4 2001/11/09 00:13:31 marc Exp $ +# $OpenBSD: Makefile,v 1.5 2001/11/10 02:44:48 marc Exp $ -SUBDIR= cancel close cwd execve fork group netdb poll \ +SUBDIR= cancel close cwd execve fork group netdb pcap poll \ preemption pthread_cond_timedwait pthread_create \ pthread_join pthread_mutex readdir select setjmp signal \ sigsuspend sigwait sleep socket stdarg stdio switch system diff --git a/regress/lib/libc_r/pcap/Makefile b/regress/lib/libc_r/pcap/Makefile new file mode 100644 index 00000000000..cfc551c9927 --- /dev/null +++ b/regress/lib/libc_r/pcap/Makefile @@ -0,0 +1,8 @@ +# $OpenBSD: Makefile,v 1.1 2001/11/10 02:44:48 marc Exp $ + +PROG= pcap +SRCS= pcap.c + +LDADD+= -lpcap + +.include <bsd.prog.mk> diff --git a/regress/lib/libc_r/pcap/pcap.c b/regress/lib/libc_r/pcap/pcap.c new file mode 100644 index 00000000000..c22ed538ddb --- /dev/null +++ b/regress/lib/libc_r/pcap/pcap.c @@ -0,0 +1,70 @@ +/* $OpenBSD: pcap.c,v 1.1 2001/11/10 02:44:48 marc Exp $ */ +/* + * Copyright (c) 2001 Marco S. Hyman + * + * Permission to copy all or part of this material with or without + * modification for any purpose is granted provided that the above + * copyright notice and this paragraph are duplicated in all copies. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include <pcap.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +#include "test.h" + +#define LOOPBACK_IF "lo0" +#define SNAPLEN 96 +#define NO_PROMISC 0 +#define PKTCNT 3 + +volatile int packet_count = 0; + +void +packet_ignore(u_char *tag, const struct pcap_pkthdr *hdr, const u_char *data) +{ + packet_count += 1; +} + +void * +pcap_thread(void *arg) +{ + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *handle; + + SET_NAME("pcap_thread"); + handle = pcap_open_live(LOOPBACK_IF, SNAPLEN, NO_PROMISC, 0, errbuf); + if (!handle) + PANIC("You may need to run this test as UID 0 (root)"); + ASSERT(pcap_loop(handle, PKTCNT, packet_ignore, 0) != -1); + return 0; +} + +void * +ping_thread(void *arg) +{ + SET_NAME("ping_thread"); + ASSERT(system("ping -c 3 127.0.0.1") == 0); + sleep(2); + ASSERT(packet_count == 3); + SUCCEED; +} + +int +main(int argc, char **argv) +{ + pthread_t pcap; + pthread_t ping; + + CHECKr(pthread_create(&pcap, NULL, pcap_thread, NULL)); + sleep(1); + CHECKr(pthread_create(&ping, NULL, ping_thread, NULL)); + while (1) + ; + PANIC("while"); +} diff --git a/regress/lib/libpthread/Makefile b/regress/lib/libpthread/Makefile index a6925e33452..67b36876805 100644 --- a/regress/lib/libpthread/Makefile +++ b/regress/lib/libpthread/Makefile @@ -1,6 +1,6 @@ -# $OpenBSD: Makefile,v 1.4 2001/11/09 00:13:31 marc Exp $ +# $OpenBSD: Makefile,v 1.5 2001/11/10 02:44:48 marc Exp $ -SUBDIR= cancel close cwd execve fork group netdb poll \ +SUBDIR= cancel close cwd execve fork group netdb pcap poll \ preemption pthread_cond_timedwait pthread_create \ pthread_join pthread_mutex readdir select setjmp signal \ sigsuspend sigwait sleep socket stdarg stdio switch system diff --git a/regress/lib/libpthread/pcap/Makefile b/regress/lib/libpthread/pcap/Makefile new file mode 100644 index 00000000000..cfc551c9927 --- /dev/null +++ b/regress/lib/libpthread/pcap/Makefile @@ -0,0 +1,8 @@ +# $OpenBSD: Makefile,v 1.1 2001/11/10 02:44:48 marc Exp $ + +PROG= pcap +SRCS= pcap.c + +LDADD+= -lpcap + +.include <bsd.prog.mk> diff --git a/regress/lib/libpthread/pcap/pcap.c b/regress/lib/libpthread/pcap/pcap.c new file mode 100644 index 00000000000..c22ed538ddb --- /dev/null +++ b/regress/lib/libpthread/pcap/pcap.c @@ -0,0 +1,70 @@ +/* $OpenBSD: pcap.c,v 1.1 2001/11/10 02:44:48 marc Exp $ */ +/* + * Copyright (c) 2001 Marco S. Hyman + * + * Permission to copy all or part of this material with or without + * modification for any purpose is granted provided that the above + * copyright notice and this paragraph are duplicated in all copies. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include <pcap.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +#include "test.h" + +#define LOOPBACK_IF "lo0" +#define SNAPLEN 96 +#define NO_PROMISC 0 +#define PKTCNT 3 + +volatile int packet_count = 0; + +void +packet_ignore(u_char *tag, const struct pcap_pkthdr *hdr, const u_char *data) +{ + packet_count += 1; +} + +void * +pcap_thread(void *arg) +{ + char errbuf[PCAP_ERRBUF_SIZE]; + pcap_t *handle; + + SET_NAME("pcap_thread"); + handle = pcap_open_live(LOOPBACK_IF, SNAPLEN, NO_PROMISC, 0, errbuf); + if (!handle) + PANIC("You may need to run this test as UID 0 (root)"); + ASSERT(pcap_loop(handle, PKTCNT, packet_ignore, 0) != -1); + return 0; +} + +void * +ping_thread(void *arg) +{ + SET_NAME("ping_thread"); + ASSERT(system("ping -c 3 127.0.0.1") == 0); + sleep(2); + ASSERT(packet_count == 3); + SUCCEED; +} + +int +main(int argc, char **argv) +{ + pthread_t pcap; + pthread_t ping; + + CHECKr(pthread_create(&pcap, NULL, pcap_thread, NULL)); + sleep(1); + CHECKr(pthread_create(&ping, NULL, ping_thread, NULL)); + while (1) + ; + PANIC("while"); +} |