+}
+
+proto_wireless()
+{
+ # Bring interface up
+ bring_if_up
+
+ if [ ! -d /etc/sysconfig/network/ssid ]; then
+ echo "Missing \"/etc/sysconfig/network/ssid\" directory"
+ exit ${EXIT_CODE_WARNING}
+ fi
+
+ # Spaces will be converted to underscores in ESSID field
+ for wnet in $(iwlist ${DEVICE} scan | grep ESSID |
+ sed -e "s!.*SSID:\"\(.*\)\"!\1!" -e "s!\ !_!g"); do
+ if [ -f "/etc/sysconfig/network/ssid/${wnet}" ]; then
+ ESSID=${wnet}
+ source "/etc/sysconfig/network/ssid/${wnet}"
+ break
+ fi
+ done
+
+ if [ -z "${ESSID}" ]; then
+ echo "No known wifi networks"
+ exit ${EXIT_CODE_WARNING}
+ fi
+
+ if [ -f /var/run/wpa_supplicant/${DEVICE} ]; then
+ echo "Stopping previous wpa_supplicant"
+ killall wpa_supplicant
+ rm /var/run/wpa_supplicant/${DEVICE}
+ fi
+
+ wpa_supplicant -B -c /etc/wpa_supplicant.conf -i ${DEVICE}
+ count=0
+ while ! wpa_cli -i ${DEVICE} status | grep "wpa_state=COMPLETED"; do
+ echo "Waiting for wpa_supplicant to complete"
+ sleep 0.25
+
+ let count=count+1
+ if [ $count -gt 20 ]; then
+ echo "wpa_supplicant failure"
+ exit ${EXIT_CODE_WARNING}
+ fi
+ done
+}
+
+# Make sure interface is available
+if [ ! -d /sys/class/net/${DEVICE} ]; then
+ echo "Interface ${DEVICE} not found"
+ exit ${EXIT_CODE_WARNING}
+fi
+
+# Determining if the interface is a bridge:
+if [ "x${BRIDGE}" = "xyes" ]; then
+ check_brctl
+ cmd_run_log ${BRCTL} addbr ${DEVICE} &&
+ cmd_run_log ${BRCTL} stp ${DEVICE} off || exit 1
+fi
+
+# Determining if the interface is part of a bridge:
+if [ -n "${BRIDGE_TO}" ]; then
+ check_brctl
+ cmd_run_log ${BRCTL} addif ${BRIDGE_TO} ${DEVICE} || exit 1
+fi
+
+if [ "x${BOOTPROTO}" = "xwifi" ]; then
+ proto_wireless
+ # At this point, the SSID script has been sourced, and its
+ # BOOTPROTO variable will contain either "static" or "dhcp",
+ # so configuration will continue below.
+fi
+
+if [ "x${BOOTPROTO}" = "xdhcp" ]; then
+ proto_dhcp
+elif [ "x${BOOTPROTO}" = "xstatic" ]; then
+ proto_static