finding state is easier now inbound, we store a pointer to the stackside state key in the pkthdr so. outbound, finding the state key, is as simple as: if (dir == PF_OUT && m->m_pkthdr.pf.statekey && ((struct pf_state_key *)m->m_pkthdr.pf.statekey)->reverse) sk = ((struct pf_state_key *)m->m_pkthdr.pf.statekey)->reverse; no more state table searches! then I benched. Only 10% gain. frustrating. expected more.