Ticket #152: iproute2.sh.diff

File iproute2.sh.diff, 1.4 KB (added by NightNord@gmail.com, 18 months ago)
  • iproute2.sh

    old new  
    139139                set -- "${one}" "${two}" via "$@" 
    140140        fi 
    141141 
    142         local cmd= have_metric=false  
     142        local family_list= gateway_specified=false 
     143        local cmd= have_metric=false is_default_route=false 
    143144        while [ -n "$1" ]; do 
    144145                case "$1" in 
     146                        default) cmd="${cmd} $1"; is_default_route=true;; 
     147                        via) cmd="${cmd} $1"; gateway_specified=true;; 
    145148                        metric) cmd="${cmd} $1"; have_metric=true;; 
    146149                        netmask) cmd="${cmd}/$(_netmask2cidr "$2")"; shift;; 
     150                        -A|-f|-family) family_list="${family_list} $2"; shift;; 
    147151                        -host|-net);; 
    148                         -A)     [ "$2" = "inet6" ] && shift;; 
    149152                        *) cmd="${cmd} $1";; 
    150153                esac 
    151154                shift 
     
    155158                cmd="${cmd} metric ${metric}" 
    156159        fi 
    157160 
    158         ip route append ${cmd} dev "${IFACE}" 
    159         eend $? 
     161        # We have really default route - no gateway, no family - iproute2 can't 
     162        # determine which family we use by gateway address, so it will default to ipv4. 
     163        if ${is_default_route} && ! ${gateway_specified} && [ -z "${family_list}" ] && \ 
     164                        ip -family inet6 addr show dev "${IFACE}" &>/dev/null; then 
     165                ewarn "Adding default route for both ipv4 and ipv6" 
     166                family_list="inet inet6"; 
     167        fi 
     168         
     169        if [ -n "${family_list}" ]; then 
     170                for family in ${family_list}; do 
     171                        ip -family ${family} route append ${cmd} dev "${IFACE}" || eend 1 
     172                done 
     173 
     174                eend 0 
     175        else 
     176                ip route append ${cmd} dev "${IFACE}" 
     177                eend $? 
     178        fi 
    160179} 
    161180 
    162181_delete_addresses()