Hi,<br><br>just for feedback.<br><br>I choose to create the fifo kernel module to accomplish the task since I found more suitable to my needs. If someone wants to check this kernel module, it is available at <a href="http://dgvchannel.cvs.sourceforge.net/dgvchannel/unstable/fifodev/">
http://dgvchannel.cvs.sourceforge.net/dgvchannel/unstable/fifodev/</a>.<br><br>I&#39;m testing it now and probably needs improvements but I think it is very stable and solve the intermixing problem.<br><br>Thanks for all 
<br><br><br>Paulo Garcia<br><br><br><br><br><div><span class="gmail_quote">On 2/8/07, <b class="gmail_sendername">Christian</b> &lt;<a href="mailto:crich-ml@beronet.com">crich-ml@beronet.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
yeah my approach works only if you can modify the &quot;write&quot; as well.<br><br>the only way i know which would definitely work is: you need to write a<br>kernel module which creates a char device, there each write results in a
<br>single &quot;copy_from_user&quot; and you won&#39;t have intermixing of packets.&nbsp;&nbsp;then<br>you could send the packet either directly to your hardware or you use<br>another character device to send it up to your process which will also
<br>send the exact amount of data, like:<br><br>/dev/packetloopIN + /dev/packetloopOUT<br><br><br>but that&#39;s probably as much work as interpreting the q.921 header ;-)<br><br><br><br><br><br><br>Paulo Garcia wrote:<br>
&gt; Hi Christian,<br>&gt;<br>&gt; I think I understand what you are saying but the data read comes<br>&gt; directly from libpri and I cannot realize how can I put some data<br>&gt; before the package, because I saw that into libpri there are two
<br>&gt; writes to my socket file descriptor but in the read part (inside my<br>&gt; program thread) there are only one read with both packets togheter.<br>&gt;<br>&gt; After I receive the packet from libpri, I can send it directly to my
<br>&gt; card and the packet arrives at other side perfectly since my hardware<br>&gt; already prepared to do it. The only problem is when I get two packets<br>&gt; joint togheter.<br>&gt;<br>&gt; I´m thinking if using another kind of interprocess communication I can
<br>&gt; avoid this socketpair behaviour.<br>&gt;<br>&gt; Thanks in advance!<br>&gt;<br>&gt;<br>&gt; Paulo<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; On 2/7/07, * Christian* &lt;<a href="mailto:crich-ml@beronet.com">crich-ml@beronet.com
</a><br>&gt; &lt;mailto:<a href="mailto:crich-ml@beronet.com">crich-ml@beronet.com</a>&gt;&gt; wrote:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Hi Paulo,<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; i have had similar issues with a quite different use-case ;-) the<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; problem is that you need to frame your messages and transmit these<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; frames instead of the transparent data. you can use hdlc for<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; example, i<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; believe there are some simple implementations out there, but that is
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; sort of overkill. The most simple thing would be to just put the<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; length<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; of the frame before each packet, the length could be of maximum 4<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; bytes,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; then do a read of just as much bytes which you know from this
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; length, like:<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; uint32 len;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; char buf[1024];<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; read(fd, &amp;len, 4);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; read(fd,buf,len);<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; then you can be sure that you&#39;ve got only this single frame in buf,
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; (well if read returns less then len you need to reread of course).<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Besides that i have somewhere read that you can set a HDLC<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Property via<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; fcntl to terminals, but i haven&#39;t had ever the time to test that out.
<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; cheers,<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; christian<br>&gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Paulo Garcia wrote:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Hi,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; in my own channel, I&#39;m implementing ISDN support using Libpri. The
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; implementation is completely independent from zaptel then I&#39;m<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; trying<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; to do all communications between my hardware and libpri using<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; socketpair function.<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; The idea is to create a socketpair, passing fd[0] to pri_new<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; function<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; and writing to fd[1] to pass data to libpri. So far so good...<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; To receive data from libpri, I have a thread checking for all file
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; descriptors fd[1] using select() function and when I receive<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; something, I pass it to my card. This approach also works well but<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; sometimes I receive two messages (from libpri) in only one read()
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; call. I think this is because of libpri writes two messages so fast<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; then when the read is called, there are already two messages in<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; socket<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; buffer...<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; How can I avoid this behavior? Maybe using another way different of<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; socketpair ? This communication will be used only inside the same<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; process, between different threads.
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Any path or idea will be appreciated.<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Regards<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; Paulo Garcia<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; ------------------------------------------------------------------------
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; _______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="http://Easynews.com">
http://Easynews.com</a>&gt; --<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; asterisk-dev mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt; To UNSUBSCRIBE or update options visit:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">
http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &gt;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; _______________________________________________<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; --Bandwidth and Colocation provided by <a href="http://Easynews.com">
Easynews.com</a><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="http://Easynews.com">http://Easynews.com</a>&gt; --<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; asterisk-dev mailing list<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; To UNSUBSCRIBE or update options visit:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">
http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>&gt;<br>&gt;<br>&gt; ------------------------------------------------------------------------<br>&gt;<br>&gt; _______________________________________________<br>
&gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt;<br>&gt; asterisk-dev mailing list<br>&gt; To UNSUBSCRIBE or update options visit:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">
http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br>&gt;<br><br>_______________________________________________<br>--Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br><br>asterisk-dev mailing list
<br>To UNSUBSCRIBE or update options visit:<br>&nbsp;&nbsp; <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev">http://lists.digium.com/mailman/listinfo/asterisk-dev</a><br></blockquote></div><br>