summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
Diffstat (limited to 'util')
-rw-r--r--util/m5/Makefile26
-rw-r--r--util/m5/m5.c186
-rw-r--r--util/m5/m5op.h45
-rw-r--r--util/m5/m5op.s121
-rw-r--r--util/tap/tap.cc22
5 files changed, 391 insertions, 9 deletions
diff --git a/util/m5/Makefile b/util/m5/Makefile
new file mode 100644
index 000000000..6e4ad31a3
--- /dev/null
+++ b/util/m5/Makefile
@@ -0,0 +1,26 @@
+AS=as
+CC=cc
+LD=cc
+
+CCFLAGS=-O2
+#LDFLAGS=-non_shared
+
+all: m5
+
+m5: m5op.o m5.o
+ $(LD) $(LDFLAGS) -o $@ $>
+ strip $@
+
+clean:
+ @rm -f m5 *.o *.d *~ .#*
+
+.SUFFIXES:
+.SUFFIXES:.o .c .s
+
+# C Compilation
+.c.o:
+ $(CC) $(CCFLAGS) -o $@ -c $<
+
+# Assembly
+.s.o:
+ $(AS) $(ASFLAGS) -o $@ $<
diff --git a/util/m5/m5.c b/util/m5/m5.c
new file mode 100644
index 000000000..1271bc9e1
--- /dev/null
+++ b/util/m5/m5.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2003 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * 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;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
+ * OWNER 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 <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "m5op.h"
+
+char *progname;
+
+void
+usage()
+{
+ printf("usage: m5 ivlb <interval>\n"
+ " m5 ivle <interval>\n"
+ " m5 initparam\n"
+ " m5 sw99param\n"
+ " m5 exit [delay]\n"
+ " m5 resetstats [delay [period]]\n"
+ " m5 dumpstats [delay [period]]\n"
+ " m5 dumpresetstats [delay [period]]\n"
+ " m5 checkpoint [delay [period]]\n"
+ "\n"
+ "All times in nanoseconds!\n");
+ exit(1);
+}
+
+#define COMPARE(X) (strcmp(X, command) == 0)
+
+int
+main(int argc, char *argv[])
+{
+ char *command;
+ uint64_t param;
+ uint64_t arg1 = 0;
+ uint64_t arg2 = 0;
+
+ progname = argv[0];
+ if (argc < 2)
+ usage();
+
+ command = argv[1];
+
+ if (COMPARE("ivlb")) {
+ if (argc != 3)
+ usage();
+
+ arg1 = strtoul(argv[2], NULL, 0);
+ ivlb(arg1);
+ return 0;
+ }
+
+ if (COMPARE("ivle")) {
+ if (argc != 3)
+ usage();
+
+ arg1 = strtoul(argv[2], NULL, 0);
+ ivle(arg1);
+ return 0;
+ }
+
+ if (COMPARE("initparam")) {
+ if (argc != 2)
+ usage();
+
+ printf("%ld", initparam());
+ return 0;
+ }
+
+ if (COMPARE("sw99param")) {
+ if (argc != 2)
+ usage();
+
+ param = initparam();
+ // run-time, rampup-time, rampdown-time, warmup-time, connections
+ printf("%d %d %d %d %d", (param >> 48) & 0xfff,
+ (param >> 36) & 0xfff, (param >> 24) & 0xfff,
+ (param >> 12) & 0xfff, (param >> 0) & 0xfff);
+
+ return 0;
+ }
+
+ if (COMPARE("exit")) {
+ switch (argc) {
+ case 3:
+ arg1 = strtoul(argv[2], NULL, 0);
+ case 2:
+ m5exit(arg1);
+ return 0;
+
+ default:
+ usage();
+ }
+ }
+
+ if (COMPARE("resetstats")) {
+ switch (argc) {
+ case 4:
+ arg2 = strtoul(argv[3], NULL, 0);
+ case 3:
+ arg1 = strtoul(argv[2], NULL, 0);
+ case 2:
+ reset_stats(arg1, arg2);
+ return 0;
+
+ default:
+ usage();
+ }
+ }
+
+ if (COMPARE("dumpstats")) {
+ switch (argc) {
+ case 4:
+ arg2 = strtoul(argv[3], NULL, 0);
+ case 3:
+ arg1 = strtoul(argv[2], NULL, 0);
+ case 2:
+ dump_stats(arg1, arg2);
+ return 0;
+
+ default:
+ usage();
+ }
+ }
+
+ if (COMPARE("dumpresetstats")) {
+ switch (argc) {
+ case 4:
+ arg2 = strtoul(argv[3], NULL, 0);
+ case 3:
+ arg1 = strtoul(argv[2], NULL, 0);
+ case 2:
+ dumpreset_stats(arg1, arg2);
+ return 0;
+
+ default:
+ usage();
+ }
+ }
+
+ if (COMPARE("checkpoint")) {
+ switch (argc) {
+ case 4:
+ arg2 = strtoul(argv[3], NULL, 0);
+ case 3:
+ arg1 = strtoul(argv[2], NULL, 0);
+ case 2:
+ checkpoint(arg1, arg2);
+ return 0;
+
+ default:
+ usage();
+ }
+
+ return 0;
+ }
+
+ usage();
+}
diff --git a/util/m5/m5op.h b/util/m5/m5op.h
new file mode 100644
index 000000000..266460ce9
--- /dev/null
+++ b/util/m5/m5op.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2003 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * 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;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
+ * OWNER 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.
+ */
+
+#ifndef __M5OP_H__
+#define __M5OP_H__
+
+#include <inttypes.h>
+
+void arm(uint64_t address);
+void quiesce();
+void ivlb(uint64_t interval);
+void ivle(uint64_t interval);
+void m5exit(uint64_t ns_delay);
+uint64_t initparam();
+void checkpoint(uint64_t ns_delay, uint64_t ns_period);
+void reset_stats(uint64_t ns_delay, uint64_t ns_period);
+void dump_stats(uint64_t ns_delay, uint64_t ns_period);
+void dumpreset_stats(uint64_t ns_delay, uint64_t ns_period);
+
+#endif // __M5OP_H__
diff --git a/util/m5/m5op.s b/util/m5/m5op.s
new file mode 100644
index 000000000..8004e66c6
--- /dev/null
+++ b/util/m5/m5op.s
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2003 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * 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;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
+ * OWNER 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 <machine/asm.h>
+#include <regdef.h>
+
+#define m5_op 0x01
+
+#define arm_func 0x00
+#define quiesce_func 0x01
+#define ivlb_func 0x10
+#define ivle_func 0x11
+#define exit_old_func 0x20 // deprectated!
+#define exit_func 0x21
+#define initparam_func 0x30
+#define resetstats_func 0x40
+#define dumpstats_func 0x41
+#define dumprststats_func 0x42
+#define ckpt_func 0x43
+
+#define INST(op, ra, rb, func) \
+ .long (((op) << 26) | ((ra) << 21) | ((rb) << 16) | (func))
+
+#define ARM(reg) INST(m5_op, reg, 0, arm_func)
+#define QUIESCE() INST(m5_op, 0, 0, quiesce_func)
+#define IVLB(reg) INST(m5_op, reg, 0, ivlb_func)
+#define IVLE(reg) INST(m5_op, reg, 0, ivle_func)
+#define M5EXIT(reg) INST(m5_op, reg, 0, exit_func)
+#define INITPARAM(reg) INST(m5_op, reg, 0, initparam_func)
+#define RESET_STATS(r1, r2) INST(m5_op, r1, r2, resetstats_func)
+#define DUMP_STATS(r1, r2) INST(m5_op, r1, r2, dumpstats_func)
+#define DUMPRST_STATS(r1, r2) INST(m5_op, r1, r2, dumprststats_func)
+#define CHECKPOINT(r1, r2) INST(m5_op, r1, r2, ckpt_func)
+
+ .set noreorder
+
+ .align 4
+LEAF(arm)
+ ARM(16)
+ RET
+END(arm)
+
+ .align 4
+LEAF(quiesce)
+ QUIESCE()
+ RET
+END(quiesce)
+
+ .align 4
+LEAF(ivlb)
+ IVLB(16)
+ RET
+END(ivlb)
+
+ .align 4
+LEAF(ivle)
+ IVLE(16)
+ RET
+END(ivle)
+
+ .align 4
+LEAF(m5exit)
+ M5EXIT(16)
+ RET
+END(m5exit)
+
+ .align 4
+LEAF(initparam)
+ INITPARAM(0)
+ RET
+END(initparam)
+
+ .align 4
+LEAF(reset_stats)
+ RESET_STATS(16, 17)
+ RET
+END(reset_stats)
+
+ .align 4
+LEAF(dump_stats)
+ DUMP_STATS(16, 17)
+ RET
+END(dump_stats)
+
+ .align 4
+LEAF(dumpreset_stats)
+ DUMPRST_STATS(16, 17)
+ RET
+END(dumpreset_stats)
+
+ .align 4
+LEAF(checkpoint)
+ CHECKPOINT(16, 17)
+ RET
+END(checkpoint)
+
diff --git a/util/tap/tap.cc b/util/tap/tap.cc
index 7121ebcbb..2932cec35 100644
--- a/util/tap/tap.cc
+++ b/util/tap/tap.cc
@@ -200,7 +200,7 @@ main(int argc, char *argv[])
int bufsize = 2000;
bool listening = false;
char *device = NULL;
- char *filter = "";
+ char *filter = NULL;
char c;
int daemon = false;
string host;
@@ -274,16 +274,20 @@ main(int argc, char *argv[])
if (pcap == NULL)
panic("pcap_open_live failed: %s\n", errbuf);
- bpf_program program;
- bpf_u_int32 localnet, netmask;
- if (pcap_lookupnet(device, &localnet, &netmask, errbuf) == -1)
- panic("pcap_lookupnet failed: %s\n", errbuf);
+ if (filter) {
+ bpf_program program;
+ bpf_u_int32 localnet, netmask;
+ if (pcap_lookupnet(device, &localnet, &netmask, errbuf) == -1) {
+ DPRINTF("pcap_lookupnet failed: %s\n", errbuf);
+ netmask = 0xffffff00;
+ }
- if (pcap_compile(pcap, &program, filter, 1, netmask) == -1)
- panic("pcap_compile failed, invalid filter:\n%s\n", filter);
+ if (pcap_compile(pcap, &program, filter, 1, netmask) == -1)
+ panic("pcap_compile failed, invalid filter:\n%s\n", filter);
- if (pcap_setfilter(pcap, &program) == -1)
- panic("pcap_setfilter failed\n");
+ if (pcap_setfilter(pcap, &program) == -1)
+ panic("pcap_setfilter failed\n");
+ }
eth_t *ethernet = eth_open(device);
if (!ethernet)