Some common problems are discussed here
If your PDP Context works, but disconnects automatically after a few minutes you might have problems with the lcp-echo's. Sometimes they are required but pppd is configured not to send them, or the other way around. In any case, try to solve the problem with the lcp-echo-interval and lcp-echo-failure settings of pppd.
If you use a kernel with it's version number between 2.6.10 and 2.6.16 you might experience that the PPP performance is very bad. Ping with large packets almost always fail to make the round trip. This is caused by a change in the way the kernel handles the serial port. A workaround is to set the " low_latency" parameter on your serial port. This is done with the command setserial /dev/ttyS1 low_latency, replace /dev/ttyS1 with your device.
You configured pppd to create a default route to your new PPP link, which is good. However, pppd does not replace an existing route. To avoid this problem remove the default route before you start pppd. The command to remove the default gateway is route del default.
A few things can cause this error.
One cause can be that your chat script doesn't work well. Maybe it's missing the atdt command ? In my case it happened because i forgot to manually attach the phone using the AT+CGATT command.
Other causes can be found in the debugging section of the ppp howto.
This document is not a ppp howto, so for more information about pppd see the ppp howto.
Maybe your device is not supported, but your kernel configuration could also be the problem. Please check the information for your device in the Kernel and specific hardware section of this howto.
Keep in mind that if your device starts as an emulated CD-ROM device you also need to have SCSI CD-ROM support in your kernel, else your device won't show up and you won't be able to change it to it's modem function.
This is a relative new feature where devices emulate a USB CD-ROM drive which contains the software. Most of the time the software is useless for GNU/Linux users. In order to use the normal function of the device you may be lucky and just unload the usb-storage module and load the correct module. If this does not work the device may need to be switched to it's normal function.
This switch can be done using a tool called USB_ModeSwitch. More information can be found on their website.
Some devices also seem to respond to the SCSI eject command. Install the eject program and run eject /dev/sr0 (substitute /dev/sr0 with the actual device) and the device will switch over.
If you're sure you have faster hardware and subscription on the network, it could be that you're having an issue with the Linux kernel itself. These is a known issue with some USB-based devices and people on LKML are working on it.
If you don't want to wait for that there is an experimental patch available here. However, before you start patching your kernel you should also read this discussion on LKML.