#! /bin/bash . /usr/lib/network/network ethernet_up() { load_profile $1 if [[ ! -e /sys/class/net/"$INTERFACE" ]]; then if ! echo "$INTERFACE"| fgrep ":"; then report_fail "interface $INTERFACE does not exist" return 1 fi fi report_debug ethernet_up ifup set_interface up $INTERFACE if ip link show $INTERFACE| fgrep -q "NO-CARRIER"; then report_fail "No connection" return 1 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" 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 ifconfig "$INTERFACE" down report_fail "WPA Authentication/Association Failed" return 1 fi fi 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 "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 # If using own dns, tell dhcpcd to NOT replace resolv.conf [[ -n "$DNS1" || -n "$DNS" ]] && DHCP_OPTIONS="-C resolv.conf $DHCP_OPTIONS" # Start dhcpcd 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 "DHCP IP lease attempt failed." 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 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 report_fail "Adding gateway $GATEWAY failed." return 1 fi fi ;; *) report_fail "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 "Setting hostname failed." return 1 fi fi # Generate a new resolv.conf if [[ -n "$DNS1" ]] || [[ -n "$DNS" ]]; then : >/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 fi ;; esac report_debug ethernet_down ifdown set_interface down $INTERFACE } # Returns status of profile - is it still functional? ethernet_status() { if ! ip link show dev ra0 | fgrep -q "state UP"; then return 1 fi } ethernet_$1 $2 exit $? # vim: set ts=4 et sw=4: