Print this page
4851 IPsec should use NANOSEC & friends from time.h
*** 4217,4233 ****
timeout_id_t
sadb_retimeout(hrtime_t begin, queue_t *pfkey_q, void (*ager)(void *),
void *agerarg, uint_t *intp, uint_t intmax, short mid)
{
hrtime_t end = gethrtime();
! uint_t interval = *intp;
/*
* See how long this took. If it took too long, increase the
* aging interval.
*/
! if ((end - begin) > (hrtime_t)interval * (hrtime_t)1000000) {
if (interval >= intmax) {
/* XXX Rate limit this? Or recommend flush? */
(void) strlog(mid, 0, 0, SL_ERROR | SL_WARN,
"Too many SA's to age out in %d msec.\n",
intmax);
--- 4217,4233 ----
timeout_id_t
sadb_retimeout(hrtime_t begin, queue_t *pfkey_q, void (*ager)(void *),
void *agerarg, uint_t *intp, uint_t intmax, short mid)
{
hrtime_t end = gethrtime();
! uint_t interval = *intp; /* "interval" is in ms. */
/*
* See how long this took. If it took too long, increase the
* aging interval.
*/
! if ((end - begin) > MSEC2NSEC(interval)) {
if (interval >= intmax) {
/* XXX Rate limit this? Or recommend flush? */
(void) strlog(mid, 0, 0, SL_ERROR | SL_WARN,
"Too many SA's to age out in %d msec.\n",
intmax);
*** 4234,4244 ****
} else {
/* Double by shifting by one bit. */
interval <<= 1;
interval = min(interval, intmax);
}
! } else if ((end - begin) <= (hrtime_t)interval * (hrtime_t)500000 &&
interval > SADB_AGE_INTERVAL_DEFAULT) {
/*
* If I took less than half of the interval, then I should
* ratchet the interval back down. Never automatically
* shift below the default aging interval.
--- 4234,4244 ----
} else {
/* Double by shifting by one bit. */
interval <<= 1;
interval = min(interval, intmax);
}
! } else if ((end - begin) <= (MSEC2NSEC(interval) / 2) &&
interval > SADB_AGE_INTERVAL_DEFAULT) {
/*
* If I took less than half of the interval, then I should
* ratchet the interval back down. Never automatically
* shift below the default aging interval.
*** 4253,4263 ****
interval >>= 1;
interval = max(interval, SADB_AGE_INTERVAL_DEFAULT);
}
*intp = interval;
return (qtimeout(pfkey_q, ager, agerarg,
! drv_usectohz(interval * 1000)));
}
/*
* Update the lifetime values of an SA. This is the path an SADB_UPDATE
--- 4253,4263 ----
interval >>= 1;
interval = max(interval, SADB_AGE_INTERVAL_DEFAULT);
}
*intp = interval;
return (qtimeout(pfkey_q, ager, agerarg,
! drv_usectohz(interval * (MICROSEC / MILLISEC))));
}
/*
* Update the lifetime values of an SA. This is the path an SADB_UPDATE