Changeset 12241


Ignore:
Timestamp:
2008-08-07T17:28:48+02:00 (9 years ago)
Author:
nbd
Message:

add basic interface alias support.
for now (since we don't use ip in our network scripts yet), it adds :1, :2, ... alias interfaces
this will change when we add support for the ip utility, but the config format will remain the same.
example:

config alias test
option interface lan
option ipaddr 192.168.1.1
option netmask 255.255.0.0

Location:
trunk/package/base-files/files
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/base-files/files/lib/network/config.sh

    r12057 r12241  
    143143} 
    144144 
     145setup_interface_static() { 
     146        local iface="$1" 
     147        local config="$2" 
     148 
     149        config_get ipaddr "$config" ipaddr 
     150        config_get netmask "$config" netmask 
     151        config_get ip6addr "$config" ip6addr 
     152        [ -z "$ipaddr" -o -z "$netmask" ] && [ -z "$ip6addr" ] && return 1 
     153         
     154        config_get gateway "$config" gateway 
     155        config_get ip6gw "$config" ip6gw 
     156        config_get dns "$config" dns 
     157        config_get bcast "$config" broadcast 
     158         
     159        [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}" 
     160        [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" 
     161        [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface" 
     162        [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" 
     163        [ -z "$dns" ] || { 
     164                for ns in $dns; do 
     165                        grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || { 
     166                                echo "nameserver $ns" >> /tmp/resolv.conf.auto 
     167                        } 
     168                done 
     169        } 
     170 
     171        env -i ACTION="ifup" INTERFACE="$config" DEVICE="$iface" PROTO=static /sbin/hotplug-call "iface" & 
     172} 
     173 
     174setup_interface_alias() { 
     175        local config="$1" 
     176        local parent="$2" 
     177        local iface="$3" 
     178 
     179        config_get cfg "$config" interface 
     180        [ "$parent" == "$cfg" ] || return 0 
     181 
     182        # alias counter 
     183        config_get ctr "$parent" alias_count 
     184        ctr="$(($ctr + 1))" 
     185        config_set "$parent" alias_count "$ctr" 
     186 
     187        # alias list 
     188        config_get list "$parent" aliases 
     189        append list "$config" 
     190        config_set "$parent" aliases "$list" 
     191 
     192        set_interface_ifname "$config" "$iface:$ctr" 
     193        config_get proto "$config" proto 
     194        case "${proto:-static}" in 
     195                static) 
     196                        setup_interface_static "$iface:$ctr" "$config" 
     197                ;; 
     198                *)  
     199                        echo "Unsupported type '$proto' for alias config '$config'" 
     200                        return 1 
     201                ;; 
     202        esac 
     203} 
     204 
    145205setup_interface() { 
    146206        local iface="$1" 
     
    175235        case "$proto" in 
    176236                static) 
    177                         config_get ipaddr "$config" ipaddr 
    178                         config_get netmask "$config" netmask 
    179                         config_get ip6addr "$config" ip6addr 
    180                         [ -z "$ipaddr" -o -z "$netmask" ] && [ -z "$ip6addr" ] && return 1 
    181                          
    182                         config_get gateway "$config" gateway 
    183                         config_get ip6gw "$config" ip6gw 
    184                         config_get dns "$config" dns 
    185                         config_get bcast "$config" broadcast 
    186                          
    187                         [ -z "$ipaddr" ] || $DEBUG ifconfig "$iface" "$ipaddr" netmask "$netmask" broadcast "${bcast:-+}" 
    188                         [ -z "$ip6addr" ] || $DEBUG ifconfig "$iface" add "$ip6addr" 
    189                         [ -z "$gateway" ] || $DEBUG route add default gw "$gateway" dev "$iface" 
    190                         [ -z "$ip6gw" ] || $DEBUG route -A inet6 add default gw "$ip6gw" dev "$iface" 
    191                         [ -z "$dns" ] || { 
    192                                 for ns in $dns; do 
    193                                         grep "$ns" /tmp/resolv.conf.auto 2>/dev/null >/dev/null || { 
    194                                                 echo "nameserver $ns" >> /tmp/resolv.conf.auto 
    195                                         } 
    196                                 done 
    197                         } 
    198  
    199                         env -i ACTION="ifup" INTERFACE="$config" DEVICE="$iface" PROTO=static /sbin/hotplug-call "iface" & 
     237                        setup_interface_static "$iface" "$config" 
    200238                ;; 
    201239                dhcp) 
     
    203241                        lock "/var/lock/dhcp-$iface" 
    204242                        pid="$(cat "$pidfile" 2>/dev/null)" 
    205                         [ -d "/proc/$pid" ] && grep udhcpc "/proc/${pid}/cmdline" >/dev/null 2>/dev/null && { 
     243                        if [ -d "/proc/$pid" ] && grep udhcpc "/proc/${pid}/cmdline" >/dev/null 2>/dev/null; then 
    206244                                lock -u "/var/lock/dhcp-$iface" 
    207                                 return 0 
    208                         } 
    209  
    210                         config_get ipaddr "$config" ipaddr 
    211                         config_get netmask "$config" netmask 
    212                         config_get hostname "$config" hostname 
    213                         config_get proto1 "$config" proto 
    214                         config_get clientid "$config" clientid 
    215  
    216                         [ -z "$ipaddr" ] || \ 
    217                                 $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} 
    218  
    219                         # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp) 
    220                         [ ."$proto1" != ."$proto" ] && dhcpopts="-n -q" 
    221                         $DEBUG eval udhcpc -t 0 -i "$iface" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} ${clientid:+-c $clientid} -b -p "$pidfile" ${dhcpopts:- -R &} 
    222                         lock -u "/var/lock/dhcp-$iface" 
     245                        else 
     246 
     247                                config_get ipaddr "$config" ipaddr 
     248                                config_get netmask "$config" netmask 
     249                                config_get hostname "$config" hostname 
     250                                config_get proto1 "$config" proto 
     251                                config_get clientid "$config" clientid 
     252 
     253                                [ -z "$ipaddr" ] || \ 
     254                                        $DEBUG ifconfig "$iface" "$ipaddr" ${netmask:+netmask "$netmask"} 
     255 
     256                                # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp) 
     257                                [ ."$proto1" != ."$proto" ] && dhcpopts="-n -q" 
     258                                $DEBUG eval udhcpc -t 0 -i "$iface" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} ${clientid:+-c $clientid} -b -p "$pidfile" ${dhcpopts:- -R &} 
     259                                lock -u "/var/lock/dhcp-$iface" 
     260                        fi 
    223261                ;; 
    224262                *) 
     
    231269                ;; 
    232270        esac 
     271        config_set "$config" aliases "" 
     272        config_set "$config" alias_count 0 
     273        config_foreach setup_interface_alias alias "$config" "$iface" 
     274        config_get aliases "$config" aliases 
     275        [ -z "$aliases" ] || uci_set_state network "$config" aliases "$aliases" 
    233276} 
    234277 
  • trunk/package/base-files/files/sbin/ifdown

    r12081 r12241  
    6565uci_revert_state network "$1" 
    6666 
    67  
     67# revert aliases state as well 
     68config_get aliases "$1" aliases 
     69for config in $aliases; do 
     70        uci_revert_state network "$config" 
     71done 
Note: See TracChangeset for help on using the changeset viewer.