Lines Matching defs:st

1211 		struct pf_state *st;
1219 st = pd->pd_st;
1220 st->sync_defer = NULL;
1267 pfsync_slice_enter(struct pfsync_softc *sc, const struct pf_state *st)
1269 unsigned int idx = st->key[0]->hash % nitems(sc->sc_slices);
1305 pfsync_out_state(struct pf_state *st, void *buf)
1309 mtx_enter(&st->mtx);
1310 pf_state_export(sp, st);
1311 mtx_leave(&st->mtx);
1315 pfsync_out_iack(struct pf_state *st, void *buf)
1319 iack->id = st->id;
1320 iack->creatorid = st->creatorid;
1324 pfsync_out_upd_c(struct pf_state *st, void *buf)
1329 up->id = st->id;
1330 up->creatorid = st->creatorid;
1332 mtx_enter(&st->mtx);
1333 pf_state_peer_hton(&st->src, &up->src);
1334 pf_state_peer_hton(&st->dst, &up->dst);
1335 up->timeout = st->timeout;
1336 mtx_leave(&st->mtx);
1340 pfsync_out_del(struct pf_state *st, void *buf)
1344 dp->id = st->id;
1345 dp->creatorid = st->creatorid;
1347 st->sync_state = PFSYNC_S_DEAD;
1370 struct pf_state *st;
1380 while ((st = TAILQ_FIRST(&s->s_qs[q])) != NULL) {
1381 TAILQ_REMOVE(&s->s_qs[q], st, sync_list);
1383 KASSERT(st->sync_state == q);
1385 st->sync_state = PFSYNC_S_NONE;
1386 pf_state_unref(st);
1458 struct pf_state *st;
1467 while ((st = TAILQ_FIRST(psq)) != NULL) {
1468 TAILQ_REMOVE(psq, st, sync_list);
1471 KASSERT(st->sync_state == q);
1473 st->sync_state = PFSYNC_S_NONE;
1475 pfsync_qs[q].write(st, ptr + off);
1478 pf_state_unref(st);
1608 pfsync_q_ins(struct pfsync_slice *s, struct pf_state *st, unsigned int q)
1614 KASSERT(st->sync_state == PFSYNC_S_NONE);
1632 pf_state_ref(st);
1633 TAILQ_INSERT_TAIL(&s->s_qs[q], st, sync_list);
1634 st->sync_state = q;
1641 pfsync_q_del(struct pfsync_slice *s, struct pf_state *st)
1643 unsigned int q = st->sync_state;
1646 KASSERT(st->sync_state < PFSYNC_S_NONE);
1648 st->sync_state = PFSYNC_S_NONE;
1649 TAILQ_REMOVE(&s->s_qs[q], st, sync_list);
1650 pf_state_unref(st);
1662 pfsync_init_state(struct pf_state *st, const struct pf_state_key *skw,
1668 SET(st->state_flags, PFSTATE_NOSYNC);
1670 if (ISSET(st->state_flags, PFSTATE_NOSYNC)) {
1671 st->sync_state = PFSYNC_S_DEAD;
1682 if (ISSET(st->state_flags, PFSTATE_ACK)) {
1683 CLR(st->state_flags, PFSTATE_ACK);
1686 st->sync_state = PFSYNC_S_SYNC;
1688 st->sync_state = PFSYNC_S_PFSYNC;
1693 pfsync_insert_state(struct pf_state *st)
1697 MUTEX_ASSERT_UNLOCKED(&st->mtx);
1699 if (ISSET(st->state_flags, PFSTATE_NOSYNC) ||
1700 st->sync_state == PFSYNC_S_DEAD)
1706 struct pfsync_slice *s = pfsync_slice_enter(sc, st);
1708 switch (st->sync_state) {
1711 pfsync_q_del(s, st);
1714 pfsync_q_ins(s, st, PFSYNC_S_INS);
1717 st->sync_state = PFSYNC_S_NONE; /* gross */
1718 pfsync_q_ins(s, st, PFSYNC_S_IACK);
1723 st->sync_state = PFSYNC_S_NONE;
1727 __func__, st, st->sync_state);
1737 pfsync_update_state(struct pf_state *st)
1741 MUTEX_ASSERT_UNLOCKED(&st->mtx);
1743 if (ISSET(st->state_flags, PFSTATE_NOSYNC) ||
1744 st->sync_state == PFSYNC_S_DEAD)
1750 struct pfsync_slice *s = pfsync_slice_enter(sc, st);
1753 switch (st->sync_state) {
1757 if (st->key[PF_SK_WIRE]->proto == IPPROTO_TCP) {
1758 st->sync_updates++;
1759 if (st->sync_updates >= sc->sc_maxupdates)
1769 pfsync_q_del(s, st);
1772 pfsync_q_ins(s, st, PFSYNC_S_UPD_C);
1773 st->sync_updates = 0;
1777 __func__, st, st->sync_state);
1781 if (!sync && (getuptime() - st->pfsync_time) < 2)
1792 pfsync_delete_state(struct pf_state *st)
1796 MUTEX_ASSERT_UNLOCKED(&st->mtx);
1798 if (ISSET(st->state_flags, PFSTATE_NOSYNC) ||
1799 st->sync_state == PFSYNC_S_DEAD)
1805 struct pfsync_slice *s = pfsync_slice_enter(sc, st);
1807 switch (st->sync_state) {
1810 pfsync_q_del(s, st);
1816 pfsync_q_del(s, st);
1819 pfsync_q_ins(s, st, PFSYNC_S_DEL);
1820 st->sync_updates = 0;
1828 __func__, st, st->sync_state);
1900 pfsync_state_in_use(struct pf_state *st)
1918 if (sc->sc_bulk_snd.snd_next == st ||
1919 sc->sc_bulk_snd.snd_tail == st)
1928 pfsync_defer(struct pf_state *st, struct mbuf *m)
1936 if (ISSET(st->state_flags, PFSTATE_NOSYNC) ||
1950 s = pfsync_slice_enter(sc, st);
1953 pd->pd_st = pf_state_ref(st);
1958 st->sync_defer = pd;
1981 pfsync_deferred(struct pfsync_softc *sc, struct pf_state *st)
1986 s = pfsync_slice_enter(sc, st);
1988 pd = st->sync_defer;
1995 st = pd->pd_st;
1996 st->sync_defer = NULL;
2018 struct pf_state *st;
2044 st = pd->pd_st;
2045 st->sync_defer = NULL;
2072 struct pf_state *st = pd->pd_st;
2074 if (st->rt == PF_ROUTETO) {
2075 if (pf_setup_pdesc(&pdesc, st->key[PF_SK_WIRE]->af,
2076 st->direction, NULL, pd->pd_m, NULL) != PF_PASS)
2078 switch (st->key[PF_SK_WIRE]->af) {
2080 pf_route(&pdesc, st);
2084 pf_route6(&pdesc, st);
2088 unhandled_af(st->key[PF_SK_WIRE]->af);
2092 switch (st->key[PF_SK_WIRE]->af) {
2102 unhandled_af(st->key[PF_SK_WIRE]->af);
2108 pf_state_unref(st);
2150 struct pf_state *st;
2155 st = sc->sc_bulk_snd.snd_next;
2163 mtx_enter(&st->mtx);
2164 pf_state_export(sp, st);
2165 mtx_leave(&st->mtx);
2171 if (st == sc->sc_bulk_snd.snd_tail) {
2175 st = NULL;
2187 st = TAILQ_NEXT(st, entry_list);
2191 sc->sc_bulk_snd.snd_next = st;
2358 pfsync_update_state_req(struct pfsync_softc *sc, struct pf_state *st)
2360 struct pfsync_slice *s = pfsync_slice_enter(sc, st);
2362 switch (st->sync_state) {
2365 pfsync_q_del(s, st);
2368 pfsync_q_ins(s, st, PFSYNC_S_UPD);
2378 __func__, st, st->sync_state);
2757 struct pf_state *head, *tail, *st, *next;
2783 st = NULL;
2787 while (st != tail) {
2788 st = next;
2789 next = TAILQ_NEXT(st, entry_list);
2791 if (creatorid != st->creatorid)
2793 if (kif != NULL && kif != st->kif)
2796 mtx_enter(&st->mtx);
2797 SET(st->state_flags, PFSTATE_NOSYNC);
2798 mtx_leave(&st->mtx);
2799 pf_remove_state(st);
2849 struct pf_state *st;
2859 st = pf_find_state_byid(&id_key);
2860 pf_state_ref(st);
2862 if (st == NULL)
2865 if (READ_ONCE(st->sync_defer) != NULL)
2866 pfsync_deferred(sc, st);
2868 pf_state_unref(st);
2873 pfsync_upd_tcp(struct pf_state *st, const struct pfsync_state_peer *src,
2883 if ((st->src.state > src->state &&
2884 (st->src.state < PF_TCPS_PROXY_SRC ||
2887 (st->src.state == src->state &&
2888 SEQ_GT(st->src.seqlo, ntohl(src->seqlo))))
2891 pf_state_peer_ntoh(src, &st->src);
2893 if ((st->dst.state > dst->state) ||
2895 (st->dst.state == dst->state &&
2896 SEQ_GT(st->dst.seqlo, ntohl(dst->seqlo))))
2899 pf_state_peer_ntoh(dst, &st->dst);
2905 pfsync_in_updates(struct pfsync_softc *sc, struct pf_state *st,
2913 if (src->scrub.scrub_flag && st->src.scrub == NULL) {
2920 if (dst->scrub.scrub_flag && st->dst.scrub == NULL) {
2928 if (READ_ONCE(st->sync_defer) != NULL)
2929 pfsync_deferred(sc, st);
2931 mtx_enter(&st->mtx);
2934 if (sscrub != NULL && st->src.scrub == NULL) {
2935 st->src.scrub = sscrub;
2938 if (dscrub != NULL && st->dst.scrub == NULL) {
2939 st->dst.scrub = dscrub;
2943 if (st->key[PF_SK_WIRE]->proto == IPPROTO_TCP)
2944 sync = pfsync_upd_tcp(st, src, dst);
2952 if (st->src.state > src->state)
2955 pf_state_peer_ntoh(src, &st->src);
2957 if (st->dst.state > dst->state)
2960 pf_state_peer_ntoh(dst, &st->dst);
2963 st->pfsync_time = getuptime();
2965 st->expire = st->pfsync_time;
2966 st->timeout = timeout;
2969 mtx_leave(&st->mtx);
2973 pfsync_update_state(st);
2990 struct pf_state *st;
3009 st = pf_find_state_byid(&id_key);
3010 pf_state_ref(st);
3012 if (st == NULL) {
3022 pfsync_in_updates(sc, st, &sp->src, &sp->dst, sp->timeout);
3024 pf_state_unref(st);
3065 struct pf_state *st;
3085 st = pf_find_state_byid(&id_key);
3086 pf_state_ref(st);
3088 if (st == NULL) {
3114 pfsync_in_updates(sc, st, &up->src, &up->dst, up->timeout);
3116 pf_state_unref(st);
3149 struct pf_state *st;
3164 st = pf_find_state_byid(&id_key);
3165 if (st != NULL && st->timeout < PFTM_MAX &&
3166 !ISSET(st->state_flags, PFSTATE_NOSYNC))
3167 pf_state_ref(st);
3169 st = NULL;
3171 if (st == NULL) {
3176 pfsync_update_state_req(sc, st);
3178 pf_state_unref(st);
3188 struct pf_state *st;
3199 st = pf_find_state_byid(&id_key);
3200 if (st == NULL) {
3205 mtx_enter(&st->mtx);
3206 SET(st->state_flags, PFSTATE_NOSYNC);
3207 mtx_leave(&st->mtx);
3208 pf_remove_state(st);
3220 struct pf_state *st;
3231 st = pf_find_state_byid(&id_key);
3232 if (st == NULL) {
3237 mtx_enter(&st->mtx);
3238 SET(st->state_flags, PFSTATE_NOSYNC);
3239 mtx_leave(&st->mtx);
3240 pf_remove_state(st);