1c35ecb95SJoanne Koong#!/bin/bash
2c35ecb95SJoanne Koong# SPDX-License-Identifier: GPL-2.0
3c35ecb95SJoanne Koong
4c35ecb95SJoanne KoongNR_FILES=32768
5*ced33ca0SJuntong Dengreadonly NETNS="ns-$(mktemp -u XXXXXX)"
6c35ecb95SJoanne Koong
7c35ecb95SJoanne Koong# default values
8c35ecb95SJoanne Koongport=443
9c35ecb95SJoanne Koongaddr_v6="2001:0db8:0:f101::1"
10c35ecb95SJoanne Koongaddr_v4="10.8.8.8"
11c35ecb95SJoanne Koonguse_v6=true
12c35ecb95SJoanne Koongaddr=""
13c35ecb95SJoanne Koong
14c35ecb95SJoanne Koongusage() {
15c35ecb95SJoanne Koong    echo "Usage: $0 [-6 | -4] [-p port] [-a address]"
16c35ecb95SJoanne Koong    echo -e "\t6: use ipv6"
17c35ecb95SJoanne Koong    echo -e "\t4: use ipv4"
18c35ecb95SJoanne Koong    echo -e "\tport: Port number"
19c35ecb95SJoanne Koong    echo -e "\taddress: ip address"
20c35ecb95SJoanne Koong}
21c35ecb95SJoanne Koong
22c35ecb95SJoanne Koongwhile getopts "ha:p:64" opt; do
23c35ecb95SJoanne Koong    case ${opt} in
24c35ecb95SJoanne Koong	h)
25c35ecb95SJoanne Koong	    usage $0
26c35ecb95SJoanne Koong	    exit 0
27c35ecb95SJoanne Koong	    ;;
28c35ecb95SJoanne Koong	a)  addr=$OPTARG;;
29c35ecb95SJoanne Koong	p)
30c35ecb95SJoanne Koong	    port=$OPTARG;;
31c35ecb95SJoanne Koong	6)
32c35ecb95SJoanne Koong	    use_v6=true;;
33c35ecb95SJoanne Koong	4)
34c35ecb95SJoanne Koong	    use_v6=false;;
35c35ecb95SJoanne Koong    esac
36c35ecb95SJoanne Koongdone
37c35ecb95SJoanne Koong
38c35ecb95SJoanne Koongsetup() {
39*ced33ca0SJuntong Deng    ip netns add "${NETNS}"
40*ced33ca0SJuntong Deng    ip -netns "${NETNS}" link add veth0 type veth peer name veth1
41*ced33ca0SJuntong Deng    ip -netns "${NETNS}" link set lo up
42*ced33ca0SJuntong Deng    ip -netns "${NETNS}" link set veth0 up
43*ced33ca0SJuntong Deng    ip -netns "${NETNS}" link set veth1 up
44*ced33ca0SJuntong Deng
45c35ecb95SJoanne Koong    if [[ "$use_v6" == true ]]; then
46*ced33ca0SJuntong Deng        ip -netns "${NETNS}" addr add $addr_v6 nodad dev veth0
47c35ecb95SJoanne Koong    else
48*ced33ca0SJuntong Deng        ip -netns "${NETNS}" addr add $addr_v4 dev lo
49c35ecb95SJoanne Koong    fi
50c35ecb95SJoanne Koong}
51c35ecb95SJoanne Koong
52c35ecb95SJoanne Koongcleanup() {
53*ced33ca0SJuntong Deng    ip netns del "${NETNS}"
54c35ecb95SJoanne Koong}
55c35ecb95SJoanne Koong
56c35ecb95SJoanne Koongif [[ "$addr" != "" ]]; then
57c35ecb95SJoanne Koong    addr_v4=$addr;
58c35ecb95SJoanne Koong    addr_v6=$addr;
59c35ecb95SJoanne Koongfi
60c35ecb95SJoanne Koongsetup
61c35ecb95SJoanne Koongif [[ "$use_v6" == true ]] ; then
62*ced33ca0SJuntong Deng    ip netns exec "${NETNS}" sh -c \
63*ced33ca0SJuntong Deng        "ulimit -n ${NR_FILES};./bind_bhash ${port} ipv6 ${addr_v6}"
64c35ecb95SJoanne Koongelse
65*ced33ca0SJuntong Deng    ip netns exec "${NETNS}" sh -c \
66*ced33ca0SJuntong Deng        "ulimit -n ${NR_FILES};./bind_bhash ${port} ipv4 ${addr_v4}"
67c35ecb95SJoanne Koongfi
68c35ecb95SJoanne Koongcleanup
69