Hi Maxim, I have provided a new patch after running checkpatch.
Regards, Bala On 20 August 2014 15:56, Maxim Uvarov <[email protected]> wrote: > Bala, > > Please fix everything for: > checkpatch and git am your patch. > > Thanks, > Maxim. > > > On 08/20/2014 01:29 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 <[email protected]> >> --- >> 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 | 4 +++- >> platform/linux-generic/odp_packet_socket.c | 20 >> +++++++++------- >> 5 files changed, 50 insertions(+), 11 deletions(-) >> >> diff --git a/include/odp_packet_io.h b/include/odp_packet_io.h >> index cfefac0..6c06520 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..3693416 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..f644dff 100644 >> --- a/platform/linux-generic/odp_packet_io.c >> +++ b/platform/linux-generic/odp_packet_io.c >> @@ -245,7 +245,7 @@ odp_pktio_t odp_pktio_open(const char *dev, >> odp_buffer_pool_t pool, >> ODP_ERR("This type of I/O is not supported. Please >> recompile.\n"); >> break; >> } >> - >> + pktio_entry->s.params.type = params->type; >> unlock_entry(pktio_entry); >> return id; >> } >> @@ -535,3 +535,29 @@ 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..9bf2fcf 100644 >> --- a/platform/linux-generic/odp_packet_netmap.c >> +++ b/platform/linux-generic/odp_packet_netmap.c >> @@ -222,9 +222,11 @@ 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); >> - >> + >> ODP_DBG("Wait for link to come up\n"); >> sleep(WAITLINK_TMO); >> ODP_DBG("Done\n"); >> diff --git a/platform/linux-generic/odp_packet_socket.c >> b/platform/linux-generic/odp_packet_socket.c >> index d44c333..a40fe60 100644 >> --- a/platform/linux-generic/odp_packet_socket.c >> +++ b/platform/linux-generic/odp_packet_socket.c >> @@ -57,6 +57,9 @@ typedef struct { >> static raw_socket_t raw_sockets[MAX_RAW_SOCKETS_NETDEVS]; >> static odp_spinlock_t raw_sockets_lock; >> +// Forward Declaration >> +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. >> @@ -153,7 +156,6 @@ int setup_pkt_sock(pkt_sock_t * const pkt_sock, const >> char *netdev, >> if (pool == ODP_BUFFER_POOL_INVALID) >> return -1; >> pkt_sock->pool = pool; >> - >> pkt = odp_packet_alloc(pool); >> if (!odp_packet_is_valid(pkt)) >> return -1; >> @@ -168,12 +170,14 @@ int setup_pkt_sock(pkt_sock_t * const pkt_sock, >> const char *netdev, >> pkt_sock->max_frame_len = pkt_sock->buf_size - >> pkt_sock->frame_offset; >> odp_packet_free(pkt); >> - >> odp_spinlock_lock(&raw_sockets_lock); >> - >> 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; >> } >> @@ -215,7 +219,6 @@ int setup_pkt_sock(pkt_sock_t * const pkt_sock, const >> char *netdev, >> perror("setup_pkt_sock() - bind(to IF)"); >> goto error; >> } >> - >> add_raw_fd(netdev, sockfd); >> odp_spinlock_unlock(&raw_sockets_lock); >> return sockfd; >> @@ -735,7 +738,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 +747,13 @@ static int mmap_store_hw_addr(pkt_sock_mmap_t * >> const pkt_sock, >> /* get MAC address */ >> memset(ðreq, 0, sizeof(ethreq)); >> strncpy(ethreq.ifr_name, netdev, IFNAMSIZ); >> - ret = ioctl(pkt_sock->sockfd, SIOCGIFHWADDR, ðreq); >> + ret = ioctl(sockfd, SIOCGIFHWADDR, ðreq); >> 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,8 +808,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); >> - if (ret != 0) >> + if(socket_store_hw_addr(pkt_sock->sockfd, pkt_sock->if_mac, >> netdev)) >> return -1; >> if_idx = if_nametoindex(netdev); >> > > > _______________________________________________ > 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
