Re: [lng-odp] [PATCHv3 1/5] test: generator: compose sending packets from reference packet plus differences

2017-03-22 Thread Yi He
For this patch series:

Reviewed-and-tested-by: Yi He 



On 20 March 2017 at 15:28, Bogdan Pricope  wrote:

> Signed-off-by: Bogdan Pricope 
> ---
>  example/generator/odp_generator.c | 130 ++
> +++-
>  1 file changed, 113 insertions(+), 17 deletions(-)
>
> diff --git a/example/generator/odp_generator.c b/example/generator/odp_
> generator.c
> index 8062d87..331f873 100644
> --- a/example/generator/odp_generator.c
> +++ b/example/generator/odp_generator.c
> @@ -170,21 +170,20 @@ static int scan_ip(char *buf, unsigned int *paddr)
>  }
>
>  /**
> - * set up an udp packet
> + * set up an udp packet reference
>   *
>   * @param pool Buffer pool to create packet in
>   *
>   * @return Handle of created packet
>   * @retval ODP_PACKET_INVALID  Packet could not be created
>   */
> -static odp_packet_t pack_udp_pkt(odp_pool_t pool)
> +static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
>  {
> odp_packet_t pkt;
> char *buf;
> odph_ethhdr_t *eth;
> odph_ipv4hdr_t *ip;
> odph_udphdr_t *udp;
> -   unsigned short seq;
>
> pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_UDPHDR_LEN +
>ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
> @@ -200,8 +199,10 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
> memcpy((char *)eth->src.addr, args->appl.srcmac.addr,
> ODPH_ETHADDR_LEN);
> memcpy((char *)eth->dst.addr, args->appl.dstmac.addr,
> ODPH_ETHADDR_LEN);
> eth->type = odp_cpu_to_be_16(ODPH_ETHTYPE_IPV4);
> +
> /* ip */
> odp_packet_l3_offset_set(pkt, ODPH_ETHHDR_LEN);
> +   odp_packet_has_ipv4_set(pkt, 1);
> ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
> ip->dst_addr = odp_cpu_to_be_32(args->appl.dstip);
> ip->src_addr = odp_cpu_to_be_32(args->appl.srcip);
> @@ -209,12 +210,13 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
> ip->tot_len = odp_cpu_to_be_16(args->appl.payload +
> ODPH_UDPHDR_LEN +
>ODPH_IPV4HDR_LEN);
> ip->proto = ODPH_IPPROTO_UDP;
> -   seq = odp_atomic_fetch_add_u64(, 1) % 0x;
> -   ip->id = odp_cpu_to_be_16(seq);
> +   ip->id = 0;
> +   ip->ttl = 64;
> ip->chksum = 0;
> -   odph_ipv4_csum_update(pkt);
> +
> /* udp */
> odp_packet_l4_offset_set(pkt, ODPH_ETHHDR_LEN + ODPH_IPV4HDR_LEN);
> +   odp_packet_has_udp_set(pkt, 1);
> udp = (odph_udphdr_t *)(buf + ODPH_ETHHDR_LEN + ODPH_IPV4HDR_LEN);
> udp->src_port = 0;
> udp->dst_port = 0;
> @@ -226,27 +228,60 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
>  }
>
>  /**
> - * Set up an icmp packet
> + * set up an udp packet
> + *
> + * @param pool Buffer pool to create packet in
> + * @param pkt_ref Reference UDP packet
> + *
> + * @return Handle of created packet
> + * @retval ODP_PACKET_INVALID  Packet could not be created
> + */
> +static odp_packet_t pack_udp_pkt(odp_pool_t pool, odp_packet_t pkt_ref)
> +{
> +   odp_packet_t pkt;
> +   char *buf;
> +   odph_ipv4hdr_t *ip;
> +   unsigned short seq;
> +
> +   pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_UDPHDR_LEN +
> +  ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
> +
> +   if (pkt == ODP_PACKET_INVALID)
> +   return pkt;
> +
> +   buf = (char *)odp_packet_data(pkt);
> +   odp_memcpy(buf, odp_packet_data(pkt_ref),
> +   args->appl.payload + ODPH_UDPHDR_LEN +
> +   ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
> +
> +   /*Update IP ID and checksum*/
> +   ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
> +   seq = odp_atomic_fetch_add_u64(, 1) % 0x;
> +   ip->id = odp_cpu_to_be_16(seq);
> +   ip->chksum = odph_chksum(ip, ODPH_IPV4HDR_LEN);
> +
> +   return pkt;
> +}
> +
> +/**
> + * Set up an icmp packet reference
>   *
>   * @param pool Buffer pool to create packet in
>   *
>   * @return Handle of created packet
>   * @retval ODP_PACKET_INVALID  Packet could not be created
>   */
> -static odp_packet_t pack_icmp_pkt(odp_pool_t pool)
> +static odp_packet_t setup_icmp_pkt_ref(odp_pool_t pool)
>  {
> odp_packet_t pkt;
> char *buf;
> odph_ethhdr_t *eth;
> odph_ipv4hdr_t *ip;
> odph_icmphdr_t *icmp;
> -   struct timeval tval;
> -   uint8_t *tval_d;
> -   unsigned short seq;
>
> args->appl.payload = 56;
> pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_ICMPHDR_LEN
> +
> -  ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
> +   ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
>
> if (pkt == ODP_PACKET_INVALID)
> return pkt;
> @@ -265,18 +300,62 @@ static odp_packet_t pack_icmp_pkt(odp_pool_t pool)
> ip->dst_addr = odp_cpu_to_be_32(args->appl.dstip);
> ip->src_addr = 

[lng-odp] [PATCHv3 1/5] test: generator: compose sending packets from reference packet plus differences

2017-03-20 Thread Bogdan Pricope
Signed-off-by: Bogdan Pricope 
---
 example/generator/odp_generator.c | 130 +-
 1 file changed, 113 insertions(+), 17 deletions(-)

diff --git a/example/generator/odp_generator.c 
b/example/generator/odp_generator.c
index 8062d87..331f873 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -170,21 +170,20 @@ static int scan_ip(char *buf, unsigned int *paddr)
 }
 
 /**
- * set up an udp packet
+ * set up an udp packet reference
  *
  * @param pool Buffer pool to create packet in
  *
  * @return Handle of created packet
  * @retval ODP_PACKET_INVALID  Packet could not be created
  */
-static odp_packet_t pack_udp_pkt(odp_pool_t pool)
+static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
 {
odp_packet_t pkt;
char *buf;
odph_ethhdr_t *eth;
odph_ipv4hdr_t *ip;
odph_udphdr_t *udp;
-   unsigned short seq;
 
pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_UDPHDR_LEN +
   ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
@@ -200,8 +199,10 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
memcpy((char *)eth->src.addr, args->appl.srcmac.addr, ODPH_ETHADDR_LEN);
memcpy((char *)eth->dst.addr, args->appl.dstmac.addr, ODPH_ETHADDR_LEN);
eth->type = odp_cpu_to_be_16(ODPH_ETHTYPE_IPV4);
+
/* ip */
odp_packet_l3_offset_set(pkt, ODPH_ETHHDR_LEN);
+   odp_packet_has_ipv4_set(pkt, 1);
ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
ip->dst_addr = odp_cpu_to_be_32(args->appl.dstip);
ip->src_addr = odp_cpu_to_be_32(args->appl.srcip);
@@ -209,12 +210,13 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
ip->tot_len = odp_cpu_to_be_16(args->appl.payload + ODPH_UDPHDR_LEN +
   ODPH_IPV4HDR_LEN);
ip->proto = ODPH_IPPROTO_UDP;
-   seq = odp_atomic_fetch_add_u64(, 1) % 0x;
-   ip->id = odp_cpu_to_be_16(seq);
+   ip->id = 0;
+   ip->ttl = 64;
ip->chksum = 0;
-   odph_ipv4_csum_update(pkt);
+
/* udp */
odp_packet_l4_offset_set(pkt, ODPH_ETHHDR_LEN + ODPH_IPV4HDR_LEN);
+   odp_packet_has_udp_set(pkt, 1);
udp = (odph_udphdr_t *)(buf + ODPH_ETHHDR_LEN + ODPH_IPV4HDR_LEN);
udp->src_port = 0;
udp->dst_port = 0;
@@ -226,27 +228,60 @@ static odp_packet_t pack_udp_pkt(odp_pool_t pool)
 }
 
 /**
- * Set up an icmp packet
+ * set up an udp packet
+ *
+ * @param pool Buffer pool to create packet in
+ * @param pkt_ref Reference UDP packet
+ *
+ * @return Handle of created packet
+ * @retval ODP_PACKET_INVALID  Packet could not be created
+ */
+static odp_packet_t pack_udp_pkt(odp_pool_t pool, odp_packet_t pkt_ref)
+{
+   odp_packet_t pkt;
+   char *buf;
+   odph_ipv4hdr_t *ip;
+   unsigned short seq;
+
+   pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_UDPHDR_LEN +
+  ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
+
+   if (pkt == ODP_PACKET_INVALID)
+   return pkt;
+
+   buf = (char *)odp_packet_data(pkt);
+   odp_memcpy(buf, odp_packet_data(pkt_ref),
+   args->appl.payload + ODPH_UDPHDR_LEN +
+   ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
+
+   /*Update IP ID and checksum*/
+   ip = (odph_ipv4hdr_t *)(buf + ODPH_ETHHDR_LEN);
+   seq = odp_atomic_fetch_add_u64(, 1) % 0x;
+   ip->id = odp_cpu_to_be_16(seq);
+   ip->chksum = odph_chksum(ip, ODPH_IPV4HDR_LEN);
+
+   return pkt;
+}
+
+/**
+ * Set up an icmp packet reference
  *
  * @param pool Buffer pool to create packet in
  *
  * @return Handle of created packet
  * @retval ODP_PACKET_INVALID  Packet could not be created
  */
-static odp_packet_t pack_icmp_pkt(odp_pool_t pool)
+static odp_packet_t setup_icmp_pkt_ref(odp_pool_t pool)
 {
odp_packet_t pkt;
char *buf;
odph_ethhdr_t *eth;
odph_ipv4hdr_t *ip;
odph_icmphdr_t *icmp;
-   struct timeval tval;
-   uint8_t *tval_d;
-   unsigned short seq;
 
args->appl.payload = 56;
pkt = odp_packet_alloc(pool, args->appl.payload + ODPH_ICMPHDR_LEN +
-  ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
+   ODPH_IPV4HDR_LEN + ODPH_ETHHDR_LEN);
 
if (pkt == ODP_PACKET_INVALID)
return pkt;
@@ -265,18 +300,62 @@ static odp_packet_t pack_icmp_pkt(odp_pool_t pool)
ip->dst_addr = odp_cpu_to_be_32(args->appl.dstip);
ip->src_addr = odp_cpu_to_be_32(args->appl.srcip);
ip->ver_ihl = ODPH_IPV4 << 4 | ODPH_IPV4HDR_IHL_MIN;
+   ip->ttl = 64;
ip->tot_len = odp_cpu_to_be_16(args->appl.payload + ODPH_ICMPHDR_LEN +
   ODPH_IPV4HDR_LEN);
ip->proto = ODPH_IPPROTO_ICMP;
-   seq = odp_atomic_fetch_add_u64(, 1) % 0x;
-   ip->id = odp_cpu_to_be_16(seq);
+   ip->id = 0;
ip->chksum