Re: [lng-odp] [PATCHv9 7/8] linux-generic: add ipc pktio support

2015-10-19 Thread Maxim Uvarov

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

2015-10-19 Thread Maxim Uvarov

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

2015-10-19 Thread Maxim Uvarov

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

2015-10-19 Thread Stuart Haslam
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

2015-10-19 Thread Maxim Uvarov

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

2015-10-16 Thread Stuart Haslam
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

2015-10-13 Thread Nicolas Morey-Chaisemartin


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

2015-10-13 Thread Maxim Uvarov

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

2015-10-09 Thread Maxim Uvarov
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