aplication to receive [ethernet|IP|UDP] and [ethernet|ppp|IP|UDP] packages over socket

Hello Everyone

I am working on a ADSL modem and have the following situation that I would like to have some advice one.

My ADSL modem runs on Monta Vista Linux and comes in 2 models; Bridge and a Router and my question concerns the Bridge.

To monitor the status of the ADSL modem we have an application(host application) running on a PC/MAC that requests data of the modems status from a control application that runs on the ADSL modem. When the host application sends out a request it is in the form of a broadcast using IP/UDP packet based upon a UDP socket setup. Now my problem is when the ADSL modem is a bridge and host runs a PPPoE client to encapsulate the data so that the ISP can receive it. When having a setup like this a Windows machine sends out 2 packages when the host application does a broadcast for status of the modem. One packet is pure: ethernet|IP|UDP while the other one is ethernet|ppp|IP|UDP and my application only picks up one packet which is ethernet|IP|UDP and while the one containing ppp gets lost. Since the 2 packages contains the same request for information its not such a big deal under Windows. However when running this setup on a MAC only 1 packet gets sent out from the host application: ethernet|ppp|IP|UDP and this in NOT received by my control application(its a UDP socket) and no data is sent back to the host application.

After the "history" lesson I move onto my questions: How do I setup a socket on the control application that can receive both types of packages: ethernet|IP|UDP and a ethernet|ppp|IP|UDP

One option is to have a RAW Ethernet socket: sock = socket(AF_INET,SOCK_RAW,htons(ETH_P_ALL)); This would collect ALL Ethernet frames and since this is a ADSL modem there will be quite few of them. I would have to spend a lot of CPU time looking for my control frames(they have a ID in the UDP data so it can be done). I do not feel that this solution is the best but an option that I am exploring.

I have also tried to set up a RAW IP/UDP socket: sock = socket(AF_INET,SOCK_RAW,IPPROTO_UDP); However this socket did only collect the IP/UDP and threw away the PPP packages as it should do:(:(

So what I am looking for is like a middle way between RAW Ethernet and RAW IP/UDP, I want my control application to receive 2 types of packages: ethernet|IP|UDP and ethernet|ppp|IP|UDP.

Any advice or input would be greatly appreciated.

Regards Andreas

Reply to
Andreas
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.