The branch main has been updated by glebius:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=a709d15529b3dd8479f2a642b4d0e65e09d0515e

commit a709d15529b3dd8479f2a642b4d0e65e09d0515e
Author:     K Rin <r...@sandb0x.tw>
AuthorDate: 2025-04-06 00:27:19 +0000
Commit:     Gleb Smirnoff <gleb...@freebsd.org>
CommitDate: 2025-04-08 16:53:15 +0000

    libc/tests: getaddrinfo_test: test both IPv4 and IPv6 preferred policies
---
 lib/libc/tests/net/getaddrinfo/Makefile            |  15 +
 .../tests/net/getaddrinfo/data/basics_v4_only.exp  |  50 ++++
 .../net/getaddrinfo/data/basics_v4v6_prefer_v4.exp |  50 ++++
 .../net/getaddrinfo/data/generate_testdata.sh      |  45 +++
 .../tests/net/getaddrinfo/data/no_host_v4_only.exp |  68 +++++
 .../getaddrinfo/data/no_host_v4v6_prefer_v4.exp    |  68 +++++
 .../tests/net/getaddrinfo/data/no_serv_v4_only.exp |  20 ++
 .../getaddrinfo/data/no_serv_v4v6_prefer_v4.exp    |  20 ++
 .../tests/net/getaddrinfo/data/scoped_v4_only.exp  |   5 +
 .../net/getaddrinfo/data/scoped_v4v6_prefer_v4.exp |   5 +
 .../net/getaddrinfo/data/sock_raw_v4_only.exp      |  15 +
 .../getaddrinfo/data/sock_raw_v4v6_prefer_v4.exp   |  15 +
 .../net/getaddrinfo/data/spec_fam_v4_only.exp      |  10 +
 .../getaddrinfo/data/spec_fam_v4v6_prefer_v4.exp   |  10 +
 .../net/getaddrinfo/data/unsup_fam_v4_only.exp     |   2 +
 .../getaddrinfo/data/unsup_fam_v4v6_prefer_v4.exp  |   2 +
 lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh    | 324 ++++++++++++++++++---
 17 files changed, 682 insertions(+), 42 deletions(-)

diff --git a/lib/libc/tests/net/getaddrinfo/Makefile 
b/lib/libc/tests/net/getaddrinfo/Makefile
index 0b2a06785ade..47d945a52c6e 100644
--- a/lib/libc/tests/net/getaddrinfo/Makefile
+++ b/lib/libc/tests/net/getaddrinfo/Makefile
@@ -15,17 +15,32 @@ ${PACKAGE}DATA_FILESPACKAGE=        tests
 ${PACKAGE}DATA_FILESDIR=       ${TESTSDIR}/data
 
 ${PACKAGE}DATA_FILES+=          data/basics_v4.exp
+${PACKAGE}DATA_FILES+=          data/basics_v4_only.exp
 ${PACKAGE}DATA_FILES+=          data/basics_v4v6.exp
+${PACKAGE}DATA_FILES+=          data/basics_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/no_host_v4.exp
+${PACKAGE}DATA_FILES+=          data/no_host_v4_only.exp
 ${PACKAGE}DATA_FILES+=          data/no_host_v4v6.exp
+${PACKAGE}DATA_FILES+=          data/no_host_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/no_serv_v4.exp
+${PACKAGE}DATA_FILES+=          data/no_serv_v4_only.exp
 ${PACKAGE}DATA_FILES+=          data/no_serv_v4v6.exp
+${PACKAGE}DATA_FILES+=          data/no_serv_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/scoped.exp
+${PACKAGE}DATA_FILES+=          data/scoped_v4_only.exp
+${PACKAGE}DATA_FILES+=          data/scoped_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/sock_raw_v4.exp
+${PACKAGE}DATA_FILES+=          data/sock_raw_v4_only.exp
 ${PACKAGE}DATA_FILES+=          data/sock_raw_v4v6.exp
+${PACKAGE}DATA_FILES+=          data/sock_raw_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/spec_fam_v4.exp
+${PACKAGE}DATA_FILES+=          data/spec_fam_v4_only.exp
 ${PACKAGE}DATA_FILES+=          data/spec_fam_v4v6.exp
+${PACKAGE}DATA_FILES+=          data/spec_fam_v4v6_prefer_v4.exp
 ${PACKAGE}DATA_FILES+=          data/unsup_fam.exp
+${PACKAGE}DATA_FILES+=          data/unsup_fam_v4_only.exp
+${PACKAGE}DATA_FILES+=          data/unsup_fam_v4v6_prefer_v4.exp
+
 
 .include "../../Makefile.netbsd-tests"
 
diff --git a/lib/libc/tests/net/getaddrinfo/data/basics_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/basics_v4_only.exp
new file mode 100644
index 000000000000..0a37d3212649
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/basics_v4_only.exp
@@ -0,0 +1,50 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv tftp
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
tftp
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
tftp
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+ai3: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai4: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv echo
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
echo
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
echo
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/basics_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/basics_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..0a37d3212649
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/basics_v4v6_prefer_v4.exp
@@ -0,0 +1,50 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv tftp
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
tftp
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
tftp
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+ai3: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai4: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv echo
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
echo
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
echo
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/generate_testdata.sh 
b/lib/libc/tests/net/getaddrinfo/data/generate_testdata.sh
new file mode 100755
index 000000000000..f0425a3b0283
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/generate_testdata.sh
@@ -0,0 +1,45 @@
+#service ip6addrctl prefer_ipv4
+TEST=./h_gai
+family=v4_only
+
+( $TEST ::1 http
+  $TEST 127.0.0.1 http
+  $TEST localhost http
+  $TEST ::1 tftp
+  $TEST 127.0.0.1 tftp
+  $TEST localhost tftp
+  $TEST ::1 echo
+  $TEST 127.0.0.1 echo
+  $TEST localhost echo ) > basics_${family}.exp
+
+( $TEST -4 localhost http
+  $TEST -6 localhost http ) > spec_fam_${family}.exp
+
+( $TEST '' http
+  $TEST '' echo
+  $TEST '' tftp
+  $TEST '' 80
+  $TEST -P '' http
+  $TEST -P '' echo
+  $TEST -P '' tftp
+  $TEST -P '' 80
+  $TEST -S '' 80
+  $TEST -D '' 80 ) > no_host_${family}.exp
+
+( $TEST ::1 ''
+  $TEST 127.0.0.1 ''
+  $TEST localhost ''
+  $TEST '' '' ) > no_serv_${family}.exp
+
+( $TEST -R -p 0 localhost ''
+  $TEST -R -p 59 localhost ''
+  $TEST -R -p 59 localhost 80
+  $TEST -R -p 59 localhost www
+  $TEST -R -p 59 ::1 '' ) > sock_raw_${family}.exp
+
+( $TEST -f 99 localhost '' ) > unsup_fam_${family}.exp
+
+( $TEST fe80::1%lo0 http
+#        IF=`ifconfig -a | grep -v '^  ' | sed -e 's/:.*//' | head -1 | awk 
'{print $1}'`
+#        $TEST fe80::1%$IF http
+) > scoped_${family}.exp
diff --git a/lib/libc/tests/net/getaddrinfo/data/no_host_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/no_host_v4_only.exp
new file mode 100644
index 000000000000..596799305117
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/no_host_v4_only.exp
@@ -0,0 +1,68 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv echo
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv tftp
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+ai3: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai4: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv http
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv http
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv http
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv http
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
http
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv http
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
http
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv echo
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv echo
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv echo
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv echo
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
echo
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv echo
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
echo
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv tftp
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv tftp
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv tftp
+ai3: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
tftp
+ai4: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv tftp
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv http
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv http
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv http
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
http
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv http
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
http
+
+arg: flags 0x2 family 0 socktype 1 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 2 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/no_host_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/no_host_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..596799305117
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/no_host_v4v6_prefer_v4.exp
@@ -0,0 +1,68 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv echo
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv echo
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv echo
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv echo
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
echo
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
echo
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
echo
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv tftp
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv tftp
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv tftp
+ai3: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
tftp
+ai4: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
tftp
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+ai4: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai5: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai6: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv http
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv http
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv http
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv http
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
http
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv http
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
http
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv echo
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv echo
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv echo
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv echo
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
echo
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv echo
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
echo
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv tftp
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv tftp
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv tftp
+ai3: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
tftp
+ai4: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv tftp
+
+arg: flags 0x3 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x3 family 28 socktype 2 protocol 17 addrlen 28 host :: serv http
+ai2: flags 0x3 family 28 socktype 1 protocol 6 addrlen 28 host :: serv http
+ai3: flags 0x3 family 28 socktype 5 protocol 132 addrlen 28 host :: serv http
+ai4: flags 0x3 family 2 socktype 2 protocol 17 addrlen 16 host 0.0.0.0 serv 
http
+ai5: flags 0x3 family 2 socktype 1 protocol 6 addrlen 16 host 0.0.0.0 serv http
+ai6: flags 0x3 family 2 socktype 5 protocol 132 addrlen 16 host 0.0.0.0 serv 
http
+
+arg: flags 0x2 family 0 socktype 1 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 0 socktype 2 protocol 0 addrlen 0 host (empty) serv 80
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/no_serv_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/no_serv_v4_only.exp
new file mode 100644
index 000000000000..0d28490c8d81
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/no_serv_v4_only.exp
@@ -0,0 +1,20 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv (empty)
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv 0
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv 0
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
(empty)
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 0
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 0
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 0
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv 0
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv 0
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 
(empty)
+Name does not resolve
diff --git a/lib/libc/tests/net/getaddrinfo/data/no_serv_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/no_serv_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..0d28490c8d81
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/no_serv_v4v6_prefer_v4.exp
@@ -0,0 +1,20 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host ::1 serv (empty)
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv 0
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv 0
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host 127.0.0.1 serv 
(empty)
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 0
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 0
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 0
+ai4: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv 0
+ai5: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv 0
+ai6: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host (empty) serv 
(empty)
+Name does not resolve
diff --git a/lib/libc/tests/net/getaddrinfo/data/scoped_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/scoped_v4_only.exp
new file mode 100644
index 000000000000..f5ddb4bf6feb
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/scoped_v4_only.exp
@@ -0,0 +1,5 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host fe80::1%lo0 serv 
http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host fe80::1%lo0 
serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host fe80::1%lo0 
serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host fe80::1%lo0 
serv http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/scoped_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/scoped_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..f5ddb4bf6feb
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/scoped_v4v6_prefer_v4.exp
@@ -0,0 +1,5 @@
+arg: flags 0x2 family 0 socktype 0 protocol 0 addrlen 0 host fe80::1%lo0 serv 
http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host fe80::1%lo0 
serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host fe80::1%lo0 
serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host fe80::1%lo0 
serv http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4_only.exp
new file mode 100644
index 000000000000..932c1faab0d3
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4_only.exp
@@ -0,0 +1,15 @@
+arg: flags 0x2 family 0 socktype 3 protocol 0 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 3 protocol 0 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 28 socktype 3 protocol 0 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 3 protocol 59 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 28 socktype 3 protocol 59 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 80
+Service was not recognized for socket type
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 
www
+Service was not recognized for socket type
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host ::1 serv (empty)
+ai1: flags 0x2 family 28 socktype 3 protocol 59 addrlen 28 host ::1 serv 0
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..932c1faab0d3
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/sock_raw_v4v6_prefer_v4.exp
@@ -0,0 +1,15 @@
+arg: flags 0x2 family 0 socktype 3 protocol 0 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 3 protocol 0 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 28 socktype 3 protocol 0 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 
(empty)
+ai1: flags 0x2 family 2 socktype 3 protocol 59 addrlen 16 host 127.0.0.1 serv 0
+ai2: flags 0x2 family 28 socktype 3 protocol 59 addrlen 28 host ::1 serv 0
+
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 80
+Service was not recognized for socket type
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host localhost serv 
www
+Service was not recognized for socket type
+arg: flags 0x2 family 0 socktype 3 protocol 59 addrlen 0 host ::1 serv (empty)
+ai1: flags 0x2 family 28 socktype 3 protocol 59 addrlen 28 host ::1 serv 0
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4_only.exp
new file mode 100644
index 000000000000..af3506938503
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4_only.exp
@@ -0,0 +1,10 @@
+arg: flags 0x2 family 2 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 28 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..af3506938503
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/spec_fam_v4v6_prefer_v4.exp
@@ -0,0 +1,10 @@
+arg: flags 0x2 family 2 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 2 socktype 2 protocol 17 addrlen 16 host 127.0.0.1 serv 
http
+ai2: flags 0x2 family 2 socktype 1 protocol 6 addrlen 16 host 127.0.0.1 serv 
http
+ai3: flags 0x2 family 2 socktype 5 protocol 132 addrlen 16 host 127.0.0.1 serv 
http
+
+arg: flags 0x2 family 28 socktype 0 protocol 0 addrlen 0 host localhost serv 
http
+ai1: flags 0x2 family 28 socktype 2 protocol 17 addrlen 28 host ::1 serv http
+ai2: flags 0x2 family 28 socktype 1 protocol 6 addrlen 28 host ::1 serv http
+ai3: flags 0x2 family 28 socktype 5 protocol 132 addrlen 28 host ::1 serv http
+
diff --git a/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4_only.exp 
b/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4_only.exp
new file mode 100644
index 000000000000..69e6b48a854b
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4_only.exp
@@ -0,0 +1,2 @@
+arg: flags 0x2 family 99 socktype 0 protocol 0 addrlen 0 host localhost serv 
(empty)
+Address family not recognized
diff --git a/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4v6_prefer_v4.exp 
b/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4v6_prefer_v4.exp
new file mode 100644
index 000000000000..69e6b48a854b
--- /dev/null
+++ b/lib/libc/tests/net/getaddrinfo/data/unsup_fam_v4v6_prefer_v4.exp
@@ -0,0 +1,2 @@
+arg: flags 0x2 family 99 socktype 0 protocol 0 addrlen 0 host localhost serv 
(empty)
+Address family not recognized
diff --git a/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh 
b/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh
index 79997a9a1631..bd2aa8d94fa0 100755
--- a/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh
+++ b/lib/libc/tests/net/getaddrinfo/t_getaddrinfo.sh
@@ -29,43 +29,97 @@
 # SUCH DAMAGE.
 #
 
+IP6ADDRCTL_CMD="/usr/sbin/ip6addrctl"
+CURRENT_POLICY_FILE="current.conf"
+
+policy_backup()
+{
+    "${IP6ADDRCTL_CMD}" > "${CURRENT_POLICY_FILE}"
+}
+
+policy_cleanup()
+{
+    if [ -f "${CURRENT_POLICY_FILE}" ]; then
+        "${IP6ADDRCTL_CMD}" flush
+        cat "${CURRENT_POLICY_FILE}" | tail -n +2 | "${IP6ADDRCTL_CMD}" 
install /dev/stdin
+    fi
+}
+
 check_output()
 {
-       if [ "$2" = "none" ] ; then
-               exp="${1}.exp"
-       elif [ "$2" = "hosts" ] ; then
-               # Determine if localhost has an IPv6 address or not
-               lcl=$( cat /etc/hosts                                   | \
-                        sed -e 's/#.*$//' -e 's/[      ][      ]*/ /g' | \
-                        awk '/ localhost($| )/ {printf "%s ", $1}' )
-               if [ "${lcl%*::*}" = "${lcl}" ] ; then
-                       exp="${1}_v4.exp"
+       if [ "$2" = "none" ]; then
+               if [ "$3" = "prefer_v6" ]; then
+                       exp="${1}.exp"
+               else
+                       exp="${1}_v4_only.exp"
+               fi
+       elif [ "$2" = "hosts" ]; then
+               lcl=$(cat /etc/hosts | sed -e 's/#.*$//' -e 's/[        ][      
]*/ /g' | awk '/ localhost($| )/ {printf "%s ", $1}')
+               if [ "${lcl%*::*}" = "${lcl}" ]; then
+                       exp="${1}_v4_only.exp"
                else
-                       exp="${1}_v4v6.exp"
+                       if [ "$3" = "prefer_v6" ]; then
+                               exp="${1}_v4v6.exp"
+                       else
+                               exp="${1}_v4v6_prefer_v4.exp"
+                       fi
                fi
-       elif [ "$2" = "ifconfig" ] ; then
-               lcl=$( ifconfig lo0 | grep inet6 )
-               if [ -n "${lcl}" ] ; then
-                       exp="${1}_v4v6.exp"
+       elif [ "$2" = "ifconfig" ]; then
+               lcl=$(ifconfig lo0 | grep inet6)
+               if [ -n "${lcl}" ]; then
+                       if [ "$3" = "prefer_v6" ]; then
+                               exp="${1}_v4v6.exp"
+                       else
+                               exp="${1}_v4v6_prefer_v4.exp"
+                       fi
                else
-                       exp="${1}_v4.exp"
+                       exp="${1}_v4_only.exp"
                fi
        else
                atf_fail "Invalid family_match_type $2 requested."
        fi
 
-       cmp  -s $(atf_get_srcdir)/data/${exp} out && return
-       diff -u $(atf_get_srcdir)/data/${exp} out || \
-       atf_fail "Actual output does not match expected output"
+       cmp -s "$(atf_get_srcdir)/data/${exp}" out && return
+       diff -u "$(atf_get_srcdir)/data/${exp}" out || atf_fail "Actual output 
does not match expected output"
+}
+
+atf_test_case basic_prefer_v4 cleanup
+basic_prefer_v4_head()
+{
+       atf_set "descr" "Testing basic ones with prefer_v4"
+}
+basic_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST ::1 http
+         $TEST 127.0.0.1 http
+         $TEST localhost http
+         $TEST ::1 tftp
+         $TEST 127.0.0.1 tftp
+         $TEST localhost tftp
+         $TEST ::1 echo
+         $TEST 127.0.0.1 echo
+         $TEST localhost echo ) > out 2>&1
+
+       check_output basics hosts prefer_v4
+}
+basic_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case basic
+atf_test_case basic cleanup
 basic_head()
 {
-       atf_set "descr" "Testing basic ones"
+       atf_set "descr" "Testing basic ones with prefer_v6"
 }
 basic_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST ::1 http
@@ -78,31 +132,93 @@ basic_body()
          $TEST 127.0.0.1 echo
          $TEST localhost echo ) > out 2>&1
 
-       check_output basics hosts
+       check_output basics ifconfig prefer_v6
+}
+basic_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case specific_prefer_v4 cleanup
+specific_prefer_v4_head()
+{
+       atf_set "descr" "Testing specific address family with prefer_v4"
+}
+specific_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST -4 localhost http
+         $TEST -6 localhost http ) > out 2>&1
+
+       check_output spec_fam hosts prefer_v4
+}
+specific_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case specific
+atf_test_case specific cleanup
 specific_head()
 {
-       atf_set "descr" "Testing specific address family"
+       atf_set "descr" "Testing specific address family with prefer_v6"
 }
 specific_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST -4 localhost http
          $TEST -6 localhost http ) > out 2>&1
 
-       check_output spec_fam hosts
+       check_output spec_fam hosts prefer_v6
+}
+specific_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case empty_hostname_prefer_v4 cleanup
+empty_hostname_prefer_v4_head()
+{
+       atf_set "descr" "Testing empty hostname with prefer_v4"
+}
+empty_hostname_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST '' http
+         $TEST '' echo
+         $TEST '' tftp
+         $TEST '' 80
+         $TEST -P '' http
+         $TEST -P '' echo
+         $TEST -P '' tftp
+         $TEST -P '' 80
+         $TEST -S '' 80
+         $TEST -D '' 80 ) > out 2>&1
+
+       check_output no_host ifconfig prefer_v4
+}
+empty_hostname_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case empty_hostname
+atf_test_case empty_hostname cleanup
 empty_hostname_head()
 {
-       atf_set "descr" "Testing empty hostname"
+       atf_set "descr" "Testing empty hostname with prefer_v6"
 }
 empty_hostname_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST '' http
@@ -116,16 +232,45 @@ empty_hostname_body()
          $TEST -S '' 80
          $TEST -D '' 80 ) > out 2>&1
 
-       check_output no_host ifconfig
+       check_output no_host ifconfig prefer_v6
+}
+empty_hostname_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case empty_servname_prefer_v4 cleanup
+empty_servname_prefer_v4_head()
+{
+       atf_set "descr" "Testing empty service name with prefer_v4"
+}
+empty_servname_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST ::1 ''
+         $TEST 127.0.0.1 ''
+         $TEST localhost ''
+         $TEST '' '' ) > out 2>&1
+
+       check_output no_serv hosts prefer_v4
+}
+empty_servname_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case empty_servname
+atf_test_case empty_servname cleanup
 empty_servname_head()
 {
-       atf_set "descr" "Testing empty service name"
+       atf_set "descr" "Testing empty service name with prefer_v6"
 }
 empty_servname_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST ::1 ''
@@ -133,16 +278,46 @@ empty_servname_body()
          $TEST localhost ''
          $TEST '' '' ) > out 2>&1
 
-       check_output no_serv hosts
+       check_output no_serv ifconfig prefer_v6
+}
+empty_servname_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case sock_raw_prefer_v4 cleanup
+sock_raw_prefer_v4_head()
+{
+       atf_set "descr" "Testing raw socket with prefer_v4"
+}
+sock_raw_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST -R -p 0 localhost ''
+         $TEST -R -p 59 localhost ''
+         $TEST -R -p 59 localhost 80
+         $TEST -R -p 59 localhost www
+         $TEST -R -p 59 ::1 '' ) > out 2>&1
+
+       check_output sock_raw hosts prefer_v4
+}
+sock_raw_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case sock_raw
+atf_test_case sock_raw cleanup
 sock_raw_head()
 {
-       atf_set "descr" "Testing raw socket"
+       atf_set "descr" "Testing raw socket with prefer_v6"
 }
 sock_raw_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST -R -p 0 localhost ''
@@ -151,44 +326,109 @@ sock_raw_body()
          $TEST -R -p 59 localhost www
          $TEST -R -p 59 ::1 '' ) > out 2>&1
 
-       check_output sock_raw hosts
+       check_output sock_raw ifconfig prefer_v6
+}
+sock_raw_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case unsupported_family_prefer_v4 cleanup
+unsupported_family_prefer_v4_head()
+{
+       atf_set "descr" "Testing unsupported family with prefer_v4"
+}
+unsupported_family_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST -f 99 localhost '' ) > out 2>&1
+
+       check_output unsup_fam ifconfig prefer_v4
+}
+unsupported_family_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case unsupported_family
+atf_test_case unsupported_family cleanup
 unsupported_family_head()
 {
-       atf_set "descr" "Testing unsupported family"
+       atf_set "descr" "Testing unsupported family with prefer_v6"
 }
 unsupported_family_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST -f 99 localhost '' ) > out 2>&1
 
-       check_output unsup_fam none
+       check_output unsup_fam none prefer_v6
+}
+unsupported_family_cleanup()
+{
+       policy_cleanup
+}
+
+atf_test_case scopeaddr_prefer_v4 cleanup
+scopeaddr_prefer_v4_head()
+{
+       atf_set "descr" "Testing scoped address format with prefer_v4"
+}
+scopeaddr_prefer_v4_body()
+{
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv4
+       TEST=$(atf_get_srcdir)/h_gai
+
+       ( $TEST fe80::1%lo0 http
+#        IF=`ifconfig -a | grep -v '^  ' | sed -e 's/:.*//' | head -1 | awk 
'{print $1}'`
+#        $TEST fe80::1%$IF http
+       ) > out 2>&1
+
+       check_output scoped ifconfig prefer_v4
+}
+scopeaddr_prefer_v4_cleanup()
+{
+       policy_cleanup
 }
 
-atf_test_case scopeaddr
+atf_test_case scopeaddr cleanup
 scopeaddr_head()
 {
-       atf_set "descr" "Testing scoped address format"
+       atf_set "descr" "Testing scoped address format with prefer_v6"
 }
 scopeaddr_body()
 {
+       policy_backup
+       /etc/rc.d/ip6addrctl prefer_ipv6
        TEST=$(atf_get_srcdir)/h_gai
 
        ( $TEST fe80::1%lo0 http
-#        IF=`ifconfig -a | grep -v '^  ' | \
-#              sed -e 's/:.*//' | head -1 | awk '{print $1}'`
+#        IF=`ifconfig -a | grep -v '^  ' | sed -e 's/:.*//' | head -1 | awk 
'{print $1}'`
 #        $TEST fe80::1%$IF http
        ) > out 2>&1
 
-       check_output scoped none
+       check_output scoped none prefer_v6
+}
+scopeaddr_cleanup()
+{
+       policy_cleanup
 }
 
 atf_init_test_cases()
 {
-       service ip6addrctl prefer_ipv6
+       atf_add_test_case basic_prefer_v4
+       atf_add_test_case specific_prefer_v4
+       atf_add_test_case empty_hostname_prefer_v4
+       atf_add_test_case empty_servname_prefer_v4
+       atf_add_test_case sock_raw_prefer_v4
+       atf_add_test_case unsupported_family_prefer_v4
+       atf_add_test_case scopeaddr_prefer_v4
+
        atf_add_test_case basic
        atf_add_test_case specific
        atf_add_test_case empty_hostname

Reply via email to