* [Xenomai] xddp port questions
@ 2014-01-14 12:15 Leopold Palomo-Avellaneda
2014-01-14 14:22 ` Philippe Gerum
0 siblings, 1 reply; 6+ messages in thread
From: Leopold Palomo-Avellaneda @ 2014-01-14 12:15 UTC (permalink / raw)
To: xenomai
Hi,
in the example xddp-label a two realtime task are connected with a non-
realtime time. They share the same port where one rt task receive from the
non-rt task and the other send to rt-task.
The regular thread read and write in the same devname
(/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread listen from
that port.
I don't understand how is possible that both (non-rt and rt threads) listen
from the same port and could not have collisions if two threads (non-rt and
rt) try to write in the same port.
Could not be better to separate it?
Thanks in advance,
Leopold
--
--
Linux User 152692
Catalonia
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20140114/935a98e0/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai] xddp port questions
2014-01-14 12:15 [Xenomai] xddp port questions Leopold Palomo-Avellaneda
@ 2014-01-14 14:22 ` Philippe Gerum
2014-01-20 16:18 ` Leopold Palomo-Avellaneda
0 siblings, 1 reply; 6+ messages in thread
From: Philippe Gerum @ 2014-01-14 14:22 UTC (permalink / raw)
To: Leopold Palomo-Avellaneda, xenomai
On 01/14/2014 01:15 PM, Leopold Palomo-Avellaneda wrote:
> Hi,
>
> in the example xddp-label a two realtime task are connected with a non-
> realtime time. They share the same port where one rt task receive from the
> non-rt task and the other send to rt-task.
>
> The regular thread read and write in the same devname
> (/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread listen from
> that port.
>
> I don't understand how is possible that both (non-rt and rt threads) listen
> from the same port and could not have collisions if two threads (non-rt and
> rt) try to write in the same port.
>
> Could not be better to separate it?
>
No, that would defeat the purpose of the illustration.
XDDP is a wrapper over Xenomai's message pipe support, offering a
socket-based interface to applications. Each XDDP port is mapped to a
given /dev/rtp device minor, but the communication endpoints between RT
and NRT are different internally.
[XDDP-port] <---> xnpipe #<port>
^
|
| * input queue: /dev/rtp -> xnpipe
| * output queue: xnpipe -> /dev/rtp
|
v
/dev/rtp<port>
So, when NRT reads from /dev/rtp<port>, it does not actually listen to
the same endpoint/queue than RT, because message pipes are
bi-directional. Likewise, NRT and RT never write to the same queue,
since the purpose of message pipes is to cross the RT/NRT domain boundary.
--
Philippe.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai] xddp port questions
2014-01-14 14:22 ` Philippe Gerum
@ 2014-01-20 16:18 ` Leopold Palomo-Avellaneda
2014-01-20 16:29 ` Philippe Gerum
0 siblings, 1 reply; 6+ messages in thread
From: Leopold Palomo-Avellaneda @ 2014-01-20 16:18 UTC (permalink / raw)
To: Philippe Gerum; +Cc: xenomai
A Dimarts, 14 de gener de 2014, Philippe Gerum va escriure:
> On 01/14/2014 01:15 PM, Leopold Palomo-Avellaneda wrote:
> > Hi,
> >
> > in the example xddp-label a two realtime task are connected with a non-
> > realtime time. They share the same port where one rt task receive from the
> > non-rt task and the other send to rt-task.
> >
> > The regular thread read and write in the same devname
> > (/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread listen
from
> > that port.
> >
> > I don't understand how is possible that both (non-rt and rt threads)
listen
> > from the same port and could not have collisions if two threads (non-rt
and
> > rt) try to write in the same port.
> >
> > Could not be better to separate it?
> >
>
> No, that would defeat the purpose of the illustration.
>
> XDDP is a wrapper over Xenomai's message pipe support, offering a
> socket-based interface to applications. Each XDDP port is mapped to a
> given /dev/rtp device minor, but the communication endpoints between RT
> and NRT are different internally.
>
> [XDDP-port] <---> xnpipe #<port>
> ^
> |
> | * input queue: /dev/rtp -> xnpipe
> | * output queue: xnpipe -> /dev/rtp
> |
> v
> /dev/rtp<port>
>
> So, when NRT reads from /dev/rtp<port>, it does not actually listen to
> the same endpoint/queue than RT, because message pipes are
> bi-directional. Likewise, NRT and RT never write to the same queue,
> since the purpose of message pipes is to cross the RT/NRT domain boundary.
Ok,
in the example the same thread open a device for write and read from the same
device. From your answer about the endpoints, I understand that when the NRT
open for read, read from the RT world, and when the NRT writes to the RT
world.
So, could I have a NRT function (thread) that open the device to just read
from the RT world and _another_ that send to the RT world?
Because I have to one the same device, and I don't know that I could do it at
the same time.
Regards,
Leopold
--
--
Linux User 152692
Catalonia
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20140120/e730351a/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai] xddp port questions
2014-01-20 16:18 ` Leopold Palomo-Avellaneda
@ 2014-01-20 16:29 ` Philippe Gerum
2014-01-20 16:39 ` Leopold Palomo-Avellaneda
0 siblings, 1 reply; 6+ messages in thread
From: Philippe Gerum @ 2014-01-20 16:29 UTC (permalink / raw)
To: Leopold Palomo-Avellaneda; +Cc: xenomai
On 01/20/2014 05:18 PM, Leopold Palomo-Avellaneda wrote:
> A Dimarts, 14 de gener de 2014, Philippe Gerum va escriure:
>> On 01/14/2014 01:15 PM, Leopold Palomo-Avellaneda wrote:
>>> Hi,
>>>
>>> in the example xddp-label a two realtime task are connected with a non-
>>> realtime time. They share the same port where one rt task receive from the
>>> non-rt task and the other send to rt-task.
>>>
>>> The regular thread read and write in the same devname
>>> (/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread listen
> from
>>> that port.
>>>
>>> I don't understand how is possible that both (non-rt and rt threads)
> listen
>>> from the same port and could not have collisions if two threads (non-rt
> and
>>> rt) try to write in the same port.
>>>
>>> Could not be better to separate it?
>>>
>>
>> No, that would defeat the purpose of the illustration.
>>
>> XDDP is a wrapper over Xenomai's message pipe support, offering a
>> socket-based interface to applications. Each XDDP port is mapped to a
>> given /dev/rtp device minor, but the communication endpoints between RT
>> and NRT are different internally.
>>
>> [XDDP-port] <---> xnpipe #<port>
>> ^
>> |
>> | * input queue: /dev/rtp -> xnpipe
>> | * output queue: xnpipe -> /dev/rtp
>> |
>> v
>> /dev/rtp<port>
>>
>> So, when NRT reads from /dev/rtp<port>, it does not actually listen to
>> the same endpoint/queue than RT, because message pipes are
>> bi-directional. Likewise, NRT and RT never write to the same queue,
>> since the purpose of message pipes is to cross the RT/NRT domain boundary.
>
> Ok,
>
> in the example the same thread open a device for write and read from the same
> device. From your answer about the endpoints, I understand that when the NRT
> open for read, read from the RT world, and when the NRT writes to the RT
> world.
>
> So, could I have a NRT function (thread) that open the device to just read
> from the RT world and _another_ that send to the RT world?
>
> Because I have to one the same device, and I don't know that I could do it at
> the same time.
>
You can both send-receive data to/from the same socket descriptor
RT-wise, and read-write from/to the same /dev/rtp* descriptor NRT-wise.
Message pipes are bi-directional by design, on both ends. In the XDDP
case, traffic is routed as follows:
- RT-writes -> NRT-reads
- RT-reads <- NRT-writes
So, fd = open("/dev/rtpX", ...) => read(fd, and write(fd, are allowed
s = socket(AF_RTIPC, ...) => sendmsg(s, and recv(s, are allowed.
--
Philippe.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai] xddp port questions
2014-01-20 16:29 ` Philippe Gerum
@ 2014-01-20 16:39 ` Leopold Palomo-Avellaneda
2014-01-20 17:08 ` Philippe Gerum
0 siblings, 1 reply; 6+ messages in thread
From: Leopold Palomo-Avellaneda @ 2014-01-20 16:39 UTC (permalink / raw)
To: Philippe Gerum; +Cc: xenomai
A Dilluns, 20 de gener de 2014, Philippe Gerum va escriure:
> On 01/20/2014 05:18 PM, Leopold Palomo-Avellaneda wrote:
> > A Dimarts, 14 de gener de 2014, Philippe Gerum va escriure:
> >> On 01/14/2014 01:15 PM, Leopold Palomo-Avellaneda wrote:
> >>> Hi,
> >>>
> >>> in the example xddp-label a two realtime task are connected with a non-
> >>> realtime time. They share the same port where one rt task receive from
the
> >>> non-rt task and the other send to rt-task.
> >>>
> >>> The regular thread read and write in the same devname
> >>> (/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread
listen
> > from
> >>> that port.
> >>>
> >>> I don't understand how is possible that both (non-rt and rt threads)
> > listen
> >>> from the same port and could not have collisions if two threads (non-rt
> > and
> >>> rt) try to write in the same port.
> >>>
> >>> Could not be better to separate it?
> >>>
> >>
> >> No, that would defeat the purpose of the illustration.
> >>
> >> XDDP is a wrapper over Xenomai's message pipe support, offering a
> >> socket-based interface to applications. Each XDDP port is mapped to a
> >> given /dev/rtp device minor, but the communication endpoints between RT
> >> and NRT are different internally.
> >>
> >> [XDDP-port] <---> xnpipe #<port>
> >> ^
> >> |
> >> | * input queue: /dev/rtp -> xnpipe
> >> | * output queue: xnpipe -> /dev/rtp
> >> |
> >> v
> >> /dev/rtp<port>
> >>
> >> So, when NRT reads from /dev/rtp<port>, it does not actually listen to
> >> the same endpoint/queue than RT, because message pipes are
> >> bi-directional. Likewise, NRT and RT never write to the same queue,
> >> since the purpose of message pipes is to cross the RT/NRT domain
boundary.
> >
> > Ok,
> >
> > in the example the same thread open a device for write and read from the
same
> > device. From your answer about the endpoints, I understand that when the
NRT
> > open for read, read from the RT world, and when the NRT writes to the RT
> > world.
> >
> > So, could I have a NRT function (thread) that open the device to just read
> > from the RT world and _another_ that send to the RT world?
> >
> > Because I have to one the same device, and I don't know that I could do it
at
> > the same time.
> >
>
> You can both send-receive data to/from the same socket descriptor
> RT-wise, and read-write from/to the same /dev/rtp* descriptor NRT-wise.
> Message pipes are bi-directional by design, on both ends. In the XDDP
> case, traffic is routed as follows:
>
> - RT-writes -> NRT-reads
> - RT-reads <- NRT-writes
>
> So, fd = open("/dev/rtpX", ...) => read(fd, and write(fd, are allowed
> s = socket(AF_RTIPC, ...) => sendmsg(s, and recv(s, are allowed.
>
Sorry if I have not been clear or I don't understand you. For design I would
like to make a thread that:
fd = open("/dev/rtpX", ...) => read(fd, ...
to read
and another thread to
fd = open("/dev/rtpX", ...) => write(fd, ...
so I open TWO times the /dev/rtpX, one for read and another for write, because
I would like to use it in two different parts, and I don't know if it's
allowed.
I understand that the RT part and the NRT part open the same /dev/rtp*, but I
don't know if several NRT (or RT) could open the same open descriptor at the
same time.
Regards,
Leopold
--
--
Linux User 152692
Catalonia
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20140120/75fe941b/attachment.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [Xenomai] xddp port questions
2014-01-20 16:39 ` Leopold Palomo-Avellaneda
@ 2014-01-20 17:08 ` Philippe Gerum
0 siblings, 0 replies; 6+ messages in thread
From: Philippe Gerum @ 2014-01-20 17:08 UTC (permalink / raw)
To: Leopold Palomo-Avellaneda; +Cc: xenomai
On 01/20/2014 05:39 PM, Leopold Palomo-Avellaneda wrote:
> A Dilluns, 20 de gener de 2014, Philippe Gerum va escriure:
>> On 01/20/2014 05:18 PM, Leopold Palomo-Avellaneda wrote:
>>> A Dimarts, 14 de gener de 2014, Philippe Gerum va escriure:
>>>> On 01/14/2014 01:15 PM, Leopold Palomo-Avellaneda wrote:
>>>>> Hi,
>>>>>
>>>>> in the example xddp-label a two realtime task are connected with a non-
>>>>> realtime time. They share the same port where one rt task receive from
> the
>>>>> non-rt task and the other send to rt-task.
>>>>>
>>>>> The regular thread read and write in the same devname
>>>>> (/proc/xenomai/registry/rtipc/xddp/XDDP_PORT_LABEL). One rt thread
> listen
>>> from
>>>>> that port.
>>>>>
>>>>> I don't understand how is possible that both (non-rt and rt threads)
>>> listen
>>>>> from the same port and could not have collisions if two threads (non-rt
>>> and
>>>>> rt) try to write in the same port.
>>>>>
>>>>> Could not be better to separate it?
>>>>>
>>>>
>>>> No, that would defeat the purpose of the illustration.
>>>>
>>>> XDDP is a wrapper over Xenomai's message pipe support, offering a
>>>> socket-based interface to applications. Each XDDP port is mapped to a
>>>> given /dev/rtp device minor, but the communication endpoints between RT
>>>> and NRT are different internally.
>>>>
>>>> [XDDP-port] <---> xnpipe #<port>
>>>> ^
>>>> |
>>>> | * input queue: /dev/rtp -> xnpipe
>>>> | * output queue: xnpipe -> /dev/rtp
>>>> |
>>>> v
>>>> /dev/rtp<port>
>>>>
>>>> So, when NRT reads from /dev/rtp<port>, it does not actually listen to
>>>> the same endpoint/queue than RT, because message pipes are
>>>> bi-directional. Likewise, NRT and RT never write to the same queue,
>>>> since the purpose of message pipes is to cross the RT/NRT domain
> boundary.
>>>
>>> Ok,
>>>
>>> in the example the same thread open a device for write and read from the
> same
>>> device. From your answer about the endpoints, I understand that when the
> NRT
>>> open for read, read from the RT world, and when the NRT writes to the RT
>>> world.
>>>
>>> So, could I have a NRT function (thread) that open the device to just read
>>> from the RT world and _another_ that send to the RT world?
>>>
>>> Because I have to one the same device, and I don't know that I could do it
> at
>>> the same time.
>>>
>>
>> You can both send-receive data to/from the same socket descriptor
>> RT-wise, and read-write from/to the same /dev/rtp* descriptor NRT-wise.
>> Message pipes are bi-directional by design, on both ends. In the XDDP
>> case, traffic is routed as follows:
>>
>> - RT-writes -> NRT-reads
>> - RT-reads <- NRT-writes
>>
>> So, fd = open("/dev/rtpX", ...) => read(fd, and write(fd, are allowed
>> s = socket(AF_RTIPC, ...) => sendmsg(s, and recv(s, are allowed.
>>
> Sorry if I have not been clear or I don't understand you. For design I would
> like to make a thread that:
>
> fd = open("/dev/rtpX", ...) => read(fd, ...
>
> to read
>
> and another thread to
>
> fd = open("/dev/rtpX", ...) => write(fd, ...
>
> so I open TWO times the /dev/rtpX, one for read and another for write, because
> I would like to use it in two different parts, and I don't know if it's
> allowed.
No, this won't work. open() is implicitly exclusive for those devices.
--
Philippe.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-01-20 17:08 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-14 12:15 [Xenomai] xddp port questions Leopold Palomo-Avellaneda
2014-01-14 14:22 ` Philippe Gerum
2014-01-20 16:18 ` Leopold Palomo-Avellaneda
2014-01-20 16:29 ` Philippe Gerum
2014-01-20 16:39 ` Leopold Palomo-Avellaneda
2014-01-20 17:08 ` Philippe Gerum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.