Gabe Black has submitted this change and it was merged. (
https://gem5-review.googlesource.com/3600 )
Change subject: misc: Fix building the m5tap utility.
......................................................................
misc: Fix building the m5tap utility.
Use printf instead of cprintf to avoid having to have .o files from gem5.
Stop disabling optimization. Placate the style checker by rearranging the
header include order. Include some missing standard headers. Switch from
the deprecated -I- gcc option to using -iquote. Make the "program"
variable a const char *. When checking the return value of getopt, don't
check against the char c which may mask the -1 return value. Instead,
store the return value in an int, and then later cast it to a char when
it's actually consumed.
Change-Id: Ibec51927d0cdbd98db8e53081be2c4931e20333c
Reviewed-on: https://gem5-review.googlesource.com/3600
Reviewed-by: Nathan Binkert <[email protected]>
Maintainer: Nathan Binkert <[email protected]>
---
M util/tap/Makefile
M util/tap/tap.cc
2 files changed, 32 insertions(+), 42 deletions(-)
Approvals:
Nathan Binkert: Looks good to me, approved; Looks good to me, approved
diff --git a/util/tap/Makefile b/util/tap/Makefile
index d961ea8..ff0e994 100644
--- a/util/tap/Makefile
+++ b/util/tap/Makefile
@@ -29,20 +29,13 @@
CC= gcc
CXX= g++
-CURDIR?= $(shell /bin/pwd)
-SRCDIR?= .
-M5_SRCDIR?= $(SRCDIR)/../..
-
-vpath % $(M5_SRCDIR)/base
-vpath % $(M5_SRCDIR)/sim
-
-INCLDIRS= -I. -I$(M5_SRCDIR) -I- -I/usr/local/include
-CCFLAGS= -g -O0 -MMD $(INCLDIRS)
+INCLDIRS= -iquote . -I /usr/local/include
+CCFLAGS= -g -MMD $(INCLDIRS)
default: m5tap
-m5tap: tap.o cprintf.o
- $(CXX) $(LFLAGS) -o $@ $^ -lpcap -L/usr/local/lib -ldnet
+m5tap: tap.o
+ $(CXX) $(LFLAGS) -o $@ $^ -lpcap
install: m5tap
$(SUDO) install -o root -m 555 m5tap /usr/local/bin
diff --git a/util/tap/tap.cc b/util/tap/tap.cc
index 2cc7de4..8b78265 100644
--- a/util/tap/tap.cc
+++ b/util/tap/tap.cc
@@ -30,36 +30,37 @@
extern "C" {
#include <pcap.h>
+
}
#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <dnet.h>
#include <fcntl.h>
#include <libgen.h>
#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
#include <poll.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/types.h>
#include <unistd.h>
#include <cerrno>
#include <csignal>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
#include <list>
#include <string>
-#include "base/cprintf.hh"
-
#define panic(arg...) \
- do { cprintf("Panic: " arg); exit(1); } while (0)
+ do { printf("Panic: " arg); exit(1); } while (0)
-char *program = "ethertap";
+const char *program = "ethertap";
void
usage()
{
- cprintf(
+ printf(
"usage: \n"
"\t%s [-b bufsize] [-d] [-f filter] [-p port] [-v] <device>
<host>\n"
"\t%s [-b bufsize] [-d] [-f filter] [-l] [-p port] [-v]
<device>\n",
@@ -70,7 +71,7 @@
int verbose = 0;
#define DPRINTF(args...) do { \
if (verbose >= 1) \
- cprintf(args); \
+ printf(args); \
} while (0)
#define DDUMP(args...) do { \
@@ -84,26 +85,26 @@
int c, i, j;
for (i = 0; i < len; i += 16) {
- cprintf("%08x ", i);
+ printf("%08x ", i);
c = len - i;
if (c > 16) c = 16;
for (j = 0; j < c; j++) {
- cprintf("%02x ", data[i + j] & 0xff);
+ printf("%02x ", data[i + j] & 0xff);
if ((j & 0xf) == 7 && j > 0)
- cprintf(" ");
+ printf(" ");
}
for (; j < 16; j++)
- cprintf(" ");
- cprintf(" ");
+ printf(" ");
+ printf(" ");
for (j = 0; j < c; j++) {
int ch = data[i + j] & 0x7f;
- cprintf("%c", (char)(isprint(ch) ? ch : ' '));
+ printf("%c", (char)(isprint(ch) ? ch : ' '));
}
- cprintf("\n");
+ printf("\n");
if (c < 16)
break;
@@ -178,7 +179,7 @@
struct hostent *hp;
hp = ::gethostbyname(host.c_str());
if (!hp)
- panic("Host %s not found\n", host);
+ panic("Host %s not found\n", host.c_str());
sockaddr.sin_family = hp->h_addrtype;
memcpy(&sockaddr.sin_addr, hp->h_addr, hp->h_length);
@@ -186,9 +187,9 @@
sockaddr.sin_port = htons(port);
if (::connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) != 0)
- panic("could not connect to %s on port %d\n", host, port);
+ panic("could not connect to %s on port %d\n", host.c_str(), port);
- DPRINTF("connected to %s on port %d\n", host, port);
+ DPRINTF("connected to %s on port %d\n", host.c_str(), port);
}
class Ethernet
@@ -221,7 +222,6 @@
{
private:
pcap_t *pcap;
- eth_t *ethernet;
public:
PCap(char *device, char *filter = NULL);
@@ -253,17 +253,12 @@
panic("pcap_setfilter failed\n");
}
- ethernet = eth_open(device);
- if (!ethernet)
- panic("cannot open the ethernet device for writing\n");
-
fd = pcap_fileno(pcap);
}
PCap::~PCap()
{
pcap_close(pcap);
- eth_close(ethernet);
}
bool
@@ -281,7 +276,7 @@
bool
PCap::write(const char *data, int len)
{
- eth_send(ethernet, data, len);
+ return pcap_inject(pcap, data, len) == len;
}
Tap::Tap(char *device)
@@ -335,7 +330,9 @@
program = basename(argv[0]);
- while ((c = getopt(argc, argv, "b:df:lp:tv")) != -1) {
+ int ret;
+ while ((ret = getopt(argc, argv, "b:df:lp:tv")) != -1) {
+ char c = ret;
switch (c) {
case 'b':
bufsize = atoi(optarg);
@@ -435,7 +432,7 @@
DPRINTF("Begin poll loop\n");
while (!quit) {
- int ret = ::poll(pfds, npfds, INFTIM);
+ int ret = ::poll(pfds, npfds, -1);
if (ret < 0)
continue;
--
To view, visit https://gem5-review.googlesource.com/3600
To unsubscribe, visit https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibec51927d0cdbd98db8e53081be2c4931e20333c
Gerrit-Change-Number: 3600
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Nathan Binkert <[email protected]>
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev