summaryrefslogtreecommitdiffstats
path: root/src/connections/ethernet
diff options
context:
space:
mode:
Diffstat (limited to 'src/connections/ethernet')
-rw-r--r--src/connections/ethernet211
1 files changed, 39 insertions, 172 deletions
diff --git a/src/connections/ethernet b/src/connections/ethernet
index 933dbd6..e24e9f5 100644
--- a/src/connections/ethernet
+++ b/src/connections/ethernet
@@ -1,114 +1,86 @@
#! /bin/bash
-
-##################################
-##
-# /usr/lib/network/connections/ethernet
-##
-##################################
-
-. /etc/rc.conf
-. /etc/rc.d/functions
. /usr/lib/network/network
ethernet_up() {
- load_profile "$1"
+ load_profile $1
- if [[ ! -e "/sys/class/net/$INTERFACE" ]]; then
- if ! echo "$INTERFACE" | fgrep -q ":"; then
- report_fail "Interface $INTERFACE does not exist."
+ if [[ ! -e /sys/class/net/"$INTERFACE" ]]; then
+ if ! echo "$INTERFACE"|grep ":"; then
+ err_append "interface $INTERFACE does not exist"
return 1
fi
fi
- report_debug ethernet_up ifup
- ethernet_control "$INTERFACE" up
- sleep 3
+ ip link set $INTERFACE up
+ sleep 1
- # don't think it's possible to detect carrier using ifconfig alone (at least, not without ifdown/ifupping the interface)
- # if ip link show dev "$INTERFACE" | fgrep -q "NO-CARRIER"; then...
- # if ! ethernet_query "$INTERFACE" address; then...
- if [[ $(cat /sys/class/net/$INTERFACE/carrier 2>/dev/null) -ne 1 ]]; then # gives err if iface inactive (i.e. ifdown)
- # 0 if up but not connected to network, 1 if connected
- report_fail "No connection."
+ if ip link show $INTERFACE|grep -q "NO-CARRIER"; then
+ err_append "No connection"
return 1
fi
if checkyesno "${AUTH8021X:-no}"; then
- . "$SUBR_DIR/8021x"
+ . "${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"
start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS"
if ! wpa_check "$INTERFACE"; then
- ethernet_control "$INTERFACE" forcedown # JP: forcedown ignores the nodown quirk, matching
- # what was already here in the code...do we in fact want to ignore
- # the nodown quirk here?
+ ifconfig "$INTERFACE" down
return 1
fi
fi
- case "$IP" in
+ case $IP in
dhcp)
if checkyesno "${DHCLIENT:-no}"; then
- rm -r "/var/run/dhclient-$INTERFACE.pid" >/dev/null 2>&1
- report_debug ethernet_up dhclient -q -e TIMEOUT="${DHCP_TIMEOUT:-10}" -pf "/var/run/dhclient-$INTERFACE.pid" "$INTERFACE"
- if ! dhclient -q -e TIMEOUT="${DHCP_TIMEOUT:-10}" -pf "/var/run/dhclient-$INTERFACE.pid" "$INTERFACE"; then
- report_fail "Couldn't get DHCP IP lease."
+ rm -r /var/run/dhclient-${INTERFACE}.pid >/dev/null 2>&1
+ if ! dhclient -q -e TIMEOUT="${DHCP_TIMEOUT:-10}" -pf /var/run/dhclient-${INTERFACE}.pid $INTERFACE; then
+ err_append "DHCP IP lease attempt failed."
return 1
fi
else
# Clear remaining pid files.
- rm -f "/var/run/dhcpcd-$INTERFACE".{pid,cache} >/dev/null 2>&1
+ rm -f /var/run/dhcpcd-${INTERFACE}.{pid,cache} >/dev/null 2>&1
# If using own dns, tell dhcpcd to NOT replace resolv.conf
- [[ -n "$DNS1" || -n "$DNS" ]] && DHCP_OPTIONS="-C resolv.conf $DHCP_OPTIONS"
-
- #if ! dhcpcd -qL -t "${DHCP_TIMEOUT:-10}" $DHCP_OPTIONS "$INTERFACE" >/dev/null 2>&1; then
- report_debug ethernet_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_fail "Couldn't get DHCP IP lease."
+ [[ -n "$DNS1" ]] && DHCP_OPTIONS="-C resolv.conf $DHCP_OPTIONS"
+ # Start dhcpcd
+ if ! dhcpcd -qL -t "${DHCP_TIMEOUT:-10}" $DHCP_OPTIONS "$INTERFACE"; then
+ err_append "DHCP IP lease attempt failed."
return 1
fi
fi
- if [[ -n "$IFOPTS" ]]; then
- report_debug ethernet_up ifup $IFOPTS
- ifconfig "$INTERFACE" $IFOPTS
- fi
+ [[ -n "$IFOPTS" ]] && ifconfig "$INTERFACE" $IFOPTS
;;
static)
- report_debug ethernet_up ifup $IFOPTS
if ! ifconfig "$INTERFACE" $IFOPTS up; then
- report_fail "Couldn't configure $INTERFACE interface."
+ err_append "Bringing interface up failed."
return 1
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
- ethernet_control "$INTERFACE" down # JP: don't we want to take the interface down if we failed (as ethernet-iproute does?)
- report_fail "Couldn't add gateway $GATEWAY."
+ if ! route add default gw $GATEWAY; then
+ err_append "Adding gateway failed."
return 1
fi
fi
;;
*)
- report_err "Profile error: must be either IP=dhcp or IP=static."
+ err_append "IP=\"\" must be either 'dhcp' or 'static'."
return 1
;;
esac
# set the hostname
if [[ -n "$HOSTNAME" ]]; then
- report_debug ethernet_up hostname "$HOSTNAME"
if ! hostname "$HOSTNAME"; then
- report_fail "Couldn't set hostname."
+ err_append "Setting hostname failed."
return 1
fi
fi
# Generate a new resolv.conf
- if [[ -n "$DNS1" || -n "$DNS" ]]; then
+ if [[ -n "$DNS1" ]] || [[ -n "$DNS" ]]; then
: >/etc/resolv.conf
[[ -n "$DOMAIN" ]] && echo "domain $DOMAIN" >>/etc/resolv.conf
@@ -122,141 +94,36 @@ ethernet_up() {
done
fi
fi
-
- # successfully running a new profile; erase any suspended profiles on this interface
- local iface="$INTERFACE"
- find "$STATE_DIR/suspend/" -maxdepth 1 -type f -printf '%f\n' \
- | while read prof; do
- # the pipe to "while read" will create a subshell, so sourced variables will already be in a sandbox
- # we just need to clear INTERFACE which is all we care about
- unset INTERFACE
- . "$STATE_DIR/suspend/$prof"
- if [[ "$iface" == "$INTERFACE" ]]; then
- rm "$STATE_DIR/suspend/$prof"
- fi
- done
-
return 0
}
ethernet_down() {
- load_profile "$1"
- case "$IP" in
+ 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")
+ if [[ -f /var/run/dhclient-${INTERFACE}.pid ]]; then
+ 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 2>&1
+ if [[ -f /var/run/dhcpcd-${INTERFACE}.pid ]]; then
+ dhcpcd -qx "$INTERFACE"
fi
fi
;;
static)
- if [[ -n "$GATEWAY" ]]; then
- report_debug ethernet_down route del default gw "$GATEWAY"
- route del default gw "$GATEWAY"
- fi
+ [[ -n "$GATEWAY" ]] && route del default gw $GATEWAY
;;
esac
-
- report_debug ethernet_down ifdown
- ethernet_control "$INTERFACE" down
-}
-
-# CONNECTION_query $INTERFACE [ profile | enabled (i.e. not rfkill-ed) | active (i.e. ifup'd) | associated | address ]
-ethernet_query() {
- local INTERFACE="$1" REQUEST="$2"
- # report_debug ethernet_query "$@"
- case "$REQUEST" in
-
- # JP: this duplicates code in ethernet-iproute, but doing so was necessary to refactor these functions into the CONNECTION scripts
- profile)
- # return code = 1 if iface is available to be used
- # return code = 0 if unavailable (disabled, or in use by another profile or by external config)
- # echo "" | "disabled" | "external" | PROFILE_NAME
- if [[ ! -f "$STATE_DIR/interfaces/$INTERFACE" ]]; then
- # interface is up but has no registered profile
- if ethernet_query "$INTERFACE" address; then
- set_iface up "$INTERFACE" external
- echo "external"
- return 0
- fi
- # no ip address, count as inactive
- # should we ifconfig iface down? no, may be up for a reason
- return 1
-
- else # interface is up and thinks it's running a profile
- . "$STATE_DIR/interfaces/$INTERFACE" # these files should only contain a PROFILE=... statement
- case "$PROFILE" in
- external)
- echo "external"
- return 0
- ;;
- disabled) # shouldn't happen for non-wireless interfaces, but leaving this here in case...
- # iface should be down if it's disabled
- ethernet_control "$INTERFACE" down
- echo "disabled"
- return 0
- ;;
- *)
- ( # use subshell to prevent overwriting currently loaded profile
- . "$STATE_DIR/profiles/$PROFILE"
- if ! ethernet_query "$INTERFACE" address; then
- report_warn "INTERFACE $INTERFACE is inactive; no longer being controlled by $PROFILE"
- set_profile down "$PROFILE"
- exit 1
- else
- echo "$PROFILE" # associated with loaded profile
- exit 0
- fi
- )
- # return $?
- ;;
- esac
- fi
- ;;
-
- active)
- ifconfig "$INTERFACE" | fgrep -qw UP
- # cat /sys/class/net/wlan0/carrier >/dev/null # gives err if iface inactive, 0 if up but not connected to network, 1 if connected
- ;;
-
- address)
- ifconfig "$INTERFACE" | fgrep -q addr:
- ;;
-
- *) return 1 ;;
- esac
-}
-
-# CONNECTION_control $INTERFACE [ up | down | forcedown | enable | disable ]
-ethernet_control() {
- local INTERFACE="$1" ACTION="$2"
- #report_debug ethernet_control "$@"
- case "$ACTION" in
- up) ifconfig "$INTERFACE" up 2>/dev/null
- ethernet_query "$INTERFACE" active
- ;;
- down|forcedown)
- ifconfig "$1" 0.0.0.0
- if [[ "$2" = forcedown ]] || ! quirk nodown; then
- ifconfig "$INTERFACE" down
- fi
- ;;
- *) return 1
+ ifconfig $INTERFACE 0.0.0.0
+
+ case "$CONNECTION" in # Keep interface up for wireless
+ ethernet|ethernet-old)
+ quirk "nodown" || ifconfig $INTERFACE down
;;
esac
}
-ethernet_verify() {
- local INTERFACE="$1"
- # do nothing
-}
-
-ethernet_$1 "$2" "$3"
+ethernet_$1 $2
exit $?
# vim: set ts=4 et sw=4: