66 lines
1.2 KiB
Bash
Executable File
66 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
set -x
|
|
|
|
CONTAINER='openwrt_1'
|
|
IFACE=$1
|
|
|
|
function _usage {
|
|
echo "$0 [interface_name]"
|
|
exit 1
|
|
}
|
|
|
|
function _get_phy_from_dev {
|
|
# test -n $IFACE || { echo "interface $IFACE not found"; exit 1; }
|
|
if [[ -f /sys/class/net/$IFACE/phy80211/name ]] ; then
|
|
PHY=$(cat /sys/class/net/$IFACE/phy80211/name 2>/dev/null)
|
|
else
|
|
echo "$IFACE is not a valid phy80211 device"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function _get_dev_from_phy {
|
|
for dev in /sys/class/net/*; do
|
|
test -f $dev/phy80211/name && phy=$(cat $dev/phy80211/name 2>/dev/null)
|
|
if [[ "$phy" = "$1" ]]; then
|
|
IFACE_NEW=$(basename $dev)
|
|
break
|
|
else
|
|
IFACE_NEW=''
|
|
fi
|
|
done
|
|
}
|
|
|
|
function _cleanup {
|
|
docker stop openwrt_1
|
|
while [[ -z $IFACE_NEW ]]; do
|
|
_get_dev_from_phy $PHY
|
|
sleep 1
|
|
done
|
|
sudo ip link set dev $IFACE_NEW down
|
|
sudo ip link set dev $IFACE_NEW name $IFACE
|
|
}
|
|
|
|
function main {
|
|
test -z $IFACE && _usage
|
|
|
|
_get_phy_from_dev
|
|
nmcli dev set $IFACE managed no
|
|
|
|
docker run --rm -it \
|
|
--network=bridge \
|
|
-p8080:80 -d \
|
|
--cap-add NET_ADMIN \
|
|
--cap-add NET_RAW \
|
|
--name $CONTAINER openwrt
|
|
|
|
pid=$(docker inspect -f '{{.State.Pid}}' $CONTAINER)
|
|
|
|
sudo iw phy "$PHY" set netns $pid
|
|
|
|
}
|
|
|
|
main
|
|
trap "_cleanup" EXIT
|
|
cat
|