Fix race-condition on interface creation
This commit is contained in:
parent
66e8ccc814
commit
661a8aa1b7
30
create_ap
30
create_ap
@ -346,13 +346,17 @@ get_macaddr() {
|
|||||||
cat "/sys/class/net/${1}/address"
|
cat "/sys/class/net/${1}/address"
|
||||||
}
|
}
|
||||||
|
|
||||||
get_avail_bridge() {
|
alloc_new_iface() {
|
||||||
|
local prefix=$1
|
||||||
local i=0
|
local i=0
|
||||||
|
|
||||||
mutex_lock
|
mutex_lock
|
||||||
while :; do
|
while :; do
|
||||||
if ! is_interface br${i}; then
|
if ! is_interface $prefix$i && [[ ! -f $COMMON_CONFDIR/ifaces/$prefix$i ]]; then
|
||||||
|
mkdir -p $COMMON_CONFDIR/ifaces
|
||||||
|
touch $COMMON_CONFDIR/ifaces/$prefix$i
|
||||||
|
echo $prefix$i
|
||||||
mutex_unlock
|
mutex_unlock
|
||||||
echo br${i}
|
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
i=$((i + 1))
|
i=$((i + 1))
|
||||||
@ -360,18 +364,8 @@ get_avail_bridge() {
|
|||||||
mutex_unlock
|
mutex_unlock
|
||||||
}
|
}
|
||||||
|
|
||||||
get_virt_iface_name() {
|
dealloc_iface() {
|
||||||
local i=0
|
rm -f $COMMON_CONFDIR/ifaces/$1
|
||||||
mutex_lock
|
|
||||||
while :; do
|
|
||||||
if ! is_interface ap${i}; then
|
|
||||||
mutex_unlock
|
|
||||||
echo ap${i}
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
i=$((i+1))
|
|
||||||
done
|
|
||||||
mutex_unlock
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get_all_macaddrs() {
|
get_all_macaddrs() {
|
||||||
@ -656,6 +650,7 @@ _cleanup() {
|
|||||||
ip link delete $BRIDGE_IFACE type bridge
|
ip link delete $BRIDGE_IFACE type bridge
|
||||||
ip addr flush $INTERNET_IFACE
|
ip addr flush $INTERNET_IFACE
|
||||||
ip link set dev $INTERNET_IFACE up
|
ip link set dev $INTERNET_IFACE up
|
||||||
|
dealloc_iface $BRIDGE_IFACE
|
||||||
|
|
||||||
for x in "${IP_ADDRS[@]}"; do
|
for x in "${IP_ADDRS[@]}"; do
|
||||||
x="${x/inet/}"
|
x="${x/inet/}"
|
||||||
@ -697,6 +692,7 @@ _cleanup() {
|
|||||||
ip addr flush ${VWIFI_IFACE}
|
ip addr flush ${VWIFI_IFACE}
|
||||||
networkmanager_rm_unmanaged_if_needed ${VWIFI_IFACE} ${OLD_MACADDR}
|
networkmanager_rm_unmanaged_if_needed ${VWIFI_IFACE} ${OLD_MACADDR}
|
||||||
iw dev ${VWIFI_IFACE} del
|
iw dev ${VWIFI_IFACE} del
|
||||||
|
dealloc_iface $VWIFI_IFACE
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
ip link set down dev ${WIFI_IFACE}
|
ip link set down dev ${WIFI_IFACE}
|
||||||
@ -1111,7 +1107,7 @@ if [[ "$SHARE_METHOD" == "bridge" ]]; then
|
|||||||
if is_bridge_interface $INTERNET_IFACE; then
|
if is_bridge_interface $INTERNET_IFACE; then
|
||||||
BRIDGE_IFACE=$INTERNET_IFACE
|
BRIDGE_IFACE=$INTERNET_IFACE
|
||||||
else
|
else
|
||||||
BRIDGE_IFACE=$(get_avail_bridge)
|
BRIDGE_IFACE=$(alloc_new_iface br)
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -1147,7 +1143,7 @@ fi
|
|||||||
mutex_unlock
|
mutex_unlock
|
||||||
|
|
||||||
if [[ $NO_VIRT -eq 0 ]]; then
|
if [[ $NO_VIRT -eq 0 ]]; then
|
||||||
VWIFI_IFACE=$(get_virt_iface_name)
|
VWIFI_IFACE=$(alloc_new_iface ap)
|
||||||
|
|
||||||
# in NetworkManager 0.9.9 and above we can set the interface as unmanaged without
|
# in NetworkManager 0.9.9 and above we can set the interface as unmanaged without
|
||||||
# the need of MAC address, so we set it before we create the virtual interface.
|
# the need of MAC address, so we set it before we create the virtual interface.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user