summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--src/connections/ethernet-iproute119
2 files changed, 122 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index aa91108..b8646ac 100644
--- a/Makefile
+++ b/Makefile
@@ -22,9 +22,9 @@ install:
install-wireless:
install -d $(DESTDIR)/usr/lib/network/connections $(DESTDIR)/usr/bin \
$(DESTDIR)/etc/rc.d
- install -m755 src/wireless-dbus $(DESTDIR)/usr/lib/network/connections
- install -m755 src/netcfg-auto-wireless $(DESTDIR)/usr/bin
- install -m755 src/net-auto $(DESTDIR)/etc/rc.d
+ install -m755 src-wireless/wireless-dbus $(DESTDIR)/usr/lib/network/connections
+ install -m755 src-wireless/netcfg-auto-wireless $(DESTDIR)/usr/bin
+ install -m755 src-wireless/net-auto $(DESTDIR)/etc/rc.d
tarball:
sed -i "s/NETCFG_VER=.*/NETCFG_VER=$(VERSION)/g" src/netcfg
diff --git a/src/connections/ethernet-iproute b/src/connections/ethernet-iproute
new file mode 100644
index 0000000..a491419
--- /dev/null
+++ b/src/connections/ethernet-iproute
@@ -0,0 +1,119 @@
+#! /bin/bash
+. /usr/lib/network/network
+
+error()
+{
+ err_append "$*"
+ ip addr flush $INTERFACE &>/dev/null
+ quirk "nodown" || ip link set $INTERFACE down &>/dev/null
+ exit 1
+}
+
+ethernet_up() {
+ load_profile $1
+
+ if [[ ! -e /sys/class/net/$INTERFACE ]]; then
+ if ! echo "$INTERFACE"|grep ":"; then
+ error "Interface $INTERFACE does not exist"
+ fi
+ fi
+
+ if ip link show $INTERFACE|grep -q "NO-CARRIER"; then
+ error "No connection available"
+ fi
+
+ ip link set $INTERFACE up
+
+ if checkyesno ${AUTH8021X:-no}; then
+ . ${SUBR_DIR}/8021x
+ [[ -z "$WPA_CONF" ]] && WPA_CONF="/etc/wpa_supplicant.conf"
+ [[ -z "$WPA_OPTS" ]] && WPA_OPTS="-Dwired"
+
+ start_wpa "$INTERFACE" "$WPA_CONF" "$WPA_OPTS"
+ if ! wpa_check "$INTERFACE"; then
+ ip link set $INTERFACE down
+ 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"
+
+ if ! dhcpcd -qL -t ${DHCP_TIMEOUT:-10} $DHCP_OPTIONS $INTERFACE; then
+ error "DHCP IP lease attempt failed"
+ return 1
+ fi
+ ;;
+ static)
+ if [[ -n "$ADDR" ]]; then
+ if ! ip addr add ${ADDR}/24 brd + dev $INTERFACE; then
+ error "Could not configure interface"
+ fi
+ fi
+ if [[ -n "$GATEWAY" ]]; then
+ if ! ip route add default via $GATEWAY; then
+ error "Adding gateway failed"
+ return 1
+ fi
+ fi
+ ;;
+ *)
+ error "Profile error: IP must be either 'dhcp' or 'static'"
+ return 1
+ ;;
+ esac
+
+ if [[ -n "$IPCFG" ]]; then
+ for line in "${IPCFG[@]}"; do
+
+ if ! ip $line; then
+ error "Could not configure interface"
+ fi
+ done
+ fi
+
+ # Set hostname
+ if [[ -n "$HOSTNAME" ]]; then
+ if ! hostname $HOSTNAME; then
+ error "Cannot set hostname"
+ return 1
+ 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
+
+ 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
+
+ if [[ "$IP" == "dhcp" ]]; then
+ if [[ -f /var/run/dhcpcd-${INTERFACE}.pid ]]; then
+ dhcpcd -qx $INTERFACE
+ fi
+ fi
+
+ ip addr flush $INTERFACE
+ quirk "nodown" || ip link set $INTERFACE down
+
+}
+
+ethernet_$1 $2
+exit $?
+# vim: set ts=4 et sw=4: