@@ -50,6 +50,10 @@ struct pktio_entry {
pkt_sock_mmap_t pkt_sock_mmap; /**< using socket mmap
* API for IO */
};
+ enum {
+ STATE_START = 0,
+ STATE_STOP
+ } state;
classifier_t cls; /**< classifier linked with this pktio*/
char name[IF_NAMESIZE]; /**< name of pktio provided to
pktio_open() */
@@ -72,6 +76,8 @@ typedef struct pktio_if_ops {
int (*open)(odp_pktio_t pktio, pktio_entry_t *pktio_entry,
const char *devname, odp_pool_t pool);
int (*close)(pktio_entry_t *pktio_entry);
+ int (*start)(pktio_entry_t *pktio_entry);
+ int (*stop)(pktio_entry_t *pktio_entry);
int (*recv)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
unsigned len);
int (*send)(pktio_entry_t *pktio_entry, odp_packet_t pkt_table[],
@@ -289,6 +289,40 @@ int odp_pktio_close(odp_pktio_t id)
return 0;
}
+int odp_pktio_start(odp_pktio_t id)
+{
+ pktio_entry_t *entry;
+ int res = 0;
+
+ entry = get_pktio_entry(id);
+ if (!entry)
+ return -1;
+
+ lock_entry(entry);
+ if (entry->s.ops->start)
+ res = entry->s.ops->start(entry);
+ unlock_entry(entry);
+
+ return res;
+}
+
+int odp_pktio_stop(odp_pktio_t id)
+{
+ pktio_entry_t *entry;
+ int res = 0;
+
+ entry = get_pktio_entry(id);
+ if (!entry)
+ return -1;
+
+ lock_entry(entry);
+ if (entry->s.ops->stop)
+ res = entry->s.ops->stop(entry);
+ unlock_entry(entry);
+
+ return res;
+}
+
odp_pktio_t odp_pktio_lookup(const char *dev)
{
odp_pktio_t id = ODP_PKTIO_INVALID;
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- .../linux-generic/include/odp_packet_io_internal.h | 6 ++++ platform/linux-generic/odp_packet_io.c | 34 ++++++++++++++++++++++ 2 files changed, 40 insertions(+)