Example #1
0
int
delay_apply(void *d, struct pktq *pktq)
{
    struct delay_data *data = (struct delay_data *)d;
    struct pkt *pkt;

    if (data->which == DELAY_FIRST)
        pkt = TAILQ_FIRST(pktq);
    else if (data->which == DELAY_LAST)
        pkt = TAILQ_LAST(pktq, pktq);
    else
        pkt = pktq_random(data->rnd, pktq);

    memcpy(&pkt->pkt_ts, &data->tv, sizeof(pkt->pkt_ts));

    return (0);
}
Example #2
0
int
drop_apply(void *d, struct pktq *pktq)
{
	struct drop_data *data = (struct drop_data *)d;
	struct pkt *pkt;

	if (data->percent < 100 &&
	    (rand_uint16(data->rnd) % 100) > data->percent)
		return (0);
	
	if (data->which == DROP_FIRST)
		pkt = TAILQ_FIRST(pktq);
	else if (data->which == DROP_LAST)
		pkt = TAILQ_LAST(pktq, pktq);
	else
		pkt = pktq_random(data->rnd, pktq);

	TAILQ_REMOVE(pktq, pkt, pkt_next);
	pkt_free(pkt);
	
	return (0);
}