diff --git a/sys/net/ifdi_if.m b/sys/net/ifdi_if.m --- a/sys/net/ifdi_if.m +++ b/sys/net/ifdi_if.m @@ -321,6 +321,10 @@ if_ctx_t _ctx; } DEFAULT null_void_op; +METHOD void admin_completion_handle { + if_ctx_t _ctx; +} DEFAULT null_void_op; + # # interface configuration # diff --git a/sys/net/iflib.h b/sys/net/iflib.h --- a/sys/net/iflib.h +++ b/sys/net/iflib.h @@ -398,6 +398,11 @@ */ #define IFLIB_PSEUDO_ETHER 0x80000 +/* + * Interface has an admin completion queue + */ +#define IFLIB_HAS_ADMINCQ 0x100000 + /* * These enum values are used in iflib_needs_restart to indicate to iflib * functions whether or not the interface needs restarting when certain events diff --git a/sys/net/iflib.c b/sys/net/iflib.c --- a/sys/net/iflib.c +++ b/sys/net/iflib.c @@ -4008,6 +4008,8 @@ callout_stop(&txq->ift_timer); CALLOUT_UNLOCK(txq); } + if (ctx->ifc_sctx->isc_flags & IFLIB_HAS_ADMINCQ) + IFDI_ADMIN_COMPLETION_HANDLE(ctx); if (do_watchdog) { ctx->ifc_watchdog_events++; IFDI_WATCHDOG_RESET(ctx);