Skip to content

Commit 5f45435

Browse files
committed
update bridge ifupdown scripts
1 parent ffe397b commit 5f45435

File tree

5 files changed

+65
-35
lines changed

5 files changed

+65
-35
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/usr/lib/bridge-utils/ifupdown.sh
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
/lib/bridge-utils/ifupdown.sh
1+
/usr/lib/bridge-utils/ifupdown.sh

rootfs_overlay/lib/bridge-utils/bridge-utils.sh renamed to rootfs_overlay/usr/lib/bridge-utils/bridge-utils.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ bridge_parse_ports()
88
case $1 in
99
all)
1010
shift &&
11-
set regex eth.\* em.\* 'p[0-9].*' noregex "$@"
11+
set regex eth.\* em.\* en.\* 'p[0-9].*' noregex "$@"
1212
;;
1313
esac
1414

@@ -64,12 +64,12 @@ then
6464
# port is a vlan and the device exists?
6565
if [ "$port" != "$dev" ] && [ -e "/sys/class/net/$dev" ]
6666
then
67-
if [ -f /proc/sys/net/ipv6/conf/$dev/disable_ipv6 ]
67+
if [ "$BRIDGE_DISABLE_LINKLOCAL_IPV6_ALSO_PHYS" != "no" ] && [ -e "/proc/sys/net/ipv6/conf/$dev" ]
6868
then
69-
echo 1 > /proc/sys/net/ipv6/conf/$dev/disable_ipv6
69+
ip link set $dev addrgenmode none
7070
fi
7171
ip link set "$dev" up
72-
ip link add link "$dev" name "$port" type vlan id "${port#*.}"
72+
ip link add link "$dev" name "$port" type vlan id "$(echo $port|sed 's/[^.]*\.0*//g')"
7373
fi
7474
fi
7575
}

rootfs_overlay/lib/bridge-utils/ifupdown.sh renamed to rootfs_overlay/usr/lib/bridge-utils/ifupdown.sh

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@
66
# Have a look at /usr/share/doc/bridge-utils/README.Debian if you want
77
# more info about the way on wich a bridge is set up on Debian.
88

9-
if [ ! -x /sbin/brctl ]
9+
if [ ! -x /usr/sbin/brctl ]
1010
then
1111
exit 0
1212
fi
1313

14-
. /lib/bridge-utils/bridge-utils.sh
14+
#default configuration
15+
[ -f /etc/default/bridge-utils ] && . /etc/default/bridge-utils
16+
17+
. /usr/lib/bridge-utils/bridge-utils.sh
1518

1619
case "$IF_BRIDGE_PORTS" in
1720
"")
@@ -25,12 +28,24 @@ case "$IF_BRIDGE_PORTS" in
2528
;;
2629
esac
2730

31+
# Overload bridge_hw, now it can be a device as well as an address
32+
# The device can exist or not, then it is emptied
33+
if [ "$IF_BRIDGE_HW" ] && ! echo "$IF_BRIDGE_HW"|grep -q "..:..:..:..:..:.."; then
34+
IF_BRIDGE_HW="$(ip link show dev "$IF_BRIDGE_HW" 2>/dev/null|sed -n "s|.*link/ether \([^ ]*\) brd.*|\1|p")"
35+
fi
2836
# Previous work (create the interface)
2937
if [ "$MODE" = "start" ] && [ ! -d /sys/class/net/$IFACE ]; then
3038
brctl addbr $IFACE || exit 1
3139
if [ "$IF_BRIDGE_HW" ]; then
40+
sleep 1
3241
ip link set dev $IFACE address $IF_BRIDGE_HW
3342
fi
43+
# Activate VLAN filtering on VLAN aware bridges
44+
if [ "$IF_BRIDGE_VLAN_AWARE" = "yes" ]; then
45+
ip link set dev $IFACE type bridge vlan_filtering 1
46+
else
47+
ip link set dev $IFACE type bridge vlan_filtering 0
48+
fi
3449
# Wait for the ports to become available
3550
if [ "$IF_BRIDGE_WAITPORT" ]
3651
then
@@ -55,7 +70,11 @@ if [ "$MODE" = "start" ] && [ ! -d /sys/class/net/$IFACE ]; then
5570
fi
5671
# Previous work (stop the interface)
5772
elif [ "$MODE" = "stop" ]; then
73+
if [ "$PHASE" = "pre-down" ]; then
74+
[ ! -d /sys/class/net/$IFACE ] && brctl addbr $IFACE && ip address add "$IF_ADDRESS"/"$IF_NETMASK" dev $IFACE
75+
elif [ "$PHASE" = "post-down" ]; then
5876
ip link set dev $IFACE down || exit 1
77+
fi
5978
fi
6079

6180
all_interfaces= &&
@@ -67,33 +86,32 @@ do
6786
# We attach and configure each port of the bridge
6887
if [ "$MODE" = "start" ] && [ ! -d /sys/class/net/$IFACE/brif/$port ]; then
6988
create_vlan_port
70-
if [ "$IF_BRIDGE_HW" ]
89+
if [ -e "/sys/class/net/$port" ]
7190
then
72-
KVER="$(uname -r)"
73-
LKVER="${KVER#*.}"
74-
LKVER="${LKVER%%-*}"
75-
LKVER="${LKVER%%.*}"
76-
if [ "${KVER%%.*}" -lt 3 -o "${KVER%%.*}" -eq 3 -a "$LKVER" -lt 3 ]
91+
if [ "$IF_BRIDGE_HW" ]
7792
then
78-
ip link set dev $port address $IF_BRIDGE_HW
93+
KVER="$(uname -r)"
94+
LKVER="${KVER#*.}"
95+
LKVER="${LKVER%%-*}"
96+
LKVER="${LKVER%%.*}"
97+
if [ "${KVER%%.*}" -lt 3 -o "${KVER%%.*}" -eq 3 -a "$LKVER" -lt 3 ]
98+
then
99+
ip link set dev $port address $IF_BRIDGE_HW
100+
fi
79101
fi
102+
if [ -e /proc/sys/net/ipv6/conf/$port ]
103+
then
104+
ip link set $port addrgenmode none
105+
fi
106+
if [ "$IF_MTU" ]
107+
then
108+
ip link set dev $port mtu "$IF_MTU"
109+
fi
110+
brctl addif $IFACE $port && ip link set dev $port up
80111
fi
81-
if [ -f /proc/sys/net/ipv6/conf/$port/disable_ipv6 ]
82-
then
83-
echo 1 > /proc/sys/net/ipv6/conf/$port/disable_ipv6
84-
fi
85-
if [ "$IF_MTU" ]
86-
then
87-
ip link set dev $port mtu "$IF_MTU"
88-
fi
89-
brctl addif $IFACE $port && ip link set dev $port up
90112
# We detach each port of the bridge
91-
elif [ "$MODE" = "stop" ] && [ -d /sys/class/net/$IFACE/brif/$port ]; then
113+
elif [ "$MODE" = "stop" -a "$PHASE" = "post-down" ] && [ -d /sys/class/net/$IFACE/brif/$port ]; then
92114
ip link set dev $port down && brctl delif $IFACE $port && destroy_vlan_port
93-
if [ -f /proc/sys/net/ipv6/conf/$port/disable_ipv6 ]
94-
then
95-
echo 0 > /proc/sys/net/ipv6/conf/$port/disable_ipv6
96-
fi
97115
fi
98116
done
99117
done
@@ -146,6 +164,11 @@ if [ "$MODE" = "start" ] ; then
146164
brctl setfd $IFACE $IF_BRIDGE_FD
147165
fi
148166

167+
if [ "$IF_BRIDGE_TOKEN" ]
168+
then
169+
ip token set $IF_BRIDGE_TOKEN dev $IFACE
170+
fi
171+
149172

150173
# We activate the bridge
151174
ip link set dev $IFACE up
@@ -182,16 +205,15 @@ if [ "$MODE" = "start" ] ; then
182205
# Wait for the bridge to be ready
183206
if [ "$MAXWAIT" != 0 ]
184207
then
185-
/bin/echo -e "\nWaiting for $IFACE to get ready (MAXWAIT is $MAXWAIT seconds)."
186-
187208
unset BREADY
188209
unset TRANSITIONED
189210
COUNT=0
211+
MMAXWAIT=$MAXWAIT
190212

191213
# Use 0.1 delay if available
192-
sleep 0.1 2>/dev/null && MAXWAIT=$((MAXWAIT * 10))
214+
sleep 0.1 2>/dev/null && MMAXWAIT=$((MAXWAIT * 10))
193215

194-
while [ -n "$BREADY" -a $COUNT -lt $MAXWAIT ]
216+
while [ ! "$BREADY" -a $COUNT -lt $MMAXWAIT ]
195217
do
196218
sleep 0.1 2>/dev/null || sleep 1
197219
COUNT=$(($COUNT+1))
@@ -207,12 +229,15 @@ if [ "$MODE" = "start" ] ; then
207229
unset BREADY
208230
fi
209231
done
232+
if [ ! "$BREADY" -a $COUNT = 2 ]
233+
then
234+
/bin/echo -e "\nWaiting for $IFACE to get ready (MAXWAIT is $MAXWAIT seconds)."
235+
fi
210236
done
211-
212237
fi
213238

214239
# Finally we destroy the interface
215-
elif [ "$MODE" = "stop" ]; then
240+
elif [ "$MODE" = "stop" -a "$PHASE" = "post-down" ]; then
216241

217242
brctl delbr $IFACE
218243

rootfs_overlay/lib/bridge-utils/bridge-network-interface.sh renamed to rootfs_overlay/usr/lib/udev/bridge-network-interface.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ BRIDGE_HOTPLUG=no
1919

2020
[ "$BRIDGE_HOTPLUG" = "no" ] && exit 0
2121

22-
. /lib/bridge-utils/bridge-utils.sh
22+
. /usr/lib/bridge-utils/bridge-utils.sh
2323

2424
if [ -d /run/network ]; then
2525
for i in $(ifquery --list --allow auto); do
@@ -30,6 +30,10 @@ if [ -d /run/network ]; then
3030
create_vlan_port
3131
if [ -d /sys/class/net/$port ]; then
3232
ifup --allow auto $i
33+
if [ -e /proc/sys/net/ipv6/conf/$port ]; then ip link set $port addrgenmode none;fi
34+
if [ "$(ifquery "$i"|sed -n -e's/^bridge[_-]hw: //p')" = "$port" ]; then
35+
ip link set dev "$i" address "$(ip link show dev "$port" 2>/dev/null|sed -n "s|.*link/ether \([^ ]*\) brd.*|\1|p")"
36+
fi
3337
brctl addif $i $port && ip link set dev $port up
3438
fi
3539
break

0 commit comments

Comments
 (0)