Lines Matching +full:local +full:- +full:mac +full:- +full:address
2 # SPDX-License-Identifier: GPL-2.0
7 declare -A NETIFS=(
41 # Constants for netdevice bring-up:
45 # Like INTERFACE_TIMEOUT, but default for ad-hoc waiting in testing scripts.
73 # Whether to override MAC addresses on interfaces participating in the test.
82 # Whether the machine is "slow" -- i.e. might be incapable of running tests
84 # e.g. a low-power board.
88 # Find netifs by test-specified driver name
92 local dev=$1; shift
93 local driver_path="/sys/class/net/$dev/device/driver"
95 if [[ -L $driver_path ]]; then
102 local ifnames=`ip -j link show | jq -r ".[].ifname"`
103 local count=0
107 local driver_name=`driver_name_get $ifname`
108 if [[ ! -z $driver_name && $driver_name == $NETIF_FIND_DRIVER ]]; then
120 declare -A NETIFS
124 net_forwarding_dir=$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")
126 if [[ -f $net_forwarding_dir/forwarding.config ]]; then
137 tc -j &> /dev/null
138 if [[ $? -ne 0 ]]; then
147 local dev=$1; shift
151 if [[ $? -ne 0 ]]; then
162 local dev=$1; shift
163 local ret;
169 if [[ $? -ne 0 ]]; then
170 echo "SKIP: iproute2 too old; tc-flower is missing extended MPLS support"
174 tc -j filter show dev $dev ingress protocol mpls_uc | jq . &> /dev/null
179 if [[ $ret -ne 0 ]]; then
180 echo "SKIP: iproute2 too old; tc-flower produces invalid json output for extended MPLS filters"
188 if [[ $? -ne 0 ]]; then
197 if [[ $? -ne 0 ]]; then
205 tc actions help 2>&1 | grep -q hw_stats
206 if [[ $? -ne 0 ]]; then
214 tc qdisc add dev lo mqprio help 2>&1 | grep -q "fp "
215 if [[ $? -ne 0 ]]; then
223 ethtool --help 2>&1| grep lanes &> /dev/null
224 if [[ $? -ne 0 ]]; then
232 ethtool --help 2>&1| grep -- '--show-mm' &> /dev/null
233 if [[ $? -ne 0 ]]; then
234 echo "SKIP: ethtool too old; it is missing MAC Merge layer support"
241 ethtool --help 2>&1| grep -- '--all-groups' &> /dev/null
242 if [[ $? -ne 0 ]]; then
250 local dev=$1; shift
251 local grp=$1; shift
253 [ 0 -ne $(ethtool --json -S $dev --all-groups --src pmac 2>/dev/null \
259 if ! bridge -d link show | grep -q " locked"; then
267 if ! bridge -d link show | grep -q "mab"; then
273 if [[ "$(id -u)" -ne 0 ]]; then
280 local dev=$1; shift
281 local expected=$1; shift
282 local driver_name=`driver_name_get $dev`
297 local version="$(msend -v)"
298 local major
301 major=$(echo $version | cut -d. -f1)
303 if [ $major -lt 3 ]; then
330 while [[ $# -gt 0 ]]; do
331 if [[ "$count" -eq "0" ]]; then
333 declare -A NETIFS
343 if [[ ! -v NUM_NETIFS ]]; then
362 local i
365 local j=$((i+1))
367 if [ -z ${NETIFS[p$i]} ]; then
373 if [[ $? -ne 0 ]]; then
376 if [[ $? -ne 0 ]]; then
396 declare -A MAC_ADDR_ORIG
399 local new_addr=
400 local dev=
406 MAC_ADDR_ORIG["$dev"]=$(ip -j link show dev $dev | jq -e '.[].address')
409 ip link set dev $dev address $new_addr
415 local dev=
419 ip link set dev $dev address ${MAC_ADDR_ORIG["$dev"]}
433 if [[ $? -ne 0 ]]; then
450 local arr=("$@")
454 if [[ $cur -gt $max ]]; then
464 local addr=$1; shift
465 local word
466 local flag
470 if [ "$1" == "-v" ]; then
480 "$@" | grep -q "Link detected: yes"
485 "$@" | grep -q offload
490 "$@" | grep -q trap
495 local dev=$1; shift
496 local wait_time=${1:-$WAIT_TIME}; shift
509 local dev=$1; shift
510 local max_iterations=${1:-$WAIT_TIMEOUT}; shift
511 local wait_time=${1:-$WAIT_TIME}; shift
512 local i
517 if [[ $? -ne 0 ]]; then
530 local num_netifs=${1:-$NUM_NETIFS}
531 local i
543 local dev=$1; shift
544 local timeout=${1:-$WAIT_TIMEOUT}; shift
556 local cmd=$1
557 local jq_exp=$2
558 local jq_opts=$3
559 local ret
560 local output
565 if [[ $ret -ne 0 ]]; then
568 output=$(echo $output | jq -r $jq_opts "$jq_exp")
570 if [[ $ret -ne 0 ]]; then
574 # return success only in case of non-empty output
575 [ ! -z "$output" ]
592 ip -4 rule add pref 32765 table local
593 ip -4 rule del pref 0
594 ip -6 rule add pref 32765 table local
595 ip -6 rule del pref 0
600 ip -6 rule add pref 0 table local
601 ip -6 rule del pref 32765
602 ip -4 rule add pref 0 table local
603 ip -4 rule del pref 32765
607 declare -A __TB_IDS
611 local vrf_name=$1
620 local vrf_name=$1
627 local vrf_name=$1
628 local tb_id
634 ip -4 route add table $tb_id unreachable default metric 4278198272
635 ip -6 route add table $tb_id unreachable default metric 4278198272
640 local vrf_name=$1
641 local tb_id
646 ip -6 route del table $tb_id unreachable default metric 4278198272
647 ip -4 route del table $tb_id unreachable default metric 4278198272
653 local if_name=$1
654 local add_del=$2
655 local array
662 ip address $add_del $addrstr dev $if_name
668 local if_name=$1; shift
669 local vrf_name=$1; shift
670 local addrs=("${@}")
680 local if_name=$1; shift
681 local addrs=("${@}")
691 local if_name=$1
692 local vrf_name
693 local array
706 local if_name=$1
707 local vrf_name
708 local array
720 local name=$1; shift
721 local type=$1; shift
722 local local=$1; shift
723 local remote=$1; shift
726 local $local remote $remote "$@"
732 local name=$1; shift
739 local if_name=$1; shift
740 local vid=$1; shift
741 local vrf=$1; shift
742 local ips=("${@}")
743 local name=$if_name.$vid
755 local if_name=$1; shift
756 local vid=$1; shift
757 local name=$if_name.$vid
764 local if_name=$1; shift
765 local mode=$1; shift
768 $TEAMD -t $if_name -d -c '{"runner": {"name": "'$mode'"}}'
779 local if_name=$1; shift
781 $TEAMD -t $if_name -k
786 local if_name=$1
788 ip -j link show dev $if_name | jq -r '.[]["master"]'
793 local if_name=$1; shift
794 local dir=$1; shift
795 local stat=$1; shift
797 ip -j -s link show dev $if_name \
813 local dev=$1; shift
814 local stat=$1; shift
816 ethtool -S $dev | grep "^ *$stat:" | head -n 1 | cut -d: -f2
821 local dev=$1; shift
822 local grp=$1; shift
823 local name=$1; shift
824 local src=$1; shift
826 ethtool --json -S $dev --groups $grp -- --src $src | \
832 local dev=$1; shift
833 local handle=$1; shift
834 local selector=$1; shift
836 tc -j -s qdisc show dev "$dev" \
842 local dev=$1; shift
843 local parent=$1; shift
844 local selector=$1; shift
846 tc -j -s qdisc show dev "$dev" invisible \
852 local dev=$1; shift
853 local stat=$1; shift
855 cat /proc/net/dev_snmp6/$dev | grep "^$stat" | cut -f2
860 local suite=$1; shift
861 local if_name=$1; shift
862 local dir=$1; shift
863 local stat=$1; shift
865 ip -j stats show dev $if_name group offload subgroup $suite |
871 local key=$1; shift
872 local group_id=$1; shift
873 local member_id=$1; shift
875 ip -j -s -s nexthop show id $group_id |
876 jq --argjson member_id "$member_id" --arg key "$key" \
882 local group_id=$1; shift
883 local member_id=$1; shift
890 local group_id=$1; shift
891 local member_id=$1; shift
898 local speed=$1; shift
913 local t0=$1; shift
914 local t1=$1; shift
915 local interval=$1; shift
917 echo $((8 * (t1 - t0) / interval))
922 local t0=$1; shift
923 local t1=$1; shift
924 local interval=$1; shift
926 echo $(((t1 - t0) / interval))
931 local addr="$1"
932 local order="$((1 << 40))"
933 local val=0
934 local byte
949 local val=$1
950 local byte
951 local i
953 for ((i = 40; i >= 0; i -= 8)); do
956 if [ $i -ne 0 ]; then
964 local if_name=$1
966 ip -j addr show dev $if_name | \
967 jq -r '.[]["addr_info"][] | select(.scope == "link").local' | \
968 head -1
973 local bridge=$1
974 local ageing_time
977 ageing_time=$(ip -j -d link show dev $bridge \
982 declare -A SYSCTL_ORIG
985 local key=$1; shift
987 SYSCTL_ORIG[$key]=$(sysctl -n $key)
992 local key=$1; shift
993 local value=$1; shift
996 sysctl -qw $key="$value"
1001 local key=$1; shift
1003 sysctl -qw $key="${SYSCTL_ORIG[$key]}"
1018 declare -A MTU_ORIG
1021 local dev=$1; shift
1022 local mtu=$1; shift
1024 MTU_ORIG["$dev"]=$(ip -j link show dev $dev | jq -e '.[].mtu')
1030 local dev=$1; shift
1037 local num_netifs=${1:-$NUM_NETIFS}
1040 ethtool -k ${NETIFS[p$i]} \
1041 | grep "hw-tc-offload: on" &> /dev/null
1042 if [[ $? -ne 0 ]]; then
1052 local dev=$1; shift
1053 local direction=$1; shift
1055 # Some devices may not support or need in-hardware trapping of traffic
1056 # (e.g. the veth pairs that this library creates for non-existent
1068 local dev=$1; shift
1069 local direction=$1; shift
1076 local add_del=$1; shift
1077 local pref=$1; shift
1078 local vsuf=$1; shift
1079 local tundev=$1; shift
1080 local filter=$1; shift
1090 local tundev=$1; shift
1091 local filter=$1; shift
1098 local tundev=$1; shift
1099 local filter=$1; shift
1106 local tundev=$1; shift
1107 local filter=$1; shift
1114 local tundev=$1; shift
1115 local filter=$1; shift
1122 local add_del=$1; shift
1123 local pref=$1; shift
1124 local dev=$1; shift
1125 local filter=$1; shift
1135 local dev=$1; shift
1136 local filter=$1; shift
1143 local dev=$1; shift
1144 local filter=$1; shift
1151 local add_del=$1; shift
1152 local dev=$1; shift
1153 local base=$1; shift
1154 local dscp;
1165 local dev=$1; shift
1166 local base=$1; shift
1173 local dev=$1; shift
1174 local base=$1; shift
1181 local dev=$1; shift
1182 local base=$1; shift
1185 local dscp=$((base + prio))
1186 local t=$(tc_rule_stats_get $dev $((dscp + 100)))
1193 local dev=$1; shift
1210 local desc="$1"
1211 local weight_rp12=$2
1212 local weight_rp13=$3
1213 local packets_rp12=$4
1214 local packets_rp13=$5
1215 local weights_ratio packets_ratio diff
1219 if [[ "$weight_rp12" -gt "$weight_rp13" ]]; then
1221 | bc -l)
1224 | bc -l)
1227 if [[ "$packets_rp12" -eq "0" || "$packets_rp13" -eq "0" ]]; then
1234 if [[ "$weight_rp12" -gt "$weight_rp13" ]]; then
1236 | bc -l)
1239 | bc -l)
1242 diff=$(echo $weights_ratio - $packets_ratio | bc -l)
1243 diff=${diff#-}
1245 test "$(echo "$diff / $weights_ratio > 0.15" | bc -l)" -eq 0
1253 local name=$1; shift
1255 ip netns exec $name bash <<-EOF
1267 local if_name=$1
1268 local dip=$2
1269 local args=$3
1270 local vrf_name
1274 $PING $args $dip -c $PING_COUNT -i 0.1 \
1275 -w $PING_TIMEOUT &> /dev/null
1298 local if_name=$1
1299 local dip=$2
1300 local args=$3
1301 local vrf_name
1305 $PING6 $args $dip -c $PING_COUNT -i 0.1 \
1306 -w $PING_TIMEOUT &> /dev/null
1329 local bridge=$1
1330 local br_port1=$2 # Connected to `host1_if`.
1331 local host1_if=$3
1332 local host2_if=$4
1333 local mac=de:ad:be:ef:13:37
1334 local ageing_time
1338 bridge -j fdb show br $bridge brport $br_port1 \
1339 | jq -e ".[] | select(.mac == \"$mac\")" &> /dev/null
1350 flower dst_mac $mac action drop
1352 $MZ $host2_if -c 1 -p 64 -b $mac -t ip -q
1355 tc -j -s filter show dev $host1_if ingress \
1356 | jq -e ".[] | select(.options.handle == 101) \
1360 $MZ $host1_if -c 1 -p 64 -a $mac -t ip -q
1363 bridge -j fdb show br $bridge brport $br_port1 \
1364 | jq -e ".[] | select(.mac == \"$mac\")" &> /dev/null
1367 $MZ $host2_if -c 1 -p 64 -b $mac -t ip -q
1370 tc -j -s filter show dev $host1_if ingress \
1371 | jq -e ".[] | select(.options.handle == 101) \
1376 # record was aged-out.
1380 bridge -j fdb show br $bridge brport $br_port1 \
1381 | jq -e ".[] | select(.mac == \"$mac\")" &> /dev/null
1386 $MZ $host1_if -c 1 -p 64 -a $mac -t ip -q
1389 bridge -j fdb show br $bridge brport $br_port1 \
1390 | jq -e ".[] | select(.mac == \"$mac\")" &> /dev/null
1406 local should_flood=$1
1407 local mac=$2
1408 local ip=$3
1409 local host1_if=$4
1410 local host2_if=$5
1411 local err=0
1418 flower dst_mac $mac action drop
1420 $MZ $host1_if -c 1 -p 64 -b $mac -B $ip -t ip -q
1423 tc -j -s filter show dev $host2_if ingress \
1424 | jq -e ".[] | select(.options.handle == 101) \
1426 if [[ $? -ne 0 && $should_flood == "true" || \
1427 $? -eq 0 && $should_flood == "false" ]]; then
1440 local br_port=$1
1441 local host1_if=$2
1442 local host2_if=$3
1443 local mac=de:ad:be:ef:13:37
1444 local ip=192.0.2.100
1450 flood_test_do false $mac $ip $host1_if $host2_if
1455 flood_test_do true $mac $ip $host1_if $host2_if
1463 local br_port=$1
1464 local host1_if=$2
1465 local host2_if=$3
1466 local mac=01:00:5e:00:00:01
1467 local ip=239.0.0.1
1473 flood_test_do false $mac $ip $host1_if $host2_if
1478 flood_test_do true $mac $ip $host1_if $host2_if
1487 local br_port=$1
1488 local host1_if=$2
1489 local host2_if=$3
1497 local pktsize=$1; shift
1498 local proto=$1; shift
1499 local h_in=$1; shift # Where the traffic egresses the host
1500 local sip=$1; shift
1501 local dip=$1; shift
1502 local dmac=$1; shift
1503 local -a mz_args=("$@")
1505 $MZ $h_in -p $pktsize -A $sip -B $dip -c 0 \
1506 -a own -b $dmac -t "$proto" -q "${mz_args[@]}" &
1512 local pktsize=$1; shift
1513 local h_in=$1; shift
1514 local sip=$1; shift
1515 local dip=$1; shift
1516 local dmac=$1; shift
1517 local -a mz_args=("$@")
1525 local pktsize=$1; shift
1526 local h_in=$1; shift
1527 local sip=$1; shift
1528 local dip=$1; shift
1529 local dmac=$1; shift
1530 local -a mz_args=("$@")
1538 local h_in=$1; shift
1539 local sip=$1; shift
1540 local dip=$1; shift
1541 local dmac=$1; shift
1542 local -a mz_args=("$@")
1550 local h_in=$1; shift
1551 local sip=$1; shift
1552 local dip=$1; shift
1553 local dmac=$1; shift
1554 local -a mz_args=("$@")
1562 local pid=${1-%%}; shift
1567 declare -A cappid
1568 declare -A capfile
1569 declare -A capout
1573 local if_name=$1; shift
1574 local ns=$1; shift
1579 if [ -z $ns ]; then
1585 if [ -z $SUDO_USER ] ; then
1588 capuser="-Z $SUDO_USER"
1591 $ns_cmd tcpdump $TCPDUMP_EXTRA_FLAGS -e -n -Q in -i $if_name \
1592 -s 65535 -B 32768 $capuser -w ${capfile[$if_name]} \
1601 local if_name=$1
1602 local pid=${cappid[$if_name]}
1610 local if_name=$1
1617 local if_name=$1
1619 tcpdump -e -n -r ${capfile[$if_name]} 2>&1
1625 local mac=$1
1626 local src_ip=$2
1627 local ip=$3
1628 local host1_if=$4
1629 local host2_if=$5
1630 local seen=0
1631 local tc_proto="ip"
1632 local mz_v6arg=""
1634 # basic check to see if we were passed an IPv4 address, if not assume IPv6
1635 if [[ ! $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
1637 mz_v6arg="-6"
1644 flower ip_proto udp dst_mac $mac action drop
1646 $MZ $host1_if $mz_v6arg -c 1 -p 64 -b $mac -A $src_ip -B $ip -t udp "dp=4096,sp=2048" -q
1649 tc -j -s filter show dev $host2_if ingress \
1650 | jq -e ".[] | select(.options.handle == 101) \
1652 if [[ $? -eq 0 ]]; then
1664 local report=$1; shift
1665 local slist=("$@")
1666 local sarg=""
1669 sarg="${sarg} and .source_list[].address == \"$src\""
1671 bridge -j -d -s mdb show dev br0 \
1672 | jq -e ".[].mdb[] | \
1677 bridge -j -d -s mdb show dev br0 \
1678 | jq -e ".[].mdb[] | \
1686 local should_fwd=$1; shift
1687 local sources=("$@")
1690 local retval=0
1694 if [ $should_fwd -eq 1 ]; then
1704 local is_blocked=$1; shift
1705 local sources=("$@")
1706 local should_fail=1
1708 if [ $is_blocked -eq 1 ]; then
1713 bridge -j -d -s mdb show dev br0 \
1714 | jq -e ".[].mdb[] | \
1717 select(.address == \"$src\") |
1721 bridge -j -d -s mdb show dev br0 \
1722 | jq -e ".[].mdb[] | \
1731 local if_name=$1
1732 local group=$2
1733 local vrf_name=$(master_name_get $if_name)
1736 # IP multicast group and adding the L2 address to the device's
1737 # MAC filtering table
1739 mreceive -g $group -I $if_name > /dev/null 2>&1 &
1752 local if_name=$1
1753 local groups=$2
1754 local vrf_name=$(master_name_get $if_name)
1757 msend -g $groups -I $if_name -c 1 > /dev/null 2>&1
1762 local mtype=$1; shift
1763 local ip=${1-ip}; shift
1774 local mpid=$1; shift
1775 local tmpfile=$1; shift
1776 local el=$1; shift
1777 local what=$1; shift
1781 local lines=`grep '^\w' $tmpfile | wc -l`
1782 test $lines -eq $el
1784 rm -rf $tmpfile
1789 local dev=$1; shift
1790 local type=$1; shift
1791 local make_suitable=$1; shift
1792 local make_unsuitable=$1; shift
1793 local ip=${1-ip}; shift
1798 local ipmout=$(start_ip_monitor stats "$ip")
1803 local ipmout=$(start_ip_monitor stats "$ip")
1808 local ipmout=$(start_ip_monitor stats "$ip")
1813 local ipmout=$(start_ip_monitor stats "$ip")
1822 local IP=$1; shift
1828 # Convert a given IPv6 address, `IP' such that the :: token, if present, is
1829 # expanded, and each 16-bit group is padded with zeroes to be 4 hexadecimal
1831 # individual bytes of each 16-bit group.
1834 local IP=$1; shift
1835 local bytesep=$1; shift
1837 local cvt_ip=${IP/::/_}
1838 local colons=${cvt_ip//[^:]/}
1839 local allcol=:::::::
1840 # IP where :: -> the appropriate number of colons:
1841 local allcol_ip=${cvt_ip/_/${allcol:${#colons}}}
1852 local IP=$1; shift
1859 local u16=$1; shift
1864 # Given a mausezahn-formatted payload (colon-separated bytes given as %02x),
1865 # possibly with a keyword CHECKSUM stashed where a 16-bit checksum should be,
1870 local payload=$1; shift
1889 echo "FFFF r - p" # Bit-flip and print.
1897 local payload=$1; shift
1898 local checksum=$1; shift
1900 local ckbytes=$(u16_to_bytes $checksum)
1907 local payload=$1; shift
1910 sed 's/:/\n/g' | wc -l
1915 local GRP=$1; shift
1916 local sources=("$@")
1918 local igmpv3
1919 local nsources=$(u16_to_bytes ${#sources[@]})
1923 )"22:"$( : Type - Membership Report
1928 )"01:"$( : Record Type - IS_IN
1931 )"$(ipv4_to_bytes $GRP):"$( : Multicast Address
1934 echo -n :
1937 local checksum=$(payload_template_calc_checksum "$igmpv3")
1944 local GRP=$1; shift
1946 local payload=$(:
1947 )"17:"$( : Type - Leave Group
1948 )"00:"$( : Max Resp Time - not meaningful
1950 )"$(ipv4_to_bytes $GRP)"$( : Group Address
1952 local checksum=$(payload_template_calc_checksum "$payload")
1959 local SIP=$1; shift
1960 local GRP=$1; shift
1961 local sources=("$@")
1963 local hbh
1964 local icmpv6
1965 local nsources=$(u16_to_bytes ${#sources[@]})
1968 )"3a:"$( : Next Header - ICMPv6
1974 )"8f:"$( : Type - MLDv2 Report
1979 )"01:"$( : Record Type - IS_IN
1982 )"$(ipv6_to_bytes $GRP):"$( : Multicast address
1985 echo -n :
1989 local len=$(u16_to_bytes $(payload_template_nbytes $icmpv6))
1990 local sudohdr=$(:
1992 )"$(ipv6_to_bytes $GRP):"$( : DIP is multicast address
1993 )"${len}:"$( : Upper-layer length
1994 )"00:3a:"$( : Zero and next-header
1996 local checksum=$(payload_template_calc_checksum ${sudohdr}${icmpv6})
2003 local SIP=$1; shift
2004 local GRP=$1; shift
2006 local hbh
2007 local icmpv6
2010 )"3a:"$( : Next Header - ICMPv6
2016 )"84:"$( : Type - MLDv1 Done
2019 )"00:00:"$( : Max Resp Delay - not meaningful
2021 )"$(ipv6_to_bytes $GRP):"$( : Multicast address
2024 local len=$(u16_to_bytes $(payload_template_nbytes $icmpv6))
2025 local sudohdr=$(:
2027 )"$(ipv6_to_bytes $GRP):"$( : DIP is multicast address
2028 )"${len}:"$( : Upper-layer length
2029 )"00:3a:"$( : Zero and next-header
2031 local checksum=$(payload_template_calc_checksum ${sudohdr}${icmpv6})
2038 local reason1="$1"; shift
2039 local reason2="$1"; shift
2040 local caller=${FUNCNAME[1]}
2041 local src=${BASH_SOURCE[1]}
2043 if systemctl is-active --quiet lldpad; then
2045 cat >/dev/stderr <<-EOF
2055 if [[ -z $ALLOW_LLDPAD ]]; then
2056 cat >/dev/stderr <<-EOF
2060 non-empty string.
2072 local v=$1; shift
2074 echo $((v > 0 ? v : -v))
2079 local dev=$1; shift
2080 local mac_addr=$(mac_get $dev)
2081 local tmp=$(ether_addr_to_u64 $mac_addr)
2082 local promisc
2085 ip link add link $dev name macvlan-tmp type macvlan mode private
2086 ip link set macvlan-tmp address $(u64_to_ether_addr $((tmp + 1)))
2087 ip link set macvlan-tmp up
2089 promisc=$(ip -j -d link show dev $dev | jq -r '.[].promiscuity')
2091 ip link del macvlan-tmp