summaryrefslogtreecommitdiffstats
path: root/sys/netpfil/pf/pf.c
diff options
context:
space:
mode:
authorLuiz Otavio O Souza <luiz@netgate.com>2015-11-11 13:59:04 -0600
committerLuiz Otavio O Souza <luiz@netgate.com>2015-11-11 13:59:04 -0600
commitc548a571ceaeae698d02b862b4170d015a265ba7 (patch)
tree537578451fed3a14cc2be8fbd1560ab95ed77a8d /sys/netpfil/pf/pf.c
parentb24875947f184e461a05c24a653b99071580feef (diff)
downloadFreeBSD-src-c548a571ceaeae698d02b862b4170d015a265ba7.zip
FreeBSD-src-c548a571ceaeae698d02b862b4170d015a265ba7.tar.gz
MFC r284777:
ALTQ FAIRQ discipline import from DragonFLY Differential Revision: https://reviews.freebsd.org/D2847 Reviewed by: glebius, wblock(manpage) Approved by: gnn(mentor) Obtained from: pfSense Sponsored by: Netgate TAG: FAIRQ
Diffstat (limited to 'sys/netpfil/pf/pf.c')
-rw-r--r--sys/netpfil/pf/pf.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 91ca4fe..a11f7f8 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -614,6 +614,20 @@ pf_hashsrc(struct pf_addr *addr, sa_family_t af)
return (h & pf_srchashmask);
}
+#ifdef ALTQ
+static int
+pf_state_hash(struct pf_state *s)
+{
+ u_int32_t hv = (intptr_t)s / sizeof(*s);
+
+ hv ^= crc32(&s->src, sizeof(s->src));
+ hv ^= crc32(&s->dst, sizeof(s->dst));
+ if (hv == 0)
+ hv = 1;
+ return (hv);
+}
+#endif
+
#ifdef INET6
void
pf_addrcpy(struct pf_addr *dst, struct pf_addr *src, sa_family_t af)
@@ -6430,6 +6444,8 @@ done:
pd.act.qid = r->qid;
}
if (action == PF_PASS && pd.act.qid) {
+ if (s != NULL)
+ pd.pf_mtag->qid_hash = pf_state_hash(s);
if (pqid || (pd.tos & IPTOS_LOWDELAY))
pd.pf_mtag->qid = pd.act.pqid;
else
@@ -7004,6 +7020,8 @@ done:
pd.act.qid = r->qid;
}
if (action == PF_PASS && pd.act.qid) {
+ if (s != NULL)
+ pd.pf_mtag->qid_hash = pf_state_hash(s);
if (pd.tos & IPTOS_LOWDELAY)
pd.pf_mtag->qid = pd.act.pqid;
else
OpenPOWER on IntegriCloud