89 lines
2.4 KiB
Bash
Executable File
89 lines
2.4 KiB
Bash
Executable File
#! /bin/bash
|
|
#
|
|
# adds static routes which go through device $1
|
|
|
|
. /etc/sysconfig/network-scripts/network-functions
|
|
|
|
if [ -z "$1" ]; then
|
|
echo $"usage: ifup-routes <net-device> [<nickname>]"
|
|
exit 1
|
|
fi
|
|
|
|
MATCH='^[[:space:]]*(\#.*)?$'
|
|
|
|
handle_file () {
|
|
. $1
|
|
routenum=0
|
|
while [ "x$(eval echo '$'ADDRESS$routenum)x" != "xx" ]; do
|
|
eval $(ipcalc -p $(eval echo '$'ADDRESS$routenum) $(eval echo '$'NETMASK$routenum))
|
|
line="$(eval echo '$'ADDRESS$routenum)/$PREFIX"
|
|
if [ "x$(eval echo '$'GATEWAY$routenum)x" != "xx" ]; then
|
|
line="$line via $(eval echo '$'GATEWAY$routenum)"
|
|
fi
|
|
line="$line dev $2"
|
|
|
|
/sbin/ip route add $line || {
|
|
net_log $"Failed to add route ${line}, using ip route replace instead." warning
|
|
/sbin/ip route replace $line
|
|
}
|
|
|
|
routenum=$(($routenum+1))
|
|
done
|
|
}
|
|
|
|
handle_ip_file() {
|
|
local f t type= file=$1 proto="-4"
|
|
f=${file##*/}
|
|
t=${f%%-*}
|
|
type=${t%%6}
|
|
if [ "$type" != "$t" ]; then
|
|
proto="-6"
|
|
fi
|
|
{ cat "$file" ; echo ; } | while read line; do
|
|
if [[ ! "$line" =~ $MATCH ]]; then
|
|
/sbin/ip $proto $type add $line
|
|
|
|
if [ $? != 0 ] && [ "$type" == "route" ] ; then
|
|
net_log $"Failed to add route ${line}, using ip route replace instead." warning
|
|
/sbin/ip $proto route replace $line
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
FILES="/etc/sysconfig/network-scripts/route-$1 /etc/sysconfig/network-scripts/route6-$1"
|
|
if [ -n "$2" -a "$2" != "$1" ]; then
|
|
FILES="$FILES /etc/sysconfig/network-scripts/route-$2 /etc/sysconfig/network-scripts/route6-$2"
|
|
fi
|
|
|
|
for file in $FILES; do
|
|
if [ -f "$file" ]; then
|
|
if grep -Eq '^[[:space:]]*ADDRESS[0-9]+=' $file ; then
|
|
# new format
|
|
handle_file $file ${1%:*}
|
|
else
|
|
# older format
|
|
handle_ip_file $file
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
# Red Hat network configuration format
|
|
NICK=${2:-$1}
|
|
CONFIG="/etc/sysconfig/network-scripts/$NICK.route"
|
|
[ -f $CONFIG ] && handle_file $CONFIG $1
|
|
|
|
|
|
# Routing rules
|
|
FILES="/etc/sysconfig/network-scripts/rule-$1 /etc/sysconfig/network-scripts/rule6-$1"
|
|
if [ -n "$2" -a "$2" != "$1" ]; then
|
|
FILES="$FILES /etc/sysconfig/network-scripts/rule-$2 /etc/sysconfig/network-scripts/rule6-$2"
|
|
fi
|
|
|
|
for file in $FILES; do
|
|
if [ -f "$file" ]; then
|
|
handle_ip_file $file
|
|
fi
|
|
done
|