1#!/bin/sh 2# SPDX-License-Identifier: GPL-2.0-or-later 3# Copyright (c) 2019-2020 Petr Vorel <pvorel@suse.cz> 4 5TST_NEEDS_ROOT=1 6TST_NEEDS_CMDS="ip" 7. tst_net.sh 8 9ROUTE_RHOST_PORT=${ROUTE_RHOST_PORT:-65535} 10ROUTE_MAX_IP=${ROUTE_MAX_IP:-5} 11 12IP_ADDR_DELIM=',' 13 14add_macvlan() 15{ 16 local action="add" 17 local OPTIND 18 while getopts d opt; do 19 case "$opt" in 20 d) action="del";; 21 esac 22 done 23 shift $((OPTIND - 1)) 24 25 local iface="$1" 26 local type="${2:-lhost}" 27 28 cmd="ip link $action $iface link $(tst_iface $type) type macvlan mode bridge" 29 if [ $type = "lhost" ]; then 30 ROD $cmd 31 [ "$action" = "add" ] || return 32 LHOST_IFACES="$LHOST_IFACES $iface" 33 else 34 tst_rhost_run -s -c "$cmd" 35 [ "$action" = "add" ] || return 36 RHOST_IFACES="$RHOST_IFACES $iface" 37 fi 38 tst_init_iface $type 1 39} 40 41check_max_ip() 42{ 43 local max_ip_limit=254 44 [ "$TST_IPV6" ] && max_ip_limit=65534 45 46 tst_is_int "$ROUTE_MAX_IP" || tst_brk TBROK "\$ROUTE_MAX_IP not int ($ROUTE_MAX_IP)" 47 [ $ROUTE_MAX_IP -gt $max_ip_limit ] && ROUTE_MAX_IP=$max_ip_limit 48 [ $ROUTE_MAX_IP -gt $ROUTE_CHANGE_NETLINK ] && ROUTE_MAX_IP=$ROUTE_CHANGE_NETLINK 49} 50 51cleanup_if() 52{ 53 [ "$new_liface" ] && add_macvlan -d $new_liface 54 [ "$new_riface" ] && add_macvlan -d $new_riface rhost 55 route_cleanup 56} 57 58route_cleanup() 59{ 60 tst_restore_ipaddr 61 tst_restore_ipaddr rhost 62} 63 64setup_gw() 65{ 66 rt="$(tst_ipaddr_un -p 0 0)" 67 lhost="$(tst_ipaddr_un 1 1)" 68 rhost="$(tst_ipaddr_un 0 1)" 69 tst_add_ipaddr -s -q -a $lhost 70 tst_add_ipaddr -s -q -a $rhost rhost 71} 72 73setup_if() 74{ 75 rt="$(tst_ipaddr_un -p 0)" 76 rhost="$(tst_ipaddr_un 0 1)" 77 tst_add_ipaddr -s -q -a $rhost rhost 78 79 if [ $(tst_get_ifaces_cnt) -lt 2 ]; then 80 new_liface="ltp_mv2" 81 tst_res TINFO "2 or more local ifaces required, adding '$new_liface'" 82 add_macvlan $new_liface 83 fi 84 85 if [ $(tst_get_ifaces_cnt rhost) -lt 2 ]; then 86 new_riface="ltp_mv1" 87 tst_res TINFO "2 or more remote ifaces required, adding '$new_riface'" 88 add_macvlan $new_riface rhost 89 fi 90} 91 92test_netlink() 93{ 94 local ret=0 95 local cmd ip_flag 96 [ "$TST_IPV6" ] && ip_flag="-6" 97 98 cmd="route-change-netlink -c $ROUTE_CHANGE_NETLINK $ip_flag -p $ROUTE_RHOST_PORT $ROUTE_CHANGE_NETLINK_PARAMS" 99 tst_res TINFO "running $cmd" 100 $cmd || ret=$? 101 if [ "$ret" -ne 0 ]; then 102 [ $((ret & 3)) -ne 0 ] && \ 103 tst_brk TFAIL "route-change-netlink failed" 104 [ $((ret & 32)) -ne 0 ] && \ 105 tst_brk TCONF "not supported configuration" 106 [ $((ret & 4)) -ne 0 ] && \ 107 tst_res TWARN "route-change-netlink has warnings" 108 fi 109 tst_res TPASS "route-change-netlink passed" 110} 111