diff mbox

[API-NEXT,PATCHv4,4/7] linux-generic: socket mmap: implement pktio_start and pktio_stop

Message ID 1440580237-21578-5-git-send-email-maxim.uvarov@linaro.org
State Superseded
Headers show

Commit Message

Maxim Uvarov Aug. 26, 2015, 9:10 a.m. UTC
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 platform/linux-generic/pktio/socket_mmap.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
diff mbox

Patch

diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index 7d42678..2e55672 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -486,6 +486,7 @@  static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 			goto error;
 	}
 
+	pktio_entry->s.state = STATE_START;
 	return 0;
 
 error:
@@ -497,6 +498,12 @@  static int sock_mmap_recv(pktio_entry_t *pktio_entry,
 			  odp_packet_t pkt_table[], unsigned len)
 {
 	pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap;
+
+	if (pktio_entry->s.state == STATE_STOP) {
+		__odp_errno = EPERM;
+		return -1;
+	}
+
 	return pkt_mmap_v2_rx(pkt_sock->rx_ring.sock, &pkt_sock->rx_ring,
 			      pkt_table, len, pkt_sock->pool,
 			      pkt_sock->if_mac);
@@ -506,6 +513,12 @@  static int sock_mmap_send(pktio_entry_t *pktio_entry,
 			  odp_packet_t pkt_table[], unsigned len)
 {
 	pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap;
+
+	if (pktio_entry->s.state == STATE_STOP) {
+		__odp_errno = EPERM;
+		return -1;
+	}
+
 	return pkt_mmap_v2_tx(pkt_sock->tx_ring.sock, &pkt_sock->tx_ring,
 			      pkt_table, len);
 }
@@ -535,11 +548,25 @@  static int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry)
 				   pktio_entry->s.name);
 }
 
+static int sock_mmap_start(pktio_entry_t *pktio_entry)
+{
+	pktio_entry->s.state = STATE_START;
+	return 0;
+}
+
+static int sock_mmap_stop(pktio_entry_t *pktio_entry)
+{
+	pktio_entry->s.state = STATE_STOP;
+	return 0;
+}
+
 const pktio_if_ops_t sock_mmap_pktio_ops = {
 	.init = NULL,
 	.term = NULL,
 	.open = sock_mmap_open,
 	.close = sock_mmap_close,
+	.start = sock_mmap_start,
+	.stop = sock_mmap_stop,
 	.recv = sock_mmap_recv,
 	.send = sock_mmap_send,
 	.mtu_get = sock_mmap_mtu_get,