diff options
Diffstat (limited to 'package/base-files-network/files/etc')
4 files changed, 266 insertions, 0 deletions
| diff --git a/package/base-files-network/files/etc/hotplug.d/iface/00-netstate b/package/base-files-network/files/etc/hotplug.d/iface/00-netstate new file mode 100644 index 000000000..37b1e934e --- /dev/null +++ b/package/base-files-network/files/etc/hotplug.d/iface/00-netstate @@ -0,0 +1,5 @@ +[ ifup = "$ACTION" ] && { +	uci_toggle_state network "$INTERFACE" up 1  +	uci_toggle_state network "$INTERFACE" connect_time $(sed -ne 's![^0-9].*$!!p' /proc/uptime) +	[ -n "$DEVICE" ] && uci_toggle_state network "$INTERFACE" ifname "$DEVICE" +} diff --git a/package/base-files-network/files/etc/hotplug.d/iface/10-routes b/package/base-files-network/files/etc/hotplug.d/iface/10-routes new file mode 100644 index 000000000..d57a5b3c7 --- /dev/null +++ b/package/base-files-network/files/etc/hotplug.d/iface/10-routes @@ -0,0 +1,137 @@ +add_route() { +	local config="$1" + +	# is this route intended for the +	# $INTERFACE of this hotplug event +	config_get interface "$config" interface +	[ "$interface" != "$INTERFACE" ] && return 0 +	 +	# get the real interface name from network config +	config_get dev "$interface" ifname + +	config_get target "$config" target +	config_get netmask "$config" netmask +	config_get gateway "$config" gateway +	config_get metric "$config" metric +	config_get mtu "$config" mtu + +	# make sure there is a gateway and a target +	[ -n "$target" ] || { +		echo "Missing target in route section $config" +		return 1 +	} +	[ -n "$gateway" ] || { +		config_get gateway "$interface" gateway +	} + +	# handle "0.0.0.0" as "no gateway given" to allow +	# defining gateway-less routes while still keeping +	# the possibility to have static routes with a +	# proper gateway on interfaces with dynamic ips  +	[ "$gateway" = "0.0.0.0" ] && gateway="" + +	dest="${netmask:+-net "$target" netmask "$netmask"}" +	dest="${dest:--host "$target"}" +	 +	/sbin/route add $dest ${gateway:+gw "$gateway"} \ +		${dev:+dev "$dev"} ${metric:+ metric "$metric"} \ +		${mtu:+mss "$mtu"} +} + +add_route6() { +	local config="$1" + +	# is this route intended for the +	# $INTERFACE of this hotplug event +	config_get interface "$config" interface +	[ "$interface" != "$INTERFACE" ] && return 0 +	 +	# get the real interface name from network config +	config_get dev "$interface" ifname + +	config_get target "$config" target +	config_get gateway "$config" gateway +	config_get metric "$config" metric +	config_get mtu "$config" mtu + +	# make sure there is a gateway and a target +	[ -n "$target" ] || { +		echo "Missing target in route section $config" +		return 1 +	} +	[ -n "$gateway" ] || { +		config_get gateway "$interface" gateway +	} + +	/sbin/route -A inet6 add $target ${gateway:+gw "$gateway"} \ +		${dev:+dev "$dev"} ${metric:+ metric "$metric"} \ +		${mtu:+mss "$mtu"} +} + +# Skip fake devices (e.g. relayd) +grep -qs "^ *$DEVICE:" /proc/net/dev || exit 0 + +case "$ACTION" in +	ifup) +		include /lib/network +		scan_interfaces + +		# Setup aliases +		config_set "$INTERFACE" aliases "" +		config_set "$INTERFACE" alias_count 0 +		config_foreach setup_interface_alias alias "$INTERFACE" "$DEVICE" + +		# Save alias references in state vars +		local aliases +		config_get aliases "$INTERFACE" aliases +		[ -z "$aliases" ] || uci_toggle_state network "$INTERFACE" aliases "$aliases" + +		# Make ip6addr of parent iface the main address again +		local ip6addr +		config_get ip6addr "$INTERFACE" ip6addr +		[ -z "$ip6addr" ] || { +			ifconfig "$DEVICE" del "$ip6addr" +			ifconfig "$DEVICE" add "$ip6addr" +		} +		 +		# Setup sysctls +		local proto accept_ra send_rs +		 +		config_get proto "$INTERFACE" proto +		if [ "$proto" = dhcp ]; then +			accept_ra=1 +			send_rs=0 +		else +			accept_ra=0 +			send_rs=1 +		fi + +		config_get_bool accept_ra "$INTERFACE" accept_ra $accept_ra +		[ $accept_ra -eq 0 ] || { +			logger -t ifup "Allowing Router Advertisements on $INTERFACE ($DEVICE)" +			accept_ra=2 +		} +		do_sysctl "net.ipv6.conf.$DEVICE.accept_ra" $accept_ra + +		config_get_bool send_rs "$INTERFACE" send_rs $send_rs +		[ $send_rs -eq 0 ] || { +			logger -t ifup "Enabling Router Solicitations on $INTERFACE ($DEVICE)" +			send_rs=2 +		} +		do_sysctl "net.ipv6.conf.$DEVICE.forwarding" $send_rs + + +		# Setup routes +		config_foreach "add_route" route +		config_foreach "add_route6" route6 +	;; +	ifdown) +		# Bring down named aliases +		local device=$(uci_get_state network "$INTERFACE" device) +		local ifn +		for ifn in $(ifconfig | sed -ne "s/^\(\($DEVICE${device:+\|$device}\|br-$INTERFACE\):[^[:space:]]\+\).*/\1/p"); do +			ifconfig "$ifn" down +		done +	;; +esac + diff --git a/package/base-files-network/files/etc/hotplug.d/net/10-net b/package/base-files-network/files/etc/hotplug.d/net/10-net new file mode 100644 index 000000000..013ece39c --- /dev/null +++ b/package/base-files-network/files/etc/hotplug.d/net/10-net @@ -0,0 +1,72 @@ +# Copyright (C) 2006 OpenWrt.org + +include /lib/network + +addif() { +	# Ensure that ipv6 is loaded, autoloading happens later but ipv6 might be +	# required now for interface setup. +	[ -d /proc/sys/net/ipv6 ] || { +		grep -q '^ipv6' /etc/modules.d/* && insmod ipv6 +	} + +	# PPP devices are configured by pppd, no need to run setup_interface here +	case "$INTERFACE" in +		3g-*|ppp-*|pppoa-*|pppoe-*|pptp-*) return 0;; +	esac + +	scan_interfaces +	local cfg="$(find_config "$INTERFACE")" + +	case "$INTERFACE" in +		# Skip wireless parent interfaces +		ath[0-9]|wlan[0-9]) ;; +		*) +			# check the autoload setting +			config_get auto "$cfg" auto +			case "$auto" in +				1|on|enabled) setup_interface "$INTERFACE";; +			esac +		;; +	esac + +	# find all vlan configurations for this interface and set them up as well +	for ifc in $interfaces; do +		config_get iftype "$ifc" type +		config_get ifs "$ifc" device +		for dev in $ifs; do +			[ "${dev%%\.*}" = "$INTERFACE" -a "$dev" != "$INTERFACE" ] && { +				add_vlan "$dev" +			} +		done +	done +} + + +delif() { +	scan_interfaces + +	# find all vlan configurations for this interface and nuke 'em +	for ifc in $interfaces; do +		config_get iftype "$ifc" type +		config_get ifs "$ifc" device +		confdevs="$(uci_get network.$ifc.ifname)" +		for dev in $ifs; do +			[ "${dev%%\.*}" = "$INTERFACE" ] && { +				list_contains confdevs "$dev" || list_remove ifs "$dev" +			} +		done +		uci_set_state "network" "$ifc" device "$ifs" +	done +} + +case "$ACTION" in +	add|register) +		case "$PHYSDEVDRIVER" in +			natsemi) sleep 1;; +		esac +		addif +	;; +	remove|unregister) +		delif +	;; +esac diff --git a/package/base-files-network/files/etc/init.d/network b/package/base-files-network/files/etc/init.d/network new file mode 100755 index 000000000..fc512216f --- /dev/null +++ b/package/base-files-network/files/etc/init.d/network @@ -0,0 +1,52 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006-2011 OpenWrt.org + +START=40 +STOP=90 + +boot() { +	setup_switch() { return 0; } + +	include /lib/network +	setup_switch + +	/sbin/wifi detect > /tmp/wireless.tmp +	[ -s /tmp/wireless.tmp ] && { +		cat /tmp/wireless.tmp >> /etc/config/wireless +	} +	rm -f /tmp/wireless.tmp +	grep -qs config /etc/config/wireless && { +		/sbin/wifi up +	} + +	scan_interfaces + +	local ifc +	for ifc in $interfaces; do +		local proto +		config_get proto "$ifc" proto + +		local auto +		config_get_bool auto "$ifc" auto 1 + +		type "coldplug_interface_$proto" >/dev/null && [ "$auto" = 1 ] && \ +			coldplug_interface_$proto "$ifc" +	done +} + +start() { +	setup_switch() { return 0; } +	 +	include /lib/network +	setup_switch +	ifup -a +	/sbin/wifi up +} + +stop() { +	ifdown -a +} + +restart() { +	start +} | 
