rc.d/ip6addrctl: Fix REQUIRE and afexists()
authorAaron LI <aly@aaronly.me>
Fri, 16 Nov 2018 03:01:28 +0000 (11:01 +0800)
committerAaron LI <aly@aaronly.me>
Fri, 16 Nov 2018 03:01:28 +0000 (11:01 +0800)
* DragonFly doesn't has the 'FILESYSTEMS' rc target.

* I forgot to implement the 'afexists()' function when import this.
  However, FreeBSD's 'afexists()' relies 'kern.features.<feature>'
  sysctls to determine whether the address family is supported, but
  DragonFly doesn't allow this.  So come up with a little 'has_inet6()'
  function for this rc script use only.

Reported-by: Thomas Nikolajsen <thomas.nikolajsen@mail.dk>
etc/rc.d/ip6addrctl

index 7d51d48..7531a68 100644 (file)
@@ -4,7 +4,7 @@
 #
 
 # PROVIDE: ip6addrctl
-# REQUIRE: FILESYSTEMS
+# REQUIRE: root mountcritlocal
 # BEFORE: netif
 # KEYWORD: nojailvnet
 
@@ -24,9 +24,16 @@ config_file="/etc/ip6addrctl.conf"
 
 IP6ADDRCTL_CMD="/usr/sbin/ip6addrctl"
 
+has_inet6() {
+       ${SYSCTL} -q net.inet6 >/dev/null || {
+               warn "kernel does not support INET6"
+               false
+       }
+}
+
 ip6addrctl_prefer_ipv6()
 {
-       afexists inet6 || return 0
+       has_inet6 || return 0
 
        ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
        cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
@@ -44,7 +51,7 @@ EOT
 
 ip6addrctl_prefer_ipv4()
 {
-       afexists inet6 || return 0
+       has_inet6 || return 0
 
        ${IP6ADDRCTL_CMD} flush >/dev/null 2>&1
        cat <<EOT | ${IP6ADDRCTL_CMD} install /dev/stdin
@@ -62,7 +69,7 @@ EOT
 
 ip6addrctl_start()
 {
-       afexists inet6 || return 0
+       has_inet6 || return 0
 
        # Install the policy of the address selection algorithm.
        case "${ip6addrctl_policy}" in
@@ -102,7 +109,7 @@ ip6addrctl_start()
 
 ip6addrctl_stop()
 {
-       afexists inet6 || return 0
+       has_inet6 || return 0
 
        ip6addrctl flush >/dev/null 2>&1
 }