New Feature: Configurable Modem Chat Script
diff --git a/release/src/router/httpd/tomato.c b/release/src/router/httpd/tomato.c
index cc4c5d4..987488c 100644
--- a/release/src/router/httpd/tomato.c
+++ b/release/src/router/httpd/tomato.c
@@ -592,8 +592,7 @@ static const nvset_t nvset_list[] = {
// 3G MODEM
{ "modem_pin", V_LENGTH(0,6) },
{ "modem_dev", V_LENGTH(0,8) },
- { "modem_init", V_LENGTH(0,25) },
- { "modem_apn", V_LENGTH(0,25) },
+ { "modem_chat_script", V_TEXT(0, 2048) },
#endif
// LAN networks
diff --git a/release/src/router/nvram/defaults.c b/release/src/router/nvram/defaults.c
index 302187a..70c5b4a 100644
--- a/release/src/router/nvram/defaults.c
+++ b/release/src/router/nvram/defaults.c
@@ -140,9 +140,8 @@ const defaults_t defaults[] = {
// 3G Modem
{ "modem_pin", "" },
{ "modem_dev", "ttyUSB0" },
- { "modem_init", "*99#" },
- { "modem_apn", "internet" },
-
+ { "modem_chat_script", "ABORT \"NO CARRIER\"\nABORT \"NO DIALTONE\"\nABORT \"NO ERROR\"\nABORT \"NO ANSWER\"\nABORT \"BUSY\"\nREPORT CONNECT\n\"\" \"AT\"\nOK \"AT&FE0V1X1&D2&C1S0=0\"\nOK \"AT\"\nOK \"ATS0=0\"\nOK \"AT\"\nOK \"AT&FE0V1X1&D2&C1S0=0\"\nOK \"AT\"\nOK 'AT+CGDCONT=1,\"IP\",\"internet\"'\nOK \"ATDT*99#\"\nCONNECT \\c\n" },
+
// PPPoE parameters
{ "pppoe_ifname", "" }, // PPPoE enslaved interface
{ "ppp_username", "" }, // PPP username
diff --git a/release/src/router/rc/wan.c b/release/src/router/rc/wan.c
index 52a6395..acba794 100644
--- a/release/src/router/rc/wan.c
+++ b/release/src/router/rc/wan.c
@@ -210,39 +210,9 @@ static int config_pppd(int wan_proto, int num)
perror(ppp3g_chatfile);
return -1;
}
- fprintf(cfp,
- "ABORT \"NO CARRIER\"\n"
- "ABORT \"NO DIALTONE\"\n"
- "ABORT \"NO ERROR\"\n"
- "ABORT \"NO ANSWER\"\n"
- "ABORT \"BUSY\"\n"
- "REPORT CONNECT\n"
- "\"\" \"AT\"\n");
-/* moved to switch3g script
- if (strlen(nvram_get("modem_pin")) >0 ) {
- fprintf(cfp,
- "TIMEOUT 60\n"
- "OK \"AT+CPIN=%s\"\n"
- "TIMEOUT 10\n",
- nvram_get("modem_pin"));
- }
-*/
- fprintf(cfp,
- "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
- "OK \"AT\"\n"
- "OK \"ATS0=0\"\n"
- "OK \"AT\"\n"
- "OK \"AT&FE0V1X1&D2&C1S0=0\"\n"
- "OK \"AT\"\n"
- "OK 'AT+CGDCONT=1,\"IP\",\"%s\"'\n"
- "OK \"ATDT%s\"\n"
- "CONNECT \c\n",
- nvram_safe_get("modem_apn"),
- nvram_safe_get("modem_init")
- );
+ fprintf(cfp, "%s", nvram_safe_get("modem_chat_script"));
fclose(cfp);
-
if (nvram_match("usb_3g", "1")) {
// clear old gateway
if (strlen(nvram_get("wan_gateway")) >0 ) {
diff --git a/release/src/router/www/basic-network.asp b/release/src/router/www/basic-network.asp
index a6d3991..e09ffc7 100644
--- a/release/src/router/www/basic-network.asp
+++ b/release/src/router/www/basic-network.asp
@@ -45,7 +45,7 @@
<script type='text/javascript' src='wireless.jsx?_http_id=<% nv(http_id); %>'></script>
<script type='text/javascript' src='interfaces.js'></script>
<script type='text/javascript'>
-// <% nvram("dhcp_lease,dhcp_num,dhcp_start,dhcpd_startip,dhcpd_endip,l2tp_server_ip,lan_gateway,lan_ipaddr,lan_netmask,lan_proto,lan_state,lan_desc,lan_invert,mtu_enable,ppp_demand,ppp_idletime,ppp_passwd,ppp_redialperiod,ppp_service,ppp_username,ppp_custom,pptp_server_ip,pptp_dhcp,wl_security_mode,wan_dns,dnscrypt_proxy,wan_gateway,wan_ipaddr,wan_mtu,wan_netmask,wan_proto,wan_wins,wl_wds_enable,wl_channel,wl_closed,wl_crypto,wl_key,wl_key1,wl_key2,wl_key3,wl_key4,wl_lazywds,wl_mode,wl_net_mode,wl_passphrase,wl_radio,wl_radius_ipaddr,wl_radius_port,wl_ssid,wl_wds,wl_wep_bit,wl_wpa_gtk_rekey,wl_wpa_psk,wl_radius_key,wl_auth,wl_hwaddr,wan_islan,t_features,wl_nbw_cap,wl_nctrlsb,wl_nband,wl_phytype,lan_ifname,lan_stp,lan1_ifname,lan1_ipaddr,lan1_netmask,lan1_proto,lan1_stp,dhcp1_start,dhcp1_num,dhcp1_lease,dhcpd1_startip,dhcpd1_endip,lan2_ifname,lan2_ipaddr,lan2_netmask,lan2_proto,lan2_stp,dhcp2_start,dhcp2_num,dhcp2_lease,dhcpd2_startip,dhcpd2_endip,lan3_ifname,lan3_ipaddr,lan3_netmask,lan3_proto,lan3_stp,dhcp3_start,dhcp3_num,dhcp3_lease,dhcpd3_startip,dhcpd3_endip,ppp_mlppp,modem_ipaddr,modem_pin,modem_dev,modem_init,modem_apn,cstats_enable"); %>
+// <% nvram("dhcp_lease,dhcp_num,dhcp_start,dhcpd_startip,dhcpd_endip,l2tp_server_ip,lan_gateway,lan_ipaddr,lan_netmask,lan_proto,lan_state,lan_desc,lan_invert,mtu_enable,ppp_demand,ppp_idletime,ppp_passwd,ppp_redialperiod,ppp_service,ppp_username,ppp_custom,pptp_server_ip,pptp_dhcp,wl_security_mode,wan_dns,dnscrypt_proxy,wan_gateway,wan_ipaddr,wan_mtu,wan_netmask,wan_proto,wan_wins,wl_wds_enable,wl_channel,wl_closed,wl_crypto,wl_key,wl_key1,wl_key2,wl_key3,wl_key4,wl_lazywds,wl_mode,wl_net_mode,wl_passphrase,wl_radio,wl_radius_ipaddr,wl_radius_port,wl_ssid,wl_wds,wl_wep_bit,wl_wpa_gtk_rekey,wl_wpa_psk,wl_radius_key,wl_auth,wl_hwaddr,wan_islan,t_features,wl_nbw_cap,wl_nctrlsb,wl_nband,wl_phytype,lan_ifname,lan_stp,lan1_ifname,lan1_ipaddr,lan1_netmask,lan1_proto,lan1_stp,dhcp1_start,dhcp1_num,dhcp1_lease,dhcpd1_startip,dhcpd1_endip,lan2_ifname,lan2_ipaddr,lan2_netmask,lan2_proto,lan2_stp,dhcp2_start,dhcp2_num,dhcp2_lease,dhcpd2_startip,dhcpd2_endip,lan3_ifname,lan3_ipaddr,lan3_netmask,lan3_proto,lan3_stp,dhcp3_start,dhcp3_num,dhcp3_lease,dhcpd3_startip,dhcpd3_endip,ppp_mlppp,modem_ipaddr,modem_pin,modem_dev,modem_chat_script,cstats_enable"); %>
var lg = new TomatoGrid();
lg.setup = function() {
@@ -728,8 +728,7 @@ function verifyFields(focused, quiet)
_wan_wins: 1,
_modem_pin: 1,
_modem_dev: 1,
- _modem_init: 1,
- _modem_apn: 1
+ _modem_chat_script: 1,
};
var wl_vis = [];
@@ -809,8 +808,7 @@ function verifyFields(focused, quiet)
vis._modem_ipaddr = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
case 'dhcp':
vis._l2tp_server_ip = 0;
@@ -829,8 +827,7 @@ function verifyFields(focused, quiet)
vis._lan_gateway = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
case 'pppoe':
vis._l2tp_server_ip = 0;
@@ -844,8 +841,7 @@ function verifyFields(focused, quiet)
vis._lan_gateway = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
case 'ppp3g':
vis._ppp_service = 0;
@@ -873,8 +869,7 @@ function verifyFields(focused, quiet)
vis._lan_gateway = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
case 'pptp':
vis._l2tp_server_ip = 0;
@@ -886,8 +881,7 @@ function verifyFields(focused, quiet)
vis._lan_gateway = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
case 'l2tp':
vis._pptp_server_ip = 0;
@@ -899,8 +893,7 @@ function verifyFields(focused, quiet)
vis._lan_gateway = 0;
vis._modem_pin = 0;
vis._modem_dev = 0;
- vis._modem_init = 0;
- vis._modem_apn = 0;
+ vis._modem_chat_script = 0;
break;
}
@@ -1550,8 +1543,7 @@ createFieldTable('', [
value: nvram.wan_proto },
{ title: 'Modem device', name: 'modem_dev', type: 'select', options: [['ttyUSB0', '/dev/ttyUSB0'],['ttyUSB1', '/dev/ttyUSB1'],['ttyUSB2', '/dev/ttyUSB2'],['ttyUSB3', '/dev/ttyUSB3'],['ttyACM0', '/dev/ttyACM0']], value: nvram.modem_dev },
{ title: 'PIN Code', name: 'modem_pin', type: 'text', maxlen: 6, size: 8, value: nvram.modem_pin },
- { title: 'Modem init string', name: 'modem_init', type: 'text', maxlen: 25, size: 32, value: nvram.modem_init },
- { title: 'APN', name: 'modem_apn', type: 'text', maxlen: 25, size: 32, value: nvram.modem_apn },
+ { title: 'Modem chat script', name: 'modem_chat_script', type: 'textarea', value: nvram.modem_chat_script },
{ title: 'Username', name: 'ppp_username', type: 'text', maxlen: 60, size: 64, value: nvram.ppp_username },
{ title: 'Password', name: 'ppp_passwd', type: 'password', maxlen: 60, size: 64, peekaboo: 1, value: nvram.ppp_passwd },
{ title: 'Service Name', name: 'ppp_service', type: 'text', maxlen: 50, size: 64, value: nvram.ppp_service },
@@ -1561,7 +1553,7 @@ createFieldTable('', [
{ title: 'Subnet Mask', name: 'wan_netmask', type: 'text', maxlen: 15, size: 17, value: nvram.wan_netmask },
{ title: 'Gateway', name: 'wan_gateway', type: 'text', maxlen: 15, size: 17, value: nvram.wan_gateway },
{ title: 'PPTP Gateway', name: 'pptp_server_ip', type: 'text', maxlen: 128, size: 64, value: nvram.pptp_server_ip },
- { title: 'Options', name: 'ppp_custom', type: 'text', maxlen: 256, size: 64, value: nvram.ppp_custom },
+ { title: 'Options', name: 'ppp_custom', type: 'textarea', value: nvram.ppp_custom },
{ title: 'Connect Mode', name: 'ppp_demand', type: 'select', options: [['1', 'Connect On Demand'],['0', 'Keep Alive']],
value: nvram.ppp_demand },
{ title: 'Max Idle Time', indent: 2, name: 'ppp_idletime', type: 'text', maxlen: 5, size: 7, suffix: ' <i>(minutes)</i>',