aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Reisner <d@falconindy.com>2011-04-28 22:42:11 -0400
committerTom Gundersen <teg@jklm.no>2011-05-22 18:46:04 +0200
commita3314c769768d8c40b46767d26f9783d4f359358 (patch)
tree336b66a4585fe840febcd50304c490f0beee129d
parent68c61ed4ce2eddf29c4f047133406d72162fd396 (diff)
downloadinitscripts-a3314c769768d8c40b46767d26f9783d4f359358.tar.xz
network: deprecate net-tools, add iproute2 support
Provide large warnings when net-tools functionality is used. Add documentation in rc.conf for the new iproute2 based config. Signed-off-by: Tom Gundersen <teg@jklm.no>
-rw-r--r--PKGBUILD7
-rwxr-xr-xnetwork118
-rw-r--r--rc.conf40
-rwxr-xr-xrc.sysinit2
4 files changed, 102 insertions, 65 deletions
diff --git a/PKGBUILD b/PKGBUILD
index c5f2acd..5c9764c 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -9,9 +9,10 @@ groups=('base')
conflicts=('initscripts')
provides=('initscripts=9999')
backup=(etc/inittab etc/rc.conf etc/rc.local etc/rc.local.shutdown)
-depends=('glibc' 'bash' 'grep' 'coreutils' 'udev>=139-1'
- 'net-tools' 'ncurses' 'kbd' 'findutils' 'sysvinit')
-optdepends=('bridge-utils: Network bridging support'
+depends=('glibc' 'bash' 'grep' 'coreutils' 'udev>=139-1' 'iproute2'
+ 'ncurses' 'kbd' 'findutils' 'sysvinit')
+optdepends=('net-tools: legacy networking support'
+ 'bridge-utils: Network bridging support'
'dhcpcd: DHCP network configuration'
'wireless_tools: Wireless networking')
source=()
diff --git a/network b/network
index 9cd6109..7350149 100755
--- a/network
+++ b/network
@@ -7,6 +7,49 @@ for s in wireless bonding bridges dhcpcd; do
[[ -f /etc/conf.d/$s ]] && . "/etc/conf.d/$s"
done
+# helper function to determine if legacy network support is needed
+need_legacy() {
+ if [[ -z $interface ]]; then
+ return 0 # need legacy
+ fi
+
+ return 1 # enough present for iproute2 support
+}
+
+deprecated() {
+ printf "${C_FAIL}Warning:${C_CLEAR} This functionality is deprecated.\n"
+ printf " Please refer to /etc/rc.conf on how to define a single wired\n"
+ printf " connection, or use a utility such as netcfg.\n"
+}
+
+network_up() {
+ /usr/sbin/ip link set dev $interface up || return 1
+
+ if [[ $address ]]; then
+ for var in netmask gateway; do
+ if [[ -z ${!var} ]]; then
+ printf "${C_FAIL}Error: static address defined without $var!\n"
+ return 1
+ fi
+ done
+ /usr/sbin/ip addr add $address/$netmask dev $interface || return 1
+ /usr/sbin/ip route add default via $gateway || return 1
+ else
+ /sbin/dhcpcd $DHCPCD_ARGS $interface || return 1
+ fi
+}
+
+network_down() {
+ if [[ -f /var/run/dhcpcd-$interface.pid ]]; then
+ /sbin/dhcpcd -k $interface || return 1
+ else
+ /usr/sbin/ip route del default || return 1
+ /usr/sbin/ip addr flush dev $interface || return 1
+ fi
+
+ /usr/sbin/ip link set dev $interface down || return 1
+}
+
ifup() {
local ifcfg=${!1}
@@ -179,29 +222,34 @@ bridge_down() {
case "$1" in
start)
+ # deprecation check
+ need_legacy && deprecated
if ! ck_daemon network; then
echo "Network is already running. Try 'network restart'"
exit
fi
-
stat_busy "Starting Network"
error=0
- # bring up bridge interfaces
- bridge_up
- # bring up ethernet interfaces
- for ifline in ${INTERFACES[@]}; do
- if [[ $ifline = ${ifline#!} ]]; then
- ifup $ifline || error=1
- fi
- done
- # bring up bond interfaces
- bond_up
- # bring up routes
- for rtline in "${ROUTES[@]}"; do
- if [ "$rtline" = "${rtline#!}" ]; then
- rtup $rtline || error=1
- fi
- done
+ if need_legacy; then
+ # bring up bridge interfaces
+ bridge_up
+ # bring up ethernet interfaces
+ for ifline in ${INTERFACES[@]}; do
+ if [[ $ifline = ${ifline#!} ]]; then
+ ifup $ifline || error=1
+ fi
+ done
+ # bring up bond interfaces
+ bond_up
+ # bring up routes
+ for rtline in "${ROUTES[@]}"; do
+ if [ "$rtline" = "${rtline#!}" ]; then
+ rtup $rtline || error=1
+ fi
+ done
+ else
+ network_up
+ fi
if ((error == 0)); then
add_daemon network
stat_done
@@ -210,6 +258,8 @@ case "$1" in
fi
;;
stop)
+ # deprecation check
+ need_legacy && deprecated
if [[ $NETWORK_PERSIST =~ yes|YES && $RUNLEVEL == [06] ]]; then
status "Skipping Network Shutdown" true
exit 0
@@ -218,20 +268,24 @@ case "$1" in
stat_busy "Stopping Network"
rm_daemon network
error=0
- for rtline in "${ROUTES[@]}"; do
- if [[ $rtline = ${rtline#!} ]]; then
- rtdown $rtline || error=1
- fi
- done
- # bring down bond interfaces
- bond_down
- for ifline in ${INTERFACES[@]}; do
- if [[ $ifline = ${ifline#!} ]]; then
- ifdown $ifline || error=1
- fi
- done
- # bring down bridge interfaces
- bridge_down
+ if need_legacy; then
+ for rtline in "${ROUTES[@]}"; do
+ if [[ $rtline = ${rtline#!} ]]; then
+ rtdown $rtline || error=1
+ fi
+ done
+ # bring down bond interfaces
+ bond_down
+ for ifline in ${INTERFACES[@]}; do
+ if [[ $ifline = ${ifline#!} ]]; then
+ ifdown $ifline || error=1
+ fi
+ done
+ # bring down bridge interfaces
+ bridge_down
+ else
+ network_down
+ fi
if ((error == 0)); then
stat_done
else
@@ -244,6 +298,8 @@ case "$1" in
$0 start
;;
ifup|ifdown|iflist|rtup|rtdown|rtlist)
+ # deprecation check
+ need_legacy && deprecated
$1 $2
;;
*)
diff --git a/rc.conf b/rc.conf
index 89ea27e..5ebcd35 100644
--- a/rc.conf
+++ b/rc.conf
@@ -59,44 +59,24 @@ USELVM="no"
#
HOSTNAME="myhost"
-# Use 'ifconfig -a' or 'ls /sys/class/net/' to see all available interfaces.
+# Use 'ip addr' or 'ls /sys/class/net/' to see all available interfaces.
#
-# Interfaces to start at boot-up (in this order)
-# Declare each interface then list in INTERFACES
-# - prefix an entry in INTERFACES with a ! to disable it
-# - no hyphens in your interface names - Bash doesn't like it
+# Wired network setup
+# - interface: name of device (required)
+# - address: IP address (leave blank for DHCP)
+# - netmask: subnet mask (ignored for DHCP)
+# - gateway: default route (ignored for DHCP)
#
-# DHCP: Set your interface to "dhcp" (eth0="dhcp")
-# Wireless: See network profiles below
-#
-
-#Static IP example
-#eth0="eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"
-eth0="dhcp"
-INTERFACES=(eth0)
-# Routes to start at boot-up (in this order)
-# Declare each route then list in ROUTES
-# - prefix an entry in ROUTES with a ! to disable it
-#
-gateway="default gw 192.168.0.1"
-ROUTES=(!gateway)
+interface=
+address=
+netmask=
+gateway=
# Setting this to "yes" will skip network shutdown.
# This is required if your root device is on NFS.
NETWORK_PERSIST="no"
-# Enable these network profiles at boot-up. These are only useful
-# if you happen to need multiple network configurations (ie, laptop users)
-# - set to 'menu' to present a menu during boot-up (dialog package required)
-# - prefix an entry with a ! to disable it
-#
-# Network profiles are found in /etc/network.d
-#
-# This now requires the netcfg package
-#
-#NETWORKS=(main)
-
# -----------------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------------
diff --git a/rc.sysinit b/rc.sysinit
index 5a21539..9d30da2 100755
--- a/rc.sysinit
+++ b/rc.sysinit
@@ -115,7 +115,7 @@ run_hook sysinit_udevsettled
# bring up the loopback interface
[[ -d /sys/class/net/lo ]] && \
- status "Bringing up loopback interface" /sbin/ifconfig lo 127.0.0.1 up
+ status "Bringing up loopback interface" /usr/sbin/ip link set up dev lo
# FakeRAID devices detection
if [[ $USEDMRAID =~ yes|YES && -x /sbin/dmraid ]]; then