summaryrefslogtreecommitdiff
path: root/tools/regression/geom/geom.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/regression/geom/geom.c')
-rw-r--r--tools/regression/geom/geom.c163
1 files changed, 163 insertions, 0 deletions
diff --git a/tools/regression/geom/geom.c b/tools/regression/geom/geom.c
new file mode 100644
index 0000000000000..065612b16ad92
--- /dev/null
+++ b/tools/regression/geom/geom.c
@@ -0,0 +1,163 @@
+/*-
+ * Copyright (c) 2002 Poul-Henning Kamp
+ * Copyright (c) 2002 Networks Associates Technology, Inc.
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by Poul-Henning Kamp
+ * and NAI Labs, the Security Research Division of Network Associates, Inc.
+ * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
+ * DARPA CHATS research program.
+ *
+ * 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.
+ * 3. The names of the authors may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * 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$
+ */
+
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <err.h>
+#include <sys/errno.h>
+#include <sys/time.h>
+#include <sys/sbuf.h>
+#include <geom/geom.h>
+
+void
+conff(char *file)
+{
+ FILE *f;
+ char *s;
+ struct sbuf *sb;
+
+ printf(">> conf to %s\n", file);
+ asprintf(&s, "_%s.conf", file);
+ f = fopen(s, "w");
+ if (f == NULL)
+ err(1, s);
+ sb = g_conf();
+ fputs(sbuf_data(sb), f);
+ fclose(f);
+ free(s);
+}
+
+
+
+
+static int
+thread_up(void *ptr)
+{
+ struct thread *tp = ptr;
+
+ printf("Running %s\n", tp->name);
+ for (;;) {
+ g_io_schedule_up(tp);
+ tsleep(&g_wait_up, 0, "up", 0);
+ }
+}
+
+static int
+thread_down(void *ptr)
+{
+ struct thread *tp = ptr;
+ printf("Running %s\n", tp->name);
+ for (;;) {
+ g_io_schedule_down(tp);
+ tsleep(&g_wait_down, 0, "down", 0);
+ }
+}
+
+static int
+thread_event(void *ptr)
+{
+ struct thread *tp = ptr;
+ /* nice(5); */
+ printf("Running %s\n", tp->name);
+ for (;;) {
+ usleep(100000);
+ g_run_events(tp);
+ tsleep(&g_wait_event, 0, "events", 0);
+ }
+}
+
+
+int
+main(int argc __unused, char **argv __unused)
+{
+ int ch;
+
+ while ((ch = getopt(argc, argv, "bt")) != -1) {
+ switch (ch) {
+ case 'b':
+ g_debugflags |= G_T_BIO;
+ break;
+ case 't':
+ g_debugflags |= G_T_TOPOLOGY;
+ break;
+ }
+ }
+
+
+ setbuf(stdout, NULL);
+ printf("Sizeof g_method = %d\n", sizeof(struct g_method));
+ printf("Sizeof g_geom = %d\n", sizeof(struct g_geom));
+ printf("Sizeof g_consumer = %d\n", sizeof(struct g_consumer));
+ printf("Sizeof g_provider = %d\n", sizeof(struct g_provider));
+ printf("Sizeof g_event = %d\n", sizeof(struct g_event));
+ g_init();
+ new_thread(thread_up, "UP");
+ new_thread(thread_down, "DOWN");
+ new_thread(thread_event, "EVENT");
+ new_thread(thread_sim, "SIM");
+
+ while (1) {
+ sleep (1);
+ secrethandshake();
+ }
+}
+
+void
+sdumpf(char *file)
+{
+ FILE *f;
+ char *s;
+ struct sbuf *sb;
+
+ printf(">> dump to %s\n", file);
+ asprintf(&s, "_%s.dot", file);
+ f = fopen(s, "w");
+ if (f == NULL)
+ err(1, s);
+ sb = g_confdot();
+ fprintf(f, "%s", sbuf_data(sb));
+ fclose(f);
+ free(s);
+ asprintf(&s, "dot -Tps _%s.dot > _%s.ps", file, file);
+ system(s);
+ free(s);
+}
+