diff options
Diffstat (limited to 'contrib/netbsd-tests/net/if')
-rw-r--r-- | contrib/netbsd-tests/net/if/ifconf.c | 134 | ||||
-rw-r--r-- | contrib/netbsd-tests/net/if/t_compat.c | 4 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/if/t_ifconf.sh | 100 | ||||
-rwxr-xr-x | contrib/netbsd-tests/net/if/t_ifconfig.sh | 333 |
4 files changed, 570 insertions, 1 deletions
diff --git a/contrib/netbsd-tests/net/if/ifconf.c b/contrib/netbsd-tests/net/if/ifconf.c new file mode 100644 index 0000000..424c5e8 --- /dev/null +++ b/contrib/netbsd-tests/net/if/ifconf.c @@ -0,0 +1,134 @@ +/* $NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $ */ +/* + * Copyright (c) 2014 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__RCSID("$NetBSD: ifconf.c,v 1.1 2014/12/08 04:23:03 ozaki-r Exp $"); +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/sockio.h> +#include <sys/ioctl.h> + +#include <net/if.h> + +#include <stdio.h> +#include <err.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +static void +help(void) +{ + fprintf(stderr, "usage:\n\t%s total\n\t%s list [<nifreqs>]\n", + getprogname(), getprogname()); + exit(EXIT_FAILURE); +} + +static int +get_number_of_entries(void) +{ + int fd, r; + struct ifconf ifc; + + fd = socket(AF_INET, SOCK_DGRAM, 0); + if (fd == -1) + err(EXIT_FAILURE, "socket"); + + ifc.ifc_len = 0; + ifc.ifc_buf = NULL; + + r = ioctl(fd, SIOCGIFCONF, &ifc); + if (r == -1) + err(EXIT_FAILURE, "ioctl"); + + close(fd); + + return ifc.ifc_len / sizeof(struct ifreq); +} + +static void +show_number_of_entries(void) +{ + printf("%d\n", get_number_of_entries()); +} + +static void +show_interfaces(int nifreqs) +{ + int i, fd, r; + struct ifconf ifc; + struct ifreq *ifreqs; + + if (nifreqs == 0) + nifreqs = get_number_of_entries(); + + if (nifreqs <= 0) + errx(EXIT_FAILURE, "nifreqs=%d", nifreqs); + + ifreqs = malloc(sizeof(struct ifreq) * nifreqs); + if (ifreqs == NULL) + err(EXIT_FAILURE, "malloc(sizeof(ifreq) * %d)", nifreqs); + + fd = socket(AF_INET, SOCK_DGRAM, 0); + if (fd == -1) + err(EXIT_FAILURE, "socket"); + + ifc.ifc_len = sizeof(struct ifreq) * nifreqs; + ifc.ifc_req = ifreqs; + + r = ioctl(fd, SIOCGIFCONF, &ifc); + if (r == -1) + err(EXIT_FAILURE, "ioctl"); + close(fd); + + for (i=0; i < (int)(ifc.ifc_len / sizeof(struct ifreq)); i++) { + printf("%s: af=%hhu socklen=%hhu\n", ifreqs[i].ifr_name, + ifreqs[i].ifr_addr.sa_family, ifreqs[i].ifr_addr.sa_len); + } + + free(ifreqs); +} + +int +main(int argc, char *argv[]) +{ + if (argc < 2) + help(); + + if (strcmp(argv[1], "total") == 0) { + show_number_of_entries(); + } else if (strcmp(argv[1], "list") == 0) { + if (argc == 2) + show_interfaces(0); + else if (argc == 3) + show_interfaces(atoi(argv[2])); + else + help(); + } else + help(); + + return EXIT_SUCCESS; +} diff --git a/contrib/netbsd-tests/net/if/t_compat.c b/contrib/netbsd-tests/net/if/t_compat.c index 4798034..9eb84a3 100644 --- a/contrib/netbsd-tests/net/if/t_compat.c +++ b/contrib/netbsd-tests/net/if/t_compat.c @@ -1,4 +1,4 @@ -/* $NetBSD: t_compat.c,v 1.1 2010/11/07 19:53:42 pooka Exp $ */ +/* $NetBSD: t_compat.c,v 1.4 2016/11/12 15:12:59 kre Exp $ */ #include <sys/socket.h> #include <sys/ioctl.h> @@ -65,6 +65,8 @@ ATF_TC_BODY(OOSIOCGIFBRDADDR, tc) sprintf(ifreq.ifr_name, "shmif%d", ifnum); netcfg_rump_if(ifreq.ifr_name, "1.7.64.10", "255.255.0.0"); + atf_tc_expect_fail("PR kern/51610: rump does not include COMPAT_43"); + /* query kernel for iface bcast */ RL(fd = rump_sys_socket(AF_INET, SOCK_DGRAM, 0)); RL(rump_sys_ioctl(fd, OOSIOCGIFBRDADDR, &ifreq)); diff --git a/contrib/netbsd-tests/net/if/t_ifconf.sh b/contrib/netbsd-tests/net/if/t_ifconf.sh new file mode 100755 index 0000000..f56e9e3 --- /dev/null +++ b/contrib/netbsd-tests/net/if/t_ifconf.sh @@ -0,0 +1,100 @@ +# $NetBSD: t_ifconf.sh,v 1.3 2016/08/10 22:30:02 kre Exp $ +# +# Copyright (c) 2014 The NetBSD Foundation, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +RUMP_SERVER1=unix://./r1 + +RUMP_FLAGS=\ +"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_shmif -lrumpdev" + +atf_test_case basic cleanup +basic_head() +{ + + atf_set "descr" "basic ifconf (SIOCGIFCONF) test" + atf_set "require.progs" "rump_server" +} + +basic_body() +{ + local ifconf="$(atf_get_srcdir)/ifconf" + + atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1} + + export RUMP_SERVER=${RUMP_SERVER1} + export LD_PRELOAD=/usr/lib/librumphijack.so + + # lo0 (127.0.0.1 and link local) + atf_check -s exit:0 -o match:'^2$' "$ifconf" total + atf_check -s exit:0 -o match:'lo0' "$ifconf" list + + # Add shmif0 (no address) + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 -o match:'^3$' "$ifconf" total + atf_check -s exit:0 -o match:'shmif0' "$ifconf" list + + # Add shmif1 (no address) + atf_check -s exit:0 rump.ifconfig shmif1 create + atf_check -s exit:0 -o match:'^4$' "$ifconf" total + atf_check -s exit:0 -o match:'shmif1' "$ifconf" list + + # Add an address to shmif0 + atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus + atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24 + atf_check -s exit:0 -o match:'^5$' "$ifconf" total + + # Vary the number of requesting interfaces + atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l" + atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l" + atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l" + atf_check -s exit:0 -o match:4 -x "$ifconf list 4 | wc -l" + atf_check -s exit:0 -o match:5 -x "$ifconf list 5 | wc -l" + atf_check -s exit:0 -o match:5 -x "$ifconf list 6 | wc -l" + + # Check if removing an interface is reflected + atf_check -s exit:0 rump.ifconfig shmif0 destroy + atf_check -s exit:0 -o match:'^3$' "$ifconf" total + atf_check -s exit:0 -o not-match:'shmif0' "$ifconf" list + atf_check -s exit:0 -o match:1 -x "$ifconf list 1 | wc -l" + atf_check -s exit:0 -o match:2 -x "$ifconf list 2 | wc -l" + atf_check -s exit:0 -o match:3 -x "$ifconf list 3 | wc -l" + atf_check -s exit:0 -o match:3 -x "$ifconf list 4 | wc -l" + + unset LD_PRELOAD + unset RUMP_SERVER +} + +basic_cleanup() +{ + + RUMP_SERVER=${RUMP_SERVER1} rump.halt +} + +atf_init_test_cases() +{ + + atf_add_test_case basic +} diff --git a/contrib/netbsd-tests/net/if/t_ifconfig.sh b/contrib/netbsd-tests/net/if/t_ifconfig.sh new file mode 100755 index 0000000..a610017 --- /dev/null +++ b/contrib/netbsd-tests/net/if/t_ifconfig.sh @@ -0,0 +1,333 @@ +# $NetBSD: t_ifconfig.sh,v 1.14 2016/10/01 22:15:04 kre Exp $ +# +# Copyright (c) 2015 The NetBSD Foundation, Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +RUMP_SERVER1=unix://./r1 +RUMP_SERVER2=unix://./r2 + +RUMP_FLAGS=\ +"-lrumpnet -lrumpnet_net -lrumpnet_netinet -lrumpnet_netinet6 -lrumpnet_shmif" +RUMP_FLAGS="${RUMP_FLAGS} -lrumpdev" + +TIMEOUT=3 + +anycast="[Aa][Nn][Yy][Cc][Aa][Ss][Tt]" +deprecated="[Dd][Ee][Pp][Rr][Ee][Cc][Aa][Tt][Ee][Dd]" + +atf_test_case ifconfig_create_destroy cleanup +ifconfig_create_destroy_head() +{ + + atf_set "descr" "tests of ifconfig create and destroy" + atf_set "require.progs" "rump_server" +} + +ifconfig_create_destroy_body() +{ + atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1} + + export RUMP_SERVER=${RUMP_SERVER1} + + # Create and destroy (no address) + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 destroy + + # Create and destroy (with an IPv4 address) + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus + atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24 + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig shmif0 destroy + + # Create and destroy (with an IPv6 address) + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig shmif0 destroy + + unset RUMP_SERVER +} + +ifconfig_create_destroy_cleanup() +{ + + RUMP_SERVER=${RUMP_SERVER1} rump.halt +} + +atf_test_case ifconfig_options cleanup +ifconfig_options_head() +{ + + atf_set "descr" "tests of ifconfig options" + atf_set "require.progs" "rump_server" +} + +ifconfig_options_body() +{ + + export RUMP_SERVER=${RUMP_SERVER1} + atf_check -s exit:0 rump_server $RUMP_FLAGS $RUMP_SERVER1 + + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 create + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 linkstr bus1 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet 10.0.0.1/24 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::1/64 + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o ignore rump.ifconfig -w 10 + $DEBUG && rump.ifconfig shmif0 + + # ifconfig [-N] interface address_family + # -N resolves hostnames + atf_check -s exit:0 -o match:'inet 127.0.0.1' rump.ifconfig lo0 inet + atf_check -s exit:0 -o match:'inet localhost' rump.ifconfig -N lo0 inet + atf_check -s exit:0 -o match:'inet6 ::1' rump.ifconfig lo0 inet6 + atf_check -s exit:0 -o match:'inet6 localhost' rump.ifconfig -N lo0 inet6 + atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig lo0 atalk + atf_check -s not-exit:0 -e match:'not supported' rump.ifconfig -N lo0 atalk + atf_check -s exit:0 -o ignore rump.ifconfig lo0 link + atf_check -s exit:0 -o ignore rump.ifconfig -N lo0 link + + # ifconfig [-hLmNvz] interface + # -h -v shows statistics in human readable format + atf_check -s exit:0 -o ignore rump.ifconfig -h -v lo0 + # -L shows IPv6 lifetime + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 inet6 fc00::2 \ + pltime 100 + $DEBUG && rump.ifconfig -L shmif0 + atf_check -s exit:0 -o match:'pltime' rump.ifconfig -L shmif0 + atf_check -s exit:0 -o match:'vltime' rump.ifconfig -L shmif0 + # -m shows all of the supported media (not supported in shmif) + $DEBUG && rump.ifconfig -m shmif0 + atf_check -s exit:0 -o ignore rump.ifconfig -m shmif0 + atf_check -s exit:0 -o match:'localhost' rump.ifconfig -N lo0 + atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0 + atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost + # -z clears and shows statistics at that point + atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -z lo0 + atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -v lo0 + + # ifconfig -a [-bdhLNmsuvz] + # -a shows all interfaces in the system + $DEBUG && rump.ifconfig -a + atf_check -s exit:0 -o match:'shmif0' -o match:'lo0' rump.ifconfig -a + # -a -b shows only broadcast interfaces + atf_check -s exit:0 -o match:'shmif0' -o not-match:'lo0' rump.ifconfig -a -b + # -a -d shows only down interfaces + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -d + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -d + atf_check -s exit:0 -o match:'pltime' rump.ifconfig -a -L + atf_check -s exit:0 -o match:'vltime' rump.ifconfig -a -L + atf_check -s exit:0 -o match:'localhost' rump.ifconfig -a -N + atf_check -s exit:0 -o ignore rump.ifconfig -a -m + # -a -s shows only interfaces connected to a network + # (shmif is always connected) + $DEBUG && rump.ifconfig -a -s + atf_check -s exit:0 -o ignore rump.ifconfig -a -s + # -a -u shows only up interfaces + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -a -u + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down + atf_check -s exit:0 -o not-match:'shmif0' rump.ifconfig -a -u + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v + atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT localhost + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 down + atf_check -s exit:0 -o match:'2 packets' rump.ifconfig -a -z + atf_check -s exit:0 -o not-match:'2 packets' rump.ifconfig -a -v + atf_check -s exit:0 -o match:'0 packets' rump.ifconfig -a -v + atf_check -s exit:0 -o ignore rump.ifconfig shmif0 up + + # ifconfig -l [-bdsu] + # -l shows only inteface names + atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -b + atf_check -s exit:0 -o not-match:'lo0' rump.ifconfig -l -b + atf_check -s exit:0 -o ignore rump.ifconfig -l -d + atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -s + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -s + atf_check -s exit:0 -o match:'lo0' rump.ifconfig -l -u + atf_check -s exit:0 -o match:'shmif0' rump.ifconfig -l -u + + # ifconfig -s interface + # -s interface exists with 0 / 1 if connected / disconnected + atf_check -s exit:0 -o empty rump.ifconfig -s lo0 + atf_check -s exit:0 -o empty rump.ifconfig -s shmif0 + + # ifconfig -C + # -C shows all of the interface cloners available on the system + atf_check -s exit:0 -o match:'shmif lo carp' rump.ifconfig -C + + unset RUMP_SERVER +} + +ifconfig_options_cleanup() +{ + + env RUMP_SERVER=${RUMP_SERVER1} rump.halt +} + + +atf_test_case ifconfig_parameters cleanup +ifconfig_parameters_head() +{ + atf_set "descr" "tests of interface parameters" + atf_set "require.progs" "rump_server" +} + +ifconfig_parameters_body() +{ + local interval= + + atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER1} + atf_check -s exit:0 rump_server ${RUMP_FLAGS} ${RUMP_SERVER2} + + export RUMP_SERVER=${RUMP_SERVER1} + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus + atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.1/24 + atf_check -s exit:0 rump.ifconfig shmif0 up + unset RUMP_SERVER + + export RUMP_SERVER=${RUMP_SERVER2} + atf_check -s exit:0 rump.ifconfig shmif0 create + atf_check -s exit:0 rump.ifconfig shmif0 linkstr shmbus + atf_check -s exit:0 rump.ifconfig shmif0 192.168.0.2/24 + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.3/24 alias + atf_check -s exit:0 rump.ifconfig shmif0 up + unset RUMP_SERVER + + export RUMP_SERVER=${RUMP_SERVER1} + + # active + atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:01 active + atf_check -s exit:0 -o match:'address:.b2:a0:75:00:00:01' \ + rump.ifconfig shmif0 + # down, up + atf_check -s exit:0 rump.ifconfig shmif0 down + atf_check -s not-exit:0 -o ignore -e ignore rump.ping -c 1 \ + -w $TIMEOUT -n 192.168.0.2 + atf_check -s exit:0 rump.ifconfig shmif0 up + atf_check -s exit:0 rump.ifconfig -w 10 + atf_check -s exit:0 -o ignore rump.ping -c 1 -w $TIMEOUT -n 192.168.0.2 + + # alias + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 alias + atf_check -s exit:0 -o match:'192.168.1.1/24' rump.ifconfig shmif0 + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1/24 -alias + atf_check -s exit:0 -o not-match:'192.168.1.1/24' rump.ifconfig shmif0 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 + atf_check -s exit:0 -o match:'fc00::1' rump.ifconfig shmif0 inet6 + atf_check -s exit:0 -o match:'fc00::2' rump.ifconfig shmif0 inet6 + + # delete + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 alias + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.1.1 delete + atf_check -s exit:0 -o not-match:'192.168.1.1' rump.ifconfig shmif0 inet + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1 delete + atf_check -s exit:0 -o not-match:'192.168.0.1' rump.ifconfig shmif0 inet + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 delete + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 delete + atf_check -s exit:0 -o not-match:'fc00::1' rump.ifconfig shmif0 inet6 + atf_check -s exit:0 -o not-match:'fc00::2' rump.ifconfig shmif0 inet6 + # can delete inactive link + atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02 + atf_check -s exit:0 rump.ifconfig shmif0 link b2:a0:75:00:00:02 delete + # cannot delete active link + atf_check -s not-exit:0 -e match:'SIOCDLIFADDR: Device busy' \ + rump.ifconfig shmif0 link b2:a0:75:00:00:01 delete + + atf_check -s exit:0 rump.ifconfig shmif0 inet 192.168.0.1/24 + + # arp + atf_check -s exit:0 rump.ifconfig shmif0 -arp + atf_check -s not-exit:0 -o ignore -e ignore \ + rump.ping -c 1 -w $TIMEOUT -n 192.168.0.3 + atf_check -s exit:0 -o not-match:'192.168.0.3' rump.arp -an + # The entry shouldn't appear in the routing table anymore + atf_check -s exit:0 -o not-match:'192.168.0.3' rump.netstat -nr + + # netmask + atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 netmask 255.255.255.0 alias + atf_check -s exit:0 -o match:'172.16.0/24' rump.netstat -rn -f inet + atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 delete + + # broadcast (does it not work?) + atf_check -s exit:0 rump.ifconfig shmif0 inet 172.16.0.1 \ + broadcast 255.255.255.255 alias + atf_check -s exit:0 -o match:'broadcast 255.255.255.255' \ + rump.ifconfig shmif0 inet + + # metric (external only) + atf_check -s exit:0 rump.ifconfig shmif0 metric 10 + atf_check -s exit:0 rump.ifconfig shmif0 metric 0 + + # prefixlen + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::1 prefixlen 70 + atf_check -s exit:0 -o match:'fc00::/70' rump.netstat -rn -f inet6 + + # anycast + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::2 anycast + atf_check -s exit:0 -o match:"fc00::2.+$anycast" rump.ifconfig shmif0 inet6 + + # deprecated + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 deprecated + # Not deprecated immediately. Need to wait nd6_timer that does it is scheduled. + interval=$(sysctl -n net.inet6.icmp6.nd6_prune) + atf_check -s exit:0 sleep $((interval + 1)) + atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 -deprecated + atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6 + + # pltime + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00::3 pltime 3 + atf_check -s exit:0 -o not-match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6 + atf_check -s exit:0 sleep 5 + atf_check -s exit:0 -o match:"fc00::3.+$deprecated" rump.ifconfig shmif0 inet6 + + # eui64 + atf_check -s exit:0 rump.ifconfig shmif0 inet6 fc00:1::0 eui64 + atf_check -s exit:0 -o match:'fc00:1::' rump.ifconfig shmif0 inet6 + + unset RUMP_SERVER +} + +ifconfig_parameters_cleanup() +{ + env RUMP_SERVER=${RUMP_SERVER1} rump.halt + env RUMP_SERVER=${RUMP_SERVER2} rump.halt +} + +atf_init_test_cases() +{ + + atf_add_test_case ifconfig_create_destroy + atf_add_test_case ifconfig_options + atf_add_test_case ifconfig_parameters +} |