* [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.