Anders has requested that I put a bugID in my patches
for IPsec example application where I have a #define
to work around the fact this patch isn't in yet.  Does
such a bugID already exist, or is there a chance this patch
will be accepted soon?

I would really like to get the IPsec app patches in soon,
every rebase gets a little more painful.

-----Original Message-----
From: lng-odp-boun...@lists.linaro.org 
[mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of Maxim Uvarov
Sent: Thursday, August 21, 2014 4:11 AM
To: lng-odp@lists.linaro.org
Subject: Re: [lng-odp] [PATCH v4 1/1] API support for querying mac address

I think to merge this patch we need to add other platforms. Or at least 
place holder in other platforms that this function is not implemented.

Thanks,
Maxim.

On 08/20/2014 06:08 PM, Balasubramanian Manoharan wrote:
> This patch provides API support for querying mac address of an interface 
> using odp_pktio_t handle.
> This current patch incorporates the review comments from the previous patch.
>
> The discussions are ongoing regarding adding additional API for querying mac 
> address using device name, once it gets finalized the same will be provided 
> as a different patch.
>
> Signed-off-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>
> ---
>   include/odp_packet_io.h                            |  8 +++++++
>   platform/linux-generic/include/odp_packet_netmap.h |  1 +
>   platform/linux-generic/odp_packet_io.c             | 28 
> ++++++++++++++++++++++
>   platform/linux-generic/odp_packet_netmap.c         |  2 ++
>   platform/linux-generic/odp_packet_socket.c         | 14 +++++++----
>   5 files changed, 49 insertions(+), 4 deletions(-)
>
> diff --git a/include/odp_packet_io.h b/include/odp_packet_io.h
> index cfefac0..86778bf 100644
> --- a/include/odp_packet_io.h
> +++ b/include/odp_packet_io.h
> @@ -129,6 +129,14 @@ void odp_pktio_set_input(odp_packet_t pkt, odp_pktio_t 
> id);
>    */
>   odp_pktio_t odp_pktio_get_input(odp_packet_t pkt);
>   
> +/**
> + * Get mac address of the interface
> + *
> + * @param id         ODP packet IO handle
> + * @param mac_addr   Storage for Mac address of the packet IO interface 
> (filled by function)
> + * @return  0 on success or -1 on error
> +**/
> +int odp_pktio_get_mac_addr(odp_pktio_t id, unsigned char *mac_addr);
>   #ifdef __cplusplus
>   }
>   #endif
> diff --git a/platform/linux-generic/include/odp_packet_netmap.h 
> b/platform/linux-generic/include/odp_packet_netmap.h
> index 57d9f2c..69174fe 100644
> --- a/platform/linux-generic/include/odp_packet_netmap.h
> +++ b/platform/linux-generic/include/odp_packet_netmap.h
> @@ -40,6 +40,7 @@ typedef struct {
>       odp_queue_t tx_access; /* Used for exclusive access to send packets */
>       uint32_t if_flags;
>       char ifname[32];
> +     unsigned char if_mac[ETH_ALEN];
>   } pkt_netmap_t;
>   
>   /**
> diff --git a/platform/linux-generic/odp_packet_io.c 
> b/platform/linux-generic/odp_packet_io.c
> index 33ade10..b29cca1 100644
> --- a/platform/linux-generic/odp_packet_io.c
> +++ b/platform/linux-generic/odp_packet_io.c
> @@ -246,6 +246,7 @@ odp_pktio_t odp_pktio_open(const char *dev, 
> odp_buffer_pool_t pool,
>               break;
>       }
>   
> +     pktio_entry->s.params.type = params->type;
>       unlock_entry(pktio_entry);
>       return id;
>   }
> @@ -535,3 +536,30 @@ int pktin_deq_multi(queue_entry_t *qentry, 
> odp_buffer_hdr_t *buf_hdr[], int num)
>   
>       return nbr;
>   }
> +int odp_pktio_get_mac_addr(odp_pktio_t pkt, unsigned char *mac_addr)
> +{
> +     pktio_entry_t *pktio_entry = get_entry(pkt);
> +     if (!pktio_entry) {
> +             ODP_ERR("Invalid odp_pktio_t value\n");
> +             return -1;
> +     }
> +     switch (pktio_entry->s.params.type) {
> +     case ODP_PKTIO_TYPE_SOCKET_BASIC:
> +     case ODP_PKTIO_TYPE_SOCKET_MMSG:
> +             memcpy(mac_addr, pktio_entry->s.pkt_sock.if_mac, ETH_ALEN);
> +             break;
> +     case ODP_PKTIO_TYPE_SOCKET_MMAP:
> +             memcpy(mac_addr, pktio_entry->s.pkt_sock_mmap.if_mac, ETH_ALEN);
> +             break;
> +#ifdef ODP_HAVE_NETMAP
> +     case ODP_PKTIO_TYPE_NETMAP:
> +             memcpy(mac_addr, pktio_entry->s.pkt_nm.if_mac, ETH_ALEN);
> +             break;
> +#endif
> +     default:
> +             ODP_ERR("Invalid pktio type: %02x\n",
> +                     pktio_entry->s.params.type);
> +             return ODP_PKTIO_INVALID;
> +     }
> +     return 0;
> +}
> diff --git a/platform/linux-generic/odp_packet_netmap.c 
> b/platform/linux-generic/odp_packet_netmap.c
> index e2215ab..9f58a6a 100644
> --- a/platform/linux-generic/odp_packet_netmap.c
> +++ b/platform/linux-generic/odp_packet_netmap.c
> @@ -222,6 +222,8 @@ int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const 
> char *netdev,
>               ODP_ERR("Error: token creation failed\n");
>               return -1;
>       }
> +     if (socket_store_hw_addr(pkt_nm->if_mac, netdev)
> +             return -1;
>   
>       odp_queue_enq(pkt_nm->tx_access, token);
>   
> diff --git a/platform/linux-generic/odp_packet_socket.c 
> b/platform/linux-generic/odp_packet_socket.c
> index d44c333..39aa4db 100644
> --- a/platform/linux-generic/odp_packet_socket.c
> +++ b/platform/linux-generic/odp_packet_socket.c
> @@ -57,6 +57,8 @@ typedef struct {
>   
>   static raw_socket_t raw_sockets[MAX_RAW_SOCKETS_NETDEVS];
>   static odp_spinlock_t raw_sockets_lock;
> +static int socket_store_hw_addr(int sockfd, unsigned char *if_mac,
> +                           const char *netdev);
>   
>   /** Eth buffer start offset from u32-aligned address to make sure the 
> following
>    * header (e.g. IP) starts at a 32-bit aligned address.
> @@ -174,6 +176,10 @@ int setup_pkt_sock(pkt_sock_t * const pkt_sock, const 
> char *netdev,
>       sockfd = find_raw_fd(netdev);
>       if (sockfd) {
>               pkt_sock->sockfd = sockfd;
> +             if (socket_store_hw_addr(sockfd, pkt_sock->if_mac, netdev)) {
> +                     perror("setup_pkt_sock() - socket_store_hw_addr()");
> +                     goto error;
> +             }
>               odp_spinlock_unlock(&raw_sockets_lock);
>               return sockfd;
>       }
> @@ -735,7 +741,7 @@ static int mmap_bind_sock(pkt_sock_mmap_t *pkt_sock, 
> const char *netdev)
>       return 0;
>   }
>   
> -static int mmap_store_hw_addr(pkt_sock_mmap_t * const pkt_sock,
> +static int socket_store_hw_addr(int sockfd, unsigned char *if_mac,
>                             const char *netdev)
>   {
>       struct ifreq ethreq;
> @@ -744,13 +750,13 @@ static int mmap_store_hw_addr(pkt_sock_mmap_t * const 
> pkt_sock,
>       /* get MAC address */
>       memset(&ethreq, 0, sizeof(ethreq));
>       strncpy(ethreq.ifr_name, netdev, IFNAMSIZ);
> -     ret = ioctl(pkt_sock->sockfd, SIOCGIFHWADDR, &ethreq);
> +     ret = ioctl(sockfd, SIOCGIFHWADDR, &ethreq);
>       if (ret != 0) {
>               perror("store_hw_addr() - ioctl(SIOCGIFHWADDR)");
>               return -1;
>       }
>   
> -     ethaddr_copy(pkt_sock->if_mac,
> +     ethaddr_copy(if_mac,
>                    (unsigned char *)ethreq.ifr_ifru.ifru_hwaddr.sa_data);
>   
>       return 0;
> @@ -805,7 +811,7 @@ int setup_pkt_sock_mmap(pkt_sock_mmap_t * const pkt_sock, 
> const char *netdev,
>       if (ret != 0)
>               return -1;
>   
> -     ret = mmap_store_hw_addr(pkt_sock, netdev);
> +     ret = socket_store_hw_addr(pkt_sock->sockfd, pkt_sock->if_mac, netdev);
>       if (ret != 0)
>               return -1;
>   


_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to