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 | 42 ++++++++-------------- platform/linux-generic/pktio/socket.c | 40 +++++++++++++++++++++ platform/linux-generic/pktio/socket_mmap.c | 6 ++++ 5 files changed, 69 insertions(+), 28 deletions(-) diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index c61abff..51b1dc2 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -107,6 +107,10 @@ int sock_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr); int sock_mmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr); +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); + #ifdef __cplusplus } #endif diff --git a/platform/linux-generic/include/odp_packet_socket.h b/platform/linux-generic/include/odp_packet_socket.h index b7ee1a5..2a00c63 100644 --- a/platform/linux-generic/include/odp_packet_socket.h +++ b/platform/linux-generic/include/odp_packet_socket.h @@ -103,6 +103,11 @@ ethaddrs_equal(unsigned char mac_a[], unsigned char mac_b[]) int mtu_get_fd(int fd, const char *name); /** + * Enable/Disable promisc mode for a packet socket + */ +int promisc_mode_set_fd(int fd, const char *name, int enable); + +/** * 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 861ccb0..016ded3 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -725,8 +725,6 @@ int odp_pktio_mtu(odp_pktio_t id) int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) { pktio_entry_t *entry; - int sockfd; - struct ifreq ifr; int ret; entry = get_pktio_entry(id); @@ -743,35 +741,23 @@ int odp_pktio_promisc_mode_set(odp_pktio_t id, odp_bool_t enable) return -1; } - if (entry->s.type == ODP_PKTIO_TYPE_LOOPBACK) { - unlock_entry(entry); - return loopback_promisc_mode_set(entry, enable); - } - - sockfd = sockfd_from_pktio_entry(entry); - snprintf(ifr.ifr_name, IF_NAMESIZE, "%s", entry->s.name); - - ret = ioctl(sockfd, SIOCGIFFLAGS, &ifr); - if (ret < 0) { - unlock_entry(entry); - ODP_DBG("ioctl SIOCGIFFLAGS error\n"); - return -1; - } - - if (enable) - ifr.ifr_flags |= IFF_PROMISC; - else - ifr.ifr_flags &= ~(IFF_PROMISC); - - ret = ioctl(sockfd, SIOCSIFFLAGS, &ifr); - if (ret < 0) { - unlock_entry(entry); - ODP_DBG("ioctl SIOCSIFFLAGS error\n"); - return -1; + switch (entry->s.type) { + case ODP_PKTIO_TYPE_LOOPBACK: + ret = loopback_promisc_mode_set(entry, enable); + break; + case ODP_PKTIO_TYPE_SOCKET_BASIC: + case ODP_PKTIO_TYPE_SOCKET_MMSG: + ret = sock_promisc_mode_set(entry, enable); + break; + case ODP_PKTIO_TYPE_SOCKET_MMAP: + ret = sock_mmap_promisc_mode_set(entry, enable); + break; + default: + ODP_ABORT("Wrong socket type %d\n", entry->s.type); } unlock_entry(entry); - return 0; + return ret; } int odp_pktio_promisc_mode(odp_pktio_t id) diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c index 93742b4..8ace880 100644 --- a/platform/linux-generic/pktio/socket.c +++ b/platform/linux-generic/pktio/socket.c @@ -110,6 +110,36 @@ int mtu_get_fd(int fd, const char *name) /* * ODP_PACKET_SOCKET_BASIC: * ODP_PACKET_SOCKET_MMSG: + * ODP_PACKET_SOCKET_MMAP: + */ +int promisc_mode_set_fd(int fd, const char *name, int enable) +{ + 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; + } + + if (enable) + ifr.ifr_flags |= IFF_PROMISC; + else + ifr.ifr_flags &= ~(IFF_PROMISC); + + ret = ioctl(fd, SIOCSIFFLAGS, &ifr); + if (ret < 0) { + ODP_DBG("ioctl SIOCSIFFLAGS error\n"); + return -1; + } + return 0; +} + +/* + * 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) @@ -422,3 +452,13 @@ int sock_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) memcpy(mac_addr, pktio_entry->s.pkt_sock.if_mac, ETH_ALEN); return ETH_ALEN; } + +/* + * ODP_PACKET_SOCKET_BASIC: + * ODP_PACKET_SOCKET_MMSG: + */ +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); +} diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c index a599ed3..7b743ab 100644 --- a/platform/linux-generic/pktio/socket_mmap.c +++ b/platform/linux-generic/pktio/socket_mmap.c @@ -502,3 +502,9 @@ int sock_mmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr) memcpy(mac_addr, pktio_entry->s.pkt_sock_mmap.if_mac, ETH_ALEN); return ETH_ALEN; } + +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); +} -- 2.4.5.3.g4915f6f _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
