# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description     "Preload network drivers"
author          "chromium-os-dev@chromium.org"

# Run on boot-services; "stay running" until we stop system-services
# (which is shutdown).
start on starting boot-services

# crbug.com/810916: Use an event where we are confident all needed "net"
# driver modules have registered with "net" subsystem. The assumption is
# this set of drivers will be used again on next boot.
#
# "stop on stopped udev-trigger" has proven to be too early.
#
# "stop on starting system-services" means boot-services have completed
# (including udev-trigger) and conditions are meet to start system-services.
# But it's still racing.
# "stop on started system-services" is slightly better as this indicates
# some system-services have started. But it's still racing too.
#
# "stop on stopping system-services" would certainly qualify (shutdown) - but
# slows down shutdown which is expected to be quick (no benchmark though).
#
# Compromise is to check for WiFi (wlan0) device well after system services
# have been started. "failsafe" service meets that criteria even though
# it's not a 100% guarantee either that any given WiFi driver has registered
# with "net" subsystem.
#
# We also try to mitigate this race by looping for "expected" (WiFi) devices.
#
# https://dev.chromium.org/chromium-os/chromiumos-design-docs/boot-design#TOC-Failsafe-service
stop on started failsafe

env drvfile=/var/lib/preload-network-drivers

pre-start script
  # Drivers for Ethernet and WiFi devices are generally modules.
  # Our post-stop script will have recorded the driver names on the
  # previous boot cycle.  Load those drivers now so shill can config
  # the network sooner.
  #
  # Note: failure to probe the module here is NOT fatal.
  if [ -s "${drvfile}" ] ; then
    for drv in $(head -1 "${drvfile}"); do
      if ! modinfo -n -- "${drv}" | \
           grep -q "^/lib/modules/$(uname -r)/kernel/drivers/net" ||
         ! modprobe -q -- "${drv}"; then
        # If these weren't network drivers, or modprobe didn't like them,
        # remove the file.  The post-stop script will make a new one.
        unlink "${drvfile}"
        logger -t "${UPSTART_JOB}" \
          "modprobe ${drv} failed.  Unlinked ${drvfile}."
      fi
    done
  fi
end script

post-stop script
  # Create/Update list of networking driver names (i.e. Ethernet and WiFi).
  # Used to preload Ethernet and WiFi drivers in pre-start script.
  newdrv=''

  # "found" is set when an interface we are looking for is present.
  found=0

  probe_driver() {
    local mod_dev="$1"
    local mod_link="/sys/class/net/${mod_dev}/device/driver/module"
    local drvmod=''

    if [ -e "${mod_link}" ] ; then
      drvmod="$(basename "$(readlink "${mod_link}")")"
      newdrv="${drvmod} ${newdrv}"
      found=1
    fi
  }

  for n in $(seq 30); do
    # We will only find one of the following. Only Marvell WiFi uses "mlan".
    probe_driver "wlan0"
    probe_driver "mlan0"

    if [ "${found}" -eq 1 ] ; then
      break
    fi

    sleep 1
  done

  # We expect to find WiFi in all Chrome OS devices. Announce results here.
  if [ "${found}" -eq 1 ] ; then
    logger -t "${UPSTART_JOB}" "WiFi ${newdrv} found after ${n} seconds."
  else
    logger -t "${UPSTART_JOB}" "WiFi interface not found after ${n} seconds."
  fi

  # USB wired ethernet driver is optional - add it if present.
  # TODO(grundler): PCI wired ethernet is "built-in" to chromeboxes and
  #    it would be nice to warn when the PCI driver isn't registering.
  probe_driver "eth0"

  if [ -s "${drvfile}" ] ; then
    olddrv=$(head -1 "${drvfile}")
  fi

  # Only update contents if they've changed.
  if [ "${newdrv}" != "${olddrv}" ] ; then
    echo "${newdrv}" > "${drvfile}"
    # Force ureadahead to rebuild its block list.
    rm -f /var/lib/ureadahead/pack
  fi
end script
