Faking a GPRS connection for KVM and Opera turned out to be trickier than I thought. Its not enough to have a GPRS connection running. These programs actually insist on routing through it, even if default route is set to ppp0 rather than gprsv0. Even renaming ppp0 to gprsv0 (by a kernel module) didn't do the trick.
To make a long story short, I managed to get Opera and KVM talk to the internet via ppp0 (bluetooth) but in a messy way, and only if a GPRS connection exists (although no packets will be sent over it). I did it by using the netfilter layer to reroute packets to ppp0 right before they get transmitted, and faking incoming packets from ppp0 to appear as though they're coming from gprsv0. Works like a charm but a headache to configure. If people here want it anyway, I may write some scripts to do it, if there's enough demand. (PM me if you see a real need in this functionality).
Note that mightymop's original question still stands. The way I did it is an ugly hack. If someone can find the way to tell internal applications not to insist on routing via gprsv0, it would be far better than my current solution.
In the meantime, I got the other direction working. I added NAT support on the phone, and got my laptop connected to the internet via GPRS (over PPP over Bluetooth ) ). If anyone is interested in such functionality, PM me and I'll upload the scripts to do that. I think its is actually more useful than the above (NATting the phone behind the laptop). I any case, I managed to do both, as a proof of concept.
