Skip to content

Commit

Permalink
Merge pull request torvalds#376 from libos-nuse/fix-android-rawsock
Browse files Browse the repository at this point in the history
lkl: fix android raw socket issue
  • Loading branch information
thehajime authored Sep 21, 2017
2 parents f78d181 + 64e098f commit f995409
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 31 deletions.
10 changes: 0 additions & 10 deletions tools/lkl/lib/hijack/hijack.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,7 @@ HOOK_FD_CALL(vmsplice)
HOOK_CALL_USE_HOST_BEFORE_START(pipe);

HOOK_CALL_USE_HOST_BEFORE_START(accept4);
int accept4(int fd, struct sockaddr *addr, socklen_t *addrlen, int flags)
{
return lkl_call(__lkl__NR_accept4, 4, fd, addr, addrlen, flags);
}


HOOK_CALL_USE_HOST_BEFORE_START(pipe2);
int pipe2(int pipefd[2], int flags)
{
return lkl_call(__lkl__NR_pipe2, 2, pipefd, flags);
}

HOST_CALL(setsockopt);
int setsockopt(int fd, int level, int optname, const void *optval,
Expand Down
1 change: 1 addition & 0 deletions tools/lkl/tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ else
test:
dd if=/dev/zero of=disk.img bs=1024 count=102400
yes | mkfs.ext4 disk.img >/dev/null
adb root
adb shell mkdir -p /data/local/tmp/lkl/bin
adb push ../bin/lkl-hijack.sh /data/local/tmp/lkl/bin
adb push ../tests ../liblkl-hijack.so /data/local/tmp/lkl/
Expand Down
1 change: 1 addition & 0 deletions tools/lkl/tests/android-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ export PATH=${script_dir}:${PATH}
export LKL_ANDROID_TEST=1
export TMPDIR=/data/local/tmp
export CONFIG_AUTO_LKL_POSIX_HOST=y
export LKL_TEST_DHCP=1

sed -i "s/\/bin\/bash/\/system\/bin\/sh /" ${script_dir}/../bin/lkl-hijack.sh

Expand Down
48 changes: 27 additions & 21 deletions tools/lkl/tests/net.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,55 +5,61 @@ if [ "`printenv CONFIG_AUTO_LKL_POSIX_HOST`" != "y" ] ; then
exit 0
fi

IFNAME=`ip route |grep default | awk '{print $5}' | head -n1`
GW=`ip route |grep default | awk '{print $3}' | head -n1`
# android doesn't have sudo
if [ -z ${LKL_ANDROID_TEST} ] ; then
SUDO="sudo"
fi

TEST_HOST=8.8.8.8
IFNAME=`ip route get ${TEST_HOST} |head -n1 | cut -d ' ' -f5`
GW=`ip route get ${TEST_HOST} |head -n1 | cut -d ' ' -f3`

script_dir=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)
cd ${script_dir}

# And make sure we clean up when we're done
function clear_work_dir {
sudo ip link set dev lkl_ptt1 down &> /dev/null || true
sudo ip tuntap del dev lkl_ptt1 mode tap &> /dev/null || true
sudo ip link del dev lkl_vtap0 type macvtap &> /dev/null || true
${SUDO} ip link set dev lkl_ptt1 down &> /dev/null || true
${SUDO} ip tuntap del dev lkl_ptt1 mode tap &> /dev/null || true
${SUDO} ip link del dev lkl_vtap0 type macvtap &> /dev/null || true
}

trap clear_work_dir EXIT

echo "== TAP (LKL net) tests =="
if [ -c /dev/net/tun ]; then
sudo ip link set dev lkl_ptt1 down || true
sudo ip tuntap del dev lkl_ptt1 mode tap || true
sudo ip tuntap add dev lkl_ptt1 mode tap user $USER
sudo ip link set dev lkl_ptt1 up
sudo ip addr add dev lkl_ptt1 192.168.14.1/24
${SUDO} ip link set dev lkl_ptt1 down || true
${SUDO} ip tuntap del dev lkl_ptt1 mode tap || true
${SUDO} ip tuntap add dev lkl_ptt1 mode tap user $USER
${SUDO} ip link set dev lkl_ptt1 up
${SUDO} ip addr add dev lkl_ptt1 192.168.14.1/24

./net-test tap lkl_ptt1 192.168.14.1 192.168.14.2 24

sudo ip link set dev lkl_ptt1 down
sudo ip tuntap del dev lkl_ptt1 mode tap
${SUDO} ip link set dev lkl_ptt1 down
${SUDO} ip tuntap del dev lkl_ptt1 mode tap
fi

if ping -c1 -w1 $GW &>/dev/null; then
DST=$GW
elif ping -c1 -w1 8.8.8.8 &>/dev/null; then
DST=8.8.8.8
elif ping -c1 -w1 ${TEST_HOST} &>/dev/null; then
DST=${TEST_HOST}
fi

if [ -z $LKL_TEST_DHCP ] ; then
echo "\$LKL_TEST_DHCP is not configured. skipped dhcp client test"
else
if ! [ -z $DST ]; then
echo "== RAW socket (LKL net) tests =="
sudo ip link set dev ${IFNAME} promisc on
sudo ./net-test raw ${IFNAME} ${DST} dhcp
sudo ip link set dev ${IFNAME} promisc off
${SUDO} ip link set dev ${IFNAME} promisc on
${SUDO} ./net-test raw ${IFNAME} ${DST} dhcp
${SUDO} ip link set dev ${IFNAME} promisc off

echo "== macvtap (LKL net) tests =="
sudo ip link add link ${IFNAME} name lkl_vtap0 type macvtap mode passthru
${SUDO} ip link add link ${IFNAME} name lkl_vtap0 type macvtap mode passthru
if ls /dev/tap* > /dev/null 2>&1 ; then
sudo ip link set dev lkl_vtap0 up
sudo chown ${USER} `ls /dev/tap*`
${SUDO} ip link set dev lkl_vtap0 up
${SUDO} chown ${USER} `ls /dev/tap*`
./net-test macvtap `ls /dev/tap*` $DST dhcp
fi
fi
Expand All @@ -64,5 +70,5 @@ fi
# may customize those test commands for your host.
if false ; then
echo "== DPDK (LKL net) tests =="
sudo ./net-test dpdk dpdk0 192.168.15.1 192.168.15.2 24
${SUDO} ./net-test dpdk dpdk0 192.168.15.1 192.168.15.2 24
fi

0 comments on commit f995409

Please sign in to comment.