misc: Fix building the m5tap utility.
authorGabe Black <gabeblack@google.com>
Thu, 1 Jun 2017 23:53:36 +0000 (16:53 -0700)
committerGabe Black <gabeblack@google.com>
Sat, 3 Jun 2017 15:02:00 +0000 (15:02 +0000)
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 <nate@binkert.org>
Maintainer: Nathan Binkert <nate@binkert.org>

util/tap/Makefile
util/tap/tap.cc

index d961ea8147c611ada301fcb98587de495807e8be..ff0e9945375a53889102852ae4dd4019850720dd 100644 (file)
 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
index 2cc7de4b5d6ac52e63e434f7a3b8eebd95d84f07..8b78265160455849bba10038543f88e62eb7fa1f 100644 (file)
 
 extern "C" {
 #include <pcap.h>
+
 }
 
 #include <arpa/inet.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 <dnet.h>
-#include <fcntl.h>
-#include <libgen.h>
-#include <netdb.h>
-#include <poll.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 @@ usage()
 int verbose = 0;
 #define DPRINTF(args...) do { \
     if (verbose >= 1) \
-        cprintf(args); \
+        printf(args); \
 } while (0)
 
 #define DDUMP(args...) do { \
@@ -84,26 +85,26 @@ dump(const u_char *data, int len)
         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 @@ Connect(int fd, const std::string &host, int port)
         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 @@ Connect(int fd, const std::string &host, int port)
 
     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 @@ class PCap : public Ethernet
 {
   private:
     pcap_t *pcap;
-    eth_t *ethernet;
 
   public:
     PCap(char *device, char *filter = NULL);
@@ -253,17 +253,12 @@ PCap::PCap(char *device, char *filter)
             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 @@ PCap::read(const char *&data, int &len)
 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 @@ main(int argc, char *argv[])
 
     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 @@ main(int argc, char *argv[])
 
     DPRINTF("Begin poll loop\n");
     while (!quit) {
-        int ret = ::poll(pfds, npfds, INFTIM);
+        int ret = ::poll(pfds, npfds, -1);
         if (ret < 0)
             continue;