void pktgen_prime_ports(port_info_t * info) { uint8_t q; info->current_tx_count = info->prime_cnt; info->transmitting = 1; for(q = 0; q < wr_get_port_txcnt(pktgen.l2p, info->pid); q++ ) pktgen_set_q_flags(info, q, DO_TX_FLUSH); }
void pktgen_packet_rate(port_info_t *info) { uint64_t wire_size = (pktgen_wire_size(info) * 8); uint64_t link = (uint64_t)info->link.link_speed * Million; uint64_t pps = ((link / wire_size) * info->tx_rate) / 100; uint64_t cpp = (pps > 0) ? (pktgen.hz / pps) : (pktgen.hz / 4); info->tx_pps = pps; info->tx_cycles = ((cpp * info->tx_burst) / wr_get_port_txcnt(pktgen.l2p, info->pid)); }
void pktgen_stop_transmitting(port_info_t * info) { uint8_t q; if ( info->transmitting == 1 ) { info->transmitting = 0; for(q = 0; q < wr_get_port_txcnt(pktgen.l2p, info->pid); q++ ) pktgen_set_q_flags(info, q, DO_TX_CLEANUP); } }
void pktgen_start_transmitting(port_info_t * info) { uint8_t q; if ( info->transmitting == 0 ) { for(q = 0; q < wr_get_port_txcnt(pktgen.l2p, info->pid); q++ ) pktgen_set_q_flags(info, q, CLEAR_FAST_ALLOC_FLAG); info->current_tx_count = info->transmit_count; info->transmitting = 1; } }
void pktgen_packet_rate(port_info_t *info) { /* 0 1 2 3 4 5 6 7 8 9 10 */ static int64_t ff[11] = { 31, 30, 25, 30, 17, 17, 17, 20, 50, 60, 90 }; uint64_t wire_size = (pktgen_wire_size(info) * 8); uint64_t link = (uint64_t)info->link.link_speed * Million; uint64_t pps = ((link / wire_size) * info->tx_rate) / 100; uint64_t cpp = (pps > 0) ? (pktgen.hz / pps) : (pktgen.hz / 4); info->tx_pps = pps; info->tx_cycles = ((cpp * info->tx_burst) / wr_get_port_txcnt(pktgen.l2p, info->pid)); info->tx_cycles -= ff[info->tx_rate / 10]; }