pkgsrc/sysutils/pftop/patches/patch-ab
peter b7760d3810 The previous commit to fix the include path didn't worked so well on
NetBSD 2 + pflkm, because the path was substituted by "__nonexistent__".
So to fix this properly, add a patch with CPP conditional which fixes
the path for __DragonFly__.
2006-03-06 23:02:07 +00:00

449 lines
8 KiB
Text

$NetBSD: patch-ab,v 1.4 2006/03/06 23:02:08 peter Exp $
--- pftop.c.orig 2003-08-05 03:20:39.000000000 +0200
+++ pftop.c 2006-03-06 23:52:20.000000000 +0100
@@ -31,6 +31,11 @@
*/
#include "config.h"
+#ifdef __NetBSD__
+#include <sys/param.h>
+#include <sys/syslimits.h>
+#endif
+
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
@@ -39,7 +44,11 @@
#include <netinet/in.h>
#define TCPSTATES
#include <netinet/tcp_fsm.h>
+#ifdef __DragonFly__
+#include <net/pf/pfvar.h>
+#else
#include <net/pfvar.h>
+#endif
#include <arpa/inet.h>
#ifdef HAVE_ALTQ
@@ -54,7 +63,9 @@
#include <err.h>
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#include <netdb.h>
+#include <poll.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
@@ -192,9 +203,6 @@
volatile sig_atomic_t gotsig_close = 0;
volatile sig_atomic_t gotsig_resize = 0;
-volatile sig_atomic_t gotsig_alarm = 0;
-int need_update = 0;
-int need_sort = 0;
#define FLD_ALIGN_LEFT 0
#define FLD_ALIGN_RIGHT 1
@@ -506,7 +514,6 @@
int
tbprintf(char *format, ...)
- GCC_PRINTFLIKE(1,2) /* defined in curses.h */
{
int len;
va_list arg;
@@ -543,6 +550,10 @@
}
}
+#ifndef MIN
+#define MIN(x,y) ((x) < (y) ? (x) : (y))
+#endif
+
void
print_str(int len, const char *str)
{
@@ -758,7 +769,6 @@
}
if ((curr_view != NULL) && (curr_view->mgr != v->mgr)) {
- gotsig_alarm = 1;
if (v->mgr != NULL && v->mgr->select_fn != NULL)
v->mgr->select_fn();
}
@@ -766,7 +776,6 @@
curr_view = v;
curr_mgr = v->mgr;
field_setup();
- need_update = 1;
}
void
@@ -849,11 +858,9 @@
if (cachestates) {
show_field(FLD_SI);
show_field(FLD_SP);
- gotsig_alarm = 1;
} else {
hide_field(FLD_SI);
hide_field(FLD_SP);
- need_update = 1;
}
field_setup();
}
@@ -1212,7 +1219,7 @@
ps.ps_buf = (char *) state_buf;
if (ioctl(dev, DIOCGETSTATES, &ps) < 0) {
- errx(1, "DIOCGETSTATES");
+ err(1, "DIOCGETSTATES");
}
num_states = ps.ps_len / sizeof(struct pf_state);
@@ -1303,7 +1310,7 @@
tbprintf(" PAUSED");
if (rawmode)
- printf("\n\n%s\n", tmp_buf);
+ printf("\n%s", tmp_buf);
else
mvprintw(0, 0, "%s", tmp_buf);
@@ -1319,7 +1326,10 @@
len = columns - strlen(tmp_buf);
if (len < 0)
len = 0;
- mvprintw(0, len, "%s", tmp_buf);
+ if (rawmode)
+ printf(" %s\n", tmp_buf);
+ else
+ mvprintw(0, len, "%s", tmp_buf);
}
tb_end();
@@ -1645,7 +1655,7 @@
dispstart = 0;
if (ioctl(dev, DIOCGETSTATUS, &status)) {
- warnx("DIOCGETSTATUS");
+ warn("DIOCGETSTATUS");
return (-1);
}
@@ -1681,7 +1691,7 @@
memset(&pr, 0, sizeof(pr));
if (ioctl(dev, DIOCGETRULES, &pr)) {
- warnx("DIOCGETRULES");
+ warn("DIOCGETRULES");
return (-1);
}
@@ -1704,7 +1714,7 @@
for (nr = 0; nr < num_rules; ++nr) {
pr.nr = nr;
if (ioctl(dev, DIOCGETRULE, &pr)) {
- warnx("DIOCGETRULE");
+ warn("DIOCGETRULE");
return (-1);
}
rules[nr] = pr.rule;
@@ -1802,7 +1812,11 @@
PF_AZERO(PT_MASK(src), AF_INET6))
tbprintf("any ");
else {
+#if OS_LEVEL > 35
+ if (src->neg)
+#else
if (src->not)
+#endif
tbprintf("! ");
#ifdef HAVE_ADDR_WRAP
tb_print_addrw(&src->addr, PT_MASK(src), af);
@@ -1823,7 +1837,11 @@
PF_AZERO(PT_MASK(dst), AF_INET6))
tbprintf("any ");
else {
+#if OS_LEVEL > 35
+ if (dst->neg)
+#else
if (dst->not)
+#endif
tbprintf("! ");
#ifdef HAVE_ADDR_WRAP
tb_print_addrw(&dst->addr, PT_MASK(dst), af);
@@ -1890,8 +1908,13 @@
#ifdef HAVE_RULE_STATES
print_fld_size(FLD_STATS, pr->states);
#endif
+#if OS_LEVEL > 37
+ print_fld_size(FLD_PKTS, pr->packets[0] + pr->packets[1]);
+ print_fld_size(FLD_BYTES, pr->bytes[0] + pr->bytes[1]);
+#else
print_fld_size(FLD_PKTS, pr->packets);
print_fld_size(FLD_BYTES, pr->bytes);
+#endif
print_fld_uint(FLD_RULE, pr->nr);
print_fld_str(FLD_DIR, pr->direction == PF_OUT ? "Out" : "In");
if (pr->quick)
@@ -2486,12 +2509,6 @@
}
void
-sig_alarm(int signal)
-{
- gotsig_alarm = 1;
-}
-
-void
usage()
{
extern char *__progname;
@@ -2544,7 +2561,9 @@
line++;
mvprintw(line++, 6, "press any key to continue ...");
+ timeout(-1);
while (getch() == ERR);
+ timeout(0);
}
void
@@ -2577,8 +2596,9 @@
keypad(stdscr, TRUE);
intrflush(stdscr, FALSE);
- halfdelay(10);
+ cbreak();
noecho();
+ timeout(0);
}
if (maxstates == 0)
@@ -2597,7 +2617,6 @@
cmdbuf[0] = 0;
}
curr_cmd = cmd;
- need_update = 1;
return prev;
}
@@ -2618,10 +2637,8 @@
{
int del;
del = atoi(cmdbuf);
- if (del > 0) {
+ if (del > 0)
delay = del;
- gotsig_alarm = 1;
- }
}
void
@@ -2646,7 +2663,6 @@
if (cmd_len < sizeof(cmdbuf) - 1) {
cmdbuf[cmd_len++] = ch;
cmdbuf[cmd_len] = 0;
- need_update = 1;
} else
beep();
}
@@ -2663,10 +2679,9 @@
case KEY_BACKSPACE:
case KEY_DC:
case CTRL_H:
- if (cmd_len > 0) {
+ if (cmd_len > 0)
cmdbuf[--cmd_len] = 0;
- need_update = 1;
- } else
+ else
beep();
break;
default:
@@ -2687,9 +2702,6 @@
}
switch (ch) {
- case ' ':
- gotsig_alarm = 1;
- break;
case 'c':
cachestates = !cachestates;
update_cache();
@@ -2698,25 +2710,21 @@
/* FALLTHROUGH */
case 'h':
show_help();
- need_update = 1;
break;
case 'n':
command_set(&cm_count);
break;
case 'o':
next_order();
- need_sort = 1;
break;
case 'p':
paused = !paused;
- gotsig_alarm = 1;
break;
case 'q':
gotsig_close = 1;
break;
case 'r':
sortdir *= -1;
- need_sort = 1;
break;
case 's':
command_set(&cm_delay);
@@ -2737,49 +2745,40 @@
/* FALLTHROUGH */
case CTRL_N:
dispstart++;
- need_update = 1;
break;
case KEY_UP:
/* FALLTHROUGH */
case CTRL_P:
dispstart--;
- need_update = 1;
break;
case KEY_NPAGE:
/* FALLTHROUGH */
case CTRL_V:
dispstart += maxprint;
- need_update = 1;
break;
case KEY_PPAGE:
/* FALLTHROUGH */
case META_V:
dispstart -= maxprint;
- need_update = 1;
break;
case KEY_HOME:
/* FALLTHROUGH */
case CTRL_A:
dispstart = 0;
- need_update = 1;
break;
case KEY_END:
/* FALLTHROUGH */
case CTRL_E:
dispstart = num_disp;
- need_update = 1;
break;
case CTRL_L:
clear();
- need_update = 1;
break;
default:
break;
}
- if (set_order_hotkey(ch))
- need_sort = 1;
- else
+ if (!set_order_hotkey(ch))
set_view_hotkey(ch);
}
@@ -2790,6 +2789,7 @@
extern int optind;
struct pf_status status;
+ struct pollfd set[1];
char *orderstr = NULL;
char *viewstr = NULL;
@@ -2872,7 +2872,6 @@
signal(SIGINT, sig_close);
signal(SIGQUIT, sig_close);
signal(SIGWINCH, sig_resize);
- signal(SIGALRM, sig_alarm);
#ifdef HAVE_DEVICE_RO
dev = open("/dev/pf", O_RDONLY);
@@ -2884,7 +2883,7 @@
/* preallocate existing states if possible */
if (ioctl(dev, DIOCGETSTATUS, &status)) {
- warnx("DIOCGETSTATUS");
+ warn("DIOCGETSTATUS");
alloc_buf(0);
} else
alloc_buf(status.states);
@@ -2910,36 +2909,7 @@
if (rawmode && countmax == 0)
countmax = 1;
- gotsig_alarm = 1;
for (;;) {
- if (gotsig_alarm) {
- read_view(dev);
- need_sort = 1;
- gotsig_alarm = 0;
- alarm(delay);
- }
-
- if (need_sort) {
- sort_view();
- need_sort = 0;
- need_update = 1;
-
- /* XXX if sort took too long */
- if (gotsig_alarm) {
- gotsig_alarm = 0;
- alarm(delay);
- }
- }
-
- if (need_update) {
- erase();
- disp_update(dev);
- end_page();
- need_update = 0;
- if (countmax && ++count >= countmax)
- break;
- }
-
if (gotsig_close)
break;
if (gotsig_resize) {
@@ -2947,12 +2917,30 @@
endwin();
setup_term(maxstates);
gotsig_resize = 0;
- need_update = 1;
}
- if (interactive && need_update == 0)
- keyboard();
- else if (interactive == 0)
+ read_view(dev);
+ sort_view();
+
+ if (rawmode == 0)
+ erase();
+ disp_update(dev);
+ end_page();
+
+ if (countmax && ++count >= countmax)
+ break;
+
+ if (interactive) {
+ set[0].fd = STDIN_FILENO;
+ set[0].events = POLLIN;
+ if (poll(set, 1, delay * 1000) == -1) {
+ if (errno == EINTR)
+ continue;
+ break;
+ }
+ if ((set[0].revents & POLLIN) != 0)
+ keyboard();
+ } else
sleep(delay);
}