base-files: add support for ipv6-prefixes in connection with netifd
[openwrt/svn-archive/archive.git] / package / base-files / files / lib / functions / network.sh
index 424965acb57785d9bac5493f3a56eb54b25dfb0f..8f87d1d0beb6521ef10067097d4a5613222a119b 100644 (file)
@@ -57,6 +57,20 @@ __network_parse_ifstatus()
                        fi
                done
 
+               # parse prefixes
+               if json_is_a "ipv6_prefix" array; then
+                       json_select "ipv6_prefix"
+
+                       if json_is_a 1 object; then
+                               json_select 1
+                               __network_set_cache "${__key}_prefix6_address"  address
+                               __network_set_cache "${__key}_prefix6_mask"     mask
+                               json_select ".."
+                       fi
+
+                       json_select ".."
+               fi
+
                # parse routes
                if json_is_a route array; then
 
@@ -170,6 +184,22 @@ network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; }
 # 2: interface
 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
 
+# determine IPv6 prefix
+network_get_prefix6() {
+       local __prefix="$1"
+       local __iface="$2"
+       local __address
+       local __mask
+
+       __network_parse_ifstatus "$__iface" || return 1
+       __network_export __address "${__iface}_prefix6_address"
+       local return="$?"
+       [ "$return" -eq 0 ] || return $?
+       __network_export __mask "${__iface}_prefix6_mask"
+       eval "$__prefix=$__address/$__mask"
+       return 0
+}
+
 
 __network_gateway()
 {