mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-20 05:37:57 +00:00
96 lines
2.7 KiB
Bash
96 lines
2.7 KiB
Bash
|
# Common definitions for routing tests.
|
||
|
#
|
||
|
# Copyright 2012-2015 Serval Project, Inc.
|
||
|
# Copyright 2016-2018 Flinders University
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU General Public License
|
||
|
# as published by the Free Software Foundation; either version 2
|
||
|
# of the License, or (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software
|
||
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
|
||
|
interface_is_up() {
|
||
|
$GREP "Interface .* is up" $instance_servald_log || return 1
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
link_matches() {
|
||
|
local interface_ex=".*"
|
||
|
local link_type="(BROADCAST|UNICAST)"
|
||
|
local via=".*"
|
||
|
while [ $# -ne 0 ]; do
|
||
|
case "$1" in
|
||
|
--interface) interface_ex="$2"; shift 2;;
|
||
|
--broadcast) link_type="BROADCAST"; shift;;
|
||
|
--unicast) link_type="UNICAST"; shift;;
|
||
|
--via) link_type="INDIRECT"; via="$2"; interface_ex=""; shift 2;;
|
||
|
--any) via=".*"; link_type=".*"; shift;;
|
||
|
*) break;;
|
||
|
esac
|
||
|
done
|
||
|
local oIFS="$IFS"
|
||
|
IFS='|'
|
||
|
local sids="$*"
|
||
|
IFS="$oIFS"
|
||
|
local rexp="^(${sids}):${link_type}:${interface_ex}:${via}:"
|
||
|
tfw_log "Looking for $rexp"
|
||
|
if ! $GREP -E "$rexp" "$TFWSTDOUT"; then
|
||
|
tfw_log "Link not found"
|
||
|
tfw_cat --stdout
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
has_link() {
|
||
|
executeOk_servald route print
|
||
|
link_matches $@
|
||
|
}
|
||
|
|
||
|
has_no_link() {
|
||
|
has_link --any $@ || return 0
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
path_exists() {
|
||
|
local dest
|
||
|
eval dest=\$$#
|
||
|
local dest_sidvar=SID${dest#+}
|
||
|
local dest_sids
|
||
|
eval 'dest_sids=("${'$dest_sidvar'[@]}")'
|
||
|
local first_inst=$1
|
||
|
local next_inst=$first_inst
|
||
|
shift
|
||
|
local I
|
||
|
for I; do
|
||
|
local sidvar=SID${I#+}
|
||
|
local sids
|
||
|
eval 'sids=("${'$sidvar'[@]}")'
|
||
|
[ "${#sids[@]}" -gt 0 ] || error "no SIDs known for identity $I"
|
||
|
set_instance $next_inst
|
||
|
executeOk_servald route print
|
||
|
link_matches "${sids[@]}" || return 1
|
||
|
[ $I = $dest ] && break
|
||
|
link_matches --via ${!sidvar} "${dest_sids[@]}" || return 1
|
||
|
next_inst=$I
|
||
|
done
|
||
|
# so we think this path should exist, check that it works
|
||
|
set_instance $first_inst
|
||
|
executeOk_servald --stderr mdp trace --timeout=20 "${dest_sids[0]}"
|
||
|
# assertStdoutGrep "^[0-9]+:$dest_sids\$"
|
||
|
tfw_cat --stdout
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
log_routing_table() {
|
||
|
executeOk_servald route print
|
||
|
tfw_cat --stdout --stderr
|
||
|
}
|