# set classless routes based on the format specified in RFC3442 # e.g.: # new_rfc3442_classless_static_routes='24 192 168 10 192 168 1 1 8 10 10 17 66 41' # specifies the routes: # 192.168.10.0/24 via 192.168.1.1 # 10.0.0.0/8 via 10.10.17.66.41 RUN="yes" if [ "$RUN" = "yes" ]; then if [ -n "$new_rfc3442_classless_static_routes" ]; then if [ "$reason" = "BOUND" ] || [ "$reason" = "REBOOT" ]; then set -- $new_rfc3442_classless_static_routes while [ $# -gt 0 ]; do net_length=$1 via_arg='' case $net_length in 32|31|30|29|28|27|26|25) if [ $# -lt 9 ]; then return 1 fi net_address="${2}.${3}.${4}.${5}" gateway="${6}.${7}.${8}.${9}" shift 9 ;; 24|23|22|21|20|19|18|17) if [ $# -lt 8 ]; then return 1 fi net_address="${2}.${3}.${4}.0" gateway="${5}.${6}.${7}.${8}" shift 8 ;; 16|15|14|13|12|11|10|9) if [ $# -lt 7 ]; then return 1 fi net_address="${2}.${3}.0.0" gateway="${4}.${5}.${6}.${7}" shift 7 ;; 8|7|6|5|4|3|2|1) if [ $# -lt 6 ]; then return 1 fi net_address="${2}.0.0.0" gateway="${3}.${4}.${5}.${6}" shift 6 ;; 0) # default route if [ $# -lt 5 ]; then return 1 fi net_address="0.0.0.0" gateway="${2}.${3}.${4}.${5}" shift 5 ;; *) # error return 1 ;; esac # take care of link-local routes if [ "${gateway}" != '0.0.0.0' ]; then via_arg="via ${gateway}" fi # set route (ip detects host routes automatically) ip -4 route add "${net_address}/${net_length}" \ ${via_arg} dev "${interface}" >/dev/null 2>&1 done fi fi fi