Add temporarly function definitions to odp_packet_io_internal.h instead of odp_packet_socket.h to obtain pktio_entry_t definition
Signed-off-by: Nicolas Morey-Chaisemartin <[email protected]> --- .../linux-generic/include/odp_packet_io_internal.h | 4 ++ platform/linux-generic/include/odp_packet_socket.h | 5 +++ platform/linux-generic/odp_packet_io.c | 46 +++++++--------------- platform/linux-generic/pktio/socket.c | 30 ++++++++++++++ platform/linux-generic/pktio/socket_mmap.c | 6 +++ 5 files changed, 59 insertions(+), 32 deletions(-) diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 51b1dc2..76c8e8e 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -111,6 +111,10 @@ int sock_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable); int sock_mmap_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable); +int sock_promisc_mode_get(pktio_entry_t *pktio_entry); + +int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry); + #ifdef __cplusplus } #endif diff --git a/platform/linux-generic/include/odp_packet_socket.h b/platform/linux-generic/include/odp_packet_socket.h index 2a00c63..137da07 100644 --- a/platform/linux-generic/include/odp_packet_socket.h +++ b/platform/linux-generic/include/odp_packet_socket.h @@ -108,6 +108,11 @@ int mtu_get_fd(int fd, const char *name); int promisc_mode_set_fd(int fd, const char *name, int enable); /** + * Return promisc mode of a packet socket + */ +int promisc_mode_get_fd(int fd, const char *name); + +/** * Open & configure a raw packet socket */ int sock_setup_pkt(pkt_sock_t * const pkt_sock, const char *netdev, diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 016ded3..eb61e3c 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -670,20 +670,6 @@ int pktin_poll(pktio_entry_t *entry) return 0; } -/** function should be called with locked entry */ -static int sockfd_from_pktio_entry(pktio_entry_t *entry) -{ - switch (entry->s.type) { - case ODP_PKTIO_TYPE_SOCKET_BASIC: - case ODP_PKTIO_TYPE_SOCKET_MMSG: - return entry->s.pkt_sock.sockfd; - case ODP_PKTIO_TYPE_SOCKET_MMAP: - return entry->s.pkt_sock_mmap.sockfd; - default: - ODP_ABORT("Wrong socket type %d\n", entry->s.type); - } -} - int odp_pktio_mtu(odp_pktio_t id) { pktio_entry_t *entry; @@ -763,8 +749,6 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) int odp_pktio_promisc_mode(odp_pktio_t id) { pktio_entry_t *entry; - int sockfd; - struct ifreq ifr; int ret; entry = get_pktio_entry(id); @@ -781,26 +765,24 @@ int odp_pktio_promisc_mode(odp_pktio_t id) return -1; } - if (entry->s.type == ODP_PKTIO_TYPE_LOOPBACK) { - unlock_entry(entry); - return loopback_promisc_mode_get(entry); + switch (entry->s.type) { + case ODP_PKTIO_TYPE_LOOPBACK: + ret = loopback_promisc_mode_get(entry); + break; + case ODP_PKTIO_TYPE_SOCKET_BASIC: + case ODP_PKTIO_TYPE_SOCKET_MMSG: + ret = sock_promisc_mode_get(entry); + break; + case ODP_PKTIO_TYPE_SOCKET_MMAP: + ret = sock_mmap_promisc_mode_get(entry); + break; + default: + ODP_ABORT("Wrong socket type %d\n", entry->s.type); } - sockfd = sockfd_from_pktio_entry(entry); - snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", entry->s.name); - - ret = ioctl(sockfd, SIOCGIFFLAGS, &ifr); - if (ret < 0) { - ODP_DBG("ioctl SIOCGIFFLAGS error\n"); - unlock_entry(entry); - return -1; - } unlock_entry(entry); - if (ifr.ifr_flags & IFF_PROMISC) - return 1; - else - return 0; + return ret; } diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index 8ace880..9c09867 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -140,6 +140,26 @@ int promisc_mode_set_fd(int fd, const char *name, int enable) /* * ODP_PACKET_SOCKET_BASIC: * ODP_PACKET_SOCKET_MMSG: + * ODP_PACKET_SOCKET_MMAP: + */ +int promisc_mode_get_fd(int fd, const char *name) +{ + struct ifreq ifr; + int ret; + + snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", name); + ret = ioctl(fd, SIOCGIFFLAGS, &ifr); + if (ret < 0) { + ODP_DBG("ioctl SIOCGIFFLAGS error\n"); + return -1; + } + + return !!(ifr.ifr_flags & IFF_PROMISC); +} + +/* + * ODP_PACKET_SOCKET_BASIC: + * ODP_PACKET_SOCKET_MMSG: */ int sock_setup_pkt(pkt_sock_t *const pkt_sock, const char *netdev, odp_pool_t pool) @@ -462,3 +482,13 @@ int sock_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) return promisc_mode_set_fd(pktio_entry->s.pkt_sock.sockfd, pktio_entry->s.name, enable); } + +/* + * ODP_PACKET_SOCKET_BASIC: + * ODP_PACKET_SOCKET_MMSG: + */ +int sock_promisc_mode_get(pktio_entry_t *pktio_entry) +{ + return promisc_mode_get_fd(pktio_entry->s.pkt_sock.sockfd, + pktio_entry->s.name); +} diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index 7b743ab..8eb22a2 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -508,3 +508,9 @@ int sock_mmap_promisc_mode_set(pktio_entry_t *pktio_entry, odp_bool_t enable) return promisc_mode_set_fd(pktio_entry->s.pkt_sock_mmap.sockfd, pktio_entry->s.name, enable); } + +int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry) +{ + return promisc_mode_get_fd(pktio_entry->s.pkt_sock_mmap.sockfd, + pktio_entry->s.name); +} -- 2.4.5.3.g4915f6f _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
