diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/connections/ethernet | 135 | ||||
-rw-r--r-- | src/connections/ethernet-iproute | 138 | ||||
-rw-r--r-- | src/connections/wireless | 16 | ||||
-rw-r--r-- | src/network | 23 | ||||
-rw-r--r-- | src/wireless | 3 |
5 files changed, 83 insertions, 232 deletions
diff --git a/src/connections/ethernet b/src/connections/ethernet index e24cc3e..1775247 100644 --- a/src/connections/ethernet +++ b/src/connections/ethernet @@ -1,38 +1,48 @@ #! /bin/bash . /usr/lib/network/network +report_iproute() +{ + report_fail "$*" + bring_interface down "$INTERFACE" + exit 1 +} + ethernet_up() { load_profile "$1" if [[ ! -e "/sys/class/net/$INTERFACE" ]]; then if ! echo "$INTERFACE" | fgrep -q ":"; then - report_fail "interface $INTERFACE does not exist" - return 1 + report_iproute "Interface $INTERFACE does not exist" fi fi - report_debug ethernet_up ifup - bring_interface up-old "$INTERFACE" + report_debug ethernet_iproute_up ifup + bring_interface up "$INTERFACE" - # don't think it's possible to detect carrier using ifconfig alone (at least, not without ifdown/ifupping the interface) - if [[ $(cat "/sys/class/net/$INTERFACE/carrier" 2>/dev/null) -ne 1 ]]; then # gives err if iface inactive (i.e. ifdown) - report_fail "No connection" - return 1 + + if ip link show dev "$INTERFACE" | fgrep -q "NO-CARRIER"; then + sleep ${CARRIER_TIMEOUT:-2} # Some cards are plain slow to come up. Don't fail immediately. + if ip link show dev "$INTERFACE" | fgrep -q "NO-CARRIER"; then + report_iproute "No connection" + fi fi if checkyesno "${AUTH8021X:-no}"; then . "$SUBR_DIR/8021x" [[ -z "$WPA_CONF" ]] && WPA_CONF="/etc/wpa_supplicant.conf" [[ -z "$WPA_OPTS" ]] && WPA_OPTS="-Dwired" - report_debug ethernet_up start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS" + + report_debug ethernet_iproute_up start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS" if ! start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS"; then report_fail "wpa_supplicant did not start, possible configuration error" return 1 fi + if ! wpa_check "$INTERFACE"; then - # ignore quirk nodown---is that appropriate? + # ignore quirk nodown---is that appropriate? or should we just use report_iproute? # this adds a flush call as well---is that appropriate? - bring_interface forcedown-old "$INTERFACE" + bring_interface forcedown "$INTERFACE" report_fail "WPA Authentication/Association Failed" return 1 fi @@ -60,102 +70,95 @@ ethernet_up() { return 1 fi fi - if [[ -n "$IFOPTS" ]]; then - report_debug ethernet_up ifup $IFOPTS - ifconfig "$INTERFACE" $IFOPTS - fi ;; static) - report_debug ethernet_up ifup $IFOPTS - if ! ifconfig "$INTERFACE" $IFOPTS up; then - report_fail "Bringing interface up failed." - return 1 + if [[ -n "$ADDR" ]]; then + report_debug ethernet_iproute_up ip addr add "$ADDR/24" brd + dev "$INTERFACE" + if ! ip addr add "$ADDR/24" brd + dev "$INTERFACE"; then + report_iproute "Could not configure interface" + fi fi - - # bring up the default route (gateway) - if [[ -n "$GATEWAY" ]]; then - report_debug ethernet_up route add default gw "$GATEWAY" - if ! route add default gw "$GATEWAY"; then - # JP: don't we want to add this to all the aborts? - # ignore quirk nodown---is that appropriate? - # this adds a flush call as well---is that appropriate? - bring_interface forcedown-old "$INTERFACE" - report_fail "Adding gateway $GATEWAY failed." + if [[ -n "$IFOPTS" ]]; then + if ! ifconfig "$INTERFACE" $IFOPTS up; then + report_iproute "Bringing interface up failed." return 1 fi fi + if [[ -n "$GATEWAY" ]]; then + report_debug ethernet_iproute_up ip route add default via "$GATEWAY" + if ! ip route add default via "$GATEWAY"; then + report_iproute "Adding gateway $GATEWAY failed" + fi + fi ;; *) - report_fail "IP must be either 'dhcp' or 'static'." - return 1 + report_iproute "IP must be either 'dhcp' or 'static'" ;; esac - # set the hostname + if [[ -n "$IPCFG" ]]; then + for line in "${IPCFG[@]}"; do + + report_debug ethernet_iproute_up ip "$line" + if ! ip $line; then + report_iproute "Could not configure interface ($line)." + fi + done + fi + + # Set hostname if [[ -n "$HOSTNAME" ]]; then - report_debug ethernet_up hostname "$HOSTNAME" + report_debug ethernet_iproute_up hostname "$HOSTNAME" if ! hostname "$HOSTNAME"; then - report_fail "Setting hostname $HOSTNAME failed." - return 1 + report_iproute "Cannot set hostname to $HOSTNAME" fi fi # Generate a new resolv.conf - if [[ -n "$DNS1" || -n "$DNS" ]]; then + if [[ -n "$DNS" ]]; then + : >/etc/resolv.conf + [[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf + [[ -n "$SEARCH" ]] && echo "search $SEARCH" >>/etc/resolv.conf + for dns in "${DNS[@]}"; do + echo "nameserver $dns" >>/etc/resolv.conf + done + elif [[ -n "$DNS1" ]]; then # support older 'ethernet' syntax. : >/etc/resolv.conf [[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf [[ -n "$SEARCH" ]] && echo "search $SEARCH" >>/etc/resolv.conf [[ -n "$DNS1" ]] && echo "nameserver $DNS1" >>/etc/resolv.conf [[ -n "$DNS2" ]] && echo "nameserver $DNS2" >>/etc/resolv.conf - - if [[ -n "$DNS" ]]; then - for dns in "${DNS[@]}"; do - echo "nameserver $dns" >>/etc/resolv.conf - done - fi fi + return 0 } ethernet_down() { load_profile "$1" - case "$IP" in - dhcp) - if checkyesno "${DHCLIENT:-no}"; then - if [[ -f "/var/run/dhclient-${INTERFACE}.pid" ]]; then - report_debug ethernet_down kill dhclient - kill "$(cat "/var/run/dhclient-${INTERFACE}.pid")" - fi - else - if [[ -f "/var/run/dhcpcd-${INTERFACE}.pid" ]]; then - report_debug ethernet_down dhcpcd -qx "$INTERFACE" - dhcpcd -qx "$INTERFACE" &>/dev/null - fi - fi - ;; - static) - if [[ -n "$GATEWAY" ]]; then - report_debug ethernet_down route del default gw "$GATEWAY" - route del default gw "$GATEWAY" + + if [[ "$IP" == "dhcp" ]]; then + if [[ -f "/var/run/dhcpcd-${INTERFACE}.pid" ]]; then + report_debug ethernet_iproute_down dhcpcd -qx "$INTERFACE" + dhcpcd -qx "$INTERFACE" &>/dev/null fi - ;; - esac + fi - report_debug ethernet_down ifdown + report_debug ethernet_iproute_down if_down # ignore quirk nodown---is that appropriate? # this adds a flush call as well---is that appropriate? - bring_interface forcedown-old "$INTERFACE" + bring_interface forcedown "$INTERFACE" + } # Returns status of profile - is it still functional? ethernet_status() { - if ! ip link show dev ra0 | fgrep -q "state UP"; then + if ! ip link show dev "$INTERFACE" | fgrep -q "state UP"; then return 1 fi } ethernet_$1 "$2" exit $? +# vim: set ts=4 et sw=4: -# vim: ft=sh ts=4 et sw=4: diff --git a/src/connections/ethernet-iproute b/src/connections/ethernet-iproute deleted file mode 100644 index 088d25b..0000000 --- a/src/connections/ethernet-iproute +++ /dev/null @@ -1,138 +0,0 @@ -#! /bin/bash -. /usr/lib/network/network - -report_iproute() -{ - report_fail "$*" - bring_interface down "$INTERFACE" - exit 1 -} - -ethernet_up() { - load_profile "$1" - - if [[ ! -e "/sys/class/net/$INTERFACE" ]]; then - if ! echo "$INTERFACE" | fgrep -q ":"; then - report_iproute "Interface $INTERFACE does not exist" - fi - fi - - report_debug ethernet_iproute_up ifup - bring_interface up "$INTERFACE" - - - if ip link show dev "$INTERFACE" | fgrep -q "NO-CARRIER"; then - report_iproute "No connection" - fi - - if checkyesno "${AUTH8021X:-no}"; then - . "$SUBR_DIR/8021x" - [[ -z "$WPA_CONF" ]] && WPA_CONF="/etc/wpa_supplicant.conf" - [[ -z "$WPA_OPTS" ]] && WPA_OPTS="-Dwired" - - report_debug ethernet_iproute_up start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS" - if ! start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS"; then - report_fail "wpa_supplicant did not start, possible configuration error" - return 1 - fi - - if ! wpa_check "$INTERFACE"; then - # ignore quirk nodown---is that appropriate? or should we just use report_iproute? - # this adds a flush call as well---is that appropriate? - bring_interface forcedown "$INTERFACE" - report_fail "WPA Authentication/Association Failed" - return 1 - fi - fi - - case "$IP" in - dhcp) - # Clear remaining pid files. - rm -f "/var/run/dhcpcd-$INTERFACE".{pid,cache} >/dev/null 2>&1 - - # If using own dns, tell dhcpcd to NOT replace resolv.conf - [[ -n "$DNS" ]] && DHCP_OPTIONS="-C resolv.conf $DHCP_OPTIONS" - - report_debug ethernet_iproute_up dhcpcd -qL -t "${DHCP_TIMEOUT:-10}" $DHCP_OPTIONS "$INTERFACE" - dhcpcd -qL -t "${DHCP_TIMEOUT:-10}" $DHCP_OPTIONS "$INTERFACE" 2>&1 | report_debug "$(cat)" - if [[ "$PIPESTATUS" -ne 0 ]]; then - report_iproute "DHCP IP lease attempt failed" - fi - ;; - static) - if [[ -n "$ADDR" ]]; then - report_debug ethernet_iproute_up ip addr add "$ADDR/24" brd + dev "$INTERFACE" - if ! ip addr add "$ADDR/24" brd + dev "$INTERFACE"; then - report_iproute "Could not configure interface" - fi - fi - if [[ -n "$GATEWAY" ]]; then - report_debug ethernet_iproute_up ip route add default via "$GATEWAY" - if ! ip route add default via "$GATEWAY"; then - report_iproute "Adding gateway $GATEWAY failed" - fi - fi - ;; - *) - report_iproute "IP must be either 'dhcp' or 'static'" - ;; - esac - - if [[ -n "$IPCFG" ]]; then - for line in "${IPCFG[@]}"; do - - report_debug ethernet_iproute_up ip "$line" - if ! ip $line; then - report_iproute "Could not configure interface ($line)." - fi - done - fi - - # Set hostname - if [[ -n "$HOSTNAME" ]]; then - report_debug ethernet_iproute_up hostname "$HOSTNAME" - if ! hostname "$HOSTNAME"; then - report_iproute "Cannot set hostname to $HOSTNAME" - fi - fi - - # Generate a new resolv.conf - if [[ -n "$DNS" ]]; then - : >/etc/resolv.conf - [[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf - [[ -n "$SEARCH" ]] && echo "search $SEARCH" >>/etc/resolv.conf - - for dns in "${DNS[@]}"; do - echo "nameserver $dns" >>/etc/resolv.conf - done - fi - return 0 -} - -ethernet_down() { - load_profile "$1" - - if [[ "$IP" == "dhcp" ]]; then - if [[ -f "/var/run/dhcpcd-${INTERFACE}.pid" ]]; then - report_debug ethernet_iproute_down dhcpcd -qx "$INTERFACE" - dhcpcd -qx "$INTERFACE" &>/dev/null - fi - fi - - report_debug ethernet_iproute_down if_down - # ignore quirk nodown---is that appropriate? - # this adds a flush call as well---is that appropriate? - bring_interface forcedown "$INTERFACE" - -} - -# Returns status of profile - is it still functional? -ethernet_status() { - if ! ip link show dev "$INTERFACE" | fgrep -q "state UP"; then - return 1 - fi -} - -ethernet_$1 "$2" -exit $? -# vim: set ts=4 et sw=4: diff --git a/src/connections/wireless b/src/connections/wireless index e1d4a44..6e9ecd2 100644 --- a/src/connections/wireless +++ b/src/connections/wireless @@ -42,7 +42,7 @@ wireless_up() { fi report_debug wireless_up ifup - bring_interface up-old "$INTERFACE" || return 1 + bring_interface up "$INTERFACE" || return 1 quirk prescan && iwlist "$INTERFACE" scan &> /dev/null # bcm43xx if quirk preessid; then # ipw3945 @@ -102,7 +102,7 @@ wireless_up() { if quirk "predown"; then # madwifi FS#10585 # ignore quirk nodown---is that appropriate? # this adds a flush call as well---is that appropriate? - bring_interface forcedown-old "$INTERFACE" + bring_interface forcedown "$INTERFACE" fi report_debug wireless_up iwconfig "$INTERFACE" $WEP_OPTS @@ -114,7 +114,7 @@ wireless_up() { fi if quirk "predown"; then # madwifi FS#10585 - bring_interface up-old "$INTERFACE" + bring_interface up "$INTERFACE" fi report_debug ethernet_up wep_check @@ -186,9 +186,7 @@ wireless_up() { ;; esac - conn=ethernet - checkyesno "${IPROUTE:-no}" && conn=ethernet-iproute - if ! "$CONN_DIR/$conn" up "$1"; then + if ! $CONN_DIR/ethernet up "$1"; then wireless_down "$1" YES return 1 fi @@ -200,9 +198,7 @@ wireless_down() { load_profile "$PROFILE" . "$SUBR_DIR/8021x" if ! checkyesno "$NOETHERNETDOWN"; then - conn=ethernet - checkyesno "${IPROUTE:-no}" && conn=ethernet-iproute - "$CONN_DIR/$conn" down "$PROFILE" + "$CONN_DIR/ethernet" down "$PROFILE" fi report_debug wireless_down stop_wpa "$INTERFACE" stop_wpa "$INTERFACE" @@ -212,7 +208,7 @@ wireless_down() { # respects quirk nodown---is that appropriate? # wasn't this already called in ethernet_down? but does the call there respect quirk nodown? # this adds a flush call as well---is that appropriate? - bring_interface down-old "$INTERFACE" + bring_interface down "$INTERFACE" # Handle wireless kill switches # Any reason why a hardware switch should be considered on interface down? diff --git a/src/network b/src/network index 165d6e3..be814d4 100644 --- a/src/network +++ b/src/network @@ -337,32 +337,21 @@ bring_interface() { INTERFACE="$2" case "$1" in - up|up-old) + up) if ! ( eval $IFACE_UP ); then return 1 fi - if [ "$1" = old ]; then - ifconfig "$INTERFACE" up - else - ip link set dev "$INTERFACE" up &>/dev/null # man ip is inconsistent about whether to use "dev" - fi + ip link set dev "$INTERFACE" up &>/dev/null # man ip is inconsistent about whether to use "dev" sleep "${UP_SLEEP:-2}" ;; - down|forcedown|down-old|forcedown-old) + down|forcedown) # should this be placed elsewhere? if ! ( eval $IFACE_DOWN ); then return 1 fi - if [ "${1%-old}" != "$1" ]; then - ifconfig "$INTERFACE" 0.0.0.0 - if ! quirk nodown || [ "$1" = forcedown-old ]; then - ifconfig "$INTERFACE" down - fi - else - ip addr flush dev "$INTERFACE" &>/dev/null - if ! quirk nodown || [ "$1" = forcedown ]; then - ip link set dev "$INTERFACE" down &>/dev/null # man ip is inconsistent about whether to use "dev" - fi + ip addr flush dev "$INTERFACE" &>/dev/null + if ! quirk nodown || [ "$1" = forcedown ]; then + ip link set dev "$INTERFACE" down &>/dev/null # man ip is inconsistent about whether to use "dev" fi ;; *) diff --git a/src/wireless b/src/wireless index 2a5b4a3..0bd4dc1 100644 --- a/src/wireless +++ b/src/wireless @@ -119,7 +119,7 @@ wpa_supplicant_scan_info() { set_rf_state() { local INTERFACE="$1" state="$2" PROFILE="$3" - if [[ "$RFKILL" == "hard" ]] + if [[ "$RFKILL" == "hard" ]]; then report_fail "Cannot set state on hardware rfkill switch" return 1 fi @@ -173,3 +173,4 @@ get_rf_state() { } # vim: ft=sh ts=4 et sw=4: + |