3 # $Id: ifup,v 1.34 1999/12/15 18:41:09 misiek 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 echo "usage: ifup <device name>" >&2
20 if [ `id -u` != 0 ]; then
21 if [ -x /usr/sbin/usernetctl ]; then
22 exec /usr/sbin/usernetctl $DEV up
24 echo "Users cannot control this device." >&2
28 IFCONFIGS="`ls /etc/sysconfig/interfaces/ifcfg-*|egrep -v '~$' 2> /dev/null`"
29 if [ "$IFCONFIGS" ]; then
30 IFCONFIGS="`egrep -L '^#!' $IFCONFIGS`"
32 if [ "$IFCONFIGS" ]; then
33 CONFIG="`egrep -l "^DEVICE=[\"\']*$DEV[\"\']*\$" $IFCONFIGS`"
36 if [ -z "$CONFIG" ]; then
42 if [ "foo$2" = "fooboot" -a "${ONBOOT}" = "no" ]; then
48 # full network device name
50 # detect network device type (dummy, eth ..)
51 DEVICETYPE=`echo $FULLDEVNAME | sed "s/[0-9]*$//"`
52 # przyjmuje eth0 przy {eth0,eth0:1,eth0:alias}
53 DEVICE=`echo $FULLDEVNAME | sed 's/:.*//g'`
55 if echo "$FULLDEVNAME" | grep -q ':' ; then
62 if [ "$BOOTP" = "yes" ]; then
66 if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = "dhcp" ]; then
70 # IPv4, IPv6 or both ?
71 [ -n "$IPV6_ADDR" ] && IPv6=yes || IPv6=no
72 [ -n "$IPADDR" -o "$PUMP" = "true" ] && IPv4=yes || IPv4=no
75 [ -f /etc/sysconfig/interfaces/tnlcfg-${FULLDEVNAME} ] && TNL=yes || TNL=no
77 if [ "$TNL" = "yes" ]; then
81 if [ -z "$PREFIX" -a -z "$NETMASK" ]; then
85 if [ -z "$PREFIX" -a -n "$NETMASK" ]; then
86 PREFIX="`calcprefix $NETMASK`"
89 if [ -z "$NETMASK" -a -n "$PREFIX" ]; then
90 NETMASK="`calcnetmask $PREFIX`"
93 [ "$MULTICAST" = "yes" ] && MULTICAST=on || MULTICAST=off
94 [ -n "$SRC_ADDR" ] && SRC_ADDR="src ${SRC_ADDR}" || SRC_ADDR=""
95 [ -z "$PROTOCOL" ] && PROTOCOL=ip
98 [ "$ARP" = "yes" ] && ARP=on || ARP=off
99 elif [ "$DEVICETYPE" = "eth" ]; then
105 OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}"
107 if [ -x "$OTHERSCRIPT" -a "$IPv4" = "yes" ]; then
108 if [ "$DEFAULTHANDLING" = "yes" ]; then
109 $OTHERSCRIPT $CONFIG $2
111 exec $OTHERSCRIPT $CONFIG $2
115 # is this device available? (this catches PCMCIA devices for us)
116 if ! (/sbin/ip link set multicast ${MULTICAST} dev ${DEVICE} > /dev/null 2>&1); then
117 echo "Delaying ${FULLDEVNAME} initialization."
121 if [ "$SLAVE" = "yes" -a "$ISALIAS" = "no" -a "$MASTER" != "" -a -x /sbin/ifenslave ]; then
122 RFLAG="" ; [ "${RECIEVE-ONLY}" = "yes" ] && RFLAG="-r"
124 ip link set ${DEVICE} down
125 echo "Enslaving $DEVICE to $MASTER"
126 ifenslave $RFLAG "$MASTER" "$DEVICE"
131 if [ -n "$MACADDR" ]; then
132 ip link set ${DEVICE} address ${MACADDR}
135 if [ -n "$PUMP" -a "$ISALIAS" = "no" ]; then
137 echo -n "Determining IP information for $FULLDEVNAME..."
138 if /sbin/pump -i $FULLDEVNAME ; then
147 if [ "$IPv4" = "yes" ]; then
148 if [ -z "$PREFIX" ]; then
149 eval `/bin/ipcalc --prefix ${IPADDR}`
152 if [ -z "$BROADCAST" ]; then
153 eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}`
156 if [ -z "$NETWORK" ]; then
157 eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}`
161 ip link set ${DEVICE} multicast ${MULTICAST} arp ${ARP} up
163 if [ "$IPv4" = "yes" ]; then
164 ip -family inet addr add ${IPADDR}/${PREFIX} broadcast ${BROADCAST} dev ${DEVICE} label ${FULLDEVNAME}
166 # Another IPv4 aliases support
167 for ADDR4 in ${IPADDR_ALIASES} ; do
168 ip -family inet addr add ${ADDR4} dev ${DEVICE} label ${FULLDEVNAME} broadcast \+
174 if [ "${IPV6_NETWORKING}" = "yes" ] ; then
176 for ADDR6 in ${IPV6_ADDR} ; do
177 ip -family inet6 addr add ${ADDR6} dev ${DEVICE} label ${FULLDEVNAME}
178 ip -family inet6 route add ${ADDR6} dev ${DEVICE} ${TNLOPTS}
181 # only for sit tunnel device
182 if (ip tunnel show ${FULLDEVNAME} 2>&1 | grep -q "ipv6/ip") && [ "$TNL" = "yes" ]; then
184 for ADDR4 in `ip -4 addr | grep inet | grep -v "127\..*\..*\..*" | \
185 sed -e "s#.*inet ##" | sed -e "s#/.*##" | xargs`; do
186 ip -family inet6 addr add fe80::${ADDR4}/10 dev ${DEVICE} \
187 label ${FULLDEVNAME} scope link 2> /dev/null
194 # hack for 2.2 kernels
195 if [ "$IPv4" = "yes" ]; then
196 if [ "$ISALIAS" = "no" -a -z "`ip -f inet route | sed "s/ .*//" | grep ${NETWORK}`" ]; then
197 ip -family inet route add ${NETWORK}/${PREFIX} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
199 ip -family inet route add ${IPADDR}/32 dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
203 # . /etc/sysconfig/network
205 if [ "${GATEWAY}" != "" ]; then
206 if [ "${GATEWAYDEV}" = "" -o "${GATEWAYDEV}" = "${FULLDEVNAME}" ]; then
207 # set up default gateway
208 ip -family inet route add default via ${GATEWAY} dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
213 if [ "$BOOTPROTO" = bootp -a "$ISALIAS" = no ]; then
214 if [ -n "$GATEWAYS" ]; then
215 for gw in $GATEWAYS; do
216 if [ "$gw" != "${DEFGW}" ]; then
217 ip -family inet route add default via $gw dev ${DEVICE} ${SRC_ADDR} ${TNLOPTS}
222 if [ -n "$DNSSRVS" -a -n "$SEARCH" ]; then
223 echo "search $SEARCH" > /etc/resolv.conf
224 for dns in $DNSSRVS; do
225 echo "nameserver $dns" >> /etc/resolv.conf
229 if [ -n "$BOOTPHOSTNAME" -a -n "$NEEDHOSTNAME" ]; then
230 set_hostname $BOOTPHOSTNAME
235 if [ "$IPX" = "yes" ]; then
236 /etc/sysconfig/network-scripts/ifup-ipx $DEVICE
239 exec /etc/sysconfig/network-scripts/ifup-post $CONFIG