Applied patch from Richard Tóth <risko@iklub.sk> to support PFLOG interfaces.
This commit is contained in:
17
iftop.c
17
iftop.c
@@ -19,6 +19,7 @@
|
|||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <curses.h>
|
#include <curses.h>
|
||||||
@@ -301,6 +302,19 @@ static void handle_raw_packet(unsigned char* args, const struct pcap_pkthdr* pkt
|
|||||||
handle_ip_packet((struct ip*)packet, -1);
|
handle_ip_packet((struct ip*)packet, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void handle_pflog_packet(unsigned char* args, const struct pcap_pkthdr* pkthdr, const unsigned char* packet)
|
||||||
|
{
|
||||||
|
register u_int length = pkthdr->len;
|
||||||
|
u_int hdrlen;
|
||||||
|
const struct pfloghdr *hdr;
|
||||||
|
|
||||||
|
hdr = (struct pfloghdr *)packet;
|
||||||
|
hdrlen = BPF_WORDALIGN(hdr->length);
|
||||||
|
length -= hdrlen;
|
||||||
|
packet += hdrlen;
|
||||||
|
handle_ip_packet((struct ip*)packet, length);
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_llc_packet(const struct llc* llc, int dir) {
|
static void handle_llc_packet(const struct llc* llc, int dir) {
|
||||||
|
|
||||||
struct ip* ip = (struct ip*)((void*)llc + sizeof(struct llc));
|
struct ip* ip = (struct ip*)((void*)llc + sizeof(struct llc));
|
||||||
@@ -519,6 +533,9 @@ void packet_init() {
|
|||||||
if(dlt == DLT_EN10MB) {
|
if(dlt == DLT_EN10MB) {
|
||||||
packet_handler = handle_eth_packet;
|
packet_handler = handle_eth_packet;
|
||||||
}
|
}
|
||||||
|
else if (dlt == DLT_PFLOG) {
|
||||||
|
packet_handler = handle_pflog_packet;
|
||||||
|
}
|
||||||
else if(dlt == DLT_RAW || dlt == DLT_NULL) {
|
else if(dlt == DLT_RAW || dlt == DLT_NULL) {
|
||||||
packet_handler = handle_raw_packet;
|
packet_handler = handle_raw_packet;
|
||||||
}
|
}
|
||||||
|
|||||||
12
iftop.h
12
iftop.h
@@ -32,5 +32,17 @@ void xfree(void *v);
|
|||||||
/* options.c */
|
/* options.c */
|
||||||
void options_read(int argc, char **argv);
|
void options_read(int argc, char **argv);
|
||||||
|
|
||||||
|
struct pfloghdr {
|
||||||
|
unsigned char length;
|
||||||
|
unsigned char af;
|
||||||
|
unsigned char action;
|
||||||
|
unsigned char reason;
|
||||||
|
char ifname[16];
|
||||||
|
char ruleset[16];
|
||||||
|
unsigned int rulenr;
|
||||||
|
unsigned int subrulenr;
|
||||||
|
unsigned char dir;
|
||||||
|
unsigned char pad[3];
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* __IFTOP_H_ */
|
#endif /* __IFTOP_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user