Need help with 4G LTE modem


#1

I have a Verizon u620l modem (4G LTE) that I’d like to use with an RPi3 and ResinOs 2.0. Could someone explain to me what the NetworkManager config should look like? I started with this, but I get the four blinking LEDs indicating no network connection:

[connection]
id=u620l
type=cdma
autoconnect=TRUE

[cdma]
apn=VZWINTERNET

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

On vanilla Raspbian, I make this modem work by using usb_modeswitch to make it appear as eth1:
sudo usb_modeswitch –v 0x1410 –p 0x9020 –u 2

I created a udev rule to automatically run the modeswitch on every boot, like described in this forum post: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=121326 (search for “99-vzw”)

And for reference, here’s the Linux manual for the modem: https://www.verizonwireless.com/dam/support/pdf/user_guide/u620-linux-integration-guide-7-17-15.pdf


#2

Looks like there is a way to permanently set the u620l in that modem by using -> https://wiki.hackspherelabs.com/index.php?title=U620L_Novatel#U620L_-_Set_CDC-ECM_Permanently

There would be no configuration needed on the NetworkManager after that.


#3

The wiki link actually says there’s no way to set the u620l into that mode permanently: “I contacted Novatel and they would not tell me how to do this/Said that their was no way to do this.” (the steps that follow are to put it in that mode until reboot)


#5

But the post asks to disconnect and reconnect the modem. Which is reboot right?


#6

Sharp eye! You’re right. That did the trick. Thank you so much for the help!


#7

Guys, I have the same problem. I have been running the well known command on boot to get the USB Verizon Modem working

sudo usb_modeswitch –v 0x1410 –p 0x9020 –u 2

At this point, I want to integrate this solution insire Resin and I want to use NetworkManager to create an access point as well. I have read you guys have found a working solution but I did not understand what it is.

Can you guys guide me step by step?


#10

Hey there,

Did you try the instructions from https://wiki.hackspherelabs.com/index.php?title=U620L_Novatel#U620L_-_Set_CDC-ECM_Permanently, the article linked above?


#11

Hi jviotti.
yes I have read the article and the usb_modeswitch instruction works. But after every reboot you have to run it (or setting a rule as well, same idea). At this point I just want to integrate it into networkmanager and create and access point. I have also followed the section of you link that says ‘Take out of CDC-ECM Mode’, and I am at the same point…after every reboot I have to run the command.

Am I missing anything?


#12

OK I think I found what you guys were trying to say:

-Following the section ‘Take out of CDC-ECM Mode’, will set the device into the user mode where every time you have to run the usb_modeswith instruction to have 4G connection

-Instead, following the section ‘Put into CDC-ECM Mode’, will set the device into another mode that allows the direct connection to 4G without issuing any command.

Am I correct now? I have just tried and it seems working.


#13

Hey there,

I’m not super familiar with this modem, but what you said looks about right. Happy to hear its working


#15

I’m having issues achieving connectivity using the same modem (Verizon/Novatel U620L) with an Intel NUC5CPYH running resinOS v2.13.5+rev1 (development edition). After following the procedure above to put the modem into debug mode, I can see the interface get created (enp0s20u2i4) and even get an IP address, but I can’t ping the outside world through the interface (by trying: ping google.com -I enp0s20u2i4).

From the host OS:

route -n:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    100    0        0 enp3s0
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 enp0s20u2i4
10.114.101.0    0.0.0.0         255.255.255.0   U     0      0        0 balena0
10.114.102.0    0.0.0.0         255.255.255.0   U     0      0        0 resin-dns
52.4.252.97     0.0.0.0         255.255.255.255 UH    0      0        0 resin-vpn
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 supervisor0
172.18.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-9fbe9e9e4e7d
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 enp0s20u2i4
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 enp3s0

ifconfig:

          inet addr:10.114.101.1  Bcast:0.0.0.0  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

br-9fbe9e9e4e7d Link encap:Ethernet  HWaddr 02:42:e9:27:a7:65
          inet addr:172.18.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

enp0s20u2i4 Link encap:Ethernet  HWaddr 00:15:ff:17:84:80
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::bab1:7492:242f:68b0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:429 errors:0 dropped:0 overruns:0 frame:0
          TX packets:470 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:83296 (81.3 KiB)  TX bytes:95348 (93.1 KiB)

enp3s0    Link encap:Ethernet  HWaddr 94:c6:91:1d:16:9d
          inet addr:192.168.2.8  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a219:b3b7:952c:5539/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2100 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2549 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:322376 (314.8 KiB)  TX bytes:356246 (347.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:206 errors:0 dropped:0 overruns:0 frame:0
          TX packets:206 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:17578 (17.1 KiB)  TX bytes:17578 (17.1 KiB)

resin-dns Link encap:Ethernet  HWaddr 52:b8:71:e8:58:9e
          inet addr:10.114.102.1  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::50b8:71ff:fee8:589e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:5329 (5.2 KiB)

resin-vpn Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.240.11.69  P-t-P:52.4.252.97  Mask:255.255.255.255
          inet6 addr: fe80::17b5:5e71:5b39:d24c/64 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:1152 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1147 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:93567 (91.3 KiB)  TX bytes:131062 (127.9 KiB)

supervisor0 Link encap:Ethernet  HWaddr 02:42:6a:96:01:81
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlp2s0    Link encap:Ethernet  HWaddr d4:6d:6d:b3:fd:b7
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

And then the output from a Python script I hacked together awhile back:

    uuid: 94e4c426-62a5-32cf-a5dd-5b4c6ec713da
    type: 802-3-ethernet
    ------------------------------------------
        Setting: 802-3-ethernet
            auto-negotiate: 0
            mac-address-blacklist:
            mac-address: 0 21 255 23 132 128

        Setting: connection
            uuid: 94e4c426-62a5-32cf-a5dd-5b4c6ec713da
            timestamp: 1531767214
            autoconnect-priority: -999
            type: 802-3-ethernet
            id: Wired connection 2
            permissions:

        Setting: proxy

        Setting: ipv4
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: auto

        Setting: ipv6
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: auto


    name: Wired connection 1
    uuid: 2eb795b7-383e-3ef5-9374-2da9becccf6f
    type: 802-3-ethernet
    ------------------------------------------
        Setting: 802-3-ethernet
            auto-negotiate: 0
            mac-address-blacklist:
            mac-address: 148 198 145 29 22 157

        Setting: connection
            uuid: 2eb795b7-383e-3ef5-9374-2da9becccf6f
            timestamp: 1531767214
            autoconnect-priority: -999
            type: 802-3-ethernet
            id: Wired connection 1
            permissions:

        Setting: proxy

        Setting: ipv4
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: auto

        Setting: ipv6
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: auto


    name: supervisor0
    uuid: c5f6a66e-2207-4589-ac32-3c6025c3f3bb
    type: bridge
    ------------------------------------------
        Setting: bridge
            stp: 0
            interface-name: supervisor0

        Setting: connection
            autoconnect: 0
            interface-name: supervisor0
            timestamp: 1531767214
            uuid: c5f6a66e-2207-4589-ac32-3c6025c3f3bb
            type: bridge
            id: supervisor0
            permissions:

        Setting: proxy

        Setting: ipv4
            dns-priority: 100
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: manual

        Setting: ipv6
            dns-priority: 100
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: ignore


    name: resin-dns
    uuid: 4d41f474-8fc6-4c86-a931-cf6bcba6cc31
    type: bridge
    ------------------------------------------
        Setting: bridge
            stp: 0
            interface-name: resin-dns

        Setting: connection
            autoconnect: 0
            interface-name: resin-dns
            timestamp: 1531767214
            uuid: 4d41f474-8fc6-4c86-a931-cf6bcba6cc31
            type: bridge
            id: resin-dns
            permissions:

        Setting: proxy

        Setting: ipv4
            dns-priority: 100
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: manual

        Setting: ipv6
            dns-priority: 100
            addresses:
            dns-search:
            route-data:
            dns:
            routes:
            address-data:
            method: link-local

“Wired connection 2” is the name of the interface assigned to the cellular modem.

Relevant output from dmesg:

[    9.034775] usb 1-2: config 1 has an invalid interface number: 12 but max is 7
[    9.034783] usb 1-2: config 1 has an invalid interface number: 13 but max is 7
[    9.034786] usb 1-2: config 1 has an invalid interface number: 14 but max is 7
[    9.034789] usb 1-2: config 1 has no interface number 2
[    9.034791] usb 1-2: config 1 has no interface number 6
[    9.034793] usb 1-2: config 1 has no interface number 7
[    9.070076] hid-generic 0003:1410:9021.0003: hiddev96,hidraw2: USB HID v1.01 Device [Novatel Wireless MiFi USB620L] on usb-0000:00:14.0-2/input14
[    9.070202] sdhci-pci 0000:00:12.0: SDHCI controller found [8086:2296] (rev 35)
[    9.091330] cdc_acm 1-2:1.12: ttyACM0: USB ACM device
[    9.093074] sdhci-pci 0000:00:12.0: SDHCI controller found [8086:2296] (rev 35)
[    9.095362] usbcore: registered new interface driver cdc_acm
[    9.095369] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[    9.095849] sdhci-pci 0000:00:12.0: SDHCI controller found [8086:2296] (rev 35)
[    9.101849] sdhci-pci 0000:00:12.0: SDHCI controller found [8086:2296] (rev 35)
[    9.109052] cdc_ether 1-2:1.4 eth0: register 'cdc_ether' at usb-0000:00:14.0-2, CDC Ethernet Device, 00:15:ff:17:84:80
[    9.109103] usbcore: registered new interface driver cdc_ether
[    9.109501] sdhci-pci 0000:00:12.0: SDHCI controller found [8086:2296] (rev 35)
[    9.119258] cdc_ether 1-2:1.4 enp0s20u2i4: renamed from eth0
[    9.151842] IPv6: ADDRCONF(NETDEV_UP): enp0s20u2i4: link is not ready
[    9.152018] cdc_ether 1-2:1.4 enp0s20u2i4: kevent 12 may have been dropped
[    9.152027] cdc_ether 1-2:1.4 enp0s20u2i4: kevent 12 may have been dropped
[    9.191545] IPv6: ADDRCONF(NETDEV_UP): enp0s20u2i4: link is not ready
[    9.192006] cdc_ether 1-2:1.4 enp0s20u2i4: kevent 12 may have been dropped
[   14.032337] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s20u2i4: link becomes ready

At minimum I’m experiencing some DNS issues that I’m now trying to debug. All domain names are resolving to 192.168.3.0/24 addresses for some reason. apt-get update hangs here (note the incorrect IP addresses):

0% [Connecting to deb.debian.org (192.168.3.6)] [Connecting to security.debian.org (192.168.3.5)]

I’ve also tried run the cellular test application from https://github.com/resin-io-projects/cellular-test. I deployed it to my device but the application container fails with:

./start.sh: line 11: /usr/bin/mmcli: cannot execute binary file: Exec format error

Any other ideas?


#16

For anyone coming to this page from a search…

The adaptor is registering against the host using CDC-ECM mode, which we support. This basically makes it appear as a straight ethernet adaptor so the system will do a DHCP on it etc. It was being provided with a private IP 192.168.123.2 and the dongle was being a router at 192.168.123.1. I could ping the dongle and query it’s web interface, using a command wget -q -O - http://192.168.123.1/fieldtest | cat, which showed me some diagnostic info:

...
Call State: Idle
...

The modem was not connected. Running the command wget -q -O - http://192.168.123.1/srv/connect | cat will make it connect, and then the Call State value changes to Connected. You should also notice your IP changing from a private one, to a publicly routable one.


#18

@richbayliss is spot on, and his fix for this issue works great.

The modem is supposed to auto-connect usually, but did not because of a misconfiguration on Verizon’s side. Once that was resolved, we had to take no additional action to get the modem to connect.