diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/m5/Makefile | 26 | ||||
-rw-r--r-- | util/m5/m5.c | 186 | ||||
-rw-r--r-- | util/m5/m5op.h | 45 | ||||
-rw-r--r-- | util/m5/m5op.s | 121 | ||||
-rw-r--r-- | util/tap/tap.cc | 22 |
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) |