test/performance/odp_pktio_perf.c
static odp_packet_t pktio_create_packet(uint32_t seq)
{
	odp_packet_t pkt;
	odph_ethhdr_t *eth;
	odph_ipv4hdr_t *ip;
	odph_udphdr_t *udp;
	char *buf;
	uint32_t offset;
	pkt_head_t pkt_hdr;
	size_t payload_len;

	payload_len = sizeof(pkt_hdr) + gbl_args->args.pkt_len;

	pkt = odp_packet_alloc(gbl_args->transmit_pkt_pool,
			       payload_len + ODPH_UDPHDR_LEN +
			       ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);

	if (pkt == ODP_PACKET_INVALID)
		return ODP_PACKET_INVALID;

	buf = odp_packet_data(pkt);

	/* Ethernet */
	offset = 0;
	odp_packet_l2_offset_set(pkt, offset);
	eth = (odph_ethhdr_t *)buf;
	memcpy(eth->src.addr, gbl_args->src_mac, ODPH_ETHADDR_LEN);
	memcpy(eth->dst.addr, gbl_args->dst_mac, ODPH_ETHADDR_LEN);
	eth->type = odp_cpu_to_be_16(ODPH_ETHTYPE_IPV4);

	/* IP */
	offset += ODPH_ETHHDR_LEN;
	odp_packet_l3_offset_set(pkt, ODPH_ETHHDR_LEN);
	ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
	ip->dst_addr = odp_cpu_to_be_32(0);
	ip->src_addr = odp_cpu_to_be_32(0);
	ip->ver_ihl = ODPH_IPV4 << 4 | ODPH_IPV4HDR_IHL_MIN;
	ip->tot_len = odp_cpu_to_be_16(payload_len + ODPH_UDPHDR_LEN +
				       ODPH_IPV4HDR_LEN);
	ip->ttl = 128;
	ip->proto = ODPH_IPPROTO_UDP;
	ip->id = odp_cpu_to_be_16(seq);
	ip->chksum = 0;
	odph_ipv4_csum_update(pkt);

	/* UDP */
	offset += ODPH_IPV4HDR_LEN;
	odp_packet_l4_offset_set(pkt, offset);
	udp = (odph_udphdr_t *)(buf + offset);
	udp->src_port = odp_cpu_to_be_16(0);
	udp->dst_port = odp_cpu_to_be_16(0);
	udp->length = odp_cpu_to_be_16(payload_len + ODPH_UDPHDR_LEN);
	udp->chksum = 0;

	/* payload */
	offset += ODPH_UDPHDR_LEN;
	pkt_hdr.magic = TEST_HDR_MAGIC;
	if (odp_packet_copy_from_mem(pkt, offset, sizeof(pkt_hdr),
				     &pkt_hdr) != 0)
		ODPH_ABORT("Failed to generate test packet.\n");

	return pkt;
}
/*
 * Generate a single test packet for transmission.
 */
Generate a single test packet for transmission.
Generate a single test packet for transmission .
static odp_packet_t pktio_create_packet(uint32_t seq)
{
	odp_packet_t pkt;
	odph_ethhdr_t *eth;
	odph_ipv4hdr_t *ip;
	odph_udphdr_t *udp;
	char *buf;
	uint32_t offset;
	pkt_head_t pkt_hdr;
	size_t payload_len;
	payload_len = sizeof(pkt_hdr) + gbl_args->args.pkt_len;
	pkt = odp_packet_alloc(gbl_args->transmit_pkt_pool,
			       payload_len + ODPH_UDPHDR_LEN +
			       ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
	if (pkt == ODP_PACKET_INVALID)
		return ODP_PACKET_INVALID;
	buf = odp_packet_data(pkt);
	offset = 0;
	odp_packet_l2_offset_set(pkt, offset);
	eth = (odph_ethhdr_t *)buf;
	memcpy(eth->src.addr, gbl_args->src_mac, ODPH_ETHADDR_LEN);
	memcpy(eth->dst.addr, gbl_args->dst_mac, ODPH_ETHADDR_LEN);
	eth->type = odp_cpu_to_be_16(ODPH_ETHTYPE_IPV4);
	offset += ODPH_ETHHDR_LEN;
	odp_packet_l3_offset_set(pkt, ODPH_ETHHDR_LEN);
	ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
	ip->dst_addr = odp_cpu_to_be_32(0);
	ip->src_addr = odp_cpu_to_be_32(0);
	ip->ver_ihl = ODPH_IPV4 << 4 | ODPH_IPV4HDR_IHL_MIN;
	ip->tot_len = odp_cpu_to_be_16(payload_len + ODPH_UDPHDR_LEN +
				       ODPH_IPV4HDR_LEN);
	ip->ttl = 128;
	ip->proto = ODPH_IPPROTO_UDP;
	ip->id = odp_cpu_to_be_16(seq);
	ip->chksum = 0;
	odph_ipv4_csum_update(pkt);
	offset += ODPH_IPV4HDR_LEN;
	odp_packet_l4_offset_set(pkt, offset);
	udp = (odph_udphdr_t *)(buf + offset);
	udp->src_port = odp_cpu_to_be_16(0);
	udp->dst_port = odp_cpu_to_be_16(0);
	udp->length = odp_cpu_to_be_16(payload_len + ODPH_UDPHDR_LEN);
	udp->chksum = 0;
	offset += ODPH_UDPHDR_LEN;
	pkt_hdr.magic = TEST_HDR_MAGIC;
	if (odp_packet_copy_from_mem(pkt, offset, sizeof(pkt_hdr),
				     &pkt_hdr) != 0)
		ODPH_ABORT("Failed to generate test packet.\n");
	return pkt;
}
static odp_packet_t pktio_create_packet ( uint32_t seq ) { odp_packet_t pkt ; odph_ethhdr_t * eth ; odph_ipv4hdr_t * ip ; odph_udphdr_t * udp ; char * buf ; uint32_t offset ; pkt_head_t pkt_hdr ; size_t payload_len ; payload_len = sizeof ( pkt_hdr ) + gbl_args -> args . pkt_len ; pkt = odp_packet_alloc ( gbl_args -> transmit_pkt_pool , payload_len + ODPH_UDPHDR_LEN + ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN ) ; if ( pkt == ODP_PACKET_INVALID ) return ODP_PACKET_INVALID ; buf = odp_packet_data ( pkt ) ; offset = 0 ; odp_packet_l2_offset_set ( pkt , offset ) ; eth = ( odph_ethhdr_t * ) buf ; memcpy ( eth -> src . addr , gbl_args -> src_mac , ODPH_ETHADDR_LEN ) ; memcpy ( eth -> dst . addr , gbl_args -> dst_mac , ODPH_ETHADDR_LEN ) ; eth -> type = odp_cpu_to_be_16 ( ODPH_ETHTYPE_IPV4 ) ; offset += ODPH_ETHHDR_LEN ; odp_packet_l3_offset_set ( pkt , ODPH_ETHHDR_LEN ) ; ip = ( odph_ipv4hdr_t * ) ( buf + ODPH_ETHHDR_LEN ) ; ip -> dst_addr = odp_cpu_to_be_32 ( 0 ) ; ip -> src_addr = odp_cpu_to_be_32 ( 0 ) ; ip -> ver_ihl = ODPH_IPV4 << 4 | ODPH_IPV4HDR_IHL_MIN ; ip -> tot_len = odp_cpu_to_be_16 ( payload_len + ODPH_UDPHDR_LEN + ODPH_IPV4HDR_LEN ) ; ip -> ttl = 128 ; ip -> proto = ODPH_IPPROTO_UDP ; ip -> id = odp_cpu_to_be_16 ( seq ) ; ip -> chksum = 0 ; odph_ipv4_csum_update ( pkt ) ; offset += ODPH_IPV4HDR_LEN ; odp_packet_l4_offset_set ( pkt , offset ) ; udp = ( odph_udphdr_t * ) ( buf + offset ) ; udp -> src_port = odp_cpu_to_be_16 ( 0 ) ; udp -> dst_port = odp_cpu_to_be_16 ( 0 ) ; udp -> length = odp_cpu_to_be_16 ( payload_len + ODPH_UDPHDR_LEN ) ; udp -> chksum = 0 ; offset += ODPH_UDPHDR_LEN ; pkt_hdr . magic = TEST_HDR_MAGIC ; if ( odp_packet_copy_from_mem ( pkt , offset , sizeof ( pkt_hdr ) , & pkt_hdr ) != 0 ) ODPH_ABORT ( " \n " ) ; return pkt ; }
Generate a single test packet for transmission.
Generate a single test packet for transmission .
/* Ethernet */ /* IP */ /* UDP */ /* payload */