views:

521

answers:

2

I have a linux box with a bank of modems and need to create demand-dial (outbound) PPP connections to a very large set of remote machines. Since I have far more remotes than local modems, I'd like to launch one or more instances of pppd in demand mode, but not allocate a particular modem until a connection is requested. When the connection becomes idle, I'd like pppd to release the modem so it can be used for a connection to a different remote.

I've been through the pppd man pages and understand the concepts of the call and connect options, as well as the options.DEVICE files and the /etc/ppp/peers directory. Lock files will tell me which modems are in use or available. And I'm able to connect to multiple remote peers as long as I hard-code the modem assignments. But I haven't found a way to assign them dynamically, say by calling a get_available_modem script when pppd needs to dial. Google doesn't seem to know, either.

A work-around might be to detect the need to demand-dial with an external mechanism, and then launch pppd to service it, but it seems cleaner to leverage the facility within pppd itself.

Any pointers or ideas are appreciated. Thanks for your thoughts!

A: 

Does it have to be directly driven by the Linux box, or could you use something like the old Lucent Portmaster boxen?

Brian Knoblauch
The linux box is custom hardware with a USB modem bank attached. It's responsible for routing network traffic from a NOC to remote sites, either over the Internet or via PPP over dial-up. We need to manufacture them, so and 3rd-party solution must be generic and inexpensive. Thanks for your idea!
Adam Liss
+1  A: 

This is the solution I'm going with:

  • Enumerate the modems as /dev/modem0, /dev/modem1, ...
  • Start an instance of pppd in demand-dial mode for each peer, but instead of a "real" modem, attach it to /dev/modem.peer, which the "ppp-on-dialer" script soft-links to the first available modem dynamically.
  • When the connection times out and the modem goes offline, soft link /dev/modem.peer to /dev/null so the modem can be re-used for a connection to a different peer.

Thanks for your comments!

Adam Liss