Adjust backchannel network setup to require explicit enabling

on the device under test and to use a not-normally-generated interface name, so that use of add-on ethernet devices is not affected in normal operation.

BUG=2962, 2941

(dup of 1810013, git goofiness)

Review URL: http://codereview.chromium.org/1826003
This commit is contained in:
Nathan Williams 2010-04-30 19:24:02 -04:00
parent 66659791ce
commit 219bbebef2

View File

@ -4,54 +4,63 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
echo "Configuring for eth1 backchannel" echo "Configuring for backchannel network device"
testif=eth_test
# Prevent connman from taking control of the backchannel network device. # Prevent connman from taking control of the backchannel network device.
ORIG_CONF=${ROOT_FS_DIR}/etc/init/connman.conf ORIG_CONF=${ROOT_FS_DIR}/etc/init/connman.conf
TEMP_CONF=${ORIG_CONF}.tmp TEMP_CONF=${ORIG_CONF}.tmp
sed 's/connmand -W/connmand -I eth1 -W/' ${ORIG_CONF} > ${TEMP_CONF} sed "s/connmand -W/connmand -I ${testif} -W/" ${ORIG_CONF} > ${TEMP_CONF}
mv -f ${TEMP_CONF} ${ORIG_CONF} mv -f ${TEMP_CONF} ${ORIG_CONF}
# Arrange to run dhclient on the backchannel device but without # Arrange to run dhclient on the backchannel device but without
# installing the default route, and stashing said route away for later # installing the default route, and stashing said route away for later
# installation as a host route. # installation as a host route.
cat > ${ROOT_FS_DIR}/etc/udev/rules.d/50-backchannel-eth1.rules <<EOF cat > ${ROOT_FS_DIR}/etc/udev/rules.d/50-backchannel-network.rules <<EOF
KERNEL=="eth*", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/sbin/backchannel-setup %k" KERNEL=="eth*", SUBSYSTEMS=="usb", ACTION=="add", RUN+="/sbin/backchannel-setup %k"
KERNEL=="eth1", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="kill \$(cat /var/run/dhclient-%k.pid)" KERNEL=="${testif}", SUBSYSTEMS=="usb", ACTION=="remove", RUN+="kill \$(cat /var/run/dhclient-%k.pid)"
EOF EOF
cat > ${ROOT_FS_DIR}/sbin/backchannel-setup <<EOF cat > ${ROOT_FS_DIR}/sbin/backchannel-setup <<EOF
#!/bin/sh #!/bin/sh
if [ -f /var/run/dhclient-eth1.pid ]; then testif=${testif}
if [ ! -f /mnt/stateful_partition/etc/enable_backchannel_network ]; then
# This mechanism has to be explicitly enabled on the device.
exit
fi
if [ -f /var/run/dhclient-\${testif}.pid ]; then
# Something else is already going on - perhaps a second # Something else is already going on - perhaps a second
# USB Ethernet device has been inserted. Let's not mess with it. # USB Ethernet device has been inserted. Let's not mess with it.
exit exit
fi fi
if [ "\$1" != "eth1" ]; then if [ "\$1" != "\${testif}" ]; then
initctl stop connman initctl stop connman
# \$1 is the current name of the backchannel device. Swap it with eth1. # \$1 is the current name of the backchannel device. Swap it with testif.
if ifconfig eth1 > /dev/null 2>&1; then if ifconfig \${testif} > /dev/null 2>&1; then
orig_eth1_mac=\$(ifconfig eth1 | awk '/HWaddr/ {print \$5}') orig_mac=\$(ifconfig \${testif} | awk '/HWaddr/ {print \$5}')
ifconfig eth1 down # must be down for nameif to work ifconfig \${testif} down # must be down for nameif to work
nameif eth_tmp \${orig_eth1_mac} nameif eth_tmp \${orig_mac}
fi fi
bdev_mac=\$(ifconfig \$1 | awk '/HWaddr/ {print \$5}') bdev_mac=\$(ifconfig \$1 | awk '/HWaddr/ {print \$5}')
ifconfig \$1 down # must be down for nameif to work ifconfig \$1 down # must be down for nameif to work
nameif eth1 \${bdev_mac} nameif \${testif} \${bdev_mac}
if [ -n "\${orig_eth1_mac}" ]; then if [ -n "\${orig_mac}" ]; then
nameif \$1 \${orig_eth1_mac} nameif \$1 \${orig_mac}
fi fi
initctl start connman initctl start connman
fi fi
# Bring up the backchannel interface # Bring up the backchannel interface
dhclient -q -pf /var/run/dhclient-eth1.pid \\ dhclient -q -pf /var/run/dhclient-\${testif}.pid \\
-lf /var/run/dhclient-eth1.leases \\ -lf /var/run/dhclient-\${testif}.leases \\
-cf /etc/dhclient-backchannel.conf \\ -cf /etc/dhclient-backchannel.conf \\
-sf /sbin/dhclient-backchannel-script \\ -sf /sbin/dhclient-backchannel-script \\
eth1 \${testif}
EOF EOF
chmod +x ${ROOT_FS_DIR}/sbin/backchannel-setup chmod +x ${ROOT_FS_DIR}/sbin/backchannel-setup