[Bug 1003656] Re: bridge-utils/vlan udev hooks prevent execution of upstart hook, slowing down boot

Stéphane Graber stgraber at stgraber.org
Tue Sep 11 16:09:14 UTC 2012


I just spent a few minutes trying to figure out the ordering based on the scripts for Andrew's system, it's basically:
- eth0 appears
  - triggers udev
    - triggers upstart
      - triggers ifup eth0
        - triggers bonding
          - bond0 appears
            - triggers udev
              - triggers bridge-network-interface
                - triggers ifup br0
                  - br0 appears
                    - triggers udev
                      - triggers upstart
                        - triggers ifup br0 => fails, already configured
                  - dhclient br0 => fails as it's blocking and no interface in bond
              - triggers upstart
                - triggers ifup bond0
          - eth0 is joined in the bond
- eth1 appears
  - triggers udev
    - triggers upstart
      - triggers ifup eth1
        - triggers bonding
          - eth1 is joined in the bond


As you can see, it's relatively complex. The main problem as easily seen above is that udev being sequential, the "ifup br0" will be called before the bond interface is fully setup and so will fail to acquire an IP as nothing's in the bond at this point.

A possible way around the problem would be to only create the bridge
from the udev hook but not actually call ifup, letting the upstart job
take care of this. This would make the code similar to what vlan and
ifenslave are currently doing where as far as I know we're not getting a
similar deadlock.

I have a system reproducing this bug, so I'll now be trying my
workaround and re-read all the scripts once more to see if I missed
something.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to bridge-utils in Ubuntu.
https://bugs.launchpad.net/bugs/1003656

Title:
  bridge-utils/vlan udev hooks prevent execution of upstart hook,
  slowing down boot

Status in “bridge-utils” package in Ubuntu:
  Triaged
Status in “vlan” package in Ubuntu:
  Invalid
Status in “bridge-utils” source package in Precise:
  Triaged
Status in “bridge-utils” source package in Quantal:
  Triaged
Status in “vlan” source package in Quantal:
  Invalid

Bug description:
  we're trying to migrate our network configuration from lucid to
  precise.  in 10.04 we tied eth0+eth1 together into bond0, then set br0
  up on top of that and assigned an address via dhcp.  in 12.04 this
  only works if br0 is configured with a static ip address.  it fails
  when trying to use dhcp.  to simplify testing i've removed eth1 from
  the configuration (sanity checked against
  http://www.stgraber.org/2012/01/04/networking-in-ubuntu-12-04-lts/ ):

  auto lo
  iface lo inet loopback

  auto eth0
  iface eth0 inet manual
    bond-master bond0

  auto bond0
  iface bond0 inet manual
    bond-slaves none
    bond-mode 802.3ad
    bond-miimon 100

  auto br0
  iface br0 inet dhcp
    bridge_ports bond0 
    bridge_stp off

  the above results in a system w/o network connectivity.  the dhcp
  server reports requests from an unexpected mac addr (different each
  boot).  udevd logs "timeout 'bridge-network-interface'".  poking
  around a little before the timeout shows the following 2 groups of
  processes:

    |-ifup,1361 --allow auto eth0
    |   `-sh,1363 -c run-parts  /etc/network/if-pre-up.d
    |       `-run-parts,1364 /etc/network/if-pre-up.d
    |           `-ifenslave,1392 /etc/network/if-pre-up.d/ifenslave
    |               `-sleep,2380 0.1

    |   |-udevd,599 --daemon
    |   |   `-bridge-network-,1429 /lib/udev/bridge-network-interface
    |   |       `-ifup,1457 --allow auto br0
    |   |           `-sh,1540 -c dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient.br0.pid -lf /var/lib/dhcp/dhclient.br0.leases -1 br0
    |   |               `-dhclient3,1541 -e IF_METRIC=100 -pf /var/run/dhclient.br0.pid -lf /var/lib/dhcp/dhclient.br0.leases -1 br0

  the ifenslave appears to be looping over that `sleep` (testing for
  /run/network/ifenslave.bond0) until it is killed and the dhclient is
  making its request w/the unexpected mac addr (also reported in `ip
  link show br0`).  interestingly br0's mac addr matches that of eth0
  (as expected) once bridge-network-interface has timed out and been
  killed.

  a workaround appears to be adding the line:
    pre-up /sbin/ifup --allow auto bond0
  to the "auto br0" stanza.

  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: bridge-utils 1.5-2ubuntu6
  ProcVersionSignature: Ubuntu 3.2.0-24.38-generic 3.2.16
  Uname: Linux 3.2.0-24-generic x86_64
  ApportVersion: 2.0.1-0ubuntu7
  Architecture: amd64
  Date: Wed May 23 13:44:43 2012
  ProcEnviron:
   TERM=xterm
   PATH=(custom, user)
   LANG=en_US.UTF-8
   SHELL=/usr/bin/zsh
  SourcePackage: bridge-utils
  UpgradeStatus: No upgrade log present (probably fresh install)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/bridge-utils/+bug/1003656/+subscriptions




More information about the foundations-bugs mailing list