Lines Matching defs:tdb

162 	TAILQ_HEAD(, tdb)	 s_tdb_q;
1293 static void pfsync_out_tdb(struct tdb *, void *);
1352 pfsync_tdb_enter(struct tdb *tdb)
1354 mtx_enter(&tdb->tdb_mtx);
1358 pfsync_tdb_leave(struct tdb *tdb)
1360 unsigned int snapped = ISSET(tdb->tdb_flags, TDBF_PFSYNC_SNAPPED);
1361 mtx_leave(&tdb->tdb_mtx);
1363 wakeup_one(&tdb->tdb_updates);
1373 struct tdb *tdb;
1391 while ((tdb = TAILQ_FIRST(&s->s_tdb_q)) != NULL) {
1392 TAILQ_REMOVE(&s->s_tdb_q, tdb, tdb_sync_entry);
1394 pfsync_tdb_enter(tdb);
1395 KASSERT(ISSET(tdb->tdb_flags, TDBF_PFSYNC));
1396 CLR(tdb->tdb_flags, TDBF_PFSYNC);
1397 pfsync_tdb_leave(tdb);
1488 struct tdb *tdb;
1494 while ((tdb = TAILQ_FIRST(&s->s_tdb_q)) != NULL) {
1495 TAILQ_REMOVE(&s->s_tdb_q, tdb, tdb_sync_entry);
1498 pfsync_tdb_enter(tdb);
1499 KASSERT(ISSET(tdb->tdb_flags, TDBF_PFSYNC));
1502 pfsync_out_tdb(tdb, ptr + off);
1504 CLR(tdb->tdb_flags, TDBF_PFSYNC);
1505 pfsync_tdb_leave(tdb);
2387 pfsync_out_tdb(struct tdb *tdb, void *buf)
2392 ut->spi = tdb->tdb_spi;
2393 memcpy(&ut->dst, &tdb->tdb_dst, sizeof(ut->dst));
2406 * to extend struct tdb.
2407 * XXX pt->rpl can wrap over MAXINT, but if so the real tdb
2412 ut->rpl = htobe64(tdb->tdb_rpl +
2413 (ISSET(tdb->tdb_flags, TDBF_PFSYNC_RPL) ? RPL_INCR : 0));
2414 ut->cur_bytes = htobe64(tdb->tdb_cur_bytes);
2415 ut->sproto = tdb->tdb_sproto;
2416 ut->rdomain = htons(tdb->tdb_rdomain);
2420 pfsync_slice_enter_tdb(struct pfsync_softc *sc, const struct tdb *t)
2439 pfsync_tdb_ins(struct pfsync_slice *s, struct tdb *tdb)
2447 MUTEX_ASSERT_UNLOCKED(&tdb->tdb_mtx);
2465 TAILQ_INSERT_TAIL(&s->s_tdb_q, tdb, tdb_sync_entry);
2466 tdb->tdb_updates = 0;
2473 pfsync_tdb_del(struct pfsync_slice *s, struct tdb *tdb)
2476 MUTEX_ASSERT_UNLOCKED(&tdb->tdb_mtx);
2478 TAILQ_REMOVE(&s->s_tdb_q, tdb, tdb_sync_entry);
2486 * the reference that pfsync has to a tdb is accounted for by the
2488 * called after all other references to a tdb are dropped (with
2491 * tdb_free() needs to wait for pfsync to let go of the tdb though,
2499 pfsync_update_tdb(struct tdb *tdb, int output)
2503 MUTEX_ASSERT_UNLOCKED(&tdb->tdb_mtx);
2508 struct pfsync_slice *s = pfsync_slice_enter_tdb(sc, tdb);
2511 if (!ISSET(tdb->tdb_flags, TDBF_PFSYNC)) {
2512 mtx_enter(&tdb->tdb_mtx);
2513 SET(tdb->tdb_flags, TDBF_PFSYNC);
2514 mtx_leave(&tdb->tdb_mtx);
2516 pfsync_tdb_ins(s, tdb);
2517 } else if (++tdb->tdb_updates >= sc->sc_maxupdates)
2528 pfsync_delete_tdb(struct tdb *tdb)
2532 MUTEX_ASSERT_UNLOCKED(&tdb->tdb_mtx);
2537 struct pfsync_slice *s = pfsync_slice_enter_tdb(sc, tdb);
2540 if (ISSET(tdb->tdb_flags, TDBF_PFSYNC)) {
2541 pfsync_tdb_del(s, tdb);
2543 mtx_enter(&tdb->tdb_mtx);
2544 CLR(tdb->tdb_flags, TDBF_PFSYNC);
2545 mtx_leave(&tdb->tdb_mtx);
2557 mtx_enter(&tdb->tdb_mtx);
2558 SET(tdb->tdb_flags, TDBF_PFSYNC_SNAPPED); /* like a thanos snap */
2559 while (ISSET(tdb->tdb_flags, TDBF_PFSYNC)) {
2560 msleep_nsec(&tdb->tdb_updates, &tdb->tdb_mtx, PWAIT,
2563 mtx_leave(&tdb->tdb_mtx);
3264 /* Update an in-kernel tdb. Silently fail if no tdb is found. */
3268 struct tdb *tdb;
3278 tdb = gettdb(ntohs(pt->rdomain), pt->spi,
3280 if (tdb) {
3285 mtx_enter(&tdb->tdb_mtx);
3286 if (rpl >= tdb->tdb_rpl &&
3287 cur_bytes >= tdb->tdb_cur_bytes) {
3288 tdb->tdb_rpl = rpl;
3289 tdb->tdb_cur_bytes = cur_bytes;
3291 mtx_leave(&tdb->tdb_mtx);
3293 tdb_unref(tdb);