Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/16/2015 21:16, Stuart Haslam wrote: It would be better to do away with the master/slave naming and instead use names that match their function, e.g.; rx.recv/rx.free and tx.recv/tx.free Stuart you have also about the same question bellow in the code. I also don't line naming ipc.rx.recv and ipc.tx.free. That is not rx or tx because of pkio is bidirectional. There is process with creates shm and processes which connect to that shm. They are very symmetrical and difference is only used flag and expected some information to be already filled. I deceived to name it master and slave. I.e. master is process which creates shm and other processes which reuse it. Change name is easy find and replace in the patch. But we can try to think which name is more suitable. How about: ipc.proc0 ipc.procX ipc.parent ipc.child ipc.initial ipc.secondary ipc.batman ipc.robin ? In that version I support only 2 processes connected to each other using single pktio. But we can update it to use multi version. For that needed to export information about 3-rd process to first and second. It should not be complex but I would like to do it in separate patch after that series included. Other comments looks reasonable. Will send updated patches. Maxim. ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/19/2015 13:43, Stuart Haslam wrote: On Mon, Oct 19, 2015 at 10:56:01AM +0300, Maxim Uvarov wrote: On 10/16/2015 21:16, Stuart Haslam wrote: It would be better to do away with the master/slave naming and instead use names that match their function, e.g.; rx.recv/rx.free and tx.recv/tx.free Stuart you have also about the same question bellow in the code. I also don't line naming ipc.rx.recv and ipc.tx.free. That is not rx or tx because of pkio is bidirectional. There is process with creates shm and processes which connect to that shm. They are very symmetrical and difference is only used flag and expected some information to be already filled. I deceived to name it master and slave. I.e. master is process which creates shm and other processes which reuse it. Yes I got that, I'm suggesting that the conditional check for whether this end of the pktio is a master or a slave can be done only once at open time rather than in every send/recv, since it doesn't change after the open. You have four rings with different uses depending on which end of the link you're on - m.prod master: enqueue to send slave: dequeue to recv m.cons master: dequeue to free transmitted packets slave: enqueue to request free of received packets s.prod master: dequeue to recv slave: enqueue to send s.cons master: enqueue to request free of received packets slave: dequeue to free transmitted packets So the pointers can be setup like this on open - if (master) { tx.send = m.prod; tx.free = m.cons; rx.recv = s.prod; rx.free = s.cons; } else { tx.send = s.prod; tx.free = s.cons; rx.recv = m.prod; rx.free = m.cons; } Obviously not exactly like that, but I hope you get the idea. Ok, that looks reasonable. Maxim. Change name is easy find and replace in the patch. But we can try to think which name is more suitable. How about: ipc.proc0 ipc.procX ipc.parent ipc.child ipc.initial ipc.secondary ipc.batman ipc.robin ? In that version I support only 2 processes connected to each other using single pktio. But we can update it to use multi version. For that needed to export information about 3-rd process to first and second. It should not be complex but I would like to do it in separate patch after that series included. Other comments looks reasonable. Will send updated patches. Maxim. ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/16/2015 21:16, Stuart Haslam wrote: And a more general question, are multiple slaves supported or is this intended to be a 1-1 pipe? I can't see anything explicitly preventing multiple slaves but it looks like all slaves would map the same rings. The rings as accessed with mp/mc safe functions so I guess it will work but the master/slave relationship is exposed (packets sent be the master go to only one of the slaves, all packets sent by the slaves go to the master) but the application has no way of knowing which it is. I want to have separate patch for it. In general needed some array for rings + process identifier in main shared memory. | p0 packet pool | | p0 tx ring| | p0 rx ring| | p1 packet pool | | p1 tx ring| | p1 rx ring| | p2 packet pool | | p2 tx ring | | p2 rx ring | Because of p0 (process 0) can place packet to p1 and p2 it has to be connected with it's own rx/tx link (which is done as odp ring). So it will be something like: | p0 packet pool | | int number of processes | | p0 tx ring array | | p0 rx ring array | Plus some notification that new process opened pktio with the same name and want to connect to it. But because it's not clear for me how to define which process should take packet in case if there are several processes then I think first version is reasonable to be 1-1. Assuming that you can create banch of different pktios ipc-1, ipc-2, ipc-3 and etc. If we will accept Nikitas idea to support hw queues for pktio, that I can reuse that api for ipc. Maxim. ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On Mon, Oct 19, 2015 at 10:56:01AM +0300, Maxim Uvarov wrote: > On 10/16/2015 21:16, Stuart Haslam wrote: > >It would be better to do away with the master/slave naming and instead use > >names that match their function, e.g.; rx.recv/rx.free and tx.recv/tx.free > > Stuart you have also about the same question bellow in the code. I also > don't line naming ipc.rx.recv and ipc.tx.free. > > That is not rx or tx because of pkio is bidirectional. There is > process with creates > shm and processes which connect to that shm. They are very > symmetrical and difference > is only used flag and expected some information to be already > filled. I deceived to name > it master and slave. I.e. master is process which creates shm and > other processes which reuse it. Yes I got that, I'm suggesting that the conditional check for whether this end of the pktio is a master or a slave can be done only once at open time rather than in every send/recv, since it doesn't change after the open. You have four rings with different uses depending on which end of the link you're on - m.prod master: enqueue to send slave: dequeue to recv m.cons master: dequeue to free transmitted packets slave: enqueue to request free of received packets s.prod master: dequeue to recv slave: enqueue to send s.cons master: enqueue to request free of received packets slave: dequeue to free transmitted packets So the pointers can be setup like this on open - if (master) { tx.send = m.prod; tx.free = m.cons; rx.recv = s.prod; rx.free = s.cons; } else { tx.send = s.prod; tx.free = s.cons; rx.recv = m.prod; rx.free = m.cons; } Obviously not exactly like that, but I hope you get the idea. > > Change name is easy find and replace in the patch. But we can try to > think which name is more > suitable. How about: > > ipc.proc0 > ipc.procX > > ipc.parent > ipc.child > > ipc.initial > ipc.secondary > > ipc.batman > ipc.robin > > ? > > In that version I support only 2 processes connected to each other > using single pktio. But we can update it > to use multi version. For that needed to export information about > 3-rd process to first and second. It should > not be complex but I would like to do it in separate patch after > that series included. > > Other comments looks reasonable. Will send updated patches. > > Maxim. > > ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/13/2015 16:50, Nicolas Morey-Chaisemartin wrote: On 10/09/2015 01:59 PM, Maxim Uvarov wrote: Signed-off-by: Maxim Uvarov--- platform/linux-generic/Makefile.am | 2 + .../linux-generic/include/odp_buffer_internal.h| 3 + .../linux-generic/include/odp_packet_io_internal.h | 35 + .../include/odp_packet_io_ipc_internal.h | 51 ++ platform/linux-generic/include/odp_shm_internal.h | 20 + platform/linux-generic/odp_packet_io.c | 1 + platform/linux-generic/odp_pool.c | 11 +- platform/linux-generic/odp_shared_memory.c | 10 +- platform/linux-generic/pktio/io_ops.c | 1 + platform/linux-generic/pktio/ipc.c | 720 + platform/linux-generic/pktio/ring.c| 1 + 11 files changed, 851 insertions(+), 4 deletions(-) create mode 100644 platform/linux-generic/include/odp_packet_io_ipc_internal.h create mode 100644 platform/linux-generic/include/odp_shm_internal.h create mode 100644 platform/linux-generic/pktio/ipc.c create mode 12 platform/linux-generic/pktio/ring.c diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index b9ed3b0..71353dd 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -151,9 +151,11 @@ __LIB__libodp_la_SOURCES = \ odp_packet_flags.c \ odp_packet_io.c \ pktio/io_ops.c \ + pktio/ipc.c \ pktio/loop.c \ pktio/socket.c \ pktio/socket_mmap.c \ + pktio/ring.c \ odp_pool.c \ odp_queue.c \ odp_rwlock.c \ diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h index 4cacca1..a078e52 100644 --- a/platform/linux-generic/include/odp_buffer_internal.h +++ b/platform/linux-generic/include/odp_buffer_internal.h @@ -132,6 +132,9 @@ struct odp_buffer_hdr_t { uint32_t uarea_size; /* size of user area */ uint32_t segcount; /* segment count */ uint32_t segsize;/* segment size */ + /* ipc mapped process can not walk over pointers, +* offset has to be used */ + uint64_t ipc_addr_offset[ODP_BUFFER_MAX_SEG]; void*addr[ODP_BUFFER_MAX_SEG]; /* block addrs */ uint64_t order; /* sequence for ordered queues */ queue_entry_t *origin_qe; /* ordered queue origin */ I haven't been through everything yet but should this be an union with the addr ? The odp_buffer_hdr_t is already quite large as it is. Nicolas Unfortunately that can not be union. Because of pool can be used by current process and also with other process which mapped this pool I will have the same code in new version until I will find better solution to lower this struct size. Might be we don't need u64 for offsets here. Maxim. ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On Fri, Oct 09, 2015 at 02:59:03PM +0300, Maxim Uvarov wrote: > Signed-off-by: Maxim Uvarov> --- > platform/linux-generic/Makefile.am | 2 + > .../linux-generic/include/odp_buffer_internal.h| 3 + > .../linux-generic/include/odp_packet_io_internal.h | 35 + > .../include/odp_packet_io_ipc_internal.h | 51 ++ > platform/linux-generic/include/odp_shm_internal.h | 20 + > platform/linux-generic/odp_packet_io.c | 1 + > platform/linux-generic/odp_pool.c | 11 +- > platform/linux-generic/odp_shared_memory.c | 10 +- > platform/linux-generic/pktio/io_ops.c | 1 + > platform/linux-generic/pktio/ipc.c | 720 > + > platform/linux-generic/pktio/ring.c| 1 + > 11 files changed, 851 insertions(+), 4 deletions(-) > create mode 100644 > platform/linux-generic/include/odp_packet_io_ipc_internal.h > create mode 100644 platform/linux-generic/include/odp_shm_internal.h > create mode 100644 platform/linux-generic/pktio/ipc.c > create mode 12 platform/linux-generic/pktio/ring.c > > diff --git a/platform/linux-generic/Makefile.am > b/platform/linux-generic/Makefile.am > index b9ed3b0..71353dd 100644 > --- a/platform/linux-generic/Makefile.am > +++ b/platform/linux-generic/Makefile.am > @@ -151,9 +151,11 @@ __LIB__libodp_la_SOURCES = \ > odp_packet_flags.c \ > odp_packet_io.c \ > pktio/io_ops.c \ > +pktio/ipc.c \ > pktio/loop.c \ > pktio/socket.c \ > pktio/socket_mmap.c \ > +pktio/ring.c \ > odp_pool.c \ > odp_queue.c \ > odp_rwlock.c \ > diff --git a/platform/linux-generic/include/odp_buffer_internal.h > b/platform/linux-generic/include/odp_buffer_internal.h > index 4cacca1..a078e52 100644 > --- a/platform/linux-generic/include/odp_buffer_internal.h > +++ b/platform/linux-generic/include/odp_buffer_internal.h > @@ -132,6 +132,9 @@ struct odp_buffer_hdr_t { > uint32_t uarea_size; /* size of user area */ > uint32_t segcount; /* segment count */ > uint32_t segsize;/* segment size */ > + /* ipc mapped process can not walk over pointers, > + * offset has to be used */ > + uint64_t ipc_addr_offset[ODP_BUFFER_MAX_SEG]; > void*addr[ODP_BUFFER_MAX_SEG]; /* block addrs */ > uint64_t order; /* sequence for ordered queues */ > queue_entry_t *origin_qe; /* ordered queue origin */ > diff --git a/platform/linux-generic/include/odp_packet_io_internal.h > b/platform/linux-generic/include/odp_packet_io_internal.h > index 6b03051..62e6829 100644 > --- a/platform/linux-generic/include/odp_packet_io_internal.h > +++ b/platform/linux-generic/include/odp_packet_io_internal.h > @@ -23,6 +23,7 @@ extern "C" { > #include > #include > #include > +#include > > #include > #include > @@ -36,6 +37,38 @@ typedef struct { > odp_bool_t promisc; /**< promiscuous mode state */ > } pkt_loop_t; > > +typedef struct { > + /* TX */ > + struct { > + odph_ring_t *prod; /**< ODP ring for IPC msg packets > + indexes transmitted to shared > + memory */ > + odph_ring_t *cons; /**< ODP ring for IPC msg packets > + indexes already processed by remote > + process */ > + } m; /* master */ > + /* RX */ > + struct { > + odph_ring_t *prod; /**< ODP ring for IPC msg packets > + indexes received from shared > + memory (from remote process) */ > + odph_ring_t *cons; /**< ODP ring for IPC msg packets > + indexes already processed by > + current process */ > + } s; /* slave */ It would be better to do away with the master/slave naming and instead use names that match their function, e.g.; rx.recv/rx.free and tx.recv/tx.free > + void*pool_base; /**< Remote pool base addr */ > + void*pool_mdata_base; /**< Remote pool mdata base > addr */ > + uint64_tpkt_size; /**< Packet size in remote pool > */ > + odp_pool_t pool; /**< Pool of main process */ > + odp_shm_t pool_shm; /**< Shm memory for remote pool > */ > + enum { > + ODP_PKTIO_TYPE_IPC = 0, > + ODP_PKTIO_TYPE_IPC_SLAVE
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/09/2015 01:59 PM, Maxim Uvarov wrote: > Signed-off-by: Maxim Uvarov> --- > platform/linux-generic/Makefile.am | 2 + > .../linux-generic/include/odp_buffer_internal.h| 3 + > .../linux-generic/include/odp_packet_io_internal.h | 35 + > .../include/odp_packet_io_ipc_internal.h | 51 ++ > platform/linux-generic/include/odp_shm_internal.h | 20 + > platform/linux-generic/odp_packet_io.c | 1 + > platform/linux-generic/odp_pool.c | 11 +- > platform/linux-generic/odp_shared_memory.c | 10 +- > platform/linux-generic/pktio/io_ops.c | 1 + > platform/linux-generic/pktio/ipc.c | 720 > + > platform/linux-generic/pktio/ring.c| 1 + > 11 files changed, 851 insertions(+), 4 deletions(-) > create mode 100644 > platform/linux-generic/include/odp_packet_io_ipc_internal.h > create mode 100644 platform/linux-generic/include/odp_shm_internal.h > create mode 100644 platform/linux-generic/pktio/ipc.c > create mode 12 platform/linux-generic/pktio/ring.c > > diff --git a/platform/linux-generic/Makefile.am > b/platform/linux-generic/Makefile.am > index b9ed3b0..71353dd 100644 > --- a/platform/linux-generic/Makefile.am > +++ b/platform/linux-generic/Makefile.am > @@ -151,9 +151,11 @@ __LIB__libodp_la_SOURCES = \ > odp_packet_flags.c \ > odp_packet_io.c \ > pktio/io_ops.c \ > +pktio/ipc.c \ > pktio/loop.c \ > pktio/socket.c \ > pktio/socket_mmap.c \ > +pktio/ring.c \ > odp_pool.c \ > odp_queue.c \ > odp_rwlock.c \ > diff --git a/platform/linux-generic/include/odp_buffer_internal.h > b/platform/linux-generic/include/odp_buffer_internal.h > index 4cacca1..a078e52 100644 > --- a/platform/linux-generic/include/odp_buffer_internal.h > +++ b/platform/linux-generic/include/odp_buffer_internal.h > @@ -132,6 +132,9 @@ struct odp_buffer_hdr_t { > uint32_t uarea_size; /* size of user area */ > uint32_t segcount; /* segment count */ > uint32_t segsize;/* segment size */ > + /* ipc mapped process can not walk over pointers, > + * offset has to be used */ > + uint64_t ipc_addr_offset[ODP_BUFFER_MAX_SEG]; > void*addr[ODP_BUFFER_MAX_SEG]; /* block addrs */ > uint64_t order; /* sequence for ordered queues */ > queue_entry_t *origin_qe; /* ordered queue origin */ I haven't been through everything yet but should this be an union with the addr ? The odp_buffer_hdr_t is already quite large as it is. Nicolas ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
On 10/13/2015 16:50, Nicolas Morey-Chaisemartin wrote: On 10/09/2015 01:59 PM, Maxim Uvarov wrote: Signed-off-by: Maxim Uvarov--- platform/linux-generic/Makefile.am | 2 + .../linux-generic/include/odp_buffer_internal.h| 3 + .../linux-generic/include/odp_packet_io_internal.h | 35 + .../include/odp_packet_io_ipc_internal.h | 51 ++ platform/linux-generic/include/odp_shm_internal.h | 20 + platform/linux-generic/odp_packet_io.c | 1 + platform/linux-generic/odp_pool.c | 11 +- platform/linux-generic/odp_shared_memory.c | 10 +- platform/linux-generic/pktio/io_ops.c | 1 + platform/linux-generic/pktio/ipc.c | 720 + platform/linux-generic/pktio/ring.c| 1 + 11 files changed, 851 insertions(+), 4 deletions(-) create mode 100644 platform/linux-generic/include/odp_packet_io_ipc_internal.h create mode 100644 platform/linux-generic/include/odp_shm_internal.h create mode 100644 platform/linux-generic/pktio/ipc.c create mode 12 platform/linux-generic/pktio/ring.c diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index b9ed3b0..71353dd 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -151,9 +151,11 @@ __LIB__libodp_la_SOURCES = \ odp_packet_flags.c \ odp_packet_io.c \ pktio/io_ops.c \ + pktio/ipc.c \ pktio/loop.c \ pktio/socket.c \ pktio/socket_mmap.c \ + pktio/ring.c \ odp_pool.c \ odp_queue.c \ odp_rwlock.c \ diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h index 4cacca1..a078e52 100644 --- a/platform/linux-generic/include/odp_buffer_internal.h +++ b/platform/linux-generic/include/odp_buffer_internal.h @@ -132,6 +132,9 @@ struct odp_buffer_hdr_t { uint32_t uarea_size; /* size of user area */ uint32_t segcount; /* segment count */ uint32_t segsize;/* segment size */ + /* ipc mapped process can not walk over pointers, +* offset has to be used */ + uint64_t ipc_addr_offset[ODP_BUFFER_MAX_SEG]; void*addr[ODP_BUFFER_MAX_SEG]; /* block addrs */ uint64_t order; /* sequence for ordered queues */ queue_entry_t *origin_qe; /* ordered queue origin */ I haven't been through everything yet but should this be an union with the addr ? The odp_buffer_hdr_t is already quite large as it is. Nicolas Yes, that can be union with addr, I think. Will update. Maxim. ___ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp
[lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support
Signed-off-by: Maxim Uvarov--- platform/linux-generic/Makefile.am | 2 + .../linux-generic/include/odp_buffer_internal.h| 3 + .../linux-generic/include/odp_packet_io_internal.h | 35 + .../include/odp_packet_io_ipc_internal.h | 51 ++ platform/linux-generic/include/odp_shm_internal.h | 20 + platform/linux-generic/odp_packet_io.c | 1 + platform/linux-generic/odp_pool.c | 11 +- platform/linux-generic/odp_shared_memory.c | 10 +- platform/linux-generic/pktio/io_ops.c | 1 + platform/linux-generic/pktio/ipc.c | 720 + platform/linux-generic/pktio/ring.c| 1 + 11 files changed, 851 insertions(+), 4 deletions(-) create mode 100644 platform/linux-generic/include/odp_packet_io_ipc_internal.h create mode 100644 platform/linux-generic/include/odp_shm_internal.h create mode 100644 platform/linux-generic/pktio/ipc.c create mode 12 platform/linux-generic/pktio/ring.c diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am index b9ed3b0..71353dd 100644 --- a/platform/linux-generic/Makefile.am +++ b/platform/linux-generic/Makefile.am @@ -151,9 +151,11 @@ __LIB__libodp_la_SOURCES = \ odp_packet_flags.c \ odp_packet_io.c \ pktio/io_ops.c \ + pktio/ipc.c \ pktio/loop.c \ pktio/socket.c \ pktio/socket_mmap.c \ + pktio/ring.c \ odp_pool.c \ odp_queue.c \ odp_rwlock.c \ diff --git a/platform/linux-generic/include/odp_buffer_internal.h b/platform/linux-generic/include/odp_buffer_internal.h index 4cacca1..a078e52 100644 --- a/platform/linux-generic/include/odp_buffer_internal.h +++ b/platform/linux-generic/include/odp_buffer_internal.h @@ -132,6 +132,9 @@ struct odp_buffer_hdr_t { uint32_t uarea_size; /* size of user area */ uint32_t segcount; /* segment count */ uint32_t segsize;/* segment size */ + /* ipc mapped process can not walk over pointers, +* offset has to be used */ + uint64_t ipc_addr_offset[ODP_BUFFER_MAX_SEG]; void*addr[ODP_BUFFER_MAX_SEG]; /* block addrs */ uint64_t order; /* sequence for ordered queues */ queue_entry_t *origin_qe; /* ordered queue origin */ diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h index 6b03051..62e6829 100644 --- a/platform/linux-generic/include/odp_packet_io_internal.h +++ b/platform/linux-generic/include/odp_packet_io_internal.h @@ -23,6 +23,7 @@ extern "C" { #include #include #include +#include #include #include @@ -36,6 +37,38 @@ typedef struct { odp_bool_t promisc; /**< promiscuous mode state */ } pkt_loop_t; +typedefstruct { + /* TX */ + struct { + odph_ring_t *prod; /**< ODP ring for IPC msg packets + indexes transmitted to shared + memory */ + odph_ring_t *cons; /**< ODP ring for IPC msg packets + indexes already processed by remote + process */ + } m; /* master */ + /* RX */ + struct { + odph_ring_t *prod; /**< ODP ring for IPC msg packets + indexes received from shared +memory (from remote process) */ + odph_ring_t *cons; /**< ODP ring for IPC msg packets + indexes already processed by + current process */ + } s; /* slave */ + void*pool_base; /**< Remote pool base addr */ + void*pool_mdata_base; /**< Remote pool mdata base addr */ + uint64_tpkt_size; /**< Packet size in remote pool */ + odp_pool_t pool; /**< Pool of main process */ + odp_shm_t pool_shm; /**< Shm memory for remote pool */ + enum { + ODP_PKTIO_TYPE_IPC = 0, + ODP_PKTIO_TYPE_IPC_SLAVE + } type; /**< define if it's master or slave process */ + int ready; /**< 1 - pktio is ready and can recv/send packet, 0 - not yet ready */ + void *pinfo; +} _ipc_pktio_t; + struct pktio_entry { const struct pktio_if_ops *ops; /**< Implementation specific methods */ odp_spinlock_t