diff options
Diffstat (limited to 'package/base-files')
| -rwxr-xr-x | package/base-files/files/usr/share/udhcpc/default.script | 87 | 
1 files changed, 14 insertions, 73 deletions
| diff --git a/package/base-files/files/usr/share/udhcpc/default.script b/package/base-files/files/usr/share/udhcpc/default.script index 9acde829d..b614c4586 100755 --- a/package/base-files/files/usr/share/udhcpc/default.script +++ b/package/base-files/files/usr/share/udhcpc/default.script @@ -11,6 +11,18 @@ change_state () {  	uci_set_state "$1" "$2" "$3" "$4"  } +set_classless_routes() { +	local max=128 +	local type +	while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do +		[ ${1##*/} -eq 32 ] && type=host || type=net +		echo "udhcpc: adding route for $type $1 via $2" +		route add -$type "$1" gw "$2" dev "$interface" +		max=$(($max-1)) +		shift 2 +	done +} +  setup_interface () {  	local old_ip  	local old_broadcast @@ -66,79 +78,8 @@ setup_interface () {  	}  	# CIDR STATIC ROUTES (rfc3442) -	[ -n "$cidrroute" ] && { -		# This defines how many CIDR Routes can be assigned so that we do not enter -		# an endless loop on malformed data -		MAXCIDRROUTES=24; -		while [ ${MAXCIDRROUTES} -gt "0" ]; do -			# Format is -			# $MASK $NW $GW -			# $NW == AAA.BBB.CCC.DDD -			# $GW == EEE.FFF.CCC.DDD -			# $MASK AAA.[BBB].[CCC].[DDD] EEE.FFF.GGG.HHH -			#   1    2    3     4     5    6   7   8   9 -			MASK=$(echo $cidrroute | awk '{ print $1 }') -			if [ ${MASK} = "0" ] ; then -				# $MASK EEE.FFF.GGG.HHH -				#   1    2   3   5   6 -				NW="0" -				GW=$(echo $cidrroute | awk '{ print $2"."$3"."$4"."$5 }' ) -			elif [ ${MASK} -le "8" ] ; then -				# $MASK AAA EEE.FFF.GGG.HHH -				#   1    2   3   5   6   7 -				NW=$(echo $cidrroute | awk '{ print $2 }' ) -				GW=$(echo $cidrroute | awk '{ print $3"."$4"."$5"."$6 }' ) -			elif [ ${MASK} -le "16" ] ; then -				# $MASK AAA.BBB EEE.FFF.GGG.HHH -				#   1    2   3   5   6   7   8 -				NW=$(echo $cidrroute | awk '{ print $2"."$3 }' ) -				GW=$(echo $cidrroute | awk '{ print $4"."$5"."$6"."$7 }' ) -			elif [ ${MASK} -le "24" ] ; then -				# $MASK AAA.BBB.CCC EEE.FFF.GGG.HHH -				#   1    2   3   4   5   6   7   8 -				NW=$(echo $cidrroute | awk '{ print $2"."$3"."$4 }' ) -				GW=$(echo $cidrroute | awk '{ print $5"."$6"."$7"."$8 }' ) - -			else -				# $MASK AAA.BBB.CCC.DDD EEE.FFF.GGG.HHH -				#   1    2   3   4   5   6   7   8   9 -				NW=$(echo $cidrroute | awk '{ print $2"."$3"."$4"."$5 }' ) -				GW=$(echo $cidrroute | awk '{ print $6"."$7"."$8"."$9 }' ) -			fi -			echo [$ROUTECOUNTER] Route Network: $NW/$MASK Gateway: $GW on $interface - -			# TODO: Check for malformed data here to eliminate counter workaround -			# Malformed data is: ... or xxx... or xxx.yyy.. or xxx.yyy.zzz. - -			[ -n "$NW" ] && [ -n "$GW" ] && { -				route add $NW gw $GW dev $interface -			} - -			# Clear the strings incase they don't get set next time around -			if [ ${NW} = "0" ]; then -				NW="" -			fi -			TMP="$MASK $NW $GW " -			NW="" -			GW="" - -			# Remove the '.' so that we can delete them from the input with sed -			TMP=$(echo $TMP | sed "s/\./ /g") - -			# Remove the previous entry from cidrroute -			cidrroute=$(echo $cidrroute | sed "s/$TMP//g") - -			# Add to counter -			let ROUTECOUNTER=$ROUTECOUNTER+1; -			let MAXCIDRROUTES=$MAXCIDRROUTES-1; - -			# Leave the loop if cidrroutes is empty (we've parsed everything) -			[ ! -n "$cidrroute" ] && break - -		done - -		echo "done." -	} +	[ -n "$staticroutes" ] && set_classless_routes $staticroutes +	[ -n "$msstaticroutes" ] && set_classless_routes $msstaticroutes  	# DNS  	old_dns=$(uci_get_state network "$ifc" dns) | 
