Cellphone setup on the Verizon network

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Copied from https://atr2.ath.cx/~jayjwa/documents/LGVX8300-ACM-linux-dialup.txt
which had Certificate problems.  Thanks to jayjwa <jayjwa  AT vdrl.ath.cx>

             Connecting With Linux to Verizon's vzw3g Network
                with the LG VX8300 cell phone as a modem.

After a LONG battle and hours on Google I finally got this working. I thought
I'd write a few notes since almost all of the stuff I saw was missing a piece
of needed info here or there, which, of course, caused the whole thing to fail.

What you need:
-------------------
1. LG VX8300 (tested) or another phone that has an ACM modem built-in.

2. A competent Linux sysadmin. I'm assuming you realize you need to be root
   here, and you know how to edit files, change configs, etc. Modern utilities
   for networking (sorry, no 'ifconfig' or 'route' ) will be used.

3. Support for usb, hotplug-ng, cdc-adm support, ppp support, pppd & frineds.
   I'm using a 2.6.23.13 kernel. If you forgot to build in cdc-acm (I did)
   just jump in /usr/src/linux and recompile your kernel.

4. A USB cable that fits your phone to your computer. This might be possible
   using Bluetooth. I didn't try.

5. Verizon account. The method I have is the "1X" network one, which I (hope!)
   only charges your minutes. There is a fast one that you have to add on to
   your plan if you want it. I didn't ask for any special plan to get the
   1X stuff.

   Update: Evidently you're not supposed to do this :)
           It's OK if you signed up for a Verizon Internet service, but
           if you didn't then I guess you could consider it stealing as
           you're getting a service you are supposed to pay for but didn't.
           You'd think they'd just deny you access, but this wasn't the
           case. Note however that using your phone to connect to your
           own ISP is of course OK.

Set up the phone:

Go to the phone and hit Menu.
Hit 0 (zero). Secret service menu ;)
Enter all zero's for the service code.
You'll see a new menu you probably didn't see before.
Go to #3 Network Select.
Go to #1 Mode Preference. On that menu you are probably set at the top
option. Scroll down and select  "1x only". Remember how you did this to
put this back after you're done.

Set up Linux:
--------------
Connect the USB - Computer - Phone. If your system is setup with module
autoload (or cdc-acm support is built-in) and hotplug, that is enough to
get the phone set with the computer.

'lsusb' should show something like this at this point:

Bus 004 Device 001: ID 0000:0000
Bus 003 Device 004: ID 1004:6000 LG Electronics, Inc. VX4400/VX6000 Cellphone
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000


Syslog should contain something like:

Jan 18 22:41:36 vdrl kernel: usb 3-2: new full speed USB device using
uhci_hcd and address 4
Jan 18 22:41:36 vdrl kernel: usb 3-2: Product: LG CDMA USB Modem
Jan 18 22:41:36 vdrl kernel: usb 3-2: Manufacturer: LG CDMA USB Modem
Jan 18 22:41:36 vdrl kernel: usb 3-2: configuration #1 chosen from 1 choice
Jan 18 22:41:36 vdrl kernel: cdc_acm 3-2:1.0: ttyACM0: USB ACM device
Jan 18 22:41:36 vdrl kernel: usbcore: registered new interface driver cdc_acm
Jan 18 22:41:36 vdrl kernel: drivers/usb/class/cdc-acm.c: v0.25:USB
Abstract Control Model driver for USB modems and ISDN adapts

(I can't remember if I had USB debugging on here or not, yours might
say less if that was the case
because then the above would only be that chatty due to the USB
debugging. The point is, it should
say something about cdma, usb, and acm ).


'procinfo -m' should show you now have an ttyACM device (it's number
166 on mine)

Character Devices:                      Block Devices:
  1 mem              89 i2c               1 ramdisk
  2 pty             108 ppp               2 fd
  3 ttyp            116 alsa              3 ide0
  4 /dev/vc/0       128 ptm               7 loop
  4 tty             136 pts              22 ide1
  4 ttyS            166 ttyACM          254 pktcdvd
  5 /dev/tty        180 usb
  5 /dev/console    189 usb_device
  5 /dev/ptmx       202 cpu/msr
  6 lp              203 cpu/cpuid
  7 vcs             216 rfcomm
 10 misc            226 drm
 13 input           253 usb_endpoint
 14 sound           254 rtc
 29 fb



If you don't have that showing, you likely don't have all the kernel
support needed. The
module is called cdc_acm. Make sure the actual device files exist:

lrwxrwxrwx 1 root root     12 2008-01-05 23:05 /dev/ttyACM -> /dev/ttyACM0
crw-rw-r-- 1 root root 166, 0 2008-01-18 23:19 /dev/ttyACM0
crw-rw-r-- 1 root root 166, 1 2008-01-05 16:21 /dev/ttyACM1

Note that I symlinked ttyACM to point to the actual first ACM device,
ttyACM0. If you're
using udev, you're on your own here. I deny its existance :) Else pull
out mknode if you
need to and create those two character device files (see 'mknode
--help' if you need to
or try the man page. ) Note that mine are character major number 166
and then the first
ACM is 0, then 1 and so on. On your system that might be, but make
sure it's actually
what is listed in 'procinfo -m' (or look in /proc/devices) that you
use instead of 166.


Set up pppd and friends:
------------------------------
To call Verizon, we will dial #777 on the phone. It looks like they
wanted chap or a
version of, but we want to do PAP authentication. The user is just
your areacode +
phone number, then "@vzw3g.com". Example: 8888675309@xxxxxxxxx
The password will be 'vzw'. Their server doesn't seem to like
compression, so we'll
kill it. 'chat' will do the dialing bit, as usual. We'll turn on
debugging and leave
a log to aid in getting this set up correctly. Let's not add a default
route, because
you probably already have one now. We can quickly replace the default
one to test.

Scripts:
----------
There are three. These I worked out from ones found on the web. One to connect,
one to disconnect, and one that holds all the Verizon options. We're not using
an 'options' file. It should be blank or else contain stuff that won't interfere
with what we're doing.


Connect script, "verizon-connect":

# Chat script to talk to the ACM modem
# and have it call Verizon.

TIMEOUT 10
ABORT   'BUSY'
ABORT   'NO ANSWER'
ABORT   'NO CARRIER'
SAY 'Initializing ACM modem ... \n'

''  'ATZ'

# E0=No echo, V1=English result codes
OK      'ATE1V1'

# Dial the special Verizon service number, #777
SAY 'Calling #777 and waiting on CONNECT ...\n'
OK  'ATD#777'
CONNECT ''

Disconnect script, "verizon-disconnect":

#
""  "\K"
""  "+++ATH0"
SAY "CDMA disconnected."

Place those in /etc/ppp as-named. If you change the names, you must
also change the names in the other file below.

Verizon options for pppd, file "verizon". Place this one in /etc/ppp/peers.
Create the 'peers' directory if it's not there yet. Obviously replace
the 'xxxxxxxxxx' with your 10-digit areacode+phone number, both here
and in the PAP file.

## Verizon ACM USB Modem
## (via LGVX8300)
##

ktune
/dev/ttyACM0
115200
crtscts
modem
user xxxxxxxxxx@xxxxxxxxx
remotename verizon
updetach
lock
passive
noauth
refuse-chap
refuse-mschap
refuse-mschap-v2
deflate 0
bsdcomp 0
debug

# For debugging only, so I can see if it's being sent or not
show-password

logfile /var/log/pppd.log
record  /var/log/pppd.dump

connect    "/usr/sbin/chat -v -f /etc/ppp/verizon-connect"

disconnect "/usr/sbin/chat -v -f /etc/ppp/verizon-disconnect"

Look in pppd's man page if you want to see what the options are. I'm
not have pppd request DNS nameservers, because I'm assuming you have
some (or use opendns/free public dns servers). You could add the option
for requesting nameservers. "ktune" lets pppd tweak the kernel (so says
the manpage); /dev/ttyACM0 is the device we got from plugging in the
phone; user xxxxxxxxxx@xxxxxxxxx tells what user in the PAP file to
pick; deflate 0, etc. turns off compression; speed I tried at 115200.
/var/log/pppd.dump will be a dump of the traffic (requires 'pppdump'
to read); Here's Google trying to cookie me:

rcvd "HTTP/1.1 200 OK\0d\0a"
rcvd "Cache-Co"
rcvd "ntrol: private\0d\0aC"
rcvd "ontent-Type: text"
rcvd "/html; c"
time  0.1s
rcvd "harset=UTF-8\0d\0aSet"
rcvd "-Cookie: PREF=ID="
time  0.1s
rcvd "771e4259"
rcvd "31954957:TM=12007"
rcvd "16334:LM=12007163"
rcvd "34:S=oxK"
rcvd "FHypbPagQbap5; expires=Mon, 18-Jan-2010 04:18:54 GMT; path=/; domain=.g
      oogle.com\0d\0aContent-Encoding: gzip\0d\0aServer: gws\0d\0aContent-Len
      gth: 2545\0d\0aDate: Sat, 19 Jan 2008 04:18:54 GMT\0d\0a\0d\0a\1f\8b\08
      \00\00\00\00\00"


Last you need a PAP file, /etc/ppp/pap-secrets. Set the right mode
on this file if it contains secret passwords, so other users don't
spy them. If there's more than one entry, pppd gets which one to use
from its 'user' and 'remotename' options we gave it earlier.

## PAP authentication file
##
## /etc/ppp/pap-secrets
##

## Username             Server          Password        IP addresses
xxxxxxxxxx@xxxxxxxxx    verizon         vzw             *

Connecting:
---------------
With everything set up, and the kernel and hotplug to load the modules
see we don't have to modprobe stuff, you can now do:

pppd call verizon

It should call and connect, then detach from the terminal. Check out syslog
again to see what happend. You can look on the phone's screen too.

Jan 18 23:16:45 vdrl pppd[5293]: pppd 2.4.4 started by root, uid 0
Jan 18 23:16:45 vdrl kernel: PPP generic driver version 2.4.2
Jan 18 23:16:46 vdrl chat[5301]: timeout set to 10 seconds
Jan 18 23:16:46 vdrl chat[5301]: abort on (BUSY)
Jan 18 23:16:46 vdrl chat[5301]: abort on (NO ANSWER)
Jan 18 23:16:46 vdrl chat[5301]: abort on (NO CARRIER)
Jan 18 23:16:46 vdrl chat[5301]: send (ATZ^M)
Jan 18 23:16:46 vdrl chat[5301]: expect (OK)
Jan 18 23:16:47 vdrl chat[5301]: ATZ^M^M
Jan 18 23:16:47 vdrl chat[5301]: OK
Jan 18 23:16:47 vdrl chat[5301]:  -- got it
Jan 18 23:16:47 vdrl chat[5301]: send (ATE1V1^M)
Jan 18 23:16:47 vdrl chat[5301]: expect (OK)
Jan 18 23:16:47 vdrl chat[5301]: ^M
Jan 18 23:16:47 vdrl chat[5301]: ATE1V1^M^M
Jan 18 23:16:47 vdrl chat[5301]: OK
Jan 18 23:16:47 vdrl chat[5301]:  -- got it
Jan 18 23:16:47 vdrl chat[5301]: send (ATD#777^M)
Jan 18 23:16:47 vdrl chat[5301]: expect (CONNECT)
Jan 18 23:16:47 vdrl chat[5301]: ^M
Jan 18 23:16:55 vdrl chat[5301]: ATD#777^M^M
Jan 18 23:16:55 vdrl chat[5301]: CONNECT
Jan 18 23:16:55 vdrl chat[5301]:  -- got it
Jan 18 23:16:55 vdrl chat[5301]: send (^M)
Jan 18 23:16:55 vdrl pppd[5293]: Serial connection established.
Jan 18 23:16:55 vdrl pppd[5293]: Using interface ppp0
Jan 18 23:16:55 vdrl pppd[5293]: Connect: ppp0 <--> /dev/pts/0
Jan 18 23:16:57 vdrl pppd[5293]: PAP authentication succeeded
Jan 18 23:16:57 vdrl pppd[5293]: local  IP address 70.200.28.247
Jan 18 23:16:57 vdrl pppd[5293]: remote IP address 66.174.10.4

Or, check out our pppd.log to see some more detail:

Initializing ACM modem ...
Calling #777 and waiting on CONNECT ...
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/pts/0
rcvd [LCP ConfReq id=0x1 <mru 1500> <asyncmap 0x0> <auth chap MD5>
<magic 0xfd8f7b89> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x1fad6109> <pcomp> <accomp>]
sent [LCP ConfNak id=0x1 <auth eap>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x1fad6109> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x2 <mru 1500> <asyncmap 0x0> <auth pap> <magic
0xfd8f7b89> <pcomp> <accomp>]
sent [LCP ConfAck id=0x2 <mru 1500> <asyncmap 0x0> <auth pap> <magic
0xfd8f7b89> <pcomp> <accomp>]
sent [PAP AuthReq id=0x1 user="xxxxxxxxxx@xxxxxxxxx" password="vzw"]
rcvd [PAP AuthAck id=0x1 ""]
PAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 192.168.10.76>]
rcvd [IPCP ConfReq id=0x1 <addr 66.174.10.4>]
sent [IPCP ConfAck id=0x1 <addr 66.174.10.4>]
rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
sent [IPCP ConfReq id=0x2 <addr 192.168.10.76>]
rcvd [IPCP ConfNak id=0x2 <addr 70.200.28.247>]
sent [IPCP ConfReq id=0x3 <addr 70.200.28.247>]
rcvd [IPCP ConfAck id=0x3 <addr 70.200.28.247>]
local  IP address 70.200.28.247
remote IP address 66.174.10.4
Script /etc/ppp/ip-up started (pid 5309)
Script /etc/ppp/ip-up finished (pid 5309), status = 0x0


You'll notice it DID try a compression format, I forgot to list in the
'verizon'
file 'novj' but it doesn't matter as they refuse it anyway. The hostname I
ended up with would be 247.sub-70-200-28.myvzw.com. There's nothing special in
my ip-up/ip-down scripts. You could use those if you see the need to.

You check the link and address with 'ip link show ppp0' and 'ip addr
show ppp0'. If
you had already a ppp0, then you know it would be ppp1, and so on.

Let's replace our default route to use the ppp0 link. I'm using
Ethernet at the moment,
so eth0 should be replaced by ppp0:

ip route replace default via 66.174.10.4  dev ppp0

The format is 'ip route replace default via' (how to get to the world,
through which
IP) 'dev' (the device that will get us there, here its ppp0).

Try some network command: 'links http://www.google.com'

When you're done you need to shutdown pppd:

'pkill -SIGTERM pppd'

or whatever your fav way to send a SIGTERM to pppd is. It runs the
disconnect script,
and closes:

Modem hangup
Connect time 2.4 minutes.
Sent 1233 bytes, received 3389 bytes.
Script /etc/ppp/ip-down started (pid 5329)
Connection terminated.
Script /etc/ppp/ip-down finished (pid 5329), status = 0x0
Waiting for 1 child processes...
  script pppd (charshunt), pid 5300
Terminating on signal 15
sending SIGTERM to process 5300


Put the route back now that ppp0 is gone. Example for my setup,
replace with your address
or whatever your default route was:

'ip route replace default via 192.168.10.75 dev eth0'

Don't forget to reset your phone's network pref. I didn't use the link
much, as I'm still
not sure about usage costs. As you can't believe all you hear, I"m
waiting on a bill
to see what it looks like before I use it with any frequency. If it
does in fact only
use your minutes on the 1X network, that would seem to me that you
could get free 'Net
when you have free time, since some plans have free nights and
weekends. Still, that
seems TOO good to be true.

Watching the phone's screen out of the corner of my eye while watching
the PC, it looks
like the phone tries/did disconnect after it's been dormat for awhile.
I'm not sure,
as this wasn't reported by pppd in the log files. However, pppd
doesn't always seem to
announce when the peer drops its end.

============
Disclaimer: The usual stuff; you're on your own here, don't come after me if you
            blow up your phone/computer/sister, etc. If Verizon gets
pissed about
            this info or because you accessed their super-secret agent
zero-menu
            and turns the last 5 years of your phone conversations over to
            the NSA -I know nothing-. Document Copyright, WTFPL Version 2.

[Index of Archives]     [Linux Media Development]     [Asterisk]     [DCCP]     [Netdev]     [X.org]     [Xfree86]     [Fedora Women]     [Linux USB]

  Powered by Linux