示例#1
0
int
priq_add_queue(struct priq_if *pif, int priority, u_int32_t qlimit,
    int flags, u_int32_t qid, struct priq_class **clp)
{
	struct priq_class *cl;

	IFCQ_LOCK_ASSERT_HELD(pif->pif_ifq);

	/* check parameters */
	if (priority >= PRIQ_MAXPRI)
		return (EINVAL);
	if (pif->pif_classes[priority] != NULL)
		return (EBUSY);
	if (priq_clh_to_clp(pif, qid) != NULL)
		return (EBUSY);

	cl = priq_class_create(pif, priority, qlimit, flags, qid);
	if (cl == NULL)
		return (ENOMEM);

	if (clp != NULL)
		*clp = cl;

	return (0);
}
示例#2
0
int
priq_add_queue(struct pf_altq *a)
{
	struct priq_if *pif;
	struct priq_class *cl;

	if ((pif = a->altq_disc) == NULL)
		return (EINVAL);

	/* check parameters */
	if (a->priority >= PRIQ_MAXPRI)
		return (EINVAL);
	if (a->qid == 0)
		return (EINVAL);
	if (pif->pif_classes[a->priority] != NULL)
		return (EBUSY);
	if (clh_to_clp(pif, a->qid) != NULL)
		return (EBUSY);

	cl = priq_class_create(pif, a->priority, a->qlimit,
	    a->pq_u.priq_opts.flags, a->qid);
	if (cl == NULL)
		return (ENOMEM);

	return (0);
}
示例#3
0
static int
priq_add_queue_locked(struct pf_altq *a, struct priq_if *pif)
{
	struct priq_class *cl;

	KKASSERT(a->priority < PRIQ_MAXPRI);
	KKASSERT(a->qid != 0);

	if (pif->pif_classes[a->priority] != NULL)
		return (EBUSY);
	if (clh_to_clp(pif, a->qid) != NULL)
		return (EBUSY);

	cl = priq_class_create(pif, a->priority, a->qlimit,
			       a->pq_u.priq_opts.flags, a->qid);
	if (cl == NULL)
		return (ENOMEM);

	return (0);
}