Re: [lng-odp] [PATCH v1 1/1] example: generator : use packet reference API to generate udp and icmp traffic

2017-08-09 Thread Bogdan Pricope
Thank you, Maxim.

BR,
Bogdan

On 9 August 2017 at 10:48, Bogdan Pricope  wrote:
> Ping.
>
> I need this to be 'finalized' before updating dpdk hw checksum support PR.
>
> BR,
> Bogdan
>
> On 8 August 2017 at 14:00, Github ODP bot  wrote:
>> From: Bogdan Pricope 
>>
>> Signed-off-by: Bogdan Pricope 
>> ---
>> /** Email created from pull request 118 (bogdanPricope:pktref_generator_pr)
>>  ** https://github.com/Linaro/odp/pull/118
>>  ** Patch: https://github.com/Linaro/odp/pull/118.patch
>>  ** Base sha: e76b25aa5cafbf96133fcbd83b856090b0e95f33
>>  ** Merge commit sha: a2a1459eb2047f247e54c2e3476a178c29384326
>>  **/
>>  example/generator/odp_generator.c | 165 
>> +++---
>>  1 file changed, 100 insertions(+), 65 deletions(-)
>>
>> diff --git a/example/generator/odp_generator.c 
>> b/example/generator/odp_generator.c
>> index 9336cec1..f3ec43be 100644
>> --- a/example/generator/odp_generator.c
>> +++ b/example/generator/odp_generator.c
>> @@ -136,6 +136,7 @@ static void millisleep(uint32_t ms,
>> uint64_t ticks = odp_timer_ns_to_tick(tp, 100ULL * ms);
>> odp_event_t ev = odp_timeout_to_event(tmo);
>> int rc = odp_timer_set_rel(tim, ticks, );
>> +
>> if (rc != ODP_TIMER_SUCCESS)
>> EXAMPLE_ABORT("odp_timer_set_rel() failed\n");
>> /* Spin waiting for timeout event */
>> @@ -186,12 +187,76 @@ static int scan_ip(char *buf, unsigned int *paddr)
>>  }
>>
>>  /**
>> + * Setup array of reference packets
>> + *
>> + * @param pool Packet pool
>> + * @param pkt_ref_array Packet array
>> + * @param pkt_ref_array_size Packet array size
>> + * @param setup_ref Packet setup function
>> + * @return 0 success, -1 failed
>> +*/
>> +static int setup_pkt_ref_array(odp_pool_t pool,
>> +  odp_packet_t *pkt_ref_array,
>> +  int pkt_ref_array_size,
>> +  odp_packet_t (*setup_ref)(odp_pool_t))
>> +{
>> +   int i;
>> +
>> +   for (i = 0; i < pkt_ref_array_size; i++) {
>> +   pkt_ref_array[i] = (*setup_ref)(pool);
>> +   if (pkt_ref_array[i] == ODP_PACKET_INVALID)
>> +   break;
>> +   }
>> +
>> +   if (i < pkt_ref_array_size) {
>> +   odp_packet_free_multi(pkt_ref_array, i);
>> +   return -1;
>> +   }
>> +   return 0;
>> +}
>> +
>> +/**
>> + * Setup array of packets
>> + *
>> + * @param pkt_ref_array Reference packet array
>> + * @param pkt_array Packet array
>> + * @param pkt_array_size Packet array size
>> + * @param setup_pkt Packet setup function
>> + * @return 0 success, -1 failed
>> +*/
>> +static int setup_pkt_array(odp_packet_t *pkt_ref_array,
>> +  odp_packet_t  *pkt_array,
>> +  int pkt_array_size,
>> +  int (*setup_pkt)(odp_packet_t))
>> +{
>> +   int i;
>> +
>> +   for (i = 0; i < pkt_array_size; i++) {
>> +   if ((*setup_pkt)(pkt_ref_array[i]))
>> +   break;
>> +
>> +   pkt_array[i] = odp_packet_ref_static(pkt_ref_array[i]);
>> +   if (pkt_array[i] == ODP_PACKET_INVALID)
>> +   break;
>> +   }
>> +   if (i < pkt_array_size) {
>> +   if (i)
>> +   odp_packet_free_multi(pkt_array, i - 1);
>> +
>> +   return -1;
>> +   }
>> +   return 0;
>> +}
>> +
>> +/**
>>   * set up an udp packet reference
>>   *
>>   * @param pool Buffer pool to create packet in
>>   *
>> - * @return Handle of created packet
>> + *
>> + * @retval Handle of created packet
>>   * @retval ODP_PACKET_INVALID  Packet could not be created
>> + *
>>   */
>>  static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
>>  {
>> @@ -246,37 +311,27 @@ static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
>>  /**
>>   * set up an udp packet
>>   *
>> - * @param pool Buffer pool to create packet in
>> - * @param pkt_ref Reference UDP packet
>> + * @param pkt Reference UDP packet
>>   *
>> - * @return Handle of created packet
>> - * @retval ODP_PACKET_INVALID  Packet could not be created
>> + * @return Success/Failed
>> + * @retval 0 on success, -1 on fail
>>   */
>> -static odp_packet_t pack_udp_pkt(odp_pool_t pool, odp_packet_t pkt_ref)
>> +static int setup_udp_pkt(odp_packet_t pkt)
>>  {
>> -   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 +
>> -   

Re: [lng-odp] [PATCH v1 1/1] example: generator : use packet reference API to generate udp and icmp traffic

2017-08-09 Thread Bogdan Pricope
Ping.

I need this to be 'finalized' before updating dpdk hw checksum support PR.

BR,
Bogdan

On 8 August 2017 at 14:00, Github ODP bot  wrote:
> From: Bogdan Pricope 
>
> Signed-off-by: Bogdan Pricope 
> ---
> /** Email created from pull request 118 (bogdanPricope:pktref_generator_pr)
>  ** https://github.com/Linaro/odp/pull/118
>  ** Patch: https://github.com/Linaro/odp/pull/118.patch
>  ** Base sha: e76b25aa5cafbf96133fcbd83b856090b0e95f33
>  ** Merge commit sha: a2a1459eb2047f247e54c2e3476a178c29384326
>  **/
>  example/generator/odp_generator.c | 165 
> +++---
>  1 file changed, 100 insertions(+), 65 deletions(-)
>
> diff --git a/example/generator/odp_generator.c 
> b/example/generator/odp_generator.c
> index 9336cec1..f3ec43be 100644
> --- a/example/generator/odp_generator.c
> +++ b/example/generator/odp_generator.c
> @@ -136,6 +136,7 @@ static void millisleep(uint32_t ms,
> uint64_t ticks = odp_timer_ns_to_tick(tp, 100ULL * ms);
> odp_event_t ev = odp_timeout_to_event(tmo);
> int rc = odp_timer_set_rel(tim, ticks, );
> +
> if (rc != ODP_TIMER_SUCCESS)
> EXAMPLE_ABORT("odp_timer_set_rel() failed\n");
> /* Spin waiting for timeout event */
> @@ -186,12 +187,76 @@ static int scan_ip(char *buf, unsigned int *paddr)
>  }
>
>  /**
> + * Setup array of reference packets
> + *
> + * @param pool Packet pool
> + * @param pkt_ref_array Packet array
> + * @param pkt_ref_array_size Packet array size
> + * @param setup_ref Packet setup function
> + * @return 0 success, -1 failed
> +*/
> +static int setup_pkt_ref_array(odp_pool_t pool,
> +  odp_packet_t *pkt_ref_array,
> +  int pkt_ref_array_size,
> +  odp_packet_t (*setup_ref)(odp_pool_t))
> +{
> +   int i;
> +
> +   for (i = 0; i < pkt_ref_array_size; i++) {
> +   pkt_ref_array[i] = (*setup_ref)(pool);
> +   if (pkt_ref_array[i] == ODP_PACKET_INVALID)
> +   break;
> +   }
> +
> +   if (i < pkt_ref_array_size) {
> +   odp_packet_free_multi(pkt_ref_array, i);
> +   return -1;
> +   }
> +   return 0;
> +}
> +
> +/**
> + * Setup array of packets
> + *
> + * @param pkt_ref_array Reference packet array
> + * @param pkt_array Packet array
> + * @param pkt_array_size Packet array size
> + * @param setup_pkt Packet setup function
> + * @return 0 success, -1 failed
> +*/
> +static int setup_pkt_array(odp_packet_t *pkt_ref_array,
> +  odp_packet_t  *pkt_array,
> +  int pkt_array_size,
> +  int (*setup_pkt)(odp_packet_t))
> +{
> +   int i;
> +
> +   for (i = 0; i < pkt_array_size; i++) {
> +   if ((*setup_pkt)(pkt_ref_array[i]))
> +   break;
> +
> +   pkt_array[i] = odp_packet_ref_static(pkt_ref_array[i]);
> +   if (pkt_array[i] == ODP_PACKET_INVALID)
> +   break;
> +   }
> +   if (i < pkt_array_size) {
> +   if (i)
> +   odp_packet_free_multi(pkt_array, i - 1);
> +
> +   return -1;
> +   }
> +   return 0;
> +}
> +
> +/**
>   * set up an udp packet reference
>   *
>   * @param pool Buffer pool to create packet in
>   *
> - * @return Handle of created packet
> + *
> + * @retval Handle of created packet
>   * @retval ODP_PACKET_INVALID  Packet could not be created
> + *
>   */
>  static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
>  {
> @@ -246,37 +311,27 @@ static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
>  /**
>   * set up an udp packet
>   *
> - * @param pool Buffer pool to create packet in
> - * @param pkt_ref Reference UDP packet
> + * @param pkt Reference UDP packet
>   *
> - * @return Handle of created packet
> - * @retval ODP_PACKET_INVALID  Packet could not be created
> + * @return Success/Failed
> + * @retval 0 on success, -1 on fail
>   */
> -static odp_packet_t pack_udp_pkt(odp_pool_t pool, odp_packet_t pkt_ref)
> +static int setup_udp_pkt(odp_packet_t pkt)
>  {
> -   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);
> +

[lng-odp] [PATCH v1 1/1] example: generator : use packet reference API to generate udp and icmp traffic

2017-08-08 Thread Github ODP bot
From: Bogdan Pricope 

Signed-off-by: Bogdan Pricope 
---
/** Email created from pull request 118 (bogdanPricope:pktref_generator_pr)
 ** https://github.com/Linaro/odp/pull/118
 ** Patch: https://github.com/Linaro/odp/pull/118.patch
 ** Base sha: e76b25aa5cafbf96133fcbd83b856090b0e95f33
 ** Merge commit sha: a2a1459eb2047f247e54c2e3476a178c29384326
 **/
 example/generator/odp_generator.c | 165 +++---
 1 file changed, 100 insertions(+), 65 deletions(-)

diff --git a/example/generator/odp_generator.c 
b/example/generator/odp_generator.c
index 9336cec1..f3ec43be 100644
--- a/example/generator/odp_generator.c
+++ b/example/generator/odp_generator.c
@@ -136,6 +136,7 @@ static void millisleep(uint32_t ms,
uint64_t ticks = odp_timer_ns_to_tick(tp, 100ULL * ms);
odp_event_t ev = odp_timeout_to_event(tmo);
int rc = odp_timer_set_rel(tim, ticks, );
+
if (rc != ODP_TIMER_SUCCESS)
EXAMPLE_ABORT("odp_timer_set_rel() failed\n");
/* Spin waiting for timeout event */
@@ -186,12 +187,76 @@ static int scan_ip(char *buf, unsigned int *paddr)
 }
 
 /**
+ * Setup array of reference packets
+ *
+ * @param pool Packet pool
+ * @param pkt_ref_array Packet array
+ * @param pkt_ref_array_size Packet array size
+ * @param setup_ref Packet setup function
+ * @return 0 success, -1 failed
+*/
+static int setup_pkt_ref_array(odp_pool_t pool,
+  odp_packet_t *pkt_ref_array,
+  int pkt_ref_array_size,
+  odp_packet_t (*setup_ref)(odp_pool_t))
+{
+   int i;
+
+   for (i = 0; i < pkt_ref_array_size; i++) {
+   pkt_ref_array[i] = (*setup_ref)(pool);
+   if (pkt_ref_array[i] == ODP_PACKET_INVALID)
+   break;
+   }
+
+   if (i < pkt_ref_array_size) {
+   odp_packet_free_multi(pkt_ref_array, i);
+   return -1;
+   }
+   return 0;
+}
+
+/**
+ * Setup array of packets
+ *
+ * @param pkt_ref_array Reference packet array
+ * @param pkt_array Packet array
+ * @param pkt_array_size Packet array size
+ * @param setup_pkt Packet setup function
+ * @return 0 success, -1 failed
+*/
+static int setup_pkt_array(odp_packet_t *pkt_ref_array,
+  odp_packet_t  *pkt_array,
+  int pkt_array_size,
+  int (*setup_pkt)(odp_packet_t))
+{
+   int i;
+
+   for (i = 0; i < pkt_array_size; i++) {
+   if ((*setup_pkt)(pkt_ref_array[i]))
+   break;
+
+   pkt_array[i] = odp_packet_ref_static(pkt_ref_array[i]);
+   if (pkt_array[i] == ODP_PACKET_INVALID)
+   break;
+   }
+   if (i < pkt_array_size) {
+   if (i)
+   odp_packet_free_multi(pkt_array, i - 1);
+
+   return -1;
+   }
+   return 0;
+}
+
+/**
  * set up an udp packet reference
  *
  * @param pool Buffer pool to create packet in
  *
- * @return Handle of created packet
+ *
+ * @retval Handle of created packet
  * @retval ODP_PACKET_INVALID  Packet could not be created
+ *
  */
 static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
 {
@@ -246,37 +311,27 @@ static odp_packet_t setup_udp_pkt_ref(odp_pool_t pool)
 /**
  * set up an udp packet
  *
- * @param pool Buffer pool to create packet in
- * @param pkt_ref Reference UDP packet
+ * @param pkt Reference UDP packet
  *
- * @return Handle of created packet
- * @retval ODP_PACKET_INVALID  Packet could not be created
+ * @return Success/Failed
+ * @retval 0 on success, -1 on fail
  */
-static odp_packet_t pack_udp_pkt(odp_pool_t pool, odp_packet_t pkt_ref)
+static int setup_udp_pkt(odp_packet_t pkt)
 {
-   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 = 0;
ip->chksum = odph_chksum(ip, ODPH_IPV4HDR_LEN);
 
-   return pkt;
+   return 0;
 }
 
 /**
@@ -337,15 +392,13 @@ static odp_packet_t setup_icmp_pkt_ref(odp_pool_t pool)
 /**
  * Set up an icmp packet
  *
- * @param pool Buffer pool to create packet in
- * @param pkt_ref Reference ICMP packet
+ * @param pkt Reference ICMP packet
  *
- * @return Handle of created packet
- * @retval ODP_PACKET_INVALID