summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorLuiz Otavio O Souza <luiz@netgate.com>2016-04-14 21:41:48 -0500
committerLuiz Otavio O Souza <luiz@netgate.com>2016-04-15 11:40:41 -0500
commit571cd7fcb9ba2d3ef32935fc8cc97ea1a401555c (patch)
tree7b0677072f7197eecf1ff4d84bbc66ad3e362115 /sys
parent3a57a783f781b8098494c5022806ea15fef765bc (diff)
downloadFreeBSD-src-571cd7fcb9ba2d3ef32935fc8cc97ea1a401555c.zip
FreeBSD-src-571cd7fcb9ba2d3ef32935fc8cc97ea1a401555c.tar.gz
Importing pfSense patch schedule_label.diff
Diffstat (limited to 'sys')
-rw-r--r--sys/net/pfvar.h7
-rw-r--r--sys/netpfil/pf/pf_ioctl.c24
2 files changed, 31 insertions, 0 deletions
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index ae88be9..7146722 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -491,6 +491,7 @@ struct pf_rule {
union pf_rule_ptr skip[PF_SKIP_COUNT];
#define PF_RULE_LABEL_SIZE 64
char label[PF_RULE_LABEL_SIZE];
+ char schedule[PF_RULE_LABEL_SIZE];
char ifname[IFNAMSIZ];
char qname[PF_QNAME_SIZE];
char pqname[PF_QNAME_SIZE];
@@ -1288,6 +1289,11 @@ struct pfioc_state_kill {
u_int psk_killed;
};
+struct pfioc_schedule_kill {
+ int numberkilled;
+ char schedule[PF_RULE_LABEL_SIZE];
+};
+
struct pfioc_states {
int ps_len;
union {
@@ -1472,6 +1478,7 @@ struct pf_ifspeed {
u_int32_t baudrate;
};
#define DIOCGIFSPEED _IOWR('D', 92, struct pf_ifspeed)
+#define DIOCKILLSCHEDULE _IOWR('D', 96, struct pfioc_schedule_kill)
#ifdef _KERNEL
LIST_HEAD(pf_src_node_list, pf_src_node);
diff --git a/sys/netpfil/pf/pf_ioctl.c b/sys/netpfil/pf/pf_ioctl.c
index c98846a..bbf5217 100644
--- a/sys/netpfil/pf/pf_ioctl.c
+++ b/sys/netpfil/pf/pf_ioctl.c
@@ -1711,6 +1711,30 @@ relock_DIOCKILLSTATES:
break;
}
+ case DIOCKILLSCHEDULE: {
+ struct pf_state *state;
+ struct pfioc_schedule_kill *psk = (struct pfioc_schedule_kill *)addr;
+ int killed = 0;
+ u_int i;
+
+ for (i = 0; i <= pf_hashmask; i++) {
+ struct pf_idhash *ih = &V_pf_idhash[i];
+
+relock_DIOCKILLSCHEDULE:
+ PF_HASHROW_LOCK(ih);
+ LIST_FOREACH(state, &ih->states, entry) {
+ if (!strcmp(psk->schedule, state->rule.ptr->schedule)) {
+ pf_unlink_state(state, PF_ENTER_LOCKED);
+ killed++;
+ goto relock_DIOCKILLSCHEDULE;
+ }
+ }
+ PF_HASHROW_UNLOCK(ih);
+ }
+ psk->numberkilled = killed;
+ break;
+ }
+
case DIOCADDSTATE: {
struct pfioc_state *ps = (struct pfioc_state *)addr;
struct pfsync_state *sp = &ps->state;
OpenPOWER on IntegriCloud