diff --git a/README.md b/README.md index 0ce7fd4..54162fd 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ NetHogs is a small 'net top' tool. Instead of breaking the traffic down per prot NetHogs does not rely on a special kernel module to be loaded. If there's suddenly a lot of network traffic, you can fire up NetHogs and immediately see which PID is causing this. This makes it easy to identify programs that have gone wild and are suddenly taking up your bandwidth. Since NetHogs heavily relies on `/proc`, most features are only available on Linux. -NetHogs can be built on Mac OS X, but it will only show connections, not processes. +NetHogs can be built on Mac OS X and FreeBSD, but it will only show connections, not processes. Status ------ diff --git a/src/MakeLib.mk b/src/MakeLib.mk index d6dc097..5a4b712 100644 --- a/src/MakeLib.mk +++ b/src/MakeLib.mk @@ -10,6 +10,8 @@ all: $(LIBNAME) libnethogs.a UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) LDFLAGS:= -shared -Wl,-soname,$(SO_NAME) +else ($(UNAME_S),FreeBSD) + LDFLAGS:= -shared -Wl,-soname,$(SO_NAME) else LDFLAGS:= -shared -Wl,-install_name,$(SO_NAME) endif diff --git a/src/connection.cpp b/src/connection.cpp index 5add391..d349f07 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -24,6 +24,8 @@ #include #ifdef __APPLE__ #include +#elif __FreeBSD__ +#include #else #include #endif diff --git a/src/conninode.cpp b/src/conninode.cpp index 430162f..019904c 100644 --- a/src/conninode.cpp +++ b/src/conninode.cpp @@ -28,7 +28,7 @@ #include "nethogs.h" #include "conninode.h" -#if defined __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) #ifndef s6_addr32 #define s6_addr32 __u6_addr.__u6_addr32 #endif @@ -183,7 +183,7 @@ void refreshconninode() { // delete conninode; // conninode = new HashTable (256); -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__FreeBSD__) addprocinfo("net.inet.tcp.pcblist"); #else if (!addprocinfo("/proc/net/tcp")) { diff --git a/src/conninode_test.cpp b/src/conninode_test.cpp index a2f9791..24ecb7f 100644 --- a/src/conninode_test.cpp +++ b/src/conninode_test.cpp @@ -13,7 +13,7 @@ int main() { return 2; } -#if not defined(__APPLE__) +#if !defined(__APPLE__) && !defined(__FreeBSD__) if (!addprocinfo("/proc/net/tcp")) { std::cerr << "Failed to load /proc/net/tcp" << std::endl; return 3; diff --git a/src/decpcap.c b/src/decpcap.c index a829e71..cb115e8 100644 --- a/src/decpcap.c +++ b/src/decpcap.c @@ -20,6 +20,7 @@ * */ +#include #include #include #include diff --git a/src/nethogs.cpp b/src/nethogs.cpp index 682c790..0cb3ed9 100644 --- a/src/nethogs.cpp +++ b/src/nethogs.cpp @@ -119,7 +119,7 @@ int process_tcp(u_char *userdata, const dp_header *header, Packet *packet; switch (args->sa_family) { case AF_INET: -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) packet = new Packet(args->ip_src, ntohs(tcp->th_sport), args->ip_dst, ntohs(tcp->th_dport), header->len, header->ts); #else @@ -128,7 +128,7 @@ int process_tcp(u_char *userdata, const dp_header *header, #endif break; case AF_INET6: -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) packet = new Packet(args->ip6_src, ntohs(tcp->th_sport), args->ip6_dst, ntohs(tcp->th_dport), header->len, header->ts); #else @@ -168,7 +168,7 @@ int process_udp(u_char *userdata, const dp_header *header, Packet *packet; switch (args->sa_family) { case AF_INET: -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) packet = new Packet(args->ip_src, ntohs(udp->uh_sport), args->ip_dst, ntohs(udp->uh_dport), header->len, header->ts); #else @@ -177,7 +177,7 @@ int process_udp(u_char *userdata, const dp_header *header, #endif break; case AF_INET6: -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__FreeBSD__) packet = new Packet(args->ip6_src, ntohs(udp->uh_sport), args->ip6_dst, ntohs(udp->uh_dport), header->len, header->ts); #else diff --git a/src/nethogs.h b/src/nethogs.h index 3b1a17f..7457926 100644 --- a/src/nethogs.h +++ b/src/nethogs.h @@ -31,6 +31,8 @@ #include #ifdef __APPLE__ #include +#elif __FreeBSD__ +#include #else #include #endif diff --git a/src/packet.cpp b/src/packet.cpp index 47e6343..99c36ed 100644 --- a/src/packet.cpp +++ b/src/packet.cpp @@ -28,6 +28,8 @@ #include #ifdef __APPLE__ #include +#elif __FreeBSD__ +#include #else #include #endif diff --git a/src/process.cpp b/src/process.cpp index a31e220..b42c1d2 100644 --- a/src/process.cpp +++ b/src/process.cpp @@ -24,7 +24,7 @@ #include #include #include -#ifndef __APPLE__ +#if !defined(__APPLE__) && !defined(__FreeBSD__) #include #endif #include