Huawei E303 3G dongle in OpenWRT BarrierBreaker

Mar 15, 2015 11:54 · 813 words · 4 minute read

This is a not detailed howto about to make Huawei E303 dongle work with OpenWRT BarrierBreaker. The first step is to follow the official guide to install all the packages needed, etc. Then, create the following files to add support for the 3G dongle:

  • /etc/config/usb-mode-3g-e303.json

    {
    "messages" : [
    "55534243000000000000000000000611060000000000000000000000000000",
    ],
    "devices" : {
    "12d1:14fe": {
    "*": {
    "t_vendor": 4817,
    "t_product": [ 5374 ],
    "msg": [ 0 ]
    }
    },
    }
    }
    
  • /etc/hotplug.d/usb/22-dongie_hspaplus

    DONGIEHSPAPLUS_PRODID="12d114f0"                                          if [ "${PRODUCT}" "${DONGIEHSPAPLUS_PRODID}" ]
    then
    if [ "${ACTION}" = "add" ]; then                           
    echo '12d1 14fe ff' > /sys/bus/usb-serial/drivers/optionnew_id
    /sbin/usbmode -s -v -c /etc/config/usb-mode-3g-e303.json
    fi
    fi
    
  • Fix the /etc/hotplug.d/usb/20-usb_mode by adding a sleep 5 in the first line to get the usb working at boot. Otherwise, you need to re-plug your 3G dongle in order to make it work:

    sleep 5
    /etc/init.d/usbmode start
    
  • Modify the /etc/chatscripts/3g.chat with the number you need to call. In this particular case, for Movistar Spain, *99#:

    ABORT   BUSY
    ABORT   'NO CARRIER'
    ABORT   ERROR
    REPORT  CONNECT
    TIMEOUT 10
    ""      "AT&F"
    OK      "ATE1"
    OK      'AT+CGDCONT=1,"IP","$USE_APN"'
    SAY     "Calling UMTS/GPRS"
    TIMEOUT 30
    OK      "ATD*99#"
    CONNECT ' '
    

Then, try it. You should see the correct lines in the dmesg or logread output, and the correct ones in /sys/kernel/debug/usb/devices (check the official guide)

Now configure your network connection, those are the files I’ve modified, but your mileage may vary:

  • /etc/config/network.3g

    config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'
    
    config globals 'globals'
    option ula_prefix 'ZZZZZZZ::/48'
    
    config interface wan
    option ifname 'ppp0'
    option proto '3g'
    option service 'umts'
    option device '/dev/ttyUSB0'
    option apn 'movistar.es'
    option pincode 'YOURPIN'
    option username 'movistar'
    option password 'movistar'
    
    config switch
    option name 'rt305x'
    option reset '1'
    option enable_vlan '1'
    
    config switch_vlan
    option device 'rt305x'
    option vlan '1'
    option ports '0 1 2 3  6t'
    
    config switch_vlan
    option device 'rt305x'
    option vlan '2'
    option ports '4  6t'
    
    config 'interface' 'wifi'
    option 'proto'      'static'
    option 'ipaddr'     '192.168.23.1'
    option 'netmask'    '255.255.255.0'
    
  • /etc/config/wireless.3g

    config wifi-device  radio0
    option type     mac80211
    option channel  11
    option hwmode	11g
    option path	'10180000.wmac'
    option htmode	HT20
    
    config wifi-iface
    option device   radio0
    option network  wifi
    option mode     ap
    option ssid     yourapname
    option encryption none
    

Obviously, you need to set some encryption. I’ll let you figure this out :)

  • /etc/config/dhcp.3g

    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'
    list server '208.67.220.220'
    list server '208.67.222.222'
    
    config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv6 'server'
    option ra 'server'
    
    config dhcp 'wan'
    option interface 'wan'
    option ignore '1'
    
    config odhcpd 'odhcpd'
    option maindhcp '0'
    option leasefile '/tmp/hosts/odhcpd'
    option leasetrigger '/usr/sbin/odhcpd-update'
    
    config 'dhcp' 'wifi'
    option 'interface'  'wifi'
    option 'start'      '100'
    option 'limit'      '150'
    option 'leasetime'  '12h'
    
  • /etc/config/firewall.3g

    config defaults
    option syn_flood  1
    option input		ACCEPT
    option output		ACCEPT
    option forward		REJECT
    option disable_ipv6  1
    
    config zone
    option name		wan
    list   network		'wan'
    list   network		'wan6'
    option input		REJECT
    option output		ACCEPT
    option forward		REJECT
    option masq		1
    option mtu_fix		1
    
    config forwarding
    option src		lan
    option dest		wan
    
    config rule
    option name		Allow-DHCP-Renew
    option src		wan
    option proto		udp
    option dest_port	68
    option target		ACCEPT
    option family		ipv4
    
    config rule
    option name		Allow-Ping
    option src		wan
    option proto		icmp
    option icmp_type	echo-request
    option family		ipv4
    option target		ACCEPT
    
    config rule
    option name		Allow-DHCPv6
    option src		wan
    option proto		udp
    option src_ip		fe80::/10
    option src_port		547
    option dest_ip		fe80::/10
    option dest_port	546
    option family		ipv6
    option target		ACCEPT
    
    config rule
    option name		Allow-ICMPv6-Input
    option src		wan
    option proto	icmp
    list icmp_type		echo-request
    list icmp_type		echo-reply
    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
    list icmp_type		router-advertisement
    list icmp_type		neighbour-advertisement
    option limit		1000/sec
    option family		ipv6
    option target		ACCEPT
    
    config rule
    option name		Allow-ICMPv6-Forward
    option src		wan
    option dest		*
    option proto		icmp
    list icmp_type		echo-request
    list icmp_type		echo-reply
    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 zone
    option name       wifi
    list   network    'wifi'
    option input      ACCEPT
    option output     ACCEPT
    option forward    REJECT
    
    config 'forwarding'
    option 'src'        'wifi'
    option 'dest'       'wan'
    
    config 'forwarding'
    option 'src'        'lan'
    option 'dest'       'wifi'
    
    config 'forwarding'
    option 'src'        'wifi'
    option 'dest'       'lan'
    
    config zone
    option name 'lan'
    option network 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option masq '1'
    

I have the following script to set all the files correctly, in /sbin/sw_3g_mode:

#!/bin/sh
/bin/cp -f /etc/config/dhcp.3g /etc/config/dhcp
/bin/cp -f /etc/config/firewall.3g /etc/config/firewall
/bin/cp -f /etc/config/network.3g /etc/config/network
/bin/cp -f /etc/config/wireless.3g /etc/config/wireless
/bin/sync
/sbin/ifup wifi
/sbin/wifi
/etc/init.d/firewall restart
/etc/init.d/dnsmasq restart

Enjoy it! :)

Reference links:

tweet Share