/* * Module interface. */ static int npf_modcmd(modcmd_t cmd, void *arg) { switch (cmd) { case MODULE_CMD_INIT: return npf_init(); case MODULE_CMD_FINI: return npf_fini(); case MODULE_CMD_AUTOUNLOAD: if (npf_autounload_p()) { return EBUSY; } break; default: return ENOTTY; } return 0; }
/* * Module interface. */ static int npf_ext_log_modcmd(modcmd_t cmd, void *arg) { static const npf_ext_ops_t npf_log_ops = { .version = NPFEXT_LOG_VER, .ctx = NULL, .ctor = npf_log_ctor, .dtor = npf_log_dtor, .proc = npf_log }; int error; switch (cmd) { case MODULE_CMD_INIT: /* * Initialise the NPF logging extension. */ npf_ext_log_id = npf_ext_register("log", &npf_log_ops); if (!npf_ext_log_id) { return EEXIST; } break; case MODULE_CMD_FINI: error = npf_ext_unregister(npf_ext_log_id); if (error) { return error; } break; case MODULE_CMD_AUTOUNLOAD: /* Allow auto-unload only if NPF permits it. */ return npf_autounload_p() ? 0 : EBUSY; default: return ENOTTY; } return 0; }