@@ -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,
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- platform/linux-generic/pktio/socket_mmap.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)