pppd: split files into netifd and non-netifd files, move the netifd ppp.sh file to the pppd package
SVN-Revision: 31041
This commit is contained in:
		| @@ -1,183 +0,0 @@ | |||||||
| #!/bin/sh |  | ||||||
|  |  | ||||||
| [ -x /usr/sbin/pppd ] || exit 0 |  | ||||||
|  |  | ||||||
| [ -n "$INCLUDE_ONLY" ] || { |  | ||||||
| 	. /etc/functions.sh |  | ||||||
| 	. ../netifd-proto.sh |  | ||||||
| 	init_proto "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ppp_generic_init_config() { |  | ||||||
| 	proto_config_add_string "username" |  | ||||||
| 	proto_config_add_string "password" |  | ||||||
| 	proto_config_add_string "keepalive" |  | ||||||
| 	proto_config_add_int "demand" |  | ||||||
| 	proto_config_add_string "pppd_options" |  | ||||||
| 	proto_config_add_string "connect" |  | ||||||
| 	proto_config_add_string "disconnect" |  | ||||||
| 	proto_config_add_boolean "defaultroute" |  | ||||||
| 	proto_config_add_boolean "peerdns" |  | ||||||
| 	proto_config_add_boolean "ipv6" |  | ||||||
| 	proto_config_add_int "mtu" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ppp_generic_setup() { |  | ||||||
| 	local config="$1"; shift |  | ||||||
|  |  | ||||||
| 	json_get_var ipv6 ipv6 |  | ||||||
| 	[ "$ipv6" = 1 ] || ipv6="" |  | ||||||
|  |  | ||||||
| 	json_get_var peerdns peerdns |  | ||||||
| 	[ "$peerdns" = 0 ] && peerdns="" || peerdns="1" |  | ||||||
|  |  | ||||||
| 	json_get_var defaultroute defaultroute |  | ||||||
| 	if [ "$defaultroute" = 1 ]; then |  | ||||||
| 		defaultroute="defaultroute replacedefaultroute"; |  | ||||||
| 	else |  | ||||||
| 		defaultroute="nodefaultroute" |  | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	json_get_var demand demand |  | ||||||
| 	if [ "${demand:-0}" -gt 0 ]; then |  | ||||||
| 		demand="precompiled-active-filter /etc/ppp/filter demand idle $demand" |  | ||||||
| 	else |  | ||||||
| 		demand="persist" |  | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	[ -n "$mtu" ] || json_get_var mtu mtu |  | ||||||
|  |  | ||||||
| 	json_get_var keepalive keepalive |  | ||||||
| 	local interval="${keepalive##*[, ]}" |  | ||||||
| 	[ "$interval" != "$keepalive" ] || interval=5 |  | ||||||
|  |  | ||||||
| 	json_get_var username username |  | ||||||
| 	json_get_var password password |  | ||||||
|  |  | ||||||
| 	[ -n "$connect" ] || json_get_var connect connect |  | ||||||
| 	[ -n "$disconnect" ] || json_get_var disconnect disconnect |  | ||||||
| 	json_get_var pppd_options pppd_options |  | ||||||
|  |  | ||||||
| 	proto_run_command "$config" /usr/sbin/pppd \ |  | ||||||
| 		nodetach ipparam "$config" \ |  | ||||||
| 		ifname "${proto:-ppp}-$config" \ |  | ||||||
| 		${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \ |  | ||||||
| 		${ipv6:++ipv6} $defaultroute \ |  | ||||||
| 		${peerdns:+usepeerdns} \ |  | ||||||
| 		$demand maxfail 1 \ |  | ||||||
| 		${username:+user "$username" password "$password"} \ |  | ||||||
| 		${connect:+connect "$connect"} \ |  | ||||||
| 		${disconnect:+disconnect "$disconnect"} \ |  | ||||||
| 		ip-up-script /lib/netifd/ppp-up \ |  | ||||||
| 		ipv6-up-script /lib/netifd/ppp-up \ |  | ||||||
| 		ip-down-script /lib/netifd/ppp-down \ |  | ||||||
| 		ipv6-down-script /lib/netifd/ppp-down \ |  | ||||||
| 		${mtu:+mtu $mtu mru $mtu} \ |  | ||||||
| 		$pppd_options "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| ppp_generic_teardown() { |  | ||||||
| 	local interface="$1" |  | ||||||
|  |  | ||||||
| 	case "$ERROR" in |  | ||||||
| 		11|19) |  | ||||||
| 			proto_notify_error "$interface" AUTH_FAILED |  | ||||||
| 			proto_block_restart "$interface" |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| 	proto_kill_command "$interface" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # PPP on serial device |  | ||||||
|  |  | ||||||
| proto_ppp_init_config() { |  | ||||||
| 	proto_config_add_string "device" |  | ||||||
| 	ppp_generic_init_config |  | ||||||
| 	no_device=1 |  | ||||||
| 	available=1 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_ppp_setup() { |  | ||||||
| 	local config="$1" |  | ||||||
|  |  | ||||||
| 	json_get_var device device |  | ||||||
| 	ppp_generic_setup "$config" "$device" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_ppp_teardown() { |  | ||||||
| 	ppp_generic_teardown "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoe_init_config() { |  | ||||||
| 	ppp_generic_init_config |  | ||||||
| 	proto_config_add_string "ac" |  | ||||||
| 	proto_config_add_string "service" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoe_setup() { |  | ||||||
| 	local config="$1" |  | ||||||
| 	local iface="$2" |  | ||||||
|  |  | ||||||
| 	for module in slhc ppp_generic pppox pppoe; do |  | ||||||
| 		/sbin/insmod $module 2>&- >&- |  | ||||||
| 	done |  | ||||||
|  |  | ||||||
| 	json_get_var mtu mtu |  | ||||||
| 	mtu="${mtu:-1492}" |  | ||||||
|  |  | ||||||
| 	json_get_var ac ac |  | ||||||
| 	json_get_var service service |  | ||||||
|  |  | ||||||
| 	ppp_generic_setup "$config" \ |  | ||||||
| 		plugin rp-pppoe.so \ |  | ||||||
| 		${ac:+rp_pppoe_ac "$ac"} \ |  | ||||||
| 		${service:+rp_pppoe_service "$service"} \ |  | ||||||
| 		"nic-$iface" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoe_teardown() { |  | ||||||
| 	ppp_generic_teardown "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoa_init_config() { |  | ||||||
| 	ppp_generic_init_config |  | ||||||
| 	proto_config_add_int "atmdev" |  | ||||||
| 	proto_config_add_int "vci" |  | ||||||
| 	proto_config_add_int "vpi" |  | ||||||
| 	proto_config_add_string "encaps" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoa_setup() { |  | ||||||
| 	local config="$1" |  | ||||||
| 	local iface="$2" |  | ||||||
|  |  | ||||||
| 	for module in slhc ppp_generic pppox pppoatm; do |  | ||||||
| 		/sbin/insmod $module 2>&- >&- |  | ||||||
| 	done |  | ||||||
|  |  | ||||||
| 	json_get_var atmdev atmdev |  | ||||||
| 	json_get_var vci vci |  | ||||||
| 	json_get_var vpi vpi |  | ||||||
|  |  | ||||||
| 	json_get_var encaps encaps |  | ||||||
| 	case "$encaps" in |  | ||||||
| 		1|vc) encaps="vc-encaps" ;; |  | ||||||
| 		*) encaps="llc-encaps" ;; |  | ||||||
| 	esac |  | ||||||
|  |  | ||||||
| 	ppp_generic_setup "$config" \ |  | ||||||
| 		plugin pppoatm.so \ |  | ||||||
| 		${atmdev:+$atmdev.}${vpi:-8}.${vci:-35} \ |  | ||||||
| 		${encaps} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| proto_pppoa_teardown() { |  | ||||||
| 	ppp_generic_teardown "$@" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| [ -n "$INCLUDE_ONLY" ] || { |  | ||||||
| 	add_protocol ppp |  | ||||||
| 	[ -f /usr/lib/pppd/*/rp-pppoe.so ] && add_protocol pppoe |  | ||||||
| 	[ -f /usr/lib/pppd/*/pppoatm.so ] && add_protocol pppoa |  | ||||||
| } |  | ||||||
|  |  | ||||||
| @@ -156,23 +156,40 @@ define Build/InstallDev | |||||||
| 	$(CP) $(PKG_INSTALL_DIR)/include/pppd $(1)/usr/include/ | 	$(CP) $(PKG_INSTALL_DIR)/include/pppd $(1)/usr/include/ | ||||||
| endef | endef | ||||||
|  |  | ||||||
|  | ifneq ($(CONFIG_PACKAGE_netifd),) | ||||||
|  |   define Package/ppp/script_install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/netifd/proto | ||||||
|  | 	$(INSTALL_BIN) ./files/ppp.sh $(1)/lib/netifd/proto/ | ||||||
|  |   endef | ||||||
|  | else | ||||||
|  |   define Package/ppp/script_install | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/network | ||||||
|  | 	$(INSTALL_BIN) ./files.old/ppp.sh $(1)/lib/network/ | ||||||
|  | 	$(INSTALL_BIN) ./files.old/etc/ppp/ip-up $(1)/etc/ppp/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/etc/ppp/ip-up.d | ||||||
|  | 	$(INSTALL_BIN) ./files.old/etc/ppp/ip-down $(1)/etc/ppp/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/etc/ppp/ip-down.d | ||||||
|  | 	$(INSTALL_BIN) ./files.old/etc/ppp/ipv6-up $(1)/etc/ppp/ | ||||||
|  | 	$(INSTALL_BIN) ./files.old/etc/ppp/ipv6-down $(1)/etc/ppp/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/network | ||||||
|  | 	$(INSTALL_BIN) ./files.old/pppoe.sh $(1)/lib/network/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/lib/network | ||||||
|  | 	$(INSTALL_BIN) ./files.old/pppoa.sh $(1)/lib/network/ | ||||||
|  | 	$(INSTALL_DIR) $(1)/etc/hotplug.d/atm | ||||||
|  | 	$(INSTALL_DATA) ./files.old/etc/hotplug.d/atm/20-atm-modem $(1)/etc/hotplug.d/atm/ | ||||||
|  |   endef | ||||||
|  | endif | ||||||
|  |  | ||||||
| define Package/ppp/install | define Package/ppp/install | ||||||
| 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | ||||||
| 	$(INSTALL_DIR) $(1)/usr/sbin | 	$(INSTALL_DIR) $(1)/usr/sbin | ||||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/pppd $(1)/usr/sbin/ | 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/pppd $(1)/usr/sbin/ | ||||||
| 	$(INSTALL_DIR) $(1)/lib/network |  | ||||||
| 	$(INSTALL_BIN) ./files/ppp.sh $(1)/lib/network/ |  | ||||||
| 	$(INSTALL_DIR) $(1)/etc/ppp | 	$(INSTALL_DIR) $(1)/etc/ppp | ||||||
| 	$(INSTALL_CONF) ./files/etc/ppp/chap-secrets $(1)/etc/ppp/ | 	$(INSTALL_CONF) ./files/etc/ppp/chap-secrets $(1)/etc/ppp/ | ||||||
| 	$(INSTALL_DATA) ./files/etc/ppp/filter $(1)/etc/ppp/ | 	$(INSTALL_DATA) ./files/etc/ppp/filter $(1)/etc/ppp/ | ||||||
| 	$(INSTALL_BIN) ./files/etc/ppp/ip-up $(1)/etc/ppp/ |  | ||||||
| 	$(INSTALL_DIR) $(1)/etc/ppp/ip-up.d |  | ||||||
| 	$(INSTALL_BIN) ./files/etc/ppp/ip-down $(1)/etc/ppp/ |  | ||||||
| 	$(INSTALL_DIR) $(1)/etc/ppp/ip-down.d |  | ||||||
| 	$(INSTALL_BIN) ./files/etc/ppp/ipv6-up $(1)/etc/ppp/ |  | ||||||
| 	$(INSTALL_BIN) ./files/etc/ppp/ipv6-down $(1)/etc/ppp/ |  | ||||||
| 	$(INSTALL_DATA) ./files/etc/ppp/options $(1)/etc/ppp/ | 	$(INSTALL_DATA) ./files/etc/ppp/options $(1)/etc/ppp/ | ||||||
| 	ln -sf /tmp/resolv.conf.ppp $(1)/etc/ppp/resolv.conf | 	ln -sf /tmp/resolv.conf.ppp $(1)/etc/ppp/resolv.conf | ||||||
|  | 	$(Package/ppp/script_install) | ||||||
| endef | endef | ||||||
| Package/ppp-multilink/install=$(Package/ppp/install) | Package/ppp-multilink/install=$(Package/ppp/install) | ||||||
|  |  | ||||||
| @@ -180,18 +197,12 @@ define Package/ppp-mod-pppoa/install | |||||||
| 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | ||||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/pppoatm.so \ | 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/pppoatm.so \ | ||||||
| 		$(1)/usr/lib/pppd/$(PKG_VERSION)/ | 		$(1)/usr/lib/pppd/$(PKG_VERSION)/ | ||||||
| 	$(INSTALL_DIR) $(1)/lib/network |  | ||||||
| 	$(INSTALL_BIN) ./files/pppoa.sh $(1)/lib/network/ |  | ||||||
| 	$(INSTALL_DIR) $(1)/etc/hotplug.d/atm |  | ||||||
| 	$(INSTALL_DATA) ./files/etc/hotplug.d/atm/20-atm-modem $(1)/etc/hotplug.d/atm/ |  | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Package/ppp-mod-pppoe/install | define Package/ppp-mod-pppoe/install | ||||||
| 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | 	$(INSTALL_DIR) $(1)/usr/lib/pppd/$(PKG_VERSION) | ||||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/rp-pppoe.so \ | 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/lib/pppd/$(PKG_VERSION)/rp-pppoe.so \ | ||||||
| 		$(1)/usr/lib/pppd/$(PKG_VERSION)/ | 		$(1)/usr/lib/pppd/$(PKG_VERSION)/ | ||||||
| 	$(INSTALL_DIR) $(1)/lib/network |  | ||||||
| 	$(INSTALL_BIN) ./files/pppoe.sh $(1)/lib/network/ |  | ||||||
| endef | endef | ||||||
|  |  | ||||||
| define Package/ppp-mod-radius/install | define Package/ppp-mod-radius/install | ||||||
|   | |||||||
							
								
								
									
										145
									
								
								package/ppp/files.old/ppp.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								package/ppp/files.old/ppp.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | |||||||
|  | stop_interface_ppp() { | ||||||
|  | 	local cfg="$1" | ||||||
|  |  | ||||||
|  | 	local proto | ||||||
|  | 	config_get proto "$cfg" proto | ||||||
|  |  | ||||||
|  | 	local link="$proto-$cfg" | ||||||
|  | 	SERVICE_PID_FILE="/var/run/ppp-${link}.pid" \ | ||||||
|  | 	service_stop /usr/sbin/pppd | ||||||
|  |  | ||||||
|  | 	remove_dns "$cfg" | ||||||
|  |  | ||||||
|  | 	local lock="/var/lock/ppp-$link" | ||||||
|  | 	[ -f "$lock" ] && lock -u "$lock" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start_pppd() { | ||||||
|  | 	local cfg="$1"; shift | ||||||
|  |  | ||||||
|  | 	# Workaround for PPPoE service and AC name options, | ||||||
|  | 	# filter out the nic-* argument and append it as last option | ||||||
|  | 	local nic="" | ||||||
|  | 	case "$1" in | ||||||
|  | 		nic-*) nic="$1"; shift ;; | ||||||
|  | 	esac | ||||||
|  |  | ||||||
|  | 	local proto | ||||||
|  | 	config_get proto "$cfg" proto | ||||||
|  |  | ||||||
|  | 	# unique link identifier | ||||||
|  | 	local link="${proto:-ppp}-$cfg" | ||||||
|  |  | ||||||
|  | 	# make sure only one pppd process is started | ||||||
|  | 	lock "/var/lock/ppp-${link}" | ||||||
|  | 	SERVICE_PID_FILE="/var/run/ppp-${link}.pid" \ | ||||||
|  | 	service_check /usr/sbin/pppd && { | ||||||
|  | 		lock -u "/var/lock/ppp-${link}" | ||||||
|  | 		return 0 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	# Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating | ||||||
|  | 	# /dev/ppp fast enough to be used here | ||||||
|  | 	[ -e /dev/ppp ] || mknod /dev/ppp c 108 0 | ||||||
|  |  | ||||||
|  | 	local device | ||||||
|  | 	config_get device "$cfg" device | ||||||
|  |  | ||||||
|  | 	local username | ||||||
|  | 	config_get username "$cfg" username | ||||||
|  |  | ||||||
|  | 	local password | ||||||
|  | 	config_get password "$cfg" password | ||||||
|  |  | ||||||
|  | 	local keepalive | ||||||
|  | 	config_get keepalive "$cfg" keepalive | ||||||
|  |  | ||||||
|  | 	local connect | ||||||
|  | 	config_get connect "$cfg" connect | ||||||
|  |  | ||||||
|  | 	local disconnect | ||||||
|  | 	config_get disconnect "$cfg" disconnect | ||||||
|  |  | ||||||
|  | 	local pppd_options | ||||||
|  | 	config_get pppd_options "$cfg" pppd_options | ||||||
|  |  | ||||||
|  | 	local defaultroute | ||||||
|  | 	config_get_bool defaultroute "$cfg" defaultroute 1 | ||||||
|  | 	[ "$defaultroute" -eq 1 ] && \ | ||||||
|  | 		defaultroute="defaultroute replacedefaultroute" || defaultroute="nodefaultroute" | ||||||
|  |  | ||||||
|  | 	local interval="${keepalive##*[, ]}" | ||||||
|  | 	[ "$interval" != "$keepalive" ] || interval=5 | ||||||
|  |  | ||||||
|  | 	local dns | ||||||
|  | 	config_get dns "$config" dns | ||||||
|  |  | ||||||
|  | 	local has_dns=0 | ||||||
|  | 	local peer_default=1 | ||||||
|  | 	[ -n "$dns" ] && { | ||||||
|  | 		has_dns=1 | ||||||
|  | 		peer_default=0 | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	local peerdns | ||||||
|  | 	config_get_bool peerdns "$cfg" peerdns $peer_default | ||||||
|  |  | ||||||
|  | 	[ "$peerdns" -eq 1 ] && { | ||||||
|  | 		peerdns="usepeerdns" | ||||||
|  | 	} || { | ||||||
|  | 		peerdns="" | ||||||
|  | 		add_dns "$cfg" $dns | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	local demand | ||||||
|  | 	config_get demand "$cfg" demand 0 | ||||||
|  |  | ||||||
|  | 	local demandargs | ||||||
|  | 	[ "$demand" -gt 0 ] && { | ||||||
|  | 		demandargs="precompiled-active-filter /etc/ppp/filter demand idle $demand" | ||||||
|  | 		[ "$has_dns" -eq 0 ] && add_dns "$cfg" 1.1.1.1 | ||||||
|  | 	} || { | ||||||
|  | 		demandargs="persist" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	local ipv6 | ||||||
|  | 	config_get_bool ipv6 "$cfg" ipv6 0 | ||||||
|  | 	[ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6="" | ||||||
|  |  | ||||||
|  | 	SERVICE_DAEMONIZE=1 \ | ||||||
|  | 	SERVICE_WRITE_PID=1 \ | ||||||
|  | 	SERVICE_PID_FILE="/var/run/ppp-$link.pid" \ | ||||||
|  | 	service_start /usr/sbin/pppd "$@" \ | ||||||
|  | 		${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \ | ||||||
|  | 		$demandargs \ | ||||||
|  | 		$peerdns \ | ||||||
|  | 		$defaultroute \ | ||||||
|  | 		${username:+user "$username" password "$password"} \ | ||||||
|  | 		ipparam "$cfg" \ | ||||||
|  | 		ifname "$link" \ | ||||||
|  | 		${connect:+connect "$connect"} \ | ||||||
|  | 		${disconnect:+disconnect "$disconnect"} \ | ||||||
|  | 		${ipv6} \ | ||||||
|  | 		${pppd_options} \ | ||||||
|  | 		nodetach \ | ||||||
|  | 		${nic} | ||||||
|  |  | ||||||
|  | 	lock -u "/var/lock/ppp-${link}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | setup_interface_ppp() { | ||||||
|  | 	local iface="$1" | ||||||
|  | 	local config="$2" | ||||||
|  |  | ||||||
|  | 	local device | ||||||
|  | 	config_get device "$config" device | ||||||
|  |  | ||||||
|  | 	local mtu | ||||||
|  | 	config_get mtu "$config" mtu | ||||||
|  |  | ||||||
|  | 	mtu=${mtu:-1492} | ||||||
|  | 	start_pppd "$config" \ | ||||||
|  | 		mtu $mtu mru $mtu \ | ||||||
|  | 		"$device" | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										276
									
								
								package/ppp/files/ppp.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										276
									
								
								package/ppp/files/ppp.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -1,145 +1,183 @@ | |||||||
| stop_interface_ppp() { | #!/bin/sh | ||||||
| 	local cfg="$1" |  | ||||||
|  |  | ||||||
| 	local proto | [ -x /usr/sbin/pppd ] || exit 0 | ||||||
| 	config_get proto "$cfg" proto |  | ||||||
|  |  | ||||||
| 	local link="$proto-$cfg" | [ -n "$INCLUDE_ONLY" ] || { | ||||||
| 	SERVICE_PID_FILE="/var/run/ppp-${link}.pid" \ | 	. /etc/functions.sh | ||||||
| 	service_stop /usr/sbin/pppd | 	. ../netifd-proto.sh | ||||||
|  | 	init_proto "$@" | ||||||
| 	remove_dns "$cfg" |  | ||||||
|  |  | ||||||
| 	local lock="/var/lock/ppp-$link" |  | ||||||
| 	[ -f "$lock" ] && lock -u "$lock" |  | ||||||
| } | } | ||||||
|  |  | ||||||
| start_pppd() { | ppp_generic_init_config() { | ||||||
| 	local cfg="$1"; shift | 	proto_config_add_string "username" | ||||||
|  | 	proto_config_add_string "password" | ||||||
| 	# Workaround for PPPoE service and AC name options, | 	proto_config_add_string "keepalive" | ||||||
| 	# filter out the nic-* argument and append it as last option | 	proto_config_add_int "demand" | ||||||
| 	local nic="" | 	proto_config_add_string "pppd_options" | ||||||
| 	case "$1" in | 	proto_config_add_string "connect" | ||||||
| 		nic-*) nic="$1"; shift ;; | 	proto_config_add_string "disconnect" | ||||||
| 	esac | 	proto_config_add_boolean "defaultroute" | ||||||
|  | 	proto_config_add_boolean "peerdns" | ||||||
| 	local proto | 	proto_config_add_boolean "ipv6" | ||||||
| 	config_get proto "$cfg" proto | 	proto_config_add_int "mtu" | ||||||
|  |  | ||||||
| 	# unique link identifier |  | ||||||
| 	local link="${proto:-ppp}-$cfg" |  | ||||||
|  |  | ||||||
| 	# make sure only one pppd process is started |  | ||||||
| 	lock "/var/lock/ppp-${link}" |  | ||||||
| 	SERVICE_PID_FILE="/var/run/ppp-${link}.pid" \ |  | ||||||
| 	service_check /usr/sbin/pppd && { |  | ||||||
| 		lock -u "/var/lock/ppp-${link}" |  | ||||||
| 		return 0 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| 	# Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating | ppp_generic_setup() { | ||||||
| 	# /dev/ppp fast enough to be used here | 	local config="$1"; shift | ||||||
| 	[ -e /dev/ppp ] || mknod /dev/ppp c 108 0 |  | ||||||
|  |  | ||||||
| 	local device | 	json_get_var ipv6 ipv6 | ||||||
| 	config_get device "$cfg" device | 	[ "$ipv6" = 1 ] || ipv6="" | ||||||
|  |  | ||||||
| 	local username | 	json_get_var peerdns peerdns | ||||||
| 	config_get username "$cfg" username | 	[ "$peerdns" = 0 ] && peerdns="" || peerdns="1" | ||||||
|  |  | ||||||
| 	local password | 	json_get_var defaultroute defaultroute | ||||||
| 	config_get password "$cfg" password | 	if [ "$defaultroute" = 1 ]; then | ||||||
|  | 		defaultroute="defaultroute replacedefaultroute"; | ||||||
|  | 	else | ||||||
|  | 		defaultroute="nodefaultroute" | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	local keepalive | 	json_get_var demand demand | ||||||
| 	config_get keepalive "$cfg" keepalive | 	if [ "${demand:-0}" -gt 0 ]; then | ||||||
|  | 		demand="precompiled-active-filter /etc/ppp/filter demand idle $demand" | ||||||
|  | 	else | ||||||
|  | 		demand="persist" | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	local connect | 	[ -n "$mtu" ] || json_get_var mtu mtu | ||||||
| 	config_get connect "$cfg" connect |  | ||||||
|  |  | ||||||
| 	local disconnect |  | ||||||
| 	config_get disconnect "$cfg" disconnect |  | ||||||
|  |  | ||||||
| 	local pppd_options |  | ||||||
| 	config_get pppd_options "$cfg" pppd_options |  | ||||||
|  |  | ||||||
| 	local defaultroute |  | ||||||
| 	config_get_bool defaultroute "$cfg" defaultroute 1 |  | ||||||
| 	[ "$defaultroute" -eq 1 ] && \ |  | ||||||
| 		defaultroute="defaultroute replacedefaultroute" || defaultroute="nodefaultroute" |  | ||||||
|  |  | ||||||
|  | 	json_get_var keepalive keepalive | ||||||
| 	local interval="${keepalive##*[, ]}" | 	local interval="${keepalive##*[, ]}" | ||||||
| 	[ "$interval" != "$keepalive" ] || interval=5 | 	[ "$interval" != "$keepalive" ] || interval=5 | ||||||
|  |  | ||||||
| 	local dns | 	json_get_var username username | ||||||
| 	config_get dns "$config" dns | 	json_get_var password password | ||||||
|  |  | ||||||
| 	local has_dns=0 | 	[ -n "$connect" ] || json_get_var connect connect | ||||||
| 	local peer_default=1 | 	[ -n "$disconnect" ] || json_get_var disconnect disconnect | ||||||
| 	[ -n "$dns" ] && { | 	json_get_var pppd_options pppd_options | ||||||
| 		has_dns=1 |  | ||||||
| 		peer_default=0 |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	local peerdns | 	proto_run_command "$config" /usr/sbin/pppd \ | ||||||
| 	config_get_bool peerdns "$cfg" peerdns $peer_default | 		nodetach ipparam "$config" \ | ||||||
|  | 		ifname "${proto:-ppp}-$config" \ | ||||||
| 	[ "$peerdns" -eq 1 ] && { |  | ||||||
| 		peerdns="usepeerdns" |  | ||||||
| 	} || { |  | ||||||
| 		peerdns="" |  | ||||||
| 		add_dns "$cfg" $dns |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	local demand |  | ||||||
| 	config_get demand "$cfg" demand 0 |  | ||||||
|  |  | ||||||
| 	local demandargs |  | ||||||
| 	[ "$demand" -gt 0 ] && { |  | ||||||
| 		demandargs="precompiled-active-filter /etc/ppp/filter demand idle $demand" |  | ||||||
| 		[ "$has_dns" -eq 0 ] && add_dns "$cfg" 1.1.1.1 |  | ||||||
| 	} || { |  | ||||||
| 		demandargs="persist" |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	local ipv6 |  | ||||||
| 	config_get_bool ipv6 "$cfg" ipv6 0 |  | ||||||
| 	[ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6="" |  | ||||||
|  |  | ||||||
| 	SERVICE_DAEMONIZE=1 \ |  | ||||||
| 	SERVICE_WRITE_PID=1 \ |  | ||||||
| 	SERVICE_PID_FILE="/var/run/ppp-$link.pid" \ |  | ||||||
| 	service_start /usr/sbin/pppd "$@" \ |  | ||||||
| 		${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \ | 		${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \ | ||||||
| 		$demandargs \ | 		${ipv6:++ipv6} $defaultroute \ | ||||||
| 		$peerdns \ | 		${peerdns:+usepeerdns} \ | ||||||
| 		$defaultroute \ | 		$demand maxfail 1 \ | ||||||
| 		${username:+user "$username" password "$password"} \ | 		${username:+user "$username" password "$password"} \ | ||||||
| 		ipparam "$cfg" \ |  | ||||||
| 		ifname "$link" \ |  | ||||||
| 		${connect:+connect "$connect"} \ | 		${connect:+connect "$connect"} \ | ||||||
| 		${disconnect:+disconnect "$disconnect"} \ | 		${disconnect:+disconnect "$disconnect"} \ | ||||||
| 		${ipv6} \ | 		ip-up-script /lib/netifd/ppp-up \ | ||||||
| 		${pppd_options} \ | 		ipv6-up-script /lib/netifd/ppp-up \ | ||||||
| 		nodetach \ | 		ip-down-script /lib/netifd/ppp-down \ | ||||||
| 		${nic} | 		ipv6-down-script /lib/netifd/ppp-down \ | ||||||
|  | 		${mtu:+mtu $mtu mru $mtu} \ | ||||||
| 	lock -u "/var/lock/ppp-${link}" | 		$pppd_options "$@" | ||||||
| } | } | ||||||
|  |  | ||||||
| setup_interface_ppp() { | ppp_generic_teardown() { | ||||||
| 	local iface="$1" | 	local interface="$1" | ||||||
| 	local config="$2" |  | ||||||
|  |  | ||||||
| 	local device | 	case "$ERROR" in | ||||||
| 	config_get device "$config" device | 		11|19) | ||||||
|  | 			proto_notify_error "$interface" AUTH_FAILED | ||||||
| 	local mtu | 			proto_block_restart "$interface" | ||||||
| 	config_get mtu "$config" mtu | 		;; | ||||||
|  | 	esac | ||||||
| 	mtu=${mtu:-1492} | 	proto_kill_command "$interface" | ||||||
| 	start_pppd "$config" \ | } | ||||||
| 		mtu $mtu mru $mtu \ |  | ||||||
| 		"$device" | # PPP on serial device | ||||||
|  |  | ||||||
|  | proto_ppp_init_config() { | ||||||
|  | 	proto_config_add_string "device" | ||||||
|  | 	ppp_generic_init_config | ||||||
|  | 	no_device=1 | ||||||
|  | 	available=1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_ppp_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  |  | ||||||
|  | 	json_get_var device device | ||||||
|  | 	ppp_generic_setup "$config" "$device" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_ppp_teardown() { | ||||||
|  | 	ppp_generic_teardown "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoe_init_config() { | ||||||
|  | 	ppp_generic_init_config | ||||||
|  | 	proto_config_add_string "ac" | ||||||
|  | 	proto_config_add_string "service" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoe_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$2" | ||||||
|  |  | ||||||
|  | 	for module in slhc ppp_generic pppox pppoe; do | ||||||
|  | 		/sbin/insmod $module 2>&- >&- | ||||||
|  | 	done | ||||||
|  |  | ||||||
|  | 	json_get_var mtu mtu | ||||||
|  | 	mtu="${mtu:-1492}" | ||||||
|  |  | ||||||
|  | 	json_get_var ac ac | ||||||
|  | 	json_get_var service service | ||||||
|  |  | ||||||
|  | 	ppp_generic_setup "$config" \ | ||||||
|  | 		plugin rp-pppoe.so \ | ||||||
|  | 		${ac:+rp_pppoe_ac "$ac"} \ | ||||||
|  | 		${service:+rp_pppoe_service "$service"} \ | ||||||
|  | 		"nic-$iface" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoe_teardown() { | ||||||
|  | 	ppp_generic_teardown "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoa_init_config() { | ||||||
|  | 	ppp_generic_init_config | ||||||
|  | 	proto_config_add_int "atmdev" | ||||||
|  | 	proto_config_add_int "vci" | ||||||
|  | 	proto_config_add_int "vpi" | ||||||
|  | 	proto_config_add_string "encaps" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoa_setup() { | ||||||
|  | 	local config="$1" | ||||||
|  | 	local iface="$2" | ||||||
|  |  | ||||||
|  | 	for module in slhc ppp_generic pppox pppoatm; do | ||||||
|  | 		/sbin/insmod $module 2>&- >&- | ||||||
|  | 	done | ||||||
|  |  | ||||||
|  | 	json_get_var atmdev atmdev | ||||||
|  | 	json_get_var vci vci | ||||||
|  | 	json_get_var vpi vpi | ||||||
|  |  | ||||||
|  | 	json_get_var encaps encaps | ||||||
|  | 	case "$encaps" in | ||||||
|  | 		1|vc) encaps="vc-encaps" ;; | ||||||
|  | 		*) encaps="llc-encaps" ;; | ||||||
|  | 	esac | ||||||
|  |  | ||||||
|  | 	ppp_generic_setup "$config" \ | ||||||
|  | 		plugin pppoatm.so \ | ||||||
|  | 		${atmdev:+$atmdev.}${vpi:-8}.${vci:-35} \ | ||||||
|  | 		${encaps} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | proto_pppoa_teardown() { | ||||||
|  | 	ppp_generic_teardown "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | [ -n "$INCLUDE_ONLY" ] || { | ||||||
|  | 	add_protocol ppp | ||||||
|  | 	[ -f /usr/lib/pppd/*/rp-pppoe.so ] && add_protocol pppoe | ||||||
|  | 	[ -f /usr/lib/pppd/*/pppoatm.so ] && add_protocol pppoa | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau