Lines Matching refs:sch

127 static void	 syncache_timeout(struct syncache *sc, struct syncache_head *sch,
202 #define SCH_LOCK(sch) mtx_lock(&(sch)->sch_mtx)
203 #define SCH_UNLOCK(sch) mtx_unlock(&(sch)->sch_mtx)
204 #define SCH_LOCK_ASSERT(sch) mtx_assert(&(sch)->sch_mtx, MA_OWNED)
279 struct syncache_head *sch;
286 sch = &V_tcp_syncache.hashbase[i];
287 callout_drain(&sch->sch_timer);
289 SCH_LOCK(sch);
290 TAILQ_FOREACH_SAFE(sc, &sch->sch_bucket, sc_hash, nsc)
291 syncache_drop(sc, sch);
292 SCH_UNLOCK(sch);
293 KASSERT(TAILQ_EMPTY(&sch->sch_bucket),
294 ("%s: sch->sch_bucket not empty", __func__));
295 KASSERT(sch->sch_length == 0, ("%s: sch->sch_length %d not 0",
296 __func__, sch->sch_length));
297 mtx_destroy(&sch->sch_mtx);
323 syncache_insert(struct syncache *sc, struct syncache_head *sch)
327 SCH_LOCK(sch);
333 if (sch->sch_length >= V_tcp_syncache.bucket_limit) {
334 KASSERT(!TAILQ_EMPTY(&sch->sch_bucket),
335 ("sch->sch_length incorrect"));
336 sc2 = TAILQ_LAST(&sch->sch_bucket, sch_head);
337 syncache_drop(sc2, sch);
342 TAILQ_INSERT_HEAD(&sch->sch_bucket, sc, sc_hash);
343 sch->sch_length++;
354 if (sch->sch_length == 1)
355 sch->sch_nextc = ticks + INT_MAX;
356 syncache_timeout(sc, sch, 1);
358 SCH_UNLOCK(sch);
368 syncache_drop(struct syncache *sc, struct syncache_head *sch)
371 SCH_LOCK_ASSERT(sch);
373 TAILQ_REMOVE(&sch->sch_bucket, sc, sc_hash);
374 sch->sch_length--;
391 syncache_timeout(struct syncache *sc, struct syncache_head *sch, int docallout)
396 if (TSTMP_LT(sc->sc_rxttime, sch->sch_nextc)) {
397 sch->sch_nextc = sc->sc_rxttime;
399 callout_reset(&sch->sch_timer, sch->sch_nextc - ticks,
400 syncache_timer, (void *)sch);
412 struct syncache_head *sch = (struct syncache_head *)xsch;
417 CURVNET_SET(sch->sch_vnet);
420 SCH_LOCK_ASSERT(sch);
426 sch->sch_nextc = tick + INT_MAX;
428 TAILQ_FOREACH_SAFE(sc, &sch->sch_bucket, sc_hash, nsc) {
438 if (TSTMP_LT(sc->sc_rxttime, sch->sch_nextc))
439 sch->sch_nextc = sc->sc_rxttime;
449 syncache_drop(sc, sch);
462 syncache_timeout(sc, sch, 0);
464 if (!TAILQ_EMPTY(&(sch)->sch_bucket))
465 callout_reset(&(sch)->sch_timer, (sch)->sch_nextc - tick,
466 syncache_timer, (void *)(sch));
478 struct syncache_head *sch;
482 sch = &V_tcp_syncache.hashbase[
484 *schp = sch;
486 SCH_LOCK(sch);
489 TAILQ_FOREACH(sc, &sch->sch_bucket, sc_hash) {
496 sch = &V_tcp_syncache.hashbase[
498 *schp = sch;
500 SCH_LOCK(sch);
503 TAILQ_FOREACH(sc, &sch->sch_bucket, sc_hash) {
513 return (NULL); /* always returns with locked sch */
525 struct syncache_head *sch;
528 sc = syncache_lookup(inc, &sch); /* returns locked sch */
529 SCH_LOCK_ASSERT(sch);
575 syncache_drop(sc, sch);
592 SCH_UNLOCK(sch);
599 struct syncache_head *sch;
601 sc = syncache_lookup(inc, &sch); /* returns locked sch */
602 SCH_LOCK_ASSERT(sch);
604 syncache_drop(sc, sch);
607 SCH_UNLOCK(sch);
614 struct syncache_head *sch;
616 sc = syncache_lookup(inc, &sch); /* returns locked sch */
617 SCH_LOCK_ASSERT(sch);
637 syncache_drop(sc, sch);
640 SCH_UNLOCK(sch);
916 struct syncache_head *sch;
928 sc = syncache_lookup(inc, &sch); /* returns locked sch */
929 SCH_LOCK_ASSERT(sch);
941 SCH_UNLOCK(sch);
949 sc = syncookie_lookup(inc, sch, &scs, to, th, *lsop);
950 SCH_UNLOCK(sch);
960 TAILQ_REMOVE(&sch->sch_bucket, sc, sc_hash);
961 sch->sch_length--;
969 SCH_UNLOCK(sch);
1054 struct syncache_head *sch;
1132 sc = syncache_lookup(inc, &sch); /* returns locked entry */
1133 SCH_LOCK_ASSERT(sch);
1169 syncache_timeout(sc, sch, 1);
1173 SCH_UNLOCK(sch);
1185 if ((sc = TAILQ_LAST(&sch->sch_bucket, sch_head)) != NULL)
1186 syncache_drop(sc, sch);
1193 SCH_UNLOCK(sch);
1298 syncookie_generate(sch, sc, &flowtmp);
1310 SCH_UNLOCK(sch);
1319 syncache_insert(sc, sch); /* locks and unlocks sch */
1624 syncookie_generate(struct syncache_head *sch, struct syncache *sc,
1634 SCH_LOCK_ASSERT(sch);
1637 secbits = sch->sch_oddeven ?
1638 sch->sch_secbits_odd : sch->sch_secbits_even;
1641 if (sch->sch_reseed < time_uptime) {
1642 sch->sch_oddeven = sch->sch_oddeven ? 0 : 1; /* toggle */
1643 secbits = sch->sch_oddeven ?
1644 sch->sch_secbits_odd : sch->sch_secbits_even;
1647 sch->sch_reseed = time_uptime + SYNCOOKIE_LIFETIME;
1661 data = sch->sch_oddeven;/* odd or even secret, 1 bit */
1697 syncookie_lookup(struct in_conninfo *inc, struct syncache_head *sch,
1708 SCH_LOCK_ASSERT(sch);
1721 secbits = (flags & 0x1) ? sch->sch_secbits_odd : sch->sch_secbits_even;
1727 if (sch->sch_reseed + SYNCOOKIE_LIFETIME < time_uptime) {
1808 struct syncache_head *sch;
1813 sch = &V_tcp_syncache.hashbase[i];
1814 count += sch->sch_length;
1833 struct syncache_head *sch;
1837 sch = &V_tcp_syncache.hashbase[i];
1838 SCH_LOCK(sch);
1839 TAILQ_FOREACH(sc, &sch->sch_bucket, sc_hash) {
1841 SCH_UNLOCK(sch);
1861 SCH_UNLOCK(sch);
1866 SCH_UNLOCK(sch);