PPP Serial Receive

I am in charge of an industrial embedded product running NET+OS 4.0 (yes, quite old) on a NET+50.

The device is used as a data interface between a custom protocol and Modbus TCP over PPP.

There has never been an issue with communications to the card when using the PPP server (pppd) in Linux. However, recently we have started working with a new client that is using an embedded PPP server running on a Rabbit RCM5700 board.

The two devices will negotiate the PPP link correctly and a TCP socket will be properly opened. Modbus TCP traffic will work successfully for a (seemingly random) number of packets and then the NET+50 device will stop replying to Modbus packets.

Using an oscilloscope and a serial traffic spy, I can verify that packets from the RCM5700 are reaching the NET+50 UART and that the NET+50 is ACKing the Modbus requests. However, I can verify by debugging that both the select() and recv() functions are showing no new data available.

The problem can only be resolved by waiting for the socket to timeout (there is a cleanup system on the NET+50) or by disconnecting and re-establishing the PPP connection from the RCM5700.