red_stats
sp->xmit_cnt = rp->red_stats.xmit_cnt;
sp->drop_cnt = rp->red_stats.drop_cnt;
sp->drop_forced = rp->red_stats.drop_forced;
sp->drop_unforced = rp->red_stats.drop_unforced;
sp->marked_packets = rp->red_stats.marked_packets;
rp->red_stats.marked_packets++;
rp->red_stats.drop_unforced++;
rp->red_stats.drop_forced++;
PKTCNTR_ADD(&rp->red_stats.drop_cnt, m_pktlen(m));
PKTCNTR_ADD(&rp->red_stats.xmit_cnt, m_pktlen(m));
struct red_stats *q_stats;
q_stats = (struct red_stats *)addr;
q_stats->xmit_cnt = rp->red_stats.xmit_cnt;
q_stats->drop_cnt = rp->red_stats.drop_cnt;
q_stats->drop_forced = rp->red_stats.drop_forced;
q_stats->drop_unforced = rp->red_stats.drop_unforced;
q_stats->marked_packets = rp->red_stats.marked_packets;
#define RED_GETSTATS _IOWR('Q', 12, struct red_stats)
} red_stats;
struct red_stats red_stats;
strlcpy(red_stats.iface.red_ifname, ifname,
sizeof(red_stats.iface.red_ifname));
if (ioctl(fd, RED_GETSTATS, &red_stats) < 0)
red_stats.weight, red_stats.inv_pmax,
red_stats.th_min, red_stats.th_max);
red_stats.q_len,
((double)red_stats.q_avg)/(double)avg_scale,
red_stats.q_limit);
(ull)red_stats.xmit_cnt.packets,
(ull)red_stats.drop_cnt.packets,
red_stats.drop_forced, red_stats.drop_unforced);
if (red_stats.marked_packets != 0)
printf(" marked: %u\n", red_stats.marked_packets);
rate2str(calc_rate(red_stats.xmit_cnt.bytes,
if (red_stats.fv_alloc > 0) {
red_stats.fv_alloc, red_stats.fv_flows);
red_stats.fv_predrop, red_stats.fv_pass,
red_stats.fv_escape);
last_bytes = red_stats.xmit_cnt.bytes;