Signed-off-by: Nicolas Morey-Chaisemartin <[email protected]>
---
platform/linux-generic/odp_packet_io.c | 6 -----
platform/linux-generic/pktio/socket.c | 35 ++++++++++++++-----------
platform/linux-generic/pktio/socket_mmap.c | 42 ++++++++++++++++--------------
3 files changed, 43 insertions(+), 40 deletions(-)
diff --git a/platform/linux-generic/odp_packet_io.c
b/platform/linux-generic/odp_packet_io.c
index eb61e3c..669bea8 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -194,22 +194,16 @@ static int sock_init(pktio_entry_t *entry, const char
*dev,
if (getenv("ODP_PKTIO_DISABLE_SOCKET_MMAP") == NULL) {
entry->s.type = ODP_PKTIO_TYPE_SOCKET_MMAP;
fd = sock_mmap_setup_pkt(&entry->s.pkt_sock_mmap, dev, pool, 1);
- if (fd == -1)
- sock_mmap_close_pkt(&entry->s.pkt_sock_mmap);
}
if (fd == -1 && getenv("ODP_PKTIO_DISABLE_SOCKET_MMSG") == NULL) {
entry->s.type = ODP_PKTIO_TYPE_SOCKET_MMSG;
fd = sock_setup_pkt(&entry->s.pkt_sock, dev, pool);
- if (fd == -1)
- sock_close_pkt(&entry->s.pkt_sock);
}
if (fd == -1 && getenv("ODP_PKTIO_DISABLE_SOCKET_BASIC") == NULL) {
entry->s.type = ODP_PKTIO_TYPE_SOCKET_BASIC;
fd = sock_setup_pkt(&entry->s.pkt_sock, dev, pool);
- if (fd == -1)
- sock_close_pkt(&entry->s.pkt_sock);
}
if (fd == -1)
diff --git a/platform/linux-generic/pktio/socket.c
b/platform/linux-generic/pktio/socket.c
index 9c09867..aaa2c99 100644
--- a/platform/linux-generic/pktio/socket.c
+++ b/platform/linux-generic/pktio/socket.c
@@ -161,6 +161,25 @@ int promisc_mode_get_fd(int fd, const char *name)
* ODP_PACKET_SOCKET_BASIC:
* ODP_PACKET_SOCKET_MMSG:
*/
+/*
+ * ODP_PACKET_SOCKET_BASIC:
+ * ODP_PACKET_SOCKET_MMSG:
+ */
+int sock_close_pkt(pkt_sock_t *const pkt_sock)
+{
+ if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
+ __odp_errno = errno;
+ ODP_ERR("close(sockfd): %s\n", strerror(errno));
+ 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)
{
@@ -226,27 +245,13 @@ int sock_setup_pkt(pkt_sock_t *const pkt_sock, const char
*netdev,
error:
__odp_errno = errno;
+ sock_close_pkt(pkt_sock);
return -1;
}
/*
* ODP_PACKET_SOCKET_BASIC:
- * ODP_PACKET_SOCKET_MMSG:
- */
-int sock_close_pkt(pkt_sock_t *const pkt_sock)
-{
- if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
- __odp_errno = errno;
- ODP_ERR("close(sockfd): %s\n", strerror(errno));
- return -1;
- }
-
- return 0;
-}
-
-/*
- * ODP_PACKET_SOCKET_BASIC:
*/
int sock_basic_recv_pkt(pkt_sock_t *const pkt_sock,
odp_packet_t pkt_table[], unsigned len)
diff --git a/platform/linux-generic/pktio/socket_mmap.c
b/platform/linux-generic/pktio/socket_mmap.c
index 8eb22a2..ae2602f 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -406,6 +406,18 @@ static int mmap_store_hw_addr(pkt_sock_mmap_t *const
pkt_sock,
return 0;
}
+int sock_mmap_close_pkt(pkt_sock_mmap_t *const pkt_sock)
+{
+ mmap_unmap_sock(pkt_sock);
+ if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
+ __odp_errno = errno;
+ ODP_ERR("close(sockfd): %s\n", strerror(errno));
+ return -1;
+ }
+
+ return 0;
+}
+
int sock_mmap_setup_pkt(pkt_sock_mmap_t *const pkt_sock, const char *netdev,
odp_pool_t pool, int fanout)
{
@@ -423,57 +435,49 @@ int sock_mmap_setup_pkt(pkt_sock_mmap_t *const pkt_sock,
const char *netdev,
pkt_sock->pool = pool;
pkt_sock->sockfd = mmap_pkt_socket();
if (pkt_sock->sockfd == -1)
- return -1;
+ goto error;
ret = mmap_bind_sock(pkt_sock, netdev);
if (ret != 0)
- return -1;
+ goto error;
ret = mmap_setup_ring(pkt_sock->sockfd, &pkt_sock->tx_ring,
PACKET_TX_RING, pool, fanout);
if (ret != 0)
- return -1;
+ goto error;
ret = mmap_setup_ring(pkt_sock->sockfd, &pkt_sock->rx_ring,
PACKET_RX_RING, pool, fanout);
if (ret != 0)
- return -1;
+ goto error;
ret = mmap_sock(pkt_sock);
if (ret != 0)
- return -1;
+ goto error;
ret = mmap_store_hw_addr(pkt_sock, netdev);
if (ret != 0)
- return -1;
+ goto error;
if_idx = if_nametoindex(netdev);
if (if_idx == 0) {
__odp_errno = errno;
ODP_ERR("if_nametoindex(): %s\n", strerror(errno));
- return -1;
+ goto error;
}
pkt_sock->fanout = fanout;
if (fanout) {
ret = set_pkt_sock_fanout_mmap(pkt_sock, if_idx);
if (ret != 0)
- return -1;
+ goto error;
}
return pkt_sock->sockfd;
-}
-int sock_mmap_close_pkt(pkt_sock_mmap_t *const pkt_sock)
-{
- mmap_unmap_sock(pkt_sock);
- if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
- __odp_errno = errno;
- ODP_ERR("close(sockfd): %s\n", strerror(errno));
- return -1;
- }
-
- return 0;
+error:
+ sock_mmap_close_pkt(pkt_sock);
+ return -1;
}
int sock_mmap_recv_pkt(pkt_sock_mmap_t *const pkt_sock,
--
2.4.5.3.g4915f6f
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp