You are on page 1of 25

skip to content

User Tools
RegisterLog In
Site Tools
Search
Search
Recent ChangesMedia ManagerSitemap
OpenWrt Wiki Welcome to OpenWrt recipes Use 3g/UMTS USB Dongle for WAN connectio
n
cestina or Cesky (Czech)
Deutsch (German)
English
Espanol (Spanish, Mexico)
Francais (French)
Hungarian (magyar)
??? (Japanese)
Poliski (Polish)
Portugues brasileiro (Portuguese, Brasil)
(Russsian)
T?rkce (Turkish)
?? (Chinese)
?? (Taiwanese)
doc:recipes:3gdongle
Table of Contents
Preparations
Required Packages
Dependencies
Installation
switching USB mode
usb-modeswitch method
sdparm method
Configuration
Network configuration
Chat configuration
Establishing connection
Debugging signal strength issues
AICCU interaction
Installing multiple 3G dongles
LOADBALANCER/ MULTIWAN
Additional DNS configuration
Advertising public DNS to clients
Using DNS forwarding
Easy Configuration Using Luci Web Interface
Obtaining IPv6 address
Compile things yourself
Troubleshooting
Howto activate serial mode through web browser on CDC-Ethernet devices
Huawei
ZTE
Howto restore CDC mode on CDC-Ethernet capable devices
Huawei
ZTE
Workarounds for specific devices
General information on modeswitching
Huawei E220/Chaos Calmer
TP-Link MA260/Attitude Adjustment
TP-Link MA260/Barrier Breaker
Devices using qmi and mbim protocol

QMI Protocol Configuration


MBIM Protocol configuration
Setting up RNDIS-based dongles
RNDIS Troubleshooting
RNDIS Security Note
Use 3g/UMTS USB Dongle for WAN connection
This recipe explains how to setup and configure OpenWrt for using a USB 3g/UMTSmodem for WAN connection. You may want to checkout the multiwan package to use t
his simultaneously with other connections to the internet. Another way to do mul
tiwan is described in wired.wan.with.3g.dongle. The information there can be con
sidered outdated.
Please use OpenWrt 10.03.1-rc3 'Backfire' or newer image.
:!: You are advised to inform yourself on how easily cellular mobile telephony c
an be intercepted. Remember this is a wireless connection. Also, some providers
block certain ports: do not forget to inform yourself about that, too
:!: If you've got a Huawei E367 (which will work), or a Huawei E585 (which does
not currently work), you may want to read the following tutorial (which includes
info on why you may not be able to get the on-board micro-SD card to function):
http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?t=836
:!: If you have the Leadtek FlashOFDM card (Flarion) from T-Mobile in Slovakia a
nd the Asus WL-500g Premium, you may use the image on http://www.accalio.com/ind
ex.php?id=301. If you wish to get more information, or another distribution with
the driver, please contact Accalio http://www.accalio.com
:!: Some modem sticks provide an usb-ethernet-device (e.g. Huawei "HiLink" - dev
ice numbers with 'h', but also other manufacturers like ZTE has such products MF
823, MF831, ) In that case usb-modeswitch and usb tethering will help. Please kee
p in mind, that tethering will in most cases add an additional NAT layer, that m
ay or may not desireable. If you prefer to let OpenWRT care about dialing in, ro
uting, NATting, firewalling or if your provider assigns you an external IPv4 (wh
ich is most useful for setups, that need port forwarding), you will most likely
want to modeswitch your 3g/4g modem to act as a serial device.
:!: Serial device modes: If a dongle in permanently configured for serial mode,
it is advised not to install usb-modeswitch onto your wrt device. Modem sticks a
re commonly equipped with a flash space containing drivers and software and/or p
rovide a slot for a micro-SD-card. These features (like the 'NO-CD' feature) can
be configured in various ways. These configurations may be stored permanently.
In that case a modeswitch will behave in an unpredictable way. A modem stick, th
at was previously configured as a modem will show up as serial devices (typicall
y /dev/ttyUSB0-2). A default setting in combination with modeswitch may addition
ally show the sd-card reader. See the Troubleshooting section in this document f
or further information.
:!: Some high speed usb modems provide qmi or mbim protocol for connection inste
ad of legacy ppp protocol. For more information about qmi and mbim, see How To U
se LTE modem in QMI mode for WAN connection section of this wiki.
Preparations
Required Packages
First install required packages:
comgt manpage for comgt
Appropriate host controller interface for your USB hardware (precompiled images

will most likely already contain the correct one)


kmod-usb2 (aka EHCI)
kmod-usb-ohci
kmod-usb-uhci (for example VIA chips)
Support for serial communication; needed to send control commands to the dongle
and receive its responses.
kmod-usb-serial, and
kmod-usb-serial-option, and
kmod-usb-serial-wwan, or
kmod-usb-acm i.s.o. the last two, depending on dongle/phone hardware.
kmod-usb-serial-option is not available for 2.4 kernel, install kmod-usb-serial
and put a line equivalent to "usbserial vendor=0x12d1 product=0x1003 maxSize=204
8" in /etc/modules.d/60-usb-serial)
modeswitching tools, if your modem initially presents itself as a storage device
- one of the following, depending on your modem:
usb-modeswitch and usb-modeswitch-data (recommended) A mode switching tool for c
ontrolling "flip flop" (multiple device) USB gear.
Note: as of r36812, usb-modeswitch package had been under major overhaul from or
dinary draisberghof usb_modeswitch found in many linux distributions. usb-modesw
itch-data is included in the package, with the new json format.
Note: if you plan to use dongle's card-reader for extroot - usb-modeswitch will
most probably cause problems.
sdparm - utility to send SCSI commands (needed on Ovation MC935D)
luci-proto-3g for proper support in luci in RC6 and later
Dependencies
If you are doing an offline installation, you might need some of these packages
handy
kmod-usb-core, already in 10.03 RC3 Image
chat, dependency of comgt
ppp, dependency of chat, already in 10.03 RC3 Image
kmod-usb-serial, dependency of kmod-usb-serial-option
libusb or the "compatible" library from libusb-1.0, dependency of usb-modeswitch
Installation
First install needed packages:
opkg update
opkg install comgt kmod-usb-serial kmod-usb-serial-option kmod-usb-serial-wwan u
sb-modeswitch usb-modeswitch-data
Now plug your USB Dongle to the USB port and restart the router.
Check dmesg for:
USB Serial support registered for generic
usbserial_generic 1-1:1.0: generic converter detected
USB Serial support registered for generic
usbserial_generic 1-1:1.0: generic converter detected
usb 1-1: generic converter now attached to ttyUSB0
usbserial_generic 1-1:1.1: generic converter detected
usb 1-1: generic converter now attached to ttyUSB1
...
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
option: v0.7.2:USB Driver for GSM modems
If above lines do not appear in dmesg, but instead you see something like:

scsi1 : SCSI emulation for USB Mass Storage devices


usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning
scsi 1:0:0:0: CD-ROM
Novatel Mass Storage
2.31 PQ: 0 ANSI: 0
scsi 1:0:0:0: Attached scsi generic sg1 type 5
usb-storage: device scan complete
then, depending on your modem, you have to switch device mode (described below).
If you still can't see usbserial_generic in dmesg, try loading the usbserial mod
ule (<vid> and <pid> are Vendor and Product ID of your device):
rmmod usbserial #optional
insmod /lib/modules/`uname -r`/usbserial.ko vendor=0x<vid> product=0x<pid>
Alternatively, you can also use option GSM driver on your dongle. Option driver
is more reliable, as it can distinguish between serial port and storage port.
insmod option #skip this if option driver is loaded already
echo '<vid> <pid> ff' > /sys/bus/usb-serial/drivers/option1/new_id
To automate the process of attaching option serial driver on boot, just edit /et
c/rc.local and place
echo '<vid> <pid> ff' > /sys/bus/usb-serial/drivers/option1/new_id
before the exit code
exit 0
Adding the above to hotplug instead of rc.local: You can easily integrate this i
nto hotplug in the following way - in this example we will use a fictional "3G D
ongie HSPA+" Dongle:
Create and edit the file /etc/hotplug.d/usb/22-dongie_hspaplus:
#!/bin/sh
...
DONGIEHSPAPLUS_PRODID="0815/9000/0"
if [ "${PRODUCT}" = "${DONGIEHSPAPLUS_PRODID}" ]; then
if [ "${ACTION}" = "add" ]; then
...
echo '0815 9000 ff' > /sys/bus/usb-serial/drivers/option1/new_id
...
If your modem's switched product id is 0815:9000, the above will work. So for yo
ur modem you will have to replace all appearances of the variable DONGIEHSPAPLUS
_PRODID and all appearance of "0815" and "9000" in the above example with your m
atching product's name, vendor and product id.
Check dmesg again for:
usbcore: registered new interface driver usbserial
USB Serial support registered for generic
usbserial_generic 1-1.3:1.0: generic converter detected
usb 1-1.3: generic converter now attached to ttyUSB0
usbserial_generic 1-1.3:1.1: generic converter detected
usb 1-1.3: generic converter now attached to ttyUSB1
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial Driver core
Also check kernel USB debug for loaded drivers
root@OpenWrt:~# cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1

P: Vendor=1c9e ProdID=9800 Rev= 0.00


S: Manufacturer=USB Modem
S: Product=USB Modem
S: SerialNumber=1234567890ABCDEF
C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff
E: Ad=82(I) Atr=03(Int.) MxPS= 64 Ivl=2ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff
E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06
E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
switching USB mode

Prot=ff Driver=option
Prot=ff Driver=option

Prot=ff Driver=option
Prot=50 Driver=usb-storage

usb-modeswitch method
Install and use the usb-modeswitch and usb-modeswitch-data packages with the cor
rect hardware ID's for your USB Dongle in order to switch the USB dongle from CD
ROM file system to Modem mode (> flip flop). Read on here how to use this packag
e.
Now your USB Dongle should create logs in dmesg. If it doesn't, try
usb_modeswitch -c /etc/usb_modeswitch.d/<file>
where <file> represents the modem's combined vendor/product id, e.g. 19d2:0083 f
or a ZTE MF190. Obviously, that file must exist in the forementioned directory.
This will show syntax errors in <file> , if any.
usb_modeswitch -l -c /etc/usb_modeswitch.d/<file>
will list switchable devices.
usb_modeswitch -s -c /etc/usb_modeswitch.d/<file>
will actually execute the custom modeswitch. Add
-v
, if you need more information.
For instance, with the DX 7.2M HSDPA 3G SIM Card USB Item# 80032, the reported s
csi ID is 12d1:1001; running "usb_modeswitch -v 12d1 -p 1001" results in 4 ttyUS
B devices:
[426955.836000] option 1-1.2:1.0: GSM modem (1-port) converter detected
[426955.844000] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[426955.860000] option 1-1.2:1.1: GSM modem (1-port) converter detected
[426955.868000] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[426955.884000] option 1-1.2:1.2: GSM modem (1-port) converter detected
[426955.892000] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[426955.908000] option 1-1.2:1.3: GSM modem (1-port) converter detected
[426955.916000] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB3
[426955.936000] scsi17 : usb-storage 1-1.2:1.4
[426956.940000] scsi 17:0:0:0: CD-ROM
HSDPA
CDROM Storage
2.31P
Q: 0 ANSI: 2
[426956.948000] scsi 17:0:0:0: Attached scsi generic sg0 type 5
[426956.960000] scsi 17:0:0:1: Direct-Access
HSDPA
MMC Storage
2.31P
Q: 0 ANSI: 2
[426956.968000] sd 17:0:0:1: Attached scsi generic sg1 type 0
[426956.992000] sd 17:0:0:1: [sda] Attached SCSI removable disk
NOTE: As of r36812, OpenWrt made significant changes with usb-modeswitch as part

of procd system init daemon. The new usb-modeswitch package includes binary usb
mode with json-based configuration instead of classic usb_modeswitch binary. Sup
ported modems should switch automatically as long as usbmode service is active.
The /etc/usb-mode.json configuration file looks partially like below.
{
"messages" : [
"555342431234567800000000000006d0000000000000000000000000000000"
,
"5553424312345678000000000000061b004600000000000000000000000000"
,
],
"devices" : {
"03f0:002a": {
"*": {
"t_class": 7,
"msg": [ 0 ],
"response": true
}
},
"0408:f000": {
"*": {
"t_vendor": 1032,
"t_product": [ 53257 ],
"msg": [ 1 ]
}
},
}
}
03f0:002a is default vendor and product in hexadecimal neotation, as it appears
on executition of lsusb or kernel usb debug, while msg is the message content ar
ray. These messages issue the commands, that will either allow for media eject a
in order to switch the device into 3G modem mode
nd/or eject the virtual CD-ROM,
. t_vendor is target vendor in decimal notation, t_product is target product in
decimal notation. Depending to the recognized vendor and product id, you may sen
d one of the messages to the dongle by just using the message array index If you
want to know more, look at the file /etc/usb-mode.json.
The above usbmode-json example will send this message code
"555342431234567800000000000006d0000000000000000000000000000000"
to the usb device with the vendor id 03f0 and product id 002a. After modeswitchi
ng, the usb device will stay with the same vendor id and product id, but with ta
rget device class number of 7.
In addition, it will send message code
"5553424312345678000000000000061b004600000000000000000000000000"
to the usb device with the vendor id and the product id of 0408:f000. After mode
switching, the usb device will switch to decimal vendor id and product id of 103
2:53257, which you can convert to hexadecimal notation of 0408:D009 (You need de
cimal to hexadecimal converter such as your computer's calculator in 'programmer
's mode'.). The device vendor id and product id after modeswitch as show on lsus
b and /sys/kernel/debug/usb/devices is 0408:D009.
Note: the json file is generated automaticallly from ordinary usb_modeswitch dat
a files during build process using perl script named convert-modeswitch.pl. For
diagnostics purpose, you can create usb-mode-custom.json with defined message an
d devices part and launch the command
usbmode -l
usbmode -s -v -c /path/to/usb-mode-custom.json

Converting the standard usb-modeswitch file to json format can be done in a simp
le way. The standard usb-modeswitch file (0408:f000) content.
# Yota Router (Quanta 1QDLZZZ0ST2)
TargetVendor=0x0408
TargetProduct=0xd009
MessageContent="5553424312345678000000000000061b004600000000000000000000000000"
Target vendor (0x0408) is converted to decimal notation to fill t_vendor value (
1032) and target product (0xd009) is converted to decimal notation to fill t_pro
duct (53257). There is only one message content, so the message index is zero (0
). The resulting usb-mode-custom.json content is as follows.
{
"messages" : [
"5553424312345678000000000000061b004600000000000000000000000000"
,
],
"devices" : {
"0408:f000": {
"*": {
"t_vendor": 1032,
"t_product": [ 53257 ],
"msg": [ 0 ]
}
},
}
}
Based on this example, you can make another usb-mode-custom.json file to perform
modeswitching on unsupported dongles for diagnostic purpose.
If your device doesn't work with usb_modeswitch, try the sdparm method.
sdparm method
This method uses sdparm to issue SCSI eject command to the emulated CDROM device
. This is enough to put some modems into modem mode (tested on Ovation MC935D).
Before you start, make note of your modem's vendor and product ID:
# cat /proc/bus/usb/devices
...
P: Vendor=1410 ProdID=5020 Rev= 0.00
S: Manufacturer=Novatel Wireless, Inc.
...
First, find out your device address - in this example it's going to be sg0. Then
issue the following:
sdparm --eject /dev/sg0
For Attitude Adjustment try:
sdparm --command=eject /dev/sg0
Then, check for changes of your product ID:
# cat /proc/bus/usb/devices
...
P: Vendor=1410 ProdID=7001 Rev= 0.00
S: Manufacturer=Novatel Wireless, Inc.
S: Product=Qualcomm Configuration
...
I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
...
Configuration

The shown configuration replaces the WAN line, so no further changes are needed
to the firewall/other configuration. Note that if you also want to use the WAN p
ort, you have to define it as WAN2 in the configuration. If you define the 3g co
nnection as WAN2, you have to do more changes to other parts, like firewall and
so on.
Network configuration
Edit your '/etc/config/network' file: (see network 3G section for more details)
config interface wan
#
option ifname ppp0 # on some carriers enable this line
option pincode 1234
option device /dev/ttyUSB0
option apn
your.apn
option service umts
option proto 3g
Replace 'pincode' with the correct pincode of your SIM card. Note that an disabl
ed pincode on the SIM card is problematic, please enable it. If you are connecti
ng to a phone where the pincode has already been entered, there if no need for t
his.
Replace 'device' with the correct USB port of your modem. On a phone this might
for example be /dev/ttyACM0.
Replace 'apn' with the correct APN of your 3g/umts provider.
Note in case your APN also requires an username/password, you can configure this
too, just add to the network configuration file:
option username yourusername
option password yourpassword
Replace 'username' and 'password' with the correct username/password you receive
d from your 3g provider. You can also look for this information (apn, username a
nd password) in the mobile-broadband-provider-info database from the Gnome proje
ct.
For some providers, apperently it is neccessary to add 'noipdefault' to 'pppd_op
tions'. If logread shows that the connection was established and CHAP authentica
tion was successful, but the connection was immediately dropped after, then try:
option 'pppd_options' 'noipdefault'
If your provider supports PAP authentication only then you need to disable all o
ther protocols via these added options:
option 'pppd_options' 'noipdefault refuse-chap refuse-mschap refuse-mscha
p-v2 refuse-eap'
Now you have configured the network interface.
Chat configuration
Now we need to check if the default chatscript does work with your 3g provider o
r not.
You can find it here '/etc/chatscripts/3g.chat', it looks like this:
ABORT
ABORT
ABORT

BUSY
'NO CARRIER'
ERROR

REPORT
TIMEOUT
""
OK
OK
ABORT
TIMEOUT
OK
CONNECT
If your
have to
ettings

CONNECT
12
"AT&F"
"ATE1"
'AT+CGDCONT=1,"IP","$USE_APN"'
'NO CARRIER'
15
"ATD*99***1#"
' '
modem needs a special AT command, your can add it to this file. You may
edit the dial number of the ATD command to fit in with your provider's s
(for example "*99#" instead of "*99***11#").

Establishing connection
Just type on console 'ifup wan'
Now check dmesg logread for successful connect:
pppd 2.4.4 started by root, uid 0
abort on (BUSY)
abort on (ERROR)
report (CONNECT)
timeout set to 12 seconds
send (AT&F^M)
expect (OK)
AT&F^M^M
OK
-- got it
send (ATE1^M)
expect (OK)
^M
ATE1^M^M
OK
-- got it
send (AT+CGDCONT=1,"IP","your.apn"^M)
abort on (NO CARRIER)
timeout set to 15 seconds
expect (OK)
^M
AT+CGDCONT=1,"IP","your.apn"^M^M
OK
-- got it
send (ATD*99***1#^M)
expect (CONNECT)
^M
ATD*99***1#^M^M
CONNECT
-- got it
send ( ^M)
Serial connection established.
Using interface 3g-wan
Connect: 3g-wan <--> /dev/ttyUSB0
Could not determine remote IP address: defaulting to x.x.x.x
local IP address x.x.x.x
remote IP address x.x.x.x
primary DNS address x.x.x.x
secondary DNS address x.x.x.x
adding wan (3g-wan) to firewall zone wan
That's it, now you should be connected.

If you want an permanent connect from startup, add 'ifup wan' command to '/etc/r
c.local' file.
Debugging signal strength issues
For troubleshooting or locating the best position for the USB Dongle, you can us
e
gcom info -d /dev/ttyUSBx
from the console. This tool will report signal strength, but also network regist
ration and SIM status. If it returns a port-in-use error because your connection
is already up, try
gcom -d /dev/ttyUSBx
where x represents a port number not used by the wan connection itself.
gcom returns the signal quality in RSSI (Received signal strength indication) an
d in BER (Bit error rate, reported in percent). A higher RSSI value represents a
stronger signal - scale is from 0 to 99, where 1 is the lowest detectable signa
l and 31 a very good signal. Don't expect your signal to go all the way up to 99
, though. If BER returns 99 it means not known or not detectable.
If your 3G modem is e.g. a ZTE K3565-Z featuring a LED SSI indicator to show it'
s status (Not Connected, GPRS, UMTS) you may be mislead to believe, that a stron
g signal strength of e.g. 17 may be better, while you only get GPRS, but a value
of 4 allows for UMTS access. This is owed to the circumstance, that the device
may switch over to another cell. The only method to prevent a handover between a
GPRS and an UMTS station during the process of optimizing, is to initiate the d
evice to use 'UMTS only' in the first place.
You can also add the AT command
""
"AT+CSQ"
to your chat script to check signal quality.
Command return is "+CSQ: <rssi>,<ber>" and looks like this in logread:
send (AT+CSQ^M)
expect (OK)
^M
AT+CSQ^M^M
+CSQ: 11,99^M
^M
OK
-- got it
If you have problems establishing a connection and multiple modem devices (/dev/
ttyUSB0, /dev/ttyUSB1, ) are present, try all of them. Some may not work at all w
hile others seem to work at first, but will give a NO CARRIER during the connect
ion process.
AICCU interaction
/etc/hotplug.d/iface/30-aiccu starts aiccu when the WAN connection is establishe
d. It seems however that, in the case of 3G connections, the start scripts are s
tarted just a bit too early and the start of aiccu fails. I have butchered the s
cript a bit:
#!/bin/sh
[ "$ACTION" = "ifup" -a "$INTERFACE" = "wan" ] && /etc/init.d/aiccu enabled && s
leep 15; /etc/init.d/aiccu restart
Note that sixxs really frowns upon quick re-re-restarts of aiccu, it may get you

r account blocked for unjust use of resources. Be careful with these scripts.
Installing multiple 3G dongles
You can use many usb 3G dongles easily by using an active USB hub.
Prepare for the next steps: We assume you have at least one 3g dongle configured
. You will need an active internet connection in order to install modules for 3g
support. Check 3gdongle for more information.
1. Connect an active USB hub to the OpenWrt router. You need to assure, that the
power supply will deliver sufficent power for all of your 3g dongles. A proper
estimation is, that you will need 500+ mA per one 3g dongle. Remember that modem
can slightly exceed its declared power consumption in HDSPA+ modes. Be generous
and pick USB hub with some power source overhead.
2. Connect all 3g dongles and start.
3. Browse through logread to check if modems are properly recognized and /ttyUSB
ports are assigned.
4. Usually a 3g modem has a few "modem ports" - one for connection and others
e service types. Exeplum gratum: A Huawei E1750 has three ports. The first in
a communication port and last is a service port. If you only have one modem,
will be recognized as /ttyUSB0, /ttyUSB1 and /ttyUSB2. You need to configure
terface using /ttyUSB0 (first one). A Huawei E372 has five ports, but similar
other Huawei devices, the communication port is the first one.

ar
is
it
in
to

5. You need to configure interfaces. An example of "/etc/config/network" could l


ook like this:
config 'interface' 'wan'
option 'proto' '3g'
option 'service' 'umts'
option 'device' '/dev/ttyUSB0'
option 'apn' 'internet'
option 'pincode' ''
option 'username' ''
option 'password' ''
Usually you need to provide an APN name in "option 'apn' 'Name-Of-APN-HERE'". If
your sim card is locked with a PIN, or if your porvider requires to use a usern
ame and/or pass, add it accordingly.
6. Check in log read next /ttyUSB[X] ports. In my case I have second modem start
ing with /ttyUSB3 (previous one use /ttyUSB0 to /ttyUSB2) so second interface lo
oks like this:
config 'interface' 'wan2'
option 'proto' '3g'
option 'service' 'umts'
option 'maxwait' '0'
option 'device' '/dev/ttyUSB3'
option 'apn' 'internet'
option 'pincode' ''
option 'username' ''
option 'password' ''
7. remember to add second interface to the zone "wan" in the firewall's config f
ile "/etc/config/firewall" (it may differ in your case):
config 'zone'
option 'name' 'wan'
option 'input' 'REJECT'

option 'output' 'ACCEPT'


option 'forward' 'REJECT'
option 'masq' '1'
option 'mtu_fix' '1'
option 'network' 'wan wan2'
Look at last line - there is wan2 added.
8. Now you have both interfaces configured and they should work.
9. You can use both interfaces as failover
LOADBALANCER/ MULTIWAN
FIXME: This section needs a complete rewrite to fix spelling and grammar errors.
loadbalncer - https://forum.openwrt.org/viewtopic.php?id=23904
Note: It seems multiwan isn't perfectly suited for 3G modems in terms of stabili
ty. Modems don't reconnect automatically by HealthMonitor. Also, after a manual
modem restart, multiwan doesn't use the newly reattached interface until it's re
started.
Configuration files for two 3G modems paired in multiwan:
Network (default route to 0 and peerdns to 0):
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'interface' 'lan'
option 'ifname' 'eth0.1'
option 'type' 'bridge'
option 'proto' 'static'
option 'ipaddr' '192.168.1.1'
option 'netmask' '255.255.255.0'
config 'interface' 'wan'
option 'proto' '3g'
option 'service' 'umts'
option 'device' '/dev/ttyUSB0'
option 'apn' 'vpn'
option 'pincode' ''
option 'username' 'vpn'
option 'password' 'vpn'
option 'maxwait' '20'
option 'defaultroute' '0'
config 'interface' 'wan2'
option 'proto' '3g'
option 'service' 'umts'
option 'device' '/dev/ttyUSB3'
option 'apn' 'erainternet'
option 'pincode' ''
option 'username' 'erainternet'
option 'password' 'erainternet'
option 'maxwait' '10'
option 'defaultroute' '0'
config 'switch'

option
option
option
option

'name' 'rtl8366s'
'reset' '1'
'enable_vlan' '1'
'blinkrate' '2'

config 'switch_vlan'
option 'device' 'rtl8366s'
option 'vlan' '1'
option 'ports' '0 1 2 3 5t'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '1'
option 'led' '6'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '2'
option 'led' '9'
config 'switch_port'
option 'device' 'rtl8366s'
option 'port' '5'
option 'led' '2'
Firewall - add second wan zones
config 'defaults'
option 'syn_flood' '1'
option 'input' 'ACCEPT'
option 'output' 'ACCEPT'
option 'forward' 'REJECT'
option 'drop_invalid' '1'
config 'zone'
option
option
option
option
option

'name' 'lan'
'network' 'lan'
'input' 'ACCEPT'
'output' 'ACCEPT'
'forward' 'REJECT'

config 'zone'
option
option
option
option
option
option
option

'name' 'wan'
'input' 'REJECT'
'output' 'ACCEPT'
'forward' 'REJECT'
'masq' '1'
'mtu_fix' '1'
'network' 'wan'

config 'rule'
option
option
option
option
option

'src' 'wan'
'proto' 'udp'
'dest_port' '68'
'target' 'ACCEPT'
'family' 'ipv4'

config 'rule'
option 'src' 'wan'
option 'proto' 'icmp'

option 'icmp_type' 'echo-request'


option 'family' 'ipv4'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'wan'
option 'proto' 'icmp'
list 'icmp_type' 'echo-request'
list 'icmp_type' 'destination-unreachable'
list 'icmp_type' 'packet-too-big'
list 'icmp_type' 'time-exceeded'
list 'icmp_type' 'bad-header'
list 'icmp_type' 'unknown-header-type'
list 'icmp_type' 'router-solicitation'
list 'icmp_type' 'neighbour-solicitation'
option 'limit' '1000/sec'
option 'family' 'ipv6'
option 'target' 'ACCEPT'
config 'rule'
option 'src' 'wan'
option 'dest' '*'
option 'proto' 'icmp'
list 'icmp_type' 'echo-request'
list 'icmp_type' 'destination-unreachable'
list 'icmp_type' 'packet-too-big'
list 'icmp_type' 'time-exceeded'
list 'icmp_type' 'bad-header'
list 'icmp_type' 'unknown-header-type'
option 'limit' '1000/sec'
option 'family' 'ipv6'
option 'target' 'ACCEPT'
config 'include'
option 'path' '/etc/firewall.user'
config 'forwarding'
option 'dest' 'wan'
option 'src' 'lan'
config 'rule'
option 'target' 'ACCEPT'
config 'zone'
option
option
option
option
option
option
option

'name' 'wan2'
'forward' 'REJECT'
'output' 'ACCEPT'
'network' 'wan2'
'input' 'REJECT'
'masq' '1'
'mtu_fix' '1'

config 'forwarding'
option 'dest' 'wan2'
option 'src' 'lan'

Multiwan - Additionally add option 'health_monitor' 'serial' at the beggining to


help healthmonitor check for dropped ppp interface (Proposed by Jolouis).

config 'multiwan' 'config'


option 'health_monitor' 'serial'
option 'default_route' 'fastbalancer'
option 'debug' '1'
config 'interface' 'wan'
option 'health_fail_retries' '3'
option 'health_recovery_retries' '5'
option 'failover_to' 'fastbalancer'
option 'timeout' '10'
option 'dns' '8.8.8.8 8.8.4.4'
option 'weight' '10'
option 'health_interval' '120'
option 'icmp_hosts' 'gateway'
config 'interface' 'wan2'
option 'timeout' '3'
option 'health_fail_retries' '3'
option 'health_recovery_retries' '5'
option 'failover_to' 'fastbalancer'
option 'dns' '208.67.222.222 208.67.220.220'
option 'weight' '10'
option 'health_interval' '120'
option 'icmp_hosts' 'gateway'
config 'mwanfw'
option 'src' '192.168.1.150'
option 'wanrule' 'wan2'
config 'mwanfw'
option 'wanrule' 'fastbalancer'
I had issues with auto reconnecting modems so I've modified script for checking
if modems are up. This script checks modems separately. I've based this on a gre
at tutorial found at http://eko.one.pl/?p=openwrt-3g#automatycznyrestartpoczenia
Create file
# touch /bin/tester.sh
# chmod 755 /bin/tester.sh
Put this into file:
#!/bin/sh
if ! ping -q -c 1 -W 10 -I 3g-wan 8.8.8.8 > /dev/null; then
(ifup wan; sleep 5; /etc/init.d/multiwan restart) &
fi
if ! ping -q -c 1 -W 10 -I 3g-wan2 8.8.8.8 > /dev/null; then
(ifup wan2; sleep 5; /etc/init.d/multiwan restart) &
fi
Create CRON job:
# /etc/init.d/cron stop
# echo "*/2 * * * * /bin/tester.sh" >> /etc/crontabs/root
# /etc/init.d/cron enable
# /etc/init.d/cron start
This will ping through two wans: 3g-wan and 3g-wan2 and restarts the interface i
n case of no replies. Additionally, It will wait 5 seconds and force a multiwan
restart as it seems wouldn't recognize the new wan interfaces. Restart of multiw

an should take care of this situation.


Additional DNS configuration
Advertising public DNS to clients
If local clients are unable to resolve DNS names DNS, you can advertise external
name servers to them. That comes in handy, if you don't want to relay on dnsmas
q as a local resolver. Of course, if you are already running dnsmasq as a resolv
er on your WRT (default), you should rather make use of DNS forwarding. Your WRT
will then act as a local resolver to your local clients and forward requests to
configured nameservers.
For the first method just add
'list 'dhcp_option' '6,208.67.222.222,208.67.220.220'
into the dhcp section e.g.
config dhcp 'lan'
of etc/config/dhcp.
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '100'
option 'limit' '150'
option 'leasetime' '12h'
list 'dhcp_option' '6,208.67.222.222,208.67.220.220'
config 'dhcp' 'wan'
option 'interface' 'wan'
option 'ignore' '1'
It could be made to work as described here in our Forum.
Using DNS forwarding
Please note that instead of advertising public dns servers1) for clients, it's b
etter to just add server forwarding for dnsmasq, so that client dns requests are
handled by dnsmasq and forwarded to appropriate dns servers. This example is us
ing uci cli to configure dnsmasq to forward public dns requests to Google public
dns servers2).
uci add_list dhcp.@dnsmasq[-1].server=8.8.8.8
uci add_list dhcp.@dnsmasq[-1].server=8.8.4.4
uci commit dhcp
If you prefer to edit /etc/config/dhcp configuration manually:

config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
option 'server' '8.8.8.8'
option 'server' '8.8.4.4'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '100'
option 'limit' '150'
option 'leasetime' '12h'
config 'dhcp' 'wan'
option 'interface' 'wan'
option 'ignore' '1'
If you prefer to ignore DNS servers obtained via PPP negotiation:
uci add dhcp.@dnsmasq[-1].noresolv=1
uci commit dhcp
File /etc/config/dhcp
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
option 'server' '8.8.8.8'
option 'server' '8.8.4.4'
option 'noresolv' '1'
This configuration is better, because clients will be able to resolve local host
names, while utilizing dnsmasq to cache client dns requests.
More dnsmasq tweaks are available here and here.
Easy Configuration Using Luci Web Interface
Luci has supported 3G configuration. Be sure to have luci and luci-proto-3g inst
alled. If you want to do multiwan configuration, make sure that luci-apps-multiw

an is installed and optionally, luci-app-mwan3.


To create a new 3g connection, go to Luci web interface. Navigate to Network ? i
nterfaces. Click on Add new interface button. Give a simple name to the interfac
e, for example 3g and choose UMTS/GPRS/EVDO as its protocol.
Here is basic configuration to get the connection working.
# General Setup
Protocol : UMTS/GPRS/EVDO
Modem device : /dev/ttyUSB0
Service type : UMTS only (You may prefer UMTS/GPRS if you wish)
APN : internet (Not needed for CDMA/EVDO)
PIN : 1234 (Leave it blank if you don't use pin)
PAP/CHAP username : <ask your 3G provider>
PAP/CHAP password : <ask your 3G provider>
# Advanced Settings (leave them as default)
# Firewall Settings
Create / Assign firewall zone : wan
Obtaining IPv6 address
If you want to enable IPv6 on 3G connection, make sure that your dongle supports
PDPv63) and your 3G provider is providing IPv6 service.
To enable IPv6 negotiation on the PPP link, issue the following command.
uci set network.3g.ipv6=1
uci commit network.3g
Be sure to replace 3g with the correct name of 3G interface.
In addition, be sure to edit file /etc/chatscripts/3g.chat for PDPv6 configurati
on as currently there is no UCI entry for PDPv6.
ABORT BUSY
ABORT 'NO CARRIER'
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
""
"AT&F"
OK
"ATE1"
OK
'AT+CGDCONT=1,"IPV6","$USE_APN"'
SAY
"Calling UMTS/GPRS"
TIMEOUT 30
OK
"ATD$DIALNUMBER"
CONNECT ' '
You may use the following chatscript for PDPv4v6 configuration. Make sure that y
our dongle supports PDv4v64) before attempting to modify the chatscript.
ABORT
ABORT
ABORT
REPORT
TIMEOUT
""
OK
OK
SAY
TIMEOUT
OK

BUSY
'NO CARRIER'
ERROR
CONNECT
10
"AT&F"
"ATE1"
'AT+CGDCONT=1,"IPV4V6","$USE_APN"'
"Calling UMTS/GPRS"
30
"ATD$DIALNUMBER"

CONNECT ' '


If you are using Luci, be sure to check Enable IPv6 negotiation on the PPP link
and optionally Use builtin IPv6-management on the Advanced settings section of t
he 3G interface configuration page. Also, be sure to modify /etc/chatscripts/3g.
chat file for PDPv6 as explained above.
Of course you can use other methods to obtain IPv6 instead of relying on PPP neg
otiation. Go to this page for more explanation.
Compile things yourself
If you want to build an own firmware containing support for a UMTS Modem, maybe
this BuildHowTo will help you: Wireless router with a 3G dongle and multiwan for
failover on Wired, Wireless client (routed) and 3G
USBrelated
Troubleshooting
Howto activate serial mode through web browser on CDC-Ethernet devices
WARNING - this will deactivate WEB-GUI access on these devices!!! You need to kn
ow howto submit AT commands to a modem in order to restore the GUI.
Huawei
Browse to http://192.168.1.1/html/switchProjectMode.html with JavaScript enabled
browser.
ZTE
Browse to http://192.168.0.1/goform/goform_process?goformId=MODE_SWITCH&switchCm
d=FACTORY with JavaScript enabled browser.
Howto restore CDC mode on CDC-Ethernet capable devices
Huawei
AT^U2DIAG=255 or AT+U2DIAG=276 see http://www.3g-modem-wiki.com/page/Huawei+AT-c
ommands
ZTE
AT+ZCDRUN=9 AT+ZCDRUN=F
Workarounds for specific devices
General information on modeswitching
Modeswitching issues can occur especially on devices, in fallback modes (Huawei)
. It is advisable to install usbutils
opkg update && opkg install usbutils
You can look for the usb ids from
lsusb
in /etc/usb-mode.json, to see what modeswitch actions are being taken.
If you prefer to permantently switch a modem to serial/fallback mode, see http:/
/www.3g-modem-wiki.com/page/Huawei+AT-commands and take actions to deactivate th
e json-based modeswitch for that specific product id. The following section will
go into details on how to do this for the ancient E220. The following sections
for MA260 explain, how such workarounds have looked like before the introduction

of OpenWRT Chaos Calmer. It may in some cases be easier to delete the file /etc
/usb-mode.json with a custom modeswitch file, if necessary. A previously configu
red serial modem, that is unknown to the kernel can be manually associated with
it's driver by assigning it the manufacturer and product id as shown by lsusb as
follows: e.g. for E220 in fallback mode:
echo '12d1 1001 ff' > /sys/bus/usb-serial/drivers/option1/new_id
Huawei E220/Chaos Calmer
If you encounter problems with an undetected Huawei E220, you can try the follow
ing - this resets the E220 to its factory defaults, so it can again be handled b
y the new JSON-based modeswitch. This will reenable the CD-ROM Mode.
1. Make the modem work once, by manually telling the kernel to use generic (opti
on) drivers.
echo '12d1 1003 ff' > /sys/bus/usb-serial/drivers/generic/new_id
2. Shutdown WWAN (necessary only if WWAN was previously configured)
ifdown WWAN
3. Modes of the E220 Modem + PC UI
echo "AT^U2DIAG=0" >/dev/ttyUSB0
Modem + CD
echo "AT^U2DIAG=1" >/dev/ttyUSB0
References: ?? 4. Reboot
reboot
? http://www.techytalk.info/disable-virtu
m-devices/ ? https://www.semanticlab.n
et/index.php/UMTS_with_OpenWRT
TP-Link MA260/Attitude Adjustment
This workaround is valid for Attitude Adjustment, but has been obsoleted by r368
12 and newer builds, such as Barrier Breaker 14.07.
If you plug the MA260 into the USB port of a compatible OpenWRT device running A
ttitude Adjustment, you will notice certain issues, similar to those described i
n the Ubuntu forum: [TP Link MA260, Ubuntu 12.04 LTS[http://ubuntuforums.org/sho
wthread.php?t=2197164]], e.g. missing modeswitch routines missing hotplug etc.
Create and edit the file /etc/hotplug.d/usb/21-tplink_ma260 with the following c
ontent:
#!/bin/sh
BINARY="/usr/bin/usb_modeswitch"

TPLINKMA260_PRODID1="2357/f000/0"
TPLINKMA260_PRODID2="2357/9000/0"

# switch from storage mode to modem mode


if [ "${PRODUCT}" = "${TPLINKMA260_PRODID1}" ]; then
if [ "${ACTION}" = "add" ]; then
# give the storage some time to finish mounting

sleep 15
# issue the modeswitch and change the product id.
${BINARY} -v 2357 -p f000 -V 2357 -P 9000 -W -I -n \
-M '5553424312345678000000000000061e0000000000000000000000000000
00' \
-2 '5553424312345678000000000000061b0000000200000000000000000000
00'
logger -t HOTPLUG "${TPLINKMA260_PRODID1} plugged in."
fi
if [ "${ACTION}" = "remove" ]; then
logger -t HOTPLUG "${TPLINKMA260_PRODID1} was removed."
fi
fi

if [ "${PRODUCT}" = "${TPLINKMA260_PRODID2}" ]; then


if [ "${ACTION}" = "add" ]; then
#register usbserial and option device driver with the modem mode
id:
echo '2357 9000 ff' > /sys/bus/usb-serial/drivers/option1/new_id
logger -t HOTPLUG "${TPLINKMA260_PRODID2} plugged in."
fi
if [ "${ACTION}" = "remove" ]; then
logger -t HOTPLUG "${TPLINKMA260_PRODID2} was removed."
fi
fi
Similar workaround may apply to TP-Link MA180.
In order to work correctly the package usb_modeswitch needs to be installed.
TP-Link MA260/Barrier Breaker
The device works out of the box. If you update from Attitude Adjustment, you sho
uld probably remove old config files, since they are no longer used since r36812
.
The usbmode binary has been replaced by the usb_modeswitch binary to do modeswit
ching tasks. A JSON-style 3g-dongle database now prepares all necessary informat
ion for initialization. You will find more information on how this works in 3G-D
ongle recipes.
Devices using qmi and mbim protocol

Some new 3G/4G dongles use qmi and mbim protocol to establish connection to ISP.
For your information, qmi protocol is proprietary protocol by Qualcomm. In cont
rast to qmi, mbim is more standardized protocol for 3G/4G dongles.
QMI Protocol Configuration
To make use of qmi protocol, package kmod-usb-net-qmi-wwan and uqmi are needed.
uqmi is available on both barrier breaker and bleeding edge repository.
Here is a brief help about uqmi command line usage.
No device given
Usage: uqmi <options|actions>
Options:
--single, -s:
--device=NAME, -d NAME:
--keep-client-id <name>:
--release-client-id <name>:

Print output as a single line (for scripts)


Set device name to NAME (required)
Keep Client ID for service <name>
Release Client ID after exiting

Services:

dms, nas, pds, wds, wms

Actions:
--get-versions:
--set-client-id <name>,<id>:
--get-client-id <name>:
--start-network <apn>:
elow)
--auth-type pap|chap|both|none:
--username <name>:
--password <password>:
--autoconnect:
--stop-network <pdh>:
67295), (use with option below)
--autoconnect:
--get-data-status:
--set-autoconnect <val>:
abled, paused)
--get-pin-status:
--verify-pin1 <pin>:
--verify-pin2 <pin>:
--get-imsi:
--reset-dms:
--set-device-operating-mode <m>

Get service versions


Set Client ID for service <name> to <id>
(implies --keep-client-id)
Connect and get Client ID for service <name>
(implies --keep-client-id)
Start network connection (use with options b
Use network authentication type
Use network username
Use network password
Enable automatic connect/reconnect
Stop network connection (PDH should be 42949
Disable automatic connect/reconnect
Get current data access status
Get current data access status (disabled, en
Get PIN verification status
Verify PIN1
Verify PIN2
Get International Mobile Subscriber ID
Reset the DMS service
Set the device operating mode
(modes: online, low_power, factory_test, off

line
--set-network-modes <modes>:
mode2>,...])

reset, shutting_down, persistent_low_power,


mode_only_low_power)
Set usable network modes (Syntax: <mode1>[,<

Available modes: all, lte, umts, gsm, cdma,


td-scdma
--set-network-preference <mode>: Set preferred network mode to <mode>
Available modes: auto, gsm, wcdma
--set-network-roaming <mode>:
Set roaming preference:
Available modes: any, off, only
--network-scan:
Initiate network scan
--network-register:
Initiate network register
--get-signal-info:
Get signal strength info

--get-serving-system:
Get serving system info
--list-messages:
List SMS messages
--get-message <id>:
Get SMS message at index <id>
--get-raw-message <id>:
Get SMS raw message contents at index <id>
--send-message <data>:
Send SMS message (use options below)
--send-message-smsc <nr>:
SMSC number (required)
--send-message-target <nr>:
Destination number (required)
--send-message-flash:
Send as Flash SMS
UCI has supported qmi network protocol configuration. The detailed explanation a
bout qmi network configuration is explained here.
Currently, there is no such thing as luci-proto-qmi yet to make use of Luci for
qmi configuration. You need to configure UCI manually using uci command line or
text editor.
MBIM Protocol configuration
Currently, there is not enough information about mbim protocol as it's being act
ively developed. If you are curious about setting up mbim protocol, you may ask
OpenWrt users/devel mailing lists or OpenWrt forum
Here is a brief help about umbim command line.
umbim help
Usage: mbim <caps|pinstate|unlock|connect|disconnect> [options]
Options:
-d <device> the device (/dev/cdc-wdmX)
-t <transaction>
the transaction id
-n
no close
-v
verbose
- Ordered List Item
Setting up RNDIS-based dongles
(This section is based on experience with Bleeding Edge r47548 from December of
2015 on a wt3020 and connecting to an Alcatel Onetouch L850.).
For rndis devices, only a limited subset of packages are necessary (besides the
base USB packages, that are most likely already contained in the base image):
opkg update
opkg install kmod-usb-net-rndis usb-modeswitch
kmod-usb-net-rndis will also install kmod-mii, kmod-usb-net, kmod-usb-net-cdc-et
her and kmod-usb-net-rndis as dependencies.
After installing the packages and connecting the USB stick, the following should
appear in dmesg:
[ 847.390000] usb 1-1: new high-speed USB device number 3 using ehci-platform
[ 847.590000] usb 1-1: no of_node; not parsing pinctrl DT
[ 847.610000] rndis_host 1-1:1.0: no of_node; not parsing pinctrl DT
[ 847.620000] rndis_host 1-1:1.0 usb0: register 'rndis_host' at usb-101c0000.eh
ci-1, RNDIS device, 72:4d:eb:bb:e2:60
You can verify the interface details on the new usb0 network interface by runnin
g ifconfig usb0.
If the USB stick will be your only WAN connection, then the easiest way to set u
p the automatic connection is to change /etc/config/network to be something like
:

config interface 'wan'


option ifname 'usb0'
option proto 'dhcp'
(you need to reboot or restart the network subsystem with /etc/init.d/network re
start afterwards)
Since RNDIS-based sticks create their own NATted IP subnet, it is important that
OpenWRT's local IP range is different from the 4G stick's IP range. In the case
of the Alcatel L850, the default range is 192.168.1.1, which clashes with OpenW
RT's default. Therefore OpenWRT's LAN IP should be changed to something else, su
ch as:
config interface 'lan'
option ipaddr '10.10.10.1'
If auto-connect is disabled, or PIN-request is enabled on the 4G stick, you may
have to visit the dongle's admin web interface (typically 192.168.1.1) to enter
the PIN or initiate the 4G connection. You can do this from your PC connected to
the OpenWRT wifi.
RNDIS Troubleshooting
If you only see the usb messages, but not the rndis_host messages, then modesett
ing may be at fault.
Checking /sys/kernel/debug/usb/devices , the device should look like this:
T:
D:
P:
S:
S:
S:
C:*
A:
I:*
E:
I:*
E:
E:
I:*
E:
E:
and

Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=480 MxCh= 0


Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
Vendor=1bbb ProdID=0195 Rev= 2.28
Manufacturer=Alcatel
Product=MobileBroadBand
SerialNumber=0123456789ABCDEF
#Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
not like this:

T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0


D: Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1bbb ProdID=f000 Rev= 2.28
S: Manufacturer=Alcatel
S: Product=MobileBroadBand
S: SerialNumber=0123456789ABCDEF
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=125us
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
(note the number of interfaces "#Ifs=" and the "ProdID=")
RNDIS Security Note
:!: Leaving your RNDIS-based dongle admin web interface available to LAN users m
ight not be something you would like to do, as there is usually no authenticatio

n mechanism there. To protect it, you can add the following rule to Network>Fire
wall>Custom Rules:
iptables -A forwarding_lan_rule -d 192.168.1.0/24 -m comment --comment "no acces
s to USB dongle from LAN" -j DROP
Now, if you need to access your dongle web interface, log in to your OpenWRT box
with:
ssh -L 8080:192.168.1.1:80 root@your-openwrt-ip
and point your browser to http://localhost:8080.
1) Some of public DNS servers are OpenDNS:208.67.222.222,208.67.220.220 and Goog
le DNS:8.8.8.8,8.8.4.4
2) Google public dns doesn't hijack NXDOMAIN response, unlike OpenDNS
3) To check if your dongle support PDPv6, open up serial terminal (Putty, screen
, minicom, microcom, or picocom), and type AT+CGDCONT=?. If the response shows a
line containing "IPV6", for example +CGDCONT: (1-11),"IPV6",,,(0-2),(0-3), your
dongle supports PDPv6. Otherwise, your dongle is stuck with IPv4.
4) See previous note.
doc/recipes/3gdongle.txt Last modified: 2016/05/06 00:37 by tmomas
Page Tools
Show pagesource
Old revisions
Backlinks
Back to top
Except where otherwise noted, content on this wiki is licensed under the followi
ng license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP V
alid HTML5 Valid CSS Driven by DokuWiki

You might also like