All pastes #716225 Raw Edit

Unnamed

public text v1 · immutable
#716225 ·published 2007-09-26 17:05 UTC
rendered paste body
#!/usr/bin/webif-page
<?
. "/usr/lib/webif/webif.sh"
###################################################################
# WAN and LAN configuration page
#
# Description:
#	Configures basic WAN and LAN interface settings.
#
# Author(s) [in order of work date]:
#       Original webif authors of wan.sh and lan.sh
#	Jeremy Collake <jeremy.collake@gmail.com>
#	Travis Kemen <kemen04@gmail.com>
#
# Major revisions:
#
# UCI variables referenced:
#   todo
# Configuration files referenced:
#   none
#

#Add new network
if [ "$FORM_button_add_network" != "" ]; then
	if [ "$FORM_add_network" = "" ]; then
		append validate_error "string|<h3>@TR<<Please add a network name>></h3><br />"
	else
		uci_add "network" "interface" "$FORM_add_network"
		uci_set "network" "$FORM_add_network" "proto" "none"
		submit="0"
	fi
fi

#remove network
if ! empty "$FORM_remove_network"; then
	uci_remove "network" "$FORM_remove_network"
fi

config_cb() {
config_get TYPE "$CONFIG_SECTION" TYPE
case "$TYPE" in
        interface)
	        append network "$CONFIG_SECTION" "$N"
        ;;
esac
}
uci_load network
network=$(echo "$network" |uniq)

WWAN_COUNTRY_LIST=$(
		awk '	BEGIN{FS=":"}
			$1 ~ /[ \t]*#/ {next}
			{print "option|" $1 "|@TR<<" $2 ">>"}' < /usr/lib/webif/apn.csv
	)
	JS_APN=$(
		awk '	BEGIN{FS=":"}
			$1 ~ /[ \t]*#/ {next}
			{print "	apnDB." $1 " = new Object;"
			 print "	apnDB." $1 ".name = \"" $3 "\";"
			 print "	apnDB." $1 ".user = \"" $4 "\";"
			 print "	apnDB." $1 ".pass = \"" $5 "\";\n"}' < /usr/lib/webif/apn.csv
	)
append JS_APN_DB "$JS_APN" "$N"

header "Network" "Networks" "@TR<<Network Configuration>>" ' onload="modechange()" ' "$SCRIPT_NAME"
for interface in $network; do
	config_get delete_check $interface proto
	if [ "$interface" != "loopback" ]; then
	if [ "$delete_check" != "" ]; then
	if empty "$FORM_submit"; then
		config_get FORM_proto $interface proto
		config_get FORM_type $interface type
		config_get FORM_ipaddr $interface ipaddr
		config_get FORM_netmask $interface netmask
		config_get FORM_gateway $interface gateway
		config_get FORM_pptp_server $interface server
		config_get FORM_service $interface service
		config_get FORM_pincode $interface pincode
		config_get FORM_country $interface country
		config_get FORM_apn $interface apn
		config_get FORM_username $interface username
		config_get FORM_passwd $interface password
		config_get FORM_mtu $interface mtu
		config_get FORM_ppp_redial $interface redial
		config_get FORM_idletime $interface keepalive
		config_get FORM_redialperiod $interface redialperiod
		config_get FORM_vci $interface vci
		config_get FORM_vpi $interface vpi
	else
		eval FORM_proto="\$FORM_${interface}_proto"
		eval FORM_type="\$FORM_${interface}_type"
		eval FORM_ipaddr="\$FORM_${interface}_ipaddr"
		eval FORM_netmask="\$FORM_${interface}_netmask"
		eval FORM_gateway="\$FORM_${interface}_gateway"
		eval FORM_pptp_server="\$FORM_${interface}_pptp_server"
		eval FORM_service="\$FORM_${interface}_service"
		eval FORM_pincode="\$FORM_${interface}_pincode"
		eval FORM_country="\$FORM_${interface}_country"
		eval FORM_apn="\$FORM_${interface}_apn"
		eval FORM_username="\$FORM_${interface}_username"
		eval FORM_passwd="\$FORM_${interface}_passwd"
		eval FORM_mtu="\$FORM_${interface}_mtu"
		eval FORM_ppp_redial="\$FORM_${interface}_ppp_redial"
		eval FORM_keepalive="\$FORM_${interface}_keepalive"
		eval FORM_redialperiod="\$FORM_${interface}_redialperiod"
		eval FORM_vci="\$FORM_${interface}_vci"
		eval FORM_vpi="\$FORM_${interface}_vpi"
	fi
	config_get FORM_dns $interface dns
	eval FORM_dnsadd="\$FORM_${interface}_dnsadd"
	eval FORM_dnsremove="\$FORM_${interface}_dnsremove"
	eval FORM_dnssubmit="\$FORM_${interface}_dnssubmit"
	LISTVAL="$FORM_dns"
	handle_list "$FORM_dnsremove" "$FORM_dnsadd" "$FORM_dnssubmit" 'ip|FORM_dnsadd|@TR<<DNS Address>>|required' && {
		FORM_dns="$LISTVAL"
		uci_set "network" "$interface" "dns" "$FORM_dns"
	}
	FORM_dnsadd=${FORM_dnsadd:-""}
	config_get FORM_dns $interface dns

	network_options="start_form|$interface @TR<<Configuration>>
	field|@TR<<Connection Type>>
	select|${interface}_proto|$FORM_proto
	option|none|@TR<<Disabled>>
	option|static|@TR<<Static IP>>
	option|dhcp|@TR<<DHCP>>
	option|pppoe|@TR<<PPPOE>>
	option|pppoa|@TR<<PPPOA>>
	option|pptp|@TR<<PPTP>>
	option|wwan|@TR<<WWAN>>

	field|@TR<<Type>>
	select|${interface}_type|$FORM_type
	option||@TR<<None>>
	option|bridge|@TR<<Bridged>>
	end_form

	start_form||${interface}_ip_settings|hidden
	field|@TR<<IP Address>>|field_${interface}_ipaddr|hidden
	text|${interface}_ipaddr|$FORM_ipaddr
	field|@TR<<Netmask>>|field_${interface}_netmask|hidden
	text|${interface}_netmask|$FORM_netmask
	field|@TR<<Default Gateway>>|field_${interface}_gateway|hidden
	text|${interface}_gateway|$FORM_gateway
	field|@TR<<PPTP Server IP>>|field_${interface}_pptp_server|hidden
	text|${interface}_pptp_server|$FORM_pptp_server
	helpitem|WAN IP Settings
	helptext|Helptext WAN IP Settings#IP Settings are optional for DHCP and PPTP. They are used as defaults in case the DHCP server is unavailable.
	end_form
	
	start_form||${interface}_ppp_settings|hidden
	field|@TR<<Redial Policy>>|${interface}_redial|hidden
	select|${interface}_ppp_redial|$FORM_ppp_redial
	option|demand|@TR<<Connect on Demand>>
	option|persist|@TR<<Keep Alive>>
	field|@TR<<Maximum Idle Time>>|${interface}_demand_idletime|hidden
	text|${interface}_ppp_idletime|$FORM_ppp_idletime
	helpitem|Maximum Idle Time
	helptext|Helptext Idle Time#The number of seconds without internet traffic that the router should wait before disconnecting from the Internet (Connect on Demand only)
	field|@TR<<Redial Timeout>>|${interface}_persist_redialperiod|hidden
	text|${interface}_ppp_redialperiod|$FORM_ppp_redialperiod
	helpitem|Redial Timeout
	helptext|Helptext Redial Timeout#The number of seconds to wait after receiving no response from the provider before trying to reconnect
	field|@TR<<Username>>|field_${interface}_username|hidden
	text|${interface}_username|$FORM_username
	field|@TR<<Password>>|field_${interface}_passwd|hidden
	password|${interface}_passwd|$FORM_passwd
	field|@TR<<MTU>>|field_${interface}_mtu|hidden
	text|${interface}_mtu|$FORM_mtu
	field|VCI|field_${interface}_vci|hidden
	text|${interface}_vci|$FORM_vci
	field|VPI|field_${interface}_vpi|hidden
	text|${interface}_vpi|$FORM_vpi
	end_form

	start_form|$interface @TR<<DNS Servers>>|field_${interface}_dns|hidden
	listedit|${interface}_dns|$SCRIPT_NAME?${interface}_proto=static&amp;|$FORM_dns|$FORM_dnsadd
	end_form

	start_form||${interface}_wwan_service_field|hidden
	field|@TR<<Connection Type>>
	select|${interface}_service|$FORM_service
	option|umts_first|@TR<<UMTS first>>
	option|umts_only|@TR<<UMTS only>>
	option|gprs_only|@TR<<GPRS only>>
	field|@TR<<PIN Code>>
	password|${interface}_pincode|$FORM_pincode
	field|@TR<<Select Network>>
	onchange|setAPN
	select|${interface}_country|$FORM_country
	$WWAN_COUNTRY_LIST
	onchange|
	field|@TR<<APN Name>>
	text|${interface}_apn|$FORM_apn
	field|@TR<<Username>>
	text|${interface}_wwan_username|$FORM_username
	field|@TR<<Password>>
	text|${interface}_wwan_passwd|$FORM_passwd
	field|@TR<<MTU>>
	text|${interface}_wwan_mtu|$FORM_mtu
	end_form
	onchange|modechange"

	append forms "$network_options" "$N"
	
	remove_network_form="string|<a href=\"$SCRIPT_NAME?remove_network=$interface\">@TR<<Remove Network>> $interface</a>"
	append forms "$remove_network_form" "$N"

	###################################################################
	# set JavaScript
	javascript_forms="
		v = (isset('${interface}_proto', 'pppoe') || isset('${interface}_proto', 'pptp') || isset('${interface}_proto', 'pppoa'));
		set_visible('${interface}_ppp_settings', v);
		set_visible('field_${interface}_username', v);
		set_visible('field_${interface}_passwd', v);
		set_visible('${interface}_redial', v);
		set_visible('field_${interface}_mtu', v);
		set_visible('${interface}_demand_idletime', v && isset('${interface}_redial', 'demand'));
		set_visible('${interface}_persist_redialperiod', v && !isset('${interface}_redial', 'demand'));
		
		v = (isset('${interface}_proto', 'static') || isset('${interface}_proto', 'pptp') || isset('${interface}_proto', 'dhcp'));
		set_visible('${interface}_ip_settings', v);
		set_visible('field_${interface}_ipaddr', v);
		set_visible('field_${interface}_netmask', v);
	
		v = (isset('${interface}_proto', 'static'));
		set_visible('field_${interface}_gateway', v);
		set_visible('field_${interface}_dns', v);
	
		v = (isset('${interface}_proto', 'pptp'));
		set_visible('field_${interface}_pptp_server', v);
		
		v = (isset('${interface}_proto', 'pppoa'));
		set_visible('field_${interface}_vci', v);
		set_visible('field_${interface}_vpi', v);
		
		v = (isset('${interface}_proto', 'wwan'));
		set_visible('${interface}_wwan_service_field', v);"
	append js "$javascript_forms" "$N"
	
	wwan_js="document.getElementById("${interface}_apn").value = apnDB[element.value].name;
	document.getElementById("${interface}_wwan_username").value = apnDB[element.value].user;
	document.getElementById("${interface}_wwan_passwd").value = apnDB[element.value].pass;"
	append JS_APN_DB "$wwan_js" "$N"

	append validate_forms "ip|FORM_${interface}_ipaddr|$interface @TR<<IP Address>>||$FORM_ipaddr" "$N"
	append validate_forms "netmask|FORM_wan_netmask|$interface @TR<<WAN Netmask>>||$FORM_netmask" "$N"
	append validate_forms "ip|FORM_wan_gateway|$interface @TR<<Default Gateway>>||$FORM_gateway" "$N"
	append validate_forms "ip|FORM_pptp_server_ip|$interface @TR<<PPTP Server IP>>||$FORM_pptp_server" "$N"
	fi
	fi
done

add_network_form="
start_form
field|@TR<<Add Network>>|field_add_network
text|add_network|$FORM_add_network
submit|button_add_network| @TR<<Add Network>> |
end_form"
append forms "$add_network_form" "$N"

if [ "$submit" = "0" ]; then
	FORM_submit=""
fi

if ! empty "$FORM_submit"; then
	SAVED=1
	validate <<EOF
$validate_forms
EOF
	equal "$?" 0 && {
		for interface in $network; do
			if [ "$interface" != "loopback" ]; then
				eval FORM_proto="\$FORM_${interface}_proto"
				eval FORM_type="\$FORM_${interface}_type"
				eval FORM_ipaddr="\$FORM_${interface}_ipaddr"
				eval FORM_netmask="\$FORM_${interface}_netmask"
				eval FORM_gateway="\$FORM_${interface}_gateway"
				eval FORM_pptp_server="\$FORM_${interface}_pptp_server"
				eval FORM_service="\$FORM_${interface}_service"
				eval FORM_pincode="\$FORM_${interface}_pincode"
				eval FORM_country="\$FORM_${interface}_country"
				eval FORM_apn="\$FORM_${interface}_apn"
				eval FORM_username="\$FORM_${interface}_username"
				eval FORM_passwd="\$FORM_${interface}_passwd"
				eval FORM_mtu="\$FORM_${interface}_mtu"
				eval FORM_ppp_redial="\$FORM_${interface}_ppp_redial"
				eval FORM_keepalive="\$FORM_${interface}_keepalive"
				eval FORM_redialperiod="\$FORM_${interface}_redialperiod"
				eval FORM_vci="\$FORM_${interface}_vci"
				eval FORM_vpi="\$FORM_${interface}_vpi"

				uci_set "network" "$interface" "proto" "$FORM_proto"
				uci_set "network" "$interface" "type" "$FORM_type"
				case "$FORM_proto" in
					pptp) uci_set "network" "$interface" "server" "$FORM_pptp_server" ;;
					wwan)
						if ! equal "$FORM_pincode" "-@@-"; then
							uci_set "network" "$interface" "pincode" "$FORM_pincode"
						fi
						uci_set "network" "$interface" "service" "$FORM_service"
						uci_set "network" "$interface" "country" "$FORM_country"
						uci_set "network" "$interface" "apn" "$FORM_apn" ;;
				esac

				uci_set "network" "$interface" "ipaddr" "$FORM_ipaddr"
				uci_set "network" "$interface" "netmask" "$FORM_netmask"
				uci_set "network" "$interface" "gateway" "$FORM_gateway"
				uci_set "network" "$interface" "username" "$FORM_username"
				uci_set "network" "$interface" "password" "$FORM_passwd"
				uci_set "network" "$interface" "vpi" "$FORM_vpi"
				uci_set "network" "$interface" "vci" "$FORM_vci"
			fi
		done
	}
fi


#####################################################################
# modechange script
#
cat <<EOF
<script type="text/javascript" src="/webif.js"></script>
<script type="text/javascript">
<!--
function setAPN(element) {
	var apnDB = new Object();
	$JS_APN_DB
}
function modechange()
{
	var v;
	$js

	hide('save');
	show('save');
}
-->
</script>

EOF


display_form <<EOF
onchange|modechange
$validate_error
$forms
EOF

footer ?>
<!--
##WEBIF:name:Network:101:Networks
-->