> -----Original Message-----
> From: [email protected] [mailto:lng-odp-
> [email protected]] On Behalf Of ext Ola Liljedahl
> Sent: Tuesday, February 03, 2015 6:48 PM
> To: [email protected]
> Subject: [lng-odp] [PATCHv5 02/18] api: odp_pktio.h: odp_pktio_mac_addr()
> return chars written or error
> 
> Added define ODP_PKTIO_MACADDRSIZE which specifies the recommended
> output buffer size for odp_pktio_mac_addr().
> odp_pktio_mac_addr() takes output buffer size as input and returns
> number
> of chars written (on success), <0 on failure.
> Updated the implementation.
> Updated all usages in example and test programs.
> 
> Signed-off-by: Ola Liljedahl <[email protected]>
> ---
> (This document/code contribution attached is provided under the terms of
> agreement LES-LTM-21309)
> 
>  include/odp/api/packet_io.h                          | 20 +++++++++++++--
> -----
>  .../linux-generic/include/odp/plat/packet_io_types.h |  2 ++
>  platform/linux-generic/odp_packet_io.c               | 11 ++++++-----
>  test/validation/odp_pktio.c                          |  8 ++++----
>  4 files changed, 25 insertions(+), 16 deletions(-)
> 
> diff --git a/include/odp/api/packet_io.h b/include/odp/api/packet_io.h
> index da7bc3f..0c8af0c 100644
> --- a/include/odp/api/packet_io.h
> +++ b/include/odp/api/packet_io.h
> @@ -18,6 +18,7 @@
>  extern "C" {
>  #endif
> 
> +#include <sys/types.h>
> 
>  /** @defgroup odp_packet_io ODP PACKET IO
>   *  Operations on a packet.
> @@ -39,6 +40,11 @@ extern "C" {
>   * odp_pktio_t value to indicate any port
>   */
> 
> +/*
> + * @def ODP_PKTIO_MACADDRSIZE
> + * Minimum size of output buffer for odp_pktio_mac_addr()

Should this be defined as ODP_PKTIO_MACADDRSIZE_MAX or similar. If the 
interface support two sizes this is the larger, although the configured and 
currently used size would be the smaller.

I want to avoid applications mixing this into protocol definitions like this

struct ether_hdr {
  uint8_t dst_mac[ODP_PKTIO_MACADDRSIZE];
  uint8_t src_mac[ODP_PKTIO_MACADDRSIZE];
...
};


> + */
> +
>  /**
>   * Open an ODP packet IO instance
>   *
> @@ -167,16 +173,16 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id,
> odp_bool_t enable);
>  int odp_pktio_promisc_mode(odp_pktio_t id);
> 
>  /**
> - * Get the default MAC address of a packet IO interface.
> + * Get the native MAC address of a packet IO interface.

Why this is now defined as "native". Does it mean the address burned into the 
device. What if SW has overwritten that? Is it still native? Default is 
referring to the default address, whatever that maybe.

>   *
> - * @param    id        ODP packet IO handle.
> - * @param[out]       mac_addr  Storage for MAC address of the packet IO
> interface.
> - * @param    addr_size Storage size for the address
> + * @param    hdl  ODP packet IO handle

This parameter renaming is not needed. All other packet_io.h API calls are 
using "id" here. Parameter naming should be constant throughout the API. Do not 
rename it in this patch.

I agree that "id" is not the best name for that parameter, but that's how it is 
in this API right now. We need another patch for renaming that over all the API 
calls.

Also "hdl" is not a good parameter name for an object. The name should link to 
the object type, like "pktio" (for odp_pktio_t type) in this case. Parameter 
list shows up in Doxygen function documentation without types.

-Petri


> + * @param[out]       mac_addr  Output buffer (use ODP_PKTIO_MACADDRSIZE)
> + * @param       size Size of output buffer
>   *
> - * @retval Number of bytes written on success, 0 on failure.
> + * @return Number of bytes written to buffer
> + * @retval <0 on failure
>   */
> -size_t odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr,
> -                       size_t addr_size);
> +ssize_t odp_pktio_mac_addr(odp_pktio_t hdl, void *mac_addr, ssize_t
> size);
> 
>  /**
>   * Setup per-port default class-of-service.
> diff --git a/platform/linux-generic/include/odp/plat/packet_io_types.h
> b/platform/linux-generic/include/odp/plat/packet_io_types.h
> index a6bbacf..61dca13 100644
> --- a/platform/linux-generic/include/odp/plat/packet_io_types.h
> +++ b/platform/linux-generic/include/odp/plat/packet_io_types.h
> @@ -23,6 +23,8 @@ extern "C" {
>   *  @{
>   */
> 
> +#define ODP_PKTIO_MACADDRSIZE 16
> +
>  typedef uint32_t odp_pktio_t;
> 
>  #define ODP_PKTIO_INVALID 0
> diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-
> generic/odp_packet_io.c
> index bdb690e..f156dd3 100644
> --- a/platform/linux-generic/odp_packet_io.c
> +++ b/platform/linux-generic/odp_packet_io.c
> @@ -798,18 +798,19 @@ int odp_pktio_promisc_mode(odp_pktio_t id)
>  }
> 
> 
> -size_t odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr,
> -                    size_t addr_size)
> +ssize_t odp_pktio_mac_addr(odp_pktio_t id, void *mac_addr, ssize_t
> addr_size)
>  {
>       pktio_entry_t *entry;
> 
> -     if (addr_size < ETH_ALEN)
> -             return 0;
> +     if (addr_size < ETH_ALEN) {
> +             /* Output buffer too small */
> +             return -1;
> +     }
> 
>       entry = get_pktio_entry(id);
>       if (entry == NULL) {
>               ODP_DBG("pktio entry %d does not exist\n", id);
> -             return 0;
> +             return -1;
>       }
> 
>       lock_entry(entry);
> diff --git a/test/validation/odp_pktio.c b/test/validation/odp_pktio.c
> index 84121f5..e1ca793 100644
> --- a/test/validation/odp_pktio.c
> +++ b/test/validation/odp_pktio.c
> @@ -450,22 +450,22 @@ static void test_odp_pktio_promisc(void)
>  static void test_odp_pktio_mac(void)
>  {
>       unsigned char mac_addr[ODPH_ETHADDR_LEN];
> -     size_t mac_len;
> +     ssize_t mac_len;
>       int ret;
>       odp_pktio_t pktio = create_pktio(iface_name[0]);
> 
>       printf("testing mac for %s\n", iface_name[0]);
> 
> -     mac_len = odp_pktio_mac_addr(pktio, mac_addr, ODPH_ETHADDR_LEN);
> +     mac_len = odp_pktio_mac_addr(pktio, mac_addr, sizeof(mac_addr));
>       CU_ASSERT(ODPH_ETHADDR_LEN == mac_len);
> 
>       printf(" %X:%X:%X:%X:%X:%X ",
>              mac_addr[0], mac_addr[1], mac_addr[2],
>              mac_addr[3], mac_addr[4], mac_addr[5]);
> 
> -     /* Fail case: wrong addr_size. Expected 0. */
> +     /* Fail case: wrong addr_size. Expected <0. */
>       mac_len = odp_pktio_mac_addr(pktio, mac_addr, 2);
> -     CU_ASSERT(0 == mac_len);
> +     CU_ASSERT(mac_len < 0);
> 
>       ret = odp_pktio_close(pktio);
>       CU_ASSERT(0 == ret);
> --
> 1.9.1
> 
> 
> _______________________________________________
> lng-odp mailing list
> [email protected]
> http://lists.linaro.org/mailman/listinfo/lng-odp

_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to