1*387f9dfdSAndroid Build Coastguard Worker#!/bin/bash 2*387f9dfdSAndroid Build Coastguard Worker# Copyright (c) PLUMgrid, Inc. 3*387f9dfdSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License") 4*387f9dfdSAndroid Build Coastguard Worker 5*387f9dfdSAndroid Build Coastguard Worker#set -x 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Workername=$1; shift 8*387f9dfdSAndroid Build Coastguard Workerkind=$1; shift 9*387f9dfdSAndroid Build Coastguard Workercmd=$1; shift 10*387f9dfdSAndroid Build Coastguard Worker 11*387f9dfdSAndroid Build Coastguard WorkerPYTHONPATH=@CMAKE_BINARY_DIR@/src/python/bcc-python3 12*387f9dfdSAndroid Build Coastguard WorkerPYTHONIOENCODING=utf-8 13*387f9dfdSAndroid Build Coastguard WorkerLD_LIBRARY_PATH=@CMAKE_BINARY_DIR@:@CMAKE_BINARY_DIR@/src/cc 14*387f9dfdSAndroid Build Coastguard Worker 15*387f9dfdSAndroid Build Coastguard Workerns=$name 16*387f9dfdSAndroid Build Coastguard Worker 17*387f9dfdSAndroid Build Coastguard Workerfunction cleanup() { 18*387f9dfdSAndroid Build Coastguard Worker trap - EXIT 19*387f9dfdSAndroid Build Coastguard Worker if [[ "$kind" = "namespace" ]]; then 20*387f9dfdSAndroid Build Coastguard Worker sudo ip netns delete $ns 21*387f9dfdSAndroid Build Coastguard Worker fi 22*387f9dfdSAndroid Build Coastguard Worker} 23*387f9dfdSAndroid Build Coastguard Worker 24*387f9dfdSAndroid Build Coastguard Workertrap cleanup EXIT 25*387f9dfdSAndroid Build Coastguard Worker 26*387f9dfdSAndroid Build Coastguard Workerfunction ns_run() { 27*387f9dfdSAndroid Build Coastguard Worker sudo ip netns add $ns 28*387f9dfdSAndroid Build Coastguard Worker sudo ip link add $ns.in type veth peer name $ns.out 29*387f9dfdSAndroid Build Coastguard Worker sudo ip link set $ns.in netns $ns 30*387f9dfdSAndroid Build Coastguard Worker sudo ip netns exec $ns ip link set $ns.in name eth0 31*387f9dfdSAndroid Build Coastguard Worker sudo ip netns exec $ns ip addr add dev eth0 172.16.1.2/24 32*387f9dfdSAndroid Build Coastguard Worker sudo ip netns exec $ns ip link set eth0 up 33*387f9dfdSAndroid Build Coastguard Worker sudo ip netns exec $ns ethtool -K eth0 tx off 34*387f9dfdSAndroid Build Coastguard Worker sudo ip addr add dev $ns.out 172.16.1.1/24 35*387f9dfdSAndroid Build Coastguard Worker sudo ip link set $ns.out up 36*387f9dfdSAndroid Build Coastguard Worker sudo --preserve-env=PYTHON_TEST_LOGFILE env PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH ip netns exec $ns $cmd "$@" 37*387f9dfdSAndroid Build Coastguard Worker return $? 38*387f9dfdSAndroid Build Coastguard Worker} 39*387f9dfdSAndroid Build Coastguard Workerfunction sudo_run() { 40*387f9dfdSAndroid Build Coastguard Worker sudo --preserve-env=PYTHON_TEST_LOGFILE env PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd "$@" 41*387f9dfdSAndroid Build Coastguard Worker return $? 42*387f9dfdSAndroid Build Coastguard Worker} 43*387f9dfdSAndroid Build Coastguard Workerfunction simple_run() { 44*387f9dfdSAndroid Build Coastguard Worker PYTHONIOENCODING=$PYTHONIOENCODING PYTHONPATH=$PYTHONPATH PYTHON_TEST_LOGFILE=$PYTHON_TEST_LOGFILE LD_LIBRARY_PATH=$LD_LIBRARY_PATH $cmd "$@" 45*387f9dfdSAndroid Build Coastguard Worker return $? 46*387f9dfdSAndroid Build Coastguard Worker} 47*387f9dfdSAndroid Build Coastguard Worker 48*387f9dfdSAndroid Build Coastguard Workercase $kind in 49*387f9dfdSAndroid Build Coastguard Worker namespace) 50*387f9dfdSAndroid Build Coastguard Worker ns_run "$@" 51*387f9dfdSAndroid Build Coastguard Worker ;; 52*387f9dfdSAndroid Build Coastguard Worker sudo) 53*387f9dfdSAndroid Build Coastguard Worker sudo_run "$@" 54*387f9dfdSAndroid Build Coastguard Worker ;; 55*387f9dfdSAndroid Build Coastguard Worker simple) 56*387f9dfdSAndroid Build Coastguard Worker simple_run "$@" 57*387f9dfdSAndroid Build Coastguard Worker ;; 58*387f9dfdSAndroid Build Coastguard Worker *) 59*387f9dfdSAndroid Build Coastguard Worker echo "Invalid kind $kind" 60*387f9dfdSAndroid Build Coastguard Worker exit 1 61*387f9dfdSAndroid Build Coastguard Worker ;; 62*387f9dfdSAndroid Build Coastguard Workeresac 63*387f9dfdSAndroid Build Coastguard Worker 64*387f9dfdSAndroid Build Coastguard Worker[[ $? -ne 0 ]] && { echo "Failed"; exit 1; } 65*387f9dfdSAndroid Build Coastguard Worker 66*387f9dfdSAndroid Build Coastguard Workerexit 0 67