diff options
Diffstat (limited to 'usr')
29 files changed, 1733 insertions, 295 deletions
diff --git a/usr/local/sbin/mpd.script b/usr/local/sbin/mpd.script index aa2501e..f69ac4b 100644 --- a/usr/local/sbin/mpd.script +++ b/usr/local/sbin/mpd.script @@ -77,7 +77,7 @@ DialPeer1: set $ModTelephone $Telephone call ModemIdent if $ModemDescription != "" goto DialPeer2 - log "The modem is not responding." + log "No match found in the ModemIdent function in the chat script." failure DialPeer2: @@ -352,16 +352,13 @@ ModemIdent: print "ATI\r\n" match "ADTRAN EXPRESS XR" ModemIdentAdtranXRT match "Model: Ovation MC950D Card" ModemIdentMC950D - match "C885" ModemIdentC885 match "ERR" ModemIdentGeneric match "OK\r\n" ModemIdentGeneric wait 3 - print "ATI8\r\n" - match "BitSURFR PRO\r" ModemIdentBitsurfr - match "BitSURFR PRO EZ" ModemIdentBitsurfrEZ - match "3C882" ModemIdentImpactIQ - match "ERR" - match "OK\r\n" + print "ATI1\r\n" + match "NTK omni.net" ModemIdentNTK + match "ERR" ModemIdentGeneric + match "OK\r\n" ModemIdentGeneric wait 3 print "ATI3\r\n" match "Courier" ModemIdentUsr @@ -381,12 +378,19 @@ ModemIdent: match "ERR" match "OK\r\n" wait 3 - print "ATI1\r\n" - match "NTK omni.net" ModemIdentNTK - match "ERR" ModemIdentGeneric + print "ATI5\r\n" + match "C885" ModemIdentC885 + match "ERR" match "OK\r\n" ModemIdentGeneric wait 3 - log "The modem is not responding." + print "ATI8\r\n" + match "BitSURFR PRO\r" ModemIdentBitsurfr + match "BitSURFR PRO EZ" ModemIdentBitsurfrEZ + match "3C882" ModemIdentImpactIQ + match "ERR" + match "OK\r\n" + wait 3 + log "The modem is not responding to any ATI[1,3-5,8] commands." failure ModemIdentGeneric: @@ -1432,14 +1436,14 @@ ModemCmd0: wait $modemCmdTimeout set $modemCmdResult "TIMEOUT" ModemCmdTimeout: - set $ErrorMsg "The modem is not responding." + set $ErrorMsg "The modem is not responding to \"AT$modemCmd\" at ModemCmd: label." return ModemCmdOk: set $modemCmdResult "OK" return ModemCmdErr: set $modemCmdResult "ERROR" - set $ErrorMsg "The modem did not accept the command AT$modemCmd." + set $ErrorMsg "The modem responded with \"ERROR\" to the command \"AT$modemCmd\" at ModemCmd: label." return ## @@ -1518,7 +1522,7 @@ ReadLineDone: GetOK: match "OK\r\n" GotOK wait 3 - log "The modem is not responding." + log "The modem did not respond with \"OK\"." failure GotOK: return diff --git a/usr/local/www/diag_logs.php b/usr/local/www/diag_logs.php index 58470f9..85b61df 100755 --- a/usr/local/www/diag_logs.php +++ b/usr/local/www/diag_logs.php @@ -79,6 +79,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_auth.php b/usr/local/www/diag_logs_auth.php index 25e92d6..700b6dc 100755 --- a/usr/local/www/diag_logs_auth.php +++ b/usr/local/www/diag_logs_auth.php @@ -67,6 +67,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", true, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_dhcp.php b/usr/local/www/diag_logs_dhcp.php index 0b94962..b95b969 100755 --- a/usr/local/www/diag_logs_dhcp.php +++ b/usr/local/www/diag_logs_dhcp.php @@ -69,6 +69,7 @@ include("head.inc"); $tab_array[] = array("DHCP", true, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_filter.php b/usr/local/www/diag_logs_filter.php index 819a4ce..9d8d9cd 100755 --- a/usr/local/www/diag_logs_filter.php +++ b/usr/local/www/diag_logs_filter.php @@ -103,6 +103,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_filter_dynamic.php b/usr/local/www/diag_logs_filter_dynamic.php index a8ac4b5..a07b52b 100755 --- a/usr/local/www/diag_logs_filter_dynamic.php +++ b/usr/local/www/diag_logs_filter_dynamic.php @@ -102,6 +102,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_filter_summary.php b/usr/local/www/diag_logs_filter_summary.php index 485e26b..4904127 100644 --- a/usr/local/www/diag_logs_filter_summary.php +++ b/usr/local/www/diag_logs_filter_summary.php @@ -186,6 +186,7 @@ include("head.inc"); ?> $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_ipsec.php b/usr/local/www/diag_logs_ipsec.php index 33052b5..039193b 100755 --- a/usr/local/www/diag_logs_ipsec.php +++ b/usr/local/www/diag_logs_ipsec.php @@ -89,6 +89,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", true, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_ntpd.php b/usr/local/www/diag_logs_ntpd.php index 033b6fc..d168f70 100644 --- a/usr/local/www/diag_logs_ntpd.php +++ b/usr/local/www/diag_logs_ntpd.php @@ -67,6 +67,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_openvpn.php b/usr/local/www/diag_logs_openvpn.php index 73e6ed5..aa50856 100644 --- a/usr/local/www/diag_logs_openvpn.php +++ b/usr/local/www/diag_logs_openvpn.php @@ -71,6 +71,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", true, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_ppp.php b/usr/local/www/diag_logs_ppp.php new file mode 100755 index 0000000..470d33d --- /dev/null +++ b/usr/local/www/diag_logs_ppp.php @@ -0,0 +1,124 @@ +<?php +/* $Id$ */ +/* + diag_logs.php + Copyright (C) 2004-2009 Scott Ullrich + All rights reserved. + + originally part of m0n0wall (http://m0n0.ch/wall) + Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig /usr/bin/awk + pfSense_MODULE: +*/ + +##|+PRIV +##|*IDENT=page-status-systemlogs-ppp +##|*NAME=Status: System logs: IPsec VPN page +##|*DESCR=Allow access to the 'Status: System logs: IPsec VPN' page. +##|*MATCH=diag_logs_ppp.php* +##|-PRIV + +require("guiconfig.inc"); + +$ppp_logfile = "{$g['varlog_path']}/ppp.log"; + +$nentries = $config['syslog']['nentries']; +if (!$nentries) + $nentries = 50; + +if ($_POST['clear']) + clear_log_file($ppp_logfile); + +$ppp_logarr = return_clog($ppp_logfile, $nentries); + +$pgtitle = array("Status","System logs","PPP"); +include("head.inc"); + +?> +<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> +<?php include("fbegin.inc"); ?> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td> +<?php + $tab_array = array(); + $tab_array[] = array("System", false, "diag_logs.php"); + $tab_array[] = array("Firewall", false, "diag_logs_filter.php"); + $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); + $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); + $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", true, "diag_logs_ppp.php"); + $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); + $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); + $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); + $tab_array[] = array("OpenNTPD", false, "diag_logs_ntpd.php"); + $tab_array[] = array("Settings", false, "diag_logs_settings.php"); + display_top_tabs($tab_array); +?> + </td> + </tr> + <tr> + <td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellspacing="0" cellpadding="0"> + <tr> + <td colspan="2" class="listtopic">Last <?=$nentries;?> PPP log entries</td> + </tr> + <?php + foreach($ppp_logarr as $logent){ + if(isset($match)) { + $logent = preg_replace($search, $replace, $logent); + } else { + $searchs = "/(racoon: )([A-Z:].*?)([0-9].+\.[0-9].+.[0-9].+.[0-9].+\[[0-9].+\])(.*)/i"; + $replaces = "$1<strong><font color=red>[Unknown Gateway/Dynamic]</font></strong>: $2$3$4"; + $logent = preg_replace($searchs, $replaces, $logent); + } + $logent = preg_split("/\s+/", $logent, 6); + echo "<tr valign=\"top\">\n"; + $entry_date_time = htmlspecialchars(join(" ", array_slice($logent, 0, 3))); + echo "<td class=\"listlr\" nowrap>" . $entry_date_time . "</td>\n"; + echo "<td class=\"listr\">" . $logent[4] . " " . $logent[5] . "</td>\n"; + echo "</tr>\n"; + } + ?> + <tr> + <td> + <br> + <form action="diag_logs_ppp.php" method="post"> + <input name="clear" type="submit" class="formbtn" value="Clear log"> + </form> + </td> + </tr> + </table> + </div> + </td> + </tr> +</table> +<?php include("fend.inc"); ?> +</body> +</html> diff --git a/usr/local/www/diag_logs_relayd.php b/usr/local/www/diag_logs_relayd.php index a7a52a0..f267c74 100755 --- a/usr/local/www/diag_logs_relayd.php +++ b/usr/local/www/diag_logs_relayd.php @@ -67,6 +67,7 @@ include("head.inc"); $tab_array[] = array("Firewall", false, "diag_logs_filter.php"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", true, "diag_logs_relayd.php"); diff --git a/usr/local/www/diag_logs_settings.php b/usr/local/www/diag_logs_settings.php index 93e1169..f2b7861 100755 --- a/usr/local/www/diag_logs_settings.php +++ b/usr/local/www/diag_logs_settings.php @@ -171,6 +171,7 @@ function enable_change(enable_over) { $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", false, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/diag_logs_vpn.php b/usr/local/www/diag_logs_vpn.php index e0faf23..83d0ecd 100755 --- a/usr/local/www/diag_logs_vpn.php +++ b/usr/local/www/diag_logs_vpn.php @@ -103,6 +103,7 @@ include("head.inc"); $tab_array[] = array("DHCP", false, "diag_logs_dhcp.php"); $tab_array[] = array("Portal Auth", false, "diag_logs_auth.php"); $tab_array[] = array("IPsec", false, "diag_logs_ipsec.php"); + $tab_array[] = array("PPP", false, "diag_logs_ppp.php"); $tab_array[] = array("VPN", true, "diag_logs_vpn.php"); $tab_array[] = array("Load Balancer", false, "diag_logs_relayd.php"); $tab_array[] = array("OpenVPN", false, "diag_logs_openvpn.php"); diff --git a/usr/local/www/help.php b/usr/local/www/help.php index 8a7514d..e5ac529 100644 --- a/usr/local/www/help.php +++ b/usr/local/www/help.php @@ -58,6 +58,7 @@ $helppages = array( 'diag_logs_filter_dynamic.php' => 'http://doc.pfsense.org/index.php/Firewall_Logs', 'diag_logs_filter_summary.php' => 'http://doc.pfsense.org/index.php/Firewall_Logs', 'diag_logs_ntpd.php' => 'http://doc.pfsense.org/index.php/NTP_Logs', + 'diag_logs_ppp.php' => 'http://doc.pfsense.org/index.php/PPP_Logs', 'diag_logs_relayd.php' => 'http://doc.pfsense.org/index.php/Load_Balancer_Logs', 'diag_logs_settings.php' => 'http://doc.pfsense.org/index.php/Log_Settings', 'diag_logs_vpn.php' => 'http://doc.pfsense.org/index.php/PPTP_VPN_Logs', diff --git a/usr/local/www/interfaces.php b/usr/local/www/interfaces.php index 5ec2e36..1cda057 100755 --- a/usr/local/www/interfaces.php +++ b/usr/local/www/interfaces.php @@ -59,18 +59,18 @@ if ($_REQUEST['if']) { $if = "wan"; } -define("CRON_PPPOE_CMD_FILE", "/conf/pppoe{$if}restart"); +define("CRON_PPPOE_CMD_FILE", "{$g['varetc_path']}/pppoe_restart_"); define("CRON_MONTHLY_PATTERN", "0 0 1 * *"); define("CRON_WEEKLY_PATTERN", "0 0 * * 0"); define("CRON_DAILY_PATTERN", "0 0 * * *"); define("CRON_HOURLY_PATTERN", "0 * * * *"); -function getMPDCRONSettings() { +function getMPDCRONSettings($ptpid_) { global $config; if (is_array($config['cron']['item'])) { for ($i = 0; $i < count($config['cron']['item']); $i++) { $item = $config['cron']['item'][$i]; - if (strpos($item['command'], CRON_PPPOE_CMD_FILE) !== false) { + if (strpos($item['command'], CRON_PPPOE_CMD_FILE.$ptpid_) !== false) { return array("ID" => $i, "ITEM" => $item); } } @@ -78,15 +78,10 @@ function getMPDCRONSettings() { return NULL; } -function getMPDResetTimeFromConfig() { - $itemhash = getMPDCRONSettings(); - $cronitem = $itemhash['ITEM']; - if (isset($cronitem)) { - return "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}"; - } else { - return NULL; - } -} +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + +$a_ppps = &$config['ppps']['ppp']; function remove_bad_chars($string) { return preg_replace('/[^a-z|_|0-9]/i','',$string); @@ -99,56 +94,75 @@ $a_gateways = &$config['gateways']['gateway_item']; $wancfg = &$config['interfaces'][$if]; -$pconfig['pppoe_username'] = $wancfg['pppoe_username']; -$pconfig['pppoe_password'] = $wancfg['pppoe_password']; -$pconfig['provider'] = $wancfg['provider']; -$pconfig['pppoe_dialondemand'] = isset($wancfg['ondemand']); -$pconfig['pppoe_idletimeout'] = $wancfg['timeout']; - -/* ================================================ */ -/* = force a connection reset at a specific time? = */ -/* ================================================ */ - -if (isset($wancfg['pppoe']['pppoe-reset-type'])) { - $resetTime = getMPDResetTimeFromConfig(); - $pconfig['pppoe_preset'] = true; - if ($wancfg['pppoe']['pppoe-reset-type'] == "custom") { - $resetTime_a = split(" ", $resetTime); - $pconfig['pppoe_pr_custom'] = true; - $pconfig['pppoe_resetminute'] = $resetTime_a[0]; - $pconfig['pppoe_resethour'] = $resetTime_a[1]; - /* just initialize $pconfig['pppoe_resetdate'] if the - * coresponding item contains appropriate numeric values. - */ - if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") - $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y"); - } else if ($wancfg['pppoe']['pppoe-reset-type'] == "preset") { - $pconfig['pppoe_pr_preset'] = true; - switch ($resetTime) { - case CRON_MONTHLY_PATTERN: - $pconfig['pppoe_monthly'] = true; - break; - case CRON_WEEKLY_PATTERN: - $pconfig['pppoe_weekly'] = true; - break; - case CRON_DAILY_PATTERN: - $pconfig['pppoe_daily'] = true; - break; - case CRON_HOURLY_PATTERN: - $pconfig['pppoe_hourly'] = true; - break; - } +if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { + foreach ($a_ppps as $pppid => $ppp) { + if ($wancfg['ptpid'] == $ppp['ptpid']) + break; } } -$pconfig['pptp_username'] = $wancfg['pptp_username']; -$pconfig['pptp_password'] = $wancfg['pptp_password']; -$pconfig['pptp_local'] = $wancfg['local']; -$pconfig['pptp_subnet'] = $wancfg['subnet']; -$pconfig['pptp_remote'] = $wancfg['remote']; -$pconfig['pptp_dialondemand'] = isset($wancfg['ondemand']); -$pconfig['pptp_idletimeout'] = $wancfg['timeout']; +if ($wancfg['ptpid'] == $a_ppps[$pppid]['ptpid']) { + $pconfig['pppid'] = $pppid; + if ($a_ppps[$pppid]['type'] == "pppoe"){ + $pconfig['pppoe_username'] = $a_ppps[$pppid]['username']; + $pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']); + $pconfig['provider'] = $a_ppps[$pppid]['provider']; + $pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']); + $pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout']; + /* ================================================ */ + /* = force a connection reset at a specific time? = */ + /* ================================================ */ + + if (isset($a_ppps[$pppid]['pppoe-reset-type'])) { + $pconfig['pppoe-reset-type'] = $a_ppps[$pppid]['pppoe-reset-type']; + $itemhash = getMPDCRONSettings($a_ppps[$pppid]['ptpid']); + $cronitem = $itemhash['ITEM']; + if (isset($cronitem)) { + $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}"; + } else { + $resetTime = NULL; + } + log_error("ResetTime:".$resetTime); + if ($a_ppps[$pppid]['pppoe-reset-type'] == "custom") { + $resetTime_a = split(" ", $resetTime); + $pconfig['pppoe_pr_custom'] = true; + $pconfig['pppoe_resetminute'] = $resetTime_a[0]; + $pconfig['pppoe_resethour'] = $resetTime_a[1]; + /* just initialize $pconfig['pppoe_resetdate'] if the + * coresponding item contains appropriate numeric values. + */ + if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") + $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y"); + } else if ($a_ppps[$pppid]['pppoe-reset-type'] == "preset") { + $pconfig['pppoe_pr_preset'] = true; + switch ($resetTime) { + case CRON_MONTHLY_PATTERN: + $pconfig['pppoe_monthly'] = true; + break; + case CRON_WEEKLY_PATTERN: + $pconfig['pppoe_weekly'] = true; + break; + case CRON_DAILY_PATTERN: + $pconfig['pppoe_daily'] = true; + break; + case CRON_HOURLY_PATTERN: + $pconfig['pppoe_hourly'] = true; + break; + } + } + }// End force pppoe reset at specific time + }// End if type == pppoe + if ($a_ppps[$pppid]['type'] == "pptp"){ + $pconfig['pptp_username'] = $a_ppps[$pppid]['username']; + $pconfig['pptp_password'] = base64_decode($a_ppps[$pppid]['password']); + $pconfig['pptp_local'] = $a_ppps[$pppid]['localip']; + $pconfig['pptp_subnet'] = $a_ppps[$pppid]['subnet']; + $pconfig['pptp_remote'] = $a_ppps[$pppid]['gateway']; + $pconfig['pptp_dialondemand'] = isset($a_ppps[$pppid]['ondemand']); + $pconfig['pptp_idletimeout'] = $a_ppps[$pppid]['timeout']; + } +} $pconfig['dhcphostname'] = $wancfg['dhcphostname']; $pconfig['alias-address'] = $wancfg['alias-address']; $pconfig['alias-subnet'] = $wancfg['alias-subnet']; @@ -180,13 +194,9 @@ switch($wancfg['ipaddr']) { $pconfig['ipaddr'] = ""; break; case "pppoe": - $pconfig['type'] = "pppoe"; - break; case "pptp": - $pconfig['type'] = "pptp"; - break; case "ppp": - $pconfig['type'] = "ppp"; + $pconfig['type'] = $wancfg['ipaddr']; break; default: if(is_ipaddr($wancfg['ipaddr'])) { @@ -327,7 +337,7 @@ if ($_POST) { * data validation procedure below, may trigger a false error * message. */ - if (empty($_POST['pppoe_preset'])) { + if (empty($_POST['pppoe-reset-type'])) { unset($_POST['pppoe_pr_type']); unset($_POST['pppoe_resethour']); unset($_POST['pppoe_resetminute']); @@ -467,6 +477,7 @@ if ($_POST) { } } if (!$input_errors) { + $ppp = array(); if ($wancfg['ipaddr'] != "ppp") unset($wancfg['ipaddr']); unset($wancfg['subnet']); @@ -509,7 +520,13 @@ if ($_POST) { unset($gateway_item); } } - + + // Here the else condition code assumes only that strings of form "opt#" will be passed. + if ($if == "wan") + $if_num = "0"; + else + $if_num = substr($if, 3); + switch($_POST['type']) { case "static": $wancfg['ipaddr'] = $_POST['ipaddr']; @@ -537,25 +554,57 @@ if ($_POST) { } break; case "pppoe": - $wancfg['ipaddr'] = "pppoe"; - $wancfg['pppoe_username'] = $_POST['pppoe_username']; - $wancfg['pppoe_password'] = $_POST['pppoe_password']; - $wancfg['provider'] = $_POST['provider']; - $wancfg['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false; - $wancfg['timeout'] = $_POST['pppoe_idletimeout']; + $ppp['ptpid'] = $_POST['ptpid']; + $ppp['type'] = $_POST['type']; + if (isset($_POST['ppp_port'])) + $ppp['ports'] = $_POST['ppp_port']; + else + $ppp['ports'] = $wancfg['if']; + $ppp['username'] = $_POST['pppoe_username']; + $ppp['password'] = base64_encode($_POST['pppoe_password']); + if (!empty($_POST['provider'])) + $ppp['provider'] = $_POST['provider']; + else + unset($ppp['provider']); + $ppp['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false; + if (!empty($_POST['idletimeout'])) + $ppp['idletimeout'] = $_POST['pppoe_idletimeout']; + else + unset($ppp['idletimeout']); + + if (!empty($_POST['pppoe-reset-type'])) + $ppp['pppoe-reset-type'] = $_POST['pppoe-reset-type']; + else + unset($ppp['pppoe-reset-type']); + $wancfg['if'] = $_POST['type'] . $if_num; + $wancfg['ptpid'] = $_POST['ptpid']; + $wancfg['ipaddr'] = $_POST['type']; if($gateway_item) { $a_gateways[] = $gateway_item; } + break; case "pptp": - $wancfg['ipaddr'] = "pptp"; - $wancfg['pptp_username'] = $_POST['pptp_username']; - $wancfg['pptp_password'] = $_POST['pptp_password']; - $wancfg['local'] = $_POST['pptp_local']; - $wancfg['subnet'] = $_POST['pptp_subnet']; - $wancfg['remote'] = $_POST['pptp_remote']; - $wancfg['ondemand'] = $_POST['pptp_dialondemand'] ? true : false; - $wancfg['timeout'] = $_POST['pptp_idletimeout']; + $ppp['ptpid'] = $_POST['ptpid']; + $ppp['type'] = $_POST['type']; + if (isset($_POST['ppp_port'])) + $ppp['ports'] = $_POST['ppp_port']; + else + $ppp['ports'] = $wancfg['if']; + $ppp['username'] = $_POST['pptp_username']; + $ppp['password'] = base64_encode($_POST['pptp_password']); + $ppp['localip'] = $_POST['pptp_local']; + $ppp['subnet'] = $_POST['pptp_subnet']; + $ppp['gateway'] = $_POST['pptp_remote']; + $ppp['ondemand'] = $_POST['pptp_dialondemand'] ? true : false; + if (!empty($_POST['idletimeout'])) + $ppp['idletimeout'] = $_POST['pptp_idletimeout']; + else + unset($ppp['idletimeout']); + + $wancfg['if'] = $_POST['type'] . $if_num; + $wancfg['ptpid'] = $_POST['ptpid']; + $wancfg['ipaddr'] = $_POST['type']; if($gateway_item) { $a_gateways[] = $gateway_item; } @@ -563,9 +612,9 @@ if ($_POST) { } handle_pppoe_reset(); /* reset cron items if necessary */ - if (empty($_POST['pppoe_preset'])) { + if (empty($_POST['pppoe-reset-type'])) { /* test whether a cron item exists and unset() it if necessary */ - $itemhash = getMPDCRONSettings(); + $itemhash = getMPDCRONSettings($_POST['ptpid']); $item = $itemhash['ITEM']; if (isset($item)) unset($config['cron']['item'][$itemhash['ID']]); @@ -589,6 +638,12 @@ if ($_POST) { if (isset($wancfg['wireless'])) { handle_wireless_post(); } + + if (isset($_POST['pppid']) && $a_ppps[$pppid]) + $a_ppps[$pppid] = $ppp; + else + $a_ppps[] = $ppp; + write_config(); mark_subsystem_dirty('interfaces'); /* regenerate cron settings/crontab file */ @@ -597,24 +652,25 @@ if ($_POST) { header("Location: interfaces.php?if={$if}"); exit; } + + + } // end if($_POST) function handle_pppoe_reset() { global $_POST, $config, $g, $wancfg, $if; /* perform a periodic reset? */ - if(!isset($_POST['pppoe_preset'])) { - setup_pppoe_reset_file($if, false); + if(!isset($_POST['pppoe-reset-type'])) { + setup_pppoe_reset_file($_POST['ptpid']); return; } if (!is_array($config['cron']['item'])) $config['cron']['item'] = array(); - $itemhash = getMPDCRONSettings(); + $itemhash = getMPDCRONSettings($_POST['ptpid'], $_POST['if']); $item = $itemhash['ITEM']; if (empty($item)) $item = array(); - if (isset($_POST['pppoe_pr_type']) && $_POST['pppoe_pr_type'] == "custom") { - $wancfg['pppoe']['pppoe-reset-type'] = "custom"; - $pconfig['pppoe_pr_custom'] = true; + if (isset($_POST['pppoe-reset-type']) && $_POST['pppoe-reset-type'] == "custom") { $item['minute'] = $_POST['pppoe_resetminute']; $item['hour'] = $_POST['pppoe_resethour']; if (isset($_POST['pppoe_resetdate']) && $_POST['pppoe_resetdate'] <> "" && strlen($_POST['pppoe_resetdate']) == 10) { @@ -627,10 +683,8 @@ function handle_pppoe_reset() { } $item['wday'] = "*"; $item['who'] = "root"; - $item['command'] = CRON_PPPOE_CMD_FILE; - } else if (isset($_POST['pppoe_pr_type']) && $_POST['pppoe_pr_type'] = "preset") { - $wancfg['pppoe']['pppoe-reset-type'] = "preset"; - $pconfig['pppoe_pr_preset'] = true; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + } else if (isset($_POST['pppoe-reset-type']) && $_POST['pppoe-reset-type'] == "preset") { switch ($_POST['pppoe_pr_preset_val']) { case "monthly": $item['minute'] = "0"; @@ -639,16 +693,16 @@ function handle_pppoe_reset() { $item['month'] = "*"; $item['wday'] = "*"; $item['who'] = "root"; - $item['command'] = CRON_PPPOE_CMD_FILE; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; break; - case "weekly": + case "weekly": $item['minute'] = "0"; $item['hour'] = "0"; $item['mday'] = "*"; $item['month'] = "*"; $item['wday'] = "0"; $item['who'] = "root"; - $item['command'] = CRON_PPPOE_CMD_FILE; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; break; case "daily": $item['minute'] = "0"; @@ -657,7 +711,7 @@ function handle_pppoe_reset() { $item['month'] = "*"; $item['wday'] = "*"; $item['who'] = "root"; - $item['command'] = CRON_PPPOE_CMD_FILE; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; break; case "hourly": $item['minute'] = "0"; @@ -666,25 +720,15 @@ function handle_pppoe_reset() { $item['month'] = "*"; $item['wday'] = "*"; $item['who'] = "root"; - $item['command'] = CRON_PPPOE_CMD_FILE; - break; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + break; } // end switch } // end if if (isset($itemhash['ID'])) $config['cron']['item'][$itemhash['ID']] = $item; else $config['cron']['item'][] = $item; - /* finally install the pppoerestart file */ - if (isset($_POST['pppoe_preset'])) { - setup_pppoe_reset_file($if, true); - $wancfg['pppoe_reset'] = true; - $wancfg['pppoe_preset'] = true; - sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); - } else { - unset($wancfg['pppoe_reset']); - unset($wancfg['pppoe_preset']); - setup_pppoe_reset_file($if, false); - } + } function handle_wireless_post() { @@ -840,21 +884,28 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" <link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/> <script type="text/javascript"> - function updateType(t){ + function updateType(t) { switch(t) { - <?php - /* OK, so this is sick using php to generate javascript, but it needed to be done */ - foreach ($types as $key => $val) { - echo "case \"{$key}\": {\n"; - $t = $types; - foreach ($t as $k => $v) { - if ($k != $key) { - echo "$('{$k}').hide();\n"; - } + case "none": { + $('static','dhcp','pppoe','pptp').invoke('hide'); + break; + } + case "static": { + $('none','dhcp','pppoe','pptp').invoke('hide'); + break; + } + case "dhcp": { + $('none','static','pppoe','pptp').invoke('hide'); + break; + } + case "pppoe": { + $('none','static','dhcp','pptp').invoke('hide'); + break; + } + case "pptp": { + $('none','static','dhcp','pppoe').invoke('hide'); + break; } - echo "}\n"; - } - ?> } $(t).show(); } @@ -865,14 +916,20 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" else $('allcfg').hide(); } - - function show_periodic_reset(obj) { - if (obj.checked) - $('presetwrap').show(); - else - $('presetwrap').hide(); - } + function show_reset_settings(reset_type) { + if (reset_type == 'preset') { + Effect.Appear('pppoepresetwrap', { duration: 0.0 }); + Effect.Fade('pppoecustomwrap', { duration: 0.0 }); + } + else if (reset_type == 'custom') { + Effect.Appear('pppoecustomwrap', { duration: 0.0 }); + Effect.Fade('pppoepresetwrap', { duration: 0.0 }); + } else { + Effect.Fade('pppoecustomwrap', { duration: 0.0 }); + Effect.Fade('pppoepresetwrap', { duration: 0.0 }); + } + } function show_mon_config() { document.getElementById("showmonbox").innerHTML=''; aodiv = document.getElementById('showmon'); @@ -1156,63 +1213,70 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" <tr> <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td> <td width="78%" class="vtable"> - <input name="pppoe_preset" type="checkbox" id="pppoe_preset" value="yes" <?php if ($pconfig['pppoe_preset']) echo "checked=\"checked\""; ?> onclick="show_periodic_reset(this);" /> - <?= gettext("enable periodic PPPoE resets"); ?> - <br /> - <?php if ($pconfig['pppoe_preset']): ?> - <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%"> - <?php else: ?> - <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%" style="display: none;"> + <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%"> + <tr> + <td align="left" valign="top"> + <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;"> + <select valign="top" id="reset_type" name="pppoe-reset-type" class="formselect" onChange="show_reset_settings(this.value);"> + <option value = ""><?= gettext("Disabled"); ?></option> + <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected"; ?>><?= gettext("Custom"); ?></option> + <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected"; ?>><?= gettext("Pre-Set"); ?></option> + </select> <?= gettext("Select a reset timing type"); ?> + </p> + <?php if ($pconfig['pppoe_pr_custom']): ?> + <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap"> + <?php else: ?> + <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap"> <?php endif; ?> - <tr> - <td align="left" valign="top"> - <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;"> - <input name="pppoe_pr_type" type="radio" id="pppoe_pr_custom" value="custom" <?php if ($pconfig['pppoe_pr_custom']) echo "checked=\"checked\""; ?> onclick="if (this.checked) { Effect.Appear('pppoecustomwrap', { duration: 0.0 }); Effect.Fade('pppoepresetwrap', { duration: 0.0 }); }" /> - <?= gettext("provide a custom reset time"); ?> - <br /> - <input name="pppoe_pr_type" type="radio" id="pppoe_pr_preset" value="preset" <?php if ($pconfig['pppoe_pr_preset']) echo "checked=\"checked\""; ?> onclick="if (this.checked) { Effect.Appear('pppoepresetwrap', { duration: 0.0 }); Effect.Fade('pppoecustomwrap', { duration: 0.0 }); }" /> - <?= gettext("select reset time from a preset"); ?> - </p> - <?php if ($pconfig['pppoe_pr_custom']): ?> - <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap"> - <?php else: ?> - <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap"> - <?php endif; ?> - <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= $pconfig['pppoe_resethour']; ?>" size="3" /> - <?= gettext("hour (0-23)"); ?><br /> - <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= $pconfig['pppoe_resetminute']; ?>" size="3" /> - <?= gettext("minute (0-59)"); ?><br /> - <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" /> - <?= gettext("reset at a specific date (mm/dd/yyyy)"); ?> - <br /> <br /> - <span class="red"><strong>Note: </strong></span> - If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field. - </p> - <?php if ($pconfig['pppoe_pr_preset']): ?> - <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap"> - <?php else: ?> - <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap"> - <?php endif; ?> - <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> /> - <?= gettext("reset at each month ('0 0 1 * *')"); ?> - <br /> - <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> /> - <?= gettext("reset at each week ('0 0 * * 0')"); ?> - <br /> - <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> /> - <?= gettext("reset at each day ('0 0 * * *')"); ?> - <br /> - <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> /> - <?= gettext("reset at each hour ('0 * * * *')"); ?> - </p> - </td> - </tr> - </table> - </td> - </tr> - </table> + <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= $pconfig['pppoe_resethour']; ?>" size="3" /> + <?= gettext("hour (0-23)"); ?><br /> + <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= $pconfig['pppoe_resetminute']; ?>" size="3" /> + <?= gettext("minute (0-59)"); ?><br /> + <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" /> + <?= gettext("reset at a specific date (mm/dd/yyyy)"); ?> + <br /> <br /> + <span class="red"><strong>Note: </strong></span> + <?= gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?> + </p> + <?php if ($pconfig['pppoe_pr_preset']): ?> + <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap"> + <?php else: ?> + <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap"> + <?php endif; ?> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each month ('0 0 1 * *')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each week ('0 0 * * 0')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each day ('0 0 * * *')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each hour ('0 * * * *')"); ?> + </p> </td> </tr> + </table> + </td> + </tr> + + <tr> + <td width="22%" valign="top" class="vncell">More</td> + <?php if (isset($pconfig['pppid'])): ?> + <td width="78%" class="vtable">For additional PPPoE configuration options + <a href="/interfaces_ppps_edit.php?id=<?=htmlspecialchars($pconfig['pppid']);?>" class="navlnk">click here</a> + </td> + <? else: ?> + <td width="78%" class="vtable">For advanced PPPoE configuration options or MLPPP configuration + <a href="/interfaces_ppps_edit.php" class="navlnk">click here</a> + </td> + <? endif; ?> + </tr> + + </table> + </td> + </tr> <tr style="display:none;" name="pptp" id="pptp"> <td colspan="2" style="padding:0px;"> <table width="100%" border="0" cellpadding="6" cellspacing="0"> @@ -1239,8 +1303,7 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" <select name="pptp_subnet" class="formselect" id="pptp_subnet"> <?php for ($i = 31; $i > 0; $i--): ?> <option value="<?=$i;?>" <?php if ($i == $pconfig['pptp_subnet']) echo "selected"; ?>> - <?=$i;?> - </option> + <?=$i;?></option> <?php endfor; ?> </select> </td> @@ -1682,9 +1745,9 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" and obviously should not appear as the source address in any packets you receive. </td> </tr> - </tr> - </table> - </div> + </table> <!-- End "allcfg" table --> + </div> <!-- End "allcfg" div --> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> <tr> <td width="100" valign="top"> @@ -1695,14 +1758,24 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" <input id="save" name="Submit" type="submit" class="formbtn" value="Save"> <input id="cancel" type="button" class="formbtn" value="Cancel" onclick="history.back()"> <input name="if" type="hidden" id="if" value="<?=$if;?>"> + <?php if ($wancfg['ptpid'] == $a_ppps[$pppid]['ptpid']) : ?> + <input name="pppid" type="hidden" value="<?=$pppid;?>"> + <input name="ppp_port" type="hidden" value="<?=$a_ppps[$pppid]['ports'];?>"> + <input name="ptpid" type="hidden" value="<?=$a_ppps[$pppid]['ptpid'];?>"> + <?php else: ?> + <input name="ptpid" type="hidden" value="<?=uniqid('', true);?>"> + <?php endif; ?> </td> </tr> </table> </td> - </table> + </tr> + </table> + <!-- </div> </td></tr> </table> + --> </form> <script type="text/javascript"> var gatewayip; @@ -1775,11 +1848,10 @@ $types = array("none" => "None", "static" => "Static", "dhcp" => "DHCP", "pppoe" } <?php if ($if == "wan" || $if == "lan") - echo "\$('allcfg').show();"; + echo "\$('allcfg').show();\n"; else echo "show_allcfg(document.iform.enable);"; - echo "updateType('{$pconfig['type']}')"; - ?> + echo "updateType('{$pconfig['type']}');\n"; </script> <?php include("fend.inc"); ?> </body> diff --git a/usr/local/www/interfaces_assign.php b/usr/local/www/interfaces_assign.php index 407755f..36aa469 100755 --- a/usr/local/www/interfaces_assign.php +++ b/usr/local/www/interfaces_assign.php @@ -128,10 +128,16 @@ if (is_array($config['qinqs']['qinqentry']) && count($config['qinqs']['qinqentry /* add PPP interfaces */ if (is_array($config['ppps']['ppp']) && count($config['ppps']['ppp'])) { foreach ($config['ppps']['ppp'] as $pppid => $ppp) { - $portname = basename($ppp['port']); + $portname = $ppp['type'].$pppid; $portlist[$portname] = $ppp; $portlist[$portname]['isppp'] = true; - $portlist[$portname]['descr'] = "PPP " . basename($ppp['port']); + $ports_base = basename($ppp['ports']); + if (isset($ppp['descr'])) + $portlist[$portname]['descr'] = strtoupper($ppp['type']). "({$ports_base}) - {$ppp['descr']}"; + else if (isset($ppp['username'])) + $portlist[$portname]['descr'] = strtoupper($ppp['type']). "({$ports_base}) - {$ppp['username']}"; + else + $portlist[$portname]['descr'] = strtoupper($ppp['type']). "({$ports_base})"; } } @@ -201,11 +207,20 @@ if ($_POST['apply']) { $reloadif = true; } $config['interfaces'][$ifname]['if'] = $ifport; - if (file_exists("/dev/{$ifport}")) { - $config['interfaces'][$ifname]['if'] = basename($portlist[$ifport]['port']); - $config['interfaces'][$ifname]['ipaddr'] = "ppp"; - } - + + /*For PPP interfaces, write link type to IP address field to signal that IP + addr is dynamic and comes from PPP, PPPoE, or PPTP */ + if (isset($portlist[$ifport]['isppp'])){ + if ($ifname == "wan") + $config['interfaces'][$ifname]['if'] = $portlist[$ifport]['type'] ."0"; + else + $config['interfaces'][$ifname]['if'] = $portlist[$ifport]['type'] . substr($ifname,3); + + $config['interfaces'][$ifname]['ipaddr'] = $portlist[$ifport]['type']; + $config['interfaces'][$ifname]['ptpid'] = $portlist[$ifport]['ptpid']; + } else + unset($config['interfaces'][$ifname]['ptpid']); + /* check for wireless interfaces, set or clear ['wireless'] */ if (preg_match($g['wireless_regex'], $ifport)) { if (!is_array($config['interfaces'][$ifname]['wireless'])) @@ -217,6 +232,7 @@ if ($_POST['apply']) { /* make sure there is a descr for all interfaces */ if (!isset($config['interfaces'][$ifname]['descr'])) $config['interfaces'][$ifname]['descr'] = strtoupper($ifname); + if ($reloadif == true) { if (preg_match($g['wireless_regex'], $ifport)) interface_sync_wireless_clones($config['interfaces'][$ifname], false); @@ -263,23 +279,23 @@ if ($_GET['act'] == "del") { } if (count($config['filter']['rule']) > 0) { - foreach ($config['filter']['rule'] as $x => $rule) { - if($rule['interface'] == $id) - unset($config['filter']['rule'][$x]); + foreach ($config['filter']['rule'] as $x => $rule) { + if($rule['interface'] == $id) + unset($config['filter']['rule'][$x]); } } if (is_array($config['nat']['advancedoutbound']) && count($config['nat']['advancedoutbound']['rule']) > 0) { - foreach ($config['nat']['advancedoutbound']['rule'] as $x => $rule) { - if($rule['interface'] == $id) - unset($config['nat']['advancedoutbound']['rule'][$x]['interface']); + foreach ($config['nat']['advancedoutbound']['rule'] as $x => $rule) { + if($rule['interface'] == $id) + unset($config['nat']['advancedoutbound']['rule'][$x]['interface']); } } - if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) { - foreach ($config['nat']['rule'] as $x => $rule) { - if($rule['interface'] == $id) - unset($config['nat']['rule'][$x]['interface']); + if (is_array($config['nat']['rule']) && count($config['nat']['rule']) > 0) { + foreach ($config['nat']['rule'] as $x => $rule) { + if($rule['interface'] == $id) + unset($config['nat']['rule'][$x]['interface']); } - } + } write_config(); @@ -392,11 +408,11 @@ if(file_exists("/var/run/interface_mismatch_reboot_needed")) $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[6] = array("GRE", false, "interfaces_gre.php"); - $tab_array[7] = array("GIF", false, "interfaces_gif.php"); - $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); + $tab_array[7] = array("GRE", false, "interfaces_gre.php"); + $tab_array[8] = array("GIF", false, "interfaces_gif.php"); + $tab_array[9] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[10] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> </td></tr> @@ -420,45 +436,50 @@ if(file_exists("/var/run/interface_mismatch_reboot_needed")) <td valign="middle" class="listr"> <select name="<?=$ifname;?>" id="<?=$ifname;?>"> <?php foreach ($portlist as $portname => $portinfo): ?> - <option value="<?=$portname;?>" <?php if ($portname == $iface['if']) echo "selected";?>> - <?php if ($portinfo['isvlan']) { - $descr = "VLAN {$portinfo['tag']} on {$portinfo['if']}"; - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['iswlclone']) { - $descr = $portinfo['cloneif']; - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['isppp']) { - echo htmlspecialchars($portinfo['descr']); - } elseif ($portinfo['isbridge']) { - $descr = strtoupper($portinfo['bridgeif']); - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['isgre']) { - $descr = "GRE {$portinfo['remote-addr']}"; - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['isgif']) { - $descr = "GRE {$portinfo['remote-addr']}"; - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['islagg']) { - $descr = strtoupper($portinfo['laggif']); - if ($portinfo['descr']) - $descr .= " (" . $portinfo['descr'] . ")"; - echo htmlspecialchars($descr); - } elseif ($portinfo['isqinq']) { - echo htmlspecialchars($portinfo['descr']); - } else - echo htmlspecialchars($portname . " (" . $portinfo['mac'] . ")"); - ?> - </option> + <option value="<?=$portname;?>" <?php + if (isset($portinfo['isppp'])){ + if ($portinfo['ptpid'] == $iface['ptpid']) echo "selected"; + } + else + if ($portname == $iface['if']) echo "selected"; + ?>><?php + if ($portinfo['isvlan']) { + $descr = "VLAN {$portinfo['tag']} on {$portinfo['if']}"; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['iswlclone']) { + $descr = $portinfo['cloneif']; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['isppp']) { + echo htmlspecialchars($portinfo['descr']); + } elseif ($portinfo['isbridge']) { + $descr = strtoupper($portinfo['bridgeif']); + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['isgre']) { + $descr = "GRE {$portinfo['remote-addr']}"; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['isgif']) { + $descr = "GRE {$portinfo['remote-addr']}"; + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['islagg']) { + $descr = strtoupper($portinfo['laggif']); + if ($portinfo['descr']) + $descr .= " (" . $portinfo['descr'] . ")"; + echo htmlspecialchars($descr); + } elseif ($portinfo['isqinq']) { + echo htmlspecialchars($portinfo['descr']); + } else + echo htmlspecialchars($portname . " (" . $portinfo['mac'] . ")"); + ?></option> <?php endforeach; ?> </select> </td> diff --git a/usr/local/www/interfaces_bridge.php b/usr/local/www/interfaces_bridge.php index 9e009ba..e7aa71d 100644 --- a/usr/local/www/interfaces_bridge.php +++ b/usr/local/www/interfaces_bridge.php @@ -91,7 +91,7 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); $tab_array[6] = array("GRE", false, "interfaces_gre.php"); $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", true, "interfaces_bridge.php"); diff --git a/usr/local/www/interfaces_gif.php b/usr/local/www/interfaces_gif.php index 64eb6a4..92439fa 100644 --- a/usr/local/www/interfaces_gif.php +++ b/usr/local/www/interfaces_gif.php @@ -73,7 +73,7 @@ if ($_GET['act'] == "del") { } } -$pgtitle = array("Interfaces","gif"); +$pgtitle = array("Interfaces","GIF"); include("head.inc"); ?> @@ -90,7 +90,7 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); $tab_array[6] = array("GRE", false, "interfaces_gre.php"); $tab_array[7] = array("GIF", true, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); diff --git a/usr/local/www/interfaces_gre.php b/usr/local/www/interfaces_gre.php index bcef63a..a1a959e 100644 --- a/usr/local/www/interfaces_gre.php +++ b/usr/local/www/interfaces_gre.php @@ -90,7 +90,7 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); $tab_array[6] = array("GRE", true, "interfaces_gre.php"); $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); diff --git a/usr/local/www/interfaces_groups.php b/usr/local/www/interfaces_groups.php index 65564dd..27a088a 100755 --- a/usr/local/www/interfaces_groups.php +++ b/usr/local/www/interfaces_groups.php @@ -70,18 +70,18 @@ include("head.inc"); <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td> <?php - $tab_array = array(); - $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); + $tab_array = array(); + $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); $tab_array[1] = array("Interface Groups", true, "interfaces_groups.php"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); - $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); - $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[6] = array("GRE", false, "interfaces_gre.php"); - $tab_array[7] = array("GIF", false, "interfaces_gif.php"); - $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); - display_top_tabs($tab_array); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); + display_top_tabs($tab_array); ?> </td></tr> <tr> diff --git a/usr/local/www/interfaces_lagg.php b/usr/local/www/interfaces_lagg.php index 0beac77..a8445e2 100644 --- a/usr/local/www/interfaces_lagg.php +++ b/usr/local/www/interfaces_lagg.php @@ -96,11 +96,11 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); $tab_array[6] = array("GRE", false, "interfaces_gre.php"); $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[9] = array("LAGG", true, "interfaces_lagg.php"); + $tab_array[9] = array("LAGG", true, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> </td></tr> diff --git a/usr/local/www/interfaces_ppp.php b/usr/local/www/interfaces_ppp.php index 41d36f9..0ef20f0 100644 --- a/usr/local/www/interfaces_ppp.php +++ b/usr/local/www/interfaces_ppp.php @@ -90,10 +90,11 @@ include("head.inc"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); $tab_array[5] = array("PPP", true, "interfaces_ppp.php"); - $tab_array[6] = array("GRE", false, "interfaces_gre.php"); - $tab_array[7] = array("GIF", false, "interfaces_gif.php"); - $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); - $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); + $tab_array[6] = array("MLPPP", false, "interfaces_mlppp.php"); + $tab_array[7] = array("GRE", false, "interfaces_gre.php"); + $tab_array[8] = array("GIF", false, "interfaces_gif.php"); + $tab_array[9] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[10] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); ?> </td></tr> diff --git a/usr/local/www/interfaces_ppps.php b/usr/local/www/interfaces_ppps.php new file mode 100644 index 0000000..fc598b6 --- /dev/null +++ b/usr/local/www/interfaces_ppps.php @@ -0,0 +1,133 @@ +<?php +/* $Id$ */ +/* + interfaces_ppps.php + part of m0n0wall (http://m0n0.ch/wall) + + Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* + pfSense_BUILDER_BINARIES: /sbin/ifconfig + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-ppps +##|*NAME=Interfaces: ppps page +##|*DESCR=Allow access to the 'Interfaces: ppps' page. +##|*MATCH=interfaces_ppps.php* +##|-PRIV + +require("guiconfig.inc"); + +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + +$a_ppps = &$config['ppps']['ppp'] ; + +function ppp_inuse($num) { + global $config, $g, $a_ppps; + $iflist = get_configured_interface_list(false, true); + foreach ($iflist as $if) { + if (isset($config['interfaces'][$if]['ptpid']) && $config['interfaces'][$if]['ptpid'] == $a_ppps[$num]['ptpid']) + return true; + } + return false; +} + +if ($_GET['act'] == "del") { + /* check if still in use */ + if (ppp_inuse($_GET['id'])) { + $input_errors[] = "This point-to-point link cannot be deleted because it is still being used as an interface."; + } else { + unset($a_ppps[$_GET['id']]); + write_config(); + header("Location: interfaces_ppps.php"); + exit; + } +} + +$pgtitle = "Interfaces: PPPs"; +include("head.inc"); + +?> + +<body link="#0000CC" vlink="#0000CC" alink="#0000CC"> +<?php include("fbegin.inc"); ?> +<?php if ($input_errors) print_input_errors($input_errors); ?> +<table width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr><td> +<?php + $tab_array = array(); + $tab_array[0] = array("Interface assignments", false, "interfaces_assign.php"); + $tab_array[1] = array("Interface Groups", false, "interfaces_groups.php"); + $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); + $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); + $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); + $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); + display_top_tabs($tab_array); +?> + </td></tr> + <tr> + <td> + <div id="mainarea"> + <table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0"> + <tr> + <td width="20%" class="listhdrr">Type</td> + <td width="20%" class="listhdrr">Interface(s)/Port(s)</td> + <td width="40%" class="listhdr">Description</td> + <td width="10%" class="list"></td> + </tr> + <?php $i = 0; foreach ($a_ppps as $id => $ppp): ?> + <tr ondblclick="document.location='interfaces_ppps_edit.php?id=<?=$i;?>'"> + <td class="listr"> + <?=htmlspecialchars($ppp['type']);?> + </td> + <td class="listr"> + <?=htmlspecialchars($ppp['ports']);?> + </td> + <td class="listbg"> + <?=htmlspecialchars($ppp['descr']);?> + </td> + <td valign="middle" nowrap class="list"> <a href="interfaces_ppps_edit.php?id=<?=$i;?>"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_e.gif" width="17" height="17" border="0"></a> + <a href="interfaces_ppps.php?act=del&id=<?=$i;?>" onclick="return confirm('Do you really want to delete this PPP interface?')"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a></td> + </tr> + <?php $i++; endforeach; ?> + <tr> + <td class="list" colspan="3"> </td> + <td class="list"> <a href="interfaces_ppps_edit.php"><img src="./themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a></td> + </tr> + </table> + </div> + </td> + </tr> +</table> +<?php include("fend.inc"); ?> +</body> +</html> diff --git a/usr/local/www/interfaces_ppps_edit.php b/usr/local/www/interfaces_ppps_edit.php new file mode 100644 index 0000000..2fe8fa7 --- /dev/null +++ b/usr/local/www/interfaces_ppps_edit.php @@ -0,0 +1,910 @@ +<?php +/* $Id$ */ +/* + interfaces_ppps_edit.php + part of m0n0wall (http://m0n0.ch/wall) + + Copyright (C) 2003-2004 Manuel Kasper <mk@neon1.net>. + All rights reserved. + Copyright (C) 2010 Gabriel B. <gnoahb@gmail.com>. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ +/* + pfSense_MODULE: interfaces +*/ + +##|+PRIV +##|*IDENT=page-interfaces-ppps-edit +##|*NAME=Interfaces: PPPs: Edit page +##|*DESCR=Allow access to the 'Interfaces: PPPs: Edit' page. +##|*MATCH=interfaces_ppps_edit.php* +##|-PRIV + +require("guiconfig.inc"); +require("functions.inc"); + +define("CRON_PPPOE_CMD_FILE", "{$g['varetc_path']}/pppoe_restart_"); +define("CRON_MONTHLY_PATTERN", "0 0 1 * *"); +define("CRON_WEEKLY_PATTERN", "0 0 * * 0"); +define("CRON_DAILY_PATTERN", "0 0 * * *"); +define("CRON_HOURLY_PATTERN", "0 * * * *"); + +function getMPDCRONSettings($ptpid_) { + global $config; + if (is_array($config['cron']['item'])) { + for ($i = 0; $i < count($config['cron']['item']); $i++) { + $item = $config['cron']['item'][$i]; + if (strpos($item['command'], CRON_PPPOE_CMD_FILE.$ptpid_) !== false) { + return array("ID" => $i, "ITEM" => $item); + } + } + } + return NULL; +} + +if (!is_array($config['ppps']['ppp'])) + $config['ppps']['ppp'] = array(); + +$a_ppps = &$config['ppps']['ppp']; + +$portlist = get_interface_list(); + +$id = $_GET['id']; +if (isset($_POST['id'])) + $id = $_POST['id']; + + +if (isset($id) && $a_ppps[$id]) { + $pconfig['type'] = $a_ppps[$id]['type']; + $pconfig['interfaces'] = $a_ppps[$id]['ports']; + $pconfig['username'] = $a_ppps[$id]['username']; + $pconfig['password'] = base64_decode($a_ppps[$id]['password']); + if (isset($a_ppps[$id]['ondemand'])) + $pconfig['ondemand'] = true; + $pconfig['idletimeout'] = $a_ppps[$id]['idletimeout']; + $pconfig['uptime'] = $a_ppps[$id]['uptime']; + $pconfig['descr'] = $a_ppps[$id]['descr']; + $pconfig['bandwidth'] = explode(",",$a_ppps[$id]['bandwidth']); + $pconfig['mtu'] = explode(",",$a_ppps[$id]['mtu']); + $pconfig['mru'] = explode(",",$a_ppps[$id]['mru']); + $pconfig['mrru'] = $a_ppps[$id]['mrru']; + if (isset($a_ppps[$id]['shortseq'])) + $pconfig['shortseq'] = true; + if (isset($a_ppps[$id]['acfcomp'])) + $pconfig['acfcomp'] = true; + if (isset($a_ppps[$id]['protocomp'])) + $pconfig['protocomp'] = true; + if (isset($a_ppps[$id]['vjcomp'])) + $pconfig['vjcomp'] = true; + if (isset($a_ppps[$id]['tcpmssfix'])) + $pconfig['tcpmssfix'] = true; + switch($a_ppps[$id]['type']) { + case "ppp": + $pconfig['initstr'] = base64_decode($a_ppps[$id]['initstr']); + $pconfig['simpin'] = $a_ppps[$id]['simpin']; + $pconfig['pin-wait'] = $a_ppps[$id]['pin-wait']; + $pconfig['apn'] = $a_ppps[$id]['apn']; + $pconfig['apnum'] = $a_ppps[$id]['apnum']; + $pconfig['phone'] = $a_ppps[$id]['phone']; + $pconfig['connect-timeout'] = $a_ppps[$id]['connect-timeout']; + $pconfig['localip'] = explode(",",$a_ppps[$id]['localip']); + $pconfig['gateway'] = explode(",",$a_ppps[$id]['gateway']); + break; + case "l2tp": + case "pptp": + $pconfig['localip'] = explode(",",$a_ppps[$id]['localip']); + $pconfig['subnet'] = explode(",",$a_ppps[$id]['subnet']); + $pconfig['gateway'] = explode(",",$a_ppps[$id]['gateway']); + if (isset($a_ppps[$id]['dhcp'])) + $pconfig['pptp_dhcp'] = true; + break; + case "pppoe": + $pconfig['provider'] = $a_ppps[$id]['provider']; + /* ================================================ */ + /* = force a connection reset at a specific time? = */ + /* ================================================ */ + + if (isset($a_ppps[$id]['pppoe-reset-type'])) { + $pconfig['pppoe-reset-type'] = $a_ppps[$id]['pppoe-reset-type']; + $itemhash = getMPDCRONSettings($a_ppps[$id]['ptpid']); + $cronitem = $itemhash['ITEM']; + if (isset($cronitem)) { + $resetTime = "{$cronitem['minute']} {$cronitem['hour']} {$cronitem['mday']} {$cronitem['month']} {$cronitem['wday']}"; + } else { + $resetTime = NULL; + } + + if ($a_ppps[$id]['pppoe-reset-type'] == "custom") { + $resetTime_a = split(" ", $resetTime); + $pconfig['pppoe_pr_custom'] = true; + $pconfig['pppoe_resetminute'] = $resetTime_a[0]; + $pconfig['pppoe_resethour'] = $resetTime_a[1]; + /* just initialize $pconfig['pppoe_resetdate'] if the + * coresponding item contains appropriate numeric values. + */ + if ($resetTime_a[2] <> "*" && $resetTime_a[3] <> "*") + $pconfig['pppoe_resetdate'] = "{$resetTime_a[3]}/{$resetTime_a[2]}/" . date("Y"); + } else if ($a_ppps[$id]['pppoe-reset-type'] == "preset") { + $pconfig['pppoe_pr_preset'] = true; + switch ($resetTime) { + case CRON_MONTHLY_PATTERN: + $pconfig['pppoe_monthly'] = true; + break; + case CRON_WEEKLY_PATTERN: + $pconfig['pppoe_weekly'] = true; + break; + case CRON_DAILY_PATTERN: + $pconfig['pppoe_daily'] = true; + break; + case CRON_HOURLY_PATTERN: + $pconfig['pppoe_hourly'] = true; + break; + } + } + } + break; + } + +} + +if ($_POST) { + + unset($input_errors); + $pconfig = $_POST; + + /* okay first of all, cause we are just hiding the PPPoE HTML + * fields releated to PPPoE resets, we are going to unset $_POST + * vars, if the reset feature should not be used. Otherwise the + * data validation procedure below, may trigger a false error + * message. + */ + if (empty($_POST['pppoe-reset-type'])) { + unset($_POST['pppoe_resethour']); + unset($_POST['pppoe_resetminute']); + unset($_POST['pppoe_resetdate']); + unset($_POST['pppoe_pr_preset_val']); + } + + /* input validation */ + switch($_POST['type']) { + case "ppp": + $reqdfields = explode(" ", "interfaces phone"); + $reqdfieldsn = explode(",", "Link Interface(s),Phone Number"); + do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); + break; + case "pppoe": + if ($_POST['ondemand']) { + $reqdfields = explode(" ", "interfaces username password ondemand idletimeout"); + $reqdfieldsn = explode(",", "Link Interface(s),Username,Password,Dial on demand,Idle timeout value"); + } else { + $reqdfields = explode(" ", "interfaces username password"); + $reqdfieldsn = explode(",", "Link Interface(s),Username,Password"); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); + break; + case "l2tp": + case "pptp": + if ($_POST['ondemand']) { + $reqdfields = explode(" ", "interfaces username password localip subnet gateway ondemand idletimeout"); + $reqdfieldsn = explode(",", "Link Interface(s),Username,Password,Local IP address,Subnet,Remote IP address,Dial on demand,Idle timeout value"); + } else { + $reqdfields = explode(" ", "interfaces username password localip subnet gateway"); + $reqdfieldsn = explode(",", "Link Interface(s),Username,Password,Local IP address,Subnet,Remote IP address"); + } + do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors); + break; + default: + $input_errors[] = "Please choose a Link Type."; + break; + } + if ($_POST['type'] == "ppp" && count($_POST['interfaces']) > 1) + $input_errors[] = "Multilink connections (MLPPP) using the PPP link type is not currently supported. Please select only one Link Interface."; + if (($_POST['provider'] && !is_domain($_POST['provider']))) + $input_errors[] = "The service name contains invalid characters."; + if (($_POST['idletimeout'] != "") && !is_numericint($_POST['idletimeout'])) + $input_errors[] = "The idle timeout value must be an integer."; + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resethour'] <> "" && !is_numericint($_POST['pppoe_resethour']) && + $_POST['pppoe_resethour'] >= 0 && $_POST['pppoe_resethour'] <=23) + $input_errors[] = gettext("A valid PPPoE reset hour must be specified (0-23)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetminute'] <> "" && !is_numericint($_POST['pppoe_resetminute']) && + $_POST['pppoe_resetminute'] >= 0 && $_POST['pppoe_resetminute'] <=59) + $input_errors[] = gettext("A valid PPPoE reset minute must be specified (0-59)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && !is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))) + $input_errors[] = gettext("A valid PPPoE reset date must be specified (mm/dd/yyyy)."); + if ($_POST['pppoe-reset-type'] == "custom" && $_POST['pppoe_resetdate'] <> "" && is_numeric(str_replace("/", "", $_POST['pppoe_resetdate']))){ + $date_nums = explode("/",$_POST['pppoe_resetdate']); + if ($date_nums[0] < 1 || $date_nums[0] > 12) + $input_errors[] = gettext("A valid PPPoE reset month must be specified (1-12) in the Custom PPPoE Periodic reset fields."); + if ($date_nums[1] < 1 || $date_nums[1] > 31) + $input_errors[] = gettext("A valid PPPoE reset day of month must be specified (1-31) in the Custom PPPoE Periodic reset fields. No checks are done on valid # of days per month"); + if ($date_nums[2] < date("Y")) + $input_errors[] = gettext("A valid PPPoE reset year must be specified. Don't select a year in the past!"); + } + + foreach($_POST['interfaces'] as $iface){ + if ($_POST['localip'][$iface] && !is_ipaddr($_POST['localip'][$iface])) + $input_errors[] = "A valid local IP address must be specified for {$iface}."; + if ($_POST['gateway'][$iface] && !is_ipaddr($_POST['gateway'][$iface]) && !is_hostname($_POST['gateway'][$iface])) + $input_errors[] = "A valid gateway IP address OR hostname must be specified for {$iface}."; + if ($_POST['bandwidth'][$iface] && !is_numericint($_POST['bandwidth'][$iface])) + $input_errors[] = "The bandwidth value for {$iface} must be an integer."; + if ($_POST['mtu'][$iface] && ($_POST['mtu'][$iface] < 576)) + $input_errors[] = "The MTU for {$iface} must be greater than 576 bytes."; + if ($_POST['mru'][$iface] && ($_POST['mru'][$iface] < 576)) + $input_errors[] = "The MRU for {$iface} must be greater than 576 bytes."; + } + +/* + foreach ($a_ppps as $ppp) { + if (isset($id) && ($a_ppps[$id]) && ($a_ppps[$id] === $ppp)) + continue; + + if ($ppp['serialport'] == $_POST['serialport']) { + $input_errors[] = "Serial port is in use"; + break; + } + } +*/ + + if (!$input_errors) { + $ppp = array(); + $ppp['ptpid'] = $_POST['ptpid']; + $ppp['type'] = $_POST['type']; + $ppp['ports'] = implode(',',$_POST['interfaces']); + $ppp['username'] = $_POST['username']; + $ppp['password'] = base64_encode($_POST['password']); + $ppp['ondemand'] = $_POST['ondemand'] ? true : false; + if (!empty($_POST['idletimeout'])) + $ppp['idletimeout'] = $_POST['idletimeout']; + else + unset($ppp['idletimeout']); + $ppp['uptime'] = $_POST['uptime'] ? true : false; + if (!empty($_POST['descr'])) + $ppp['descr'] = $_POST['descr']; + else + unset($ppp['descr']); + + switch($_POST['type']) { + case "ppp": + if (!empty($_POST['initstr'])) + $ppp['initstr'] = base64_encode($_POST['initstr']); + else + unset($ppp['initstr']); + if (!empty($_POST['simpin'])) { + $ppp['simpin'] = $_POST['simpin']; + $ppp['pin-wait'] = $_POST['pin-wait']; + } else { + unset($ppp['simpin']); + unset($ppp['pin-wait']); + } + + if (!empty($_POST['apn'])){ + $ppp['apn'] = $_POST['apn']; + if (!empty($_POST['apnum'])) + $ppp['apnum'] = $_POST['apnum']; + else + $ppp['apnum'] = "1"; + } else { + unset($ppp['apn']); + unset($ppp['apnum']); + } + $ppp['phone'] = $_POST['phone']; + foreach($_POST['interfaces'] as $iface){ + if (isset($_POST['localip'][$iface])) + $localip_array[] = $_POST['localip'][$iface]; + if (isset($_POST['gateway'][$iface])) + $gateway_array[] = $_POST['gateway'][$iface]; + } + if (count($localip_array)) + $ppp['localip'] = implode(',',$localip_array); + else + unset($ppp['localip']); + if (count($gateway_array)) + $ppp['gateway'] = implode(',',$gateway_array); + else + unset($ppp['gateway']); + if (!empty($_POST['connect-timeout'])) + $ppp['connect-timeout'] = $_POST['connect-timeout']; + else + unset($ppp['connect-timeout']); + break; + case "pppoe": + if (!empty($_POST['provider'])) + $ppp['provider'] = $_POST['provider']; + else + unset($ppp['provider']); + if (!empty($_POST['pppoe-reset-type'])) + $ppp['pppoe-reset-type'] = $_POST['pppoe-reset-type']; + else + unset($ppp['pppoe-reset-type']); + + break; + case "pptp": + case "l2tp": + foreach($_POST['interfaces'] as $iface){ + if (isset($_POST['localip'][$iface])) + $localip_array[] = $_POST['localip'][$iface]; + if (isset($_POST['gateway'][$iface])) + $gateway_array[] = $_POST['gateway'][$iface]; + if (isset($_POST['subnet'][$iface])) + $subnet_array[] = $_POST['subnet'][$iface]; + } + + $ppp['dhcp'] = $_POST['pptp_dhcp'] ? true : false; + if (count($localip_array)) + $ppp['localip'] = implode(',',$localip_array); + else + unset($ppp['localip']); + if (count($gateway_array)) + $ppp['gateway'] = implode(',',$gateway_array); + else + unset($ppp['gateway']); + if (count($subnet_array)) + $ppp['subnet'] = implode(',',$subnet_array); + else + unset($ppp['subnet']); + break; + default: + break; + + } + + $ppp['shortseq'] = $_POST['shortseq'] ? true : false; + $ppp['acfcomp'] = $_POST['acfcomp'] ? true : false; + $ppp['protocomp'] = $_POST['protocomp'] ? true : false; + $ppp['vjcomp'] = $_POST['vjcomp'] ? true : false; + $ppp['tcpmssfix'] = $_POST['tcpmssfix'] ? true : false; + + foreach($_POST['interfaces'] as $iface){ + if (isset($_POST['bandwidth'][$iface])) + $bw_array[] = $_POST['bandwidth'][$iface]; + if (isset($_POST['mtu'][$iface])) + $mtu_array[] = $_POST['mtu'][$iface]; + if (isset($_POST['mru'][$iface])) + $mru_array[] = $_POST['mru'][$iface]; + if (isset($_POST['mrru'][$iface])) + $mrru_array[] = $_POST['mrru'][$iface]; + } + if (isset($bw_array)) + $ppp['bandwidth'] = implode(',', $bw_array); + else + unset($ppp['bandwidth']); + + if (isset($mtu_array)) + $ppp['mtu'] = implode(',', $mtu_array); + else + unset($ppp['mtu']); + + if (isset($mru_array)) + $ppp['mru'] = implode(',', $mru_array); + else + unset($ppp['mru']); + /* handle_pppoe_reset is called here because if user changes Link Type from PPPoE to another type we + must be able to clear the config data in the <cron> section of config.xml if it exists + */ + handle_pppoe_reset(); + + $iflist = get_configured_interface_list(); + foreach ($iflist as $if) { + if ($config['interfaces'][$if]['ptpid'] == $_POST['ptpid']){ + $thisif = $if; + break; + } + } + if (isset($id) && $a_ppps[$id]) + $a_ppps[$id] = $ppp; + else + $a_ppps[] = $ppp; + + write_config(); + configure_cron(); + + if (isset($thisif)){ + interface_ppps_configure($thisif); + } + header("Location: interfaces_ppps.php"); + exit; + } +} // end if($_POST) + +function handle_pppoe_reset() { + global $_POST, $config, $g; + + if (!is_array($config['cron']['item'])) + $config['cron']['item'] = array(); + $itemhash = getMPDCRONSettings($_POST['ptpid']); + $item = $itemhash['ITEM']; + + /* reset cron items if necessary and return*/ + if (empty($_POST['pppoe-reset-type'])) { + if (isset($item)) + unset($config['cron']['item'][$itemhash['ID']]); + sigkillbypid("{$g['varrun_path']}/cron.pid", "HUP"); + return; + } + + if (empty($item)) + $item = array(); + if (isset($_POST['pppoe-reset-type']) && $_POST['pppoe-reset-type'] == "custom") { + $item['minute'] = $_POST['pppoe_resetminute']; + $item['hour'] = $_POST['pppoe_resethour']; + if (isset($_POST['pppoe_resetdate']) && $_POST['pppoe_resetdate'] <> "") { + $date = explode("/", $_POST['pppoe_resetdate']); + $item['mday'] = $date[1]; + $item['month'] = $date[0]; + } else { + $item['mday'] = "*"; + $item['month'] = "*"; + } + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + } else if (isset($_POST['pppoe-reset-type']) && $_POST['pppoe-reset-type'] == "preset") { + switch ($_POST['pppoe_pr_preset_val']) { + case "monthly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "1"; + $item['month'] = "*"; + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + break; + case "weekly": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "0"; + $item['who'] = "root"; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + break; + case "daily": + $item['minute'] = "0"; + $item['hour'] = "0"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + break; + case "hourly": + $item['minute'] = "0"; + $item['hour'] = "*"; + $item['mday'] = "*"; + $item['month'] = "*"; + $item['wday'] = "*"; + $item['who'] = "root"; + $item['command'] = CRON_PPPOE_CMD_FILE.$_POST['ptpid']; + break; + } // end switch + }// end if + if (isset($itemhash['ID'])) + $config['cron']['item'][$itemhash['ID']] = $item; + else + $config['cron']['item'][] = $item; +} + +$closehead = false; +$pgtitle = array("Interfaces","PPPs","Edit"); +include("head.inc"); + +$types = array("select" => "Select", "ppp" => "PPP", "pppoe" => "PPPoE", "pptp" => "PPTP", "l2tp" => "L2TP"/*, "tcp" => "TCP", "udp" => "UDP"*/ ); + +?> + <script type="text/javascript" src="/javascript/numericupdown/js/numericupdown.js"></script> + <link href="/javascript/numericupdown/css/numericupdown.css" rel="stylesheet" type="text/css" /> + <script type="text/javascript" src="/javascript/datepicker/js/datepicker.js"></script> + <link href="/javascript/datepicker/css/datepicker.css" rel="stylesheet" type="text/css"/> + <script type="text/javascript" > + document.observe("dom:loaded", function() { updateType(<?php echo "'{$pconfig['type']}'";?>); }); + </script> +</head> +<body link="#0000CC" vlink="#0000CC" alink="#0000CC" > +<?php include("fbegin.inc"); ?> +<?php if ($input_errors) print_input_errors($input_errors); ?> + <form action="interfaces_ppps_edit.php" method="post" name="iform" id="iform"> + <table id="interfacetable" width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="2" valign="top" class="listtopic"><?= gettext("PPPs configuration"); ?></td> + </tr> + <tr> + <td valign="middle" class="vncell"><strong><?= gettext("Link Type"); ?></strong></td> + <td class="vtable"> + <select name="type" onChange="updateType(this.value);" class="formselect" id="type"> + <?php + foreach ($types as $key => $opt) { + echo "<option onClick=\"updateType('{$key}');\""; + if ($key == $pconfig['type']) + echo " selected"; + echo " value=\"{$key}\" >" . htmlspecialchars($opt) . "</option>"; + } + ?> + </select> + </td> + </tr> + <tr name="interface" id="interface" > + <td width="22%" valign="top" class="vncellreq"><?= gettext("Link interface(s)"); ?></td> + <td width="78%" class="vtable"> + <select valign="top" name="interfaces[]" multiple="true" class="formselect" size="4" onChange="show_hide_linkfields(this.options);"> + <option></option> + </select> + + <br/><span class="vexpl"><?= gettext("Interface(s) or port(s) participating in the connection."); ?></span> + <span style="display:none" id="prefil_ppp"> + <p/><?= gettext("Click a link to fill in defaults for these carriers:"); ?> + <a href='#' onClick='javascript:prefill_att();'>ATT</A> + <a href='#' onClick='javascript:prefill_sprint();'>Sprint</A> + <a href='#' onClick='javascript:prefill_vzw();'>Verizon</A> + </span> + </td> + </tr> + <tr style="display:none" name="portlists" id="portlists"> + <td id="serialports"><?php + $selected_ports = explode(',',$pconfig['interfaces']); + $serial = glob("/dev/cua*"); + $modems = glob("/dev/modem*"); + $serialports = array_merge($serial, $modems); + $serport_count = 0; + foreach ($serialports as $port) { + if(preg_match("/\.(lock|init)$/", $port)) + continue; + $serport_count++; + echo $port.",".trim($port); + if (in_array($port,$selected_ports)) + echo ",1|"; + else + echo ",|"; + } + echo $serport_count; + ?></td> + <td id="ports"><?php + $port_count = 0; + foreach ($portlist as $ifn => $ifinfo){ + $port_count++; + echo htmlspecialchars($ifn . " (" . $ifinfo['mac'] . ")") . ",{$ifn}"; + if (in_array($ifn,$selected_ports)) + echo ",1|"; + else + echo ",|"; + } + echo $port_count; + if($serport_count > $port_count) + $port_count=$serport_count; + ?></td> + <td style="display:none" name="port_count" id="port_count"><?=htmlspecialchars($port_count);?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Username"); ?></td> + <td width="78%" class="vtable"> + <input name="username" type="text" class="formfld user" id="username" size="20" value="<?=htmlspecialchars($pconfig['username']);?>"> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Password"); ?></td> + <td width="78%" class="vtable"> + <input name="password" type="password" class="formfld pwd" id="password" size="20" value="<?=htmlspecialchars($pconfig['password']);?>"> + </td> + </tr> + + <tr> + <td valign="top" class="vncell"><?= gettext("Dial On Demand"); ?></td> + <td class="vtable"> + <input type="checkbox" value="on" id="ondemand" name="ondemand" <?php if (isset($pconfig['ondemand'])) echo "checked"; ?>> <?= gettext("Enable Dial-on-Demand mode"); ?> + <br/> <span class="vexpl"><?= gettext("This option causes the interface to operate in dial-on-demand mode, allowing you to have a virtual full time connection. + The interface is configured, but the actual connection of the link is delayed until qualifying outgoing traffic is detected."); ?> </span> + </td> + </tr> + <tr> + <td valign="top" class="vncell"><?= gettext("Idle Timeout"); ?></td> + <td class="vtable"> + <input name="idletimeout" type="text" class="formfld unknown" id="idletimeout" size="12" value="<?=htmlspecialchars($pconfig['idletimeout']);?>"> <?= gettext("(seconds) Default is 0, which disables the timeout feature."); ?> + <br/> <span class="vexpl"><?= gettext("If no incoming or outgoing packets are transmitted for the entered number of seconds the connection is brought down. + <br/>When the idle timeout occurs, if the dial-on-demand option is enabled, mpd goes back into dial-on-demand mode. Otherwise, the interface is brought down and all associated routes removed."); ?></span> + </td> + </tr> + <tr> + <td valign="top" class="vncell"><?= gettext("Uptime Logging"); ?></td> + <td class="vtable"> + <input type="checkbox" value="on" id="uptime" name="uptime" <?php if (isset($pconfig['uptime'])) echo "checked"; ?>> <?= gettext("Enable persistent logging of connection uptime."); ?> + <br/> <span class="vexpl"><?= gettext("This option causes cumulative uptime to be recorded and displayed on the Status Interfaces page."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Description"); ?></td> + <td width="78%" class="vtable"> + <input name="descr" type="text" class="formfld unknown" id="descr" size="40" value="<?=htmlspecialchars($pconfig['descr']);?>"> + <br/> <span class="vexpl"><?= gettext("You may enter a description here for your reference. Description will appear in the \"Interfaces Assign\" select lists."); ?></span> + </td> + </tr> + <tr> + <td colspan="2" valign="top" height="16"></td> + </tr> + <tr style="display:none" name="select" id="select"> + </tr> + <tr style="display:none" name="ppp" id="ppp"> + <td colspan="2" style="padding:0px;"> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="2" valign="top" class="listtopic"><?= gettext("PPP configuration"); ?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Init String"); ?></td> + <td width="78%" class="vtable"> + <input type="text" size="40" class="formfld unknown" id="initstr" name="initstr" value="<?=htmlspecialchars($pconfig['initstr']);?>"> + <br/><span class="vexpl"><?= gettext("Note: Enter the modem initialization string here. Do NOT include the \"AT\" + string at the beginning of the command. Many modern USB 3G modems don't need an initialization string."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Sim PIN"); ?></td> + <td width="78%" class="vtable"> + <input name="simpin" type="text" class="formfld unknown" id="simpin" size="12" value="<?=htmlspecialchars($pconfig['simpin']);?>"> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Sim PIN wait"); ?></td> + <td width="78%" class="vtable"> + <input name="pin-wait" type="text" class="formfld unknown" id="pin-wait" size="2" value="<?=htmlspecialchars($pconfig['pin-wait']);?>"> + <br/><span class="vexpl"><?= gettext("Note: Time to wait for SIM to discover network after PIN is sent to SIM (seconds)."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Access Point Name (APN)"); ?></td> + <td width="78%" class="vtable"> + <input name="apn" type="text" class="formfld unknown" id="apn" size="40" value="<?=htmlspecialchars($pconfig['apn']);?>"> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("APN number (optional)"); ?></td> + <td width="78%" class="vtable"> + <input name="apnum" type="text" class="formfld unknown" id="apnum" size="2" value="<?=htmlspecialchars($pconfig['apnum']);?>"> + <br/><span class="vexpl"><?= gettext("Note: Defaults to 1 if you set APN above. Ignored if you set no APN above."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Phone Number"); ?></td> + <td width="78%" class="vtable"> + <input name="phone" type="text" class="formfld unknown" id="phone" size="40" value="<?=htmlspecialchars($pconfig['phone']);?>"> + <br/><span class="vexpl"><?= gettext("Note: Typically (*99# or *99***# or *99***1#) for GSM networks and *777 for CDMA networks"); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Connection Timeout"); ?></td> + <td width="78%" class="vtable"> + <input name="connect-timeout" type="text" class="formfld unknown" id="connect-timeout" size="2" value="<?=htmlspecialchars($pconfig['connect-timeout']);?>"> + <br/><span class="vexpl"><?= gettext("Note: Enter timeout in seconds for connection to be established (sec.) Default is 45 sec."); ?></span> + </td> + </tr> + </table> + </td> + </tr> + <tr style="display:none" name="pppoe" id="pppoe"> + <td colspan="2" style="padding:0px;"> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="2" valign="top" class="listtopic"><?= gettext("PPPoE configuration"); ?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Service name"); ?></td> + <td width="78%" class="vtable"><input name="provider" type="text" class="formfld unknown" id="provider" size="20" value="<?=htmlspecialchars($pconfig['provider']);?>"> + <br/> <span class="vexpl"><?= gettext("Hint: this field can usually be left empty"); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?=gettext("Periodic reset");?></td> + <td width="78%" class="vtable"> + <table id="presetwrap" cellspacing="0" cellpadding="0" width="100%"> + <tr> + <td align="left" valign="top"> + <p style="margin: 4px; padding: 4px 0 4px 0; width: 94%;"> + <select valign="top" id="reset_type" name="pppoe-reset-type" class="formselect" onChange="show_reset_settings(this.value);"> + <option value = ""><?= gettext("Disabled"); ?></option> + <option value="custom" <?php if ($pconfig['pppoe-reset-type'] == "custom") echo "selected"; ?>><?= gettext("Custom"); ?></option> + <option value="preset" <?php if ($pconfig['pppoe-reset-type'] == "preset") echo "selected"; ?>><?= gettext("Pre-Set"); ?></option> + </select> <?= gettext("Select a reset timing type"); ?> + </p> + <?php if ($pconfig['pppoe_pr_custom']): ?> + <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoecustomwrap"> + <?php else: ?> + <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoecustomwrap"> + <?php endif; ?> + <input type="text" name="pppoe_resethour" class="fd_incremental_inp_range_0_23 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resethour" value="<?= $pconfig['pppoe_resethour']; ?>" size="3" /> + <?= gettext("hour (0-23)"); ?><br /> + <input type="text" name="pppoe_resetminute" class="fd_incremental_inp_range_0_59 fd_increment_1 fd_classname_dec_buttonDec fd_classname_inc_buttonInc" maxlength="2" id="pppoe_resetminute" value="<?= $pconfig['pppoe_resetminute']; ?>" size="3" /> + <?= gettext("minute (0-59)"); ?><br /> + <input name="pppoe_resetdate" type="text" class="w8em format-m-d-y highlight-days-67" id="pppoe_resetdate" maxlength="10" size="10" value="<?=htmlspecialchars($pconfig['pppoe_resetdate']);?>" /> + <?= gettext("reset at a specific date (mm/dd/yyyy)"); ?> + <br /> <br /> + <span class="red"><strong>Note: </strong></span> + <?= gettext("If you leave the date field empty, the reset will be executed each day at the time you did specify using the minutes and hour field."); ?> + </p> + <?php if ($pconfig['pppoe_pr_preset']): ?> + <p style="margin: 2px; padding: 4px; width: 94%;" id="pppoepresetwrap"> + <?php else: ?> + <p style="margin: 2px; padding: 4px; width: 94%; display: none;" id="pppoepresetwrap"> + <?php endif; ?> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_monthly" value="monthly" <?php if ($pconfig['pppoe_monthly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each month ('0 0 1 * *')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_weekly" value="weekly" <?php if ($pconfig['pppoe_weekly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each week ('0 0 * * 0')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_daily" value="daily" <?php if ($pconfig['pppoe_daily']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each day ('0 0 * * *')"); ?> + <br /> + <input name="pppoe_pr_preset_val" type="radio" id="pppoe_hourly" value="hourly" <?php if ($pconfig['pppoe_hourly']) echo "checked=\"checked\""; ?> /> + <?= gettext("reset at each hour ('0 * * * *')"); ?> + </p> + </td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + <tr style="display:none" name="pptp" id="pptp"> + <td colspan="2" style="padding:0px;"> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td colspan="2" valign="top" class="listtopic"><?= gettext("PPTP/L2TP Configuration"); ?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Use DHCP/DNS"); ?></td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" name="pptp_dhcp" id="pptp_dhcp" <?php if (isset($pconfig['pptp_dhcp'])) echo "checked"; ?>> <?= gettext("Configure Local IP and Gateway IP using DHCP/DNS"); ?> + <br/> <span class="vexpl"><?= gettext("Use DHCP to configure the underlying interface IP, and optionally DNS to configure the remote IP for PPtP and L2TP. If a hostname is entered in \"Gateway\" field(s) below, Gateway IP will be set via DNS."); ?></span> + </td> + </tr> + </table> + </td> + </tr> + <?php for($j=0; $j < $port_count; $j++) : ?> + <tr style="display:none" id="ipfields<?=$j;?>"> + <td colspan="2" style="padding:0px;"> + <table width="100%" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td width="22%" id="localiplabel<?=$j;?>" valign="top" class="vncell"><?= gettext("Local IP"); ?></td> + <td width="78%" class="vtable"> + <input name="localip[]" type="text" class="formfld unknown" id="localip<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['localip'][$j]);?>"> + / + <select name="subnet[]" class="formselect" id="subnet<?=$j;?>" disabled="true"> + <?php for ($i = 31; $i > 0; $i--): ?> + <option value="<?=$i;?>"<?php if ($i == $pconfig['subnet'][$j]) echo "selected"; ?>><?=$i;?></option> + <?php endfor; ?> + </select> + <br><span class="vexpl"><?= gettext("Note: Local IP/subnet is required for PPTP connections. LocalIP is automatically assigned for PPP links if this field is empty."); ?></span> + </td> + </tr> + <tr> + <td width="22%" id="gatewaylabel<?=$j;?>" valign="top" class="vncell"></td> + <td width="78%" class="vtable"> + <input name="gateway[]" type="text" class="formfld unknown" id="gateway<?=$j;?>" size="20" value="<?=htmlspecialchars($pconfig['gateway'][$j]);?>"><?= gettext("IP Address OR Hostname"); ?> + <br><span class="vexpl"><?= gettext("Note: This is where the packets will be routed. Remote IP OR Hostname is required for PPTP connections. Remote IP is automatically assigned for PPP links if this field is empty."); ?></span> + </td> + </tr> + </table> + </td> + </tr><?php endfor; ?> + <tr> + <td colspan="2" valign="top" height="16"></td> + </tr> + <tr> + <td colspan="2" valign="top" class="listtopic"><?= gettext("Advanced Options"); ?></td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("Compression"); ?></td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" id="vjcomp" name="vjcomp" <?php if (isset($pconfig['vjcomp'])) echo "checked"; ?>> <?= gettext("Disable vjcomp(compression) (enabled by default)."); ?> + <br/> <span class="vexpl">This option enables Van Jacobson TCP header compression, which saves several bytes per TCP data packet. + You almost always want this option. This compression ineffective for TCP connections with enabled modern extensions like time + stamping or SACK, which modify TCP options between sequential packets.</span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell"><?= gettext("TCPmssFix"); ?></td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" id="tcpmssfix" name="tcpmssfix" <?php if (isset($pconfig['tcpmssfix'])) echo "checked"; ?>> <?= gettext("Enable tcpmssfix (disabled by default)."); ?> + <br/> <span class="vexpl">This option causes mpd to adjust incoming and outgoing TCP SYN segments so that the requested maximum segment size is not greater than the amount + allowed by the interface MTU. This is necessary in many setups to avoid problems caused by routers that drop ICMP Datagram Too Big messages. Without these messages, + the originating machine sends data, it passes the rogue router then hits a machine that has an MTU that is not big enough for the data. Because the IP Don't Fragment option is set, + this machine sends an ICMP Datagram Too Big message back to the originator and drops the packet. The rogue router drops the ICMP message and the originator never + gets to discover that it must reduce the fragment size or drop the IP Don't Fragment option from its outgoing data.</span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell">ShortSeq</td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" id="shortseq" name="shortseq" <?php if (isset($pconfig['shortseq'])) echo "checked"; ?>> <?= gettext("Disable shortseq (enabled by default)."); ?> + <br/> <span class="vexpl"><?= gettext("This option is only meaningful if multi-link PPP is negotiated. It proscribes shorter multi-link fragment headers, saving two bytes on every frame. + It is not necessary to disable this for connections that are not multi-link."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell">ACFComp</td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" id="acfcomp" name="acfcomp" <?php if (isset($pconfig['acfcomp'])) echo "checked"; ?>> <?= gettext("Disable acfcomp(compression) (enabled by default)."); ?> + <br/> <span class="vexpl"><?= gettext("Address and control field compression. This option only applies to asynchronous link types. It saves two bytes per frame."); ?></span> + </td> + </tr> + <tr> + <td width="22%" valign="top" class="vncell">ProtoComp</td> + <td width="78%" class="vtable"> + <input type="checkbox" value="on" id="protocomp" name="protocomp" <?php if (isset($pconfig['protocomp'])) echo "checked"; ?>> <?= gettext("Disable protocomp(compression) (enabled by default)."); ?> + <br/> <span class="vexpl"><?= gettext("Protocol field compression. This option saves one byte per frame for most frames."); ?></span> + </td> + </tr> + + <?php for($i=0; $i < $port_count; $i++) : ?> + <tr style="display:none" id="link<?=$i;?>"> + <td width="22%" valign="top" id="linklabel<?=$i;?>" class="vncell"> Link Parameters</td> + <td class="vtable"> + <table name="link_parameters" border="0" cellpadding="6" cellspacing="0"> + <tr> + <td width="22%" id="bwlabel<?=$i;?>" valign="top"class="vncell"> Bandwidth</td> + <td width="78%" class="vtable"> + <br/><input name="bandwidth[]" id="bandwidth<?=$i;?>" type="text" class="formfld unknown" size="40" value="<?=htmlspecialchars($pconfig['bandwidth'][$i]);?>"> + <br/> <span class="vexpl">Set Bandwidth for each link ONLY for MLPPP connections and ONLY when links have different bandwidths.</span> + </td> + </tr> + <tr> + <td width="22%" id="mtulabel<?=$i;?>" valign="top" class="vncell"> MTU</td> + <td width="78%" class="vtable"> + <input name="mtu[]" id="mtu<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mtu'][$i]);?>"> + <br> <span class="vexpl">Set MTU for each link if links have different bandwidths, otherwise, mtu will default to 1492.</span> + </td> + </tr> + <tr> + <td width="22%" id="mrulabel<?=$i;?>" valign="top" class="vncell"> MRU</td> + <td width="78%" class="vtable"> + <input name="mru[]" id="mru<?=$i;?>" type="text" class="formfld unknown" size="6" value="<?=htmlspecialchars($pconfig['mru'][$i]);?>"> + <br> <span class="vexpl">Set MRU for each link if links have different bandwidths, otherwise, mru will default to 1492.</span> + </td> + </tr> + </table + </td> + </tr><?php endfor; ?> + <tr> + <td width="22%" valign="top"> </td> + <td width="78%"> + <input name="Submit" type="submit" class="formbtn" value="Save"> + <input type="button" value="Cancel" onclick="history.back()"> + <?php + if (isset($a_ppps[$id]['ptpid'])) + $ptpid = $a_ppps[$id]['ptpid']; + else + $ptpid = uniqid('', true); + ?> + <input name="ptpid" type="hidden" value="<?=$ptpid;?>"> + <?php if (isset($id) && $a_ppps[$id]): ?> + <input name="id" type="hidden" value="<?=$id;?>"> + <?php endif; ?> + </td> + </tr> + </table> +</form> +<?php include("fend.inc"); ?> +</body> +</html>
\ No newline at end of file diff --git a/usr/local/www/interfaces_qinq.php b/usr/local/www/interfaces_qinq.php index 604d778..f25a5dc 100755 --- a/usr/local/www/interfaces_qinq.php +++ b/usr/local/www/interfaces_qinq.php @@ -98,9 +98,9 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", true, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[6] = array("GRE", false, "interfaces_gre.php"); - $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); diff --git a/usr/local/www/interfaces_vlan.php b/usr/local/www/interfaces_vlan.php index 0adfa7d..cd8975c 100755 --- a/usr/local/www/interfaces_vlan.php +++ b/usr/local/www/interfaces_vlan.php @@ -92,9 +92,9 @@ include("head.inc"); $tab_array[2] = array("Wireless", false, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", true, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); - $tab_array[6] = array("GRE", false, "interfaces_gre.php"); - $tab_array[7] = array("GIF", false, "interfaces_gif.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); + $tab_array[6] = array("GRE", false, "interfaces_gre.php"); + $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); $tab_array[9] = array("LAGG", false, "interfaces_lagg.php"); display_top_tabs($tab_array); diff --git a/usr/local/www/interfaces_wireless.php b/usr/local/www/interfaces_wireless.php index f833fba..42fd149 100644 --- a/usr/local/www/interfaces_wireless.php +++ b/usr/local/www/interfaces_wireless.php @@ -90,7 +90,7 @@ include("head.inc"); $tab_array[2] = array("Wireless", true, "interfaces_wireless.php"); $tab_array[3] = array("VLANs", false, "interfaces_vlan.php"); $tab_array[4] = array("QinQs", false, "interfaces_qinq.php"); - $tab_array[5] = array("PPP", false, "interfaces_ppp.php"); + $tab_array[5] = array("PPPs", false, "interfaces_ppps.php"); $tab_array[6] = array("GRE", false, "interfaces_gre.php"); $tab_array[7] = array("GIF", false, "interfaces_gif.php"); $tab_array[8] = array("Bridges", false, "interfaces_bridge.php"); diff --git a/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js b/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js new file mode 100644 index 0000000..20d0fdd --- /dev/null +++ b/usr/local/www/javascript/interfaces_ppps_edit/ppps_edit.js @@ -0,0 +1,160 @@ + +function update_select_list(new_options, select_list){ + var option_array = new_options.split("|"); + var i = 0; + select_list.length = 0; + for(var j=0; j < option_array.length-1; j++){ + var option = option_array[j].split(","); + var selected = Boolean(parseInt(option[2])); + select_list[j] = new Option(option[0], option[1], false, selected); + //for testing and debugging + //select_list.options[option_array.length-1+j] = new Option(option[2].toString() +" "+ selected.toString()); + //select_list.options[option_array.length-1+j] = new Option("Link Label: " + linklabel + " Label Text:" + label_text); + } + show_hide_linkfields(select_list); +} + +function clear_selected(list_name){ + var select_list = document.iform[list_name]; + for(var j=0; j < select_list.options.length; j++){ + select_list.options[j].selected = 0; + } +} + +function show_hide_linkfields(options){ + var select_count = 0; + var port_count = parseInt($('port_count').innerHTML); + for(var j=0; j < port_count; j++){ + var count = j.toString(); + var link = "link" + count; + var ipfields = "ipfields" + count; + var subnet = "subnet" + count; + $(ipfields,link).invoke('hide'); + $(subnet).disabled = true; + } + for(var j=0; j < options.length; j++){ + var count = select_count.toString(); + var type = $('type').value; + var link = "link" + count; + var lnklabel = "linklabel" + count; + var bw = "bandwidth" + count; + var bwlabel = "bwlabel" + count; + var mtu = "mtu" + count; + var mru = "mru" + count; + var ipfields = "ipfields" + count; + var localip = "localip" + count; + var localiplabel = "localiplabel" + count; + var subnet = "subnet" + count; + var gateway = "gateway" + count; + var gatewaylabel = "gatewaylabel" + count; + /* + $(ipfields,link).invoke('hide'); + $(bw).name = "bandwidth[]"; + $(mtu).name = "mtu[]"; + $(mru).name = "mru[]"; + $(localip).name = "localip[]"; + $(subnet).name = "subnet[]"; + $(subnet).disabled = true; + $(gateway).name = "gateway[]"; + */ + if (options[j].selected){ + $(lnklabel).innerHTML = "Link Parameters (" + options[j].value + ")"; + $(bwlabel).innerHTML = "Bandwidth (" + options[j].value + ")"; + $(bw).name = "bandwidth[" + options[j].value + "]"; + $(mtu).name = "mtu[" + options[j].value + "]"; + $(mru).name = "mru[" + options[j].value + "]"; + $(localiplabel).innerHTML = "Local IP (" + options[j].value + ")"; + $(gatewaylabel).innerHTML = "Gateway (" + options[j].value + ")"; + $(localip).name = "localip[" + options[j].value + "]"; + $(subnet).name = "subnet[" + options[j].value + "]"; + $(gateway).name = "gateway[" + options[j].value + "]"; + if (type == 'pptp' || type == 'ppp' || type == 'l2tp'){ + $(ipfields).show(); + if (type == 'pptp' || type == 'l2tp'){ + $(subnet).disabled = false; + } + } + $(link).show(); + select_count++; + } + } +} + + +function updateType(t){ + var serialports = $('serialports').innerHTML; + var ports = $('ports').innerHTML; + var select_list = document.iform["interfaces[]"].options; + switch(t) { + case "select": { + $('ppp','pppoe','pptp','prefil_ppp').invoke('hide'); + select_list.length = 0; + select_list[0] = new Option("Select Link Type First",""); + break; + } + case "ppp": { + update_select_list(serialports, select_list); + $('select','pppoe','pptp').invoke('hide'); + $('prefil_ppp').show(); + break; + } + case "pppoe": { + update_select_list(ports, select_list); + $('select','ppp','pptp','prefil_ppp').invoke('hide'); + break; + } + case "l2tp": { + t = "pptp"; + } + case "pptp": { + update_select_list(ports, select_list); + $('select','ppp','pppoe','prefil_ppp').invoke('hide'); + break; + } + default: + select_list.length = 0; + select_list[0] = new Option("Select Link Type First",""); + break; + } + if (t != ''){ + $(t).show(); + } +} + +function show_reset_settings(reset_type) { + if (reset_type == 'preset') { + Effect.Appear('pppoepresetwrap', { duration: 0.0 }); + Effect.Fade('pppoecustomwrap', { duration: 0.0 }); + } + else if (reset_type == 'custom') { + Effect.Appear('pppoecustomwrap', { duration: 0.0 }); + Effect.Fade('pppoepresetwrap', { duration: 0.0 }); + } else { + Effect.Fade('pppoecustomwrap', { duration: 0.0 }); + Effect.Fade('pppoepresetwrap', { duration: 0.0 }); + } +} +function prefill_att() { + $('initstr').value = "Q0V1E1S0=0&C1&D2+FCLASS=0"; + $('apn').value = "ISP.CINGULAR"; + $('apnum').value = "1"; + $('phone').value = "*99#"; + $('username').value = "att"; + $('password').value = "att"; +} +function prefill_sprint() { + $('initstr').value = "E1Q0"; + $('apn').value = ""; + $('apnum').value = ""; + $('phone').value = "#777"; + $('username').value = "sprint"; + $('password').value = "sprint"; +} +function prefill_vzw() { + $('initstr').value = "E1Q0s7=60"; + $('apn').value = ""; + $('apnum').value = ""; + $('phone').value = "#777"; + $('username').value = "123@vzw3g.com"; + $('password').value = "vzw"; +} |