netns.sh (782c72af567fc2ef09bd7615d0307f24de72c7e0) netns.sh (20ae1d6aa159eb91a9bf09ff92ccaa94dbea92c2)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
5#
6# This script tests the below topology:
7#
8# ┌─────────────────────┐ ┌──────────────────────────────────┐ ┌─────────────────────┐

--- 599 unchanged lines hidden (view full) ---

608exec 4< <(n0 ncat -l -u -p 1111)
609ncat_pid=$!
610waitncatudp $netns0 $ncat_pid
611ip0 link set wg0 up
612! read -r -n 1 -t 2 <&4 || false
613kill $ncat_pid
614ip0 link del wg0
615
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
5#
6# This script tests the below topology:
7#
8# ┌─────────────────────┐ ┌──────────────────────────────────┐ ┌─────────────────────┐

--- 599 unchanged lines hidden (view full) ---

608exec 4< <(n0 ncat -l -u -p 1111)
609ncat_pid=$!
610waitncatudp $netns0 $ncat_pid
611ip0 link set wg0 up
612! read -r -n 1 -t 2 <&4 || false
613kill $ncat_pid
614ip0 link del wg0
615
616# Ensure that dst_cache references don't outlive netns lifetime
617ip1 link add dev wg0 type wireguard
618ip2 link add dev wg0 type wireguard
619configure_peers
620ip1 link add veth1 type veth peer name veth2
621ip1 link set veth2 netns $netns2
622ip1 addr add fd00:aa::1/64 dev veth1
623ip2 addr add fd00:aa::2/64 dev veth2
624ip1 link set veth1 up
625ip2 link set veth2 up
626waitiface $netns1 veth1
627waitiface $netns2 veth2
628ip1 -6 route add default dev veth1 via fd00:aa::2
629ip2 -6 route add default dev veth2 via fd00:aa::1
630n1 wg set wg0 peer "$pub2" endpoint [fd00:aa::2]:2
631n2 wg set wg0 peer "$pub1" endpoint [fd00:aa::1]:1
632n1 ping6 -c 1 fd00::2
633pp ip netns delete $netns1
634pp ip netns delete $netns2
635pp ip netns add $netns1
636pp ip netns add $netns2
637
616# Ensure there aren't circular reference loops
617ip1 link add wg1 type wireguard
618ip2 link add wg2 type wireguard
619ip1 link set wg1 netns $netns2
620ip2 link set wg2 netns $netns1
621pp ip netns delete $netns1
622pp ip netns delete $netns2
623pp ip netns add $netns1
624pp ip netns add $netns2
625
626sleep 2 # Wait for cleanup and grace periods
627declare -A objects
628while read -t 0.1 -r line 2>/dev/null || [[ $? -ne 142 ]]; do
629 [[ $line =~ .*(wg[0-9]+:\ [A-Z][a-z]+\ ?[0-9]*)\ .*(created|destroyed).* ]] || continue
630 objects["${BASH_REMATCH[1]}"]+="${BASH_REMATCH[2]}"
631done < /dev/kmsg
632alldeleted=1
633for object in "${!objects[@]}"; do
638# Ensure there aren't circular reference loops
639ip1 link add wg1 type wireguard
640ip2 link add wg2 type wireguard
641ip1 link set wg1 netns $netns2
642ip2 link set wg2 netns $netns1
643pp ip netns delete $netns1
644pp ip netns delete $netns2
645pp ip netns add $netns1
646pp ip netns add $netns2
647
648sleep 2 # Wait for cleanup and grace periods
649declare -A objects
650while read -t 0.1 -r line 2>/dev/null || [[ $? -ne 142 ]]; do
651 [[ $line =~ .*(wg[0-9]+:\ [A-Z][a-z]+\ ?[0-9]*)\ .*(created|destroyed).* ]] || continue
652 objects["${BASH_REMATCH[1]}"]+="${BASH_REMATCH[2]}"
653done < /dev/kmsg
654alldeleted=1
655for object in "${!objects[@]}"; do
634 if [[ ${objects["$object"]} != *createddestroyed ]]; then
656 if [[ ${objects["$object"]} != *createddestroyed && ${objects["$object"]} != *createdcreateddestroyeddestroyed ]]; then
635 echo "Error: $object: merely ${objects["$object"]}" >&3
636 alldeleted=0
637 fi
638done
639[[ $alldeleted -eq 1 ]]
640pretty "" "Objects that were created were also destroyed."
657 echo "Error: $object: merely ${objects["$object"]}" >&3
658 alldeleted=0
659 fi
660done
661[[ $alldeleted -eq 1 ]]
662pretty "" "Objects that were created were also destroyed."