function init_table() {
# Check if table does already exist. If not we add it.
- if (ip rule | grep -qeE static >/dev/null 2>&1); then
+ if (ip rule | grep -q "static" >/dev/null 2>&1); then
return
fi
ip rule add table static
}
+function create_all_routes() {
+ local file=${1}
+ shift
+
+ # Remote all routes.
+ ip route flush table static >/dev/null 2>&1
+
+ local status
+ local network
+ local gateway
+ local remark
+
+ # Read all routes from the configuration file and add the enabled ones
+ # immediately.
+ while IFS=, read status network gateway remark; do
+ [ "${status}" = "on" ] || continue
+
+ if [ -z "${network}" -o -z "${gateway}" ]; then
+ # Silently skipping invalid routes.
+ continue
+ fi
+
+ ip route add ${network} via ${gateway} table static
+ done < ${file}
+}
+
+CONFIGFILE="/var/ipfire/main/routing"
case "${1}" in
start)
- boot_mesg "Adding static routes..."
+ boot_mesg "Adding static routes..."
# First, initialize the table
- init_table
+ init_table
- ### ADD ALL ROUTES
+ # Add all routes
+ create_all_routes ${CONFIGFILE}
evaluate_retval
- ;;
+ ;;
- stop)
- boot_mesg "Removing static routes..."
- ip route flush table static >/dev/null 2>&1
+ stop)
+ boot_mesg "Removing static routes..."
+ ip route flush table static >/dev/null 2>&1
evaluate_retval
- ;;
+ ;;
- *)
- echo "Usage: ${0} {start|stop}"
- exit 1
- ;;
+ *)
+ echo "Usage: ${0} {start|stop}"
+ exit 1
+ ;;
esac