コード例 #1
0
static int
accf_dataready_modcmd(modcmd_t cmd, void *arg)
{

	switch (cmd) {
	case MODULE_CMD_INIT:
		return accept_filt_add(&accf_data_filter);

	case MODULE_CMD_FINI:
		return accept_filt_del(&accf_data_filter);

	default:
		return ENOTTY;
	}
}
コード例 #2
0
int
accept_filt_generic_mod_event(module_t mod, int event, void *data)
{
	struct accept_filter *p;
	struct accept_filter *accfp = (struct accept_filter *) data;
	int	error;

	switch (event) {
	case MOD_LOAD:
		MALLOC(p, struct accept_filter *, sizeof(*p), M_ACCF, M_WAITOK);
		bcopy(accfp, p, sizeof(*p));
		crit_enter();
		error = accept_filt_add(p);
		crit_exit();
		break;

	case MOD_UNLOAD:
		/*
		 * Do not support unloading yet. we don't keep track of refcounts
		 * and unloading an accept filter callback and then having it called
		 * is a bad thing.  A simple fix would be to track the refcount
		 * in the struct accept_filter.
		 */
		if (unloadable != 0) {
			crit_enter();
			error = accept_filt_del(accfp->accf_name);
			crit_exit();
		} else
			error = EOPNOTSUPP;
		break;

	case MOD_SHUTDOWN:
		error = 0;
		break;

	default:
		error = EOPNOTSUPP;
		break;
	}

	return (error);
}