pkgsrc/sysutils/pftop/patches/patch-ag

628 lines
14 KiB
Text
Raw Normal View History

$NetBSD: patch-ag,v 1.3 2011/02/09 22:51:38 rumko Exp $
$OpenBSD: patch-pftop_c,v 1.13 2009/12/02 22:59:29 sthen Exp $
* DragonFly compatibility
* Patches to support PF > 4.1 taken from OpenBSD's ports.
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
--- pftop.c.orig 2007-11-07 07:36:46 +0100
+++ pftop.c 2009-11-16 23:37:03 +0100
@@ -40,21 +40,41 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
#include <netinet/in.h>
#define TCPSTATES
#include <netinet/tcp_fsm.h>
+#ifdef __DragonFly__
+#include <net/pf/pfvar.h>
+#else
#include <net/pfvar.h>
+#endif /* !__DragonFly__ */
#include <arpa/inet.h>
#ifdef HAVE_ALTQ
+#ifdef __DragonFly__
+#include <net/altq/altq.h>
+#include <net/altq/altq_cbq.h>
+#include <net/altq/altq_priq.h>
+#include <net/altq/altq_hfsc.h>
+#else
#include <altq/altq.h>
#include <altq/altq_cbq.h>
#include <altq/altq_priq.h>
#include <altq/altq_hfsc.h>
#endif
+#ifdef ALTQT_FAIRQ
+#ifdef __DragonFly__
+#include <net/altq/altq_fairq.h>
+#else
+#include <altq/altq_fairq.h>
+#endif
+#endif
+#endif
+
#include <ctype.h>
#include <curses.h>
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
#include <err.h>
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#include <netdb.h>
#include <signal.h>
#include <stdio.h>
@@ -127,6 +147,13 @@
#define PT_NOROUTE(x) (0)
#endif
+#ifdef HAVE_NETWORK_ORDER
+#define PF_TSTAMP(x) ntohl(x)
+#else
+#define PF_TSTAMP(x) (x)
+#endif
+
+
/* view management */
int select_states(void);
int read_states(void);
@@ -371,6 +398,9 @@
class_stats_t cbq_stats;
struct priq_classstats priq_stats;
struct hfsc_classstats hfsc_stats;
+#ifdef ALTQT_FAIRQ
+ struct fairq_classstats fairq_stats;
+#endif
};
struct queue_stats {
@@ -445,11 +475,11 @@
int
sort_age_callback(const void *s1, const void *s2)
{
- if (state_buf[* (u_int32_t *) s2].creation >
- state_buf[* (u_int32_t *) s1].creation)
+ if (PF_TSTAMP(state_buf[* (u_int32_t *) s2].creation) >
+ PF_TSTAMP(state_buf[* (u_int32_t *) s1].creation))
return sortdir;
- if (state_buf[* (u_int32_t *) s2].creation <
- state_buf[* (u_int32_t *) s1].creation)
+ if (PF_TSTAMP(state_buf[* (u_int32_t *) s2].creation) <
+ PF_TSTAMP(state_buf[* (u_int32_t *) s1].creation))
return -sortdir;
return 0;
}
@@ -457,11 +487,11 @@
int
sort_exp_callback(const void *s1, const void *s2)
{
- if (state_buf[* (u_int32_t *) s2].expire >
- state_buf[* (u_int32_t *) s1].expire)
+ if (PF_TSTAMP(state_buf[* (u_int32_t *) s2].expire) >
+ PF_TSTAMP(state_buf[* (u_int32_t *) s1].expire))
return sortdir;
- if (state_buf[* (u_int32_t *) s2].expire <
- state_buf[* (u_int32_t *) s1].expire)
+ if (PF_TSTAMP(state_buf[* (u_int32_t *) s2].expire) <
+ PF_TSTAMP(state_buf[* (u_int32_t *) s1].expire))
return -sortdir;
return 0;
}
@@ -535,6 +565,115 @@
return 0;
}
+#ifdef HAVE_PFSYNC_KEY
+
+#ifdef __GNUC__
+__inline__
+#endif
+int
+sort_addr_callback(const pf_state_t *s1,
+ const pf_state_t *s2, int dir)
+{
+ const struct pf_addr *aa, *ab;
+ u_int16_t pa, pb;
+ int af, ret, ii, io;
+
+ af = s1->af;
+
+
+ if (af > s2->af)
+ return sortdir;
+ if (af < s2->af)
+ return -sortdir;
+
+ ii = io = 0;
+
+ if (dir == PF_OUT) /* looking for source addr */
+ io = 1;
+ else /* looking for dest addr */
+ ii = 1;
+
+ if (s1->direction == PF_IN) {
+ aa = &s1->key[PF_SK_STACK].addr[ii];
+ pa = s1->key[PF_SK_STACK].port[ii];
+ } else {
+ aa = &s1->key[PF_SK_WIRE].addr[io];
+ pa = s1->key[PF_SK_WIRE].port[io];
+ }
+
+ if (s2->direction == PF_IN) {
+ ab = &s2->key[PF_SK_STACK].addr[ii];;
+ pb = s2->key[PF_SK_STACK].port[ii];
+ } else {
+ ab = &s2->key[PF_SK_WIRE].addr[io];;
+ pb = s2->key[PF_SK_WIRE].port[io];
+ }
+
+ ret = compare_addr(af, aa, ab);
+ if (ret)
+ return ret * sortdir;
+
+ if (ntohs(pa) > ntohs(pb))
+ return sortdir;
+ return -sortdir;
+}
+
+#ifdef __GNUC__
+__inline__
+#endif
+int
+sort_port_callback(const pf_state_t *s1,
+ const pf_state_t *s2, int dir)
+{
+ const struct pf_addr *aa, *ab;
+ u_int16_t pa, pb;
+ int af, ret, ii, io;
+
+ af = s1->af;
+
+
+ if (af > s2->af)
+ return sortdir;
+ if (af < s2->af)
+ return -sortdir;
+
+ ii = io = 0;
+
+ if (dir == PF_OUT) /* looking for source addr */
+ io = 1;
+ else /* looking for dest addr */
+ ii = 1;
+
+ if (s1->direction == PF_IN) {
+ aa = &s1->key[PF_SK_STACK].addr[ii];
+ pa = s1->key[PF_SK_STACK].port[ii];
+ } else {
+ aa = &s1->key[PF_SK_WIRE].addr[io];
+ pa = s1->key[PF_SK_WIRE].port[io];
+ }
+
+ if (s2->direction == PF_IN) {
+ ab = &s2->key[PF_SK_STACK].addr[ii];;
+ pb = s2->key[PF_SK_STACK].port[ii];
+ } else {
+ ab = &s2->key[PF_SK_WIRE].addr[io];;
+ pb = s2->key[PF_SK_WIRE].port[io];
+ }
+
+
+ if (ntohs(pa) > ntohs(pb))
+ return sortdir;
+ if (ntohs(pa) < ntohs(pb))
+ return - sortdir;
+
+ ret = compare_addr(af, aa, ab);
+ if (ret)
+ return ret * sortdir;
+ return -sortdir;
+}
+
+#else /* HAVE_PFSYNC_KEY */
+
#ifdef __GNUC__
__inline__
#endif
@@ -573,20 +712,6 @@
return -sortdir;
}
-int sort_sa_callback(const void *p1, const void *p2)
-{
- pf_state_t *s1 = state_buf + (* (u_int32_t *) p1);
- pf_state_t *s2 = state_buf + (* (u_int32_t *) p2);
- return sort_addr_callback(s1, s2, PF_OUT);
-}
-
-int sort_da_callback(const void *p1, const void *p2)
-{
- pf_state_t *s1 = state_buf + (* (u_int32_t *) p1);
- pf_state_t *s2 = state_buf + (* (u_int32_t *) p2);
- return sort_addr_callback(s1, s2, PF_IN);
-}
-
#ifdef __GNUC__
__inline__
#endif
@@ -625,6 +750,21 @@
return sortdir;
return -sortdir;
}
+#endif /* HAVE_PFSYNC_KEY */
+
+int sort_sa_callback(const void *p1, const void *p2)
+{
+ pf_state_t *s1 = state_buf + (* (u_int32_t *) p1);
+ pf_state_t *s2 = state_buf + (* (u_int32_t *) p2);
+ return sort_addr_callback(s1, s2, PF_OUT);
+}
+
+int sort_da_callback(const void *p1, const void *p2)
+{
+ pf_state_t *s1 = state_buf + (* (u_int32_t *) p1);
+ pf_state_t *s2 = state_buf + (* (u_int32_t *) p2);
+ return sort_addr_callback(s1, s2, PF_IN);
+}
int
sort_sp_callback(const void *p1, const void *p2)
@@ -736,7 +876,7 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
} else {
num_states = 0;
for (n = 0; n<num_states_all; n++)
- if (bpf_filter(filter_prog.bf_insns, (char *)(&state_buf[n]),
+ if (bpf_filter(filter_prog.bf_insns, (u_char *)(&state_buf[n]),
sizeof(pf_state_t), sizeof(pf_state_t)) > 0)
state_ord[num_states++] = n;
}
@@ -828,7 +968,7 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
tbprintf(" PAUSED");
if (rawmode)
- printf("\n\n%s\n", tmp_buf);
+ printf("\n%s", tmp_buf);
else
mvprintw(0, 0, "%s", tmp_buf);
@@ -843,7 +983,10 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
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();
@@ -865,7 +1008,48 @@
tbprintf("/%u", unmask(mask, af));
}
}
+#ifdef HAVE_PFSYNC_KEY
+void
+print_fld_host2(field_def *fld, struct pfsync_state_key *ks,
+ struct pfsync_state_key *kn, int idx, int af)
+{
+ struct pf_addr *as = &ks->addr[idx];
+ struct pf_addr *an = &kn->addr[idx];
+
+ u_int16_t ps = ntohs(ks->port[idx]);
+ u_int16_t pn = ntohs(kn->port[idx]);
+
+ if (fld == NULL)
+ return;
+
+ if (fld->width < 3) {
+ print_fld_str(fld, "*");
+ return;
+ }
+
+ tb_start();
+ tb_print_addr(as, NULL, af);
+
+ if (af == AF_INET)
+ tbprintf(":%u", ps);
+ else
+ tbprintf("[%u]", ps);
+
+ print_fld_tb(fld);
+
+ if (PF_ANEQ(as, an, af) || ps != pn) {
+ tb_start();
+ tb_print_addr(an, NULL, af);
+ if (af == AF_INET)
+ tbprintf(":%u", pn);
+ else
+ tbprintf("[%u]", pn);
+ print_fld_tb(FLD_GW);
+ }
+
+}
+#else
void
print_fld_host(field_def *fld, pf_state_host_t * h, int af)
{
@@ -889,6 +1073,7 @@
print_fld_tb(fld);
}
+#endif
void
print_fld_state(field_def *fld, unsigned int proto,
@@ -960,6 +1145,19 @@
else
print_fld_uint(FLD_PROTO, s->proto);
+#ifdef HAVE_PFSYNC_KEY
+ if (s->direction == PF_OUT) {
+ print_fld_host2(FLD_SRC, &s->key[PF_SK_WIRE],
+ &s->key[PF_SK_STACK], 1, s->af);
+ print_fld_host2(FLD_DEST, &s->key[PF_SK_WIRE],
+ &s->key[PF_SK_STACK], 0, s->af);
+ } else {
+ print_fld_host2(FLD_SRC, &s->key[PF_SK_STACK],
+ &s->key[PF_SK_WIRE], 0, s->af);
+ print_fld_host2(FLD_DEST, &s->key[PF_SK_STACK],
+ &s->key[PF_SK_WIRE], 1, s->af);
+ }
+#else
if (s->direction == PF_OUT) {
print_fld_host(FLD_SRC, &s->lan, s->af);
print_fld_host(FLD_DEST, &s->ext, s->af);
@@ -972,6 +1170,7 @@
(s->lan.port != s->gwy.port)) {
print_fld_host(FLD_GW, &s->gwy, s->af);
}
+#endif
if (s->direction == PF_OUT)
print_fld_str(FLD_DIR, "Out");
@@ -979,8 +1178,8 @@
print_fld_str(FLD_DIR, "In");
print_fld_state(FLD_STATE, s->proto, src->state, dst->state);
- print_fld_age(FLD_AGE, s->creation);
- print_fld_age(FLD_EXP, s->expire);
+ print_fld_age(FLD_AGE, PF_TSTAMP(s->creation));
+ print_fld_age(FLD_EXP, PF_TSTAMP(s->expire));
#ifdef HAVE_INOUT_COUNT
{
u_int64_t sz = COUNTER(s->bytes[0]) + COUNTER(s->bytes[1]);
@@ -988,14 +1187,14 @@
print_fld_size(FLD_PKTS, COUNTER(s->packets[0]) +
COUNTER(s->packets[1]));
print_fld_size(FLD_BYTES, sz);
- print_fld_rate(FLD_SA, (s->creation > 0) ?
- ((double)sz/(double)s->creation) : -1);
+ print_fld_rate(FLD_SA, (s->creation) ?
+ ((double)sz/PF_TSTAMP((double)s->creation)) : -1);
}
#else
print_fld_size(FLD_PKTS, s->packets);
print_fld_size(FLD_BYTES, s->bytes);
- print_fld_rate(FLD_SA, (s->creation > 0) ?
- ((double)s->bytes/(double)s->creation) : -1);
+ print_fld_rate(FLD_SA, (s->creation) ?
+ ((double)s->bytes/PF_TSTAMP((double)s->creation)) : -1);
#endif
#ifdef HAVE_PFSYNC_STATE
@@ -1244,7 +1443,6 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
FLD_ANCHOR->max_width = mx;
FLD_ANCHOR->norm_width = nx;
field_setup();
- need_update = 1;
}
}
#endif
@@ -1279,7 +1477,6 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
FLD_LABEL->norm_width = nw;
FLD_LABEL->max_width = mw;
field_setup();
- need_update = 1;
}
}
#endif
@@ -1458,8 +1655,9 @@
void
print_rule(struct pf_rule *pr)
{
- static const char *actiontypes[] = { "Pass", "Block", "Scrub", "Nat",
- "no Nat", "Binat", "no Binat", "Rdr", "no Rdr" };
+ static const char *actiontypes[] = { "Pass", "Block", "Scrub",
+ "no Scrub", "Nat", "no Nat", "Binat", "no Binat", "Rdr",
+ "no Rdr", "SynProxy Block", "Defer", "Match" };
int numact = sizeof(actiontypes) / sizeof(char *);
#ifdef HAVE_PF_ROUTE
@@ -1475,8 +1673,12 @@
print_fld_str(FLD_LABEL, pr->label);
#endif
#ifdef HAVE_RULE_STATES
+#ifdef HAVE_PFSYNC_KEY
+ print_fld_size(FLD_STATS, pr->states_tot);
+#else
print_fld_size(FLD_STATS, pr->states);
#endif
+#endif
#ifdef HAVE_INOUT_COUNT_RULES
print_fld_size(FLD_PKTS, pr->packets[0] + pr->packets[1]);
@@ -1486,7 +1688,13 @@
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->direction == PF_OUT)
+ print_fld_str(FLD_DIR, "Out");
+ else if (pr->direction == PF_IN)
+ print_fld_str(FLD_DIR, "In");
+ else
+ print_fld_str(FLD_DIR, "Any");
+
if (pr->quick)
print_fld_str(FLD_QUICK, "Quick");
@@ -1729,12 +1937,19 @@
prev->next = node;
}
}
- if (*root != node) {
- struct pf_altq_node *prev_flat = *root;
- while (prev_flat->next_flat != NULL) {
- prev_flat = prev_flat->next_flat;
- }
- prev_flat->next_flat = node;
+}
+
+void
+pfctl_set_next_flat(struct pf_altq_node *node, struct pf_altq_node *up)
+{
+ while (node) {
+ struct pf_altq_node *next = node->next ? node->next : up;
+ if (node->children) {
+ node->next_flat = node->children;
+ pfctl_set_next_flat(node->children, next);
+ } else
+ node->next_flat = next;
+ node = node->next;
}
}
@@ -1747,6 +1962,7 @@
u_int32_t nr;
struct queue_stats qstats;
u_int32_t nr_queues;
+ int ret = 0;
*inserts = 0;
memset(&pa, 0, sizeof(pa));
@@ -1757,13 +1973,15 @@
strerror(errno));
return (-1);
}
+
num_queues = nr_queues = pa.nr;
for (nr = 0; nr < nr_queues; ++nr) {
pa.nr = nr;
if (ioctl(pf_dev, DIOCGETALTQ, &pa)) {
msgprintf("Error Reading Queue (DIOCGETALTQ): %s",
strerror(errno));
- return (-1);
+ ret = -1;
+ break;
}
if (pa.altq.qid > 0) {
pq.nr = nr;
@@ -1773,7 +1991,8 @@
if (ioctl(pf_dev, DIOCGETQSTATS, &pq)) {
msgprintf("Error Reading Queue (DIOCGETQSTATS): %s",
strerror(errno));
- return (-1);
+ ret = -1;
+ break;
}
qstats.valid = 1;
gettimeofday(&qstats.timestamp, NULL);
@@ -1794,7 +2013,10 @@
else
--num_queues;
}
- return (0);
+
+ pfctl_set_next_flat(*root, NULL);
+
+ return (ret);
}
void
@@ -1924,6 +2146,10 @@
node->altq.scheduler == ALTQT_HFSC
)
print_fld_bw(FLD_BANDW, (double)node->altq.bandwidth);
+#ifdef ALTQT_FAIRQ
+ if (node->altq.scheduler == ALTQT_FAIRQ)
+ print_fld_bw(FLD_BANDW, (double)node->altq.bandwidth);
+#endif
if (node->altq.priority != DEFAULT_PRIORITY)
print_fld_uint(FLD_PRIO,
@@ -1992,6 +2218,26 @@
node->qstats_last.data.hfsc_stats.xmit_cnt.bytes, interval);
}
break;
+#ifdef ALTQT_FAIRQ
+ case ALTQT_FAIRQ:
+ print_fld_str(FLD_SCHED, "fairq");
+ print_fld_size(FLD_PKTS,
+ node->qstats.data.fairq_stats.xmit_cnt.packets);
+ print_fld_size(FLD_BYTES,
+ node->qstats.data.fairq_stats.xmit_cnt.bytes);
+ print_fld_size(FLD_DROPP,
+ node->qstats.data.fairq_stats.drop_cnt.packets);
+ print_fld_size(FLD_DROPB,
+ node->qstats.data.fairq_stats.drop_cnt.bytes);
+ print_fld_size(FLD_QLEN, node->qstats.data.fairq_stats.qlength);
+ if (interval > 0) {
+ pps = calc_pps(node->qstats.data.fairq_stats.xmit_cnt.packets,
+ node->qstats_last.data.fairq_stats.xmit_cnt.packets, interval);
+ bps = calc_rate(node->qstats.data.fairq_stats.xmit_cnt.bytes,
+ node->qstats_last.data.fairq_stats.xmit_cnt.bytes, interval);
+ }
+ break;
+#endif
}
/* if (node->altq.scheduler != ALTQT_HFSC && interval > 0) { */
@@ -2041,11 +2287,9 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
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();
}
@@ -2105,8 +2349,10 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
line++;
mvprintw(line++, 6, "press any key to continue ...");
- while (getch() == ERR);
-
+ timeout(-1);
+ while (getch() == ERR)
+ continue;
+ timeout(0);
}
@@ -2142,7 +2388,6 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
del = atoi(cmdbuf);
if (del > 0) {
delay = del;
- gotsig_alarm = 1;
}
}
@@ -2175,7 +2420,6 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
/* FALLTHROUGH */
case 'h':
show_help();
- need_update = 1;
break;
case 'n':
command_set(&cm_count, NULL);
@@ -2349,8 +2593,6 @@
Update pftop to version 0.7. Tested on NetBSD 3.1, 4.0 and yamt-pf42. Changes in version 0.7: This version adds state filtering, which is funded by backcountry.com, many thanks. It is now possible to select which states are displayed using a tcpdump(8) like filtering language. The filter can be specified on the command line, using the '-f' switch. It is also possible to change the filter interactively using the 'f' command key. Some sample, not necessarily practical, filters are given below: - Do not show pfsync or carp traffic: not (pfsync or carp) not pfsync and not carp - DNS traffic not going to or coming from the DNS servers: port 53 and not host (10.0.0.10 or 10.0.0.11) - States with input bytes greater than 1M: inb > 1000000 - Traffic with very small average packet size: ((inb / inp) + (outb / outp))/2 < 100 inb / inp + outb / outp < 200 Changes in version 0.6: No functional changes. It now compiles and runs on OpenBSD 4.1-current after pf interface changes. This version also contains separated pf and display code. This should make adding new views easier. Changes in version 0.5: This version displays all active pf rules by traversing the ruleset tree. In addition HFSC queues are now displayed correctly thanks to Jared Spiegel. This version also incorporates other patches and comments I have received since the previous release. Many thanks to all who have contributed. - New command-line switch 'S' to start the display at a given state. - Display HFCS statistics in the queue page. - Fixed state and rule byte and packet counters - Fixed state sorting by packets and bytes - Fixed some minor display problems - The rule view now traverses all rulesets, and displays all active rules, together with anchor (ruleset) names. - Anchor and Label fields dynamically resize themselves
2008-06-15 16:09:03 +02:00
if (rawmode && countmax == 0)
countmax = 1;
- gotsig_alarm = 1;
-
engine_loop(countmax);
close(pf_dev);