3 # $Id: ifup,v 1.46 2000/09/03 02:29:02 baggins Exp $
5 PATH=/sbin:/usr/sbin:/bin:/usr/bin
7 . /etc/sysconfig/network
8 . /etc/rc.d/init.d/functions
9 . /etc/sysconfig/network-scripts/.functions
16 nls "usage: ifup <device name>" >&2
20 if [ `id -u` != 0 ]; then
21 if [ -x /sbin/usernetctl ]; then
22 exec /sbin/usernetctl $DEV up
24 nls "Users cannot control this device." >&2
28 if [ -f "/etc/sysconfig/interfaces/ifcfg-$DEV" ] ; then
29 CONFIG="/etc/sysconfig/interfaces/ifcfg-$DEV"
36 if [ "foo$2" = "fooboot" ] && is_no "${ONBOOT}"; then
42 # full network device name
44 # detect network device type (dummy, eth ..)
45 DEVICETYPE=`echo $FULLDEVNAME | sed "s/[0-9]*$//"`
46 # real name of device (is eth0 for eth0,eth0:1,eth0:alias)
47 DEVICE=`echo $FULLDEVNAME | sed 's/:.*//g'`
49 if echo "$FULLDEVNAME" | grep -q ':' ; then
56 if is_yes "$BOOTP"; then
60 if [ "$BOOTPROTO" = bootp ]; then
64 if [ "$BOOTPROTO" = "dhcp" ]; then
68 # IPv4, IPv6 or both ?
69 [ -n "$IPV6_ADDR" ] && IPv6=yes || IPv6=no
70 [ -n "$IPADDR" -o -n "$DYNIP" ] && IPv4=yes || IPv4=no
73 [ -f /etc/sysconfig/interfaces/tnlcfg-${FULLDEVNAME} ] && TNL=yes || TNL=no
75 if [ "$TNL" = "yes" ]; then
79 if [ -z "$PREFIX" -a -z "$NETMASK" ]; then
83 if [ -z "$PREFIX" -a -n "$NETMASK" ]; then
84 PREFIX="`calcprefix $NETMASK`"
87 if [ -z "$NETMASK" -a -n "$PREFIX" ]; then
88 NETMASK="`calcnetmask $PREFIX`"
91 is_yes "$MULTICAST" && MULTICAST=on || MULTICAST=off
92 [ -n "$SRC_ADDR" ] && SRC_ADDR="src ${SRC_ADDR}" || SRC_ADDR=""
93 [ -n "$SCOPE" ] && SCOPE="scope ${SCOPE}" || SCOPE=""
96 is_yes "$ARP" && ARP=on || ARP=off
97 elif [ "$DEVICETYPE" = "eth" ]; then
103 OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}"
105 if [ -x "$OTHERSCRIPT" ]; then
106 if [ "$DEFAULTHANDLING" = "yes" ]; then
107 $OTHERSCRIPT $CONFIG $2
109 exec $OTHERSCRIPT $CONFIG $2
113 # is this device available? (this catches PCMCIA devices for us)
114 if ! (/sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1); then
115 echo "Delaying ${FULLDEVNAME} initialization."
119 if [ "$SLAVE" = "yes" -a "$ISALIAS" = "no" -a "$MASTER" != "" -a -x /sbin/ifenslave ]; then
120 RFLAG="" ; [ "${RECIEVE-ONLY}" = "yes" ] && RFLAG="-r"
122 ip link set ${DEVICE} down
123 echo "Enslaving $DEVICE to $MASTER"
124 ifenslave $RFLAG "$MASTER" "$DEVICE"
129 if [ -n "$MACADDR" ]; then
130 ip link set ${DEVICE} address ${MACADDR}
133 if [ -n "$DYNIP" -a "$ISALIAS" = "no" ]; then
135 echo -n "`nls "Determining IP information for"` $FULLDEVNAME..."
136 if [ "$DYNIP" = "pump" ]; then
137 if /sbin/pump -i $FULLDEVNAME ; then
144 if /sbin/dhcpcd $FULLDEVNAME "$DHCPOPTIONS" ; then
154 if [ "$IPv4" = "yes" ]; then
155 if [ -z "$PREFIX" ]; then
156 eval `/bin/ipcalc --prefix ${IPADDR}`
159 if [ -z "$BROADCAST" ]; then
160 eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}`
163 if [ -z "$NETWORK" ]; then
164 eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}`
168 ip link set ${DEVICE} multicast ${MULTICAST} arp ${ARP} up
171 if [ "$IPv4" = "yes" ]; then
172 if [ -n "$REMIP" ]; then
173 ip -family inet addr add ${IPADDR} peer ${REMIP} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE}
175 ip -family inet addr add ${IPADDR}/${PREFIX} broadcast ${BROADCAST} dev ${DEVICE} label ${FULLDEVNAME} ${SCOPE}
177 # Another IPv4 aliases support
178 for ADDR4 in ${IPADDR_ALIASES} ; do
179 ip -family inet addr add ${ADDR4} dev ${DEVICE} label ${FULLDEVNAME} broadcast \+
184 if is_yes "${IPV6_NETWORKING}"; then
185 proc_net ipv6/conf/${DEVICE}/autoconf start 0 1 IPV6_AUTOCONF "IPv6 address autoconfiguration on ${DEVICE}"
187 for ADDR6 in ${IPV6_ADDR} ; do
188 ip -family inet6 addr add ${ADDR6} dev ${DEVICE} label ${FULLDEVNAME}
191 if is_no "${IPV6_FORWARDING}" ; then
192 if [ "${GATEWAY6}" != "" ]; then
193 if [ "${GATEWAY6DEV}" = "" -o "${GATEWAY6DEV}" = "${FULLDEVNAME}" ]; then
194 # set up default gateway
195 ip -family inet6 route add default via ${GATEWAY6} dev ${DEVICE}
199 if [ "${IPV6_GLOBALROUTE}" != "" ] ; then
200 if [ "${IPV6_GLOBALROUTEDEV}" = "" -o "${IPV6_GLOBALROUTEDEV}" = "${FULLDEVNAME}" ]; then
201 ip -family inet6 route add 2000::/3 via ${IPV6_GLOBALROUTE} dev ${DEVICE}
207 if [ "${GATEWAY}" != "" ]; then
208 if [ "${GATEWAYDEV}" = "" -o "${GATEWAYDEV}" = "${FULLDEVNAME}" ]; then
209 # set up default gateway
210 ip -family inet route add default via ${GATEWAY} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
215 if [ "$BOOTPROTO" = bootp -a "$ISALIAS" = no ]; then
216 if [ -n "$GATEWAYS" ]; then
217 for gw in $GATEWAYS; do
218 if [ "$gw" != "${DEFGW}" ]; then
219 ip -family inet route add default via $gw dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
224 if [ -n "$DNSSRVS" -a -n "$SEARCH" ]; then
225 echo "search $SEARCH" > /etc/resolv.conf
226 for dns in $DNSSRVS; do
227 echo "nameserver $dns" >> /etc/resolv.conf
231 if [ -n "$BOOTPHOSTNAME" -a -n "$NEEDHOSTNAME" ]; then
232 set_hostname $BOOTPHOSTNAME
237 if is_yes "$IPX"; then
238 /etc/sysconfig/network-scripts/ifup-ipx $DEVICE
241 exec /etc/sysconfig/network-scripts/ifup-post $CONFIG