Before we start, make sure the fail safe mode is working: with the device powered off, change the switch to AP mode. Press and hold the WPS button. Turn the power on. Wait for 2 seconds until the WPS light starts to flash slowly. Immediately switch the mode to 3G while still holding the WPS button.
Now the device has IP of 192.168.1.1 and you can connect to it via a LAN cable with your computer configured with IP 192.168.1.x
With fail safe mode working, reboot the device normally. Go to /etc/config and make the following changes.
Define a new wifi network. Make copies of the file network and name them network.ap and network.router. Edit network.router and remove the lan section and add the following:
config interface 'wan' option ifname 'eth0' option proto 'dhcp' config interface 'wifi' option proto 'static' option ipaddr '192.168.2.1' option netmask '255.255.255.0'
Change the wireless settings. Make copies of the file wireless and name them wireless.ap and wireless.router. Edit wireless.router and change the wifi-iface section to suit your need. Here I use WPA2
config wifi-iface option device radio0 option network wifi option mode ap option ssid put_your_wireless_ssid_here #option encryption none option encryption psk2 option key put_your_wireless_password_here
In router mode, the device withh assign IP to others via wifi. So we need to create a new DHCP pool. Make copies of the file dhcp and name them as dhcp.ap and dhcp.router. Add the following section to dhcp.router:
config dhcp wifi option interface wifi option start 100 option limit 150 option leasetime 12h
Finally, we will modify the firewall rules to allow traffic from wifi to WAN. Make copies of the file firewall and name them as firewall.ap and firewall.router. Edit firewall.router and add the following sections:
config zone option name wifi option input ACCEPT option output ACCEPT option forward REJECT config forwarding option src wifi option dest wan
Now we are all set. To switch between AP and router modes, just copy the above modified files to the original file and restart wifi, firewall and dhcp services:
ifup wifi wifi /etc/init.d/firewall restart /etc/init.d/dnsmasq restart
However, we can do better than that. We can map the mode switch on TL-MR3020 to auto execute the commands for us.
Create a file name /sbin/sw_ap_mode
#!/bin/sh /bin/cp -f /etc/config/dhcp.ap /etc/config/dhcp /bin/cp -f /etc/config/firewall.ap /etc/config/firewall /bin/cp -f /etc/config/network.ap /etc/config/network /bin/cp -f /etc/config/wireless.ap /etc/config/wireless /bin/sync /sbin/ifup wifi /sbin/wifi /etc/init.d/firewall restart /etc/init.d/dnsmasq restart
Create a file name /sbin/sw_router_mode
#!/bin/sh /bin/cp -f /etc/config/dhcp.router /etc/config/dhcp /bin/cp -f /etc/config/firewall.router /etc/config/firewall /bin/cp -f /etc/config/network.router /etc/config/network /bin/cp -f /etc/config/wireless.router /etc/config/wireless /bin/sync /sbin/ifup wan /sbin/ifup wifi /sbin/wifi /etc/init.d/firewall restart /etc/init.d/dnsmasq restart
Following the instructions on http://wiki.openwrt.org/doc/howto/hardware.button to edit /etc/hotplug.d/button. Then create /etc/hotplug.d/button/00-button. Execute the following commands:
uci add system button uci set system.@button[-1].button=BTN_0 uci set system.@button[-1].action=released uci set system.@button[-1].handler="/sbin/sw_router_mode" uci commit system uci add system button uci set system.@button[-1].button=BTN_0 uci set system.@button[-1].action=pressed uci set system.@button[-1].handler="/sbin/sw_ap_mode" uci commit system