Skip to content

Commit

Permalink
app/test: allow to create packets of different sizes
Browse files Browse the repository at this point in the history
Add support to allow packet burst generator to create packets
in different sizes.

Signed-off-by: Cunming Liang <cunming.liang@intel.com>
Acked-by: Declan Doherty <declan.doherty@intel.com>
  • Loading branch information
ileungcm authored and Thomas Monjalon committed Nov 12, 2014
1 parent 5974ee0 commit a9c9e96
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 33 deletions.
26 changes: 9 additions & 17 deletions app/test/packet_burst_generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,20 +191,12 @@ initialize_ipv4_header(struct ipv4_hdr *ip_hdr, uint32_t src_addr,
*/
#define RTE_MAX_SEGS_PER_PKT 255 /**< pkt.nb_segs is a 8-bit unsigned char. */

#define TXONLY_DEF_PACKET_LEN 64
#define TXONLY_DEF_PACKET_LEN_128 128

uint16_t tx_pkt_length = TXONLY_DEF_PACKET_LEN;
uint16_t tx_pkt_seg_lengths[RTE_MAX_SEGS_PER_PKT] = {
TXONLY_DEF_PACKET_LEN_128,
};

uint8_t tx_pkt_nb_segs = 1;

int
generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
struct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,
uint8_t ipv4, struct udp_hdr *udp_hdr, int nb_pkt_per_burst)
struct ether_hdr *eth_hdr, uint8_t vlan_enabled,
void *ip_hdr, uint8_t ipv4, struct udp_hdr *udp_hdr,
int nb_pkt_per_burst, uint8_t pkt_len,
uint8_t nb_pkt_segs)
{
int i, nb_pkt = 0;
size_t eth_hdr_size;
Expand All @@ -221,17 +213,17 @@ generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
break;
}

pkt->data_len = tx_pkt_seg_lengths[0];
pkt->data_len = pkt_len;
pkt_seg = pkt;
for (i = 1; i < tx_pkt_nb_segs; i++) {
for (i = 1; i < nb_pkt_segs; i++) {
pkt_seg->next = rte_pktmbuf_alloc(mp);
if (pkt_seg->next == NULL) {
pkt->nb_segs = i;
rte_pktmbuf_free(pkt);
goto nomore_mbuf;
}
pkt_seg = pkt_seg->next;
pkt_seg->data_len = tx_pkt_seg_lengths[i];
pkt_seg->data_len = pkt_len;
}
pkt_seg->next = NULL; /* Last segment of packet. */

Expand Down Expand Up @@ -259,8 +251,8 @@ generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
* Complete first mbuf of packet and append it to the
* burst of packets to be transmitted.
*/
pkt->nb_segs = tx_pkt_nb_segs;
pkt->pkt_len = tx_pkt_length;
pkt->nb_segs = nb_pkt_segs;
pkt->pkt_len = pkt_len;
pkt->l2_len = eth_hdr_size;

if (ipv4) {
Expand Down
11 changes: 8 additions & 3 deletions app/test/packet_burst_generator.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,13 @@ extern "C" {
#define IPV4_ADDR(a, b, c, d)(((a & 0xff) << 24) | ((b & 0xff) << 16) | \
((c & 0xff) << 8) | (d & 0xff))

#define PACKET_BURST_GEN_PKT_LEN 60
#define PACKET_BURST_GEN_PKT_LEN_128 128

void
initialize_eth_header(struct ether_hdr *eth_hdr, struct ether_addr *src_mac,
struct ether_addr *dst_mac, uint8_t vlan_enabled, uint16_t van_id);
struct ether_addr *dst_mac, uint8_t vlan_enabled,
uint16_t van_id);

uint16_t
initialize_udp_header(struct udp_hdr *udp_hdr, uint16_t src_port,
Expand All @@ -67,8 +70,10 @@ initialize_ipv4_header(struct ipv4_hdr *ip_hdr, uint32_t src_addr,

int
generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,
struct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,
uint8_t ipv4, struct udp_hdr *udp_hdr, int nb_pkt_per_burst);
struct ether_hdr *eth_hdr, uint8_t vlan_enabled,
void *ip_hdr, uint8_t ipv4, struct udp_hdr *udp_hdr,
int nb_pkt_per_burst, uint8_t pkt_len,
uint8_t nb_pkt_segs);

#ifdef __cplusplus
}
Expand Down
39 changes: 26 additions & 13 deletions app/test/test_link_bonding.c
Original file line number Diff line number Diff line change
Expand Up @@ -1192,9 +1192,12 @@ generate_test_burst(struct rte_mbuf **pkts_burst, uint16_t burst_size,
}

/* Generate burst of packets to transmit */
generated_burst_size = generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr, vlan, ip_hdr, ipv4,
test_params->pkt_udp_hdr, burst_size);
generated_burst_size =
generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr,
vlan, ip_hdr, ipv4,
test_params->pkt_udp_hdr, burst_size,
PACKET_BURST_GEN_PKT_LEN_128, 1);
if (generated_burst_size != burst_size) {
printf("Failed to generate packet burst");
return -1;
Expand Down Expand Up @@ -1781,9 +1784,12 @@ test_activebackup_tx_burst(void)
}

/* Generate a burst of packets to transmit */
generated_burst_size = generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr,
1, test_params->pkt_udp_hdr, burst_size);
generated_burst_size =
generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr, 0,
test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size,
PACKET_BURST_GEN_PKT_LEN, 1);
if (generated_burst_size != burst_size)
return -1;

Expand Down Expand Up @@ -2435,17 +2441,21 @@ test_balance_l2_tx_burst(void)

/* Generate a burst 1 of packets to transmit */
if (generate_packet_burst(test_params->mbuf_pool, &pkts_burst[0][0],
test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size[0]) != burst_size[0])
test_params->pkt_eth_hdr, 0,
test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size[0],
PACKET_BURST_GEN_PKT_LEN, 1) != burst_size[0])
return -1;

initialize_eth_header(test_params->pkt_eth_hdr,
(struct ether_addr *)src_mac, (struct ether_addr *)dst_mac_1, 0, 0);

/* Generate a burst 2 of packets to transmit */
if (generate_packet_burst(test_params->mbuf_pool, &pkts_burst[1][0],
test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size[1]) != burst_size[1])
test_params->pkt_eth_hdr, 0,
test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size[1],
PACKET_BURST_GEN_PKT_LEN, 1) != burst_size[1])
return -1;

/* Send burst 1 on bonded port */
Expand Down Expand Up @@ -3263,9 +3273,12 @@ test_broadcast_tx_burst(void)
}

/* Generate a burst of packets to transmit */
generated_burst_size = generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr, 0, test_params->pkt_ipv4_hdr,
1, test_params->pkt_udp_hdr, burst_size);
generated_burst_size =
generate_packet_burst(test_params->mbuf_pool,
pkts_burst, test_params->pkt_eth_hdr, 0,
test_params->pkt_ipv4_hdr, 1,
test_params->pkt_udp_hdr, burst_size,
PACKET_BURST_GEN_PKT_LEN, 1);
if (generated_burst_size != burst_size)
return -1;

Expand Down

0 comments on commit a9c9e96

Please sign in to comment.