Esempio n. 1
0
int common_rmt_requeue_scheduling_policy_tx(struct rmt_ps *ps,
					    struct rmt_n1_port *n1_port,
					    struct pdu *pdu)
{
	struct rmt_kqueue *q;
	struct rmt_qgroup *qg;
	struct rmt_ps_common_data *data = ps->priv;

	if (!ps || !n1_port || !pdu) {
		LOG_ERR("Wrong input parameters");
		return -1;
	}

	qg = rmt_qgroup_find(data->outqs, n1_port->port_id);
	if (!qg) {
		LOG_ERR("Could not find queue group for n1_port %u",
			n1_port->port_id);
		pdu_destroy(pdu);
		return -1;
	}

	q = rmt_kqueue_find(qg, 0);
	if (!qg) {
		LOG_ERR("Could not find queue in the group for n1_port %u",
			n1_port->port_id);
		pdu_destroy(pdu);
		return -1;
	}

	rfifo_head_push_ni(q->queue, pdu);
	return 0;
}
Esempio n. 2
0
static int
default_rmt_enqueue_scheduling_policy_tx(struct rmt_ps *      ps,
                                         struct rmt_n1_port * n1_port,
                                         struct pdu *         pdu)
{
        struct rmt_kqueue *  q;
        struct rmt_qgroup *  qg;
        struct rmt_ps_data * data = ps->priv;

        if (!ps || !n1_port || !pdu) {
                LOG_ERR("Wrong input parameters for "
                        "rmt_enqueu_scheduling_policy_tx");
                return -1;
        }

        /* NOTE: The policy is called with the n1_port lock taken */
        qg = rmt_qgroup_find(data->outqs, n1_port->port_id);
        if (!qg) {
                LOG_ERR("Could not find queue group for n1_port %u",
                        n1_port->port_id);
                pdu_destroy(pdu);
                return -1;
        }
        q = rmt_kqueue_find(qg, 0);
        if (!qg) {
                LOG_ERR("Could not find queue in the group for n1_port %u",
                        n1_port->port_id);
                pdu_destroy(pdu);
                return -1;
        }

        rfifo_push_ni(q->queue, pdu);
        return 0;
}
Esempio n. 3
0
struct pdu *common_rmt_next_scheduled_policy_tx(struct rmt_ps *ps,
						struct rmt_n1_port *n1_port)
{
	struct rmt_kqueue *q;
	struct rmt_qgroup *qg;
	struct rmt_ps_common_data *data = ps->priv;
	struct pdu *ret_pdu;

	if (!ps || !n1_port) {
		LOG_ERR("Wrong input parameters");
		return NULL;
	}

	/* NOTE: The policy is called with the n1_port lock taken */
	qg = rmt_qgroup_find(data->outqs, n1_port->port_id);
	if (!qg) {
		LOG_ERR("Could not find queue group for n1_port %u",
			n1_port->port_id);
		return NULL;
	}

	q = rmt_kqueue_find(qg, 0);
	if (!q) {
		LOG_ERR("Could not find queue in the group for n1_port %u",
			n1_port->port_id);
		return NULL;
	}

	ret_pdu = rfifo_pop(q->queue);
	if (!ret_pdu) {
		LOG_ERR("Could not dequeue scheduled pdu");
		return NULL;
	}

	return ret_pdu;
}