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/odp_packet_socket.c | 30 ++++++++++++++ platform/linux-generic/odp_packet_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 d9250cd..9b62797 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 promisc_mode_set_sock_mmsg(pktio_entry_t *pktio_entry, odp_bool_t enable); int promisc_mode_set_sock_mmap(pktio_entry_t *pktio_entry, odp_bool_t enable); +int promisc_mode_get_sock_mmsg(pktio_entry_t *pktio_entry); + +int promisc_mode_get_sock_mmap(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 6b58270..a031d35 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 setup_pkt_sock(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 cb6c08b..4d67a15 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; @@ -764,8 +750,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); @@ -782,26 +766,24 @@ int odp_pktio_promisc_mode(odp_pktio_t id) return -1; } - if (entry->s.type == ODP_PKTIO_TYPE_LOOPBACK) { - unlock_entry(entry); - return promisc_mode_get_loopback(entry); + switch (entry->s.type) { + case ODP_PKTIO_TYPE_LOOPBACK: + ret = promisc_mode_get_loopback(entry); + break; + case ODP_PKTIO_TYPE_SOCKET_BASIC: + case ODP_PKTIO_TYPE_SOCKET_MMSG: + ret = promisc_mode_get_sock_mmsg(entry); + break; + case ODP_PKTIO_TYPE_SOCKET_MMAP: + ret = promisc_mode_get_sock_mmap(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/odp_packet_socket.c b/platform/linux-generic/odp_packet_socket.c index 863e116..38e8f1d 100644 --- a/platform/linux-generic/odp_packet_socket.c +++ b/platform/linux-generic/odp_packet_socket.c @@ -139,6 +139,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 setup_pkt_sock(pkt_sock_t *const pkt_sock, const char *netdev, odp_pool_t pool) @@ -460,3 +480,13 @@ int promisc_mode_set_sock_mmsg(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 promisc_mode_get_sock_mmsg(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/odp_packet_socket_mmap.c b/platform/linux-generic/odp_packet_socket_mmap.c index 3013d39..28f1264 100644 --- a/platform/linux-generic/odp_packet_socket_mmap.c +++ b/platform/linux-generic/odp_packet_socket_mmap.c @@ -508,3 +508,9 @@ int promisc_mode_set_sock_mmap(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 promisc_mode_get_sock_mmap(pktio_entry_t *pktio_entry) +{ + return promisc_mode_get_fd(pktio_entry->s.pkt_sock_mmap.sockfd, + pktio_entry->s.name); +} -- 2.4.2.3.g8277175 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
