Need help with 4G LTE modem

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

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.

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)

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

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

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?

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?

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?

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.

Hey there,

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

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?

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.

1 Like

@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.