Changeset 36942


Ignore:
Timestamp:
2013-06-17T13:33:36+02:00 (5 years ago)
Author:
jow
Message:

base-files: network.sh: extend network_get_ipaddr6() / network_get_subnet6() to take ipv6-prefix-assignment into account, add further helper functions to fetch all ips of a given interface

File:
1 edited

Legend:

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

    r36553 r36942  
    1414{ 
    1515        local __v="__NETWORK_CV_$2" 
    16         eval "export -- \"$1=\${$__v:+\$$__v$3}\"; [ -n \"\${$__v+x}\" ]" 
     16        eval "export -- \"$1=\${$__v:+\${$__v$4}$3}\"; [ -n \"\${$__v+x}\" ]" 
    1717} 
    1818 
     
    2222        local __key="${__iface}" 
    2323        local __tmp 
     24        local __idx 
     25        local __list 
    2426        local __old_ns 
    2527 
     
    4042                local __family 
    4143                for __family in 4 6; do 
     44 
     45                        __list="" 
     46 
    4247                        if json_is_a "ipv${__family}_address" array; then 
    4348 
    4449                                json_select "ipv${__family}_address" 
    4550 
    46                                 if json_is_a 1 object; then 
    47  
    48                                         json_select 1 
    49                                         __network_set_cache "${__key}_address${__family}" address 
    50                                         __network_set_cache "${__key}_mask${__family}"    mask 
     51                                __idx=1 
     52 
     53                                while json_is_a "$__idx" object; do 
     54 
     55                                        json_select "$((__idx++))" 
     56                                        json_get_var __tmp "address" && __list="${__list:+$__list }$__tmp" 
     57                                        json_get_var __tmp "mask"    && __list="${__list:+$__list/}$__tmp" 
    5158                                        json_select ".." 
    5259 
    53                                 fi 
     60                                done 
    5461 
    5562                                json_select ".." 
    5663 
    5764                        fi 
     65 
     66                        if json_is_a "ipv${__family}_prefix_assignment" array; then 
     67 
     68                                json_select "ipv${__family}_prefix_assignment" 
     69 
     70                                __idx=1 
     71 
     72                                while json_is_a "$__idx" object; do 
     73 
     74                                        json_select "$((__idx++))" 
     75                                        json_get_var __tmp "address" && __list="${__list:+$__list }${__tmp}1" 
     76                                        json_get_var __tmp "mask"    && __list="${__list:+$__list/}$__tmp" 
     77                                        json_select ".." 
     78 
     79                                done 
     80 
     81                                json_select ".." 
     82 
     83                        fi 
     84 
     85                        if [ -n "$__list" ]; then 
     86                                __network_set_cache "${__key}_address${__family}" "" "$__list" 
     87                        fi 
     88 
    5889                done 
    5990 
     
    6293                        json_select "ipv6_prefix" 
    6394 
    64                         if json_is_a 1 object; then 
    65                                 json_select 1 
    66                                 __network_set_cache "${__key}_prefix6_address"  address 
    67                                 __network_set_cache "${__key}_prefix6_mask"     mask 
     95                        __idx=1 
     96                        __list="" 
     97 
     98                        while json_is_a "$__idx" object; do 
     99 
     100                                json_select "$((__idx++))" 
     101                                json_get_var __tmp "address" && __list="${__list:+$__list }$__tmp" 
     102                                json_get_var __tmp "mask"    && __list="${__list:+$__list/}$__tmp" 
    68103                                json_select ".." 
    69                         fi 
     104 
     105                        done 
    70106 
    71107                        json_select ".." 
     108 
     109 
     110                        if [ -n "$__list" ]; then 
     111                                __network_set_cache "${__key}_prefix6" "" "$__list" 
     112                        fi 
     113 
    72114                fi 
    73115 
     
    111153                                json_select "$__field" 
    112154 
    113                                 local __idx=1 
    114                                 local __dns="" 
     155                                __idx=1 
     156                                __list="" 
    115157 
    116158                                while json_is_a "$__idx" string; do 
    117159 
    118160                                        json_get_var __tmp "$((__idx++))" 
    119                                         __dns="${__dns:+$__dns }$__tmp" 
     161                                        __list="${__list:+$__list }$__tmp" 
    120162 
    121163                                done 
     
    123165                                json_select ".." 
    124166 
    125                                 if [ -n "$__dns" ]; then 
    126                                         __network_set_cache "${__key}_${__field}" "" "$__dns" 
     167                                if [ -n "$__list" ]; then 
     168                                        __network_set_cache "${__key}_${__field}" "" "$__list" 
    127169                                fi 
    128170                        fi 
     
    152194        local __var="$1" 
    153195        local __iface="$2" 
    154         local __family="$3" 
    155         local __prefix="$4" 
    156         local __tmp 
     196        local __field="$3" 
     197        local __subst="$4" 
     198        local __list="$5" 
     199        local __tmp="" 
    157200 
    158201        __network_parse_ifstatus "$__iface" || return 1 
    159202 
    160         if [ $__prefix -eq 1 ]; then 
    161                 __network_export __tmp "${__iface}_mask${__family}" && \ 
    162                         __network_export "$__var" "${__iface}_address${__family}" "/$__tmp" 
     203        if [ $__list = 1 ] && [ -n "$__subst" ]; then 
     204                __network_export "__list" "${__iface}_${__field}" 
     205 
     206                for __list in $__list; do 
     207                        eval "__tmp=\"${__tmp:+$__tmp }\${__list$__subst}\"" 
     208                done 
     209 
     210                export -- "$__var=$__tmp"; [ -n "$__tmp" ] 
    163211                return $? 
    164212        fi 
    165213 
    166         __network_export "$__var" "${__iface}_address${__family}" 
     214        __network_export "$__var" "${__iface}_${__field}" "" "$__subst" 
    167215        return $? 
    168  
    169 } 
    170  
    171 # determine IPv4 address of given logical interface 
    172 # 1: destination variable 
    173 # 2: interface 
    174 network_get_ipaddr()  { __network_ipaddr "$1" "$2" 4 0; } 
    175  
    176 # determine IPv6 address of given logical interface 
    177 # 1: destination variable 
    178 # 2: interface 
    179 network_get_ipaddr6() { __network_ipaddr "$1" "$2" 6 0; } 
    180  
    181 # determine IPv4 subnet of given logical interface 
    182 # 1: destination variable 
    183 # 2: interface 
    184 network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; } 
    185  
    186 # determine IPv6 subnet of given logical interface 
    187 # 1: destination variable 
    188 # 2: interface 
    189 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; } 
    190  
    191 # determine IPv6 prefix 
    192 network_get_prefix6() { 
    193         local __var="$1" 
    194         local __iface="$2" 
    195         local __address 
    196         local __mask 
    197  
    198         __network_parse_ifstatus "$__iface" || return 1 
    199         __network_export __mask "${__iface}_prefix6_mask" || return 1 
    200         __network_export "$__var" "${__iface}_prefix6_address" "/$__mask" 
    201         return $? 
    202 } 
     216} 
     217 
     218# determine first IPv4 address of given logical interface 
     219# 1: destination variable 
     220# 2: interface 
     221network_get_ipaddr()  { __network_ipaddr "$1" "$2" "address4" "%%/*" 0; } 
     222 
     223# determine first IPv6 address of given logical interface 
     224# 1: destination variable 
     225# 2: interface 
     226network_get_ipaddr6() { __network_ipaddr "$1" "$2" "address6" "%%/*" 0; } 
     227 
     228# determine first IPv4 subnet of given logical interface 
     229# 1: destination variable 
     230# 2: interface 
     231network_get_subnet()  { __network_ipaddr "$1" "$2" "address4" "%% *" 0; } 
     232 
     233# determine first IPv6 subnet of given logical interface 
     234# 1: destination variable 
     235# 2: interface 
     236network_get_subnet6() { __network_ipaddr "$1" "$2" "address6" "%% *" 0; } 
     237 
     238# determine first IPv6 prefix of given logical interface 
     239# 1: destination variable 
     240# 2: interface 
     241network_get_prefix6() { __network_ipaddr "$1" "$2" "prefix6" "%% *" 0; } 
     242 
     243# determine all IPv4 addresses of given logical interface 
     244# 1: destination variable 
     245# 2: interface 
     246network_get_ipaddrs()  { __network_ipaddr "$1" "$2" "address4" "%%/*" 1; } 
     247 
     248# determine all IPv6 addresses of given logical interface 
     249# 1: destination variable 
     250# 2: interface 
     251network_get_ipaddrs6() { __network_ipaddr "$1" "$2" "address6" "%%/*" 1; } 
     252 
     253# determine all IPv4 subnets of given logical interface 
     254# 1: destination variable 
     255# 2: interface 
     256network_get_subnets()  { __network_ipaddr "$1" "$2" "address4" "" 1; } 
     257 
     258# determine all IPv6 subnets of given logical interface 
     259# 1: destination variable 
     260# 2: interface 
     261network_get_subnets6() { __network_ipaddr "$1" "$2" "address6" "" 1; } 
     262 
     263# determine all IPv6 prefixes of given logical interface 
     264# 1: destination variable 
     265# 2: interface 
     266network_get_prefixes6() { __network_ipaddr "$1" "$2" "prefix6" "" 1; } 
    203267 
    204268 
Note: See TracChangeset for help on using the changeset viewer.