syncppp
Hi List,
i'm trying to understand how ppp transports frames in the "sync" mode. I want to do the following scenario:
pppd sync notty
I've hacked pppd to use a simple framing method for stdin/stdout, to guarantee the transport of complete ppp frames. But unfortunately i found out, that in the tty.c i get mixed up frames from the master_pty_f, like i read a buffer and in the buffer i get :
[ppp frame 1][part of ppp frame 2]
the next buffer contains then:
[rest of ppp frame 2]
so that is what i transmit to my sync device, but the other side rejects the second frame because it seems not valid.
I don't really understand yet where pppd reads the frames from the kernel device, maybe somebody could give me a pointer.
I just want to check if the frames come like that from the kernel or if it happens because the slave side pty-buffer gets full befor we can read it on the master side, so the framing is messed up.
Thanks for any help!
Christian
Quoted 2 lines · Christian
i'm trying to understand how ppp transports frames in the "sync" mode. I want to do the following scenario:
In sync mode, each write from pppd represents a complete PPP frame, including the HDLC-like Address and Control fields, but not including the trailing FCS or any 0-bit stuffing.
Each read returns a complete PPP frame, again including the HDLC-like Address and Control fields, but not including the FCS or 0-bit stuffing.
Quoted 2 lines
I've hacked pppd to use a simple framing method for stdin/stdout, to guarantee the transport of complete ppp frames.
I'm confused. At what point are stdin/stdout connected to a sync device that preserves frame boundaries?
Quoted 3 lines
But unfortunately i
found out, that in thetty.ci get mixed up frames from themaster_pty_f, like i read a buffer and in the buffer i get :
If you're talking about ptys, then you're not talking about sync.
Quoted 2 lines
so that is what i transmit to my sync device, but the other side rejects the second frame because it seems not valid.
Indeed. It looks like you have an async stream (a pty pair) in the way.
Quoted 2 lines
I don't really understand yet where pppd reads the frames from the kernel device, maybe somebody could give me a pointer.
It happens in the read_packet() function.
Quoted 3 lines
I just want to check if the frames come like that from the kernel or if it happens because the slave side pty-buffer gets full befor we can read it on the master side, so the framing is messed up.
I think using a pty pair and expecting sync-like operation to happen is just a bug. It won't work, because ptys are async serial emulation devices.
Signature · 1 line
James Carlson 42.703N 71.076W <[email protected]>
Hi James,
Quoted 14 lines · James Carlson
Quoted 4 lines · Christian
i'm trying to understand how ppp transports frames in the "sync" mode. I want to do the following scenario:
In sync mode, each write from pppd represents a complete PPP frame, including the HDLC-like Address and Control fields, but not including the trailing FCS or any 0-bit stuffing.
This is not totally true. I found out that the ppp_synch module makes copy_to_users of 1502 bytes (default mtu), interestingly pppd reads 1504 bytes (MRU+PPP_HDR), which leads to problems in synch mode because 2 bytes of the next frame are inside of the current frame, i don't know why this does not create issues in other constelllations, but in mine it does. So i just changed the maximum read to MRU+PPP_HDR-2 in the tty.c file and indeed it worked for me immediately.
Quoted 6 lines
Each read returns a complete PPP frame, again including the HDLC-like Address and Control fields, but not including the FCS or 0-bit stuffing.
Quoted 10 lines
Quoted 4 lines
I've hacked pppd to use a simple framing method for stdin/stdout, to guarantee the transport of complete ppp frames.
I'm confused. At what point are stdin/stdout connected to a sync device that preserves frame boundaries?
I have hacked the tty.c to prepend each write with a length field, so i added boundaries, my programm connects to stdin/stdout and reads the length field and therefore knows what a frame means.
Quoted 10 lines
Quoted 5 lines
But unfortunately i
found out, that in thetty.ci get mixed up frames from themaster_pty_f, like i read a buffer and in the buffer i get :If you're talking about ptys, then you're not talking about sync.
well the notty option leads to a Master/Slave pty which is connected to the stdin/stdout pipes in the charshunt() as far as i understood.
It seems to me pppd needs terminal like fds internally, but i don't really understand why this is so.
But anyway my fix solved my problems now.
Thanks for your time!
Cheers,
Christian